upload-labs是一个和sqli-labs类似的靶场平台,只不过是一个专门学习文件上传的。整理的很好,虽然并不能将服务器解析漏洞考虑进去,但毕竟一个靶场不可能多个web容器吧,关键是思路很重要,github地址:https://github.com/c0ny1/upload-labs

感觉这个思路图做的很好,测试的时候大体流程可以按照这个来,同时将服务器特性以及中间件的解析漏洞考虑进去就差不多了。

开始做题,同时看下后台的实现代码对代码审计也很有帮助的。

第一关是一个前端校验,第二关是服务器端对content-type的一个判断,由于个人习惯,我一般都是在本地写一个一句话木马后文件名改为jpg之类的,直接上传(这个时候content-type是图片格式),抓包将文件名后最改为.php脚本后缀,所有能通过绕过这两关。

第三关是服务器端对文件后缀的黑名单校验(后面的关卡中不特殊说明默认都是服务器端校验)。先看下代码:

采用的黑名单,php的话有时候(配置的原因)php、php3、php4、php5、phtml、pht这些后缀也是可以被解析的,其他语音也有类似的情况,需要尝试:

由于我这里使用的是phpstudy+windows,所以复现不了(由于配置原因是解析不了php3等等这些后缀的)。

第四关:上传php文件显示不合法,然后上传了个aaa后缀的可以,说明还是使用的黑名单。看下源码可以发现基本上将所有非法的脚本后缀就禁用了

但是没有禁用.htaccess,可以通过上传.htaccess文件然后将该文件夹下的所有例如.jgp的文件都按照脚本语言解析,详细信息可以问度娘,上传如下内容的.htaccess文件

意思是将该文件夹下的one.jpg文件按照php格式去解析,然后再上传一个文件名是one.jpg内容是一句话木马的文件,然后访问,可以执行代码。

第五关:将.htaccess后缀也禁止了,但是相比第四关,没有将文件后缀置换成小写,所有可以通过大小写绕过

第六关:依然是黑名单,但这次程序没有对文件后缀去空(其实如果程序没有对文件进行重命名的话,可以借one.php .jpg绕过白名单的)

上传一个php文件,抓包将文件名后缀加上空格,如下图

可以发现windows下保持文件时会自动将空格去除

第七关和第六关类似,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过,所以

这里访问的时候是可以不要.的,存在windows下的时候也是没有.的

第八关;老实说第八关这个绕过方式我之前是不知道的,就是在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

可以看到在服务器中保存的文件还是以php结尾的,访问该文件即可。具体原理还不是很清楚。。。

第九关:这关算是一个逻辑漏洞吧

程序先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用类似one.php. .(两个点号之间有一个空格)绕过,如果重名名了文件的话应该会用$file_ext来进行拼凑文件,这样保存在服务器中的文件将没有后缀(去除了.空格)

第十关:

看代码可以发现程序将所有脚本后缀名都替换为空了,但是可以利用.phphpp这样,去除中间的php后再一次组成了.php。

第十一关:白名单校验

这关考验的是一个00截断的漏洞,当有php环境中有两个截断条件: 1.php版本小于5.3.4 详情关注CVE-2006-7243 2.php的magic_quotes_gpc为OFF状态

给请求中会自动将%00进行url解码,在后台进行拼凑的时候会自动阶段后面的字符串

于是存在服务器中的文件是这样的

第十二关:也是00截断,只不过由于文件路径这个参数是通过post请求发送的,需要抓包后再hex中修改

第十三、十四关、十五关、十六关:

都是利用copy one.jpg /b + one.php /a one.jpg 制作图片马后上传,再结合文件包含漏洞使用,没什么好说的。

十三关是对比文件的前两个字节

十四关是用了getimagesize函数来对文件类型做判断

十五关是用的exif_imagetype函数

十六关是用的二次渲染

第十七关:

可以看到并没有对文件名的后缀做任何校验,但是上传后会改名并马上删除该文件,需要用到并发漏洞(网上都喜欢叫条件竞争)。可以正常上传php文件,抓包后放入intruder模块中选择发送多次,然后在浏览器中访问就好了,在就算程序会对文件名改名也没关系的,直接访问原文件名就好了(one.php)

第十八关:

