【文件上传】---WAF绕过---day24
【文件上传】---WAF绕过---day24
一、数据包能否修改?
1、Content-Disposition:一般可以更改
接收到的类型,form-data指的是表单的数据
2、name:表单参数值,不能更改
name:源代码中name决定
3、filename:文件名,可以更改
上传的文件的名字
4、Content-Type:文件MIME,视情况更改
二、waf绕过
waf绕过指的是这个上传点必须要有漏洞,只是在上传的过程中被安全狗拦截。如果这个上传点没有上传漏洞,那就别瞎搁这儿测试了奥。
1、常见绕过方法
①数据溢出-防匹配(xxx...)
比如说a.php
直接给它携程aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(此处省略好几百个a).php,让程序崩溃。
或者写到文件名前面,给它整点垃圾数据啥的。
记得在垃圾数据完事之后加上分号。
②符号变异-防匹配(' " 😉
像这种值是双引号的,一般都是我们程序开发时候,需要自定义的值。而比如说Content-Type:image/jepg这是固定的,约定俗成的。
我们猜测安全狗是匹配双引号里面的字符串,也可能是匹配的是双引号后面,也可能是如果只有一个双引号它就不匹配了。
采用下面的方式就成功绕过了,说明这样就迷惑了安全狗,它不匹配了hh。
或者只写一个单引号也行,或者不写也行,都测试测试。看能不能上传成功。
也有可能是安全狗只匹配最后一个双引号前面的值来看的,所以说在实战过程中,还需要多多测试,思维多变啊。
或者整个这个:
发现也行,能上传成功,能当做php执行。
上面这个分号表示结束。绕过了。
③数据阶段-防匹配(%00;换行)
换行效果:
x.p\nh\n\p
成功绕过
④重复数据-防匹配(参数多次)
通过测试,发现写俩filename
filename="x.jpg";filename="y.jpg";
最终的效果,上传到服务器上的是y.jpg。那么,我们就多写点
看看它这个匹配是单次的,还是多次循环递归匹配这样,结果多写点就绕过了。
WAF检测的是filename的值,猜测用类似白名单机制来搞。
filename="Content-Disposition: form-data; name="Upload_file"x.php"
意思就是匹配filename时候,前面都是白名单里的,后面的x.php没有匹配,但是x.php实实在在是给filename的,这样就绕过了。
还可以用下面的方式:
这样也行,斜杠也能作为新的条件来绕过:
2、安全狗
①设置界面
三、Fuzz模糊测试
1、两个好用的Fuzz字典
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts
2、FuzzDicts搭配bp
①把数据包发送到Intruder下面
添加测试的变量。
②payload中选中字典源
根据相应的脚本选择相应的字典。
③修改线程
在options里修改线程,多线程更快哦~
四、安全修复
后端验证+后缀检测+MIME检测+内容检测四重锁
自带函数过滤比如说 get_image_pointer()必须是图片。