运行环境

操作系统: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. 从TP-Link到雷蛇,纷纷入局智能手机业到底想干什么?

    ​   "眼看他起朱楼,眼看他宴宾客,眼看他楼塌了",这句形容世态炎凉的话其实与智能手机市场更为相像.诺基亚的辉煌与没落.黑莓的强势与消声无迹.摩托罗拉的数次易手.小米的横空出世与 ...

  2. CSS 技巧汇总

    CSS 选择符优先级 !important 声明>内联样式(style)>id 选择符(#id)>类选择符(.class)=伪类选择符(:hover )=属性选择符([attr] ) ...

  3. 【桌面篇】Archlinux安装kde桌面

    ArchLinux安装配置手册[桌面篇] 现在你的U盘可以拔掉了,重启后会发现和刚刚没什么区别,还是命令行的界面,别着急现在就带你安装桌面环境. 连接网络 首先检查一下网络是否连接成功 ping ww ...

  4. mongodb 修改oplogSize

    oplog是local库下的一个固定集合,Secondary就是通过查看Primary的oplog这个集合来进行复制的.每个节点都有oplog,记录从主节点复制过来的信息,这样每个成员都可以作为同步源 ...

  5. Python第一周基本语句学习整理

    目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ...

  6. 《Deep Learning of Graph Matching》论文阅读

    1. 论文概述 论文首次将深度学习同图匹配(Graph matching)结合,设计了end-to-end网络去学习图匹配过程. 1.1 网络学习的目标(输出) 是两个图(Graph)之间的相似度矩阵 ...

  7. Java基础IO流 ,文件读取,由易至难

    最基础的读取文件 import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;imp ...

  8. 用 Java 实现人脸识别功能(附源码)

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  9. 一些常用的 CSS 技巧和知识点

    作为一名前端工程师,CSS 是必备技能之一,然而在日常开发中,总有那么些时候,面对着炫酷的效果图,脑子里的 CSS 属性却一片空白,于是只能借助搜索引擎,在一堆复杂的介绍中找到需要的内容复制粘贴.有没 ...

  10. fsLayuiPlugin数据字典使用

    概述 数据字典主要解决下拉框数据填充和数据表格转义处理,一个数据字典可以多处使用. 1.多个页面下拉框使用同样的数据,改一个地方需要把所有页面都要修改 2.数据表格转义代替自己手动写templet解析 ...