ctf show web入门47

这是一个经典的 PHP 命令注入(Command Injection) 挑战。出题人的意图是让你绕过正则表达式的过滤,读取服务器上的 flag 文件。

注入点:通过 GET 参数 c 传递命令。

过滤内容:

;:分号(用于执行多条命令)。

cat, flag, more, less, head, sort, tail:读取文件的常用命令和关键字。

(空格):空格被过滤,需要找替代符。

0-9:数字被过滤。
:变量符号被过滤(无法使用环境变量)。∗:通配符被过滤。执行环境:system(:变量符号被过滤(无法使用环境变量)。 *:通配符被过滤。 执行环境:system(:变量符号被过滤(无法使用环境变量)。∗:通配符被过滤。执行环境:system(c." >/dev/null 2>&1");。

注意:这里有个坑,你的命令执行结果会被重定向到 /dev/null(黑洞),这意味着页面不会直接显示命令回显。

  1. 解题思路与绕过技巧

第一步:绕过重定向(获取回显)

由于后端强制追加了 >/dev/null 2>&1,我们需要在命令末尾加上截断符,让后面的重定向失效。

常用截断符:%0a (换行符)、|| (逻辑或)、&& (逻辑与)。

注意:; 被过滤了,所以通常选择 %0a。

第二步:绕过空格过滤

常用的空格替代符:

{IFS}(但 被过滤,不可用)

IFS9(不可用)

%09 (Tab 键)

< (输入重定向)

第三步:绕过关键字(flag / cat)

绕过 flag:可以使用问号 ? 通配符。例如 fl?g 或 fla?。

绕过 cat:虽然 cat, more, less 等都被过滤了,但 Linux 下读取文件的命令还有很多:

tac(反向列示,未被过滤)

nl(添加行号打印,未被过滤)

od -a

vi / vim(通常环境下不可用,但在某些 CTF 容器中可行)

grep(可以使用 grep 'a' flag.php)

  1. 构建 Payload

结合以上思路,我们需要构造一个既能绕过正则、又能绕过重定向、还能读取文件的 Payload。

先查看当前目录下的文件payload为:

?c=ls%0a

或者?c=ls||

方案 A:使用 tac 和通配符构造payload为:

?c=tac%09fla?.php%0a

方案B使用nl绕过payload为:

?c=nl%09fla?.php%0a

查看源代码即可得到flag

相关推荐
Lvan的前端笔记28 分钟前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
三天不学习1 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs194052 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
明月_清风3 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
qq_284274054 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
Csvn4 小时前
框架性能优化
前端
qq_284274055 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
回眸&啤酒鸭5 小时前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
用户69371750013845 小时前
2026,程序员的时代拐点到了
android·前端·后端
大龄秃头程序员5 小时前
一次 iBeacon + BLE 无感解锁方案的实现记录
前端