点击蓝字关注我哦
1.前言
今天这篇文章就不说Windows 明文hash的获取,着重写一些常规运维软件的密码获取,例如navicat,vnc,xshell,xftp,WinSCP,SecureCRT,vcenter 等连接密码获取,毕竟在内网中,密码复用是很常见的人为安全问题,收集更多的密码,做一个nice的字典,然后跑一波,瞎猫总会碰上死耗子的。
实操
2.1 xshell
在实战中,xshell遇到的很多,大型运维现场,多半就有xshell的身影,虽然xshell有些可能直接就等进去,或者保存了密码的,可以直接点击登陆,但是还是得收集一波密码不是,xshell的保存的密码是用星号代替了的,所以在某一方面,也可以直接用星号查看器去获取登陆密码。
Xshell目前主要有Xshell5和Xshell6,xshell7 三个版本,session文件分别保存在如下位置
1.xshell 5:%userprofile%DocumentsNetSarangXshellSessions
2.xshell 6: %userprofile%DocumentsNetSarang Computer6XshellSessions
3.xshell7: C:UsersAnonymousDocumentsNetSarang Computer7XshellSessions
Xftp 一样的,只是把路径中xshell改成xftp就行。
2.1.1 Xshell加密步骤
根据会话文件的版本,密钥由不同的算法生成:
1.1 对于会话文件版本 < 5.1
Xshell 和 Xftp 都使用 MD5 算法来生成用于 RC4 密码的密钥,且Xshell 使用 16 字节长的 ASCII 字符串 MD5 摘要"!X@s#h$e%l^l&"作为 RC4 密码密钥,Xftp 使用 16 字节长的 ASCII 字符串的 MD5 摘要"!X@s#c$e%l^l&"作为 RC4 密码密钥。
1.2 对于会话文件版本 == 5.1 或 5.2
XShell 和 XFtp 都使用 SHA-256 算法来生成密钥,密钥是当前操作系统帐户的 SID 字符串的 32 字节长的 SHA-256 摘要。
1.3 对于会话文件版本 > 5.2
这种情况与前一种(版本 5.1 或 5.2)类似,密钥是当前操作系统帐户名称(区分大小写)和当前操作系统帐户的 SID 字符串组合的 SHA-256 摘要。例如,如果您当前的操作系统帐户的名称和 SID 是(注意是当前登陆用户哈) Administrator S-1-5-21-917267712-1342860078-1792151419-512 密钥是字符串的 32 字节长 SHA-256 摘要"AdministratorS-1-5-21-917267712-1342860078-1792151419-512"
1.4 对于用户设置了主密码的情况
密钥是用户设置的主密钥的 SHA-256 摘要。
2. 计算原始密码的 SHA-256 摘要
此步骤将仅针对会话文件版本 >= 5.1 执行,且这个 32 字节长的数据将被视为校验和并附加到加密的密码中。
3. 初始化密码
Xmanager 使用生成的密钥来初始化 RC4 密码。
4. 加密密码
Xmanager 使用初始化的 RC4 密码加密原始密码
5. 将校验和附加到加密密码
6. 将最终结果转换为 Base64 格式
github 方面工具:
https://github.com/HyperSine/how-does-Xmanager-encrypt-password
https://github.com/dzxs/Xdecrypt
实战中可以把sessions文件拷贝出来,然后whoami /user获取用户名和SID,然后解密。
如果没解密成功,先考虑版本问题,再考虑是否设置了userkey,再考虑是否使用其他登陆方式验证,比如公钥,或者根本就没有保存。
2.2 SecureCRT
在实战中,很多运维人员会将SSH的账号密码保存在SecureCRT上,当我们拿下这台主机后就可以同时获取到多台机器的权限,同时收集机器密码
注:如果SCRT启动的时候有启动密码,Config加密了,这个就无法破解了 利用方法有两种(现在版本都出到9.1了):
2.2.1 方法一解密:针对低版本(7.x及以下版本)
版本不同,保存的sessions 文件位置不同,默认安装的路径下,config配置文件目录为:
%APPDATA%VanDykeConfigSessions
将下载的ini文件拷贝到本地,利用脚本进行解密。
对于低版本,使用脚本:
https://raw.githubusercontent.com/Synacktiv/stuffz/master/VanDyke_SecureCRT_decrypt.py
2.2.2 方法二:针对高版本(例如8.x及以上)
reg query "HKEY_CURRENT_USERSoftwareMartin PrikrylWinSCP 2Sessions"
reg query "HKEY_CURRENT_USERSoftwareMartin PrikrylWinSCP 2Sessionsip"
2.工具解密:
https://github.com/anoopengineer/winscppasswd
winscppasswd.exe <主机> <用户名> < encrypted_password >
密码就解出来了
当然也可以,我们这时候可以设置一下存储路径,保存信息到文件,都不需要重启winscp就能获取到会话信息了。
把文件拷贝到本地,然后用解密工具:
https://bitbucket.org/knarf/winscppwd/downloads/winscppwd.exe
2.4 Navicat 保存的密码提取
Navicat 永远的神,这是实战最常见的一款数据库管理软件。提取过程:
1.从注册表中查询host/username/pwd
reg query HKEY_CURRENT_USERSoftwarePremiumSoftNavicatServers /s /v host
reg query HKEY_CURRENT_USERSoftwarePremiumSoftNavicatServers /s /v username
reg query HKEY_CURRENT_USERSoftwarePremiumSoftNavicatServers /s /v pwd
2.然后直接工具一把锁哈
https://github.com/HyperSine/how-does-navicat-encrypt-password
navicat也可以把连接记录导出为ncx文件
然后一把锁哈,在梭哈的过程中,编码有点问题,调一下就好了,突然发现作者这样好麻烦,不如直接写成一个文件,非要整两个文件,代码都是重复的,也可以写一个批量跑的。
因为受版本影响,自动 VNC 密码恢复工具时常不起作用,因为在不同版本下保存在计算机上的 DES 加密密码的位置也不一样。所以这里更推荐手工解密。
2.5.1 找到加密的 VNC 密码
大多数 VNC 加密密码保存在注册表中,而只有 UltraVNC 保存在 INI 文件中。
RealVNC
HKEY_LOCAL_MACHINESOFTWARERealVNCvncserver Value: Password
TightVNC
HKEY_CURRENT_USERSoftwareTightVNCServer Value: Password or PasswordViewOnly
TigerVNC
HKEY_LOCAL_USERSoftwareTigerVNCWinVNC4 Value: Password
UltraVNC
C:Program FilesUltraVNCultravnc.ini Value: passwd or passwd2
现在高版本的RealVNC也不会把密码保存在注册表了,最省事的就是直接把连接配置导出来,一样的,拿到加密的vnc密码。
然后拿出来解密
2.6 teamview 抓密码
在网上,之前的2018年的主要是通过去内存找特征字符,适用于12版本,但是我测了现在最新版的不行了,会找不到。
用了另一个工具,只能抓到当前的teamview的id 及密码,因为现在是在连接之后,才会舒服密码验证。
其他的就不想说了,什么浏览器凭据获取。。。。。。
推荐一个工具网站:
https://www.nirsoft.net/password_recovery_tools.html
2.7.1 导出Firefox浏览器保存的密码
在线的的工具:
WebBrowserPassView.exe:
https://www.nirsoft.net/utils/web_browser_password.html
解密流程:
1.读取密钥文件(key4.db或key3.db),获得key和iv
2.读取记录文件(logins.json或signons.sqlite)的内容
3.如果未设置Master Password(支持为保存的密码添加额外的保护),使用key和iv对记录文件中的加密内容进行3DES-CBC解密,如果设置Master Password,还需要获得明文形式的Master Password,才能进行解密
2.7.1.1 最重要的两个文件:
火狐浏览器记录都保存在同一个文件中,文件位置为:%APPDATA%MozillaFirefoxProfilesxxxxxxxx.default(注:xxxxxxxx为8位随机字母和数字的组合)
不同版本的Firefox保存记录的文件名称不同,具体区别如下:
1.Version大于等于32.0,保存记录的文件为logins.json
2.Version大于等于3.5,小于32.0,保存记录的文件为signons.sqlite
定位logins.json或signons.sqlite文件的位置可通过cmd命令实现,内容如下:
dir %APPDATA%MozillaFirefoxProfiles*logins.json /s /b
dir %APPDATA%MozillaFirefoxProfiles*signons.sqlite /s /b
其中encryptedUsername和encryptedPassword是加密的内容。
解密需要获得密钥文件(key和iv)并使用3DES-CBC解密:
1.如果Firefox的版本低于58.0,密钥文件为key3.db
2.如果Firefox为更高的版本,密钥文件为key4.db
2.7.1.2 实战情况下的对策:
未设置Master Password情况下
只需要获得记录文件(logins.json或signons.sqlite)和密钥文件(key4.db或key3.db),使用firepwd.py或者Firefox浏览器导入配置文件即可。
只需要加个-p参数 指定主密钥就OK了 python3 firepwd.py -p "abc123" -d mozilla_db
但是在实战中,多半是没有设置主密钥的,如果设置了,多半凉凉。
2.7.2 导出chrome 浏览器的密码和记录
导出chrom的在线的,直接用https://github.com/moonD4rk/HackBrowserData 就可以导出记录,cookie,密码。。。
离线的话,又得分情况来说了
2.7.2.1 版本不同解密方法不同:
1.当chrome<80.x版本时,使用dpapi进行解密就行(没有以v10或v11开头的ascil)
此种解密方法需要离线,需要mastkey。
此方法参考:
https://cloud.tencent.com/developer/news/120840
2.当chrome>=80.x时使用的是AES-256-GCM的AEAD对称加密(可以直接看logon data 中加密字段的ascil 是否为v10和v11开头)
2.7.2.1.1 解密流程(有v10,v11开头的):
1.首先我们得清楚,在chrome中的敏感文件存储的位置
chrome的cookie存储的位置:
C:UsersusernameAppDataLocalGoogleChromeUser DataDefaultCookies
chrome的浏览器历史文件History存储的位置是
C:UsersusernameAppDataLocalGoogleChromeUser DataDefaultHistory 记录
chrome的登陆账号密码文件Login Data文件存储位置是
C:UsersusernameAppDataLocalGoogleChromeUser DataDefaultLogin Data
chrome中存储加密key的位置是
C:UsersusernameAppDataLocalGoogleChromeUser DataLocal State
其中Cookies、History、Login Data是SQLite3文件。
os_crypt的encrypted_key的值中保存着需要用到的解密密钥。
使用网上的一个脚本解密
替换encryted_txt和encoded_key解密就行。
建议直接HackBrowserData,yyds
或者使用IE PassView 但是这个工具只支持低版本的IE(低版本的ie 卡得要死,应该没人用吧)
这个网站也有很多小工具
https://www.nirsoft.net/password_recovery_tools.html
yyds
END
看完记得点赞,关注哟,爱您!
扫码领hacker资料,常用工具,以及各种福利
本文始发于微信公众号(Gamma实验室):红队技巧-内网下的凭据解密
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论