Thinkphp5.x全毛病复现分析

一给  金牌会员 | 2024-5-17 21:54:36 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

基础知识


命名空间和子命名空间

我们可以把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]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表