记一次众测找源码到RCE
字数 1300 2025-08-20 18:18:40
从源码泄露到RCE的渗透测试实战教学
前言
本教学文档基于一次真实的众测项目渗透过程,展示了如何从发现源码泄露到最终实现远程代码执行(RCE)的完整攻击链。目标系统是一个多端入口系统(PC、APP、测试后台),采用现代化技术栈构建。
技术栈分析
- 前端框架: React (使用webpack打包)
- 认证授权: JWT Token
- 后端框架: SpringBoot + Spring MVC + MyBatis
- 文件存储: 某云OSS
- 部署方式: Docker容器化部署(微服务架构)
渗透思路转变
- 识别第三方系统: 通过分析JS文件发现非目标域名的引用,确认系统由第三方公司开发
- 信息收集: 针对第三方公司进行深入信息收集
- GitHub搜索
"target.com"发现运维自动化脚本 - 脚本中包含内网IP信息、配置信息(包括accesskey)
- 发现使用第三方docker镜像服务存储镜像
- GitHub搜索
关键攻击步骤
1. 获取Docker镜像
- 通过泄露的yaml配置获取镜像命名规则
- 使用获取的账号密码登录第三方docker镜像服务
- 通过命名碰撞拉取最新镜像:
docker pull [镜像名] - 启动容器并提取源码:
docker cp [容器ID]:/path/to/src ./local/path
2. 源码审计发现漏洞
Fastjson RCE漏洞
- 发现项目中使用了存在漏洞的Fastjson版本
- 定位Fastjson使用点:
// 示例代码 JSON.parseObject(input, Object.class, Feature.SupportNonPublicField); - DNS探测验证漏洞:
# 使用工具验证 java -jar fastjson_rce_tool.jar http://target.com/vuln-endpoint - 成功获取root权限
JWT弱密钥问题
- 源码审计发现JWT签名密钥仅为6字符
- 密钥与系统命名相关(如公司名缩写+数字)
- 使用弱密钥伪造超级管理员token
XXE漏洞
- 发现未禁用外部实体引用的XML解析点
- 可导致敏感文件读取或SSRF
3. 其他发现
- 微服务配置信息泄露
- 容器编排文件中的敏感信息
- 内部API端点暴露
防御建议
-
源码保护:
- 避免将源码和配置文件提交到公开仓库
- 使用.gitignore排除敏感文件
- 定期检查GitHub等平台是否有信息泄露
-
Docker安全:
- 使用私有镜像仓库
- 实施严格的访问控制
- 定期轮换凭证
-
Fastjson安全:
- 升级到最新安全版本
- 禁用危险特性:
ParserConfig.getGlobalInstance().setSafeMode(true); - 使用白名单控制反序列化类
-
JWT安全:
- 使用足够强度的密钥(推荐32字符以上)
- 定期轮换密钥
- 实现token吊销机制
-
XXE防护:
// 禁用外部实体 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
工具推荐
-
Fastjson RCE检测工具:
-
JWT破解工具:
- jwt-cracker
- jwt_tool
-
源码泄露监控:
- GitHound
- truffleHog
总结
本次渗透测试展示了从信息收集到RCE的完整链条,关键点在于:
- 通过JS分析识别第三方系统
- GitHub信息收集获取关键凭证
- Docker镜像泄露源码
- 源码审计发现多个高危漏洞
对于现代化系统渗透,除了传统黑盒测试外,针对开发链条和第三方组件的审计往往能发现更严重的漏洞。