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(黑洞),这意味着页面不会直接显示命令回显。 2. 解题思路与绕过技巧 第一步:绕过重定向(获取回显) 由于后端强制追加了 \>/dev/null 2\>\&1,我们需要在命令末尾加上截断符,让后面的重定向失效。 常用截断符:%0a (换行符)、\|\| (逻辑或)、\&\& (逻辑与)。 注意:; 被过滤了,所以通常选择 %0a。 第二步:绕过空格过滤 常用的空格替代符: ${IFS}(但 $ 被过滤,不可用) $IFS$9(不可用) %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) 3. 构建 Payload 结合以上思路,我们需要构造一个既能绕过正则、又能绕过重定向、还能读取文件的 Payload。 先查看当前目录下的文件payload为: ?c=ls%0a ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1701aca615144aacac0a446b7bff1261.png) 或者?c=ls\|\| ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bc034fcb5bd3495ba415d12c016e47df.png) 方案 A:使用 tac 和通配符构造payload为: ?c=tac%09fla?.php%0a ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/36ef0e04018445f5aa587a02d68cdd33.png) 方案B使用nl绕过payload为: ?c=nl%09fla?.php%0a ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/66301eb0d9b94f2eb92a0a7f0cb52c6a.png) 查看源代码即可得到flag ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f7c43713187476cbc5c29fe4410c86d.png)

相关推荐
网络工程小王1 小时前
【LangGraph 状态持久化(Checkpoint)详解】学习笔记
jvm·人工智能·笔记·langchain
web守墓人1 小时前
【神经网络】js版本的Pytorch,estorch重磅发布
前端·javascript·人工智能·pytorch·深度学习·神经网络
贫民窟的勇敢爷们1 小时前
Vue的渐进式特性,让前端开发更具灵活性
前端·javascript·vue.js
问心无愧05131 小时前
ctf show web入门81
前端·笔记
ZC跨境爬虫1 小时前
跟着MDN学HTML_day_49:(ShadowRoot接口)
前端·javascript·ui·html·ecmascript·媒体
sheeta19981 小时前
TypeScript 学习笔记
笔记·学习·typescript
小则又沐风a1 小时前
初步了解进程的概念
java·linux·服务器·前端
审判长烧鸡1 小时前
【前端】npm audit fix 修复漏洞时的具体逻辑
前端·npm
幽络源小助理1 小时前
IP定位系统源码二开版 新增分销功能 PHP地理位置查询系统
前端·开源·源码·php源码