1.小梁的域控机器被黑客攻击了,请你找出一些蛛丝马迹。 攻击者通过AD CS提权至域管理员,在攻击过程中,攻击者使用有问题的证书模版注册了一张证书,该证书的证书模版名、证书序列号是什么?(格式为模版名-序列号,如CertTemplate-2f000000064287f6f5d6ff4a91000000000006)’、

Windows系统中,CertOCM.log是Active Directory Certificate Services(AD CS)安装与配置过程中生成的设置日志文件,主要用于记录证书服务角色安装的详细步骤成功失败信息,以及相关错误代码,帮助管理员在部署或排错时了解内部执行流程。

挂载后直接找I:\C___NONAME [NTFS]\[root]\Windows\certocm.log

image-20260208131645514

找到可疑证书名称

image-20260208131916286

去挂载的目录下搜索

image-20260208132423331

发现一个在I:\C___NONAME [NTFS]\[root]\Windows\System32\certsrv\CertEnroll

一个在I:\C___NONAME [NTFS]\[root]\Windows\System32\CertLog

在部署Active Directory Certificate Services(AD CS)时,系统会在%SystemRoot%System32下生成两个关键目录:

CertLog:存放CA的证书数据库事务日志文件,用于记录所有对数据库的写操作;

CertEnroll(位于certsrvCertEnroll):存放CA自动发布的证书(.crt)和撤销列表(.crl)文件,以及在Web注册或自动注册过程中生成的证书请求和响应。

CertLog目录主要内容

证书数据库文件(.edb)

默认会根据CA名称生成一个后缀为.edb的数据库文件,如Contoso Issuing CA 02.edb,该文件保存了已签发和已吊销证书、密钥存档以及证书请求等记录

事务日志文件(edb.log)

目录下包含一系列名称形如edb00001.log至edbFFFFF.log的固定大小(通常 1MB)日志文件,用于快速写入数据库变更;当写满后依次创建新文件,最多可支持约1TB的日志空间

日志检查点文件(edb.chk)

edb.chk文件记录了数据库恢复时的日志应用检查点,保障数据库和日志的一致性

certsrvCertEnroll目录主要内容

公共证书文件(.crt)

ADCS在签发或续订时,会将根CA与下级CA的证书导出为.crt文件,文件名常包含CA名称和时间戳,如corpCA1CA.crt

撤销列表文件(.crl)

包括完整CRL(.crl)和可选的增量CRL(DeltaCRL),文件名同样带有CA名称和发布时间,用于CDP(CRL Distribution Point)通道分发,以便客户端进行证书吊销检查

看到这里直接去看edb文件

在第二张表找到模板名

image-20260208133152202

倒数第二张表you又找到了一些
image-20260208133233913

对照的看发现多了MyTem

对照的看requestID=3

image-20260208133401192

得到结果

MyTem-5400000003eedab5344b2e5da5000000000003

2.小梁的域控机器被黑客攻击了,请你找出一些蛛丝马迹。 攻击者在获取域管理员权限后,尝试上传木马文件,但是被杀毒软件查杀,上传的木马文件的绝对路径是什么?(如C:\Windows\cmd.exe) 题目附件同DC-Forensics-1

Windows系统中,\Windows\System32\winevt\Logs是Windows事件日志服务的主目录,主要用于管理事件日志的存储和配置,而其中最核心的子目录是Logs,用于存放所有实际的日志文件。
Logs目录中包含大量以**.evtx**为扩展名的文件,这些文件采用专有的二进制格式存储事件记录,每个文件对应事件查看器(Event Viewer)中的一个日志通道,如 Application.evtx、System.evtx、Security.evtx 等。

找到defender相关日志 用妙妙小工具瞅一眼

image-20260208134004608

image-20260208134631388

image-20260208134658713

再来看一下1117

image-20260208134725801

3.小梁的域控机器被黑客攻击了,请你找出一些蛛丝马迹。 攻击者从机器中提取出了用户的连接其他机器的Windows企业凭据,凭据的连接IP、用户名、密码是什么?(格式为IP-用户名-密码,如127.0.0.1-sam-123456) 题目附件同DC-Forensics-1

