WAF攻防-漏洞利用&HPP污染&分块传输&垃圾数据
目录
文件上传:换行解析&垃圾溢出&%00干扰&=符号干扰&参数模拟
#知识点:
1、SQL注入&文件上传绕过
2、XSS跨站&其他漏洞绕过
3、HPP污染&垃圾数据&分块等
#参考点:
#将MySQL注入函数分为几类
拆分字符串函数:mid、left、lpad等
编码函数:ord、hex、ascii等
运算函数:+ - * / & ^ ! like rlike reg等
空格替换部分:09、0a、0b、0c、0d等
关键数据函数:user()、version()、database()等
然后将这些不同类型的函数组合拼接在一起
#上传参数名解析:明确哪些东西能修改?
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件MIME,视情况更改
#XSS跨站
利用XSStrike绕过 加上--timeout或--proxy配合代理池绕过cc&Fuzz
#其他集合
RCE:
加密加码绕过?算法可逆?关键字绕过?提交方法?各种测试!
txt=$y=str_replace('x','','pxhpxinxfo()');assert($y);&submit=%E6%8F%90%E4%BA%A4
文件包含:没什么好说的就这几种
..\ ..../ ..\.\等
本节课会讲解我们在前面发现漏洞完之后进行漏洞利用的时候绕WAF的一些知识,我们在进行讲解的时候会先对安全狗配合本地搭建的网站进行演示案例的操作,然后再针对宝塔和阿里云的WAF进行讲解,先讲安全狗是因为这个比较简单,如果安全狗都绕不过的话,那宝塔和阿里云的就也别想了。
安全狗-SQL注入&文件上传-知识点
SQL注入
https://www.cnblogs.com/cute-puli/p/11146625.html
关键字替换
http://192.168.0.100:8081/sqlilabs/Less-2/?id=1 like 1
http://192.168.0.100:8081/sqlilabs/Less-2/?id=1 like 12
更换提交方式:
POST id=-1 union select 1,2,3--+
模拟文件上传 传递数据
分块传输:更改数据请求格式
GitHub - c0ny1/chunked-coding-converter: Burp suite 分块传输辅助插件
HPP参数污染:id=1/**&id=-1%20union%20select%201,2,3%23*/
可以看到这里我们输入and 1=1 就会被安全狗拦截,但是换成like就可以绕过,这个就是一个简单的绕过
然后就是更换提交方式,比如它只检测get提交的,这里就是安全狗只检测get方式,但是我觉得是因为安全狗比较拉,一般好一点的都会检测,但这个也是一个方法。并且这个前提是对方能接受post数据,不能接受post数据传了也没用。
第三个就是模拟文件上传,传递数据的方法。我们刚才讲的那个post传输,可以用burp的“改变请求方式”来进行修改,本来是get请求,修改过后就变成了post请求。
这里我们用burp的“修改数据编码”,也就是把数据模拟成正常上传文件的格式来上传,这个也是可以的。
还可以使用分块传输来进行,但是这个分块传输只适用于post,不适用于get,所以用处不是很大。
这里想要使用分块传输还要添加一个插件,安装完插件之后就会发现右键多了一个选项,enconding这个就会把数据进行分块,decoding就会把数据还原,可以看到我们使用分块传输还是可以正常回显的。
最后一个要说的就是HPP参数污染了,这个是跟脚本语言和中间件有关,首先我们弄一个简单的php文件接受参数x
这里我们访问这个文件,输入参数x等于1的时候就输出1,这个是没有啥问题的,但是当我们输入多个参数的时候,这里是取的最后一个参数为准的
刚才也说了这个跟脚本语言和中间件有关,其实就是跟中间件有管,这里我们是PHP加apache搭建的网站,所以就是取最后一个值。
我们就可以利用这个特性取绕过WAF
这里我们输入下面的payload,由于这个特性呢,数据接受就会接受最后一个参数的值,但是安全狗就会全部接受,然后因为/* */这个东西在数据库中就代表注释的意思,也就是注释符。安全狗以为后面都是被注释的,所以就不会拦截。然后这里就绕过了,这里在实战的时候不仅要看中间件还要看数据库类型,因为每个数据库注释符可能不一样。
文件上传:换行解析&垃圾溢出&%00干扰&=符号干扰&参数模拟
这里我们是用pikachu这个靶场来做文件上传是安全狗拦截绕过的演示
首先我们直接上传php文焕,这里把jpg改成php之后会发现WAF拦截了。
第一个方法就是去掉双引号,不加双引号他就会认为qq.php和filename一样是个参数名,就比如参数a等于eval(),这里就不用加双引号。
这里还可以用两个等号去绕过或者三个等号也可以绕过。
然后就是换行绕过,本来是php,我们换行之后变成ph
p
那么十六进制里面就会多一个0d 0a
70就代表p,68就代表h。这里它检测这个HEX的字节流,然后本来应该是70 68 70,这里中甲加上了0d 0a,所以就饶过了。
然后就是垃圾溢出,在前面加上很多垃圾数据,他检测数据室友一个限制的,超过了这个限制就不行了。
这个就是把前面的name=uploadfile当成名字去上传即可绕过
或者把前面的都加进去来干扰他
安全狗-文件包含&代码执行-知识点
这个对于文件包含和代码执行这两个漏洞,安全狗是没有拦截的,而刚才的漏洞有拦截是因为比如sql注入可以对的输入的某些字符做过滤,因为攻击者就会利用这些字符去攻击,而文件上传则会上传特定格式文件,这里可以限制特定格式的文件上传。但是文件包含和代码执行则不好限制,当我们用本地的安全狗防护的网站去执行phpinfo的时候会直接出来结果,但是用宝塔和阿里云搭建的网站执行phpinfo这个命令的时候就会被拦截,这里被拦截不是说对这两个漏洞做了限制,而是限制了特征字符phpinfo
那么这里我们如果说就是想执行phpinfo()呢,还是有方法的,这里他不是限制phpinfo的出现吗,我们不让他出现就好了,我们就可以用str_replace函数把x替换为空,然后就得到了phpinfo,然后在把他执行就好了。
txt=$y=str_replace('x','','pxhpxinxfo()');assert($y);&submit=%E6%8F%90%E4%BA%A4
BT&Aliyun-SQL注入&文件上传-知识点
这个时候我们用宝塔和阿里云的WAF,看看再使用刚才换行的方法和添加垃圾数据的方法发现就不行了,这里就可以修改名字去上传,
这就是我们前面说的换成其他的后缀名,但成功上传之后还要看能不能成功解析
XSS的WAF绕过
这里就要介绍一个关于XSS的WAF绕过了,这里是用的一个项目进行的绕过,名字叫XSStrike,直接用python调用即可,这里害怕数据包过大,所以就加个代理,避免阿里云的防御CC攻击给拦截了。
官方链接:GitHub - s0md3v/XSStrike: Most advanced XSS scanner.
python xsstrike.py -u "http://test.xiaodi8.com/pikachu/vul/xss/xss_reflected_get.php?message=1&submit=submit" --proxy
这里如果说出现加号就代表payload测试出来了XSS,这个工具一共有3072个payload来去测试XSS
sqlmap绕过WAF
在一个就是利用sqlmap对注入点进行攻击的时候如何绕过WAF,这里也是利用了tamper模块的绕过脚本,这个脚本叫rdog,俗称日狗,这个脚本是小迪自己写的
命令:python sqlmap.py -u "http://test.xiaodi8.com/pikachu/vul/sqli/sqli_str.php?name=*&submit=%E6%9F%A5%E8%AF%A2" --random-agent --tamper=rdog.py --proxy="http://tps118.kdlapi.com:15818"
这里 --random-agent参数就是随机设置UA头,防止WAF对sqlmap的指纹识别了从而拦截,第二个就是用这个脚本去绕WAF,第三个就是设置个代理池
总结:
安全狗:
注入 xss 文件上传拦截
rce 文件包含 等其他不拦截
宝塔:
注入 上传拦截
rce 文件包含 xss等其他不拦截
其中拦截的是关键字
aliyun
拦截的CC速度 和 后门 信息收集和权限维持阶段拦截
漏洞利用 他不拦截 默认的版本(升级版本没测试)
WAF PHP环境 JAVA不支持
java一般都不会部署waf,因为Java内置过滤机制。
补充个图片