渗透技巧——导出 Firefox 浏览器中保存的密码

发布于 2024-11-07 07:52:16 字数 7842 浏览 19 评论 0

0x00 前言

在之前的文章 《渗透技巧——导出 Chrome 浏览器中保存的密码》 介绍了导出 Chrome 浏览器密码的原理和利用方法,本文将要对导出 Firefox 浏览器密码的原理和利用方法进行介绍,分析利用思路。

0x01 简介

本文将要介绍以下内容:

  • 密码保存方式
  • 原理介绍
  • 常用的导出工具
  • 利用思路

0x02 密码保存方式

正常用户在访问网站时,可选择使用 Firefox 浏览器保存登录的用户密码,用于下次登录的时候 Firefox 自动填写登录密码

可以通过选择 Logins and Passwords 进行查看,如下图

Alt text

包括以下信息:

  • Website address
  • Username
  • Password
  • Created
  • Last modified
  • Last used

所有记录保存在同一个文件中,具体位置为: %APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\

注:xxxxxxxx 为 8 位随机字母和数字的组合

不同版本的 Firefox 保存记录的文件名称不同,具体区别如下:

  • Version 大于等于 32.0,保存记录的文件为 logins.json
  • Version 大于等于 3.5,小于 32.0,保存记录的文件为 signons.sqlite

更详细的文件说明可参考:http://kb.mozillazine.org/Profile_folder_-_Firefox

不同版本 Firefox 的下载地址:http://ftp.mozilla.org/pub/firefox/releases/

定位 logins.json 文件的位置可通过 cmd 命令实现,内容如下:

dir %APPDATA%\Mozilla\Firefox\Profiles\*logins.json /s /b

查看 logins.json 文件的内容,如下图

Alt text

其中 encryptedUsernameencryptedPassword 是加密的内容,解密需要获得密钥文件(key 和 iv) 并作 3DES-CBC 解密

不同版本的 Firefox 密钥文件的位置不同,具体区别如下:

  • Version 小于 58.0.2,密钥文件为 key3.db
  • Version 大于等于 58.0.2,密钥文件为 key4.db

注:key3.db 和 key4.db 的版本区别来源于 https://github.com/lclevy/firepwd/blob/master/firepwd.py

我在我的测试系统(Win7x64) 下,安装 64 位 Firefox,测试结果有所不同,具体如下:

  • 如果 Firefox 的版本低于 58.0,密钥文件为 key3.db
  • 如果 Firefox 为更高的版本,密钥文件为 key4.db

默认情况下,当前用户的权限可以查看 Firefox 浏览器中保存的所有密码,为了提高安全性,Firefox 浏览器支持为保存的密码添加额外的保护:设置 Master Password

具体位置如下图

Alt text

添加 Master Password 后,查看保存的密码需要额外输入 Master Password

解密流程:

  1. 读取密钥文件(key4.db 或 key3.db),获得 key 和 iv
  2. 读取记录文件(logins.json 或 signons.sqlite) 的内容
  3. 如果未设置 Master Password,使用 key 和 iv 对记录文件中的加密内容进行 3DES-CBC 解密 如果设置 Master Password,还需要获得明文形式的 Master Password,才能进行解密

0x03 导出工具

1.WebBrowserPassView.exe

下载地址:https://www.nirsoft.net/utils/web_browser_password.html

注:这个版本不支持命令行操作

命令行版本需要在另一地址下载:https://www.nirsoft.net/password_recovery_tools.html

命令行下的使用方法:

WebBrowserPassView.exe /LoadPasswordsFirefox 1 /shtml "c:\test\passwords.html"

结果保存在 c:\test\passwords.html 中,内容如下图

Alt text

能获得完整的信息,包括以下类别:

  • Website address
  • Username
  • Password
  • Created
  • Last modified
  • Last used

不支持使用 Master Password 解密

2.firepwd.py

地址: https://github.com/lclevy/firepwd

需要安装依赖包:

pip install pyasn1
pip install pycrypto

能获得部分信息,包括以下类别:

  • Website address
  • Username
  • Password

命令示例:

firepwd.py -d C:\Users\a\AppData\Roaming\Mozilla\Firefox\Profiles\5a4gs6zh.default-release\

