ThinkPHP5.0.*版本代码执行漏洞

本文详细分析了ThinkPHP5.0.*版本的代码执行漏洞,从Request类的Method方法到App类的module方法,揭示了如何通过构造Payload触发代码执行。通过深入研究各个关键函数,如__construct、param、method、server、filter等,阐述了漏洞形成的原因及其在不同版本间的差异。最终,展示了如何利用路由规则和特定参数控制执行流程,从而引发代码执行。
摘要由CSDN通过智能技术生成


我们先看处理请求的Request类,在thinkphp/ library/think/Request.php。

Method方法来获取当前的请求类型。

isGet、isPOST、isPUT等方法都调用了method方法来做请求类型的判断。
而在默认情况下,是有表单伪装变量的

在默认情况下,该变量值为_method

在Method方法中,将表单伪装变量对该方法的变量进行覆盖,可以实现对该类的所有函数进行调用。

在Request类中,我们看一下__construct析构方法。

如果该类属性不存在,就会调用默认配置文件中的default_filter的值。

如果该类属性存在,就会对$option数组进行遍历,将该类属性赋值为$option数组中键对应的值 。

因此,我们可以构造一个Payload:s=ipconfig&_mehthod=__construct$method=&filter[]=system

这个Payload只适用于thinkphp5.0.10版本,为什么?我们来看看thinkphp5.0.23版本的改进。

ThinkPHP5.0.23版本代码执行漏洞
在5.0.23版本中,App类 在thinkphp/ library/think/App.php中,module方法新增设置了
filter属性值,初始化了filter属性值,也导致在5.0.10版本中被重新覆盖为配置文件中的默认值导致无法进行利用。

在返回到Request类中,Param方法也调用了method方法,它用于获取当前请求的参数,传入了默认值true。

再看看method

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值