前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 BloodHound 分析大型域内环境

使用 BloodHound 分析大型域内环境

作者头像
渗透攻击红队
发布2021-10-14 11:01:19
2.4K0
发布2021-10-14 11:01:19
举报
文章被收录于专栏:漏洞知识库漏洞知识库

大家好,这里是 渗透攻击红队 的第 74 篇文章,本公众号会记录一些红队攻击的案例,不定时更新!请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关!

BloodHound 是一款可视化图形分析域环境中的关系的工具,红队人员可以使用 BloodHound 识别高度复杂的攻击路径,蓝队可以使用 BloodHound 来识别和防御那些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入域环境中的权限关系。

在做内网域渗透的时候,若是我们是手动去挨个信息搜集,如果一个域内只有几十台域机器倒也应付的过来,若这个域是有上万,上百万的域机器的时候,我们手动去信息搜集自然是不行,只能依赖于机器帮我们自动化信息搜集,而 BloodHound 就能过帮我们梳理域内每一台主机的详细信息,一是方便了我们省去了手工搜集时间,二是能够用图形化的界面呈现出域内的各种复杂环境。

使用 BloodHound 分析大型域内环境


在不同的操作系统下安装 BloodHound

Kali Linux 安装 BloodHound

当前 Kali Linux 版本是 2021最新版本,在 Kali Linux 下安装 BloodHound 我们直接一条命令安装:

代码语言:javascript
复制
 apt-get install bloodhound

安装完成后运行图形化数据库 neo4j:

代码语言:javascript
复制
 neo4j start

发现报错了,报错信息是:

代码语言:javascript
复制
 ./bin/neo4j:行390: /usr/share/neo4j/logs/neo4j.log: 没有那个文件或目录

解决方法就是:创建/logs/ 目录 和 neo4j.log文件:

代码语言:javascript
复制
 mkdir /usr/share/neo4j/logs
 touch /usr/share/neo4j/logs/neo4j.log

然后再次运行图形化数据库 neo4j:

代码语言:javascript
复制
 neo4j start

这个时候就启动成功了,我们访问 http://127.0.0.1:7474/

代码语言:javascript
复制
 Host : bolt://127.0.0.1:7687
 User : neo4j
 Password : neo4j

第一次登陆成功会提示你需要更改一次密码,在这里我吧密码更改为:whoami

这个时候 neo4j 就成功安装了:

最后运行命令启动 bloodhound

代码语言:javascript
复制
 在终端输入:bloodhound
 
 url :bolt://localhost:7687
 user :neo4j
 pass :whoami

这个时候出现下面的界面则代表 bloodhound 启动成功:

Windows 安装 Bloodhound

在 Windows 下安装 Bloodhound 需要安装 Java 环境,因为 Neo4j 数据库需要 Java 支持,因此安装 BloodHound 需要先安装 Java。

建议下载 JDK 11 版本,不然 Neo4j 运行可能会报错,JDK 下载地址:https://www.oracle.com/java/technologies/javase-downloads.html :

下载之后,直接安装完设置环境变量后即可:

安装完 JDK 后 还需要去 下载Neo4j 最新版本,下载地址:https://neo4j.com/download-center/#community

之后解压下载文件,打开 bin 目录,执行命令 neo4j.bat console

之后打开浏览器访问 http://localhost:7474 登陆后台:

输入以下信息连接到数据库说明安装就完成了:

代码语言:javascript
复制
 URL : neo4j://localhost:7687
 user :neo4j
 pass :neo4j

第一次登陆成功需要更改一下 neo4j 的密码,我更改为:whoami

然后出现这个页面说明 neo4j 已经搭建完毕:

最后去 Github 上下载 BloodHound :https://github.com/BloodHoundAD/BloodHound

下载完后解压出来直接运行:BloodHound.exe

代码语言:javascript
复制
 url : bolt://localhost:7687
 user : neo4j
 pass : whoami (就是刚刚更改的密码)

这个时候出现这个页面则代表安装完成:

Mac OS 安装 BloodHound

从 https://neo4j.com/download-center/#community下载 macOS 版本的 neo4j Community Edition Server (不要从 brew 安装

解压 neo4j文件夹后在 macOS 终端中,将目录更改为 neo4j 文件夹,切换到 bin 目录,然后输入:

代码语言:javascript
复制
 ./neo4j console

然后浏览器访问:http://localhost:7474

代码语言:javascript
复制
url : bolt://localhost:7687
user : neo4j
pass : neo4j

第一次登陆成功需要更改一下密码:whoami

出现这个界面则代表安装成功:

最后去下载最新版本的 BloodHound GUI :https://github.com/BloodHoundAD/BloodHound/releases

