公式编辑器存在多个漏洞CVE-2017-11882和CVE-2018-0802
该样本利用的漏洞为CVE-2018-0798
出现漏洞的函数为sub_443F6C(无随机基址),该函数内部并没有对参数 v12 的长度做限制
从而导致栈溢出
在OD里面比较直观,我们可以看到,在长度不限的情况下,我们是可以覆盖到上层函数的返回地址,这样我们便可以劫持到EIP,执行我们的shellcode
然而该样本并没有直接劫持EIP跳转到shellcode,而是用了下述的方法(该组织的shellcode也是相当有意思)
在上述中我们有看到 sub_443F6C 函数执行了两次,两次执行后,只是为了构造下面函数的参数
第4个参数的内容
我们可以看到a4是第4个参数,因此我们可以控制memcpy源地址的内容
通过控制第二个和第三个参数,修改该区域指令为jmp短跳,并把想要复制的内容放进来
到这里已经淹没了返回地址,一个短小的ROP链,还是比较容易理解
继续执行便到了我们刚才复制过去的数据,因为公式编辑器并没有开启DEP,所以可以直接执行
这里是之前构造的代码,对eax进行计算从而跳转到shellcode。
到这里有个疑问,为什么要计算出,0x45BD3C这个地址呢?
其实这是一个基址,这个地址里保存的值永远是 0x12F560
而对0x12F560+0x14=0x12F574 又进行取值,这里边保存就是我们的word程序传入的buffer了
取出来的值+固定的offset,就是真正的shellcode了
样本为一个word类型的文档,打开后如下
运行该样本后,发现该样本创建了计划任务
用oletools工具对doc文档进行分析,内置4个ole对象
id为0和1的,明显是与0xFC异或加密,解密后是一个PE文件
id为3的包含了漏洞利用的代码
之前的介绍中,已经调试到shellcode部分
该段shellcode首先会通过异或0xb9解密自身
通过PEB的方法,获取msvcrt.dll,kernel32.dll的基址
获取msvcrt模块的clearerr函数地址,并修改其地址属性
进行inlineHook
hook之后,可以传入,字符串从而获取API的地址,不是用普通的GetPorcAddress
而是调用了ntdll的 LdrGetProcedureAddress
然后读取临时目录下的8.t,并在内存中解密
因为当前是调试状态,他会通过GetModuleFileName获取当前模块名,并创建一个同名的线程
傀儡进程技术,写入真正要执行的代码,就是释放的8.t,然后ResumeThread并结束自身
8.exe会在临时目录释放,两个文件,并创建计划任务
![1565779110142]
如图释放的exe为有签名的白名单文件,是一个白利用程序
wce.dll是被更改过的黑dll,该dll获取导出函数_run@4并调用
该函数解密域名后会进行链接,nicetiss54.lflink.com
发送的数据为 GET请求 image/logo.png
该图片应该是一个PE文件,会去执行他的导出函数
)
注:可以利用样本制作exp,这里不放exp,附上样本,有兴趣的可以自己编写。(授人鱼不如授人以渔)
解压密码:pediy.com
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-8-15 16:53
被Kalendsi编辑
,原因: