upload-labs
项目地址:https://github.com/c0ny1/upload-labs
Pass-01:在客户端使用JS进行验证
1.使用burp将所有JS删除,再上传phpinfo.php或者F12删除JS,再上传php文件。
然后可以直接上传php文件,不需要考虑什么了。
上传成功。
2.绕过JS验证
先关闭burp的删除JS选项,重新上传phpinfo.php,上传失败。
重新上传并使用burp拦截,并将后缀名从jpg改为php。
上传成功。
Pass-02:MIME-Type验证
MIME-Type介绍:
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
绕过MIME-Type:
上传成功。
Pass-03:黑名单验证,后缀名
基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
这一关禁止.jsp、.php、.asp、.aspx后缀名的文件上传。
但是可以其他后缀名嘛,例如php1、php2、phtml、php5等等。
注:上传成功后,文件名会被更改,所以需要查看文件上传的位置以及文件名。
Pass-04:黑名单验证,.htaccess
禁止的有点多,但是没有htaccess。
htaccess文件介绍:
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。
创建1.htaccess,并将其上传:
"上传的图片马的文件名" SetHandler application/x-httpd-php
再上传图片马即可。
Pass-05:黑名单验证,.user.ini
这一关,先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件,然后再上传一个内容为php的一句话的脚本,命名为1.gif,.user.ini文件里面的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。
参考链接:csdn
Pass-06:黑名单验证,大小写绕过
这一关将htaccess也ban了。
大小写绕过原理:
Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。
访问文件
Pass-07:黑名单验证,空格绕过
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
针对这样的情况需要使用Burpsuite阶段HTTP请求之后,修改对应的文件名 添加空格。
上传成功。
Pass-08:黑名单验证,点号绕过
.号绕过原理:
Windows系统下,文件后缀名最后一个点会被自动去除。
上传成功
Pass-09:黑名单验证,::$DATA绕过
特殊符号绕过原理:
Windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。
Pass-10:黑名单验证,点号绕过拼接并绕过前面的两次过滤
这一关是将文件名进行过滤操作后,将文件名拼接在路径后面,所以需要绕过前面的首尾去空以及去点。
Pass-11:黑名单验证,双写绕过
这一关是用str_ireplace函数将符合黑名单中的后缀名进行替换为空。所以可以双写绕过。
这个匹配是从左往右的匹配,不要双写成phphpp,这样过滤后就成了hpp。
Pass-12:白名单验证,GET型0x00截断
这一关,需要php的版本号低于5.3.29,且magic_quotes_gpc为关闭状态。
Pass-13:白名单验证,POST型0x00截断
这一关和Pass-12的区别是,00截断是用在POST中,且是在二进制中进行修改。因为POST不会像GET那样对%00进行自动解码。
Pass-14:图片马,文件包含利用
制作图片马:
copy 1.jpg/a + 1.txt/b 2.jpg
1.txt中的内容为一句话木马,1.jpg则是一张图片。生成的图片马是2.jpg。
顺利的上传图片马,图片名会重新命名,所以burp上传,记得看一下。
利用include.php实现文件包含(自带有):
<?php /* 本页面存在文件包含漏洞,用于测试图片马是否能正常运行! */ header("Content-Type:text/html;charset=utf-8"); $file = $_GET['file']; if(isset($file)){ include $file; }else{ show_source(__file__); } ?>
蚁剑连接一句话:
Pass-15:图片马,文件包含利用
同pass-14,传一样的图片马就好。
注:这里可能会有一些问题,就是copy制作的图片马,制作出来后,图像是损坏的,那么15关就过不去。所以可以利用winhex之类的工具,讲一句话加在图片的后面。这样就能过了。
同样,利用起来还是文件包含。
Pass-16:图片马,文件包含
这一关需要开启php_exif模块。phpstudy很好打开此模块。
同前两关,能过Pass-15的图片马就能过这关。
Pass-17:图片马加二次渲染
这里使用容易绕过二次渲染的gif文件。现在制作一个gif图片马,copy就可以了。也可以winhex制作。
制作后便上传,发现无法利用。然后将上传的图片重新下载下来,放入winhex,进行对比。
可以找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方。
上传修改好的图片马,蚁剑连接成功。
Pass-18:白名单验证,条件竞争
这一关是先上传再判断,所以实在判断前就对上传的文件进行请求。
先创建一个webshell.php,内容为
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>'); ?>
再使用python不断请求
import requests while 1: requests.get("http://192.168.84.131/upload-labs/upload/webshell.php")
运行python代码,再开始上传php文件。
但是这里使用python请求,虚拟机配置不高 很快就gg。
所以改哈这一关的代码:
重新开始
请求成功,看看是否有shell.php
蚁剑连接成功。
Pass-19:白名单验证,图片马
这一关相比18关,上传的文件就必须是白名单中的文件。
Pass-19.jpg是包含18关的webshell.php的内容的图片马。毕竟是先检查后缀的。
这里上传的文件以及生成的shell.php会出现在upload-labs目录中。
然后再访问http://ip/upload-labs/include.php?file=./对应的文件名。就可以生成shell.php。
也可以直接上传14~16关的那种图片马,当然也需要知道重新命名后的文件名,再利用文件包含即可。同14~16关差不多,唯一多了一步就是需要确定上传的文件的文件名以及位置。
Pass-20:黑名单验证,点号绕过
验证是否成功。
Pass-21:白名单验证,数组绕过
参考链接:csdn
这一关可以直接像14关那样,图片马,文件包含直接过。
以下是参考的数组绕过
之后蚁剑连接即可。