[投稿]Winamp 栈溢出分析及利用

Winamp是一个比较老的播放器,这里主要是通过winamp的一个poc分析,构造一个exp。主程序见附件winamp.exe, poc见附件poc.m3u。

一、Poc分析

首先查看poc如下。发现除了前10多个字节为m3u文件格式规定内容外,其它部分均为A。

1

运行winamp.exe程序,将poc.m3u拖入主界面中,程序直接崩溃。为了查看崩溃时状态,我们将windbg设置为即时调试器。设置在cmd中使用命令:

再次运行poc,自动弹出windbg,发现崩溃状态:

2

出现异常,主要是esi+4不可写,修改esi=0045000,命令为:

继续运行,停至

3

eax为41414141,[Eax+0c]处也不可读,且经分析,必须[eax+0c]的第5位为1,程序才会运行至strcpy处,所以修改eax=12c238

4

5

继续运行,发现程序运行至41414141,这样我们就完全控制了程序的执行。

6

二、定位异常

通过构造一个特殊的poc来定位:

7

定位结果如下:

esi=eax=306a4139, 程序最后的eip=6141326a

在poc文件中搜索

8

9

可知要绕过异常: 0x11e处的4字节 data需要满足:

[data+4]可读

且Byte ptr[data+c] 第5字节为1

最后选择了一个满足条件的data:719f7bf0

10

程序覆盖点在0x126处,此处存放jmp esp的地址(这里用7ffa4512,这是个比较通用的jmp esp地址)。

三、构造exp

完整的exp构造见附件。主要包括4字节绕过异常放在0x11e处,0x126处放jmp esp指令地址,shellcode放在0x12a开始处。

11

测试:(环境xp sp3)

结果:能成功弹出计算器

附件下载地址:http://pan.baidu.com/s/1sjoCWMx

赏金发放情况:本文获得140RMB,已于6.12日发放到作者账号。

征稿启事:91RI 一直相信“你不与人分享,谁与你分享”, 分享的确是件非常有意义的事情。为了让优秀的同学有 地方分享自己的独到见解,也为了让更多同学从分享中受益,同时我们也希望给那些愿意分享的小伙伴们一点点心意作为感谢,所以我们隆重了推出“有奖征文”活 动!本次活动的详情可以围观《征稿启事