代码逻辑
文件上传的检测代码常规的有:黑名单、白名单、文件内容等检测方法,也有一种设计模式就是业务层会首先将文件上传到服务器,之后才会去判断文件的格式,如果通过检测则使用rename修改名称,如果不通过则使用UNlink删除文件,这种设计看似没有问题,但是可以通过条件竞争的方式在unlink之前访问webshell
条件竞争1
实例代码
以下代码来自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'];
$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 = UPL
本文探讨了文件上传漏洞中的代码逻辑检测绕过问题,特别是条件竞争1和2的情况。通过实例代码展示如何在unlink删除文件前访问webshell,以及如何利用burpsuite进行条件竞争攻击,成功上传并执行shell.php。
订阅专栏 解锁全文
172

被折叠的 条评论
为什么被折叠?



