运行环境

操作系统:windows、Linux
php版本:推荐5.2.17(其他版本可能会导致部分Pass无法突破)
php组件:php_gd2,php_exif(部分Pass需要开启这两个组件)
apache:以moudel方式连接
 
前言:
靶机包含漏洞类型分类:
如何判断上传漏洞类型:
 
 
 
第一关
前端JS检查,只允许上传.jpg|.png|.gif文件,上传jpg文件,然后burp抓包,修改为.php即可
 
第二关
服务端对数据包的MIME进行检查,只需burp抓包,修改content-type即可
 
 
第三关
  1.  黑名单禁止 上传.asp|.aspx|.php|.jsp后缀文件,  可以使用php3 php4 php5 pht phtml绕过
  2.  文件上传后被重命名,可以在报文中找到上传后的文件名
 
 
第四关
黑名单 禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.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没有被禁止, 可以上传如下 .htaccess文件,重写文件解析规则,是1.jpg被解析为php,然后上传1.jpg即可
 
 
第五关
对比与第四关,黑名单加上了 .htaccess,但是忘记将后缀名进行大小写统一
即不存在如下代码:
这样我们上传 .PhP文件即可
 
第六关
在第五关的基础上,加上了将后缀全部转换为小写。 但是没有对后缀名进行去空处理,可在后缀名中加空格绕过:
第七关
与第六关相比,进行了首尾去空,但是没有删除文件名末尾的点, 利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过
 

 
 
第八关
黑名单、.htaccess、转换为小写、首尾去空 都做了, 但是没有对后缀名进行去”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过:
【 必须是windows, 必须是php, 必须是那个源文件 php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名】
 
 
第九关
黑名单过滤,注意第15行和第八关不太一样,过滤掉了::$DATA,但是路径拼接的是处理后的文件名,于是构造1.php. . (点+空格+点),经过处理后,文件名变成info.php.,即可绕过。
 
 
第十关
黑名单,匹配到的被替换为空,双写即可绕过
 
 
第十一关
看到是白名单判断只允许上传jpg,png,gif,但是$img_path直接拼接,并且上传路径可控,因此可以利用%00截断绕过:
 
%00截断条件:
(1)php版本小于5.3.4
(2)php的magic_quotes_gpc为OFF状态
 
实现:
 
 
 
 
第十二关
这里的源代码就改了一点点,就是把get改为post类型,一样的方式绕过,只不过这里需要在二进制里面修改%00,因为post不会像get对%00进行自动解码。
 
 
 
 
 
 
第十三关
通过读文件的前2个字节判断文件类型,因此直接上传图片马即可,制作方法: copy 1.jpg/b + 1.php/a 2.jpg      b表示二进制文件  a表示ASCII文件
 
有时上述制作方法不正确可以尝试换一下图片,也可以将jgp文件的文件头通过winhex等写入,然后加上  一句话即可,如下:
 
上传之后,利用文件包含漏洞触发
 
 
 
 
第十四关
 
通过getimagesize()检查是否为图片文件,使用copy 1.jpg/b + 1.php/a 2.jpg  这种方式制作图片马,结合文件包含即可。
但是不能通过 改文件头来 伪装成图片了
 
第十五关
 
使用exif_imagetype()检查是否为图片文件,绕过方法同第十四关
 
 
第十六关
 
本关综合判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,绕过方法:
 
(1)代码审计发现,判断逻辑存在漏洞,其先将我们上传的图片保存,然后再进行二次渲染,删除原图片,因此我们可以利用条件竞争,在我们上传的图片马被删除之前触发它。
(2)上传gif图片:先将普通的gif图片上传,会被渲染,渲染之后再下载下来,与原git图片对比,找到渲染前后没有变化的位置,然后在这些位置插入php一句话,再上传即可。
(3)上传jpg、png图片:这两种格式图片的二次渲染绕过要难很多很多,具体参考   https://xz.aliyun.com/t/2657#toc-3
 
第十七关
 
