SQL注入详解(下)

五:常见的waf绕过方式以及实战

1:编码

采用url 十六进制等编码方式进行waf绕过

2:大小写绕过

在尝试的时候可以修改语句中字母的大小写,如果WAF使用是区分大小写的黑名单,那么就可以使用大小写进行绕过

3:过滤符号绕过

waf中可能会过滤掉一些特殊符号 我们可以利用他们过滤的特殊符号来进行绕过 比如 select被拦截了 <>被过滤了

 那么我们可以把select写成sel<>ect来进行绕过waf 或者使用双写seselectlect 来进行绕过

4:使用注释符号

/*!*//*/*/

poc中插入注释符号 比如 /*!*/内联注释符号: /*!20000select*/ select写入到内联注释符号中 waf会忽略掉这个字符 而感叹号后面的数字代表数据库的版本好 当数据库的版本大于其 则此语句同样会在mysql数据库中运行

5:等价函数,符号替换

当我们的函数被过滤 拦截的时候 我们可以使用等价函数或者符号进行替换,这里做一个小结

截取函数:mid()substr()substring()right()left()decode()

报错函数:floor() updatexml() extractvalue()

判断函数:if()case whenifnull()

and函数:orxor代替 或者使用符号&&||

空格被过滤:括号绕过  /**/绕过  +号代替

等号被过滤:like函数 代替

具体情况具体分析 我们也不知道waf的类型以及他们的拦截规则 只有不断去尝试 才能找到绕过方式

某高校网站sql注入安全狗waf的绕过

哎,当初应该截burp的图的, 当我使用单引号时回显出错 两个单引号回显正常 一开始我是想使用联合查询的 但是被安全狗给拦住了 忘记截安全狗拦截的那张图了 失算失算

既然内联不行 我们就用盲注(yyds)首先既然有waf 那么我们就要去不断的尝试 去获取他的过滤规则 在这里空格以及database()不能使用 围绕这一点 我们去改善我们的poc 空格不能用 我们就使用过滤符号或者括号 database()可以尝试大小写以及过滤符号绕过

poc?id=8'and/*/*/length(database(/*/*/))=5--+

等于5的时候网站回显出错,等于4的时候回显正常 所以我们得知了该数据库的字符长度为4

尝试进行爆出数据库名的信息 poc的构造也同样延续上面的思路

poc?id=8'and/*/*/mid(database(/*/*/))!='a'--+

截取数据库第一个字母不等与a的时候回显正常 不等于x的时候网页回显就会出错 不难看出其第一位字母就是x 当然也可以丢进burp中进行爆破 不过线程不能太快 会被检测到

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值