風炫安全web安全學習第三十五節課 檔案下載和檔案讀取漏洞
0x03 任意檔案下載漏洞
一些網站由於業務需求,往往需要提供檔案下載功能,但若對使用者下載的檔案不做限制,則惡意使用者就能夠下載任意敏感檔案,這就是檔案下載漏洞。
漏洞產生原因
- 有讀取檔案的函式
- 讀物檔案的路徑使用者可控,且沒有經過校驗,或者校驗不嚴格
- 輸出檔案內容
- 一個正常的網站,存在一個下載檔案的功能,同時還會從瀏覽器接收檔名字
檔案下載的兩種方式
1、直接下載:
<a href=”http://www.a.com/xxx.rar”>下載</a>
2、增加header頭
<?php $filename = $_GET['filename']; echo '<h1>開始下載檔案</h1><br /><br />'; echo file_get_contents($filename); header('Content-Type: imgage/jpeg'); header('Content-Disposition: attachment; filename='.$filename); header('Content-Lengh: '.filesize($filename)); ?>
0x05 實戰利用方式
-
讀取配置檔案進行資訊收集
Windows:
C:\boot.ini //檢視系統版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置檔案
C:\Windows\repair\sam //儲存系統初次安裝的密碼
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置資訊
C:\Windows\my.ini //Mysql配置資訊Linux:
/root/.ssh/authorized_keys //如需登入到遠端主機,需要到.ssh目錄下,新建authorized_keys檔案,並將id_rsa.pub內容複製進去
/root/.ssh/id_rsa //ssh私鑰,ssh公鑰是id_rsa.pub
/root/.ssh/id_ras.keystore //記錄每個訪問計算機使用者的公鑰
/root/.ssh/known_hosts
//ssh會把每個訪問過計算機的公鑰(public key)都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH會核對公鑰。如果公鑰不同,OpenSSH會發出警告, 避免你受到DNS Hijack之類的攻擊。
/etc/passwd // 賬戶資訊
/etc/shadow // 賬戶密碼檔案
/etc/my.cnf //mysql 配置檔案
/etc/httpd/conf/httpd.conf // Apache配置檔案
/root/.bash_history //使用者歷史命令記錄檔案
/root/.mysql_history //mysql歷史命令記錄檔案
/proc/self/fd/fd[0-9]*(檔案識別符號)
/proc/mounts //記錄系統掛載裝置
/porc/config.gz //核心配置檔案
/var/lib/mlocate/mlocate.db //全檔案路徑
/porc/self/cmdline //當前程序的cmdline引數 -
讀取程式碼漏洞審計
0x06 漏洞防禦修復
通用
- 過濾
.
點,使使用者在url中不能回溯上級目錄 - 正則嚴格判斷使用者輸入的引數
php.ini
配置open_basedir
限定檔案訪問範圍
檔案下載漏洞修復
download
id
path
-------
download.php?id=1
- 將下載區獨立出來,放在專案路徑外,給每個下載資源固定的URL,而不是所有的下載資源都是統一的URL:
www.test.com/download?filename=檔名
- 淨化資料:對使用者傳過來的檔名引數進行硬編碼或統一編碼,對檔案型別進行白名單控制,對包含惡意字元或者空字元的引數進行拒絕。
- web應用程式可以使用chroot環境包含被訪問的web目錄,或者使用絕對路徑+引數來訪問檔案目錄,時使其即使越權也在訪問目錄之內。www目錄就是一個chroot應用。由chroot創造出的那個根目錄,叫做“chroot監獄”(所謂”監獄”就是指通過chroot機制來更改某個程序所能看到的根目錄,即將某程序限制在指定目錄中,保證該程序只能對該目錄及其子目錄的檔案有所動作,從而保證整個伺服器的安全。
詳細具體chroot的用法,可參考:blog.csdn.net/frozen_fish/article/details/2244870
- 任意檔案下載漏洞也有可能是web所採用的中介軟體的版本低而導致問題的產生,例如ibm的websphere的任意檔案下載漏洞,需更新其中介軟體的版本可修復。
- 要下載的檔案地址儲存至資料庫中。
- 檔案路徑儲存至資料庫,讓使用者提交檔案對應ID下載檔案。
- 使用者下載檔案之前需要進行許可權判斷。
- 檔案放在web無法直接訪問的目錄下。
- 不允許提供目錄遍歷服務。
- 公開檔案可放置在web應用程式下載目錄中通過連結進行下載。
- 記錄檔案下載日誌。
參考:
http://blog.evalshell.com/2020/12/20/風炫安全web安全學習第三十五節課-檔案下載和檔案/