實戰|通過惡意 pdf 執行 xss 漏洞
漏洞測試
我們介紹如何把 JavaScript 嵌入到 PDF 文檔之中。
我使用的是迅捷 PDF 編輯器未注冊版本
1、啟動迅捷 PDF 編輯器打開一個 PDF 文件,或者使用“創建 PDF 文件”功能,通過將其他文檔和資源轉換為“可移植文檔格式”來創建 PDF 文件。

2、單擊左側的“頁面”標簽,選擇與之對應的頁面縮略圖,然后從選項下拉菜單中選擇“頁面屬性”命令

選擇“頁面屬性”命令
3、在“頁面屬性”對話框單擊“動作”標簽,再從“選擇動作”下拉菜單中選擇“運行 JavaScript”命令,然后單擊【添加】按鈕,彈出 JavaScript 編輯器對話框

填寫 JavaScript 代碼
4、在彈出的“JavaScript 編輯器”對話框中輸入代碼:
app.a
lert('XSS');
br
單擊【確定】按鈕保存 PDF 文件。
這里需要注意的是:Adobe 支持自身的 JavaScript 對象模型,例如 alert(‘xss’)必須被 APP 對象調用,因此變成了 app.alert('xss')。這意味著,利用 JavaScript 進行攻擊時只能使用 Adobe 所支持的功能。
5、關閉軟件,直接打開剛才保存的 PDF 文件,JavaScript 代碼即被執行。經過測試最新版本的 360 瀏覽器和谷歌瀏覽器支持


現在,嘗試把 PDF 文件嵌入到網頁中并試運行。創建一個 HTML 文檔,代碼如下:
<html><body> <object data="test.pdf" width="100%" heigh="100%" type="application/pdf"></object> </body> </html>
除了把 JavaScript 嵌入 PDF 文件中執行,還可以利用基于 DOM 的方法執行 PDF XSS。此類方法由 Stefano Di Paola 和 Giorgio Fedon 在第 23 屆 CCC 安全會議中提出,大家可以參考論文 Adobe Acrobat。
Stefano Di Paola 把 PDF 中的 DOM XSS 稱為 UXSS(Universal Cross-Site Scripting)。事實上,任何支持 PDF 文件的網站都可能存在這種漏洞。
修復方法
而作為網站管理員或開發者,可以選擇強迫瀏覽器下載 PDF 文件,而不是提供在線瀏覽等,或修改 Web 服務器配置的 header 和相關屬性。
可以使用第三方插件解析pdf,不用chrome自帶的pdf解析就行,https://github.com/adobe-type-tools/cmap-resources
漏洞修復結果
瀏覽器針對TXT/pdf等文件一般是直接打開,從而導致惡意的文件會被瀏覽器直接執行,因此解決方法就是告訴瀏覽器哪些類型的文件需要下載而不是直接打開.我們可以在nginx解析容器中通過反向代理可以直接過濾訪問的url在指定的訪問中添加header。
location /{
if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
add_header Content-Disposition attachment;
}
}
修復檢查
點擊后直接下載

參考鏈接:https://www.t00ls.net/thread-48480-1-1.htmlhttps://blog.xss.lc/experience-sharing/71.htmlhttps://ahbbs.anhunsec.cn/thread-351.htm#628https://ahbbs.anhunsec.cn/thread-355.htm