码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 文件上传四次绕过


    目录

    1.文件上传四次绕过

    1.1第一次

    1.删除木马文件的源码

     2.如何绕过

     1.2第二次改进了代码实现了递归删除

    绕过方法:

    1.3 第三次进行了文件的随机数命名,使我们无法猜到路径从而访问不了上传的文件木马

    绕过方法: 

    1.4第四次当解压出错后进行递归删除


    1.文件上传四次绕过

    1.1第一次

    1.删除木马文件的源码

    1. function check_dir($dir)
    2. {
    3. $handle = opendir($dir);//opendir() 打开目录
    4. while (($f = readdir($handle)) !== false) {//打开目录读取内容
    5. if (!in_array($f, array('.', '..'))) {
    6. $ext = strtolower(substr(strrchr($f, '.'), 1));//截取最后的文件名
    7. if (!in_array($ext, array('jpg', 'gif', 'png'))) {//进行判断不符合删除
    8. unlink($dir . $f);
    9. }
    10. }
    11. }
    12. }

    2.运行结果:

     上传的zip文件内容

    被删除后的上传文件

     2.如何绕过

    分析:源码确实存在时间竞争漏洞,但是我们有一种更简单的方法,从源码可以看出并没有递归删除,我们只需要套一个文件夹就能够实现绕过

    报错说没有权限删除,所以我们成功绕过

    上传成功:

     1.2第二次改进了代码实现了递归删除

    1. function check_dir($dir){
    2. $handle = opendir($dir);
    3. while(($f = readdir($handle)) !== false){
    4. if(!in_array($f, array('.', '..'))){
    5. if(is_dir($dir.$f)){//判断是否还有文件夹
    6. check_dir($dir.$f.'/');有就进行删除
    7. }else{
    8. $ext = strtolower(substr(strrchr($f, '.'), 1));
    9. if(!in_array($ext, array('jpg', 'gif', 'png'))){
    10. unlink($dir.$f);
    11. }
    12. }
    13. }
    14. }
    15. }

    绕过方法:

    此漏洞为时间竞争型漏洞,我们可以通过burp软件,在文件已经上传还未删除时我们访问文件

    1.3 第三次进行了文件的随机数命名,使我们无法猜到路径从而访问不了上传的文件木马

    $temp_dir = $dir.md5(time(). rand(1000,9999)).'/';

    手动上传结果:

    采用时间竞争的方法就失效了,我们无法知道具体路径,访问不了文件了

    绕过方法: 

    构造一个错误的压缩包,解压到一半失败了,程序直接退出不会执行后面的删除操作

    构造解压到一半出错的数据包:

    1.用010 editor 修改deCrc的值保存(PHP自带的ZipArchive库容忍度比较高,不适用)

    2.在010editor中将2.txt的deFileName属性的值改成“2.tx:”(本次采用这种)

    3.在Linux下也有类似的方法,我们可以将文件名改成5个斜杠(/)

    上传文件报错:

     结果php文件成功上传:

     细节:压缩包中php文件必须排在其他文件前面。

    1.4第四次当解压出错后进行递归删除

    绕过方法:

    文件名改为../../../filename.php

    当文件解压时解压到了上级目录,递归删除时就不会删除文件了

    修改文件名全部在010editor上

  • 相关阅读:
    java计算机毕业设计VUE商场库存管理系统MyBatis+系统+LW文档+源码+调试部署
    firefox浏览器添加自定义搜索引擎方法
    linux之/etc/skel目录
    企业网站的制作流程是什么?设计和制作一个网站需要多长时间?
    Java高级——编译JDK
    大厂标配 | 百亿级并发系统设计 | 学完薪资框框涨
    【每日训练】组队竞赛&&删除公共字符
    ​LeetCode解法汇总2678. 老人的数目
    缓存与数据库双写一致性几种策略分析
    数据库的基本操作(期末复习大全)
  • 原文地址:https://blog.csdn.net/lin152235/article/details/126349288
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号