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可控,可直接造成任意文件删除。

results matching ""

    No results matching ""