Thinkphp 5.x getshell漏洞分析

admin 2022年5月16日02:43:43代码审计评论15 views1617字阅读5分23秒阅读模式

0x00. 漏洞简介

近日,thinkphp官方发布了5.x版本一处安全更新,修复了路由中controller部分过滤不严从而导致getshell的安全漏洞。漏洞影响范围:<5.1.31 或5.0.x- 5.0.23。


0x01. 漏洞分析

本文以5.1.29版本进行漏洞跟进。关键代码thinkphplibrarythinkroutedispatchModule.php:84

Thinkphp 5.x getshell漏洞分析

此处实现了父类Dispatch的exec()抽象方法,对传入的控制器进行实例化,返回一个实例,并通过反射的方式调用其操作方法。

Thinkphp 5.x getshell漏洞分析

跟踪$this->controller变量,thinkphplibrarythinkroutedispatchModule.php:70

Thinkphp 5.x getshell漏洞分析

可以看到$controller变量的值在$result[1]不为空的条件下来自于$result数组。

并且此处对从路由中取出的控制器参数除了做小写转化没做任何过滤操作。继续跟进$result数组:

thinkphplibrarythinkroutedispatchModule.php:31

Thinkphp 5.x getshell漏洞分析

$result来自父类Dispatch的$this->dispatch属性,当$result为字符串的时候,利用‘/’切割为数组。跟踪$this->dispatch属性,来到thinkphplibrarythinkApp.php:604

Thinkphp 5.x getshell漏洞分析

其中的$path参数来自于URL中的pathinfo,thinkphplibrarythinkRequest.php:678

Thinkphp 5.x getshell漏洞分析

而默认config['var_pathinfo']为s,所以根据thinkphp的路由规则,应该这样构造url:

Thinkphp 5.x getshell漏洞分析

跟进$this->route->check()方法,tp5.1.29thinkphplibrarythinkRoute.php:877

Thinkphp 5.x getshell漏洞分析

此处非强制路由和域名路由,所以走默认路由解析,继续跟进UrlDispatch类,也就是url类:

Thinkphp 5.x getshell漏洞分析

thinkphplibrarythinkroutedispatchUrl.php:18

Thinkphp 5.x getshell漏洞分析

此处调用parseurl()函数对传入的$url进行解析,进一步跟进parseurl():

thinkphplibrarythinkroutedispatchUrl.php:37

Thinkphp 5.x getshell漏洞分析

parseurl()调用了parseUrlPath()进行url的解析,整个解析过程同样只是简单的利用‘/’进行分割,没有做任何过滤:

thinkphplibrarythinkroutedispatchUrl.php:947

Thinkphp 5.x getshell漏洞分析

最终将分割好的$path封装成路由返回:

Thinkphp 5.x getshell漏洞分析

接着将其作为属性传入Module类中并新建对象和初始化后,最后回到App类中继续执行:

Thinkphp 5.x getshell漏洞分析

接下来的调用栈如下:

Thinkphp 5.x getshell漏洞分析

也就回到开头的关键代码处。

 至此,整个流程分析完成,可以得出:moudle类中result属性来自于url中pathinfo,pathinfo用户可控,并且代码对其没有任何过滤操作,也就是说待实例化的$this->controller以及其调用$this->actionName用户完全可控。那么通过引入‘’,利用命名空间的特性,就可以实例化thinkphp中的任意一个类,并调用其任意方法,所以找到存在利用点的类及其方法就可以完成漏洞利用。


0x03.漏洞利用。

目前存在多个可以利用的类及其方法:

thinkrequest->input()

thinkrequest->cache()

thinkapp->invokefunction()

thinkcontainer->invokefunction()

这里用其中一个完成RCE的利用:

Thinkphp 5.x getshell漏洞分析

Xss的利用:

Thinkphp 5.x getshell漏洞分析


0x04.修复建议

官方已提供相应补丁,及时升级到官方最新版本即可。


0x05.参考链接

https://blog.thinkphp.cn/869075


超实用的优质公众号推荐

Thinkphp 5.x getshell漏洞分析


原文始发于微信公众号(哆啦安全):Thinkphp 5.x getshell漏洞分析

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月16日02:43:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Thinkphp 5.x getshell漏洞分析 http://cn-sec.com/archives/1009522.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: