前言书接上回:上文讲到如何钓鱼 浅谈水坑攻击之结合xss平台钓鱼获取浏览器记录和微信数据 (qq.com) 并提到一个工具--HackBrowserData,限于上文篇幅,结尾留白并未介绍工具使用和原理,若只讲如何钓鱼使得目标机器上线,这个主题便可惜了。于是今日本篇浅浅分析一下HackBrowserData的代码和实现原理. 01. HackBrowserData使用 项目地址 https://github.com/moonD4rk/HackBrowserData 一款可全平台运行的浏览器数据导出解密工具。 支持的平台 Windows
MacOS由于 MacOS 的安全性设置,基于 Chromium 内核浏览器解密时需要当前用户密码
Linux
安装,windows版本 会报毒,解压前退出杀软 获取chrome数据 看看结果 厚🐎,必须厚🐎,个人隐私全暴露了 还有密码也是一览无余 linux安装 安装 02. HackBrowserData原理 浏览器数据在windows里的存放地址 浏览器数据目录是homeDir + 这个文件夹会被隐藏,需要设置里修改为显示 其中主密钥文件位于数据目录下的 这些文件的文件头为SQL,故chromium内核的浏览器是使用sqlite对数据进行存储的, 如何解密获取密码和cookie 这里要介绍一下DPAPI, 什么是DPAPI?贴一个网上的解释 可能不好理解,麋鹿来解释一下DPAPI 何为DPAPI 就是windows的一个特殊数据保护接口,包含了加密函数(CryptProtectData) 与解密函数 (CryptUnprotectData) 以用作敏感信息的加密解密。 其用作范围包括且不限于: IE、Chrome的登录表单自动完成 Powershell加密函数 Outlook, Windows Mail, Windows Mail, 等邮箱客户端的用户密码。 FTP管理账户密码 共享资源文件夹的访问密码 无线网络帐户密钥和密码 远程桌面身份凭证 EFS EAP/TLS 和 802.1x的身份凭证 Credential Manager中的数据 以及各种调用了CryptProtectData函数加密数据的第三方应用,如Skype, Windows Rights Management Services, Windows Media, MSN messenger, Google Talk等。 etc Dpapi采用的加密类型为对称加密,所以只要找到了密钥就可以解密了,而存放密钥的文件为Master Key Files,位置为%APPDATA%/Microsoft/Protect/%SID% 例如我本机地址为 C:\Users\xxx\AppData\Roaming\Microsoft\Protect\S-1-5-21-1331992092-18619637-2946198525-1001 可以很直观的看到这个文件中的密钥实际上是随机64位字节码经过用户密码等信息的加密后的密文 但是Master Key Files中存储的不是直接的密钥,而是将Master Key进行加密所存放的内容 有点绕是吧,总结一下 Master Key和Master Key Files之间的关系其实就是, Master Key经过用户密码等信息加密后的内容才变成了Master Key Files中存储的内容 这里要强调一下,DPAPI是用户层面的加密解密,即只有在目标机器上以对应用户的身份去调用该api时,才可以恢复对应的数据。 所以比如把数据文件压缩外带后在攻击机上还原是行不通的。 获取Master Key
用户身份凭证这里用到mimikatz工具使用mimikatz的dpapi模块中的masterkey方法,指定目标用户master key file。在无凭证传入的情况下,仅仅只是解析了结构体。DPAPI_SYSTEM用lsadump::secrets命令获取DPAPI_SYSTEM。 读取到full或m/u的值 然后带入到system后面 Dump Lsass(在线获取)
如果读者还是不太明白,接下来演示一下 Google Chrome浏览器解密测试 dpapi::chrome /in:'%localappdata%\Google\Chrome\User Data\Default\Login Data' 提示要aes密钥
至此,HackBrowserData的原理已经很清晰明了了--使用DPAPI获取Master Key去解密文件 现在开始看看HackBrowserData代码怎么实现的 03.解读HackBrowserData代码 为了让读者直观的看明白HackBrowserData的运行过程,麋鹿y'bian一边调试一边原理 设置参数 程序入口 cmd\hack-browser-data\main.go 这里接收到chrome参数 跟进browser.ListBrowser() 以windows举例,进入browser_windows.go 这里定义了windows下浏览器相关数据的路径 和上面原理里讲的一样,接着把该目录下的文件拿去解密 现在跟进main.go58行的BrowsingData() 于是到了browser/chromium/browser.go 在browser.go里调用了BrowsingData()到关键了,看到了GetMasterKey() 跟进GetMasterKey() 这里看到两个显眼的词DPAPI和masterKey,和原理完全对应 先看一下DPAPI的调用情况 还记得CryptUnprotectData是什么吗? 正是解密函数 ,来看官方文档 还记得前面麋鹿强调的解密只能在目标机器上用对应用户去解密 而且这里看到火狐和chromimu是一样实现的 ok,到这里为止,HackBrowserData核心代码分析完了,和上面所讲的原理一模一样 但本篇未完,为什么呢,因为麋鹿的初心并不是介绍一个工具,而是希望我和读者能有所进步 还记得我说过HackBrowserData会被杀软标记吗? 4. 那么,如何实现实现HackBrowserData免杀? 为什么HackBrowserData会被标记,杀软会报毒? 因为不管是文件层面还是行为特征都太过于明显 而HackBrowserData有哪些行为呢,惟读取文件与获得key耳 那么如果我们把这两个行为分开是什么结果? 读文件嘛很正常,百分比不会报毒,读的文件有俩类,一种书签历史类,一种密码cookie类,前后者的区别是是否加密,所以前者可以从目标机器打包回我们机器还原,操作一点也不敏感,不会报毒 密码cookie类文件需要api获得的key解密,这一步也可以在我们机器上用目标机器的key来解密 总结一下过程:压缩目标机器上面浏览器相关user data打包到我们机器,然后在目标机器用dpapi获取到key,把key保存下来也打包到我们的机器.现在在我们机器上面现在有了 A:目标机器的浏览器数据 B:目标机器上对应客户的key 接着在我们本地(我们的攻击机)调用CryptUnprotectData,用B去解密A 如果把整个过程分成如上俩步分开执行,那么我们改后的工具就不再存在被查杀的特征,就达到了行为层面的免杀 那会如果我们改后的程序这样操作 列个步骤 在目标机器上的操作 第一步 打包压缩所有数据文件 不敏感 第二步 调用dpapi获取并保存key 不敏感 加起来依然不敏感,免杀 在本地(攻击机)上的操作 远程下载 第二步 在本地调用dpapi的CryptUnprotectData(解密函数),传入目标机器的key进行解密还原 得到目标机器上保存的cookie和网站登录信息 完美还原,完美绕过杀软 考虑到法律风险,最后的魔改成品不公开了,感兴趣的读者可以自己尝试一下 附一个微软对dpapi的官方文档 Dpapi.h 标头 - Win32 apps | Microsoft Learn https://learn.microsoft.com/zh-cn/windows/win32/api/dpapi/ ★ 欢 迎 加 入 星 球 ! 代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员 进成员内部群 星球的最近主题和星球内部工具一些展示 加入安全交流群 关 注 有 礼 |
|