解压文件夹并双击 BloodHound 输入刚刚设置的账户密码登陆:

代码语言:javascript
复制
 user : neo4j
 pass : whoami

以上就是各个操作系统安装 BloodHound 的详细步骤了,接下来就是 BloodHound 的使用教程。

使用 BloodHound 分析大型域内环境

当我们在本地安装完成 BloodHound 后,需要进行数据的采集与导入,数据的采集可以使用 ps1 脚本或者使用 exe 程序收集,工具下载地址: https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors

使用 BloodHound.exe 采集数据

这里使用 SharpHound.exe 进行数据的采集,将 SharpHound.exe 拷贝到目标上,执行 SharpHound.exe -c all 进行数据采集:

采集完数据会在当前路径下生成一个以时间戳命名的 zip 文件,我们只需要把这个文件拖回来即可。

使用 BloodHound.ps1 采集数据

若目标机器上有 powershell 环境,我们还可以通过 ps1 脚本来采集数据:

代码语言:javascript
复制
 powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"

采集完数据会在当前路径下生成一个以时间戳命名的 zip 文件,我们只需要把这个文件拖回来即可。

导入 BloodHound 数据

当我们数据采集完我们拖回本地后,我们就可以直接把 zip 文件导入:

导入数据后 Database info 就会有数据显示了:

BloodHound 板块介绍

1、Database Info(数据库信息),可以查看当前数据库中的域用户、域计算机等统计信息。

2、Node Indo(节点信息),单击某个节点时,在这里可以看到对应节点的相关信息。

3、Analysis(分析查询),在 BloodHound 中预设了一些查询条件,具体如下:

代码语言:javascript
复制
 1、查询所有域管理员
 2、寻找到域管理员的最短路径
 3、查找具有DCSync权限的主体
 4、具有外部域组成员资格的用户
 5、具有外部域名组成员资格的组
 6、映射域信任
 7、到无约束委托系统的最短路径
 8、到达Kerberoastable用户的最短路径
 9、从Kerberoastable用户到域管理员的最短路径
 10、拥有的主体的最短路径
 11、从拥有的主体到域管理员的最短路径
 12、到高价值目标的最短路径
 13、查找域用户是本地管理员的计算机
 14、查找域用户可以读取密码的计算机
 15、从域用户到高价值目标的最短路径
 16、找到从域用户到高价值目标的所有路径
 17、找到域用户可以RDP的工作站
 18、找到域用户可以RDP的服务器
 19、查找域用户组的危险权限
 20、找到高价值群体中能够支持kerberoable的成员
 21、列出所有kerberoable用户
 22、查找具有大多数特权的Kerberoastable用户
 23、查找到非域控制器的域管理登录
 24、查找不支持操作系统的计算机
 25、查找AS-REP Roastable用户(DontReqPreAuth)

接下来我就带大家看看最常用的查询条件如何分析。

查询所有域管理员(Find all Domain Admins)

点击 Analysis - Find all Domain Admins

上图可以看到右边会有一个拓扑图显示,由黄色 DOMAIN.ADMINS@REDTEAM.COM 组查询后由两个域管理员,分别是用户:ADMIN@REDTEAM.COMADMINISTRATOR@REDTEAM.COM,这样我们就知道当前域内有两个域管理员。

寻找到域管理员的最短路径(Find Shortest Paths to Domain Admins)

点击 Analysis - Find Shortest Paths to Domain Admins

上图可以看到右边会有一个拓扑图显示:

黄色图标的则代表的是用户组,可以看到有三个用户组 DOMAIN ADMINSENTERPRISE ADMINSADMINISTRATORS

绿色图标小人则代表的是域用户,可以看到有三个域用户 WHOAMIADMINADMINISTRATOR

蓝色网状图标则代表当前域名,可以看到当前域名为 REDTEAM.COM

紫色序列图标则代表默认域策略

查找具有DCSync权限的 主体(Find Principals with DCSync Rights)

点击 Analysis - Find Principals with DCSync Rights

DCSync 是域渗透中经常会用到的技术,我们可以通过 DCSync 来导出域内某个用户的 Hash,或者域内所有用户的 Hash。

Mimikatz 在 2015 年发布了新版本的 Mimikatz,新增加了 DCSync 功能。模仿一个域控制器 DC,从真实的域控制器中请求获取数据,例如账号的口令散列值等数据。

一个用户想发起 DCSync 攻击,必须获得以下任一用户的权限:

  • Administrators 组内的用户
  • Domain Admins 组内的用户
  • Enterprise Admins 组内的用户
  • 域控制器的计算机帐户

在一般默认情况下域管理员组具有该权限,所以在域渗透中拿到域管理员账号就可以变相拿到整个域的控制权限。

