文件上传漏洞? 看这一篇就够了-Nginx解析漏洞 修改后缀绕过前端验证 00%截断 安鸾靶场练习

靶场地址

首页 : 安鸾渗透实战平台 - 安鸾学院

目录

文件上传漏洞利用条件

Nginx解析漏洞

 文件上传01 (绕过前端验证)

 文件上传02 %00截断​



文件上传漏洞利用条件

1.可以上传php文件,或者上传的文件可以被解析为php文件

2.可以找的到文件上传后的路径

Nginx解析漏洞

该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

实际上就是由于判断文件后缀出现问题,导致我们可以添加一个/.php 后缀 使得系统解析图片木马为php文件。

大家可以看这个例子学习,不过多叙述原理。

首先制作一张一句话木马

php文件:(这里最好用REQUEST 之前用GET和post都没成功)

 然后随便找张图片这里是 1.jpg

 这里生成了 re.jpg图片木马

上传,告诉我们地址了

输入地址,并且后缀加个/re.php访问发现存在这个文件(这里图不一样,当时可能写的时候截错了,但是照这样方法一步一步来没错)

 最后蚁剑连接,地址填写

最后找到flag

 文件上传01 (绕过前端验证)

最简单的一种了,写个小马 改为.jpg后缀,burpsuite抓包后再改为.php后缀,成功绕过了前端的过滤。

先找到上传界面

 上传一个0.jpg 然后 burp抓包改为0.php

 

 上传后发现这里多了一张图片

文件路径

发现就是为upload/1.php

发现的方法 :上传一张图片

 这样就发现了路径

最后蚁剑连接

 文件上传02 %00截断

 。。。这个    没有进错

 进入官网

 看了大神些write up 没想到%00截断能这样使用。

%00 服务器解析到这里时 讲 %00 之后的数据识别为空 (当然我们输入的%00需要URL编码)

先把源码放出来把

<?php

header("Content-type: textml;charset=utf-8");
error_reporting(0);

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['file_path'].rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        }
        else{
            $msg = "上传失败";
        }
    }
    else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}
?>

<div id="upload_panel">
    <ol>
            <h1>别玩游戏了,好好做题吧!</h1>
<br>  <br>

            <form enctype="multipart/form-data" method="post">
                <p>请选择要上传的图片:<p>
                <input type="hidden" name="file_path" value="images/"/>
                <input class="input_file" type="file" name="upload_file"/>
                <input class="button" type="submit" name="submit" value="上传"/>
            </form>
            <div id="img">
                <?php
                    if($is_upload){
                        echo '<img src="'.$img_path.'" width="250px" />';
                    }
                ?>
            </div>
    </ol>
</div>

我们知道,文件上传有2点:
1.必须能上传php文件,或者上传的文件可以解析为php文件
2.知道文件路径

在这道题中1.后端白名单验证上传文件,burp修改后缀也没用。
         2.对文件名进行了随机命名,我们找不到路径
重点
$img_path = $_POST['file_path'].rand(10, 99).date("YmdHis").".".$file_ext;
这里对文件名进行的rand随机命名,但是对文件路径没有,所以我们使用00%截断,它后面的随机命名无效,‘

上传一张图片马

在images后加入/1.php%00

 记得要将%00 URL编码

放在repeated模块

括到的地方发现%00将随机命名的文件名截断了。

这时我们直接用 url/images/0.php 放在蚁剑连接即可。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值