本文为看雪论坛优秀文章
看雪论坛作者ID:e1ya
1. 漏洞简述
• 漏洞名称:WPS 2016远程代码执行漏洞
• 漏洞类型:栈溢出
• 漏洞影响:远程代码执行
• 利用难度:Easy
• 基础权限:不需要2. 漏洞利用
打开EXP文档后,使得程序触发栈溢出并破坏SEH链,通过控制SEH处理函数从而绕过GS并执行ShellCode。3. 漏洞影响
漏洞主要影响WPS Office 10.1.0.6489及之前的版本。4. 解决方案
1. 环境搭建
靶机环境:WIN10 20H2教育版64位,WPS Office 10.1.0.6489。
调试工具:WinDbg 。
静态分析:IDA Pro。
2. 复现过程
(1) 使用WinDbg附加WPS进程,在WPS中打开POC文件即可触发漏洞。1. 基本信息
漏洞文件:wpsxmlrw.dll
漏洞函数:sub_1000C1122. 详细分析
(1) 基础分析
根据栈回溯情况可知,崩溃点为wpsxmlrw模块filterpluginFormatCorrect+0x18b3a偏移处。通过IDA Pro定位到具体崩溃函数sub_1001AB09。分析POC文件可以发现w:fareast的值是超长的,综上可知该栈溢出的原因是因为WPS在处理XML文件的时候,因为未对w:fareast的值做验证从而发生栈溢出。2. 静态分析
通过栈回溯跟踪到sub_1000C112函数,可知栈溢出发生在调用 memcpy函数后。(1) 函数调用链
sub_1000C112 --> WStr::size --> WStr::c_str --> memcpy(2) 补丁Diff
在WPS Office 10.1.0.6489之后的版本中WPS在调用 WStr::size 函数后会对长度进行无符号的大小验证。(3) 漏洞函数分析
首先调用WStr::size函数获取w:fareast值的长度,然后调用WStr::c_str函数获取w:fareast值的UTF-8内容,接着调用memcpy函数将内容复制到局部变量中,当复制长度过大时则发生栈溢出。3. 利用思路
该版本wps.exe存在GS、SafeSEH 不存在DEP、ASLR ,WordConvertDll.dll不存在GS、safeSEH、DEP、ASLR 。从WordConvertDll.dll中寻找 pop pop ret 地址,构造payload覆盖SEH链绕过GS和SafeSEH从而执行Shellcode。(1) 利用条件
打开WPS Office 10.1.0.6489并使用繁简体转换功能加载WordConvertDll.dll。(2) 利用过程
因为漏洞函数sub_1000C112存在GS,所以覆盖函数返回地址的利用方式不能使用。因为该版本WPS进程不存在DEP,所以直接执行Shellcode即可。1.《利用SEH异常处理机制绕过GS保护》
https://bbs.pediy.com/thread-223443.htm
2.《windows溢出保护原理与绕过方法概览》
https://bbs.pediy.com/thread-123572.htm看雪ID:e1ya
https://bbs.pediy.com/user-home-922453.htm
*本文由看雪论坛 e1ya 原创,转载请注明来自看雪社区。
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458383777&idx=1&sn=f693b263bd4a2e5023f1257a31a0711d&chksm=b180c52b86f74c3da6d8a44354fc6bd0a8b95f0859648a9ec89d7d19d745f3acc4552ff4bae6#rd
如有侵权请联系:admin#unsafe.sh