Winamp是一个比较老的播放器,这里主要是通过winamp的一个poc分析,构造一个exp,
Winamp 栈溢出分析及利用漏洞预警
。主程序见附件winamp.exe, poc见附件poc.m3u。一、 Poc 分析
首先查看poc如下。发现除了前10多个字节为m3u文件格式规定内容外,其它部分均为A。
运行winamp.exe程序,将poc.m3u拖入主界面中,程序直接崩溃。为了查看崩溃时状态,我们将windbg设置为即时调试器。设置在cmd中使用命令:
windbg –I
再次运行poc,自动弹出windbg,发现崩溃状态:
出现异常,主要是esi+4不可写,修改esi=0045000,命令为:
r @esi=00445000
继续运行,停至
eax为41414141,[Eax+0c]处也不可读,且经分析,必须[eax+0c]的第5位为1,程序才会运行至strcpy处,所以修改eax=12c238
继续运行,发现程序运行至41414141,这样我们就完全控制了程序的执行,
电脑资料
《Winamp 栈溢出分析及利用漏洞预警》(https://www.unjs.com)。
二、定位异常
通过构造一个特殊的poc来定位:
定位结果如下:
esi=eax=306a4139, 程序最后的eip=6141326a
在poc文件中搜索
可知要绕过异常: 0x11e处的4字节 data需要满足:
[data+4]可读
且Byte ptr[data+c] 第5字节为1
最后选择了一个满足条件的data:719f7bf0
程序覆盖点在0×126处,此处存放jmp esp的地址(这里用7ffa4512,这是个比较通用的jmp esp地址)。
三、构造 exp
完整的exp构造见附件。主要包括4字节绕过异常放在0x11e处,0×126处放jmp esp指令地址,shellcode放在0x12a开始处。
测试:(环境xp sp3)
结果:能成功弹出计算器
附件下载地址: http://pan.baidu.com/s/1sjoCWMx