1. 程式人生 > 實用技巧 >風炫安全web安全學習第三十五節課 檔案下載和檔案讀取漏洞

風炫安全web安全學習第三十五節課 檔案下載和檔案讀取漏洞

風炫安全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安全學習第三十五節課-檔案下載和檔案/