upload-labs通关总结

2023-11-04

准备阶段

upload-labs下载地址:https://github.com/c0ny1/upload-labs

推荐使用php-5.2.17版本,使用其他版本可能会导致页面报错。
在这里插入图片描述

提示: upload-labs目录下需要手动建一个名为upload的文件夹,用于存放以后上传的文件。
在这里插入图片描述

Pass-01

JS验证绕过
直接上传php文件,提示只能上传jpg,png,gif
在这里插入图片描述

可以直接右击网页查看到源码
在这里插入图片描述

绕过方法:

方法一:把源码复制下来,然后建一个.html文件,把代码粘贴进去,把最下面 js 验证的相关代码删掉,给 form 表单添加一个属性 action ,值为我们要上传到的网址,这样我们就可以用自己写的代码向目标网页上传文件了。
在这里插入图片描述
然后打开这个HTML文件(由于缺少css代码,所以界面可能不太美观,不过不影响功能)直接上传.php文件就可以了。

方法二:复制 js代码到控制台,然后修改上传文件的类型,然后执行,再上传 .php 文件就可以了。
在这里插入图片描述
不过这种方法是一次性的,下次上传前需要再次执行

方法三:以.jpg后缀上传,然后再抓包,修改后缀
在这里插入图片描述

Pass-02

content-type验证绕过

提示说只检查MIME
在这里插入图片描述

修改文件的MIME即可绕过
先把以.jpg后缀上传,然后抓包,修改后缀为.php,放包
在这里插入图片描述
最后访问
在这里插入图片描述

Pass-03

黑名单绕过
在这里插入图片描述
提示不能上传.asp,.aspx,.php,.jsp后缀文件,但我们可以上传php5(2,3,4),phtml,phps,pht都行

由于我搭建upload-labs时用的是phpstudy,所以无法解析以上后缀

其他扩展名的部分绕过方法:

Php: php5(2,3,4) phtml phps等
Asp: asa cer cdx
Aspx: ashx asmx ascx
Jsp: jspx jspf

Pass-04

.htaccess绕过
在这里插入图片描述
黑名单几乎过滤了所有能上传的后缀,但却没有过滤.htaccess文件

先上传一个.htaccess文件,内容如下:

SetHandler application/x-httpd-php 

然后再上传我们的图片马,这时所有的图片都会服务器被当成php文件来解析

在这里插入图片描述

Pass-05

大小写绕过

在这里插入图片描述
这次的黑名单不仅过滤了几乎所有能上传的文件,还过滤了.htaccess,但是这次没有对后缀统一大小,我们可以把后缀改为.PHP,.pHP等进行绕过
在这里插入图片描述

Pass-06

空格绕过
在这里插入图片描述

还是之前的黑名单,而且这次还统一了大小写,但是没有对后缀名进行去空处理,因此可以利用windows的命名规则,在后缀名加空格进行绕过
在这里插入图片描述

Pass-07

点绕过

在这里插入图片描述
跟前几关一样,但是这次没有对后缀名的”.”进行处理,我们可以利用windows特性,让其自动去掉后缀名中最后的”.”,然后绕过:

在这里插入图片描述
最后访问eval.php

在这里插入图片描述

Pass-08

::$DATA绕过
在这里插入图片描述
一样的黑名单,但这次没有过滤::$DATA
::$DATA的有关知识:在windows+php的环境下,如果文件为:文件名+"::$DATA",::$DATA之后的数据会被当成文件流处理,不仅不会检测文件的后缀名,还会保持"::$DATA"之前的文件名不变。

因此在文件名后加"::$DATA"就可进行绕过

在这里插入图片描述

Pass-09

点+空格+点绕过
在这里插入图片描述
经过审计发现,代码先是删除了文件名末尾的点,又去除了文件名前后的空格。所以我们可以通过构造文件名+点+空格+点(eval.php. .)的形式来进行绕过,经过程序过滤后变成eval.php.,又利用windows的特性自动去除后缀中最后的点即可绕过。
在这里插入图片描述

