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

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

0x03 任意文件下載漏洞

一些網站因爲業務需求,每每須要提供文件下載功能,但若對用戶下載的文件不作限制,則惡意用戶就可以下載任意敏感文件,這就是文件下載漏洞。
漏洞產生緣由mysql

  • 有讀取文件的函數
  • 讀物文件的路徑用戶可控,且沒有通過校驗,或者校驗不嚴格
  • 輸出文件內容
  • 一個正常的網站,存在一個下載文件的功能,同時還會從瀏覽器接收文件名字

文件下載的兩種方式
一、直接下載:web

<a href=」http://www.a.com/xxx.rar」>下載</a>

二、增長header頭sql

<?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 實戰利用方式

  • 讀取配置文件進行信息收集shell

    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參數bash

  • 讀取代碼漏洞審計服務器

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安全學習第三十五節課-文件下載和文件/

相關文章
相關標籤/搜索