Sofia6002/CTF_SQL_Injection_Bypass
GitHub: Sofia6002/CTF_SQL_Injection_Bypass
一个分阶段的 Web 安全 CTF 挑战,要求参赛者绕过 WAF 进行 SQL 注入以提取数据库凭据,并用其解密 AES 加密的 flag。
Stars: 0 | Forks: 0
# SQL注入与解密绕过
这是一个 Web 安全 CTF 挑战,旨在测试 SQL 注入 WAF 绕过、通过 `information_schema` 进行 schema 枚举以及凭据解密。
## 挑战概述
这是一个分为两个阶段的 Web 安全挑战,参赛者必须绕过对空格敏感的 Web 应用防火墙 (WAF),枚举数据库元数据以发现隐藏的凭据,并使用获取到的密码来解密挑战 flag。
## 设置说明
1. 下载 `source_code.zip` 和 `schema.sql`。可以使用 Xampp。
2. 将 `schema.sql` 导入到 MariaDB/MySQL 环境中。
3. 在本地服务器(例如 XAMPP、Docker 或 Apache)上部署 PHP 应用程序(`login.php` / `index.php`)。
4. 通过 `http://localhost/index.php` 访问 Web 界面。
## 挑战背景 / 场景
在一次内部安全审计中,一个身份验证门户因薄弱的输入验证和自定义防火墙规则被标记出来。调查人员怀疑恶意攻击者可以操纵原始 SQL 语句来检查后端元数据,并获取存储在应用程序数据库中的加密机密。你能绕过 WAF 过滤器并恢复解密密钥吗?
## Flag 位置 / 逻辑
* flag 在后端使用 **AES-256-CBC** 进行了加密。
* 解密密钥是存储在 `users` 表中 `sec_admin_99` 用户账号的**明文密码**。
* 仅仅绕过登录逻辑(例如使用 `'#`)可以让你登录,但**无法**解锁 flag,因为仍然缺少解密密钥。
* 参赛者必须从数据库中提取明文密码,然后使用它进行身份验证,才能显示解密后的 flag。
## 预期解题路径
1. **确定列数:** 使用 `ORDER BY` 注入 (`'/**/ORDER/**/BY/**/4#`) 确认查询包含 4 列。
2. **确定输出窗口:** 注入 `'/**/UNION/**/SELECT/**/1,2,3,4#` 来确定可见的回显字段(位置 2 和 4)。
3. **枚举表:** 使用内联注释 (`/**/`) 查询 `information_schema.tables` 以绕过 WAF 的空格过滤,并定位 `users` 表。
4. **枚举列:** 查询 `information_schema.columns` 以识别 `username` 和 `password` 字段名。
5. **提取凭据:** 提取 `sec_admin_99` 的管理员密码 (`SuperSecretPass2026!`)。
6. **身份验证与解密:** 在 `index.php` 中提交有效的凭据,以执行 AES 解密例程并显示 flag。
## 学习成果
参赛者在完成本挑战后将理解以下内容:
* 过滤空格或特定关键字的输入黑名单很容易被使用替代 SQL 分隔符(如内联注释 (`/**/`))绕过。
* 当应用程序数据依赖于运行时解密的密钥时,仅仅绕过身份验证逻辑是不够的。
* 安全的应用程序必须使用**参数化查询(预处理语句)**,而不是依赖脆弱的正则表达式过滤器或输入黑名单。
标签:AES解密, CISA项目, ffuf, OpenVAS, PHP, WAF绕过, Web安全, 数据库枚举, 蓝队分析, 请求拦截