也是考验竞争条件的问题,由于程序对文件后缀做了白名单校验,所以只能是上传图片木马然后用文件包含。

第十九关:

利用CVE-2015-2348这个漏洞也是00截断的问题,由于也是需要在低版本的php中就不演示了

------------------------------------------------------------------2019.2.27  补充 -------------------------------------------------------------

php中的%00截断    PHP<5.3.29,且GPC关闭  两个条件缺一不可

但当%00截断不能用时,也可以使用zip协议  参考文章https://www.cnblogs.com/milantgh/p/5293628.html   我有时间再补上实例吧

最后我再自己补上各中间件的解析漏洞吧

iis5.x   iis6.0

1. 如果能创建文件夹的话,创建xx.asp文件夹,那么该文件夹下的所有文件都会按asp格式去解析,在该文件夹下上传evil.jpg  访问www.xxx.com/xx.asp/evil.jpg  执行代码

2. 直接上传evil.asp;.jpg文件绕过黑白名单校验,访问www.xxx.com/evil.asp;.jpg时iis会按照asp文件去解析

IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个“.”后,便进入了一种截断状态,在该状态下遇到特殊符号——“/”和“;”,都会进行截断,只保留特殊符号前的部分,即:“.asp”,从而认为文件后缀为“.asp”。

IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞:

在默认Fast-CGI开启状况下,黑阔上传一个名字为evil.jpg,内容为     <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>    的文件,

然后访问evil.jpg/.php,在这个目录下就会生成一句话木马 shell.php

Nginx <8.03 空字节代码执行漏洞      影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码然后通过访问   evil.jpg%00.php      来执行其中的代码

Apache解析漏洞  :

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.   比如 evil.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php.

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个evil.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀

另附一篇不错的文章 https://www.cnblogs.com/shellr00t/p/6426945.html

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. [web安全原理分析]-文件上传漏洞基础

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

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

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

  6. buu学习记录(上)

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

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

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

  8. 解决ngnix服务器上的Discuz!x2.5 Upload Error:413错误

    1.修改php.ini sudo nano /etc/php5/fpm/php.ini #打开php.ini找到并修改以下的参数,目的是修改上传限制 max_execution_time = 900 ...

  9. 页面无刷新Upload File

    页面无刷新Upload File. 利用jquery.form.js的ajaxForm提交文件. 具体参考以下代码: 前台html <%@ Page Language="C#" ...

  10. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?

    复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...

随机推荐

  1. go语言fallthrough的用法心得

    fallthrough:Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面 ...

  2. 更改Nginx网站根目录以及导致的403 forbidden问题解决

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.更改根目录 Nginx默认网站根目录为/usr/local/nginx/html,要将它改成/home/fuxiao/www   更改方法: ...

  3. EasyPermissions的流程

    在app的build.gradle文件的dependencies中,添加依赖: implementation 'pub.devrel:easypermissions:1.3.0' import and ...

  4. java生成txt文件,读txt文件

    1.方法1 public static void main(String[] args) { try { FileWriter fileWriter = new FileWriter("c: ...

  5. 某公司面试java试题之【一】,看看吧,说不定就是你将要做的题

  6. 入围T00ls 2018风云人物

    今天早上打开T00ls,发现成功入围了<T00ls第六届(2018)年度人物风云榜>,共34名年度人物,每个id可投10票,34选10. T00ls是当前国内为数不多的民间网络信息安全研究 ...

  7. linux下GPRS模块使用AT命令实现拨接电话,发中英文短信

    开发板           :fl2440 cpu                :  s3c2440(arm9) 开发模块       :A7(GPRS/GPS) 远程登陆软件:PUTTY **** ...

  8. samba4.4security配置

    security=share在新版中已经被废弃了把security = share改为 security = user map to guest = Bad User 就可以了 [global] wo ...

  9. PGP NO_PUBKEY

    horizon@horizon-pc ~ $ sudo apt-get update Ign http://packages.linuxmint.com rebecca/upstream Transl ...

  10. 11.1 vue(2)

    2018-11-1 19:41:00 2018年倒数第二个月! 越努力越幸运!!!永远不要高估自己! python视频块看完了!还有30天吧就结束了! 今天老师讲的vue 主要是看官网文档 贴上连接  ...