SQL注入绕WAF案例

admin 2022年5月20日03:02:07评论99 views1字数 1105阅读3分41秒阅读模式

SQL注入绕WAF案例

一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚



SQL注入

这里遇到一个sql注入但是有waf拦截,简单判断这个waf通过解析sql语句是否正常进行拦截的,这里分享一下当时的绕过思路。


判断注入点

首先一个单引号报错,两个单引号不报错,根据报错信息确定sql注入存在

SQL注入绕WAF案例

SQL注入绕WAF案例

然后测试这个waf会检测很多特征,常用的注释符号,内敛注释,select等都会拦截

SQL注入绕WAF案例

SQL注入绕WAF案例

SQL注入绕WAF案例

SQL注入绕WAF案例

就比如简单的or逻辑,将空格换成/**/就会拦截

SQL注入绕WAF案例

SQL注入绕WAF案例



绕过原理

这里有个奇怪的点就是,没有单引号或者单引号闭合状态下并不会拦截我们构造的语句

SQL注入绕WAF案例

SQL注入绕WAF案例


多次尝试发现,不拦截说明这个waf并不是单纯的正则判断进行拦截的。


先说明没有单引号时候,我们传给后端的数据是包裹在sql语句两个单引号之间的

这个waf会把单引号里面所有东西当成了字符串去处理,并不会识别成注入语句,自然就不会拦截

SQL注入绕WAF案例

两个单引号时会闭合语句,我们传入的语句也会被识别成字符串,自然也不会拦截

SQL注入绕WAF案例

所以我们如果想利用这个规则进行绕过,就必须构造语句让waf识别为字符串,而mysql则识别成语句正常执行



开始绕过

这里使用一个特殊操作,双引号包裹一个单引号

or "'"=""

SQL注入绕WAF案例


这个双引号包裹的单引号对于waf而言是一个闭合作用,这就导致该waf将我们后面输入的所有东西都会识别成字符串

而mysql则识别成一个单引号字符串,并没有闭合作用

正是利用这个差别,让我们可以绕过这个waf


对比一下效果,使用"'"不会拦截

SQL注入绕WAF案例

没有则会拦截

SQL注入绕WAF案例

比如使用select查个version()

dopost=getpwd&gourl=&userid=123&[email protected]' or "'"="" or '5.5.60'=(select version()) or '1'='1&vdcode=4907&type=1

SQL注入绕WAF案例

SQL注入绕WAF案例

去掉单引号则会被拦截了

SQL注入绕WAF案例

盲注也能正常获取数据了

dopost=getpwd&gourl=&userid=123&[email protected]' or "'"="" or '2'=substr((select mid from most_member limit 1,1),1,1) or '1'='1&vdcode=4907&type=1

SQL注入绕WAF案例

SQL注入绕WAF案例

报错注入也能正常使用

dopost=getpwd&gourl=&userid=123&[email protected]' or "'"="" or updatexml(1,concat('~',(select email from most_member limit 2,1),'~'),1) or '1'='1&vdcode=4907&type=1

SQL注入绕WAF案例

这种waf遇到的不多啊,就是分享一下小思路

原文始发于微信公众号(XG小刚):SQL注入绕WAF案例

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月20日03:02:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入绕WAF案例http://cn-sec.com/archives/1024414.html

发表评论

匿名网友 填写信息