thinkphp5调用shell脚本_【ThinkPHP5】远程代码执行

本文详细分析了ThinkPHP5的一个远程代码执行漏洞,该漏洞源于框架对控制器名的检测不足,可能导致getshell。文章介绍了漏洞原理,给出了实验步骤,包括利用Payload写入文件、使用中国菜刀连接木马、进行提权操作,最后总结了Linux提权的常见方式。
摘要由CSDN通过智能技术生成

47b213d7e2e856db2526afe3755f0e68.png

跟着小编一起动手操作吧!

ThinkPHP5远程代码执行漏洞

实验内容

ThinkPHP是一个免费开源的快速、简单、面向对象的轻量级PHP开发框架,是为了敏捷Web应用开发和简化企业应用开发而诞生。

ThinkPHP 5.0版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化。

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

受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。

原理

这个漏洞是由于框架对控制器名没有进行足够的检测而导致在没有开启强制路由的情况下可能的getshell。因此漏洞的触发在路由调度时。

Thinkphp中是由函数pathinfo()来获取路由的,因此我们可以搜索关键词pathinfo,来定位函数。

8ca0ba212c68299dd0e9ff2f0e26f583.png

759450fdd54c2915e6005dc3afc7c10a.png

该路由函数中$this->config['var_pathinfo']是配置文件的默认值,其初始化代码如下,值为’s’:

fa6ca08b3b64bd10b5f316529674ebbc.png

27ecbce290cc3960627def75211f306d.png

3af465a8fc65d4a0710157c6fbe8d085.png

当请求报文包含$_GET['s'],就取其值作为pathinfo,并返回pathinfo给调用函数。

分析发现pathinfo函数被library/think/Request.php中的path函数调用:

6443886aeca3d8f4372d1620db002091.png

显然,这里$this->path源自pathinfo,因此可以被攻击者控制。继续分析该变量的传递,在library/think/App.php中被引用:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值