7.3 文件下载和文件删除
文件下载漏洞
来看下代码:
<?php
$file_name = $_POST['filename'];
if (!file_exists($file_name)) {
echo "NO SUCH FILE";
exit;
}
$file = fopen($file_name, "r");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . $file_name);
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
?>
上面的代码就是一个简单的代文件下载(读取)漏洞,由于filename可控,我们可传入filename=../../../../etc/passwd 这样我们就能够读取passwd文件。
通常我们挖掘文件下载(文件读取)类漏洞时通常去搜索文件文件操作类的函数。文件操作类的函数一般都有:
fopen(),fread(),fgetss(),fgets(),readfile(),file_get_content(),file_put_content(),file(), highlight_file(),simplexml_load_string,parse_ini_file(),show_source()等。
文件删除
文件删除代码:
f($post_submit_action == "adscapture_tcpdump_delete_pcap"){
$pcap_name = $_POST["pcap_name"];
$file = "/SE/ads_tcpdump/".$pcap_name;
unlink($file);
return;
}
post参数pcap_name进入了unlink函数,当我们提交,pcap_name=../../index.php,直接造成任意文件删除漏洞。 文件删除漏洞就是全局找unlink函数。
Haidao网店系统任意文件删除漏洞
public function delete_img() {
$img_url = $_SERVER['DOCUMENT_ROOT'].$_GET['img_url'];
if (file_exists($img_url)) {
$result = unlink($img_url);
}
$result ? showmessage('文件删除成功','',1) : showmessage('文件删除失败') ;
}
由此可以看出img_url可控,可直接造成任意文件删除。