【干货】浅析HackBrowserData原理以及免杀思路(红队工具之获取目标机器浏览器记录 密码 cookie)
前言声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者和本公众号无关。书接上回: 2023-11-5 22:40:2 Author: 渗透安全团队(查看原文) 阅读量:249 收藏

前言

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者和本公众号无关。

书接上回:上文讲到如何钓鱼

浅谈水坑攻击之结合xss平台钓鱼获取浏览器记录和微信数据 (qq.com)

并提到一个工具--HackBrowserData,限于上文篇幅,结尾留白并未介绍工具使用和原理,若只讲如何钓鱼使得目标机器上线,这个主题便可惜了。于是今日本篇浅浅分析一下HackBrowserData的代码和实现原理.

01. HackBrowserData使用                        

项目地址

https://github.com/moonD4rk/HackBrowserData

一款可全平台运行的浏览器数据导出解密工具。

支持的平台

Windows

浏览器密码Cookie书签历史记录
Google Chrome✅✅✅✅
Google Chrome Beta✅✅✅✅
Chromium✅✅✅✅
Firefox✅✅✅✅
Microsoft Edge✅✅✅✅
360 极速浏览器✅✅✅✅
QQ 浏览器✅✅✅✅
Brave 浏览器✅✅✅✅
Opera 浏览器✅✅✅✅
OperaGX 浏览器✅✅✅✅
Vivaldi 浏览器✅✅✅✅
IE 浏览器❌❌❌❌

MacOS

由于 MacOS 的安全性设置,基于 Chromium 内核浏览器解密时需要当前用户密码

浏览器密码Cookie书签历史记录
Google Chrome✅✅✅✅
Google Chrome Beta✅✅✅✅
Chromium✅✅✅✅
Firefox✅✅✅✅
Microsoft Edge✅✅✅✅
Brave 浏览器✅✅✅✅
Opera 浏览器✅✅✅✅
OperaGX 浏览器✅✅✅✅
Vivaldi 浏览器✅✅✅✅
Safari❌❌❌❌

Linux

浏览器密码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-cross

CC=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环境下原理,先说几个前置知识

浏览器数据在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

用户身份凭证

这里用到mimikatz工具

使用mimikatz的dpapi模块中的masterkey方法,指定目标用户master key file。在无凭证传入的情况下,仅仅只是解析了结构体。

DPAPI_SYSTEM

用lsadump::secrets命令获取DPAPI_SYSTEM。

读取到full或m/u的值

然后带入到system后面

Dump Lsass(在线获取)

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()

两个实现这里我们还是拿windwos下chromium举例

到关键了,看到了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/

★

付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


推荐阅读

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247511708&idx=1&sn=41db23851225a7b515e8053947a1972b&chksm=c1765333f601da25014a4247e1e6bbe2dbf853dd787a6a81a961c5a763174cdbe88f528a55f1&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh