upload-labs的wp
Contents
0x0000 前言
upload不需要介绍了,直接开始干活
0x0001关卡
Pass-01
第一关是前端过滤,可以通过警用js或者上传后抓包改后缀的方法来绕过
Pass-02
先将文件该为.jph文件,然后上传抓包改为php。成功
Pass-03(存在问题待解决)
通过使用phtml文件绕过限制
注:想要能成功解析,需要Apache配置中有该语句:
AddType application/x-httpd-php .php .html .phtml
想了想,这个语句其实是让Apache将这几个解析为php文件,但是我查到资料称是因为历史原因,部分解析器支持符合正则/ph(p[2-7]?|t(ml)?)/
的后缀
Pass-04
过滤了一堆后缀,不过我们用的是Apache,所以可以通过上传.htaccess来将其他后缀文件作为php脚本,如:
AddType application/x-httpd-php .png
php_flag engine 1
就可以用png后缀的文件做php脚本了
如图(注意url)
Pass-05
禁用了许多,.htaccess也被禁用了,但似乎可以通过大小写绕过
如1.PHp
如图:
这时突然想到,其实上一题似乎也可以绕过的。。。。
Pass-06
也是黑名单。本来想要尝试大小写绕过的,但是在代码中有这一段:
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
文件后缀会被转为小写,也就绕不过去了。
想要通过windows特性来绕过但是发现
$file_name = deldot($file_name);//删除文件名末尾的点
不过没做去空处理,那么我们可以后缀加空来上传文件
Pass-07
黑名单并且去空了。但是没去点,那就直接通过windows会去除后缀名末尾的点这个特性来绕过
成功
Pass-08
这一题以上说的都过滤了,但是如果注意会发现和前面题相比,少了一个::$DATA的过滤也是一个windows的特性,后缀加上::$DATA绕过后缀检查
Pass-09
过滤的比较完全,但是这次文件名没有变更,而是原文件名直接拼接上去的。
那么: 1.php.%20. -> 1.php.%20 -> 1.php.%20 -> 1.php.就过去了
Pass-10
关键词变为空,那直接双写绕过不就行了。。。(我以为第一二关就能看到,没想到到一半了才看到)
Pass-11
这次是白名单了。
一开始看wp里面说的%00截断还愣了一下,仔细观看了一下源码发现了问题。
代码:
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
这里的路径是直接通过get传入的,我们通过%00截断字符串,如我们?save_path=1.php%00
就变成了 img_path=“1.php%00xxxx.jpg”
这时因为php5.2x的%00截断漏洞就变成了 img_path="1.php"
,于是我们便上传成功了。
注意此处url,删去php之后的即可访问
如图
Pass-12
也是白名单,看来从第十一题开始就是白名单了。.
同上一题,只是get变成了post。
需要提一下,%00漏洞是url参数包含了%00结果浏览器自动转码后变成了一个字符达到了截断的效果、而post传入参数的话不会有浏览器转码这一过程,所以需要手动转码,即在抓包后hex在对应点写入0x00达到截断的目的
标识处值改为00
url情况如上题
Pass-13
上传图片马,制作图片马直接绕过= =
之后去/include.php里面文件包含验证一下就是
Pass-14
同上= =
Pass-15
同上= =
就很迷茫
Pass-16
这题是二次渲染。先gif+php构成图片马上传再下下来,hex打开后观察未变的值,直接在其内插入php代码再重新上传回去即可。
Pass-17
条件竞争,上传过程中抓包发送
同时访问对应url即可 如上传shell.php即访问upload/shell.php
Pass-18
也是条件竞争,图片马传就是了
Pass-19
由 $file_name = $_POST['save_name'];
与
$img_path = UPLOAD_PATH . '/' .$file_name;
可以看出保存路径其实是用户自定义的,直接00阻断试试?
此处并未显示图片
那么直接访问呢?
成功了
0x0002总结
upload-labs一共20题,主要黑名单、白名单、图片马、条件竞争这四种,但其实真的在测试环境中遇到的话,可能还有更多的复杂情况,比如上传后文件进行加密再由服务器自己加上后缀名