一、简介
BloodHound是一款将域内信息可视化的单页的web应用程序,是一款在域内进行信息收集的免费工具;
bloodhound通过图与线的形式,将域内用户、计算机、组、会话、ACL以及域内所有的相关用户、组、计算机、登录信息、访问控制策略之间的关系呈现出来。
可供渗透测试人员快速的分析域内情况、拓扑图;
使用bloodhound可以快速、深入地了解活动目录中用户之间的关系,获取哪些用户具有管理员权限、哪些用户对所有的计算机都具有管理员权限、哪些用户是有效的用户组成员信息。
数据分析基于Neo4j数据库
BloodHound可以在域内导出相关信息,将采集的数据导入本地的neo4j数据库,并进行展示和分析。
neo4j是一款noSQL图形数据库,它将结构化数据存储在网络内而不是表中。bloodhound利用这种特性,直观的以节点空间的形式表达相关数据。
neo4j数据库同其他数据库一样,拥有自己的查询语言。
推荐Neo4j教程:https://www.w3cschool.cn/neo4j/
二、安装配置BloodHound
为了方便快捷地使用Neo4j的web管理界面,推荐使用Chrome或者火狐浏览器
0x01windows
1、安装java环境
neo4j运行需要java环境,因此需要配置java环境;
2、下载Neo4j
在neo4j官方网站下载最新版的neo4j数据库安装包:https://neo4j.com/
选则community server的windows版本:
但官网下载速度着实急死人,推荐个网盘下载:
3.5.5版本:https://pan.baidu.com/s/1hygHS6_W5rqoAc41V30sTQ 提取码:v5z4
3、启动neo4j服务
下载后,解压,进入到/bin目录中,然后打开cmd控制端,输入命令 neo4j.bat console
像上面这样表示启动服务成功,然后打开浏览器,访问url http://127.0.0.1:7474/browser ;
默认的用户名和密码都为:neo4j
之后会修改密码,为了方便起见改为123456
4、下载BloodHound
github:https://github.com/BloodHoundAD/BloodHound/releases/
选在windows 32或者64版本。
更多地址:
https://github.com/BloodHoundAD/BloodHound https://codeload.github.com/BloodHoundAD/BloodHound/zip/master
5、启动bloodhound
解压后,进入解压目录,找到BloodHound.exe双击,之后会弹出登录框,需要neo4j数据库的账号密码,账号为neo4j,密码为123456;
点击login即可登入到bloodhound主界面:
0x02 kali
kali安装配置BloodHound更简单,我就是用的kali来安装的bloodhound,因为主要还是windows上下载gloodhound时太慢。
首先得确保自己得kali系统是最新的:
apt-get update apt-get dist-upgrade
然后通过一条命令即可下载Neo4j及BloodHoun:
apt-get install bloodhound
之后直接运行命令:neo4j console 来启动neo4j数据库;
同样的进去更改密码为123456或其他;
打开新的一个终端,输入命令: bloodhound 即可启动bloodhound窗口。
三、BloodHound主界面讲解
1、界面左上角是菜单按钮和搜索栏。点开菜单按钮,有三个选项卡;
三个选项卡分别是:数据库信息、节点信息和查询;
在数据库信息下可以显示所分析域的用户数量、计算机数量、组数量、Sessions数量、ACLs数量、关系;
节点信息中显示了用户在图表中单击的节点的信息;
查询选项卡中显示了BloodHound预设置的查询请求和用户自己构建的查询请求。
2、右上角是设置区。第一个是刷新;第二个是导出图形功能,可将当前绘制的图形导出为JSON或PNG文件;
第三个是导入图形功能;第四个是上传数据功能,BloodHound会帮助我们分析并展示数据;
第五个是更改布局类型功能,用于在分层和强制定向图布局之间切换;第六个是设置功能,可以更改节点的折叠行为。
四、数据采集
0x01准备
BloodHound需要来自Active Directory(AD)环境的三条信息才能运行:
- 哪些用户登录了哪些机器
- 哪些用户拥有管理员权限
- 哪些用户和组属于哪些组
在大多数情况下,收集此信息不需要管理员权限,也不需要在远程系统上执行代码。
因为需要的这三条信息都依赖于powerview.ps1脚本的bloodhound,其分为两部分:
- 一是powershell采集器脚本SharpHound.ps1
- 二是可执行文件SharpHound.exe.
这两个采集器的下载地址为:
https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.ps1 https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.exe
这里主要介绍这两个采集器,其他的还有什么基于C、python的等
0x02 使用SharpHound.exe提取域内信息数据
下载好sharphound.exe后,将其上传到目标系统中,这里用cs来进行操作:
注意:cs连接的目标机需要是域用户登录(任何域用户均可)或者是system权限才能采集到有用的数据。
上传到C:ProgramData下面,然后在cs的beacon中执行命令:
shell C:ProgramDataSharpHound.exe -c all
执行后会自动进行信息采集,会在同beacon的当前目录下生成类似“20200227235955_BloodHound.zip”的压缩包或者单个的json文件;
0x03 导入数据
将所有生成的文件下载下来,然后复制到存在neo4j服务、bloodhound的计算机上(也就是我的kali),再将产生的压缩包和json文件使用bloodhound的上传功能逐个导入。
可以进行拖拽上传,可拖拽到bloodhound界面上除信息选项卡以外的任意位置。
文件上传后,即可查看内网信息。
五、查询分析信息数据
可以看到数据库中现在有5个用户、3台计算机、50个组、439条ACL、496个关系。
由于我是用的自己搭的由三台机子搭建的最简单的 域,因此数据不是很多。
进入查询模块,有12个常用的查询条件:
1、查找所有域管理员 2、寻找最短到达域管理员路径 3、寻找管理员登陆记录 4、存在Session记录最多的前十个用户 5、存在Session记录最多的前十个计算机 6、拥有最多本地管理权限的前十个用户 7、拥有最多的管理员登陆的前十个机器 8、具有外部域组成员的用户 9、具有外部域组成员的组 10、域信任地图 11、SPN用户的最短路径 12、SPN用户到域管理员的最短路径
0x01 查询所有域管理员
点击Find all Domain Admins选项,选择需要查询的域名,如图:
可以看出当前域只有1个具有管理员权限的用户。
按ctrl键可循环显示不同的节点标签。也可选中某个节点,在其图标上按住鼠标左键,将节点移动到其他位置。单击节点可看节点信息。
0x02 查找到达域管理员的最短路径
单击“Find Shortest Paths to Domain Admins”选项,bloodhound进行分析,将列出可以到达域管理员最短的路径:
我的环境就三台机子,并且我拿下的这台机子上就是域管理员在登录,因此就直接到达域管。
就用一下书上的图做演示吧:
用户组为从上到下的包含制度:两个组,上面的节点包含下面的。
一个人的节点图标:代表一个用户;
多个人的节点图标:代表用户组;
计算机图标:代表域内一台计算机;
MemberOf:表示组的成员
GenericAll:表示我对你有权限
ForceChangePassword: 分支用户表示我可以对你强制推送策略,可以直接更改你的用户密码;
AdminTo:表示我是你的本地管理员
HasSession:表示我可以拿到你的会话;
DCSync: 分支用户表示我可以对该域的域控进行DCSync同步
- 左上角为目标域管理员组,也就是拥有15个具有域管理员权限的用户,我们只需顺着路径得到这15个中的一个节点即可,因此他们是横向的核心目标,是这次路径查询的每跳路径的尽头;
- 左下角第一条线路,这三个用户属于第一个节点的组、第一节点组又在第二节点组的组内,第二节点组又对其上部的第三节点的用户具有权限,该用户又是上一台第四个节点的计算机的本地管理员,可以在这台计算机上拿到上面一个就是第五个节点用户的session会话,该用户属于DOMAIN ADMINS组。可以通过hash传递(PTH)的方法拿下域管理员和域控制器。在其中第三个节点的分支中的用户可以对处于第三节点的用户强制推送恶意策略,可以直接修改第三节点用户密码,进而再次PTH拿下第四节点,继续推进。
- 中间的组,第一个节点中的三个用户为域管理员委派服务账号,有权限可以对该域的域控制器进行DCsync同步,将第二节点的用户的HASH同步过来,第二节点用户属于DOMAIN ADMINS组,进而拿下域控制器。
- 最右边那组,第一节点的用户是第二节点计算机的本地管理员,在该计算机上可以获得第三节点的用户HASH,第三节点用户又属于第四节点的组,第四节点组是第五节点计算机的本地管理员组,在该计算机可以获取第五节点用户的HASH,该用户是DOMAIN ADMINS组用户,进而拿下域控制器。
0x03 查看指定用户与域关联的详细信息
单击某个用户节点,bloodhound将在节点信息选项卡中罗列出该节点的信息。可以查看该用户Name、DisPlayName、最后修改密码时间、最后登陆时间、该用户登陆在那台计算机存在Session,是否启动、属于那些组、拥有那些机器的本地管理员权限、对访问对象对控制权限等。
0x04 查看指定计算机与域的关系
单击任意计算机图标,可看到该计算机在域内的名称、系统版本、是否启用、是否允许无约束委托等信息。单击域控看看:
最后
总的来说bloodhound这款工具对于我们进行域内的信息收集、域内的大概拓扑都整理得非常好;但采集器sharphound在收集信息的时候会报毒,并且会在系统上留下很多日志,有利有弊吧,对于小点的域环境的话还不错。