ctf show web入门48

这是一道典型的 PHP 代码审计与命令注入(Command Injection) 绕过题。

  1. 代码逻辑分析

    代码的核心逻辑如下:

    输入点:通过 GET 方式接收参数 c。

    过滤机制:使用 preg_match 进行正则匹配,过滤了大量关键字符和命令:

    符号类:; (分号), | (管道符), & (后台运行/与), (空格), $ (变量符号), \ (转义), * (通配符), 0-9 (数字), ' (单引号), " (双引号), ` (反引号)。

    命令类:cat, flag, more, less, head, sort, tail, sed, cut, awk, strings, od, curl。

    执行点:如果输入的 c 不匹配上述正则,则执行 system($c." >/dev/null 2>&1");。

  2. 核心难点

    黑洞重定向:>/dev/null 2>&1 会将命令的标准输出和错误输出全部丢弃,这意味着你无法直接在页面上看到命令执行的结果(无回显)。

    空格过滤:无法直接使用空格分隔命令和参数。

    关键字过滤:无法直接读取包含 flag 字样的文件,也无法使用常用的文件查看命令(如 cat)。

  3. 解题思路与绕过技巧

    A. 解决"无回显"问题

    既然输出被重定向到了 dev/null,我们需要想办法让命令连续执行。通常使用 ;、& 或 &&,但 ; 被滤了。

    利用 URL 编码:在 Linux shell 中,换行符 %0a 可以起到分隔并执行多条命令的作用。

    Payload 结构:?c=ls%0a。由于 ls 执行后的输出原本会被截断,但换行后的第二部分才是重定向,所以 ls 的结果有机会显示出来。

B. 绕过空格限制

常用的空格替代符:

{IFS} (但 被滤了,不能用)

IFS9 (同上,不能用)

%09 (Tab 键的 URL 编码):这是本题最可能的解法。

< (重定向符号):例如 cat<flag.php(但 cat 被滤了)。

C. 绕过关键字过滤 (flag, cat 等)

绕过 cat:可以使用 tac(倒序查看)、nl(添加行号查看)、vi、uniq 等。

绕过 flag 字样:可以使用通配符。虽然 * 被滤了,但 ? 没有被滤!

可以用 f??? 代表 flag。

绕过数字:如果需要数字,可以使用 shell 里的算术运算,但本题重点似乎不在数字。

payload为:?c=tac%09fla?.php%0a

或者使用?c=nl%09fla?.php%0a 然后查看源代码

nl (Number Lines):主要用于给文件内容加上行号后输出。

虽然 nl 的初衷是编排行号,但为了编排行号,它必须读取并显示文件内容。在绕过过滤(Filter Bypass)的场景下,我们并不在乎输出里是否多了行号,只要能看到文件里的 flag 即可。

相关推荐
怕浪猫27 分钟前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
西瓜太郎123442 分钟前
外层模型卡片与分组详情成功率不一致,应该怎么排查?
前端·typescript·go·软件工程·react
GreenTea1 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
开心就多写,一点就开心2 小时前
导演视听语言与分镜系统笔记(一):景别系统、机位视点与时空连贯性设计
笔记·aigc·镜头·电影
疯狂打码的少年4 小时前
【计算机网络】IPv6基础(特点、表示法、与IPv4对比)
网络·笔记·计算机网络
几何心凉4 小时前
没有万能模型:我用 AiiOnly Token Plan,把多款大模型的长处拼进同一个项目
前端
kyriewen4 小时前
Claude Code 的额度今天缩水了17%——官方公告上写的是"永久提高25%"
前端·ai编程·claude
天空之城--4 小时前
Android逆向安全合规接单指南
android·安全
雪芽蓝域zzs5 小时前
vue解构平铺VS对象包裹
前端·javascript·vue.js
风骏时光牛马6 小时前
从零到实战,完整AI学习路线
前端