一般将安全防护软件划分为:云WAF、硬件waf、主机防护软件、软件waf等。
我的测试流程是先看看waf过滤了什么,例如union select被过滤那么就看看是union被过滤还是select被过滤或者union select连起来被过滤,
之后可以尝试大小写绕过,eg: uNIoN sELecT 1,2,3,4
然后在被拦截的关键字前后填充些空白字符,注释符,/N等东西,看看是否还拦截,如果还是拦截的话那么很可能函数或关键字被过滤了,
这样的话可以考虑等价替换,例如在关键字中间可插入将会被WAF过滤的字符 – 例如SELECT可插入变成SEL,
union select变为UNIunionON SELselectECT
整个URL可变成http://www.cesafe.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
或利用web容器特性绕过,比如IIS的%分割绕过,分块传输、HTTP 数据编码绕过等绕过方式。
IIS:把我们的电脑看做是一个网络服务器,而IIS就是管理网络信息的服务器管理程序。
asp:服务器端脚本环境
IIS的%分割绕过
参考链接:https://blog.csdn.net/weixin_39901332/article/details/110620799
在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。
考虑分块传输
参考链接:http://www.wjhsh.net/BOHB-yunying-p-12205068.html
进行分块传输的时候,请求头要加上Transfer-Encoding: Chunked,然后POST的数据规则如下
2 #下面的数据的长度,可以在后面加个分号然后添加注释(2; hello world)
id #请求的参数
2 #下面的数据的长度
=1 #请求的值,和前面的id连起来
0 #表明分块请求结束,一个0和两个换行
HTTP 数据编码绕过
参考链接:https://blog.csdn.net/weixin_51730169/article/details/125496226
编码绕过,在绕 waf 中也是经常遇到的,通常 waf 只坚持他所识别的编码,比如说它只识别 utf-8 的字符,但是服务器可以识别比
utf-8 更多的编码。
那么我们只需要将 payload 按照 waf 识别不了但服务器可以解析识别的编码格式,即可绕过。
比如请求包中我们可以更改Content-Type中的charset的参数值,我们改为ibm037这个协议编码,有些服务器是支持的。payload 改成
这个协议格式就行了。
Content-Type: application/x-www-form-urlencoded; charset=ibm037
脚本:
import urllib.parse
s = ‘id=-1 union select 1,user()– &submit=1’
ens=urllib.parse.quote(s.encode(‘ibm037’))
print(ens)
参考链接:
https://blog.csdn.net/weixin_44825990/article/details/122009176
https://blog.csdn.net/weixin_28979369/article/details/113690696
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/272897.html