## # 漏洞背景
W32Dasm是一款URSoft开发的反汇编和调试工具。W32Dasm8.93及之前版本中的wsprintf函数存在缓冲区溢出漏洞。远程攻击者可通过一个超大的import或export函数名,利用此漏洞执行任意代码。
漏洞分析
1.查找漏洞资料
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2005-0308
http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=7369
2.漏洞分析
通过上面了解W32Dasm 8.93之前版本的wsprintf函数存在缓冲溢出漏洞,程序使用wsprintf()函数拷贝分析文件的引入/导出函数名到一个256字节的缓冲区,超长引入/导出函数名可发生缓冲区溢出,精心构建一个恶意可执行文件,诱使用户调试,可以进程权限在系统上执行任意指令。
,上od打开这个W32Dasm
查找所有模块调用
设置所有wsprintfa函数断点
切回主页面
点击运行
打开了程序W32Dasm
选择一个文件,这个用strings.exe这个文件
可以看到他已经断在第一个wsprintf位置
但是这个位置使用%lu无符号长整型整数,所以这个不是我们要找的,继续f9
直到45d8db,这里使用%s字符串
按f9
可以通过数据窗口看到变化,说明eax是将要拷贝的内容,edx就是拷贝过的内容,猜测可能是这个位置。
Buffer
Start 66bdcc (也就是edx)
End 66bec8 (也就是ebp)
首先通过栈跟随
可以看到66becc位置是返回地址。正常执行完成会跳到457ec0继续
返回地址:66becc
返回地址下一个地址:66bed0,shellcode
判断缓冲区大小,fc+4(ebp本身有4字节)=100(16进制),转10进制就是256,与漏洞报告对应。
通过上述分析可知,如果需要复现这个漏洞只需要将导入,导出表的名字构造过长,可以进行漏洞验证。
# 漏洞验证
根据pe结构分析如下
首先需要找到originalfristthunk(rva 相对虚拟地址)->再找到image-thunk-data(rva)->再通过rva找到真正位置
根据上述步骤,用lordpe找到位置。
打开strings.exe,点击目录
找到导入表
找到OriginalFirstThunk为12A74
点击ok,确定退回主界面,点击位置计算器
执行,再打开16进制编辑器
看到11074的位置是bc2c0100,它是偏移量,转回为12cbc
再次计算
12cbc位置,就可以到实际位置,1f8是序号(不管),shellcode从47位置开始写入
写入好的文件如下
使用W32Dasm打开修改strings.exe,可以看到计算器弹出来了
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论