Windows 7 x86 sp1
office 2007
使用msf生成poc
use exploit/windows/fileformat/mswin_tiff_overflow
set payload windows/exec
set cmd calc
加载POC,在win7+office2007不能断在虚表调用错误的地方,在xp+office2010则可以。
win7+office2010没有OG.dll。
继续栈回溯,[edx]是一对数字的开始,他们44个数字相加,当与参数size进行计算式发生整数溢出:
申请0大小的堆空间成功:
继续分析发生了栈溢出,同时将原来的虚表给覆盖掉了,size和Src都是作为参数传进来的:
关键调用流程
判断为6即jpeg压缩调用 `function`
|_sub_B4982
|_sub_B499F 根据第一个数值查找给定数字的字段
| |_sub_D9D13
|_sub_D9E6A
【function函数】经过分析,需要将Compression=6 表示JPEG压缩。
【sub_D9D13】继续分析发现函数,查找514字段也就是JPEGInterchangeFormatLength (514): eSHORT
【sub_D9E6A】判断 enum TAGTYPE typ
使其等于4。
259 Compression COMP value = 6
514 JPEGInterchangeFormatLength TAGTYPE typ = 4
JPEGInterchangeFormatLength value = ??(控制后面计算的加数)但是要大于4
513 JPEGInterchangeFormat TAGTYPE typ = 4
改造过程需要涉及的主要字段为:
Compression(压缩标志字段)
JPEGInterchangeFormat(JPEG压缩格式的数据头SOI)
JPEGInterchangeFormatLength(数据头的长度SOI_SIZE)
StripByteCounts(压缩数据size数组)
StripOffsets(压缩数据偏移数组)
ImageLength(图像数据的长度)
RowsPerStrip(压缩块容量)
https://bbs.pediy.com/thread-225993.htm
https://weiyiling.cn/one/cve_2013_3906_ms13-096
https://www.freebuf.com/vuls/31968.html
http://www.binvul.com/viewthread.php?tid=376