PHP|Thinkphp最新版本漏洞分析

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片

PHP|Thinkphp最新版本漏洞分析

文章图片


环境Thinkphp6.0.12LTS(目前最新版本);
PHP7.3.4 。
安装composer create-project topthink/think tp6

测试代码
漏洞分析漏洞起点不是__desturct就是__wakeup全局搜索下 , 起点在vendor\\topthink\\think-orm\\src\\Model.php
只要把this->lazySave设为True就会调用了save方法 。


【一>所有资源关注我 , 私信回复“资料”获取<一】

1、网络安全学习路线

2、电子书籍(白帽子)

3、安全大厂内部视频

4、100份src文档

5、常见安全面试题

6、ctf大赛经典题目解析

7、全套工具包

8、应急响应笔记
跟进save方法 , 漏洞方法是updateData , 但需要绕过①且让②为True①调用isEmpty方法 。

public function save(array $data = https://mparticle.uc.cn/api/[
string $sequence = null): bool
   {
       // 数据对象赋值
       $this->setAttrs($data);
       if ($this->isEmpty() || false === $this->trigger('BeforeWrite')) {
           return false;
       
       $result = $this->exists ? $this->updateData() : $this->insertData($sequence);

跟进isEmpty方法只要$this->data不为空就行 。

$this->trigger方法默认返回就不是false , 跟进updateData方法 。 漏洞方法是checkAllowFields默认就会触发 。

protected function updateData(): bool
   {
       // 事件回调
       if (false === $this->trigger('BeforeUpdate')) {
           return false;
       
       $this->checkData();

       // 获取有更新的数据
       $data = https://mparticle.uc.cn/api/$this->getChangedData();

       if (empty($data)) {
           // 关联更新
           if (!empty($this->relationWrite)) {
               $this->autoRelationUpdate();
           
           return true;
       
       if ($this->autoWriteTimestamp && $this->updateTime) {
           // 自动写入更新时间
           $data[$this->updateTime
      = $this->autoWriteTimestamp();
           $this->data[$this->updateTime
= $data[$this->updateTime
;
       
       // 检查允许字段
       $allowFields = $this->checkAllowFields();

跟进checkAllowFields方法 , 漏洞方法是db , 默认也是会触发该方法 , 继续跟进 。

protected function checkAllowFields(): array