在任何Windows机器(包括域控制器)上,通过“凭据管理器”保存的RDP凭据本质上都是以DPAPI加密“Blob”文件形式。

默认写入本地用户配置文件下的%LOCALAPPDATA%MicrosoftCredentials文件夹;

而%APPDATA%RoamingMicrosoftCredentials仅在启用了凭据漫游(Crede

ntial Roaming)功能时,才会将这些加密Blob同步到域中,以支持跨机器访问。

DPAPI(Data Protection API)是Windows提供的一个简单密码学应用程序接口,用于对任意数据进行对称加密,尤其常用于保护非对称私钥等敏感信息。它内置于Windows 2000及更高版本操作系统中,无需开发者自行设计密钥生成和存储方案,即可调用系统 API 完成加密任务

Blob是“Binary Large Object”或“Basic Large Object”的缩写,用于描述在数据库或文件系统中以二进制方式存储的大型、不易直接解析的数据单元。Blob(Binary/Large Object)是一个通用概念,用于表示“体积大、结构不定的二进制数据块”。

I:\C___NONAME [NTFS]\[root]\Users\john\AppData\Roaming\Microsoft\Credentials

image-20260208140305784

由于找到的14396336784B72E4294497641A22A484这个Blob文件是使用DPAPI 进行对称加密的,要去找到使用的主密钥(Master Key)加密时使用的对称加解密密钥 key值,才能解密Blob文件,得到明文形式的凭据信息。

主密钥(Master Key)的信息以GUID的形式存储在Blob文件中

使用工具对Blob文件进行分析

