从任意文件下载到getshell
字数 1267 2025-08-20 18:17:07
从任意文件下载到Getshell的渗透测试技术分析
漏洞发现与利用流程
1. 初始信息收集与漏洞发现
- 目标识别:发现一个无验证码保护的旧版Web页面,存在潜在安全风险
- 接口探测:使用URLfinder工具扫描获取后台接口
- 重点关注点:
- 响应内容较小的接口(可能包含敏感信息)
- 响应500错误的接口(可能通过报错反推请求)
2. 任意文件下载漏洞利用
- 漏洞特征:发现文件下载接口路径可自定义
- WAF绕过:通过HTTPS协议绕过WAF防护
- 经典测试:尝试
../../etc/passwd路径遍历 - 信息收集:
- 读取历史命令记录(
~/.bash_history) - 获取Web应用启动路径和日志路径
- 发现
lib.zip包含应用依赖
- 读取历史命令记录(
3. 源码获取与分析
- 获取源码方法:
- 尝试读取
/proc/self/cmdline和内存映射文件(失败) - 通过
restart.sh和start.sh脚本分析启动命令
- 尝试读取
- 源码分析工具:
- 使用JADX反编译JAR文件
- 搭建本地测试环境加载依赖
4. 权限绕过发现
- Burp插件检测:发现疑似权限绕过的接口
- 验证方法:通过路径规范化绕过(如
..;技巧)
5. JDBC注入漏洞利用
- 漏洞接口:发现数据库连接创建和验证的路由
- 漏洞特征:
- 存在
DBTypeEnum枚举,包含MySQL选项 - JDBC URL部分可控
- 存在
- 利用方法:
- 构造特殊数据库名触发反序列化:
midpl?&autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor# - 处理URL编码问题(
?和#的使用)
- 构造特殊数据库名触发反序列化:
6. Fastjson反序列化利用
- 发现低版本Fastjson:通过下载接口确认存在漏洞版本
- 漏洞触发点:找到调用
parseObject的接口 - 不出网利用:
- 使用MyBatis+Bcel组合利用链
- 借助Web-Chains工具生成利用代码
7. 文件上传尝试
- 文件服务分析:发现9002端口的文件操作服务
- 上传接口问题:标准拼接和
cpfile操作,但目标环境存在未知问题
关键工具与技术
- URLfinder:用于发现后台接口
- JADX:Java反编译工具
- Web-Chains:反序列化利用链生成工具
- GitHub地址:https://github.com/Java-Chains/web-chains
- TsojanScan:Burp插件,检测权限绕过
- 不出网利用技术:MyBatis+Bcel组合利用链
防御建议
-
输入验证:
- 严格限制文件下载路径
- 过滤路径遍历字符(
../)
-
组件安全:
- 及时升级Fastjson等易受攻击组件
- 限制JDBC连接参数
-
配置安全:
- 禁用不必要的Actuator端点
- 限制错误信息泄露
-
架构安全:
- 分离文件服务与Web服务
- 实施最小权限原则
经验总结
- 关注异常响应:小响应和500错误往往包含有价值信息
- 多角度验证:当一种方法失败时尝试其他途径(如不同协议、不同利用链)
- 工具组合使用:自动化工具与手动分析结合提高效率
- 环境差异注意:本地测试成功不代表目标环境可用,需考虑配置差异