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

发布于 2024-11-07 07:52:16 字数 7842 浏览 0 评论 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技术交流群

发布评论

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

关于作者

无所谓啦

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

月光色

文章 0 评论 0

咆哮

文章 0 评论 0

痞味浪人

文章 0 评论 0

宁涵

文章 0 评论 0

军弟

文章 0 评论 0

临走之时

文章 0 评论 0

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