可以用impacket(https://github.com/fortra/impacket)和mimikatz(https://github.com/gentilkiwi/mimikatz/)

这里使用mimikatz查看该Blob文件的主密钥(master key)的GUID

1
dpapi::cred /in:14396336784B72E4294497641A22A484

image-20260208140641686

找到GUID61e93ed3-5ca2-4e98-a27b-b8a09fcf618d

在Windows环境下,DPAPI加密文件使用的主密钥一般位于%APPDATA%MicrosoftProtectSIDMasterKeyGUID或系统目录中,文件名即为GUID

I:\C___NONAME [NTFS]\[root]\Users\john\AppData\Roaming\Microsoft\Protect\S-1-5-21-1507239155-486581747-1996177333-1000下找到同名主密钥文件

image-20260208140902548

通过命令尝试解密指定用户的DPAPI主密钥(Master Key)文件,输出解密后的会话密钥等信息,以便后续解密由该主密钥加密的DPAPI数据

1
dpapi::masterkey /in:61e93ed3-5ca2-4e98-a27b-b8a09fcf618d

image-20260208141035229

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mimikatz # dpapi::masterkey /in:61e93ed3-5ca2-4e98-a27b-b8a09fcf618d
**MASTERKEYS**
dwVersion : 00000002 - 2
szGuid : {61e93ed3-5ca2-4e98-a27b-b8a09fcf618d}
dwFlags : 00000000 - 0
dwMasterKeyLen : 00000088 - 136
dwBackupKeyLen : 00000068 - 104
dwCredHistLen : 00000000 - 0
dwDomainKeyLen : 00000174 - 372
[masterkey]
**MASTERKEY**
dwVersion : 00000002 - 2
salt : 7e1072fe30262799dc756fb7109366f2
rounds : 00004650 - 18000
algHash : 00008009 - 32777 (CALG_HMAC)
algCrypt : 00006603 - 26115 (CALG_3DES)
pbKey : bc75fd0486dc274587d605da3923641dedce3ca5639358b2f620c4330068b753aca0ee6aab3b5db219f045bf82eb03d4bf09179504bd0e3487de134b195ebb863381230970bbc5206c74f6301c19e7714eb21f34c72fa2f80e256a164a03411cd022ae5db2efb619

[backupkey]
**MASTERKEY**
dwVersion : 00000002 - 2
salt : 43d5fff1971d0bae2c58631d4a356e41
rounds : 00004650 - 18000
algHash : 00008009 - 32777 (CALG_HMAC)
algCrypt : 00006603 - 26115 (CALG_3DES)
pbKey : 2407de9a211d52a0e7273b5a5ad9a29daaccb61d2875a8a6c2c354bca57215fbb46686c9985f4dbd4550c0abbb91734ba1020db070fda515a14a7ea7519ea6596de0cfa8513253ad

[domainkey]
**DOMAINKEY**
dwVersion : 00000002 - 2
dwSecretLen : 00000100 - 256
dwAccesscheckLen : 00000058 - 88
guidMasterKey : {439f5cbe-3a71-45e5-9db9-00df588d9386}
pbSecret : d3d77abb0ca1c8f68bd2f51e9b495b14988ea88aa8ff42bbbcbf115e176d58e121851554a2ad6f90f76a2badae164ac1e627911b8e5097641b1c4c445f144e11ddcd0ec30115d8a756406587e1dece3cf0d9529680cae044575bdcf52f8f8a3a9ef675d4ba50a4a546368000f44c0b32b4b575a63849b21f74510d7ba4b3aff71cc58bb57e10ed62a8d2e3cd5179554b5ecd1e906db52375148258bb79f7194619bf3d49784051d34db31a22190988ef36c3bfcda3eab83f9f47b91be6d8cc0e46c1adc4671d6748aa0330c33ea7e1bf82f235c4efe602f881290a17ffbd85a3d5496d9a3d58e13c9fe705dbf96eb4392ddb66d7bee90092f7f73371ecb4a415
pbAccesscheck : 0a2e0818970d7e065b552659999fcdab93bf183bc48b6915666866c5432d3b4bdd590cb4cad890a254588f7a17f67431d3ef9fb076dd361841a9f6907d3b56bc3798db396009d10db3c79fa5ef02bb7c7418220e481d1dc9

但是在结果中并没有给出主密钥中加密使用的对称加解密密钥 key

使用域用户(Domain User)解密DPAPI的MasterKey文件时,需要依赖域控制器(DC)上的备份密钥(Domain Backup Key),而在本地用户(Local User)场景中则无需如此

域环境下,DPAPI(Data Protection API)为每个用户生成的MasterKey文件,除了使用用户密码派生的密钥进行加密外,还会使用“域备份密钥”(DPAPI Domain Backup Key)进行二次加密并存储,以应对密码重置或漫游场景;而本地用户的MasterKey文件仅依赖本地密码派生密钥进行加解密,不涉及集中式恢复机制。

Windows DPAPI在域环境中为每个用户生成的主密钥(Master Key)包含两部分,一是用户密码派生密钥,用于对主密钥进行正常的加解密,二是域级备份密钥,用于用户密码丢失时来对主密钥进行加解密

那么对于攻击者而言,用户密码肯定是不知道的,那么就要去想办法得到域级备份密钥对主密钥进行解密,然后才能使用主密钥解密RDP凭据文件获得凭据信息。

域级备份密钥公私钥对存储在Active Directory的ntds.dit(WindowsNTDS)数据库中,而私钥本身又被一个称为BootKey(SysKey)的对称密钥加密。

那么要想得到域级备份密钥,先要得到BootKey对称密钥,然后解密ntds.dit得到域级备份密钥私钥,然后使用这个私钥去解密主密钥(Master Key),得到对称加解密密钥key,最后使用这个key解密RDP凭据文件获得凭据信息。

BootKey来源于域控制器的SYSTEM注册表配置单元,通过导出DC的SAM和SYSTEM hive,并使用工具secretsdump.py提取BootKey

SAM(Security Account Manager)存储本地账户的凭据哈希,位于C:WindowsSystem32configSAM,用于本地登录验证

SYSTEM包含系统配置和秘密,用于保护其他hive(包括 SAM)的BootKey,位 C:WindowsSystem32configSYSTEM

第一步:获取BootKey

这里由于mimikatz 不能在仅有 SAM + SYSTEM 离线文件的情况下,直接替代 secretsdump.py 来解析 BootKey 并解密 SAM
它只适合在线、有权限的系统,而 impacket 更适合

所以这里使用impacket

首先把SAM和SYSTEM复制下来

image-20260208142138337

脚本在impacket-0.13.0/impacket/examples

1
secretsdump.py -sam SAM -system SYSTEM LOCAL

image-20260208142344889

得到bootKey0x8044866ff95b2378568f795d988d1d3e

1
2
3
4
5
6
7
8
9
10
11
12
┌──(root㉿kali)-[~/…/impacket-0.13.0/impacket-0.13.0/impacket/examples]
└─# secretsdump.py -sam SAM -system SYSTEM LOCAL
/usr/local/bin/secretsdump.py:4: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
__import__('pkg_resources').run_script('impacket==0.13.0', 'secretsdump.py')
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies

[*] Target system bootKey: 0x8044866ff95b2378568f795d988d1d3e
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:6ebb6fd790e36d56422326bbc53107cc:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Cleaning up...

第二步:解密ntds.dit

然后使用bootKey解密ntds.dit得到域级备份密钥私钥

ntds.dit是Active Directory的Extensible Storage Engine(ESE)数据库文件,通常位于C:WindowsNTDS tds.dit,存放所有AD对象,包括域级DPAPI备份密钥对象

在WindowsNTDS下面找到ntds.dit文件

image-20260208142618273

接着用DSInternals工具的Get-ADDBBackupKey模块去使用bootKey解密ntds.dit得到域级备份密钥私钥文件(.pvk)

以管理员运行powershell,然后执行命令Install-Module DSInternals -Force来安装DSInternals,第一次安装会提示先安装nuget,输入Y即可,powershell版本低可以直接去下离线放到powershell文件夹下食用

1
Get-ADDBBackupKey -DBPath ./WindowsPowerShell/ntds.dit -BootKey 8044866ff95b2378568f795d988d1d3e | Save-DPAPIBlob -DirectoryPath ./WindowsPowerShell

image-20260208173739501

.pvk文件即为域级备份密钥私钥文件

复制到mimikatz.exe的文件夹中

1
dpapi::masterkey /in:61e93ed3-5ca2-4e98-a27b-b8a09fcf618d /pvk:ntds_capi_439f5cbe-3a71-45e5-9db9-00df588d9386.pvk

61e93ed3-5ca2-4e98-a27b-b8a09fcf618d是前面的master key

ntds_capi_439f5cbe-3a71-45e5-9db9-00df588d9386.pvk是刚才解得得私钥文件

解密主密钥master key得到对称加解密密钥 key

75690187db3d7b10dbad020d97ee3557178b86d34736f60fed190de957366d803c7c46a563bfa08f345a70f7b77578f821c2cc38f5b182c1cfeb7a6b84834125

image-20260208174153320

这个对称加解密密钥key已经加载到内存中了,会自动对匹配的凭证文件进行解密

第三步:解密RDP凭证得到明文信息用户名、密码以及ip

再次运行最初的命令

1
dpapi::cred /in:14396336784B72E4294497641A22A484

image-20260208174916183

1
172.16.6.25-indiana-Xss89cwsb!@#

4.小梁的域控机器被黑客攻击了,请你找出一些蛛丝马迹。 攻击者创建了一个新用户组和一个新用户,并把这个用户加入了新用户组和域管理员组中,新用户组名、新用户的用户名、新用户的密码是什么?(用户组名和用户名均小写,格式为用户组名-用户名-密码,如admins-sam-123456) 题目附件同DC-Forensics-1

image-20260208175607745

看到这里将James移到用户组maintainer

image-20260208185646619

下面找新用户James的密码

windows系统中,ntds.dit存储了域中所有用户和计算机对象的详细信息,其中包括经过加密的密码哈希,ntds.dit是 Active Directory 域控制器上的数据库文件。

SYSTEM 注册表文件则包含了用于加密和解密这些哈希的系统密钥

获取这两个文件后,就可以使用Impacket 的 secretsdump.py提取出域用户的用户名和对应的密码哈希值,然后使用john爆破哈希值得到明文密码

I:\C___NONAME [NTFS]\[root]\Windows\System32\config下找到SYSTEM

I:\C___NONAME [NTFS]\[root]\Windows\NTDS下找到ntds.dit

执行命令

1
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

image-20260208190100243

直接拿网站解了,hashcat直接拿rockyou爆也可以

image-20260208190258553

1
maintainer-James-3011liverpool!