不存在文件包含漏洞了
进行代码审计发现,后台先把我们上传的的文件保存,再进行检查,如果合法则rename,如果不合法则unlink删除。 因此可以通过条件竞争的方式在unlink之前,访问webshell。
 
首先在burp中不断发送上传webshell的数据包:(随便设置个payload就可以)
 
然后不断在浏览器中访问(不断刷新),发现通过竞争可以访问到:
 
 
 
 
 
第十八关
本关对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功(与第十七关不同的就是上传的是图片马)
 
 
 
第十九关
CVE-2015-2348 move_uploaded_file()00截断,上传webshell,同时自定义保存名称,上传的文件名用0x00绕过。改成xx.php【二进制00】jpg
(同第十二关需要在二进制里面修改0x00,因为post不会像get对0x00进行自动解码。)
 
 
 
 
第二十关
代码审计
 
首先end函数取所post参数数组中的最后一个值,$file_name = reset($file) . '.' . $file[count($file) - 1]  我们可以post一个参数名为一个[0]一个[2],然后$file[count(file) - 1]就为空,file_name最终就为reset($file)即$file[0],就可以绕过判断
 
 

upload-labs学习笔记的更多相关文章

  1. Extjs 学习笔记1

    学习笔记 目   录 1 ExtJs 4 1.1 常见错误处理 4 1.1.1 多个js文件中有相同的控件,切换时无法正常显示 4 1.1.2 Store的使用方法 4 1.1.3 gridPanel ...

  2. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  3. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  4. NSURLSession学习笔记

    NSURLSession学习笔记(一)简介 一.URL Session的基本概念 1.三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁 ...

  5. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

  6. [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  10. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

随机推荐

  1. 在WPF(core版本)中引用外部字体不可用问题说明

    这几天使用WPF写软件,想引用外部字体,于是下载了字体文件: 然后在App.xaml中添加了如下代码: <FontFamily x:Key="Digital-7 Mono"& ...

  2. python随用随学-元类

    python中的一切都是对象 按着我的逻辑走: 首先接受一个公理,「python中的一切都是对象」.不要问为什么,吉大爷(Guido van Rossum,python之父)人当初就是这么设计的,不服 ...

  3. volatile和synchronized到底啥区别?多图文讲解告诉你

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  4. centos 7上openJdk 安装

    为什么不安装Oracle版本 oracle jdk 现在下载太恶心了会被登陆拦截.于是就安装openjdk. 步骤 下载 yum -y install java-1.8.0-openjdk java- ...

  5. web页面上展示图片时,图片不显示,报错:ERR_CONTENT_LENGTH_MISMATCH

      问题描述 前端页面加载css,和js文件的时候,经常出现ERR_CONTENT_LENGTH_MISMATCH的报错情况.   查找问题 在单独打开hearder中css,js的网络地址是能打开的 ...

  6. es6的解构函数

    话说,解构无处不在啊,鄙人自从用了vue写项目以来,总是遇到各路大神莫名其妙的写法,然并未出任何错,查之,然解构也,呜呼哀哉,进而习之. 解构(Destructuring):是将一个数据结构分解为更小 ...

  7. 观察者模式(Observer)和发布-订阅者模式(Publish/Subscribe)区别

    观察者模式:定义一对多的关系,让多个观察对象同时监听某一个主题对象,主题对象状态发生变化就通知所有观察者对象.所以它是由两类对像组成:Subject主题+Observer观察者.主题发布事件,观察者通 ...

  8. 看完这篇 HTTPS,和面试官扯皮就没问题了

    下面我们来一起学习一下 HTTPS ,首先问你一个问题,为什么有了 HTTP 之后,还需要有 HTTPS ?我突然有个想法,为什么我们面试的时候需要回答标准答案呢?为什么我们不说出我们自己的想法和见解 ...

  9. 【Oracle】RAC的多实例数据迁移至单机的多实例。

    思路:一般的思路可以通过RMAN进行数据的恢复.由于数据库可以停机,因此,这次试用数据泵(expdp,impdp)进行数据 的导入导出. 1.源数据库导出 通过编写导出shell脚本导出数据,如下: ...

  10. frida(hook工具)的环境搭建

    一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...