天天看点

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

2018年12月11日,exploit-db更新了一个thinkphp框架远程代码执行漏洞

由于框架对控制器名没有进行足够的检测导致在没有开启强制路由的情况下getshell

漏洞影响范围

Thinkphp 5.1.0 - 5.1.31

Thinkphp 5.0.5 - 5.0.23

安装 :

下载地址http://www.thinkphp.cn/donate/download/id/1125.html

下载完解压在/var/www/html/目录下即可

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

漏洞分析

/thinkphp/library/think/App.php 行数:120

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

我们可以看到通过self::routerCheck函数进行路由检测

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

我们可以看到又进入$request->path()函数

/thinkphp/library/think/Request.php 行数:416行

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

进入pathinfo()函数,继续追踪到384行

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

Config::get('var_pathinfo')是配置文件中的设置的参数,默认值为s,从GET中获取键值,然后赋值给routeCheck中的$path

我们再回到App.php 行数:606

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现

这里会进行路由检测,检查$check后会进入else分支导入路由配置,接着检测路由url调度结果为$result,如果调度失败且开启了强制路由$must,则报出路由无效,接着进入Route::parseUrl函数,根据$path(自定义url)解析操作

开始跟踪parseUrl函数

/thinkphp/library/think/Route.php 行数:1208

阐述php命令执行漏洞的原理,ThinkPHP远程命令执行漏洞原理及复现