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