ToB企服应用市场:ToB评测及商务社交产业平台

标题: Thinkphp5.x全毛病复现分析 [打印本页]

作者: 一给    时间: 2024-5-17 21:54
标题: Thinkphp5.x全毛病复现分析
基础知识


命名空间和子命名空间

我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子:
[code][/code]

成功执行
流程分析

反序列化处打个断点

进入think\process\pipes\Windows的__destruct方法

进入removeFiles方法

$filename是think\model]\Pivot对象,file_exists方法触发它的__toString方法,但是Pivot类是没有__toString方法的,只能找父类Module,Module中使用use调用了Conversion类,Conversion被用trait修饰,所以最终调用的是Conversion类的__toString方法

跟进toJson方法

跟进$this->toArray方法

这里遍历$this->append,我们的append是这个值

先辈入getRelation,传入的key值是F12

每个条件都满意不了,直接return,所以$relation的值为null,满意if,进入getAttr方法

进入getData方法

我们的$this->data中是有F12这个键值的,所以返回$this->data[$name],也就是Request对象,返回之后,$relation就是Request对象了

触发visible方法,但是Request类并没有这个方法,所以触发Request的__call方法

颠末array_unshift方法,$args数组被插入Request对象

然后执行call_user_func_array方法,$this->hook[$method]就是isAjax方法,跟进

调用param方法,$this->config['var_ajax']的值是F12

进入input方法

进入getData方法

接受我们的恶意传参的值,返回给$data,又是进入getFilter方法

也是给$filter赋值了

为system
往下走,进入filterValue方法

call_user_func执行命令

修复方式

官方直接把Request中的__call魔术方法给抹除了,因此链子后半段就断掉了,也就是说以后打比赛修复的化,直接删,不影响业务
Thinkphp5.0.x反序列化链

情况搭建

反序列化入口:
[code]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4