ctf show web入门111

这是一道典型的 PHP 代码审计与绕过类型的 CTF 题目

它的核心考点是:PHP 的可变变量、引用传递 以及 利用 PHP 全局变量数组绕过正则限制。

核心代码:

php 复制代码
function getFlag(&$v1, &$v2){
    eval("$$v1 = &$$v2;");
    var_dump($$v1);
}

这里使用了 v1和v1 和 v1和v2,也就是可变变量。例如,如果 v1 = "a",那么 v1 就相当于 a。

eval("KaTeX parse error: Expected 'EOF', got '&' at position 6: v1 = &̲v2;"); 的意思是:让以 v1 的值命名的变量,强行引用(指针指向)以 v2 的值命名的变量。

随后 var_dump($$v1); 会把这个变量的值打印出来。我们的目标就是让它打印出存储在内存或某个变量中的 flag。

但是这里对v1v2的输入存在严格的正则限制:

php 复制代码
if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1))

被禁用的字符包括:空格、数字(0-9)以及绝大多数特殊符号(包括 $、_ 等)。

允许的字符:基本上只剩下了大小写英文字母

此外还对v1进行限制

php 复制代码
if(preg_match('/ctfshow/', $v1)){
    getFlag($v1, $v2);
}

在进入getflag前,v1的值里面必须包含ctfshow这个字符串

既然 include("flag.php"); 被执行了,flag 通常会被定义为一个变量(例如 $flag)。

但在 PHP 中,所有的全局变量都会被自动存储在超全局配置数组 $GLOBALS 中。

如果我们能让 KaTeX parse error: Can't use function '' in math mode at position 7: v1 指向 ̲GLOBALS,那么 var_...v1) 就会把所有的全局变量(包括 flag)全部打印出来!

假设我们传入:v1 = ctfshowv2 = GLOBALS带入 getFlag 函数后:v1的值是"ctfshow"−>v1 的值是 "ctfshow"->v1的值是"ctfshow"−>v1 代表变量 ctfshowctfshowctfshowv2 的值是 "GLOBALS" -\> v2 代表变量 GLOBALS执行 eval 语句就变成了:

php 复制代码
$ctfshow = &$GLOBALS;

接着执行:

php 复制代码
var_dump($ctfshow);

因为 $ctfshow 已经引用了 GLOBALS,这就等于vardump(GLOBALS,这就等于 var_dump(GLOBALS,这就等于vardump(GLOBALS);

在 PHP 中,$GLOBALS 是一个包含当前脚本中所有全局变量的全局组合数组。只要在当前页面中出现过、定义过的变量,或者是系统自带的运行环境便利,全都会在这个数组里

所以flag就直接输出在当前页面中了

flag为:ctfshow{8fa1650c-3dfd-4645-8c3f-ca3c0ef9533d}

相关推荐
ACP广源盛139246256734 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
Jmyd01234 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
砚凝霜4 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
文人sec5 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
u0111026756 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
摇滚侠6 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
xier_ran6 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝6 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记
jerrywus6 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
派小心.7 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析