upload-labs 通关笔记


前言:
1、upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞
有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。(项目地址:https://github.com/c0ny1/upload-labs)
2、靶机包含漏洞类型分类。

3、如何判断上传漏洞类型?

upload-labs write up:
Pass-01 绕过前段js检查

删除 return checkFile() 即可绕过。或者用浏览器插件禁用js然后进行上传。


Pass-02 白名单-Content-type绕过
方法一:绕过前段(删去js限制或者改为.jpg等),通过burpsuite抓包,修改MIME
方法二:加后缀.jpg可直接绕过MIME,但提交时需要抓包删去.jpg

Content-Type: application/octet-stream 改为:Content-Type: image/png 即可上传绕过:

Pass-03 黑名单-特殊可解析后缀绕过
绕过黑名单方法较多:使用.php2.phtml.phps、大小写、双写php等。这里使用.php2绕过,实战的话根据服务端配置进行测试。
上传的是.php2这种类型文件的话,如果想要被当成php执行的话,需要有个前提条件,即Apache的httpd.conf有如下配置代码
AddType application/x-httpd-php .php2 .phtml .phps
AddType 指令在给定的文件扩展名与特定的内容类型之间建立映射关系。MIME-type指明了包含extension扩展名的文件的媒体类型。

Pass-04 黑名单-.htaccess 绕过
本pass禁止上传.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文件:AddType application/x-httpd-php .jpg .conf
这里代码的意思是把.jpg/.conf等后缀名文件以php格式解析,因此达到了可执行的效果。
没有上传.htaccess 文件前:

上传.htaccess 文件后被解析成php文件。

注: .htaccess文件生效前提条件为1.mod_rewrite模块开启。2.AllowOverride All

Pass-05 黑名单-大小写绕过
加上了.htaccess,但是没有对后缀统一大小,所以我们可以通过大小写绕过:

Pass-06 黑名单-空格绕过
查看代码,这里将文件后缀名统一进行了小写转换,

但是没有去除文件名首尾的空格。所以我们可以利用windows系统的命名规则进行绕过。

Pass-07 黑名单-点绕过
原理同Pass-07,代码中没有对点进行过滤,所以利用windows特性,通过抓包在后缀名加”.”绕过:

Pass-08 黑名单-::$DATA绕过
查看代码,发现没有对后缀名进行去”::$DATA”处理,利用windows的特性,通过抓包在后缀名后加” ::$DATA”绕过:


知识点:文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

Pass-09 黑名单-点空点绕过
查看代理,发现这里的代码逻辑是先删除文件名末尾的点,再进行首尾去空。都只进行一次。所以我们构造点空格点进行绕过,把后缀名改为1.php. .,也是利用了Windows的特性。

Pass-10 黑名单-双写绕过
上传一个正常文件发现php被吃掉了。

代码一看,发现这里将php后缀名替换为空,于是可以利用双写绕过:

Pass-11 白名单-%00截断绕过(get)
查看代码,本关使用了白名单,只允许上传,jpg,png,gif三种格式文件。但是发现使用$img_path直接拼接
(利用 get['save_path'] 和随机时间函数进行拼接,拼接成文件存储路径。),因此可以利用%00截断绕过


截断条件:
1、php版本小于5.3.4 2、php.ini的magic_quotes_gpc为OFF状态
知识点:这里利用的是00截断。move_uploaded_file函数的底层实现类似于C语言,遇到0x00会截断。

Pass-12 白名单-%00截断绕过(post)
查看代码,发现这关和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。

修改二进制进行截断:

上传成功,返回路径:

Pass-13 图片马 绕过(unpack)

本关要求上传图片马,那么我们就使用cmd制作图片马来进行绕过:copy 1.jpg /b + 1.php /a test.jpg

下面是我们隐藏的小马儿:

当然我们是无法直接利用图片马的,它需要配合其他漏洞进行使用。比如:包含漏洞,解析漏洞。。。
知识点:unpack() 函数从二进制字符串对数据进行解包。

Pass-14 图片马绕过 - getimagesize
这里用getimagesize获取文件类型,还是直接就可以利用图片马就可进行绕过:

知识点:getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

Pass-15 图片马绕过 - exif_imagetype()
本pass使用exif_imagetype()检查是否为图片文件!
这里用到php_exif模块来判断文件类型,还是直接就可以利用图片马进行绕过:

注:需要开启php_exif模块


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM