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/-meditation-/articles/16031523.html