对Mini-stream Ripper缓冲区溢出漏洞的体会
------------TTL
介绍二进制漏洞的文章可以说少之又少,写此博客仅仅想记录一下自己的学习过程。建议大家对二进制逆向,缓冲区溢出有所学习。顺便要感谢db,感谢小强。
这款播放器加载一个超大文件时,不会检查缓冲区的边界,从而导致溢出,覆盖eip。导致漏洞的产生。
首先使用Immunity Debugger加载一下程序。在命令行中使用!mona pattern_create 30000命令生成一个30000字符串的文件。关于mona的使用以及简单配置请参考http://www.hack80.com/thread-21042-1-1.html。
在生成字符串文件的目录下,找到该文件。
打开一看,是30000个字符串。
然后开始写python代码,生成一个test.m3u文件,让此软件读取,造成溢出。py代码写的很简单,如下:
filedata是刚才生成的字符串。这样执行py代码,在E盘就会生成一个test.m3u的文件,用此软件打开,发现软件崩溃。
一看便是缓冲区溢出漏洞,说明30000字符串已经造成溢出了。选择调试程序,看见程序崩溃前的现场,发现eip被覆盖成0x48376D48
刚才使用了mona插件的第一条命令,接下来使用第二条命令!mona pattern_offset 0x48376D48,利用这条指令我们可以算出缓冲区的长度。
5841并不是缓冲区溢出的大小,因为产生这30000字符串是循环产生的,通过UE我们可以看到,是每20280个字节为一个周期。
所以写exp的时候构造的长度应该是20280+5841=26121。
所以,exp代码如下:
这样生成的文件加载到我们的程序中发现:
返回地址已经被我们覆盖成想要的地址了,关于shellcode暂且不写。。。