文件上传绕过复现

目录

内容

总结:

学习文章:


内容:

昨天在某社区上看到的一篇文章写了一次文件上传的绕过姿势,今天复现一下:

手写模拟上传的过滤和绕过,只是演示了关于本次要过的过滤别的过滤没写

php 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="loadfile" ><br>
    <input type="text" name="filename" >
    <input type="submit" value="提交">
</form>
<body>
</body>
</html>
<?php
error_reporting(1);
$name=$_FILES['loadfile']['name'] or die();
$final=strrchr($name,".");
$position=$_POST["filename"];
$filename=substr($position,0,(strrpos($position,'.')));
#echo $filename;
$arry='/jpg|png/';
if(!preg_match($arry,$final))
{
    echo "非法上传只能上传".$arry;
}
else
{
    $tmp=$_FILES["loadfile"]["tmp_name"];
    $path=move_uploaded_file($tmp,"upload/$filename$final");
    if($path)
    {
        echo "上传成功!".'<br>';
        echo "路径:"."upload/$filename$final";
    }
}
?>

打开成这样的一个界面:

观察代码是一个白名单 过滤只允许jpg和png上传,上传的文件名是可控的

按理来说白名单可以结合%00阻断来实现绕过的,但是发现在接收文件名后会将上传的文件的尾缀强行加到可控文件名上面去,而尾缀又是白名单

这个时候可以利用windows系统文件命名的特性 : 符号来进行阻断

在windows文件命名当中有的特殊符号是不允许出现在文件名中的,而冒号(:)出现在创建文件中时会阻断后面的内容而创建一个空文件

之所以是空文件,是因为在php上传文件移动时是根据给的目录严格创建的,如果说指定的目录upload/test.php:.jpg在创建后是test.php就无法将临时文件移动到指定文件上

冒号后加多一点是给匹配时匹配到最后的一个点

可以看到已经上传成功了

也成功创建了php文件但是木马没写进去,这时候就要靠php在windows下的一个符号特性

php在windows下使用 << 时会调用到windows的通配符的接口导致php在windows中就相当于通配符 *

在文件移动的时候只要让文件在移动时通过通配符找到已经上传的php文件将含有木马的内容写入到该文件上就行了

很简单,只要在上传的文件的尾缀后面加上<<<即可,这里因为尾缀的检验是正则匹配不是强行用等号(==)所以只需要尾缀中含有白名单上的字符即可

创建空的php文件

命名为shels.jpg.php上传成功

写入内容

发现shels.jpg<<<上传成功在windows寻找文件看来就是shels.jpg?*就会去匹配存在的文件这样就可以匹配上shels.jpg.php文件了(前提是没有别的可以匹配到的文件哦)

可以看到内容已经成功写进php文件中

总结:

知识点:

  1. windows创建文件时冒号(:)可以阻断后面的内容
  2. php5.6+版本下
  • <在windows中相当于通配符?
  • <<相当于*

利用条件:

  1. 上传的文件名可控
  2. 添加的尾缀可控(不是对方强行添加固定的尾缀)
  3. 服务器在windows上部署

学习文章:

奇安信攻防社区-记某系统有趣的文件上传 (butian.net)

相关推荐
带娃的IT创业者11 分钟前
深度解析:从零构建高性能 LLM API 中转网关与成本优化实战
开发语言·gpt·llm·php·高性能·成本优化·api网关
墨染天姬1 小时前
[AI]DeepSeek-R1的GRPO算法
人工智能·算法·php
一颗无敌码农1 小时前
多商户与多门店电商系统有什么区别?核心模式解析
微信小程序·php·用户运营·crmeb
a8a3022 小时前
Laravel5.x进化史:核心特性全解析
nginx·php·laravel
ykjhr_3d2 小时前
vr电力安全培训系统有哪些
安全·vr·华锐视点
枷锁—sha3 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 073】详解:静态编译下的自动化 ROP 链构建
网络·汇编·笔记·安全·网络安全·自动化
dog2503 小时前
圆锥曲线与丹德林内切球
网络·php
VBsemi-专注于MOSFET研发定制3 小时前
面向高可靠与能效需求的安全存储系统功率器件选型策略与适配手册
安全
xixixi777773 小时前
AI安全周记:AI驱动攻击占比50%、PQC国标落地、ShinyHunters连环袭击——面对1:25的攻防成本鸿沟,防守方还能撑多久?
人工智能·安全·ai·大模型·aigc·量子计算·供应链
智擎软件测评小祺3 小时前
什么是非功能检测?筑牢软件性能与安全的基石
功能测试·安全·检测·cma·第三方检测·cnas·非功能检测