运行环境

操作系统: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. ES Templates push

    { "order": 0, "template": "connector-connection*", "settings" ...

  2. XX系统测试总结报告

    XX系统测试总结报告 1        引言 1.1  编写目的 编写该测试总结报告主要有以下几个目的 1.  通过对测试结果的分析,得到对软件质量的评价 2.   分析测试的过程,产品,资源,信息, ...

  3. 量化投资学习笔记34——《Python机器学习应用》课程笔记08

    岭回归 解决某些训练样本线性相关,导致回归结果不稳定的情况. 它是一种用于共线性数据分析的有偏估计回归方法.是一种改良的最小二乘估计法. 在sklearn中使用sklearn.linear_model ...

  4. Android Base64图片无法长按保存 问题解决

    踩了一个巨坑. 目前微信ios/android 均能长按保存src=base64的图片  (微信android x5 专门解决了这个问题); 但是android其他App没有针对解决这个系统问题(姑且 ...

  5. 前端每日实战:39# 视频演示如何用纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QxbmxJ 可交互视频教程 此视频 ...

  6. 使用nestjs集成grpc具体操作

    两个程序中, 提供grpc服务的称为服务端, 调用grpc服务的为客户端, 以下是grpc服务端和客户端的代码编写     1. 创建两个nestjs项目demo1(端口: 3000)和demo2(端 ...

  7. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  8. koa进阶史(一)

    1,设置静态文件目录,将__dirname 写成_dirname,乍看没什么毛病,但是一运行之后发现,_dirname is not defined,下次注意哈 app.use(express.sta ...

  9. view添加阴影

    //@mg:masksToBounds必须为NO否者阴影没有效果 //    cell.layer.masksToBounds = NO; cell.layer.contentsScale = [UI ...

  10. django 引入静态文件(前端样式等)

    1.首先在主项目目录下settings.py文件中添加如下代码 2.然后在主项目目录,app项目同级目录下新建static文件夹并在文件夹中新建css文件夹,用于存放css文件,如下: 3.前端渲染时 ...