首页
社区
课程
招聘
[原创]CVE-2012-1535 Flash漏洞调试笔记
发表于: 2012-8-24 21:11 11941

[原创]CVE-2012-1535 Flash漏洞调试笔记

2012-8-24 21:11
11941
0:000> g
(c4.4cc): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=1e0d0000 ebx=1e0cfff0 ecx=000004f4 edx=00000000 esi=0535df70 edi=053697f0
eip=103d7a0e esp=0013dd48 ebp=0013dd80 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00050202
Flash11g!DllUnregisterServer+0x23bfb5:
103d7a0e ff5008          call    dword ptr [eax+8]    ds:0023:1e0d0008=????????
.text:103D7D57                 mov     esi, eax
bp 103D7D57 ".echo Signal####################; r eax; .echo the virtual call:; dd poi(eax)+8 L1; .echo $$$$$$$$$$$$$$$$$$$$End; gc;"
0:000> g
Signal####################
eax=0535df70
the virtual call:
0535c1b8  100336df
####################

......

Signal####################
eax=0535df70
the virtual call:
0535c1b8  100336df
####################
Signal####################
eax=0535df70
the virtual call:
0535c1b8  00000000
####################
......

Signal####################
eax=0535df70
the virtual call:
0535c1b8  00000000
####################
Signal####################
eax=0535df70
the virtual call:
1e0d0008  ????????
####################
Signal####################
eax=0535df70
the virtual call:
1e0d0008  ????????
####################
*****************************************
esi=0535df70
1e0d0008  ????????
**************************************
eax=00000000 ebx=1e0cfff0 ecx=000004f4 edx=00000000 esi=0535df70 edi=053697f0
eip=103d7d6b esp=0013dd58 ebp=0013dd80 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00040246
Flash11g!DllUnregisterServer+0x23c312:
103d7d6b e88ffcffff      call    Flash11g!DllUnregisterServer+0x23bfa6 (103d79ff)
...
Signal####################
eax=0535df70
the virtual call:
0535c1b8  00000000
$$$$$$$$$$$$$$$$$$$$End
Signal####################
eax=0535df70
the virtual call:
0535c1b8  00000000
$$$$$$$$$$$$$$$$$$$$End
mem changed--------------
1e0d0000  ????????
eax=1e0cfff8 ebx=1e0cfff0 ecx=00e40206 edx=00000000 esi=0535df68 edi=053697f0
eip=103d7cfa esp=0013dd5c ebp=0013dd80 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00040246
Flash11g!DllUnregisterServer+0x23c2a1:
103d7cfa 7512            jne     Flash11g!DllUnregisterServer+0x23c2b5 (103d7d0e) [br=0]
.text:103D7C05                 push    8
.text:103D7C07                 jmp     short loc_103D7C1D
.text:103D7C09 ; ---------------------------------------------------------------------------
.text:103D7C09
.text:103D7C09 loc_103D7C09:                           ; CODE XREF: sub_103D7BD0+21j
.text:103D7C09                 cmp     eax, 0FFFFh
.text:103D7C0E                 ja      loc_103D7D76
.text:103D7C14                 mov     [ebp+var_14], 1
.text:103D7C1B                 push    4
.text:103D7C1D
.text:103D7C1D loc_103D7C1D:                           ; CODE XREF: sub_103D7BD0+37j
.text:103D7C1D                 pop     ebx             //执行完这个之后,ebx=8

