第十八届CISCN决赛CTF Hard php题解
字数 877 2025-09-01 11:26:02
CISCN决赛CTF Hard PHP题解 - 笛卡尔积注入与环境变量注入
题目概述
这是第十八届CISCN决赛第一日CTF的一道Web题目,题目部署在玄机平台上。题目包含两个主要漏洞点:笛卡尔积注入和环境变量注入。
第一部分:笛卡尔积注入
漏洞位置
题目开局是一个登录框,在密码输入处存在SQL注入漏洞。
注入特点
- 存在SQL注入黑名单
- 联合注入、布尔盲注被过滤
- 时间盲注中的
sleep函数被过滤
笛卡尔积注入原理
笛卡尔积注入利用数据库在大量数据下进行笛卡尔积查询时计算需要一定时间的特性,通过时延来判断给定条件是否正确。
在MySQL中,information_schema.columns表存放所有表的字段,数据量极大,适合用于笛卡尔积延时注入。
常用Payload
SELECT count(*) FROM information_schema.columns A, information_schema.columns B
构造盲注Payload
- 空格和
=被过滤,使用/**/和like替换 - 使用MySQL的
if函数(类似三目运算符)
示例Payload:
if(admin的密码开头是t, (SELECT count(*) FROM information_schema.columns A, information_schema.columns B), 0)
实际攻击脚本注意事项
- 盲注字符不要带有
%,否则易判断错误 - 通过时延判断条件是否正确
注入结果
通过笛卡尔积注入获得admin的密码:this_is_a_strong_password
第二部分:环境变量注入
漏洞文件
登录后访问adca4977cb42016071530fb8888105c7.php
漏洞原理
参考P牛文章:如何通过环境变量注入攻击Bash
过滤限制
- 过滤了很多关键词
- 过滤了"flag"的每个字符
绕过技巧
- 根目录flag文件名为
/f1ag - 使用
/*1*绕过过滤 - 使用
pr命令读取文件
利用方法
构造合适的命令读取flag文件,例如:
pr /*1*
总结
这道题目结合了两种高级注入技术:
- 在传统注入被过滤时使用笛卡尔积注入
- 通过环境变量注入绕过严格的过滤限制
关键点:
- 理解笛卡尔积注入的时延原理
- 掌握绕过过滤的技巧(如
/**/替代空格,like替代=) - 了解环境变量注入的利用方式
- 掌握特殊文件名读取技巧(
/*1*)
这些技术在CTF比赛和实际渗透测试中都有重要应用价值。