文章导读
大家好,我是苏承栈。今天我们来聊聊混合密码系统的设计,以及如何通过Network Security Services(NSS)来导出Firefox浏览器中保存的密码。这篇文章会深入浅出地讲解原理,并提供实战代码,让你对这一技术有更深刻的理解。
0x00 前言
在上一篇文章中,我们介绍了如何导出Firefox浏览器的密码。今天,我们将深入探讨背后的原理,并编写测试代码来验证Master Password,分享脚本编写的细节。
0x01 简介
本文将涵盖以下内容:
- Network Security Services简介。
- 通过Python调用Network Security Services导出Firefox浏览器密码。
- 开源python脚本。
- 爆破脚本的实现。
0x02 Network Security Services简介
Network Security Services(NSS)是一组旨在支持安全的客户端和服务器应用程序跨平台开发的库。Firefox浏览器使用NSS作为加密算法和安全网络协议的基础库,在凭据加解密上使用了PKCS#11标准。
0x03 通过Python调用Network Security Services导出Firefox浏览器的密码
以下是Windows系统下的解密流程:
- 加载Network Security Services需要的nss3.dll
- 调用NSS_Init()进行初始化
- 调用PK11_GetInternalKeySlot()来获得internal slot(用作验证Master Password)
- 调用PK11_CheckUserPassword()验证Master Password
- 读取logins.json获得加密数据
- 调用PK11SDR_Decrypt()进行解密
具体注意事项
- Python和Firefox的版本需要保持一致
- 64位系统下,需要同为32位或64位
- 将Firefox的安装路径加入到环境变量,便于调用
3. NSS初始化时需要三个文件
具体位置为:%APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\
- cert9.db
- key4.db
- logins.json
4. 读取logins.json获得加密的数据
encryptedUsername和encryptedPassword项为加密的数据,需要使用NSS进行解密。在解密前需要先进行base64解码,再调用PK11SDR_Decrypt()解密获得明文。
0x04 开源python脚本
我的测试代码已上传至GitHub,地址如下:
https://github.com/3gstudent/Homework-of-Python/blob/master/ExportFirefoxPassword.py
0x05 小结
本文介绍了通过Python调用Network Security Services导出Firefox浏览器密码的方法,分享脚本编写细节。
小结与拓展
本文深入讲解了混合密码系统的设计和通过Network Security Services导出Firefox浏览器密码的方法。如果你对这方面的技术感兴趣,可以关注极星编程网(www.jxgpc.com)了解更多内容。我是苏承栈,我们下期再见!
