CTF show web入门45

这看起来是一道经典的 PHP 代码审计类型的 CTF 题目。这类题目的核心在于绕过正则表达式(WAF)的限制,最终实现 RCE(远程命令执行)。

这段代码非常简洁,逻辑如下:

接收参数:通过 GET 请求接收参数 c。

过滤检查:使用 preg_match 函数对参数 c 进行正则匹配过滤。

/;|cat|flag| /i:这表示如果你的输入中包含 分号 (😉、关键词 cat、关键词 flag 或 空格,正则匹配就会成功(返回 true)。

前面的 ! 表示取反,即:如果你不包含这些字符,才会执行 system() 函数。

执行命令:system($c." >/dev/null 2>&1");

注意:这里有一个重定向 >/dev/null 2>&1,这意味着你的命令执行结果会被丢弃,页面上不会直接显示回显内容。

我们需要解决三个主要障碍:空格过滤、关键词过滤、以及结果无回显。

A. 绕过空格过滤

在 Linux 命令中,有多种方式可以替代空格:

${IFS}

IFS9\<(输入重定向,例如cat\b (但这里有分号限制,较难使用)。

内联执行:例如 ls

C. 解决无回显问题 (>/dev/null)

这是本题最关键的一步。由于命令后面接了重定向,我们需要截断掉后面的内容,或者让命令在后台执行。

使用 ||:如果前一个命令成功,则不执行后面。

使用 %0a (换行):在 URL 编码中代表换行符,可以开启新的一行命令,从而让后面的重定向失效。

使用 & (后台执行):在 URL 中需编码为 %26。

所以我们构造以下payload: ?c=ls%0A

首先来查看当前目录下的文件

再尝试构造一个payload来查看flag.php文件中的内容

payload为:?c=tac${IFS}f*%0a

或者是:?c=tac%09f*%0a

相关推荐
六点_dn2 小时前
RabbitMQ学习笔记-部署和使用
笔记·学习·rabbitmq
用户059540174463 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen3 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜3 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉3 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上4 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978334 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒4 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
天天爱吃肉82184 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
IT19954 小时前
Dify 实战笔记:工作流核心玩法 + 开源 AI 应用全解析
笔记