环境

windows,phpstudy,PHP版本5.2.17

第一题 前端js检查

上传小马,出现 查看源码

这里是通过前端js检查

我们可以先将文件后缀改为.jpg

然后用bp抓包,在将.jpg改为.php

这里也可以禁用js

第二题 content-type类型绕过

查看源码

发现只检查content-type,于是将content-type改为image/.jpg绕过

第三题 黑名单绕过

查看源码

可以看到代码使用黑名单来过滤

这里可以上传后缀为php3,pht,phtml,php5,phps等来绕过(它们会被解析为php)

前提是apache的httpd.conf中有如下配置代码

  1. AddType application/x-httpd-php .php .phtml .phps .php5 .pht

其他语言也有类似的情况,改后缀名上传即可:



由于我这里使用的是phpstudy+windows,由于配置原因是解析不了php3等等这些后缀的

第四题 .htaccess绕过

查看源码还是黑名单

几乎过滤了所有有问题的后缀名,除了.htaccess(apache的配置文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。),于是

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

  1. <FilesMatch "2.jpg">
  2. SetHandler application/x-httpd-php
  3. </FilesMatch>

.htaccess文件的内容的意思是 对2.jpg使用php重新解析

然后再上传jpg的图片马,

也可以

  1. SetHandler application/x-httpd-php

它会把所有上传文件当成php来解析

注意

启用.htaccess,需要修改httpd.conf,启用AllowOverride(将该值改为all)

连接

第五题 大小写绕过

查看源码

所有的都被过滤

但是可以发现,本题去掉了大小写绕过的逃逸。

直接上传.PHp。。

第六题 空格绕过

对比第五题的源码可以发现,本题源码少了

那么我们可以上传PHP文件,然后使用burp suit抓包修改后缀名格式为php加空格绕过。

第七题 点绕过

查看源码发现少了可以在后缀中加点绕过

第八题 ::$DATA绕过

查看源码,少了



在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

可在后缀名中加” ::$DATA”绕过:

然后能够直接访问成功即可

第九题 只过滤了一次且对后缀没有重命名的绕过

从源代码可以看出前几题的绕过方式全部被修复了。

程序先是去除文件名前后的空格,再去除文件名最后所有的点, 再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而是使用处理后的文件名(红线的那一行表示路径拼接的是处理后的文件名)

可以利用4.php. .(两个点号之间有一个空格)绕过,

(也就是这个上传只过滤一次关键字。)

第十题 双写绕过

将非法后缀替换为空

于是可以利用双写绕过:

直接将后缀改为.pphphp上传。。

上传之后会变成.php

第十一题 get型%00截断

这一题并没有对我们上传的文件进行处理,但会对我们保存的路径进行处理,也就是我们上传后的文件名会被重命名

又发现有一个get传递的参数,save_path,这是我们可控的一个参数,于是可以尝试%00截断

使用%00截断,需要两个条件

(1)php版本小于5.3.4

(2)php的magic_quotes_gpc为OFF状态

上传一个7.jpg抓包在令save_path=…/upload/7.php%00

这里可能是其它配置原因报错了。。

后来又试了一下在phpstudy-其他选项-php扩展即设置-参数开关设置-把magic_quotes_gpc关了

突然发现可以上传了

第十二题 post型%00截断

发现只是get变成了post,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。

先在upload/后面加8.php+

然后找到加号对应的二进制成功上传

第十三题 文件头检查

这里主要是取上传文件的头两个字节判断文件类型,因此直接上传图片马即可,制作方法:

copy 1.jpg /b + 1.php /a 2.jpg

然后上传

之后可以通过文件包含漏洞来利用

比如我们可以upload目录下写一个include.php文件

  1. <?php
  2. $file = $_GET[ 'page' ];
  3. include($file);
  4. ?>

能正常访问即可(图片中隐藏的一句话木马此时已经运行)

