Unsafe Filedownload - Pikachu
阿新 • • 發佈:2020-08-16
概述:
檔案下載功能在很多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響應,最後迴圈讀取檔案位元組流後返回到前端。最根本的原因就是後臺沒有對傳進來的引數進行判斷(看是否是目錄裡的檔案),就直接讀取了。