任意文件下載漏洞的成因:
一些網(wǎng)站的業(yè)務(wù)需求,提供的有文件下載的功能,這個時候考慮到代碼的靈活性開發(fā)者會單獨(dú)寫一個實(shí)現(xiàn)文件下載功能的文件,只需要傳入一個文件名如果服務(wù)器存在該文件就可以下載。但是如果沒有對傳入的這個文件名做限制,用戶可以控制這個文件名,那么就有可能會下載站點(diǎn)上的源碼文件,配置文件等等,這個時候就形成了任意文件下載漏洞。
兩種文件下載的方式
11. 直接下載:<a href= “xxxx.rar”> 下載</a>
比較安全
2. 文件名變量
<?php
$filename = $_GET[‘filename’];
header(‘Content-Length: ’.filesize($filename));
header(‘Content-Disposition: attachment; filename=’?.$filename);
//Content-Disposition: attachment是告訴瀏覽器文件是可以當(dāng)做附件被下載,下載后的文件名是file_name該變量的值。
readfile($filename);
?>
在鏈接后綴修改可以下載不同的文件。使用../跳出當(dāng)前的目錄。
任意文件下載漏洞的危害
可以下載服務(wù)器任意的文件,如腳本代碼,服務(wù)以及系統(tǒng)配置文件等等??梢韵螺d網(wǎng)站資源代碼進(jìn)行白盒審計,發(fā)現(xiàn)其他web漏洞,如SQL注入,文件包含,xss等等。
任意文件下載漏洞防御
禁止使用文件名的方式訪問網(wǎng)站目錄的文件
php.ini中配置open_basedir訪問的文件名必須限制在規(guī)定的目錄內(nèi),禁止越權(quán)使用別的目錄。