反序列化入门

序列化及魔术函数例子

";
    echo '-----------------------------------------------';
    echo "
"; class GWHTeam{ public $web; public $pwn; private $crypto;// protected $misc; //O:7:"GWHTeam":4:{s:3:"web";s:4:"2018";s:3:"pwn";N;s:15:"GWHTeamcrypto";N;s:7:"*misc";N;} //\x00 + * + \x00 + 变量名 -> 反序列化为protected变量 //\x00 + 类名 + \x00 + 变量名 -> 反序列化为private变量 function __construct($web){ echo 'welcome to gwht!
'; $this->web=$web; echo $this->web; echo "
"; } function __destruct(){ echo "
"; echo 'this is destruct'; } function __toString(){ return "it must return a str value
"; } function __invoke($a,$b){ echo 'my name is '. $a,',i like '. $b; } } $a=new GWHTeam('2018','2019'); //construct echo $a; //toString echo "
"; $a('vstar','GWHT'); //invoke echo "
"; /* __construct()//当一个对象创建时被调用 __destruct() //当一个对象销毁时被调用 __toString() //当一个对象被当作一个字符串使用 __get()//获得一个类的成员变量时调用,读取不可访问属性的值时,__get() 会被调用。 也就是,当想要获取一个类的私有属性,或者获取一个类并为定义的属性时。该魔术方法会被调用。 __set()//设置一个类的成员变量时调用 __invoke()//调用函数的方式调用一个对象时的回应方法 __call()//当调用一个对象中的不能用的方法的时候就会执行这个函数 __sleep() 在对象在被序列化之前运行 __wakeup() 将在反序列化之后立即被调用(通过序列化对象元素个数不符来绕过)*/ echo "
"; echo '---------------------------------------------
'; function __wakeup(){ echo 'this is __wakeup'; } echo serialize($a); ?>

序列化例题1


序列化例题2

score==10000) {
            $flag = "******************";
            echo $flag;
        }
    }
}
$exp = $_GET['exp'];
echo "
"; unserialize($exp); ?>

序列化例题3

username = $username;
    $this->password = $password;
}

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

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

题解

score==10000) {
            $flag = "******************";
            echo $flag;
        }
    }
}

    $a=new Student();
    echo serialize($a);
-------------------------------------------------------
    $a = new Name('admin',100);
    echo serialize($a);
    //绕过__wakeup

?>

你可能感兴趣的:(反序列化入门)