thinkphp5 漏洞原理分析合集

本文深入探讨了ThinkPHP5的多个安全漏洞,包括5.0.x和5.1.x版本的路由过滤不严谨导致的RCE,以及__construct变量覆盖触发的RCE。同时,还讲解了5.0.x版本的数据库信息泄露问题。通过分析漏洞原理并提供payload示例,揭示了这些漏洞可能导致的安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

thinkphp5 rce原理分析

文末附赠相关综合利用工具

文章中主要介绍以下4种漏洞的原理分析过程:

5.0.X 路由过滤不严谨rce
5.1.X 路由过滤不严谨rce
__construct 变量覆盖导致RCE

5.0.X 数据库信息泄露

1. 5.0.x 路由过滤不严谨导致rce

1.1 原理分析

设置兼容模式(pathinfo)路由解析时,没有对”\“进行过滤,导致可以指定任意模块控制器和方法,例如:

1.
http://127.0.0.1/tp5.0/public/index.php?s=index/think/app/invokefunction
模块:index
控制器:think
方法:app
参数:invokefunction

正常解析会出错,因为没有think中没有app方法。


2.
http://127.0.0.1/tp5.0/public/index.php?s=index/think\app/invokefunction
模块:index
控制器:think\app
方法:invokefunction

加上"\"后就会将think\app解析成为一个整体,就是think下的app文件。

首先进入入口文件public下的index.php中:

进入start.php中,先加载base.php,再执行app.php中的run方法。

跟进run方法,前面为初始化的一些东西

到这开始进入路由解析,使用的routeCheck方法。

跟进routeCheck方法,先调用Request.php中的path方法,

跟进path方法,调用pathinfo方法,来判断pathinfo(是否为兼容模式)。

跟进pathinfo方法,Config::get(‘var_pathinfo’)查看是否配置了var_pathinfo参数,如果配置了为兼容模式,并提取出默认参数s的值,最后传到app.php中的$path。

下面$config[‘url_route_must’]为查看是否开启了强制路由,如果开启解析’\’时就会失败,就不会产生rce。

进入parseUrlPath方法中,该方法将路由拆分为模块、控制器、方法。这里面并没有过滤’\’。

返回将返回得值赋值给$path,如下图:

提取模块,提取$path中的模块”index”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值