码农知识堂 - 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上

  • 相关阅读:
    vscode 安装leetcode 插件
    Google Earth Engine(GEE)——ui.util.debounce的使用
    Qt编程,事件过滤器、绘图
    MobTech短信验证ApiCloud SDK
    【接口自动化测试】HTTP协议详解
    快速入门Docker
    【Nginx】CentOS 安装Nignx
    Spring Boot拓展XML格式的请求和响应
    第6周 .NET
    Flume学习笔记(3)—— Flume 自定义组件
  • 原文地址:https://blog.csdn.net/lin152235/article/details/126349288
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号