深入分析Mimikatz之sekurlsa::wdigest

0x01 背景知识

wdigest是一套身份认证协议,主要用于windows server 2003,由于wdigest会将用户的密码存储在内存中,因此被诸如mimikatz等工具进行恶意利用。

0x02 获取加密密码

该模块中定义了名为PasswdSet的变量,由代码可知,需要搜索的文件为wdigest.dll

根据字节特征,发现0x483bd974对应l_LogSessionList,这是一个链表,链表末尾所指向的结构体中,存储了username/domain/password,其位置在wdigest.dllLogSessHandlerPasswdSet函数中。但是里面的password是加密的,因此需要密钥进行解密。

0x03 获取解密密钥

在mimikatz中,解密的逻辑使用了pLsaUnprotectMemory所指向的函数

其实际指向kuhl_m_sekurlsa_nt6_LsaEncryptMemory函数

可以看到,分为AESDES解密两种情况,而hKey的获取,在kuhl_m_sekurlsa_nt6_acquireKeys中,这里面则依然是根据特征进行内存搜索

此处搜索的文件(加载在内存中)不再是wdigest.dll,而是lsasrv.dll,根据mimikatz给出的特征进行搜索,可以看到对应的代码如下

剩下的事情就比较简单了,根据对应的位置,将key转换成结构体就行