.text:103D7D54                 add     ebx, [ebp+var_18]  //加上后,是不是ebx就确定了?
.text:103D7D57                 mov     esi, eax
0:000> g
trace ebx from where:
ebx=00000008
+++++++++++++++++++++++
eax=0535df70 ebx=00000008 ecx=00000001 edx=00000000 esi=05359048 edi=053697f0
eip=103d7d54 esp=0013dd5c ebp=0013dd80 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00040202
Flash11g!DllUnregisterServer+0x23c2fb:
103d7d54 035de8          add     ebx,dword ptr [ebp-18h] ss:0023:0013dd68=1e0cffe8
0:000> bp 103D7D57 ".echo Signal####################; r eax; .echo the virtual call:; dd poi(eax)+8 L1; .echo $$$$$$$$$$$$$$$$$$$$End; gc;"
0:000> bp 103D7D54 ".echo trace ebx from where:; r ebx;.echo +++++++++++++++++++++++; "
0:000> ba w1 0013dd68 ".echo poi(0013dd68) has changed:; dd 0013dd68 L1; .echo ------------------------------;"
0:000> g
poi(0013dd68) has changed:
0013dd68  1e0cffe8
------------------------------
eax=1e0cffe8 ebx=00000008 ecx=000000ff edx=00000000 esi=05359048 edi=053697f0
eip=103d7ce0 esp=0013dd50 ebp=0013dd80 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00040206
Flash11g!DllUnregisterServer+0x23c287:
103d7ce0 8b4510          mov     eax,dword ptr [ebp+10h] ss:0023:0013dd90=00003000
.text:103D7CD5 loc_103D7CD5:                           ; CODE XREF: sub_103D7BD0+D8j
.text:103D7CD5                 push    ebx
.text:103D7CD6                 push    [ebp+arg_4]
.text:103D7CD9                 push    edi
.text:103D7CDA                 call    dword ptr [edi+18h]  //关键函数啦
.text:103D7CDD                 mov     [ebp+var_18], eax ; poi(0013dd68) has changed
0:000> bp 103d7cda
0:000> ba w1 0013dd68 ".echo poi(0013dd68) has changed:; dd 0013dd68 L1; .echo ------------------------------;"
0:000> g
Breakpoint 2 hit
eax=00003000 ebx=00000008 ecx=05413000 edx=00000000 esi=05359048 edi=053697f0
eip=103d7cda esp=0013dd50 ebp=0013dd80 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00040246
Flash11g!DllUnregisterServer+0x23c281:
103d7cda ff5718          call    dword ptr [edi+18h]  ds:0023:05369808=103d85bb
0:000> dds esp esp+20
0013dd50  053697f0
0013dd54  0013ddf8
0013dd58  00000008
0013dd5c  0013ddf8
0013dd60  05848020
0013dd64  0535c1b0
0013dd68  103cb90c Flash11g!DllUnregisterServer+0x22feb3
0013dd6c  00000000
0013dd70  00000000
.text:103D85F8                 mov     ecx, [esi+40h]  //ecx = 0541788d 
.text:103D85FB                 add     eax, ecx        //eax = 8 +ecx = 05417895
.text:103D85FD                 movzx   ebx, byte ptr [eax]  
.text:103D8600                 movzx   ecx, byte ptr [eax+1]
.text:103D8611                 shl     ebx, 8
.text:103D8614                 or      ebx, ecx
.text:103D8616                 shl     ebx, 8
.text:103D8619                 or      ebx, eax
0:000> db 05417895(ecx+eax)
05417895  1e 0c ff e8 30 00 00 0b-0d da 00 03 00 22 ff a2  ....0........"..
054178a5  00 03 00 2b ff 81 00 03-00 35 00 1a 00 03 00 79  ...+.....5.....y
054178b5  ff a2 00 03 00 7b ff a2-00 03 00 7c ff a2 00 03  .....{.....|....

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (22)
雪    币: 403
活跃值: (330)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
沙发!期待楼主造福人类的asLib
2012-8-24 21:27
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
3
占座学习!期待楼主造福人类的asLib
2012-8-24 21:41
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
占位顶贴,呵呵
2012-8-24 23:40
0
雪    币: 1489
活跃值: (1003)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
我来晚了,古河出品,必出精品。
2012-8-25 00:06
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
6
gflags.exe /i iexplore.exe +hpa
不错!
2012-8-25 01:34
0
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
7
古河的帖子在另外一篇,这个不是古河写的。。。
2012-8-25 08:40
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
8
进来学习!期待楼主造福人类的asLib
2012-8-25 09:41
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我用MSF生成的样本不成功啊
2012-8-25 15:25
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
10
站位,谢谢楼主,要详细学习。
2012-8-26 08:59
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
占座学习!期待楼主造福人类的asLib
2012-8-26 11:50
0
雪    币: 253
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
学习。期待楼主造福人类的asLib
2012-8-27 07:58
0
雪    币: 159
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
看清楚再回啊 大哥们  古河大神在隔壁啊
2012-8-27 08:58
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
控制EIP的地方是在哪儿
2012-8-28 13:34
0
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
15
  文档里面说的很清楚啊,你仔细看下,肯定能发现。
2012-8-28 15:39
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我用metasploit生成的样本,在虚拟机上测试的时候,在还没运行到CALL [EAX+8]的时候,就因为某个寄存器的值变成了1E0D0000,导致后面的操作
10086067    8B46 44         MOV EAX,DWORD PTR DS:[ESI+44]
1008606A    8B88 9C050000   MOV ECX,DWORD PTR DS:[EAX+59C]
因为现在ESI=1e0d0000,所以[ESI+44]取出的刚好是shellcode中的某个字到EAX,导致[EAX+59C]是个非法的空间而奔溃了,新手求解这是咋回事啊
2012-8-29 11:05
0
雪    币: 133
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
源文档里把过掉heapSpray有什么用?heapSpray是用于构造shellcode的
2012-8-29 11:11
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
18
构造样本的过程,需要么?
想把构造的过程写出来,但不知道有没有人看
2012-8-29 11:20
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
需要~不怕学的多
2012-8-29 11:41
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
[QUOTE=误码率;1098053]我用metasploit生成的样本,在虚拟机上测试的时候,在还没运行到CALL [EAX+8]的时候,就因为某个寄存器的值变成了1E0D0000,导致后面的操作
10086067    8B46 44         MOV EAX,DWORD PTR DS:[ESI+44]
1008606A   ...[/QUOTE]

我重装了另一个虚拟机可以了,就是不解是怎么回事~求解释
2012-8-29 11:44
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
21
风骚的走位,占座
2012-9-4 16:55
0
雪    币: 159
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
22
分别用两个快照装了古河和你的flash版本,结果函数地址跟你们的分别都一样,这是巧合?
2012-10-12 14:24
0
雪    币: 799
活跃值: (457)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
23
很详细,赞
2016-8-11 14:58
0
游客
登录 | 注册 方可回帖
返回
//