当前位置: 首页 > news >正文

从CTFHub一道题,聊聊MySQL中那些容易被忽略的‘非主流’函数:REPLACE、CHAR与注入新思路

从CTFHub一道题看MySQL冷门函数的注入奇技

在渗透测试和CTF比赛中,SQL注入始终是最经典也最考验技巧的漏洞类型。当常规的联合查询、布尔盲注、时间盲注等手法被WAF严防死守时,我们是否想过从数据库手册的"冷门角落"寻找突破口?本文将以一道CTFHub赛题为引,深入剖析REPLACECHAR等MySQL"非主流"函数在注入中的妙用,揭示如何通过函数组合实现数据"自指"(Quine),为安全测试人员提供全新的攻击面挖掘思路。

1. 非常规注入的解题逻辑拆解

这道CTF题的核心约束条件异常刁钻:只有当用户输入的密码与数据库查询返回的密码完全一致时,才会返回flag。初看似乎无解——如果不知道密码,如何让输入与输出一致?这正是考察对SQL语言本质理解的精妙之处。

1.1 题目关键限制分析

通过源码审计,我们发现三个致命约束:

  1. 用户身份强制校验:仅允许admin用户登录
  2. 严格WAF过滤:禁用=andor等常见操作符,以及substrreverse等字符串函数
  3. 密码比对机制if($row['password'] === $password)的强类型匹配

传统注入手法在此全部失效。此时需要转换思路——构造一个输入输出完全相同的SQL表达式,即让数据库查询结果恰好等于我们提交的payload本身。

1.2 Quine编程思想的数据库实现

Quine(自产生程序)是指输出自身源代码的程序。将其思想迁移到SQL注入中,我们需要构造满足以下条件的表达式:

SELECT X FROM table WHERE X = 'X' -- 其中X的值为其自身的字符串表示

通过MySQL的REPLACE函数嵌套可以实现这种自指效果。核心原理是:

  • 内层REPLACE处理字符转义
  • 外层REPLACE实现字符串自复制

具体实现形式如下:

REPLACE( REPLACE('REPLACE(".",CHAR(34),CHAR(39))', CHAR(34), CHAR(39)), CHAR(46), 'REPLACE(".",CHAR(34),CHAR(39))' )

这个表达式经过两次替换后,输出结果与原始输入完全一致,完美绕过密码比对检查。

2. 关键函数深度解析

2.1 REPLACE函数的隐藏特性

REPLACE(str,from_str,to_str)函数看似简单,但在注入中有三个鲜为人知的特性:

  1. 递归替换:当to_str包含from_str时会形成无限递归
    SELECT REPLACE('a','a','aa'); -- 返回'aa'
  2. 类型自动转换:非字符串参数会被隐式转换
    SELECT REPLACE(1234,2,9); -- 返回'1934'
  3. 嵌套执行顺序:内层替换优先于外层

这些特性组合后可以构造出复杂的自引用表达式。例如以下payload通过三层嵌套实现引号逃逸:

SELECT REPLACE( REPLACE( REPLACE('"', CHAR(34), CHAR(39)), CHAR(39), CONCAT(CHAR(39), CHAR(34)) ), CHAR(36), '$' )

2.2 CHAR函数的编码妙用

CHAR()函数将ASCII码转换为对应字符,在绕过WAF方面有独特优势:

ASCII码字符常见过滤绕过场景
9\t替代空格
10\n换行绕过
34"引号替代
39'单引号编码
46.点号特殊处理

实战中常用组合:

CONCAT(CHAR(104),CHAR(101),CHAR(108),CHAR(108),CHAR(111)) -- 输出"hello"

2.3 函数组合的奇技淫巧

当基础函数组合使用时,会产生意想不到的效果:

  1. 字符串自生成
    SELECT REPLACE(REPLACE('"X"',CHAR(34),'Y'),'X','"X"') -- 输出 "Y"X"Y"
  2. WAF绕过模板
    SELECT/*!50000CHAR*/(45)/**/FROM/**/users
  3. 无字母数字注入
    SELECT``^!!~1; -- 通过位运算构造字符

3. 实战中的冷门函数挖掘方法论

3.1 数据库手册的"宝藏"区域

MySQL官方文档中以下章节常被忽视却暗藏玄机:

  • 字符串函数ELT()MAKE_SET()EXPORT_SET()
  • 数值函数CONV()FORMAT()CRC32()
  • 日期函数FROM_UNIXTIME()UTC_TIMESTAMP()
  • 加密函数MD5()SHA1()的碰撞特性

例如EXPORT_SET()可以用于数据外带:

SELECT EXPORT_SET(5,'Y','N',',',4); -- 返回"Y,N,Y,N"

3.2 函数特性组合矩阵

建立函数特性对照表有助于发现新的攻击向量:

