upload-labs 第6-20关

2023-11-05


这几关都是特殊的绕过检测方式

第6关

第六关其实没什么思路,就是对比了一下和第五关的代码发现
第六关代码没有这个在这里插入图片描述
因为后缀名对大小写不敏感的问题
我们第五关采用了大小写混合注入,那么这关,给后缀名加上留白,能否达到效果呢?我们用burp抓包修改在这里插入图片描述
将.php之前加上留白,forward,ok,成功在这里插入图片描述

第7关

老套路,比较第六关和第七关的不同,
发现,第七关缺少这个
在这里插入图片描述
意思是我们可以采用末尾加点来绕过判断机制在这里插入图片描述
ok,成功
在这里插入图片描述

第8关

对比第七关,他少了这个在这里插入图片描述
???这是个嘛呀!!!!靓仔落泪!!算了,百度一波

在php+windows的情况下:如果文件名+":: D A T A " 会 把 : : DATA"会把:: DATA"::DATA之后的数据当成文件流处理,不会检测后缀名. 且保持 " :: D A T A " 之 前 的 文 件 名 。 利 用 w i n d o w s 特 性 , 可 在 后 缀 名 中 加 ” : : DATA"之前的文件名。利用windows特性,可在后缀名中加” :: DATA"windows::DATA”绕过

搜嘎,这就很明显了
在这里插入图片描述
检测一下,ok成功在这里插入图片描述

第9关

这里和前面几关的代码比较过后发现,已经没有提示了。

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }

比较后发现,这就是第一关补了几个漏洞
这里采用叠加注入 后缀名改为(shell.php+点+空格+点)
他每种过滤一个,咱其中一种加两个(机智如我)
测试一下
在这里插入图片描述
菜刀试一下,ok成功

在这里插入图片描述

第10关

第十关和第九关思想差不多,查看代码
在这里插入图片描述
他采用了替换函数,将后缀名php替换成了空格,但是,他只替换一次,咱们双写就好了。
把中间的php替换为空格后,剩下的也正好组合成php
注意 不能双写为phpphp
webshell.pphphp
测试
在这里插入图片描述

第11关

在这里插入图片描述
分析代码侯会发现,上传路径是可控的。
那么我们就采用%00截断法,在url中%00是隔断符号,相当于注释符 --+和#

将路径改为path=“upload/webshell.php%00”,那么拼接之后,文件上传时就变成了
“upload/webshell.php%00webshell.jpg”,这时上传便将.php上传进去,而.jpg则被截断

本关需要php的magic_quotes_gpc为OFF状态,所以得先在相应的php版本目录下找到配置文件php.ini,然后把magic_quotes_gpc的状态修改为OFF,修改完之后重启一下服务就可以了

第12关

