Во овој текст ќе зборувам за ранливост кај софтверот за слушање на музика, VUPlayer, верзија 2.49 за Microsoft Windows оперативниот систем. Исто така во прилог е и едно видео (демонстрација) како таа слабост се искористува со превземање целосна контрола врз апликацијата и извршување на експлоатациски код со што ја контролираме следната инструкција на покренатата апликација, стартувајќи ја алатката calc.exe која се наоѓа во самиот оперативен систем.
Значи вака...првин го симнав програмот од официјалната страна: http://www.vuplayer.com/vuplayer.php. Го инсталирав софтверот и го уклучив преку дебагерот OllyDbg. Креирам листа (.m3u) со помош на Perlone-liner, со испечатени карактери "A" 1024 пати или 1024 бајти.
perl -e "print 'A' x 1024;" >> lista.m3u
Ја отворам листата во плеерот и апликацијата паѓа а дебагерот ме известува дека незнае како да продолжи бидејќи EIP регистарот е презапишан.
Презапишување на EIP регистарот
Од сликата можеме да видиме дека нашата lista.m3u (1024 "A" карактери) го пренатрупа баферот за складирање на плејлистата и го презапиша EIP регистарот (голема буква А во хексадецимално изразување е 41, повеќе: http://www.asciitable.com), како и ECX и EBP. Ова значи дека со наоѓање на соодветна адреса за враќање во меморијата или returning address, можеме да го контролираме целосно софтверот и неговиот тек и да извршуваме своеволен код (arbitrary code execution). Но за да го дознаеме точно бројот на "A" карактери со кој последните 4 ќе бидат RET адреса, ќе треба малку да тестираме и да дознаеме на колку точно бајти, баферот се пренатрупува. Зборуваме за класичен Stack Based Buffer Overflow напад. Бројот на бајтите (1024) го избрав случајно. Продолжив со намалување на "A" карактерите (од каде последните 4 карактери ги заменувам со BBBB редослед за да добијам 42424242) за да дојдам точно до границата на пренатрупувањето. Пробав 900, апликацијата ја вчитува листата успешно, пробав 1000, исто, пробав 1010, исто, пробав 1016 и забележав дека EIP регисарот е презапишан со адресата 42424242. Да не ве збунам, во листата имам значи 1012 "A" карактери и 4 "B" карактери = 1016 бајти.(...АААААААААА.....ААААААBBBB)
После успешното пронаоѓање на бројот на бајтите + RET адресата можеме да почнеме да го пишуваме нашиот експлоатациски код. Од 1012 бајти, можеме да избереме асален shellcode и остатокот е "ѓубре". Одам на веб конзолата на Metasploit конструкцијата (www.metasploit.com:55555) за да го изберам кодот што ќе го извршувам преку ранливата апликација. Го избрав Windows Execute Command со calc.exe командата (сум можел и mspaint.exe или командата net user jox joxy). Е сега, да позборувам малку за повратната адреса која ни е потребна за да ја ставиме во нашиот експлоит и да посочува кон нашиот shellcode. Има повеќе начини за пронаоѓање на RET адресата. Можев да ја искористам алатката на eEye Digital Security - Findjmp2.exe или да погледнам во дебагерот во делот кој што го покажува купот или Stack меморија. Во екстремни случаи го избирам Findjmp2.exe но овојпат си погледнав во купот и видов неколку адреси кои се корисни.
Memory Stack
Откако ја пронајдовме RET адресата ја заменуваме наместо тие 4 BBBB карактери во листата. Да се вратиме кај shellcode-от. На самиот сајт на Metasploit имаме опција да избереме каков вид на енкодер за shellcode-от да користиме. Кога користиме енкодер се зголемува и големината на кодот. Причината поради која не го користиме зададениот (default) енкодер на Metasploit - PexFnstenvSub е затоа што апликацијата VUPlayer не ни го извршува кодот за calc.exe, бидејќи самиот код содржи лоши карактери или bad chars како што е веќе зададено со \x00 (NULL бајт). Сум: Освен нулта бајтот, shellcode-от содржи и други лоши бајти што претставува малку комплициран процес за пронаоѓање на истите и впишување во Restricted Characters листата. Затоа ќе го искористиме енкодерот PexAlphaNum кој содржи само алфа-нумерички карактери. Енкодиран shellcode го содржи и декодерот во самиот себе. Значи добиваме shellcode: win32_exec -
EXITFUNC=thread CMD=calc.exe Size=351 Encoder=PexAlphaNum
Во кодот сум сменил наместо "A" во "J" или хексадецимално: 4А. Како што гледате слабоста од овој вид е пронајдена од страна на истражувачите Greg Linares и Expanders во верзијата 2.44 (2006 г.)
На кратко: Ставам во листата 461 "J" карактери и 200 NOP кодови (461+200=661 ѓубре). Бројките се по случаен избор, можев да ставам и 300 NOP и 361 "J" карактери. Плус shellcode-от и RET адресата. Редоследот во кодот оди: nopsled + shellcode + garbage + ret, и кога ќе се изврши RET адресата, посочува на почетокот од nopsled-от, кој користи за "лизгање" до shellcode-от и неговото извршување (calc.exe), и тука завршувам. Мфф. Подолу можете да погледнете видео од користење на експлоитот и креирање на листата како и експлоатација на VUPlayer 2.49 и стартување на алатката Calculator.
Повеќе од 50% од сите твитови на Twitter се објавени користејќи мобилни и веб-базирани алатки, а не платформата на Twitter.com. Најпопуларен сервис е TweetDeck со 19.7% искористеност. (Мај, 2009)