函数特性可利用场景危险函数示例
递归执行栈溢出/内存耗尽REPEAT()RPAD()
隐式类型转换数字型注入CONV()FORMAT()
多字节处理字符集绕过CHAR()ORD()
参数可控二次注入GROUP_CONCAT()

3.3 自动化挖掘工具链

推荐以下工具辅助冷门函数挖掘:

  1. sqlmap tamper脚本:自定义函数变形规则
    python sqlmap.py -u "http://test.com" --tamper=charunicodeescape
  2. FuzzDB字典:包含非常规函数组合payload
  3. CodeQL规则:静态分析危险函数调用链

4. 防御视角的对抗策略

4.1 WAF规则盲点检测

针对函数式注入,传统WAF容易遗漏以下检测点:

  • 函数名与参数分离
    SELECT/*!50000CHAR*/(45)
  • 嵌套函数调用
    SELECT REPLACE(REPLACE('...'))
  • 非常量参数
    SELECT CHAR(USER()%256)

4.2 安全编码最佳实践

防御措施示例有效性等级
参数化查询prepare+execute★★★★★
最小权限原则只读账户★★★★☆
函数白名单禁用REPLACECHAR★★☆☆☆
输出编码HTML实体转义★★★☆☆

4.3 监控与溯源方案

建议部署以下深度防御措施:

  1. SQL语法分析:检测异常函数嵌套层级
  2. 执行计划监控:识别非常规函数调用
  3. 流量基线对比:发现低频函数使用模式

在真实渗透测试中,遇到严格过滤时不妨翻翻数据库手册的"冷门"章节。某次红队行动中,我们正是通过FORMAT()函数的数字格式化特性,成功绕过了某金融系统的WAF防护。记住,最锋利的武器往往藏在最不起眼的角落。

http://www.jsqmd.com/news/623680/

相关文章:

  • 誉财 YC - 10+ 双头全自动烫标机:服装商标烫印的变革先锋
  • 聊聊惠州隐形车衣服务,哪个品牌好用且性价比高? - mypinpai
  • Apache Hop环境搭建实战:从零到一的下载、安装与配置指南
  • QTableWidget 表格组件漳
  • 别再硬抄清单了!手把手教你根据业务场景,为等保2.0三级系统定制专属安全套餐
  • Janus-Pro-7B数学模型求解助手:辅助Matlab与数学建模工作流
  • 【Matlab】MATLAB教程:butter函数IIR滤波器设计(巴特沃斯滤波器及信号滤波应用)
  • 图像质量评估指标对比:SNR、PSNR、MSE和SSIM到底该用哪个?
  • 如何快速搭建直播弹幕采集系统:15+平台支持的完整解决方案
  • 终极B站视频解析工具:5分钟快速上手完整指南
  • 网络安全视角下的Qwen3-ForcedAligner服务防护策略
  • 3步零代码方案:彻底掌控你的微信聊天记录数据主权
  • 云容笔谈·东方红颜影像生成系统:面试题之如何设计一个高可用的AI图像生成服务
  • CLS无证书签名方案在V2G网络中的实战应用:从电动汽车充电到隐私保护
  • 【限时解密】某千亿级AI平台未公开的A/B测试框架设计文档(含流量染色协议v2.1、模型效果归因算法伪代码、合规审计日志Schema)
  • 从收音机调台到手机滤波:串联谐振回路在真实电路里到底怎么用?一个实例讲清楚
  • 设计师的免费中文字体救星:思源宋体TTF的7重魔法
  • HY-Motion 1.0部署教程:在CSDN星图镜像上一键体验
  • Windows上直接安装APK的终极指南:告别Android模拟器的完整解决方案
  • 别再手动调参了!Livox Mid-360点云滤波实战:用PCL的SOR和半径滤波搞定动态障碍物去除
  • 小白也能懂!Qwen3-Reranker-0.6B快速部署与WebUI调用实战
  • 沃伦森携绝缘在线监测电力智能诊断及阻抗特性监控系统优化全栈方案,亮相流程工业分会
  • 3分钟解锁QQ音乐加密音频:qmcdump让你的音乐重获自由!
  • [Minecraft]Spigot服务器从零搭建到稳定运行:避坑指南与性能调优
  • Ollama 0.1.33高危漏洞复现:手把手教你搭建恶意注册表,验证CVE-2024-37032路径遍历风险
  • 如何轻松解除极域电子教室控制:3步实现学习自由的高效方法
  • 基于Multisim的四位密码锁电路设计与仿真优化(含完整项目资源)
  • 护网实战:Shiro反序列化漏洞的攻防全景解析
  • 终极指南:如何彻底卸载Windows 10中的OneDrive并释放宝贵系统空间 [特殊字符]
  • 如何用这个开源工具让英雄联盟游戏体验提升3倍?