0x01 背景知识
wdigest
是一套身份认证协议,主要用于windows server 2003
,由于wdigest会将用户的密码存储在内存中,因此被诸如mimikatz
等工具进行恶意利用。
0x02 获取加密密码
该模块中定义了名为PasswdSet
的变量,由代码可知,需要搜索的文件为wdigest.dll
根据字节特征,发现0x483bd974
对应l_LogSessionList,这是一个链表,链表末尾所指向的结构体中,存储了username/domain/password,其位置在wdigest.dll
的LogSessHandlerPasswdSet
函数中。但是里面的password是加密的,因此需要密钥进行解密。
0x03 获取解密密钥
在mimikatz中,解密的逻辑使用了pLsaUnprotectMemory
所指向的函数
其实际指向kuhl_m_sekurlsa_nt6_LsaEncryptMemory
函数
可以看到,分为AES
和DES
解密两种情况,而hKey
的获取,在kuhl_m_sekurlsa_nt6_acquireKeys
中,这里面则依然是根据特征进行内存搜索
此处搜索的文件(加载在内存中)不再是wdigest.dll
,而是lsasrv.dll
,根据mimikatz给出的特征进行搜索,可以看到对应的代码如下
剩下的事情就比较简单了,根据对应的位置,将key转换成结构体就行