每天一道CTF(Web方向)

 这是一道关于php的反序列化的题,需要一定的php代码审计的能力,先来大致的看一下代码,

第一个框里的代码属于命令执行,第二个框的代码属于正则过滤危险字符,第三个框的代码属于反序列化提交的内容,并且进行base64的解码

in_array, 检查数组中是否存在某个值,这里就是检查method的变量是否为ping(就是我们传进来的第一个参数在不在数组(arrar(“ping”)中),如果是ping就进行下一步,all_user_func_array()—调用回调函数(把一个数组参数作为回调函数的参数,第二个数组为被传入的索引数组),所以我们传入的第二个参数要为数组,$this是当前的ease类,$this->method是调用类里的ping函数,进行命令执行(这里我们传入的第一个参数为ping,所以调用ping函数)

 下面是我们生成的payload,第一个参数是ping,第二个参数是arrary("id"),通过__destruct析构函数,把数组中我们传入的id作为参数带入到ping函数中,进行命令执行

<?php
class ease{
    private $method;
    private $args;
    function __construct($method,$args){
        $this->method = $method;
        $this->args = $args;
    }
}
$a = new ease('ping',array("id"));
echo serialize($a);
echo base64_encode(serialize($a));
?>

提交payload进行验证

 

发现可以执行,因为源代码绕过了斜杠和空格等关键字导致了不能直接获取flag信息,为了方便执行后续命令执行获得flag,采取空格绕过法,空变量绕过来绕过PHP正则的匹配:${IFS} 空格绕过、$@ 空变量

 用$@来绕过正则过滤

 接下来要获取flag,获取flag必须要用斜杠"/"查看目录下的文件,思考一下有什么可以代替斜杆,然后获取flag。搜索了资料发现有些命令是可以查看目录下的文件,我们可以利用这个特性然后配合cat命令进行查看,可以看到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值