Pass-10

双写后缀名绕过

先上传一个正常的php文件,发现后缀名被替换为空
在这里插入图片描述
查看源码
在这里插入图片描述
可以看出str_ireplace()方法把文件后缀替换成了空,直接双写后缀名(eval.pphphp)即可绕过

在这里插入图片描述

Pass-11

%00截断上传(get型)
在这里插入图片描述
这次是白名单,而且是用$img_path函数进行拼接的,所以可以使用%00进行截断上传
在这里插入图片描述
然后访问eval.php
在这里插入图片描述
提示
使用%00截断的条件
(1)php版本要小于5.3.4
(2)要将php-ini配置文件中的magic_quotes_gpc的值设置为Off
在这里插入图片描述

Pass-12

%00截断上传(post型)
在这里插入图片描述
这关也是%00截断上传,但与11不同的是这里传送save_path时用的是post方法,由于post不会像get对%00进行自动解码,所以需要我们对其进行手动解码。
(1)第一种方法是对%00进行urldecode的操作,选中%00然后右击,然后依次选择/convert selection/URL/URL-decode
在这里插入图片描述
解码后貌似什么都没有,但截断的效果还是有的,直接发包即可绕过
在这里插入图片描述
(2)第二种方法是在eval.php后面打一个空格,别的字符也行,主要是为了占位,然后再在hex里找到eval.php后面的的那个字符的16进制码(20)然后改成%00对应的16进制码00
在这里插入图片描述
最后访问eval.php

在这里插入图片描述

Pass-13

图片马(1)

在这里插入图片描述
代码会根据文件的前两个字节来判断文件的类型,先制作图片马,新建文件eval.gif,内容如下:

GIF89a //gif文件标识头
<?php phpinfo();?>

然后抓包上传修改后缀
在这里插入图片描述
虽然上传成功,但文件名已被更改,不过好在内容没有被感染
在这里插入图片描述
接下来要想利用的话就需要结合文件包含漏洞了,为了展示效果,我在/upload/目录下简单建一个有包含漏洞的文件include.php,内容如下:

<?php
    $filein  = $_GET['file'];
    include($filein);
?>

访问/upload/include.php?file=文件名

在这里插入图片描述

Pass-14

图片马(2)
在这里插入图片描述
这里用getimagesize函数来获取文件类型,不过还可以用刚才的方法进行绕过

getimagesize函数:
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE并产生一条 E_WARNING 级的错误信息。

其实构造完图片马后不用抓包直接上传也行,内容也不会被感染

在这里插入图片描述
访问

在这里插入图片描述

Pass-15

图片马(3)

在这里插入图片描述
这里用了exif_imagetype()来判断上传的文件是否为图片,不过还可以用上面的eval.gif进行绕过

Pass-16

图片马(4)
在这里插入图片描述
这次虽然检测了后缀名,content-type,并且还用imagecreatefromgif判断文件是否为图片,但是还可以用前几关的方法直接上传eval.gif进行绕过

eval.gif内容如下:

GIF89a
<?php phpinfo();?>

直接上传即可

在这里插入图片描述
访问
在这里插入图片描述

Pass-17

条件竞争(1)

在这里插入图片描述
文件上传到服务器后先被rename重命名,再被unlink删除,因此需要通过条件竞争的方式在文件被unlink删除之前,访问到我们的马。

我们先把eval.php的内容改为:

<?php fputs(fopen('shell.php','w'),'<?php phpinfo();?>'); ?>

然后用burp不断的向其发包,只要eval.php被访问到,就会在目录下写入木马shell.php

具体做法:

先抓包

在这里插入图片描述

然后Send to lntruder,并且进行以下的设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后start attack,然后不停地刷新http://127.0.0.1/upload-labs/upload/eval.php
在这里插入图片描述

