运行环境

操作系统: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. 你相信吗:新药可以让X战警变成现实

           不管男人还是女人.大人还是小孩,心目中都有一个超级英雄梦,梦想着有一天能够具有超级英雄的能力.直到今天,你相信吗?现在医学工作者已经发现通过一种新药可以让人拥有X战警里一些超级英雄的能力 ...

  2. Job Shop

    flow shop: 如果每个作业需要在每个处理机上加工,而且每个作业的工序也相同,即在处理机上加工的顺序相同,则这种多类机的环境称为同顺序作业或流水作业. job shop: 如果每个作业需要在每个 ...

  3. Redis过期key淘汰策略

    Redis采用惰性+定期的key淘汰策略 1. Redis配置项hz定义了serverCron任务的执行周期,默认为10,即CPU空闲时每秒执行10次; 2. 每次过期key清理的时间不超过CPU时间 ...

  4. 【年度开源、工具合集】牛津计划,DMTK,Graph Engine…提高你的工作效率!

    本篇合集包括以下三个部分的内容: 1.微软亚洲研究院过去一年的所有开源合集,如分布式机器学习工具包DMTK等. 2.利用微软研究院的技术提高工作效率的工具合集,如让没有机器学习背景的开发人员也能开发出 ...

  5. 天哪!毫无思绪!令人感到恐惧的数学(水题?)(TOWQs)

    这道题的题目描述灰常简单,第一眼看以为是一道十分水的题目: 但是!!!(我仔细一看也没有发现这背后隐藏着可怕的真相~) 下面给出题目描述: 给出一个整数x,你可以对x进行两种操作.1.将x变成4x+3 ...

  6. hexo及next主题修改

    通过npm uninstall <package>命令,你可以将node_modules目录下的某个依赖包移除: 1 npm uninstall 包名 要从package.json文件的依 ...

  7. 《ASP.NET Core 高性能系列》Span<T>和Memory<T>

    一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbit ...

  8. django之学习前的准备

    一.配置环境 Windows 10操作系统 Python安装配置教程参考:https://www.cnblogs.com/huangbiquan/p/7784533.html 安装Python虚拟环境 ...

  9. 告别ThinkPHP6的异常页面, 让我们来拥抱whoops吧

    春节期间熟悉了TP6, 也写了一个TP6的博客程序,但系统的异常页面实在另外头疼,很多时候无法查看到是哪行代码出的问题. 所以就特别的想把whoops引进来,经过一系列的研究,终于找到了解决的办法: ...

  10. Linux centos7.0 配置防火墙及开放端口

    现在防火墙有两种服务1.service firewalld 2.service iptables 一.就firewalld来说查看开放的端口  netstat  -anp 查询防火墙状态  servi ...