ctf show web入门123

这是一道典型的 PHP 代码审计与绕过题。核心目标是通过构造特殊的 POST 和 GET 请求,绕过极其严格的正则表达式与长度限制,最终执行代码并输出 $flag。

本来是要通过echo flag来得到flag但是!isset(flag来得到flag但是!isset(flag来得到flag但是!isset(_GET'fl0g')和if($fl0g==="flag_give_me")前后矛盾了,最后不能够通过echo flag来解决本题,但是还有一个eval()函数,我们通过eval()函数来执行我们传入的flag来解决本题,但是还有一个eval()函数,我们通过eval()函数来执行我们传入的flag来解决本题,但是还有一个eval()函数,我们通过eval()函数来执行我们传入的c

首先我们要满足

php 复制代码
if(isset($_POST['CTF_SHOW']) && isset($_POST['CTF_SHOW.COM']) && !isset($_GET['f10g']))

要求CTF_SHOW,CTF_SHOW.COM,必须存在而fl0g必须不存在

注意: PHP 在解析全局变量时,会将非法字符(如点号 .)自动转换为下划线 ,[ 会转换为 并且一旦已经进行了一次"非法字符检查"后就不会再进行检查,所以后面的.就保留了下来。(类似于双写绕过)

在 PHP 中,POST 传入 CTF_SHOW.COM=1 会被解析为 POST′CTFSHOWCOM′,导致isset(_POST'CTF_SHOW_COM',导致 isset(POST′CTFSHOWCOM′,导致isset(_POST'CTF_SHOW.COM') 失败。

绕过方法:使用 CTF[SHOW.COM=1。PHP 在解析时,遇到 [ 会将其转换为 _,但随后会停止转换后面的字符。因此 CTF[SHOW.COM 会被解析为 CTF_SHOW.COM

然后是正则表达式的限制和对$c参数长度的限制

php 复制代码
if(!preg_match("/\\\\|\/|\|\|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c) && strlen($c) <= 18)

未被过滤的常用符号:美圆符号 $、小括号 ()、方括号 \[\]、大于小于号 <>、冒号、空格

php 复制代码
eval("$c" . ";");
if($fl0g==="flag_give_me"){
    echo $flag;
}

当你传入 fun=echo flag(即 c 的值为 echo $flag)时,eval() 实际执行的字符串是:

php 复制代码
echo $flag;

所以payload为:

CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag

相关推荐
console.log('npc')2 小时前
Git 冲突与 AI 协助指南
前端·人工智能·git·大模型
爱学堂IT分享3 小时前
Cesium可视化系统实战课程-Cesium教程学习
前端
糖墨夕4 小时前
理解大语言模型:Agent 的“大脑”
前端·agent
Rain的Java大神之路4 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
cpolar技术支持4 小时前
浏览器也能跑本地 AI:用 Transformers.js + WebGPU 做一个最小推理 Demo,cpolar 给同事远程体验
前端·ai·cpolar·webgpu·transformers.js
猎头南楼5 小时前
VLA 模型落地端侧:从架构选型到量化部署的工程实践笔记
笔记·架构·大模型
Capricorn19885 小时前
日志级幻觉排障:GPT-6 Astra 迈入 AGI 时代,知芽 Notebook Skill 如何以引用校验与零命中诚实弃权解决长文失忆
论文阅读·人工智能·笔记·gpt·agi
疯狂打码的少年6 小时前
【数据库技术】多值依赖与第四范式(4NF)
数据库·笔记·算法
tq10866 小时前
算法的另一面
笔记
计算机魔术师6 小时前
OpenAI 发布 GPT-6 Astra:多项基准刷新纪录, cybersecurity 能力达 Critical 阈值
前端