1. 程式人生 > 實用技巧 >Unsafe Filedownload - Pikachu

Unsafe Filedownload - Pikachu

概述:

檔案下載功能在很多web系統上都會出現,一般我們當點選下載連結,便會向後臺傳送一個下載請求,一般這個請求會包含一個需要下載的檔名稱,後臺在收到請求後會開始執行下載程式碼,將該檔名對應的檔案response給瀏覽器,從而完成下載。 如果後臺在收到請求的檔名後,將其直接拼進下載檔案的路徑中而不對其進行安全判斷的話,則可能會引發不安全的檔案下載漏洞。
此時如果攻擊者提交的不是一個程式預期的的檔名,而是一個精心構造的路徑(比如../../../etc/passwd),則很有可能會直接將該指定的檔案下載下來。 從而導致後臺敏感資訊(密碼檔案、原始碼等)被下載。 所以,在設計檔案下載功能時,如果下載的目標檔案是由前端傳進來的,則一定要對傳進來的檔案進行安全考慮。

切記:所有與前端互動的資料都是不安全的。

靶場:

1.進入靶場,點選人名,彈出下載請求的彈窗,

下載連結為:

http://localhost/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

2.前端傳遞資訊到後端,後端查詢ai.png檔案又輸出到前端,使用者可以在前端下載資訊,

3.將filename改為獲取的檔案路徑,成功獲取hosts資訊,

../../../../../../../../../../Windows/System32/drivers/etc/hosts

4.檢視原始碼,

檢視後端原始碼分析漏洞原因:

當在頁面點選連結的時候,a標籤會通過get請求傳一個引數到後臺,後臺沒有做任何的處理,後臺會獲取檔名然後直接拼接到download目錄下,接著後臺會對檔案進行讀取並計算它的長度,然後放到Header響應,最後迴圈讀取檔案位元組流後返回到前端。最根本的原因就是後臺沒有對傳進來的引數進行判斷(看是否是目錄裡的檔案),就直接讀取了。

參考:

https://www.cnblogs.com/00xHuang/p/13275000.html