• 文件上传绕过复现


    目录

     内容

    总结: 

     学习文章:


     

     内容:

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

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

    1. "en">
    2. "UTF-8">
    3. 文件上传
    4. "" method="post" enctype="multipart/form-data">
    5. "file" name="loadfile" >
    6. "text" name="filename" >
    7. "submit" value="提交">
    8. error_reporting(1);
    9. $name=$_FILES['loadfile']['name'] or die();
    10. $final=strrchr($name,".");
    11. $position=$_POST["filename"];
    12. $filename=substr($position,0,(strrpos($position,'.')));
    13. #echo $filename;
    14. $arry='/jpg|png/';
    15. if(!preg_match($arry,$final))
    16. {
    17. echo "非法上传只能上传".$arry;
    18. }
    19. else
    20. {
    21. $tmp=$_FILES["loadfile"]["tmp_name"];
    22. $path=move_uploaded_file($tmp,"upload/$filename$final");
    23. if($path)
    24. {
    25. echo "上传成功!".'
      '
      ;
    26. echo "路径:"."upload/$filename$final";
    27. }
    28. }
    29. ?>

    打开成这样的一个界面:

     观察代码是一个白名单过滤只允许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) 

  • 相关阅读:
    电脑录屏快捷键是什么?win10自带屏幕录制在哪
    对于JSP原理以及源码的深入剖析与理解心得
    使用宝塔面板在Linux上搭建网站,并通过内网穿透实现公网访问
    形态学笔记:侵蚀+膨胀+开运算+闭运算+形态学梯度+顶帽运算+黑帽运算
    第2-3-6章 打包批量下载附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
    aws elastic beanstalk入门之简单使用
    3D打印机升级killpper
    dpdk PMD
    grafana展示的CPU利用率与实际不符的问题探究
    什么是 JSON Web 令牌 (JWT)?为什么 API 使用它们?
  • 原文地址:https://blog.csdn.net/qq_73767109/article/details/136351378