第十八届软件系统安全赛半决赛取证DC
1.小梁的域控机器被黑客攻击了,请你找出一些蛛丝马迹。 攻击者通过AD CS提权至域管理员,在攻击过程中,攻击者使用有问题的证书模版注册了一张证书,该证书的证书模版名、证书序列号是什么?(格式为模版名-序列号,如CertTemplate-2f000000064287f6f5d6ff4a91000000000006)’、
Windows系统中,CertOCM.log是Active Directory Certificate Services(AD CS)安装与配置过程中生成的设置日志文件,主要用于记录证书服务角色安装的详细步骤、成功或失败信息,以及相关错误代码,帮助管理员在部署或排错时了解内部执行流程。
挂载后直接找I:\C___NONAME [NTFS]\[root]\Windows\certocm.log

找到可疑证书名称

去挂载的目录下搜索

发现一个在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文件
在第二张表找到模板名

倒数第二张表you又找到了一些
对照的看发现多了MyTem
对照的看requestID=3


得到结果
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相关日志 用妙妙小工具瞅一眼



再来看一下1117

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

由于找到的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 |

找到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下找到同名主密钥文件

通过命令尝试解密指定用户的DPAPI主密钥(Master Key)文件,输出解密后的会话密钥等信息,以便后续解密由该主密钥加密的DPAPI数据
1 | dpapi::masterkey /in:61e93ed3-5ca2-4e98-a27b-b8a09fcf618d |

1 | mimikatz # dpapi::masterkey /in:61e93ed3-5ca2-4e98-a27b-b8a09fcf618d |
但是在结果中并没有给出主密钥中加密使用的对称加解密密钥 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复制下来

脚本在impacket-0.13.0/impacket/examples
1 | secretsdump.py -sam SAM -system SYSTEM LOCAL |

得到bootKey0x8044866ff95b2378568f795d988d1d3e
1 | ┌──(root㉿kali)-[~/…/impacket-0.13.0/impacket-0.13.0/impacket/examples] |
第二步:解密ntds.dit
然后使用bootKey解密ntds.dit得到域级备份密钥的私钥
ntds.dit是Active Directory的Extensible Storage Engine(ESE)数据库文件,通常位于C:WindowsNTDS tds.dit,存放所有AD对象,包括域级DPAPI备份密钥对象
在WindowsNTDS下面找到ntds.dit文件

接着用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 |

.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

这个对称加解密密钥key已经加载到内存中了,会自动对匹配的凭证文件进行解密
第三步:解密RDP凭证得到明文信息用户名、密码以及ip
再次运行最初的命令
1 | dpapi::cred /in:14396336784B72E4294497641A22A484 |

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

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

下面找新用户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 |

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

1 | maintainer-James-3011liverpool! |