只要eval.php被访问到,目录下就会有shell.php

在这里插入图片描述

Pass-18

条件竞争(2)

//index.php
$is_upload = false;
$msg = null;
if (isset($_POST['submit']))
{
    require_once("./myupload.php");
    $imgFileName =time();
    $u = new MyUpload($_FILES['upload_file']['name'], $_FILES['upload_file']['tmp_name'], $_FILES['upload_file']['size'],$imgFileName);
    $status_code = $u->upload($UPLOAD_ADDR);
    switch ($status_code) {
        case 1:
            $is_upload = true;
            $img_path = $u->cls_upload_dir . $u->cls_file_rename_to;
            break;
        case 2:
            $msg = '文件已经被上传,但没有重命名。';
            break; 
        case -1:
            $msg = '这个文件不能上传到服务器的临时文件存储目录。';
            break; 
        case -2:
            $msg = '上传失败,上传目录不可写。';
            break; 
        case -3:
            $msg = '上传失败,无法上传该类型文件。';
            break; 
        case -4:
            $msg = '上传失败,上传的文件过大。';
            break; 
        case -5:
            $msg = '上传失败,服务器已经存在相同名称文件。';
            break; 
        case -6:
            $msg = '文件无法上传,文件不能复制到目标目录。';
            break;      
        default:
            $msg = '未知错误!';
            break;
    }
}

//myupload.php
class MyUpload{
......
......
...... 
  var $cls_arr_ext_accepted = array(
      ".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",".ppt",
      ".html", ".xml", ".tiff", ".jpeg", ".png" );

......
......
......  

  function upload( $dir ){
    
    $ret = $this->isUploadedFile();
    
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->setDir( $dir );
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkExtension();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkSize();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }
    
    // if flag to check if the file exists is set to 1
    
    if( $this->cls_file_exists == 1 ){
      
      $ret = $this->checkFileExists();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }

    // if we are here, we are ready to move the file to destination

    $ret = $this->move();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }

    // check if we need to rename the file

    if( $this->cls_rename_file == 1 ){
      $ret = $this->renameFile();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }
    

    return $this->resultUpload( "SUCCESS" );
  
  }
......
......
...... 
};

文件在上传时会先检查后缀名,然后重新命名,这里也有条件竞争,也可以用刚才的方法用burp不断的向服务器进行发包,这样会由于条件竞争,会使程序来不及重命名而上传成功。

Pass-19

%00截断上传
在这里插入图片描述

上传文件时可自定义文件名,move_uploaded_file()函数中有个img_path,并且还是由post参数的save_name控制的,因此可以进行上传截断
在这里插入图片描述
这里由于是post传参,%00需要手动解码,解码可以用前面的/convert selection/URL/URL-decode,或者修改hex里的编码
在这里插入图片描述

最后访问

在这里插入图片描述

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

