记一次众测找源码到RCE
字数 1300 2025-08-20 18:18:40

从源码泄露到RCE的渗透测试实战教学

前言

本教学文档基于一次真实的众测项目渗透过程,展示了如何从发现源码泄露到最终实现远程代码执行(RCE)的完整攻击链。目标系统是一个多端入口系统(PC、APP、测试后台),采用现代化技术栈构建。

技术栈分析

  • 前端框架: React (使用webpack打包)
  • 认证授权: JWT Token
  • 后端框架: SpringBoot + Spring MVC + MyBatis
  • 文件存储: 某云OSS
  • 部署方式: Docker容器化部署(微服务架构)

渗透思路转变

  1. 识别第三方系统: 通过分析JS文件发现非目标域名的引用,确认系统由第三方公司开发
  2. 信息收集: 针对第三方公司进行深入信息收集
    • GitHub搜索 "target.com" 发现运维自动化脚本
    • 脚本中包含内网IP信息、配置信息(包括accesskey)
    • 发现使用第三方docker镜像服务存储镜像

关键攻击步骤

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端点暴露

防御建议

  1. 源码保护:

    • 避免将源码和配置文件提交到公开仓库
    • 使用.gitignore排除敏感文件
    • 定期检查GitHub等平台是否有信息泄露
  2. Docker安全:

    • 使用私有镜像仓库
    • 实施严格的访问控制
    • 定期轮换凭证
  3. Fastjson安全:

    • 升级到最新安全版本
    • 禁用危险特性: ParserConfig.getGlobalInstance().setSafeMode(true);
    • 使用白名单控制反序列化类
  4. JWT安全:

    • 使用足够强度的密钥(推荐32字符以上)
    • 定期轮换密钥
    • 实现token吊销机制
  5. 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);
    

工具推荐

  1. Fastjson RCE检测工具:

  2. JWT破解工具:

    • jwt-cracker
    • jwt_tool
  3. 源码泄露监控:

    • GitHound
    • truffleHog

总结

本次渗透测试展示了从信息收集到RCE的完整链条,关键点在于:

  1. 通过JS分析识别第三方系统
  2. GitHub信息收集获取关键凭证
  3. Docker镜像泄露源码
  4. 源码审计发现多个高危漏洞

对于现代化系统渗透,除了传统黑盒测试外,针对开发链条和第三方组件的审计往往能发现更严重的漏洞。

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