包含这个页面后,会看到很多乱码,这些都是jpg文件的内容,当然在页面上是看不到一句话木马的语句的,因为已经被解析为php代码在后端运行的,不会显示在页面上。

然后就可以使用菜刀来连接木马

第十四题 突破getimagesize

这里用getimagesize获取文件类型,还是直接就可以利用图片马就可进行绕过:

getimagesize知识点

array getimagesize ( string KaTeX parse error: Expected 'EOF', got '&' at position 19: …ename [, array &̲imageinfo ] )

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误。

因此$info[2]指的是文件的类型

这里我是添加GIF图片的文件头GIF89a,绕过GIF图片检查。

先上传22.php在加GIF98a

第十五题 突破exif_imagetype

这里用到php_exif模块来判断文件类型,还是直接就可以利用图片马就可进行绕过:

出现报错

解决办法打开php_exif

(1).phpstudy-其他选项-php扩展即设置-php扩展-打开php_exif

(2).如下

1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号

2.在php.ini文件中找到;extension=php_mbstring.dll,去掉前面的分号,并将此行移动到extension=php_exif.dll之前,使之首先加载*。

3.找到[exif]段,把下面语句的分号去掉。

;exif.encode_unicode = ISO-8859-15

;exif.decode_unicode_motorola = UCS-2BE

;exif.decode_unicode_intel = UCS-2LE

;exif.encode_jis =

;exif.decode_jis_motorola = JIS

;exif.decode_jis_intel = JIS

重启php

之后就可以成功上传了

第十六题 二次渲染绕过

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。 该系列函数有: imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

imagecreatefromwbmp():创建一块画布,并从 WBMP 文件或 URL 地址载入一副图像

imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像

fileext和fileext和fileext和filetype是检验是否为gif格式.

然后使用move_uploaded_file()函数来做判断条件,如果成功会将文件移动到$target_path

这里的二次渲染是根据上传的图片生成一个新的图片,然后删除掉原来的图片。

将一句话添加到gif图片的尾部.

把上传后的图片下载到本地后可以发现,我们在gif末端添加的php代码已经被去除.

关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了.

经过对比,蓝色部分是没有发生变化的,

将代码插入到这一段

上传

在查看上传后生成的7665.gif,这里可以看到PHP代码没有被删除,上传成功

详细参考https://xz.aliyun.com/t/2657#toc-18

第十七题 条件竞争

这里是先将文件上传到服务器,然后检测后缀,符合则通过rename修改名称,再通过unlink删除文件,否则直接删除,因此可以通过条件竞争的方式在unlink之前,访问webshell。

这里我是上传一个PHP文件,内容为

<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd]);?>');?>

这个可以在我们访问到webshell时在上传目录生成一个带一句话的shell.php

首先在burp中不断发送上传webshell的数据包:

抓包后放入intruder模块中选择发送多次

然后不断在浏览器中访问,会有一瞬间访问成功

这时就会发现upload文件夹下生成了shell.php文件,然后就可以利用了。

第十八题 条件竞争

尝试很久无果后,看了一下其它解题文章

本关对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等

这里move()在renamefile()前面,也就是先移动到临时目录再重命名,所以同样存在条件竞争漏洞。

条件竞争的绕过和上题差不多,可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,就可以上传成功了

后来发现这题也可以直接上传图片马。。

第十九题 %00截断

也是一个00截断绕过方法于pass12相同

查看源码发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:

上传

抓包后修改

