Java教程

文件上传之条件竞争上传,upload-labs18关,文件上传二次渲染

本文主要是介绍文件上传之条件竞争上传,upload-labs18关,文件上传二次渲染,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

环境

  • phpstudy
  • upload-labs,Pass-18

条件竞争文件上传的原理

直接看代码进行代码审计,相关的函数我已经做了注释

<?php
include '../config.php';
include '../head.php';
include '../menu.php';

$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'];
	
    // 查找"."在文件名中出现的最后一个位置,然后位置+1,返回后面的内容
    // 其实就是截取文件的后缀名
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
	
    // 文件上传的位置
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    // 判断temp文件是否是合法的文件(通过PHP函数 POST方法上传的文件),如果是的话,将其移动到upload_file处
    // 其实这步没啥用,类似于开头的if函数,如果点击submit就运行代码这样子
    if(move_uploaded_file($temp_file, $upload_file)){ 

	// 如果后缀名在ext_arr里面的话,那么上传,并且重命名文件
        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 = '上传出错!';
    }
}
?>

分析代码可得到文件上传的逻辑,但是此处是存在逻辑漏洞的,在我们进行文件上传时,服务器先进行文件上传操作,后判断我们上传的文件合不合法,这样我们上传的后门文件只要连接的快,那么服务器就来不及删除它。其原理就是,在我们进行文件读写操作时,是不能删除该文件的。


upload-labs less-18 演示

上传我们的php文件后门,抓取数据包

将得到的数据包发送到intruder模块中,选取UA头进行爆破(修改UA头部对数据包无影响),其实就是不断上传数据包,然后在服务器删除之前连上这个php后门,那么服务器就删除不了我们上传的后门了

设置爆破类型,Start Attack

成功上传文件


参考连接

https://www.bilibili.com/video/BV1JZ4y1c7ro?t=4392&p=21

这篇关于文件上传之条件竞争上传,upload-labs18关,文件上传二次渲染的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!