如何利用WAF规则精准拦截复杂的变形SQL注入载荷?

大杰吖_6068

大杰吖_6068

2026-09-05

880人浏览

原创

精准拦截sql注入需先解析解码再语义分析:开启请求体解析与归一化,显式调用t:urldecodeuni/t:lowercase,启用libinjection等语义引擎并绑定数据库类型,两段式规则+指纹验证确保生效。

如何利用waf规则精准拦截复杂的变形sql注入载荷?

光靠 union|select 这类正则匹配,90% 的变形 SQL 注入都会漏掉——因为真实攻击根本不会直写 UNION SELECT,而是用 UnIoN%09SeLeCt、SEL/**/ECT、%73elect 等方式绕过。精准拦截的关键不是堆规则,而是让 WAF 先“看懂”请求,再决定拦不拦。

必须开启请求体解析和解码归一化

大量 SQL 注入藏在 POST body 或 JSON 里,若没开解析,WAF 根本看不到载荷。

  • SecRequestBodyAccess On 要写在全局 modsecurity.conf,不能只放在 location 块里
  • 后端是 PHP-FPM,必须加 fastcgi_pass_request_body on;是 proxy_pass(如 Node.js),得配 proxy_pass_request_body on
  • 规则中必须显式调用 t:urlDecodeUni,t:lowercase,否则 %27union%20select 和 UnIoN 都匹配不上
  • JSON 接口要额外确认 WAF 是否启用了 raw body 解析,否则 {"id":"1' OR 1=1--"} 完全不进检测流程

别单独依赖正则,必须用语义引擎做第二道判断

正则只能筛形似,语义引擎(如 Libinjection)才能判真伪。比如 SELECT * FROM posts 是合法搜索,admin' AND (SELECT COUNT(*) FROM users)>0-- 才是布尔盲注——仅靠关键词匹配无法区分。

Pixelcut.ai
Pixelcut.ai

Pixelcut.ai是一款AI图片处理工具,AI产品背景移除和替换。

下载
  • 阿里云/腾讯云/华为云 WAF 的语义分析默认常处于关闭或观察模式,需手动开启,且要绑定数据库类型(MySQL/MSSQL 语法差异大)
  • 宝塔 WAF 启用「高级 SQL 防护」后,底层才调用类似 libinjection_is_sqli 的函数
  • 自定义规则建议设为两段式:SecRule ARGS "@rx [\"'`].{0,50}(?:union|select|sleep)" "phase:2,pass,setvar:tx.sqli_flag=1",再接一条 SecRule TX:SQLI_FLAG "@eq 1" "phase:2,block,ctl:ruleEngine=On,chain" 并在 chain 中调用语义函数
  • 语义引擎生效的硬指标:WAF 日志里拦截记录含 fingerprint 字段,且同一载荷在开关语义前后行为必须变化(从放行→拦截)

绕过高频点:空格、注释、编码必须显式覆盖

攻击者不用空格,改用 %09(Tab)、%a0(NBSP)、/**/;不写 --,改用 # 或 %23;大小写混用是基础操作。正则不提前处理这些,等于白写。

  • 空格类分隔符应统一用 [\s%09%0a%0b%0c%0d\xa0] 匹配,不能只写 \s
  • 注释符要覆盖 (?:--|%23|/\*)\s*[\r\n\t ]*,否则 id=1%23foo%0D%0Aunion%20select 就会漏
  • 避免用 .* 匹配长字段,改用 [^&\n\r]{0,100} 限制长度,防回溯爆炸拖慢整条规则链
  • 禁用宽泛表达如 args contains "OR 1=1"——它会拦住所有含 OR 的合法参数(如 ?filter=ORANGE)

最常被忽略的是:语义引擎是否真正加载并参与了决策。很多团队看到控制台显示“已启用”,就以为万事大吉,结果日志里连 fingerprint 都没有,说明底层词法分析器根本没跑起来。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4343

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

911

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1129

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6261

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3083

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6240

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8461

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1150

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1012

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP开发基础之数据库篇(PDO)
PHP开发基础之数据库篇(PDO)

共10课时 | 2.3万人学习