upload-labs通关总结 的相关文章

  • 如何在vue项目中引入字体图标

    第一步 进入阿里图标库 选择自己需要的图标 第二步 选择之后不要点击下载 点击加入购物车 第三步 点击右上角的购物车 然后点击添加至项目可以新建项目名称 第四步 然后点击红字复制代码 注 画红框的是引用字体图标时的名字 点击画框的地方 在新
  • Qt设计师的简单使用(ui设计界面的简单使用)

    文章目录 一 界面的基本介绍 二 添加控件 2 1 添加控件 2 2 设置控件属性 三 布局器的使用 3 1 布局器介绍 3 2 简单布局 3 3 复杂布局 3 4 带分裂器的布局 四 拓展 4 1 添加模块窗口 4 2 转到槽的使用 4
  • M3U8视频AES解密播放

    在网站上看到一些有意思的视频想要下载下来的时候 发现没有找不到mp4格式的地址 因为该网站视频播放是HLS HTTP Live Streaming 技术 HLS是Apple公司研发的流媒体传输技术 包括一个m3u8的索引文件 多个ts分片文
  • MySql锁机制(全网最全、最详细、最清晰)

    1 MySql锁机制 锁机制的作用 解决因为资源共享 而造成的并发问题 没有锁机制时 例如一号用户和二号用户都要去买同一件商品 假如这件商品是一件衣服 一号用户手速稍微快了一些 于是就先买到了这件衣服 但是因为没有 锁机制 于是就造成了二号
  • 【笔试强训选择题】Day28.习题(错题)解析

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 笔试强训选择题 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 Day28习题 错题 解析 总结 前言 一 Day19习题 错题 解析 1 解析
  • ES高可用及集群管理

    ES高可用及集群管理 Elasticsearch 是一个分布式 高扩展 高实时 RESTful 风格的搜索与数据分析引擎 服务可用性 允许有节点停止服务 数据可用性 部分节点丢失 不会丢失数据 水平扩展 集群容错 一 分片 1 什么是分片及
  • Unity Blend Tree动画的混合,认识Blend Tree

    我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree 如下 那么我们看下新创建的Blend Tree和State有什么区别 唯一的区别就是Montion指向的类型变成了Blend Tr
  • 启动测试(建立索引库,映射,用分页结果集的方法把当前的页面的商品数据拿到后,再用do,while方法把当前商品页面转换给goods列表,再把结果导入索引库)

    我们要去实现对上一次内容的测试 上一次内容大概就是讲了怎么样去完成Goods查询页面的编写 下面的测试当中需要把上次做完的东西导入索引库当中对索引库进行增删改查 然而就会用到下面的方法 一个是Template方法 导入索引库 一个是Repo
  • python调用摄像头

    import cv2 模块称作cv2 python需要用到opencv python模块 可在命令行模式输入 pip install opencv python i https pypi douban com simple capture
  • AI建模

    三维重建是将客观世界中的物体在虚拟空间表达出来 在大众视野中 物品三维重建最直观的应用当属虚拟仿真和VR AR导航 其实在学科专业领域 三维重建已经更早地应用在高精地图 测绘系统 城市规划等领域 科技发展的终极方向应当是普适性 结合现代信息
  • Git的下载及使用

    一 Git的下载 1 下载Git 打开Git官网进行下载Git git scm com 直接点击Download for Windows进入Git版本页面 在此页面根据自己电脑的操作系统选择相应的Git版本 2 安装程序 下载完成之后双击g
  • 炒冷饭,springboot自定义logo详解

    初学springboot的朋友 是不是经常能看到项目启动时日志打印的springboot图标logo 有没有人想让他长成自己的样子 现在我就告诉你 如果不想显示logo 你可以在配置文件中增加如下配置 spring main banner
  • 64位操作系统不能安装64位虚拟机的解决办法

    很多人都遇到过这样的情况把 就是自己的电脑CPU明明是64的 为什么安装64的虚拟机却不能安装 安装时出现如下错误 但是在真实机上安装却没有问题 这是为什么呢 这是因为你电脑的硬件虚拟化没有开启 据说host系统是64位的 guest系统才
  • 1.错误处理org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core。是什么原因造成

    解决方法 tomcat 8 5 启用项目时提示 无法在web xml或使用此应用程序部署的jar文件中解析绝对uri http java sun com jsp jstl core 项目需要扫描Tld文件 修改一下tomcat 配置conf
  • retrofit应用详解与源码解析--奇技淫巧

    本文出自门心叼龙的博客 属于原创类容 未经允许 不得转载 本专栏的同步视频教程已经发布到CSDN学院 https edu csdn net course detail 30408 文章目录 请求超时设置 日志拦截器的设置 网络的缓存设置 自
  • linux shell中\w \s \d \b ^ $等常用匹配用法

    正则表达式 w s d b 用法 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线 s 匹配任意的空白符 d 匹配数字 等价于 0 9 D 匹配非数字字符 b 匹配单词的开始或结束 匹配字符串的开始 匹配字符串的结束 其中 A Z 表
  • running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of

    昨天使用hadoop跑五一的数据 发现报错 Container pid 47660 containerID container 1453101066555 4130018 01 000067 is running beyond physic
  • starUML教程-用例图/类图

    用例图 也称为用户模型图 是从软件需求分析到最终实现的第一步 它是从客户的角度来描述系统功能 它包含3个基本组件 1 参与者 与系统打交道的人或使用该系统的人 2 用例 表示该系统的某项完整功能 3 关系 定义用例之间的关系 泛化关系 扩展
  • 蓝桥杯每日一题(12):猜年龄(小明)(python)

    Topic 来道简单的 小明带两个妹妹参加元宵灯会 别人问她们多大了 她们调皮地说 我们俩的年龄之积是年龄之和的6倍 小明又补充说 她们可不是双胞胎 年龄差肯定也不超过8岁啊 请你写出 小明的较小的妹妹的年龄 Solution 填空题以快为
  • 【web安全】——命令执行漏洞(RCE)详解

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 舞台再大 你不上台 永远是观众 没人会关心你努不努力 摔的痛不痛 他们只会看你最后站在什么位置 然后羡慕或鄙夷座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日

