【文件上传】---WAF绕过---day24

【文件上传】---WAF绕过---day24

一、数据包能否修改?

image-20210414160444744

1、Content-Disposition:一般可以更改

接收到的类型,form-data指的是表单的数据

2、name:表单参数值,不能更改

name:源代码中name决定

image-20210414160600487

3、filename:文件名,可以更改

上传的文件的名字

4、Content-Type:文件MIME,视情况更改

二、waf绕过

waf绕过指的是这个上传点必须要有漏洞,只是在上传的过程中被安全狗拦截。如果这个上传点没有上传漏洞,那就别瞎搁这儿测试了奥。

1、常见绕过方法

①数据溢出-防匹配(xxx...)

比如说a.php

直接给它携程aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(此处省略好几百个a).php,让程序崩溃。

image-20210414162117726

或者写到文件名前面,给它整点垃圾数据啥的。

image-20210414162309646

记得在垃圾数据完事之后加上分号。

②符号变异-防匹配(' " 😉

image-20210414162539207

像这种值是双引号的,一般都是我们程序开发时候,需要自定义的值。而比如说Content-Type:image/jepg这是固定的,约定俗成的。

我们猜测安全狗是匹配双引号里面的字符串,也可能是匹配的是双引号后面,也可能是如果只有一个双引号它就不匹配了。

采用下面的方式就成功绕过了,说明这样就迷惑了安全狗,它不匹配了hh。

image-20210414163051138

或者只写一个单引号也行,或者不写也行,都测试测试。看能不能上传成功。

也有可能是安全狗只匹配最后一个双引号前面的值来看的,所以说在实战过程中,还需要多多测试,思维多变啊。

或者整个这个:

image-20210414163612275

发现也行,能上传成功,能当做php执行。

image-20210414163936116

上面这个分号表示结束。绕过了。

③数据阶段-防匹配(%00;换行)

换行效果:

x.p\nh\n\p

image-20210414164131942

成功绕过

④重复数据-防匹配(参数多次)

通过测试,发现写俩filename

filename="x.jpg";filename="y.jpg";

最终的效果,上传到服务器上的是y.jpg。那么,我们就多写点

image-20210414164624205

看看它这个匹配是单次的,还是多次循环递归匹配这样,结果多写点就绕过了。

image-20210414164921659

WAF检测的是filename的值,猜测用类似白名单机制来搞。

filename="Content-Disposition: form-data; name="Upload_file"x.php"
意思就是匹配filename时候,前面都是白名单里的,后面的x.php没有匹配,但是x.php实实在在是给filename的,这样就绕过了。

还可以用下面的方式:

image-20210414165905410

image-20210414165917718

这样也行,斜杠也能作为新的条件来绕过:

image-20210414170007992

2、安全狗

①设置界面

image-20210414161332024

三、Fuzz模糊测试

1、两个好用的Fuzz字典

https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts

2、FuzzDicts搭配bp

①把数据包发送到Intruder下面

image-20210414171008435

添加测试的变量。

②payload中选中字典源

image-20210414171107005

根据相应的脚本选择相应的字典。

③修改线程

在options里修改线程,多线程更快哦~

image-20210414171207582

四、安全修复

image-20210414171454199

后端验证+后缀检测+MIME检测+内容检测四重锁

自带函数过滤比如说 get_image_pointer()必须是图片。

posted @ 2021-05-17 20:56  DarkerG  阅读(387)  评论(0编辑  收藏  举报