查看域信任关系(Map Domain Trusts)

点击 Analysis - Map Domain Trusts

可能有一些朋友还不知道什么是信任, 为什么要在域之间建立信任关系?

域是安全边界,若无信任关系,域用户帐户只能在本域内使用。信任关系在两个域之间架起了一座桥梁,使得域用户帐户可以跨域使用。

确切地说就是:信任关系使一个域的 DC(域控制器) 可以验证其他域的用户,这种身份验证需要信任路径。

例如:A域与B域没有信任关系,A域上的员工可以使用自己在A域的帐户,那么将不能访问B域上的资源。

总之,两个域之间只有建立适当的信任关系后才可以实现互相访问,这就像两个公司之间要进行友好往来需要建立外交关系一样。

知道了原理之后我们再来看上面这张图,SAUL.REDTEAM.COM 域,被信任(trustedby) REDTEAM.COM 域。

这个信任关系 指明 SAUL.REDTEAM.COM 域是受 REDTEAM.COM 域,信任的域,即 SAUL.REDTEAM.COM 域的用户帐户可以访问 REDTEAM.COM 域的资源(在拥有相应权限的前提下)。

从这里我们可以看出,信任关系具有方向性,这个图看上去信任关系是单向信任,SAUL.REDTEAM.COM 域的用户可以访问 REDTEAM.COM 域的资源,但 REDTEAM.COM 域的用户还不能访问 SAUL.REDTEAM.COM 域的资源,但是这是父子域的一个信任关系。在域森林中,父子域之间存在的信任关系,称为父子信任,在默认情况下, 当现有域树中添加新的子域时,将自动建立父子信任关系。这种信任是双向的可传递的信任关系,所以这个图本身就有问题,他们应该是双向信任,也就是 SAUL.REDTEAM.COM 域的用户可以访问 REDTEAM.COM 域的资源,而 REDTEAM.COM 域的用户也可以同样访问 SAUL.REDTEAM.COM 域的资源!

还有一种信任关系:A域和B域之间的双向信任(A域信任B域,且B域信任A域), 在这种信任关系下,A域和B域的用户帐户都能访问对方域的资源,因为这两个域都得到了对方域的信任,就类似于上面提到的父子域信任关系。

对于域信任关系,我们后面会有单独篇章讲跨域攻击,通过一个域信任的关系来跨域攻击到另外一个域内,这都是后话了。

查询到非约束委派系统的最短路径(Shortest Paths to Unconstrained Delegation Systems)

域委派是指将域内部用户的权限委派给服务账号,使用服务账号能以用户的权限在域内展开活动。

比如在域中如果出现一种使用 Kerberos 身份验证访问域中的服务B,而服务B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派。

委派主要分为非约束委派(Unconstrained delegation)和约束委派(Constrained delegation)两个方式,还有一种是基于资源的约束委派(Resource Based Constrained Delegation)。

而通过非约束委派攻击我们就可以通过 TGT 去获取到 AD 或者其他域内服务主机的权限,至于什么是 TGT 我也会单独写一篇来讲解域内的每一个协议,大家只需要初步的认为非资源约束委派可以帮助我们拿到其他主机的权限就好。

其实 BloodHound 常用的也就这些,接下来我在讲下一些图标具体是干啥的。

BloodHound 节点图标、语句详解(必须了解)

节点图标

当我们鼠标右键空白处时,会弹出以下内容:

我们可以鼠标右键点击任一节点,会弹出以下内容:

当我们看每个节点时,可能会发现有些节点和别的不太一样,比如有些有钻石图标还有靶子的图标,那些是什么意思呢?

蓝色位置图标意味着这是开始节点

白色骷髅头说明是已拥有节点

红色靶子图标是目标节点

钻石图标则是高价值目标

节点又细分为6种,分别是 Users 用户、Groups 组、Computers 计算机、Domain 域、GPOs 组策略对象、OUs 组织单位:

HasSession

当用户与计算机时进行会话时,凭据会保留在内存中,可用 LSASS 注入或者凭据转储来获取用户凭据,图中该用户在两台计算机上存在会话:

也就是我们发现在他们两台计算机之间存在 HasSession 的关系,那么可以使用 PTH 哈希传递攻击通过中间的用户获取两台机器的权限。

MemberOf

MemberOf 此节点是上一节点的成员,由末端指向上的尖端:

如上图的最上面我标记的红圈圈,WHOAMI@REDTEAM.COM 就是 ADMINISTRATORS@REDTEAM.COM 本地管理员组下的成员。

如上图的中间我标记的红圈圈,ADMIN@REDTEAM.COM 就是 DOMAIN ADMINS@REDTEAM.COM 域管理员组下的成员。

