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

相关推荐
小码哥_常1 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮3 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
sbjdhjd4 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
她说可以呀5 小时前
Vue插槽
前端·javascript·vue.js
qq_448011165 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan5 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352906 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝6 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing037 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
海绵宝宝的月光宝盒7 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad