书接上回:上文讲到如何钓鱼
浅谈水坑攻击之结合xss平台钓鱼获取浏览器记录和微信数据 (qq.com)
并提到一个工具--HackBrowserData,限于上文篇幅,结尾留白并未介绍工具使用和原理,若只讲如何钓鱼使得目标机器上线,这个主题便可惜了。于是今日本篇浅浅分析一下HackBrowserData的代码和实现原理.
01. HackBrowserData使用
项目地址
https://github.com/moonD4rk/HackBrowserData
一款可全平台运行的浏览器数据导出解密工具。
支持的平台
浏览器 | 密码 | Cookie | 书签 | 历史记录 |
---|---|---|---|---|
Google Chrome | ✅ | ✅ | ✅ | ✅ |
Google Chrome Beta | ✅ | ✅ | ✅ | ✅ |
Chromium | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
Microsoft Edge | ✅ | ✅ | ✅ | ✅ |
360 极速浏览器 | ✅ | ✅ | ✅ | ✅ |
QQ 浏览器 | ✅ | ✅ | ✅ | ✅ |
Brave 浏览器 | ✅ | ✅ | ✅ | ✅ |
Opera 浏览器 | ✅ | ✅ | ✅ | ✅ |
OperaGX 浏览器 | ✅ | ✅ | ✅ | ✅ |
Vivaldi 浏览器 | ✅ | ✅ | ✅ | ✅ |
IE 浏览器 | ❌ | ❌ | ❌ | ❌ |
由于 MacOS 的安全性设置,基于 Chromium 内核浏览器解密时需要当前用户密码
浏览器 | 密码 | Cookie | 书签 | 历史记录 |
---|---|---|---|---|
Google Chrome | ✅ | ✅ | ✅ | ✅ |
Google Chrome Beta | ✅ | ✅ | ✅ | ✅ |
Chromium | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
Microsoft Edge | ✅ | ✅ | ✅ | ✅ |
Brave 浏览器 | ✅ | ✅ | ✅ | ✅ |
Opera 浏览器 | ✅ | ✅ | ✅ | ✅ |
OperaGX 浏览器 | ✅ | ✅ | ✅ | ✅ |
Vivaldi 浏览器 | ✅ | ✅ | ✅ | ✅ |
Safari | ❌ | ❌ | ❌ | ❌ |
浏览器 | 密码 | Cookie | 书签 | 历史记录 |
---|---|---|---|---|
Google Chrome | ✅ | ✅ | ✅ | ✅ |
Google Chrome Beta | ✅ | ✅ | ✅ | ✅ |
Chromium | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
Microsoft Edge | ✅ | ✅ | ✅ | ✅ |
Brave 浏览器 | ✅ | ✅ | ✅ | ✅ |
Opera Browser | ✅ | ✅ | ✅ | ✅ |
Vivaldi Browser | ✅ | ✅ | ✅ | ✅ |
Chromium | ✅ | ✅ | ✅ | ✅ |
安装,windows版本
会报毒,解压前退出杀软
获取chrome数据
看看结果
厚🐎,必须厚🐎,个人隐私全暴露了
还有密码也是一览无余
linux安装
安装
$ git clone https://github.com/moonD4rk/HackBrowserData
$ cd HackBrowserData/cmd/hack-browser-data
$ CGO_ENABLED=1 go build
编译 需要安装目标操作系统的 gcc 库
brew install FiloSottile/musl-cross/musl-crossCC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ GOARCH=amd64 GOOS=linux CGO_ENABLED=1 go build -ldflags "-linkmode external -extldflags -static"
02. HackBrowserData原理
浏览器数据在windows里的存放地址
浏览器数据目录是homeDir +"/AppData/Local/Google/User Data/"
,用户的默认profile文件为Default
,如下图该目录下存储着浏览器的各种数据库文件。
这个文件夹会被隐藏,需要设置里修改为显示
其中主密钥文件位于数据目录下的Local State
文件中,password和cookie两个数据库被该密钥加密,history无需解密可明文读取
这些文件的文件头为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
用户身份凭证(或者历史用户身份凭证)
DPAPI_SYSTEM(DPAPI_SYSTEM作为Master Key
本地备份文件的密钥存放于LSA secret中,想要获取的话也就老办法,dump内存或者注册表即可)
Dump Lsass
用lsadump::secrets命令获取DPAPI_SYSTEM。
读取到full或m/u的值
然后带入到system后面
privilege::debug提升到debug权限。
sekurlsa::dpapi获取内存中的所有MasterKey。
如果读者还是不太明白,接下来演示一下
Google Chrome浏览器解密测试
dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data"
提示要aes密钥
dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data" /unprotect
至此,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
不敏感
加起来依然不敏感,免杀
在本地(攻击机)上的操作
第一步 获取到目标机器的数据文件和key
远程下载
第二步 在本地调用dpapi的CryptUnprotectData(解密函数),传入目标机器的key进行解密还原
得到目标机器上保存的cookie和网站登录信息
完美还原,完美绕过杀软
考虑到法律风险,最后的魔改成品不公开了,感兴趣的读者可以自己尝试一下
附一个微软对dpapi的官方文档
Dpapi.h 标头 - Win32 apps | Microsoft Learn
https://learn.microsoft.com/zh-cn/windows/win32/api/dpapi/
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读