结果如下图

Alt text

支持使用 Master Password 解密

注:我在自己的测试环境下,firepwd.py 只支持 key3.db 的 Master Passwor 解密,key4.db 的 Master Passwor 解密存在 bug

命令示例:使用测试文件 mozilla_db(key3.db),Master Password 为 MISC* ,命令如下:

python firepwd.py -p 'MISC*' -d mozilla_db/

结果正常,如下图

Alt text

我的测试环境(key4.db),Master Password 为 12345678 ,命令如下:

firepwd.py -d C:\Users\a\AppData\Roaming\Mozilla\Firefox\Profiles\5a4gs6zh.default-release\ -p "12345678"

解密存在 bug,提示口令失败,如下图

Alt text

3.Lazagne

地址:https://github.com/AlessandroZ/LaZagne/

导出 Firefox 浏览器的代码来自 https://github.com/lclevy/firepwd

结果同上,如下图

Alt text

4.firefox_decrypt.py

地址: https://github.com/unode/firefox_decrypt

使用 NSS(Network Security Services) 进行解密,支持 key3.db 和 key4.db 的 Master Password 解密

能获得部分信息,包括以下类别:

  • Website address
  • Username
  • Password

测试结果如下图

Alt text

在 64 位系统下,Python 和 Firefox 的版本需要保持一致(同为 32 位或者同为 64 位),否则会提示 ERROR - Problems opening 'nss3.dll' required for password decryption

注:在下一篇文章《通过 Network Security Services 导出 Firefox 浏览器中保存的密码》将要详细介绍通过 NSS 解密的细节

5.Firefox 浏览器

通过导出配置文件的方式实现

需要获得记录文件(logins.json 或 signons.sqlite) 和密钥文件(key4.db 或 key3.db),保存在本地的文件夹 C:\test\data1

使用-profile 参数启动 Firefox:

firefox.exe -profile C:\test\data1

输入正确的 Master Password,成功获得 Firefox 浏览器保存的信息

0x04 利用思路

如果 Firefox 设置了 Master Password,使用以上工具尝试导出密码时,结果会显示为 0 条结果,所以需要先读取记录文件确认是否存在记录

可以通过查询注册表的方式获得 Firefox 的版本,这里可以参考之前开源的代码: https://github.com/3gstudent/ListInstalledPrograms/blob/master/ListInstalledPrograms.ps1

不同版本的 Firefox 对应的记录文件不同,具体区别如下:

  • Version 大于等于 32.0,保存记录的文件为 logins.json
  • Version 大于等于 3.5,小于 32.0,保存记录的文件为 signons.sqlite

定位 logins.json 文件的命令如下:

dir %APPDATA%\Mozilla\Firefox\Profiles\*logins.json /s /b

定位 signons.sqlite 文件的命令如下:

dir %APPDATA%\Mozilla\Firefox\Profiles\*signons.sqlite /s /b

如果存在记录,接下来就可以使用工具尝试导出

在离线导出时需要注意以下问题:

1.未设置 Master Password

只需要获得记录文件(logins.json 或 signons.sqlite) 和密钥文件(key4.db 或 key3.db)

使用 firepwd.py 或者 Firefox 浏览器导入配置文件即可

2.设置 Master Password

(1) 只获得记录文件(logins.json 或 signons.sqlite) 和密钥文件(key4.db 或 key3.db)

本地使用 Firefox 浏览器导入配置文件,输入 Master Password

(2) 需要获得完整的配置文件

需要包括以下文件:

  • %APPDATA%\Mozilla\Firefox\profiles.ini
  • %APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\中的文件

使用 firefox_decrypt.py,命令示例:

firefox_decrypt.py C:\test\data1

0x05 小结

本文介绍了导出 Firefox 浏览器密码的原理和利用方法,分析了使用 Master Password 解密时需要注意的细节,对于普通用户来说,为了增加密码的安全性,建议设置 Master Password。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

无所谓啦

暂无简介

文章
评论
24 人气
更多

推荐作者

陈静维

文章 0 评论 0

谢绝鈎搭

文章 0 评论 0

时光清浅

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文