漏洞筆記(二)|利用Excel進行XXE攻擊

  • 2020 年 3 月 15 日
  • 筆記

開工一周啦,技術分享繼續搞起來~

某次測試中,在某系統後台通過上傳Excel文件觸發XXE攻擊,這種姿勢利用成功比較少,故在此將測試過程記錄分享出來。

本文作者:kaiputenku

前言

Microsoft Office從2007版本引入了新的開放的XML文件格式,新的XML文件格式基於壓縮的ZIP文件格式規範,由許多部分組成。

我們可以將其解壓縮到特定的文件夾中來查看其包含的文件夾和文件,可以發現其中多數是描述工作簿數據、元數據、文檔資訊的XML文件。

所以不正確的讀取2007版本Microsoft office格式文件也存在著XXE攻擊的可能性。

測試過程

測試客戶端與測試目標均處於純內網環境 測試目標IP:29.xx.xx.xxx 客戶端IP:10.xx.xx.xx

在人員管理>批量導入模組,發現可以通過上傳Excel文件批量導入人員資訊。

下載導入模板,模板是一個xls格式文件。

xls與xlsx格式不同,xls是一個特有的二進位格式,其核心結構是複合文檔類型的結構,而xlsx的核心結構是XML類型的結構,採用的是基於XML的壓縮方式。xls格式文件沒辦法插入Payload進行XXE攻擊。

由於系統給出的默認模板user.xls沒辦法利用,那我們嘗試自己新建一個xlsx格式文件進行上傳,是否可行呢?

製作插入Payload的xlsx文件

新建一個xlsx格式文件test.xlsx,解壓縮。

在[Content_Types].xml文件中插入Payload,如下圖。作用是從10.xx.xx.xx:8080上讀取eval.dtd文件。

在客戶端進行監聽

eval.dtd文件存放在客戶端,內容如下圖。作用是通過file協議讀取測試目標的/etc/hostname文件,並將讀取的結果通過HTTP請求的參數p帶出。

在客戶端的8080埠開啟Web服務,供測試目標下載eval.dtd文件。

並使用nc監聽本地8081埠,用於接收從測試目標讀取的/etc/hostname文件。

上傳

將插入Payload後的文件重新壓縮,再將壓縮包的後綴名修改為xlsx。

上傳該xlsx文件。

雖然回顯文件添加失敗,但是從客戶端Web服務日誌中發現測試目標下載了evil.dtd文件,且nc成功在8081埠監聽到測試目標的/etc/hostname文件內容。

總結

利用Excel進行XXE攻擊非常簡單,使用版本較低的第三方庫解析Excel文件時,基本都會引入XXE問題。