昨天搞了搞掌控的反序列化,突然想到当时打CTF时老师给我们冲了个云演的靶场,
就去看了看,也有反序列化漏洞
顺手搞搞加深一下印象
第一题
点进去后是这样的
还记得昨天的
php中有一类特殊的方法叫“Magic function”(魔术方法), 这里我们着重关注一下几个:
__construct():当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。(构造函数)
__destruct():当对象被销毁时会自动调用。(析构函数)
__wakeup() :如前所提,unserialize()时会自动调用。
根据源码可以得出
本题需要绕过一个__wakeup()函数和一个正则匹配,才能显示出 f15g_1s_here.php 文件
绕过__wakeup():在反序列化执行之前,会先执行__wakeup这个魔术方法,所以需要绕过。
绕过__wakeup()是利用CVE-2016-7124漏洞,即反序列化时,如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup( )的执行。
我们要传入一个参数flag,并且将传入的值放入反序列化函数中执行,所以我们要传入的应该是一个序列化后的字符串,此时我们应该类Demo进行序列化
我很懒在在线PHP上进行编写
<?php
class Demo {
private $file = 'Gu3ss_m3_h2h2.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($th