ThinkPHP命令如何执行漏洞

发布时间:2021-10-11 10:59:29 作者:柒染
来源:亿速云 阅读:175

本篇文章给大家分享的是有关ThinkPHP命令如何执行漏洞,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

ThinkPHP 官方 2018 年 12 月 9 日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的 getshell 漏洞
受影响版本:5.x < 5.1.31, <= 5.0.23

漏洞分析

thinkphp 实验版本:5.0.20
首先,先看看一下官方给出的补丁信息:
ThinkPHP命令如何执行漏洞
大概猜测到这个漏洞是由于框架没有对控制名进行足够的检测导致的。
poc:
http://localhost:8888/index.php?s=index/think\App/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

当index.php加载thinkphp框架引导文件后,会执行应用,即执行think\App::run()方法,\表示将App作为类名来调用,payload正是利用此特性来调用任意类的方法。
ThinkPHP命令如何执行漏洞
根进run()中的路由检测方法routeCheck()
ThinkPHP命令如何执行漏洞
会获取pathinfo信息,
ThinkPHP命令如何执行漏洞
由于配置文件中'var_pathinfo'的值默认为's',所以该pathinfo()函数会获取GET请求中's'对应的值,在这边也就是
index/think\app/invokefunction
之后,Route::parseUrl()方法调用parseUrlPath(),只是通过‘/’做分割,并未做过滤。
ThinkPHP命令如何执行漏洞
获取当前的调度信息后,会执行调用分发函数exec()
ThinkPHP命令如何执行漏洞
这边传入exec的调度信息参数$dispatch为:
ThinkPHP命令如何执行漏洞

根进module方法,即执行模块
ThinkPHP命令如何执行漏洞
该模块获取控制器名为:”think\app“,该处并未对控制器名做过滤。
根进Loader::controller方法,该函数主要作用是实例化控制器,调用getModuleAndClass解析出$module和$class的值分别为“index”和“think\app”,再调用App::invokeClass($class)对$class进行实例化,回到App::module()方法,获得实例化放射类“think\App”后,执行反射类的方法
ThinkPHP命令如何执行漏洞
跟进invokeMethod,可以看到该方法将运行call_user_func_array函数,
ThinkPHP命令如何执行漏洞
返回system('whoami')的结果
ThinkPHP命令如何执行漏洞

以上就是ThinkPHP命令如何执行漏洞,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. ThinkPHP远程命令执行漏洞原理及复现
  2. 【漏洞复现】ThinkPHP5 5.x 远程命令执行(getshell)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

thinkphp5

上一篇:java中ASM框架有什么用

下一篇:linux中perf怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》