一、简介

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:\ProgramData\SharpHound.exe -c all

执行后会自动进行信息采集,会在同beacon的当前目录下生成类似“20200227235955_BloodHound.zip”的压缩包或者单个的json文件;

0x03 导入数据

将所有生成的文件下载下来,然后复制到存在neo4j服务、bloodhound的计算机上(也就是我的kali),再将产生的压缩包和json文件使用bloodhound的上传功能逐个导入。

可以进行拖拽上传,可拖拽到bloodhound界面上除信息选项卡以外的任意位置。

文件上传后,即可查看内网信息。

五、查询分析信息数据

可以看到数据库中现在有5个用户、3台计算机、50个组、439条ACL、496个关系。

由于我是用的自己搭的由三台机子搭建的最简单的 域,因此数据不是很多。

进入查询模块,有12个常用的查询条件:

、查找所有域管理员

、寻找最短到达域管理员路径

、寻找管理员登陆记录

、存在Session记录最多的前十个用户

、存在Session记录最多的前十个计算机

、拥有最多本地管理权限的前十个用户

、拥有最多的管理员登陆的前十个机器

、具有外部域组成员的用户

、具有外部域组成员的组

、域信任地图

、SPN用户的最短路径

、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在收集信息的时候会报毒,并且会在系统上留下很多日志,有利有弊吧,对于小点的域环境的话还不错。

BloodHound可视化之域分析的更多相关文章

  1. ARCGIS如何进行可视域分析

    可视域分析在不同的领域有着广泛的应用,如火灾监控点的设定,观察哨所的设定等等.军事领域是可视域分析技术应用最广的领域.例如为了设计巡航导弹的航线,就必须对发射点到目标的地形进行分析,包括地形特征优劣分 ...

  2. 可视化数据包分析工具-CapAnalysis

    可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流量数据的工具,本文介绍又一款实用工具-CapAnalysis(可视化数据包分析工具),将比Xpli ...

  3. ArcGIS API for JavaScript 4.2学习笔记[28] 可视域分析【使用Geoprocessor类】

    想知道可视域分析是什么,就得知道可视域是什么 我们站在某个地方,原地不动转一圈能看到的所有事物就叫可视域.当然平地就没什么所谓的可视域. 如果在山区呢?可视范围就会被山体挡住了.这个分析对军事上有十分 ...

  4. 2.5 Cesium视域分析的实现

    Cesium 视域分析 祝愿周末没事,技术继续分享交流,群685834990

  5. NLP(十二)依存句法分析的可视化及图分析

      依存句法分析的效果虽然没有像分词.NER的效果来的好,但也有其使用价值,在日常的工作中,我们免不了要和其打交道.笔者这几天一直在想如何分析依存句法分析的结果,一个重要的方面便是其可视化和它的图分析 ...

  6. 基于flask的可视化动漫分析网站【python入门必学】

    课程设计项目名称:基于flask的可视化动漫分析网站,如果你在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数 ...

  7. G6:AntV 的图可视化与图分析

    导读 G6 是 AntV 旗下的一款专业级图可视化引擎,它在高定制能力的基础上,提供简单.易用的接口以及一系列设计优雅的图可视化解决方案,是阿里经济体图可视化与图分析的基础设施.今年 AntV 11. ...

  8. ArcGIS进行视域分析及地形图制作

     问题说明 开发商要在本区域建造观景亭,希望在观景亭上能看到优美的景色.根据提供的数据,完成以下要求. 一. 数据说明(见"题目3"文件夹) 1. DEM.tif:研究区域的数据高 ...

  9. 一文带你体验MRS HetuEngine如何实现跨源跨域分析

    摘要: HetuEngine作为MRS服务中交互式分析&多源统一SQL引擎,亲自全程体验其如何实现多数据源的跨源跨域分析能力. 本文分享自华为云社区<MRS HetuEngine体验跨源 ...

随机推荐

  1. 云原生 - Why is istio(二)

    出处:https://cizixs.com/2018/08/26/what-is-istio 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 前言 随着微服务架构的流行, ...

  2. SpringBoot缓存篇Ⅰ--- 缓存抽象

    缓存是每一个系统应该考虑的功能,它可以用来加速系统的访问,提升系统性能,例如要经常访问的高频热点数据,例如某一个商品网站的商品信息,商品信息存储在数据库中,若每次访问都要查询数据库的话,这样的操作耗时 ...

  3. CUDA学习(三)之使用GPU进行两个数组相加

    传入两个数组,在GPU中将两个数组对应索引位置相加 #include "cuda_runtime.h" #include "device_launch_parameter ...

  4. 【读书笔记】关于《精通C#(第6版)》与《C#5.0图解教程》中的一点矛盾的地方

    志铭-2020年2月8日 03:32:03 先说明,这是一个旧问题,很久很久以前大家就讨论了, 哈哈哈,而且先声明这是一个很无聊的问题,

  5. 1222: 计算x^1+x^2+x^3+……+x^n的值

    #include <stdio.h>int main(){ int x,n,i,j; long long sum,g;while(scanf("%d%d",&x ...

  6. jsp操作mysql样例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. @ComponentScan注解,basePackages参数通配符

    @ComponentScan(basePackages = "com.ofo.test")当basePackages的直使用通配符,使用**,不能使用*.引用:https://bl ...

  8. 全网最全小白搭建Hexo+Gitee/Coding

    全网最全小白搭建Hexo+Gitee/Coding 本站内容已全部转移到https://www.myyuns.ltd,具体请移步到www.myyuns.ltd查看

  9. java中list的sort()功能如何使用?如果倒序如何正序?

    list.sort()接收一个Comparable接口,其中compare方法是必须实现的,int compare(T o1, T o2);,它接受两个参数:o1,o2. o2表示list排序前的前值 ...

  10. vue 过渡 & 动画

    过渡 & 动画 过渡动画 用css先定义好动画效果 .a-enter-active, .a-leave-active { transition: all 1.5s; } .a-enter, . ...