跟着小编一起动手操作吧!
ThinkPHP5远程代码执行漏洞
实验内容
ThinkPHP是一个免费开源的快速、简单、面向对象的轻量级PHP开发框架,是为了敏捷Web应用开发和简化企业应用开发而诞生。
ThinkPHP 5.0版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化。
ThinkPHP官方2018年12月9日发布修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞。
受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。
原理
这个漏洞是由于框架对控制器名没有进行足够的检测而导致在没有开启强制路由的情况下可能的getshell。因此漏洞的触发在路由调度时。
Thinkphp中是由函数pathinfo()来获取路由的,因此我们可以搜索关键词pathinfo
,来定位函数。
该路由函数中$this->config['var_pathinfo']
是配置文件的默认值,其初始化代码如下,值为’s’:
当请求报文包含$_GET['s']
,就取其值作为pathinfo,并返回pathinfo给调用函数。
分析发现pathinfo函数被library/think/Request.php
中的path函数调用:
显然,这里$this->path
源自pathinfo,因此可以被攻击者控制。继续分析该变量的传递,在library/think/App.php
中被引用: