运行环境

操作系统: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. runR

    Linux下使用R 运行linux下的R脚本 编写R文件 新建后缀名为R的文件 写入R程序 在脚本首行加入 1 运行R文件 这里有两种方式 大专栏  runR进入R的环境">进入R的环 ...

  2. python爬虫之selenium+打码平台识别验证码

    1.常用的打码平台:超级鹰.打码兔等 2.打码平台在识别图形验证码和点触验证码上比较好用 (1)12306点触验证码 from selenium import webdriver from selen ...

  3. 在ASP.NET Core Mvc 集成MarkDown

    这几天在做文章编辑,首先就想到了markdown,它比其它的都要新,而且很好用,相对于其它的html编辑器,好久不更新,要好得多,哦~对了我现在已经用上新版的Edge了,经过很多朋友测试,性能比谷歌浏 ...

  4. SpringBoot一些基础配置

    定制banner Spring Boot项目在启动的时候会有一个默认的启动图案: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( ...

  5. spring——AOP原理及源码(三)

    在上一篇中,我们创建并在BeanFactory中注册了AnnotationAwareAspectJAutoProxyCreator组件.本篇我们将要探究,这个组件是在哪里以及何时发挥作用的. 调试的起 ...

  6. notepad++ 字符处理: 字符前后删除 或 删除未包含字符串的行

    字符串前后删除 删除str之后的所有字符用,打开替换(Ctrl+H) :str.*$ 删除str之前的所有字符用:^.*str 如果是其他字符就把str替换为其他字符 ---------------- ...

  7. 关于毕业五年PHP成长疑惑

    1.PHP语法基础是否都会,比如异常捕捉,面向对象,数组操作语法,字符串操作,cookie,session,全局变量,超全局数组,防止sql注入,mysql预处理 2.MYSQL基础语法,字段设计,原 ...

  8. 进阶之路 | 奇妙的Thread之旅

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 需要已经具备的知识: Thread的基本概念及使用 AsyncTask的基本概念及使用 学习清单: 线程概述 ...

  9. Windows10 JDK1.8安装及环境变量配置

    一.下载JDK1.8: 下载地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html  二.安装步骤: 我们通常选择 ...

  10. Nginx之负载均衡配置(一)

    前文我们聊了下nginx作为反向代理服务器,代理后端动态应用服务器的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12430543.html:今天我们来聊 ...