sql注入常见的waf绕过方式(简版)

一般将安全防护软件划分为:云WAF、硬件waf、主机防护软件、软件waf等。

我的测试流程是先看看waf过滤了什么,例如union select被过滤那么就看看是union被过滤还是select被过滤或者union select连起来被过滤,

如果是过滤了union select,
之后可以尝试大小写绕过,eg: uNIoN sELecT 1,2,3,4
然后在被拦截的关键字前后填充些空白字符,注释符等东西,看看是否还拦截,如果还是拦截的话那么很可能函数或关键字被过滤了,
这样的话可以考虑等价替换,例如在关键字中间可插入将会被WAF过滤的字符 – 例如SELECT可插入变成SEL,
union select变为UNIunionON SELselectECT
整个URL可变成http://www.cesafe.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4

或将关键词比如and进行两次(服务器自动会对URL进行一次解码,所以需要两次)URL全编码(不是普通编码)
或利用web容器特性绕过,比如IIS的%分割绕过,分块传输、HTTP 数据编码绕过等绕过方式。

 过滤了逗号,不能union select 1,2,3

join代替逗号

盲注:利用substring函数和ascii函数搞。。。substring函数无需逗号。

SELECT *from student WHERE id =-1 union SELECT * FROM (SELECT database())a JOIN (SELECT version())b JOIN (SELECT user())c

参考链接:https://blog.csdn.net/weixin_43247256/article/details/122711885

 

Mysql中\N代表null \N后跟sql语句时可以不用空格或空白字符

 

&&、|| 为and、 or的符合表示

 sql注入宽字节注入

当我们输入id=%df%27,浏览器自动解码后会变成β\',之后会将其转化为16进制,转化为url编码之后为 %df%5c%27,进行url解码(因为是GBK编码,%df和%5c结合为汉字)===> 運',执行sql语句

,%df%5c结合成汉字使单引号闭合(逃逸),进行注入攻击。

 

 

 

完全编码和不完全编码的区别就是对!*'();:@&=+$,/?%#[]字符是否进行编码。

 https://www.jianshu.com/p/a2ddd7717e7f

 

 

 

 

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

 

posted @ 2022-07-09 14:17  lzstar-A2  阅读(477)  评论(0编辑  收藏  举报