思路分析

这一关是「命令执行」漏洞,推荐使用「反引号」配合「分号」执行命令查看文件内容
2023-12-02T12:36:10.png

1)多命令执行
根据页面的文本提示,我们尝试传递「参数」 ip,后端会通过命令执行函数去ping参数的内容,可以确定是一个命令执行漏洞,我们使用分号;执行多条命令看一下当前路径下有哪些文件。

很明显 flag 就在 flag.php 这个文件里面,但「查看」这个文件的过程并不会很顺利

2)绕过空格
提示我们过滤掉了「空格」,这很简单,我们使用 $IFS$9 绕过空格

3)绕过flag
成功绕过空格,但 「flag」又被过滤了。上面我们执行ls命令的时候查询出了 flag.php、index.php 这两个文件名,能不能将这个执行结果拿来用一下呢?答案是肯定的,我们可以使用「反引号」,构造的payload如下

?ip=1;cat$IFS$9`ls`

特殊格式 $IFS$9用来绕过空格,执行语句应该是下面这样

ip=1;cat `ls`

反引号的「优先级」很高,会先执行反引号中的命令,而后在将执行的「结果」结果配合其他命令执行,也就是说,执行的语句时下面这样

ip=1;cat flag.php index.php

命令执行后会查看这两个文件的内容,从文件的内容中就可以拿到 flag

解题步骤

1)查看当前目录
使用分号;「执行多条语句」,在 url 地址栏中输入以下payload,查看当前目录下的文件

?ip=1;ls

当前目录下有两个文件:flag.php、index.php
2023-12-02T12:42:05.png

2)查看文件内容
使用 $IFS$9绕过空格,配合「反引号」的高优先级特性查看 flag.php 文件,payload如下

?ip=1;cat$IFS$9`ls`

文件内容如下
2023-12-02T12:34:33.png

3)flag 在注释中
注释中的内容不会直接显示在页面中,右键查看「网页源代码」,获取 flag
2023-12-02T12:35:15.png