-
-
[原创]WPS 2016远程代码执行漏洞(栈溢出)分析及利用
-
发表于:
2021-4-8 21:35
12107
-
[原创]WPS 2016远程代码执行漏洞(栈溢出)分析及利用
•漏洞名称:WPS 2016远程代码执行漏洞
•漏洞类型:栈溢出
•漏洞影响:远程代码执行
•利用难度:Easy
•基础权限:不需要
打开EXP文档后,使得程序触发栈溢出并破坏SEH链,通过控制SEH处理函数从而绕过GS并执行ShellCode。
漏洞主要影响WPS Office 10.1.0.6489及之前的版本。
升级到最新版本。
靶机环境:WIN10 20H2教育版64位,WPS Office 10.1.0.6489。
调试工具:WinDbg 。
静态分析:IDA Pro。
1.使用WinDbg附加WPS进程,在WPS中打开POC文件即可触发漏洞。
2.在WinDbg中查看崩溃信息。
•漏洞文件:wpsxmlrw.dll
•漏洞函数:sub_1000C112
•漏洞对象:栈缓冲区
根据栈回溯情况可知,崩溃点为wpsxmlrw模块filterpluginFormatCorrect+0x18b3a偏移处。
通过IDA Pro定位到具体崩溃函数sub_1001AB09。
分析POC文件可以发现w:fareast的值是超长的,综上可知该栈溢出的原因是因为WPS在处理XML文件的时候,因为未对w:fareast的值做验证从而发生栈溢出。
通过栈回溯跟踪到sub_1000C112函数,可知栈溢出发生在调用 memcpy函数后。
sub_1000C112 --> WStr::size --> WStr::c_str --> memcpy
在WPS Office 10.1.0.6489之后的版本中WPS在调用 WStr::size 函数后会对长度进行无符号的大小验证。
首先调用WStr::size函数获取w:fareast值的长度,然后调用WStr::c_str函数获取w:fareast值的UTF-8内容,接着调用memcpy函数将内容复制到局部变量中,当复制长度过大时则发生栈溢出。
该版本wps.exe存在GS、SafeSEH 不存在DEP、ASLR ,WordConvertDll.dll不存在GS、safeSEH、DEP、ASLR 。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-4-8 23:43
被e1ya编辑
,原因: