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 即可。

相关推荐
itmigrate7 小时前
前端项目里,Object.is 并不是 === 的平替
前端
小大宇8 小时前
Vue知识点6-computed计算属性
前端·javascript·vue.js
程序员海军8 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_949970699 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
独隅9 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
风骏时光牛马10 小时前
后端服务接口开发与性能优化
前端
kyriewen11 小时前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师11 小时前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端
IT_陈寒11 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
柳杉11 小时前
用 Codex 完成智慧高速 3D 可视化大屏,从 18 张行业设计稿到可交互的运行监测中心
前端·ai编程·数据可视化