SQL注入绕过WAF方法使用

介绍WAF

WAF (Web Application Firewall, Web应用防火墙)及与其相关的知识,这里利用国际上公认的一种说法: Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专]为Web应用提供保护的一款产品。
WAF可以分为以下几类
1.软件型WAF
以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell、是否有文件被创建等。
2.硬件型WAF
以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听模式时只记录攻击不进行拦截。
3.云WAF
一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN。
4.网站系统内置的WAF
网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码
中,相对来说自由度高,一般有以下这几种情况。
●输入参数强制类型转换(intval等)。
●输入参数合法性检测。
●关键函数执行(SQL执行、页面显示、命令执行等)前,对经过代码流程的
输入进行检测。
●对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符
等)
WAF判断
1.使用SQLMap中自带的WAF识别模块可以识别出WAF的种类,但是如果所安
下面装的WAF并没有什么特征,SQLMap就只能识别出类型是Generic。
2.手工判断
这个也比较简单,直接在相应网站的URL后面加上最基础的测试语句,比如union select 1, 2, 3%23,并且放在一个不存在的参数名中,本例里使用的是参数aaa,触发了WAF的防护,所以网站存在WAF。页面返回不正常

一些绕过WAF的方法

/*%!"/*/

1.大小写混合
在规则匹配时只针对了特定大写或特定小写的情况,在实战中可以通过混合大
小写的方式进行绕过(现在几乎没有这样的情况),
uNion sElEct 1, 2,3, 4,5

2.URL编码
●极少部分的WAF不会对普通字符进行URL解码,如下所示。
union select 1, 2, 3, 4, 5
上述命令将被编码为如下所示的命令。
%75%6E%69% 6F% 6E% 20%73%65%6C% 65%63%74%20%31%2C
% 32%2C % 33%2C%34%2C%35
●还有一种情况就是URL二次编码,WAF一般只进行一次解码, 而如果目标
Web系统的代码中进行了额外的URL解码,即可进行绕过。

3.替换关键字,双写
WAF采用替换或者删除select/union这类敏感关键词的时候,如果只匹配一
次则很容易进行绕过。
union select 1, 2, 3, 4, 5. 上述命令将转换为如下所示的命令。
unuionion selselectect 1,2,3,4,5

4.使用注释
注释在截断SQL语句中用得比较多,在绕过WAF时主要使用其替代空格(/
意内容
/),适用于检测过程中没有识别注释或替换掉了注释的WAF。
Union select 1, 2,3, 4, 5
上述命令将转换为如下所示的命令。
union/*2333*/select/*aaaa*/1, 2,3, 4, 5
还可以使用前面章节中介绍的内联注释尝试绕过WAF的检测。

5.多参数请求拆分
对于多个参数拼接到同一条SQL语句中的情况, 可以将注入语句分割插入。
例如请求URL时,GET参数为如下格式。
a= [input1] &b= [input2]
将GET的参数a和参数b拼接到SQL语句中,SQL语句如下所示。
anda=[input1] and b= [input2]
这时就可以将注入语句进行拆分,如下所示。
a=union/&b=/select 1, 2, 3, 4
最终将参数a和参数b拼接,得到的SQL语句如下所示。
and a=union /and b=/select 1, 2,3,4

6.注入参数到cookies中
某些程序员在代码中使用$_ REQUEST获取参数,而$_ REQUEST会依次从GET/POST/cookie中获取参数,如果WAF只检测了GET/POST而没有检测cookie,可以将注入语句放入cookie中进行绕过。

7.寻找网站源站IP
对于具有云WAF防护的网站而言,只要找到网站的IP地址,然后通过IP访问网
占,就可以绕过云WAF的检测。
常见的寻找网站IP的方法有下面这几种。
●寻找网站的历史解析记录。
●多个不同区域ping网站,查看IP解析的结果。
●找网站的二级域名、NS、 MX记录等对应的IP。
●订阅网站邮件,查看邮件发送方的IP。

8.生僻函数
使用生僻函数替代常见的函数,例如在报错注入中使用polygon ()函数替换
常用的updatexml ()函数,如下所示。
SELECT polygon ( (selectfrom (selectfrom (select@@version) f)x)) ;
hex()、bin() == asci()
sleep() == benchmark()
concat ws()== group concat()
mid()、substr() ==> substring()
@@user == user()
@@datadir == datadir()

SQL注入绕过常见方式
1.绕过空格(注释符/
/, %a0)
2.括号绕过空格
3.引号绕过(使用十六进制)
4.逗号绕过(limit使用from或者offset) (substr使用from for属于逗号)
5.比较符号(<>) 绕过(使用greatest())
6.or and绕过
7.绕过注释符号(#, --)过滤
8.=绕过 可是使用like
9.绕过union, select, where等:
(1)使用注释符绕过
(2)使用大小写绕过
(3)内联注释绕过
(4)双关键字绕过
10.通用绕过(编码)
11等价函数绕过
12.宽字节注入

实战演练

SQL注入之垃圾数据绕过

输入and1=1时页面报错
SQL注入绕过WAF方法使用_第1张图片在id位置输入过大的值
SQL注入绕过WAF方法使用_第2张图片

SQL注入之更换提交方式绕过

当输入and 1=1 和and1=2时页面都回显正常
SQL注入绕过WAF方法使用_第3张图片更改提交方式进行绕过
SQL注入绕过WAF方法使用_第4张图片

SQL注入之双写绕过

双写select可进行绕过
SQL注入绕过WAF方法使用_第5张图片

SQL注入之HTTP参数污染绕过

添加多几个&id=1&id=1就可以绕过
SQL注入绕过WAF方法使用_第6张图片

SQL注入之URL编码绕过

一番测试后发现select被过滤了,我们使用二次url编码select进行绕过
SQL注入绕过WAF方法使用_第7张图片

SQL注入之大小写混合绕过

在union select 里随便大小写可进行绕过
SQL注入绕过WAF方法使用_第8张图片

SQL注入之等价函数绕过

like等于=号
SQL注入绕过WAF方法使用_第9张图片

SQL注入之基本绕过

SQL注入绕过WAF方法使用_第10张图片

你可能感兴趣的:(安全,sql,mysql,安全漏洞,网络安全)