深入学习文件上传漏洞

 一·了解文件上传

                  文件上传是业务逻辑需要(例如上传头像,分享生活等·)。

   二·文件上传漏洞成因

                有心之人上传后门文件到服务器,然后有心之人访问存下的后门文件,服务器进行动态解析后返回静态解析后的页面给用户,从而达到目的,而web应用没有进行严格的过滤 ,导致文件随意上传引起。

     “听了这么多,是不是迫切想了解文件上传漏洞,上素材”

三·实战加分析

                这个靶场很简单,但了解看看就好了

靶场bwapp,等级low(简单来说什么限制都 没有)

php文件里面是一句话木马(可以去了解一下一句话木马)

可以看到后台有我们的文件了还是一个php

这样只需要去用菜刀连接就好了。

php后端代码:

就是将上传文件移动到images目录下一点过滤都没有。

medium

继续上传php文件发现无法上传,看提示好像是黑名单(实际生产环境尽量避免黑名单,等会 你就知道为什么了)

明显发现上传成功作者喜欢偷懒,php3也能按php解析器去执行。那我们想了为什么php3可以,php30呢???

那咱们探究一下服务器本质吧

web服务器是无法处理php等文件需要去寻求解析服务器帮忙,所以咱们只要绕过了asp,aspx,exe,jsp,php就可以上传文件了,但是也要了解到解析服务器能解析什么后缀 。以apache为例

apache2配置文件中

可以看到php3,4,5都会被解析为php,所以上传只能是3,而不是30.

high

要想达到目的,不能单靠上传文件了,要结合其他漏洞。这里的话带大家审计一下high下的代码逻辑

、file_upload_check_2是外部的函数

function file_upload_check_2($file, $file_extensions  = array("jpeg", "jpg", "png", "gif"), $directory = "images")
{
    
    $file_error = "";
    
    // Checks if the input field is empty
    if($file["name"] == "")
    {
        
        $file_error = "Please select a file...";
        
        return $file_error;
        
    }
    
    // Checks if there is an error with the file
    switch($file["error"])
    
    // URL: http://php.net/manual/en/features.file-upload.errors.php
    
    {
        
        case 1 : $file_error = "Sorry, the file is too large. Please try again...";
                 break;
             
        case 2 : $file_error = "Sorry, the file is too large. Please try again...";
                 break;
             
        case 3 : $file_error = "Sorry, the file was only partially uploaded. Please try again...";
                 break;
             
        case 6 : $file_error = "Sorry, a temporary folder is missing. Please try again...";
                 break;
             
        case 7 : $file_error = "Sorry, the file could not be written. Please try again...";
                 break;
             
        case 8 : $file_error = "Sorry, a PHP extension stopped the file upload. Please try again...";
                 break;
             
    }
    
    if($file_error)
    {
        
        return $file_error;
        
    }
    
    // Breaks the file in pieces (.) All pieces are put in an array
    $file_array = explode(".", $file["name"]);
    
    // Puts the last part of the array (= the file extension) in a new variabele
    // Converts the characters to lower case
    $file_extension = strtolower($file_array[count($file_array) - 1]);
    
    // Searches if the file extension exists in the 'allowed' file extensions array   
    if(!in_array($file_extension, $file_extensions))
    {
        
       $file_error = "Sorry, the file extension is not allowed. Only the following extensions are allowed: <b>" . join(", ", $file_extensions) . "</b>";
       
       return $file_error;
       
    }
    
    // Checks if the file already exists in the directory
    if(is_file("$directory/" . $file["name"]))
    {
        
        $file_error = "Sorry, the file already exists. Please rename the file...";      
        
    }
    
    return $file_error;
    
}

大部分不是我们关心的,我们只关心一下

explode(".",$file['name]')以. 分割 (如1.php.zip.asp  会被分割为1, php,asp, zip存入 数组)

strlower 大概是取最后一个数组

in_array()判断是否存在白名单中。

”%00截断不可能了,因为用户只能控制 一个没法控制路径 “(大概是这个意思我也不太了解hhh)

四·总结

                多思考问题本质,上面手法很简陋,重在学习思考能力。

                                                        -------------纯小白,记录自己的学习过程,很多东西是自己的理解可能不是那么专业

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值