复现W32Dasm缓冲区溢出(cve-2005-0308)

## # 漏洞背景

W32Dasm是一款URSoft开发的反汇编和调试工具。W32Dasm8.93及之前版本中的wsprintf函数存在缓冲区溢出漏洞。远程攻击者可通过一个超大的import或export函数名,利用此漏洞执行任意代码。

漏洞分析

1.查找漏洞资料

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2005-0308

image.png http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=7369 image.png

2.漏洞分析

通过上面了解W32Dasm 8.93之前版本的wsprintf函数存在缓冲溢出漏洞,程序使用wsprintf()函数拷贝分析文件的引入/导出函数名到一个256字节的缓冲区,超长引入/导出函数名可发生缓冲区溢出,精心构建一个恶意可执行文件,诱使用户调试,可以进程权限在系统上执行任意指令。

,上od打开这个W32Dasm image.png 查找所有模块调用 image.png 设置所有wsprintfa函数断点 image.png 切回主页面 image.png 点击运行 image.png 打开了程序W32Dasm image.png 选择一个文件,这个用strings.exe这个文件 image.png 可以看到他已经断在第一个wsprintf位置 image.png 但是这个位置使用%lu无符号长整型整数,所以这个不是我们要找的,继续f9 直到45d8db,这里使用%s字符串 image.png 按f9 image.png image.png 可以通过数据窗口看到变化,说明eax是将要拷贝的内容,edx就是拷贝过的内容,猜测可能是这个位置。 Buffer Start 66bdcc (也就是edx) End 66bec8 (也就是ebp) 首先通过栈跟随 image.png 可以看到66becc位置是返回地址。正常执行完成会跳到457ec0继续 返回地址:66becc 返回地址下一个地址:66bed0,shellcode image.png 判断缓冲区大小,fc+4(ebp本身有4字节)=100(16进制),转10进制就是256,与漏洞报告对应。 通过上述分析可知,如果需要复现这个漏洞只需要将导入,导出表的名字构造过长,可以进行漏洞验证。

# 漏洞验证

根据pe结构分析如下 首先需要找到originalfristthunk(rva 相对虚拟地址)->再找到image-thunk-data(rva)->再通过rva找到真正位置 根据上述步骤,用lordpe找到位置。 打开strings.exe,点击目录 image.png 找到导入表 image.png 找到OriginalFirstThunk为12A74 image.png 点击ok,确定退回主界面,点击位置计算器 image.png 执行,再打开16进制编辑器 image.png 看到11074的位置是bc2c0100,它是偏移量,转回为12cbc image.png 再次计算 12cbc位置,就可以到实际位置,1f8是序号(不管),shellcode从47位置开始写入 image.png 写入好的文件如下 image.png 使用W32Dasm打开修改strings.exe,可以看到计算器弹出来了 image.png

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