7 任意文件讀取與下載
7.1 概念
對用戶查看或下載的文件不做限制,就能夠查看或下載任意的文件,可能是源代碼文件、敏感文件等。
7.2 產生原因與危害
產生原因
·存讀取文件的函數
·讀取文件的路徑用戶可控,且未校驗或校驗不嚴
·輸出了文件內容
漏洞危害
·下載服務器任意文件。包含腳本代碼、系統敏感文件;
·可配合其他類型漏洞進一步攻擊
·進一步代碼審計,查找更多可利用代碼
任意文件讀取
<?php
$filename=”test.txt”;
readfile($filename);
?>
<?php
$filename=”test.txt”;
Echo fiile_get_contents($filename);
?>
文件讀取函數:readfile()、file_get_contents()、fopen()中,$filename沒有經過校驗或者校驗不合格,用戶可控制變量讀取任意文件,如/etc/passwd、./index.php。
文件下載方式
·直接下載
·<a href=”http://www.a.com/ccc.rar”>下載</a>
在上述代碼中,$filename 沒有經過校驗,或者校驗不合格,用戶可以控制這個變量讀取
任意的文件,比如/etc/passwd、../index.php等等。這樣就造成了任意文件下載漏洞
7.3 挖掘與驗證
漏洞挖掘
1.web漏洞掃描器(awvs、appscan、openvas、nessus)
2.手動挖掘從連接和參數名查看
連接:readfile.php?file=**.txt、download.php?file=**.rar
參數名:&readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、&menu=、META-INF= 、WEB-INF
漏洞驗證
• Index.php?f=../../../../../../../../etc/passwd
• Index.php?f=../index.php
• Index.php?f=file:///etc/passwd
參數f的參數值為PHP文件時:
1.文件被解析,則是文件包含漏洞
2.顯示源代碼,則是文件查看漏洞
3.提示下載,則是文件下載漏洞
7.4 漏洞修復方案
• 過濾 . 點,使用戶在url中不能回溯上級目錄
• 正則嚴格判斷用戶輸入的參數
• Php.ini配置open_basedir限定文件訪問范圍