upload-labs通关集的更多相关文章

  1. SUCTF 2019 Upload labs 2 踩坑记录

    SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...

  2. Upload - Labs (下)

    Pass - 11: 1.查看源代码,发现进行了一次对后缀名替换成空格,因此考虑双写绕过, 2.上传成功, 关键代码: $is_upload = false; $msg = null; if (iss ...

  3. Upload - Labs (上)

    Pass - 01: 1.尝试上传一个php文件:aaa.php,发现只允许上传某些图片类型,用bp抓包,发现http请求都没通过burp就弹出了不允许上传的提示框,这表明验证点在前端,而不在服务端 ...

  4. Docker中自动化搭建Hadoop2.6完全分布式集群

    这一节将在<Dockerfile完成Hadoop2.6的伪分布式搭建>的基础上搭建一个完全分布式的Hadoop集群. 1. 搭建集群中需要用到的文件 [root@centos-docker ...

  5. Upload-labs通关指南(上) 1-10

    Upload-labs 所有文章和随笔(随笔将不于csdn更新)将于我的个人博客(移动端暂未适配)第一时间更新. 一些网站存在文件上传接口,一旦存在这个接口就有可能存在漏洞. 文件上传漏洞的逻辑是将一 ...

  6. buu学习记录(上)

    前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...

  7. [web安全原理分析]-文件上传漏洞基础

    简介 前端JS过滤绕过 待更新... 文件名过滤绕过 待更新 Content-type过滤绕过 Content-Type用于定义网络文件的类型和网页编码,用来告诉文件接收方以什么形式.什么编码读取这个 ...

  8. [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)

    简介  原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn  考察知识点:上传绕过..user.ini  线上平台:h ...

  9. DVWA File Upload 通关教程

    File Upload,即文件上传.文件上传漏洞通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁 ...

随机推荐

  1. Windows 下 LaTeX 手动安装宏包(package)以及生成帮助文档的整套流程

    本文简单介绍如何手动安装一个 LaTeX 宏包. 一般来说,下载的 TeX 发行版已经自带了很多宏包,可以满足绝大部分需求,但是偶尔我 们也可能碰到需要使用的宏包碰巧没有安装的情况,这时我们就需要自己 ...

  2. 使用powerdesigner进行数据库设计

    powerdesigner安装破解文件:链接:https://pan.baidu.com/s/1oKAdUqTKElQ9d86FV-SDTQ 密码:l4y5 基本操作参考:1.PowerDesigne ...

  3. 【01】React 环境搭建

    react来自于Facebook公司的开源项目 react 组件化模块化  开发模式 react通过对DOM的模拟(虚拟dom),最大限度地减少与DOM的交互  (数据绑定) react 基于jsx的 ...

  4. linux lsof常用方法

    lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具,在linux环境下,任何事物都是以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.系统 ...

  5. optparse(命令行参数解析工具)

    在用Python做自动化的时候,命令行的解析一定是少不了的,有很多命令行解析工具库,其中Python内建的一个库optparse,还是比较好用的 1.贴代码并注释 # coding=UTF-8 fro ...

  6. python安装pip (windows64)

    1.前提条件是先安装了easy_install(easy_install安装教程http://www.cnblogs.com/IT-Crowd/articles/6528469.html) 2.在ea ...

  7. 原型模式故事链(3)--JS的数据类型、以及区别、区分、转化

    上一章--原型链讲解:传送门:https://segmentfault.com/a/11... 在上一章讲解原型链时提到了:所有的引用类型都有一个_proto_属性,称之为隐式原型.那么引用类型是什么 ...

  8. 使用CSS实现折叠面板总结

    任务目的 深入理解html中radio的特性 深入理解CSS选择器以及伪元素的使用 任务描述 使用input的radio单选框特性结合CSS中的伪元素实现bootstrap中折叠面板(点击查看样例), ...

  9. 量子计算机编程(二)——QPU基础函数

    第二部分主要是QPU的基础功能,第一部分就像是我们有了哪些基本的语句,第二部分就是我们能写一些简单基础的函数,一些小模块,第三部分就是他的应用了. 先来看一下一个简单量子应用的结构: 第一步,将量子态 ...

  10. Apache Tomcat 文件包含漏洞(CVE-2020-1938)

    2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938).该漏洞是由于Tomcat AJP协议存在缺陷 ...