如上图的最下面我标记的红圈圈,ADMINISTRATOR@REDTEAM.COM 就是 DOMAIN ADMINS@REDTEAM.COM 域管理员组下的成员。

AdminTo

AdminTo 末端是尖端的本地管理员,本地管理员对这台计算机的管理权限比较大,下面的这个用户组是前一台计算机的本地管理员:

如上图我标记红圈圈哪里可以得知,用户 ADMINISTRATOR@REDTEAM.COM 是域机器 AD-2016.REDTEAM.COM 的本地管理员用户,以此类推上面也有一个 WHOAMI@REDTEAM.COM 用户也是域机器 AD-2016.REDTEAM.COM 的本地管理员用户。

可能还会有一些其他的文字,代表不同的意思:

ACL Edges

AllExtendedRights 扩展权限是授予对象的特殊权限,这些对象允许读取特权属性以及执行特殊操作;如果对象是用户,则可以重置用户密码;如果是组,则可以修改组成员;如果是计算机,则可以对该计算机执行基于资源的约束委派

  • AddMember 可以向目标安全组添加任意成员
  • ForceChangePassword 可以任意重置目标用户密码
  • GenericAll 可以完全控制目标对象
  • GenericWrite 写入权限,修改目标的属性或者将主体添加入组等
  • Owns 保留修改 security descriptors 的能力,会忽略DACL权限的限制
  • WriteDacl 可写入目标DACL,修改DACL访问权
  • WriteOwner 保留修改 security descriptors 的能力,会忽略DACL权限的限制
  • ReadLAPSPassword 读取LAPS上的本地管理员凭证
  • ReadGMSAPassword 读取GMSA上的本地管理员凭证
Containers
  • Contains 可以在OU上添加一个新的ACE,它将继承到该OU下的所有子对象上,比如说在OU上应用GenericAll ACE ,那么所有子对象都将继承GenericAll属性
  • GpLink 将其设置为链接容器中的对象
特殊 Edges
  • CanRDP 用远程桌面进行会话
  • CanPSRemote 用PowerShell进行会话
  • ExecuteDCOM 实例化目标的COM对象并调用其方法,可以在特定条件下执行代码
  • AllowedToDelegate 有这个特权的节点可以将任何域主体(包括Domain Admins)模拟到目标主机上的特定服务
  • AddAllowedToAct 可以控制任意的安全主体伪装为特定计算机的任何域用户
  • AllowedToAct 可以使用此用户滥用S4U2self / S4U2proxy进程,将任何域用户模拟到目标计算机系统,并以“该用户”身份接收有效的服务票证
  • SQLAdmin 该用户是目标计算机的MSSQL管理员
  • HasSIDHistory 用户的SID历史记录,用户在域迁移后,票据还包含着前域所在组的SID,虽然用户不属于前域,但仍拥有前域的权限

结尾

到此第三章的内容:使用 BloodHound 分析大型域内环境 就写到这里了,内网渗透、域渗透的本质其实就是信息搜集,只要你搜集内网的信息越多,你才能了解一个内网是做什么的,那些地方会有瑕疵,那些地方会有可能被红队人员攻破的地方。

BloodHound 这款工具可以让我们快速知道当前内网域环境里,那些主机是高价值目标,那些用户是高价值用户,我们可以分析拓扑图来制定完美的攻击路线,这样就能够让我们快速的去打穿整个内网域。

这里是 渗透攻击红队,我是 saulGoodman ,有问题可以随时私信我与我联系。

我们下一篇,再见!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透攻击红队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在不同的操作系统下安装 BloodHound
    • Kali Linux 安装 BloodHound
      • Windows 安装 Bloodhound
        • Mac OS 安装 BloodHound
        • 使用 BloodHound 分析大型域内环境
          • 使用 BloodHound.exe 采集数据
            • 使用 BloodHound.ps1 采集数据
              • 导入 BloodHound 数据
                • BloodHound 板块介绍
                  • 查询所有域管理员(Find all Domain Admins)
                    • 寻找到域管理员的最短路径(Find Shortest Paths to Domain Admins)
                      • 查找具有DCSync权限的 主体(Find Principals with DCSync Rights)
                        • 查看域信任关系(Map Domain Trusts)
                          • 查询到非约束委派系统的最短路径(Shortest Paths to Unconstrained Delegation Systems)
                            • BloodHound 节点图标、语句详解(必须了解)
                              • 节点图标
                              • HasSession
                              • MemberOf
                              • AdminTo
                              • ACL Edges
                              • Containers
                              • 特殊 Edges
                          • 结尾
                          相关产品与服务
                          访问管理
                          访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档