宜家PDF下載過程本地檔案包含漏洞披露
背景:
通過本地檔案包含攻擊,可以獲得伺服器上禁止訪問的例如配置、日誌和原始碼等私密檔案。有時候它還可以導致遠端程式碼執行漏洞,所以說本地檔案包含攻擊的危害是比較大的。
大多數的本地檔案攻擊都是由動態載入圖片或其他檔案的程式碼造成的。如果沒有對請求的檔名或路徑做校驗,那麼伺服器就會返回所請求的私密檔案。
復現動畫
尋找目標
大多數時候我都是掃描所有目標網站下的子域名, Aquatone 是個挺好用的工具,它可以在不同的公共域名資料庫中查詢相關域名並返回可用的子域名。工具效果如圖所示:
Aquatone 發現了 418 個可用的子域名。
測試目標
找到的一個攻擊目標是 Bathroomplanner.IKEA.com ,其中有一個工具可以幫助查詢產品並將產品新增到自己的浴室購物車中。你可以將購物車用郵件或者直接 PDF 檔案下載的方式儲存到本地,這裡生成的 PDF 檔案包含了一些文字資訊和產品圖片,沒多少值得看的了。
購物車列表圖
但 PDF 檔案是如何生成的呢?
對流量進行抓包分析
一提到抓包,你就會想到…… Burp Suite !我們先使用 Burp Suite 的流量抓取功能試試看。
開啟首頁後嘗試新增一個產品到購物車中。
在新增購物車時抓到的流量包。
可以看到其中幾個有趣的數值:
1) data: 一個 blob 型別的 JSON 資料,包含了產品和圖片編碼,沒有檔案路徑。
2) shopping: 一個 blob 型別的 JSON 資料,包含了購物車的商品,沒有檔案路徑。
3) pdf: 一個內容不明的超長字串。
4) images: 一些經過 BASE64 編碼的圖片。
瞭解編碼字串
如果你之前看到一大串字母數字組成的超長字串,那麼就考慮看看它是不是一個 BASE64 編碼後的字串。 BASE64 編碼常用於檔案的資料傳輸,常用的解碼工具是 http://decodebase64.com/
解碼 BASE64
如果我們嘗試直接把字串黏貼到解碼網站裡會發現報錯,這是因為它包含了像 % 之類的非法字元。不過這也說明它可能還經過 URL 編碼,所以先進行 URL 解碼試試看。這裡我用了
ofollow,noindex" target="_blank"> https://meyerweb.com/eric/tools/dencoder/ 來進行 URL 編碼和解碼。
URL 解碼和編碼工具
如果我們先進行 URL 解碼,再進行 BASE64 解碼,就會獲得下面的字串:
這裡發現個有趣的地方,如果我們將商品新增到購物車中,那麼它也會向伺服器傳送一個用於生成購物車 PDF 檔案的模板資料。
那麼如果我們嘗試在 PDF 中進行本地檔案包含呢?比如說嘗試一個圖片?先嚐試在模板資料裡新增一個 <img src=”/etc/passwd”> ,通過 BASE64 和 URL 編碼後,再 Burp Suite 中替換 PDF 引數然後前進。
Emmm 沒有什麼效果, PDF 無法將檔案識別為圖片也沒有返回任何輸出。
第二次嘗試:找到PDF庫,查詢庫的漏洞
那麼試試看其他辦法在 PDF 中包含檔案呢?先在谷歌中查詢一些模板中的字串,就能找到用於生成 PDF 檔案的工具。
Node-html-pdf 和 mPDF
所以我們有了兩個思路: node-html-pdf 庫或者是 mPDF 庫,在閱讀了兩個工具的文件以後我們發現宜家用的是 mPDF 庫。
找到mPDF的安全漏洞
先下載一個 mPDF 到本地進行審計,從更新日誌中可以看到不同版本的更新變化。
查詢更新日誌中的安全更新,可以節約很多時間。
就像我們在圖裡看到的一樣, mPDF 在 2017 年 10 月 19 日更改了註釋標籤的處理方式,然後我們來看看文件中對註釋標籤的說明。
文件中沒有提到涉及檔案包含的問題。
沒有找到和檔案包含有關的資訊,那麼谷歌看看其他人有沒有寫過相關問題。
看這裡被提交的一個 issue 。
h0ng10 在舊版本的 mPDF 中找到了一個嚴重的安全漏洞,這個漏洞可以通過註釋標籤來實現檔案包含。
如果我們仔細翻閱 Github 上這個專案的提交記錄,就能找到這裡危險的 mPDF 程式碼位置。
所以我們可以嘗試更改 PDF 的模板資料,利用註釋標籤來嘗試檔案包含攻擊。那麼來看看宜家是否用了新版本的 mPDF 庫。
攻擊
將下列標籤新增到模板資料中:
<annotation file=”/etc/passwd” content=”/etc/passwd” icon=”Graph” title=”Attached File: /etc/passwd” pos-x=”195” />
用 Burp Suite 的 Repeater 功能傳送新的模板資料,然後下載 PDF 檔案。用 Foxit Reader 開啟檔案檢視黃色的註釋資訊。
雙擊這裡的標註就能看到讀取的伺服器檔案了。也就是說——攻擊成功!
讀取到的 /etc/password 檔案內容
修復方案
禁止使用者修改生成 PDF 用的模板資料
用 jsPDF 之類的工具在客戶端生成包含購物車資訊的 PDF 檔案
更新最新版本的 mPDF 庫,禁止註釋標籤功能。