分析一下源代码

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传失败";
        }
    } else {
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

还是熟悉的路径可控,不过这次是post传进来。
但是这次不能直接抓包在后面加上%00,因为post不会像get一样对%00进行自动解码
所以得换另一种方法进行%00绕过,
用Burp Suite代理构造sava_path=/upload/webshell.php%00,然后再filename处修改文件拓展名为png(或jpg、gif),由于这一关不能对%00进行自动解码,所以还需要在二进制中进行修改,把webshell.php对应的二进制数后面一位改成00。

第13关

在这里插入图片描述
这里我们需要先制作图片木马
copy 1.jpg /b + 1.php /a shell.jpg\png\gif
之后上传即可

第14关

做法同第13关一样
只不过是换了一种检测方法
在这里插入图片描述

第15关

同上
这里介绍一下

exif_imagetype() 读取一个图像的第一个字节并检查其签名。 如果发现了恰当的签名则返回一个对应的常量,否则返回
FALSE。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但本函数快得多。

第16关

这一关,具体参照16关通关详细解说

第17关

他提示我们需要代码审计

$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 = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

这段代码重要的点在于先将文件上传到服务器,再判断后缀名,如果合法则保留下来,如果不合法,则删除在服务器的文件。
所以根据这个流程,可以通过条件竞争的方式在unlink()函数删除之前,访问上传文件,在此之前先来了解一下条件竞争

条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

在burp中不断发送上传webshell的数据包,然后不断在浏览器中访问,发现通过竞争可以访问到在这里插入图片描述
在嗅探抓包过程中,常见的有两种200和304。这两个状态码都关系到能否获取重要信息。当客户第一次请求服务器资源,服务器成功返回资源,这时状态码为200。所以,状态码为200的数据包往往包含用户从服务器获取的数据。

状态码200:请求已成功,请求所希望的响应头或数据体将随此响应返回。即返回的数据为全量的数据,如果文件不通过GZIP压缩的话,文件是多大,则要有多大传输量。

有200的返回码说明我们已经成功

第18关

$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 = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

这里先用move函数将上传的文件保存,再用renameFile函数重命名。所以也存在条件竞争,绕过方法和上面Pass-17差不多。

第19关

这关采取00截断法在这里插入图片描述
先更改保存的文见名称
在用burp将save_name那里的webshell.php.jpg中php后面的点的十六进制(2e)改为00
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

upload-labs 第6-20关 的相关文章

  • Android:在 Flickr 上上传图片

    我必须制作一个 Android 应用程序来将图片从手机上传到 Flickr 我开始读书API Flickr 文档 http www flickr com services api 但仍然想了解如何进行身份验证以及如何上传 我也在这里阅读了类
  • cURL 上传到 Google 云端硬盘

    我可以通过 json 到 Drive 文件夹中在 Google Drive 中创建一个文件 data array title gt FILES file name parents gt array array kind gt drive p
  • 使用 PHP 上传非常大的数据

    我想允许将非常大的文件上传到我们的 PHP 应用程序中 数百兆 8 GB 然而 这存在一些问题 Browser HTML 上传的反馈很糟糕 我们需要轮询进度 这有点傻 或者根本不显示任何反馈 Flash 上传程序在开始上传之前将整个文件放入
  • 是否可以让您上传的 iPhone 应用程序自动更新? [复制]

    这个问题在这里已经有答案了 我即将将我的 iPhone 应用程序上传到苹果商店 但我打算在不久的将来发布更多版本 一旦我将新版本上传到苹果商店 是否有办法使我的应用程序自动更新 也就是说 我即将上传版本 1 0 一旦我上传版本 1 x 用户
  • Flash上​​传图片调整客户端大小

    有谁知道如何使用 Flash 调整客户端图像大小 例子 客户选择一张 1200x800 的图像 在上传之前 Flash 会将其变成一半或其他什么 有什么想法吗 Plupload 是开源的 拥有良好的文档并支持多个平台 包括 Gears 和
  • Python应用程序引擎:如何保存图像?

    这是我从 flex 4 文件参考上传中得到的 自我请求 Request POST UPLOAD Accept text Cache Control no cache Connection Keep Alive Content Length
  • 如何将图像路径和名称上传到数据库 - Codeigniter

    我知道这个问题已经被问过好几次了 但是我发现的所有其他问题都与我想要的不同 我想将文件名和文件路径上传到名为 工厂图像 的表 这样做的最佳方法是什么 我的控制器功能 function do upload config upload path
  • 如何使用Delphi 2010优化上传例程?

    My 尚未发布Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器 现在我使用 HTTPS POST 发送文件 简化的 算法基本上是 将文件拆分为 片 每个片 256KB 对于每个切片 将其 POST 到服务器 IE 对于
  • 使用 PHP 上传 DOC 或 PDF

    我可以很好地上传图像 但是当我将类型从 image jpg image gif 更改为 application msword 和 application pdf 时 它不起作用 这是我的代码 完全相同的代码适用于图像 但对于上传文档和 pd
  • 在客户端将大文件(> 2GB)压缩为 ZIP

    我使用构建上传工具node js and socket io 因为他们通常会上传令人难以置信的巨大文件 而普通的上传表单将无法工作 问题是他们想在发送之前将文件压缩成zip 以提高传输效率 我一直在研究压缩方法 例如JSZip http s
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • 如何使用 JavaScript 上传文件而不进行回发?

    我正在 ASP NET 中进行文件上传 我用了
  • Flutter http请求上传mp3文件

    我使用这个 api 上传 mp3 文件 使用这种方法 Future
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • XMPP 多用户聊天设置群聊头像

    我正在开发一个带有聊天功能的 iOS 应用程序 我正在为该应用程序使用 XMPP 在XMPP多用户聊天中 是否有功能可以像我们在whatsapp中那样为会议室设置头像或群组图像 我检查过XEP 0045 http xmpp org exte
  • 使用 html5 分块上传文件

    我正在尝试使用 html5 的文件 API 分块上传文件 然后在服务器端用 php 重新组装它 我正在上传视频 但是当我在服务器端合并文件时 大小增加了 并且它变成了无效文件 请注意 以下 html5 代码仅适用于 chrome 浏览器 在
  • HTML/CSS - 使用图像作为输入类型=文件

    如何使用此图像 http h899310 devhost se proxy newProxy uplfile png http h899310 devhost se proxy newProxy uplfile png 而不是常规的
  • xhr 响应 for 循环不起作用

    我有 xhr 和 for 循环 它的工作非常罕见 for var i 0 i lt this files length i var xhr new XMLHttpRequest xhr upload onprogress function
  • HTML5 文件 API 和 AJAX 上传分块问题

    我编写了一个带有单独进度的拖放多个文件上传等 除了一件事之外 它工作得非常好 上传较大文件时 有时浏览器会锁定 直到上传完成 我认为这是因为该文件存储在浏览器的内存中并占用了浏览器可用的所有资源 我想知道 是否可以逐段读取文件并在读取时通过
  • 是否可以在通过表单上传本地图像之前预览它们?

    更具体地说 我想使用一种带有一个或多个用于图像的文件输入字段的表单 当这些字段发生更改时 我想在将数据发送到服务器之前显示关联图像的预览 我尝试过多种 JavaScript 方法 但总是遇到安全错误 我不介意使用 java 或 flash

随机推荐

  • 一文详解Spring事务传播机制

    目录 背景 Spring事务 Transactional注解 使用场景 失效场景 原理 常用参数 注意 事务传播机制 处理嵌套事务流程 主事务为REQUIRED子事务为REQUIRED 主事务为REQUIRED子事务为REQUIRES NE
  • Android JNI 打印日志

    首先要保证Cmake文件中有log模块引用 不然编译不通过 编译一个库 add library native lib 库的名字 SHARED 动态库 so库 native lib cpp 需要编译的C 文件 相当于定义一个变量log lib
  • 内核模式驱动程序的网络结构

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 1 Windows 2000 网络结构和OSI模型 Windows 2000网络结构是以国际标准化组织 ISO 制定的七层网络模型为基础的
  • 刷脸支付助力商家吸引客户增加客流量

    顾客支付完成后 直接领取会员卡 保存到微信卡包 可以作为充值卡 积分卡 打折卡 商家可以进行自定义 使用方便 不易丢失 灵活度高 同时商家还可以设置一键分享会员卡 通过老顾客转介绍有礼 快速增加会员 商家可自行发送优惠劵 通过刷脸支付即可领
  • ubuntu添加vlan和路由追踪

    1 linux添加vlan子接口 安装vconfig命令 apt get install vlan vconfig add eth0 105 eth0为物理网络接口名称 ifconfig eth0 105 192 168 105 10 对上
  • HTML 5 Canvas vs. SVG

    一 SVG SVG 是一种使用 XML 描述 2D 图形的语言 SVG 基于 XML 这意味着 SVG DOM 中的每个元素都是可用的 您可以为某个元素附加 JavaScript 事件处理器 在 SVG 中 每个被绘制的图形均被视为对象 如
  • 面试题 02.03. 删除中间节点

    面试题 02 03 删除中间节点 删除中间节点 这道题是说只能访问中间某个位置的节点 然后要把它删除 由于没给前驱指针 如果真的删了中间的节点 链表就断开了 所以考虑把下一个节点的值赋给当前节点 然后删除下一个节点 这样就相当于删除了中间节
  • 幸福感

    抱怨 坦荡的看自己 做自己 我有什么 我要什么 我愿意放弃什么 公平 我们过这一生是为什么呢 世界什么时公平与不公平呢 人最宝贵的 客观的 生命和时间 心态 幸福感来自于心态 一个乐观的心态 每天都会发生很多事情让自己很浮躁 有时会觉得身心
  • [1042]JWT加密

    文章目录 简介 起源 数据格式 JWT交互流程 python使用jwt 非对称加密 简介 JWT 全称是Json Web Token 是JSON风格轻量级的授权和身份认证规范 可实现无状态 分布式的Web应用授权 jwt的解析工具 http
  • 有人物联口红DTU DR154配置与RS 485传感器数据处理

    一 硬件设备 1 有人物联口红DTU DR154 RS 485版本 配置的话通过小程序 联博士 蓝牙配置 手机扫描DTU背后的二维码即可 蓝牙密码也在背面 省去了连接电脑硬件配置的繁琐步骤 2 温度传感器 速灵科RSDS5 RS485接口
  • C语言位运算符及作用:与、或、异或、取反、左移和右移

    一 按位与 如果两个相应的二进制位都为1 则该位的结果值为1 否则为0 应用 1 清零 若想对一个存储单元清零 即使其全部二进制位为0 只要找一个二进制数 其中各个位符合一下条件 原来的数中为1的位 新数中相应位为0 然后使二者进行 运算
  • java反编译篇--miaow.Y.Hu

    好了 好久没更新了 今天来一篇关于java反编译的篇举例子 Java编译文件是指通过Java编译器将Java源代码文件 java文件 编译成字节码文件 class文件 的过程 在Java中 源代码文件包含人类可读的文本 而字节码文件是计算机
  • 常见分布的密度函数图像

    常见分布的密度函数图像 作者 凯鲁嘎吉 博客园 http www cnblogs com kailugaji 一 gamma分布 1 2 3 二 beta分布 1 a 1 2 b 1 3 三 卡方分布 四 t分布 五 F分布 1 n1 5
  • 垃圾分类小程序(含源码)

    前言 鉴于前期一段时间 自己接触小程序这块儿 根据当时的政策 随编写了垃圾分类小程序 在后期也做了很多的功能迭代 基本满足目前市面上的使用需求 期间也对当时垃圾分类的方案进行了简单汇总 可回收物 可回收物就是再生资源 指生活垃圾中未经污染
  • JDK1.8中关于HashMap的红黑树讲解

    一 首先需要了解以下几个问题 为什么要引入红黑数 特殊的平衡二叉树 数据结构 引入红黑树HashMap做了哪些改造 红黑树的特性 红黑树的具体实现方式 二 逐一解释以上三个问题 1 1 为什么要引入红黑数 特殊的平衡二叉树 数据结构 由于在
  • Matlab:如何读取并处理txt数据?

    Matlab 如何读取并处理txt数据 在Matlab中 读取和处理文本文件是非常常见的任务 txt文件是最常见的文本文件格式之一 可以包含各种类型的数据 此处介绍在Matlab中如何读取和处理txt文件 导入txt文件 Matlab提供了
  • cpp课程设计实验题:设计一个时间类Time,要求: (1)包含时(hour)、分(minute)和秒(second)私有数据成员。 (2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载

    设计一个时间类Time 要求 1 包含时 hour 分 minute 和秒 second 私有数据成员 2 包含构造函数 重载关于一时间加上另一时间的加法运算符 重载关于一时间减去另一时间的减加运算符 重载输出运算符 lt lt 与输入运算
  • 基础算法题——younik吃大餐(多重背包)

    younik吃大餐 题目描述 Younik的检查结果出来了 核酸检测为阴性 她非常高兴 立刻决定去饭店大吃一顿 到了饭店 Younik看到琳琅满目的菜单 开始犯了选择困难症 这时作为顶级吃货的你恰好坐到了Younik的旁桌 你决定发扬一下雷
  • UE发起的PDU Session Establishment流程详解(2)

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 在介绍完流程详解后 会整理专题内容 比如切片 服务发现 QoS流端到端
  • upload-labs 第6-20关

    upload labs关数6 20 第6关 第7关 第8关 第9关 第10关 第11关 第12关 第13关 第14关 第15关 第16关 第17关 第18关 第19关 这几关都是特殊的绕过检测方式 第6关 第六关其实没什么思路 就是对比了一