mimikatz wdigest功能分析与调试

admin 2022年6月30日02:02:50mimikatz wdigest功能分析与调试已关闭评论259 views字数 1907阅读6分21秒阅读模式

mimikatz wdigest功能分析与调试

前言

lsass.exe 不能直接使用进程附加调试,所以要先进入内核态,再切换到用户态进行调试。

实验步骤

1、进入内核态
2、!process 0 0 lsass.exe 查找lsass进程的地址
3、.process /i /r /p fffffa8005671b00 切换到lsass进程

mimikatz wdigest功能分析与调试
4、lm 查看查看模块及模块的符号加载情况,是否有wdigest,lsasrv。(没有可以使用.reload /user 重新加载)

mimikatz wdigest功能分析与调试

mimikatz wdigest功能分析与调试

5、lssrv!h3DesKey可以找到key的地址

mimikatz wdigest功能分析与调试

6、mimikatz中找到key的结构为

```
win7
typedef struct _KIWI_BCRYPT_HANDLE_KEY {
ULONG size;
ULONG tag;// 'UUUR'
PVOID hAlgorithm;
PKIWI_BCRYPT_KEY81 key;
PVOID unk0;
} KIWI_BCRYPT_HANDLE_KEY, *PKIWI_BCRYPT_HANDLE_KEY;

typedef struct _KIWI_BCRYPT_KEY {
ULONG size;
ULONG tag;// 'MSSK'
ULONG type;
ULONG unk0;
ULONG unk1;
ULONG bits;
KIWI_HARD_KEY hardkey;
} KIWI_BCRYPT_KEY, *PKIWI_BCRYPT_KEY;

typedef struct _KIWI_HARD_KEY {
ULONG cbSecret;
BYTE data[60]; // etc...
} KIWI_HARD_KEY, *PKIWI_HARD_KEY;
```

7、根据数据结构可以构造
db poi(poi(lsasrv!h3DesKey)+0x10)+0x18,找到3des加密的key
由图知,长度为0x18,key为43 e5 c3 f8-20 44 26 31 e8 ae de 67 b3 96 a5 98 ac b1 5c 68-3c 15 87 8f

mimikatz wdigest功能分析与调试

同理,AES key
db poi(poi(lsasrv!hAesKey)+0x10)+0x18

mimikatz wdigest功能分析与调试
用户信息存储在l_LogSessList指针。

mimikatz结构
typedef struct _KIWI_MSV1_0_LIST_52 {
struct _KIWI_MSV1_0_LIST_52 *Flink;
struct _KIWI_MSV1_0_LIST_52 *Blink;
LUID LocallyUniqueIdentifier;
LSA_UNICODE_STRING UserName;
LSA_UNICODE_STRING Domaine;
PVOID unk0;
PVOID unk1;
PSID pSid;
ULONG LogonType;
ULONG Session;
LARGE_INTEGER LogonTime; // autoalign x86
LSA_UNICODE_STRING LogonServer;
PKIWI_MSV1_0_CREDENTIALS Credentials;
ULONG unk19;
PVOID unk20;
PVOID unk21;
ULONG unk22;
PVOID CredentialManager;
} KIWI_MSV1_0_LIST_52, *PKIWI_MSV1_0_LIST_52;

可以得出
用户名:0x30
机器名:0x40
密码:0x50

mimikatz wdigest功能分析与调试

mimikatz wdigest功能分析与调试

mimikatz wdigest功能分析与调试

源码分析

加密的密码提供的缓冲区的长度可以被 8 整除,则使用 AES。如果失败,则使用 3Des。
上面已经从调试的角度获取到内存中的key和密码。下面分析mimikatz怎么获取到3deskey,aeskey,加密的密码的位置。
由于mimikatz是通过签名获取到地址的,关注以下这两个变量。

BYTE PTRN_WNO8_LsaInitializeProtectedMemory_KEY[]= {0x83, 0x64, 0x24, 0x30, 0x00, 0x44, 0x8b, 0x4c, 0x24, 0x48, 0x48, 0x8b, 0x0d};
BYTE PTRN_WIN6_PasswdSet[] = { 0x48, 0x3b, 0xd9, 0x74 };

mimikatz wdigest功能分析与调试

PTRN_WIN6_PasswdSet的位置正好在l_LogSessList下方,l_LogSessList是存储加密密码的链表。
PTRN_WNO8_LsaInitializeProtectedMemory_KEY位置的上方是3deskey,下方是aeskey,对应的偏移即可得到地址。

mimikatz wdigest功能分析与调试

mimikatz wdigest功能分析与调试
后面这样解密即可。

mimikatz wdigest功能分析与调试

参考

Exploring Mimikatz - Part 1 - WDigest-https://blog.xpnsec.com/exploring-mimikatz-part-1/

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月30日02:02:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   mimikatz wdigest功能分析与调试https://cn-sec.com/archives/1148885.html