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

相关推荐
程序员陆业聪2 小时前
绕过Frida/Xposed的最后防线:SVC直接系统调用与Native反Hook实战
android
程序员陆业聪2 小时前
WebView与原生JS交互:JSBridge生产级实现与安全防护
android
JustHappy3 小时前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本3 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
sulikey3 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
weixin_471383033 小时前
图片预解码缓存
前端·浏览器缓存·图片预解码
XGeFei5 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
郑洁文5 小时前
基于网络爬虫的Web敏感信息泄露自动化检测工具
前端·爬虫·网络安全·自动化
我命由我123455 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
郑洁文6 小时前
可视化Web渗透分析工具的设计与实现
前端