随机推荐

  • 华为OD机试 - 找出两个整数数组中同时出现的整数(Java)

    题目描述 现有两个整数数组 需要你找出两个数组中同时出现的整数 并按照如下要求输出 有同时出现的整数时 先按照同时出现次数 整数在两个数组中都出现并目出现次数较少的那个 进行归类 然后按照出现次数从小到大依次按行输出 没有同时出现的整数时
  • 区块链分布式存储

    想知道更多区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 BAT垄断了互联网创业道路 DAPP成为创投界新趋势 区块链革命引领市场变天 区块链 创业当红 互联网 创业成为经典 Dapp 区块链 应用 将会如何改变我们的互联网
  • Nacos配置中心一直连接本地问题&解决

    最近使用写了一个微服务的demo 使用nacos做配置中心 项目启动我的nacos一直去连接本地 配置文件中也指定了nacos的地址 后来 也是查阅资料才得知 bootstrap yml bootstrap properties 用来在程序
  • Vue解决CDN引入的echarts,通过ajax异步请求的数据不能被正确渲染到视图层的问题

    在参加计算机设计大赛做作品的时候遇到的一个困难 花了挺长时间才解决 在这里做个记录 一 这里先介绍如何CDN引入ECharts 在需要用到ECharts的界面加入 即可 或者先下载好这个文件 src改为这个文件的相对路径 二 以南丁格尔玫瑰
  • 数据结构与算法分析--Java语言描述(第二章(1))

    习题2 8 假设需要生成前N个自然数的一个随机置换 例如 4 1 2 5 2 和 3 1 4 2 5 就是合法的置换 但 5 4 1 2 1 却不是 因为数1出现了两次而数 3 缺没有 这个程序常常用于模拟一些算法 我们假设存在一个随机数生
  • 最快可达 SwinIR 4倍的高效超分网络

    本文首发于 我爱计算机视觉 如需转载等事宜请联系我爱计算机视觉 作者单位 香港理工大学 OPPO 论文链接 https arxiv org abs 2203 06697 代码链接 https github com xindongzhang
  • 如何用NPM删除node_modules文件夹

    大家在日常的开发中相必都遇到过如何快速方便的删除node modules文件夹的问题 很明显如果用常规方式会很费时费力 这里教给大家一种快捷的方式 通过npm命令来删除node modules文件夹 首先通过npm安装删除工具 npm in
  • 10行代码实现Java文件大小格式化,支持GB、TB到YB可再扩展

    话不多说 直接上代码 自己实现的 private static String fileSizeToText Long size Double unit 1024D sizeUnit unit String sizes B KB MB GB
  • 字符串匹配算法总结

    http blog csdn net WINCOL article details 4795369 KMP虽然经典 但是理解起来极其复杂 好不容易理解好了 便起码来巨麻烦 老子就是今天图书馆在写了几个小时才勉强写了一个有bug的 效率不高的
  • L2TP/IPSEC搭建详细步骤

    背景 长沙分公司访问北京总公司的办公OA业务 目前的方法是通过在北京总公司出口防火墙上配置OA业务的端口映射 然后在长沙分公司通过输入北京总部给的域名带上映射的端口即可访问 但该访问过程经过公网 存在数据被截取的风险 当前北京总公司空闲一台
  • github前端插件大全

    常用的插件和库 2017年09月12日 11 42 08 阅读数 1300 本文整合罗列一些平时工作或者练手项目中很可能用到的 github上实用 轻量级 无依赖的插件和库 包括功能插件 UI组件 炫酷动画 前沿技术等 让你在少造轮子的同时
  • STM32/51单片机实训day6(二)——Proteus8.6版本+STM32F103驱动LCD128x64显示信息|Keil5程序设计|串行并行通信笔记

    目录 main c lcd c lcd h 内 容 实现LCD显示 学 时 4学时 知识点 LCD12864芯片介绍 读写操作时序 电路设计 重点 读写操作时序 难点 读写操作时序时间 2022年12月26日 13 30 16 20 总结
  • pb数据窗dw在某一列下怎么去掉重复值

    也就是PB数据窗怎么去掉某一列重复值 如显示结果如下 想到得到如下显示结果 怎么来做 其实吧 很简单 只需要打开数据窗对象 单击 rows 菜单 找到 Suppress Repeating Values 单击弹出如下窗口 把想要去掉重复的列
  • Java数组的应用——数组元素复制(34)

    数组元素的复制 数组元素复制的三种方法及例子 1 一个元素一个元素的复制 使用 号一个一个的赋值 将数组 a1 的元素一个一个的复制给另一个数组 a2 1 代码 方法一 赋值复制 用 System out println 第一种方法 int
  • python print输出语句异常

    今天尝试使用Python 进行相关编程 可以刚刚开始就碰到了拦路虎 python 问题异常 问题分析 print 在python2中是语句 在python3中是函数 python 正常 相关提示 去除print语句 加入print 函数实现
  • 这可能是最为详细的Docker入门吐血总结

    原文地址 https www cnblogs com ECJTUACM 873284962 p 9789130 html Docker是什么 在计算机技术日新月异的今天 Docker 在国内发展的如火如荼 特别是在一线互联网公司 Docke
  • 华为5G认证练习题

    华为5G认证练习题 粗体的是正确答案 粗体的是正确答案 粗体的是正确答案 Ctrl F 可以快速查找题目 第一章 1 移动通信领域 负责制定技术规范和技术报告的是哪个标准组织 单选题 4分 A 3GPP2 B OTSA C 3GPP D I
  • 机器学习 第三讲 机器学习基础、机器学习算法(K-近邻算法、朴素贝叶斯算法)

    文章目录 一 机器学习基础 1 明确几点问题 2 机器学习算法的判别依据 3 机器学习算法分类 4 机器学习开发流程 二 机器学习算法 1 sklearn数据集 1 数据集划分 2 sklearn数据集接口介绍 3 sklearn分类数据集
  • 8.Paper小结——《VFL: A Verifiable Federated Learning withPrivacy-Preserving for Big Data...》

    题目 VFL A Verififiable Federated Learning with Privacy Preserving for Big Data in Industrial IoT VFL 一种可验证的基于隐私的联邦学习 0 Ab
  • upload-labs通关总结

    准备阶段 upload labs下载地址 https github com c0ny1 upload labs 推荐使用php 5 2 17版本 使用其他版本可能会导致页面报错 提示 upload labs目录下需要手动建一个名为uploa