轉自:https://3gstudent.github.io/
- 密碼保存方式
- 原理介紹
- 常用的導出工具
- 利用思路
由於瀏覽器會記錄用戶保存的用戶名和密碼用於下次自動登錄。
包括以下信息:
- 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文件的內容,如下圖
其中encryptedUsername
和encryptedPassword
是加密的內容,解密需要獲得密鑰文件(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#L236
我在我的測試系統(Win7x64)下,安裝64位Firefox,測試結果有所不同,具體如下:
- 如果Firefox的版本低於58.0,密鑰文件為key3.db
- 如果Firefox為更高的版本,密鑰文件為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,才能進行解密
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
中,內容如下圖
能獲得完整的信息,包括以下類別:
- 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\
結果如下圖
支持使用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/
結果正常,如下圖
我的測試環境(key4.db),Master Password為12345678
,命令如下:
firepwd.py -d C:\Users\a\AppData\Roaming\Mozilla\Firefox\Profiles\5a4gs6zh.default-release\ -p "12345678"
解密存在bug,提示口令失敗,如下圖
3.Lazagne
地址:
https://github.com/AlessandroZ/LaZagne/
導出Firefox瀏覽器的代碼來自https://github.com/lclevy/firepwd
結果同上,如下圖
4.firefox_decrypt.py
地址:https://github.com/unode/firefox_decrypt
使用NSS(Network Security Services)進行解密,支持key3.db和key4.db的Master Password解密
能獲得部分信息,包括以下類別:
- Website address
- Username
- Password
測試結果如下圖
在64位系統下,Python和Firefox的版本需要保持一致(同為32位或者同為64位),否則會提示ERROR - Problems opening 'nss3.dll' required for password decryption
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
對於普通用戶來說,為了增加密碼的安全性,建議設置Master Password
大佬的另外兩篇文章:
滲透技巧——導出Chrome瀏覽器中保存的密碼
通過Network Security Services導出Firefox瀏覽器中保存的密碼