風炫安全web安全學習第三十五節課 檔案下載和檔案讀取漏洞
0x03 任意檔案下載漏洞
一些網站由于業務需求,往往需要提供檔案下載功能,但若對用戶下載的檔案不做限制,則惡意用戶就能夠下載任意敏感檔案,這就是檔案下載漏洞,
漏洞產生原因
- 有讀取檔案的函式
- 讀物檔案的路徑用戶可控,且沒有經過校驗,或者校驗不嚴格
- 輸出檔案內容
- 一個正常的網站,存在一個下載檔案的功能,同時還會從瀏覽器接收檔案名字
檔案下載的兩種方式
1、直接下載:
<a href=https://www.cnblogs.com/fxsec/p/”http://www.a.com/xxx.rar”>下載
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安全學習第三十五節課-檔案下載和檔案/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246764.html
標籤:其他
