ThinkPHP V5.0.5漏洞_【思路/技术】 ThinkPHP 5.0 * 远程代码执行漏洞简略分析(附测试工具)...

漏洞名称

ThinkPHP 5.0.*远程代码执行漏洞

影响范围

ThinkPHP 5.0.全版本

分析

跟着大佬的脚步笔者简单的分析了下。
Thinkphp处理请求的关键类为Request(thinkphp/library/think/Request.php)
其中成员函数method用来获取当前请求类型,其定义如下:a4164bd6751b63587bff2bfb48e33dd9.png
该函数主要在其他成员函数(例如isGet、isPost、isPut等)中被用来做请求类型判断da246e00b26e57bc3473d422363d6c6e.png
thinkphp支持配置“表单伪装变量”,默认情况下该变量值为_method557cad6df0814bfa073ff90115303970.png
因此在method()中,可以通过“表单伪装变量”进行变量覆盖实现对该类任意函数的调用,并且$_POST作为函数的参数传入e64e9d143fdf8273c880e0a4cd3ac6bd.png
Request类的构造函数定义如下7578661ef17ecfb114fbf4f2b49cfd31.png
构造函数中,主要对$option数组进行遍历,当$option的键名为该类属性时,则将该类同名的属性赋值为$options中该键的对应值。

因此可以构造请求如下,来实现对Request类属性值的覆盖,例如覆盖filter属性。filter属性保存了用于全局过滤的函数。
因此在thinkphp 5.0.10 中可以通过构造如下请求实现代码执行:ad44329bb3a85c3e171e575f8ec619e7.png
但是笔者测试了所有版本后发现一个问题bf36f9af5df13c97d35a70eb0173936c.png
那就是这个漏洞并不通杀
笔者后续对比了官方多个发布的5.0版本,大概总结出如下结论

版本名是否可被攻击攻击条件
5.0.0
5.0.1
5.0.2
5.0.3
5.0.4
5.0.5
5.0.6
5.0.7
5.0.8无需开启debug
5.0.9无需开启debug
5.0.10无需开启debug
5.0.11无需开启debug
5.0.12无需开启debug
5.0.13需开启debug
5.0.14需开启debug
5.0.15需开启debug
5.0.16需开启debug
5.0.17需开启debug
5.0.18需开启debug
5.0.19需开启debug
5.0.20
5.0.21需开启debug
5.0.22需开启debug
5.0.23需开启debug

之前看很多人复现时选的版本是5.0.13~5.0.19的,这些版本默认情况下config中的app_debug配置项为false,这也是为什么很多人用payload都无法复现

a27a89ee2a59d952b7752c7e23006209.pngfd006be8b7e746b9e1b71a11a66de4ee.png

总结

在版本低于5.0.13的版本中,破坏性还是很强的,因为无需开启debug模式即可造成代码执行829930be14009d973396e3ec34b42c0a.png93fe81972eacf499c50ec39427ac71a7.png
在版本高于5.0.20的版本中,破坏性还是一般的,需开启debug模式才可造成代码执行42407b3e7c854156d90d154544d82d70.png3189b0feab83611b424f91af37702ea4.png
关于为什么5.0.7及以下版本不能执行,笔者对比了thinkphp\library\think\Route.php,发现5.0.8相对于5.0.7在获取当前请求类型的路由规则处增加了一个三目运算符导致$rules数组被置空ae4f8b12ebd7598f87c27471ba7e1c24.png
这也解释了为什么5.0.7执行时会爆出如下错误706e2b96a1d8a5ddf297d366a4ab847b.png

附赠2个payload2c702b9d7c075863b1b4c9ac48d944c0.png

ThinkPHP 5.0测试工具的下载链接请在本公众号回复“TP获取。

免责声明:工具只能用于测试漏洞,禁止用于非法用途,否则一切后果自负。

作者:Sp4ce 来源:bbs.ichunqiu.com


30ac259e13beb4fd2407849f19e23782.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值