大家好,这里是 渗透攻击红队 的第 74 篇文章,本公众号会记录一些红队攻击的案例,不定时更新!请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关!
BloodHound 是一款可视化图形分析域环境中的关系的工具,红队人员可以使用 BloodHound 识别高度复杂的攻击路径,蓝队可以使用 BloodHound 来识别和防御那些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入域环境中的权限关系。
在做内网域渗透的时候,若是我们是手动去挨个信息搜集,如果一个域内只有几十台域机器倒也应付的过来,若这个域是有上万,上百万的域机器的时候,我们手动去信息搜集自然是不行,只能依赖于机器帮我们自动化信息搜集,而 BloodHound 就能过帮我们梳理域内每一台主机的详细信息,一是方便了我们省去了手工搜集时间,二是能够用图形化的界面呈现出域内的各种复杂环境。
使用 BloodHound 分析大型域内环境
当前 Kali Linux 版本是 2021最新版本,在 Kali Linux 下安装 BloodHound 我们直接一条命令安装:
apt-get install bloodhound
安装完成后运行图形化数据库 neo4j:
neo4j start
发现报错了,报错信息是:
./bin/neo4j:行390: /usr/share/neo4j/logs/neo4j.log: 没有那个文件或目录
解决方法就是:创建/logs/
目录 和 neo4j.log
文件:
mkdir /usr/share/neo4j/logs
touch /usr/share/neo4j/logs/neo4j.log
然后再次运行图形化数据库 neo4j:
neo4j start
这个时候就启动成功了,我们访问 http://127.0.0.1:7474/
:
Host : bolt://127.0.0.1:7687
User : neo4j
Password : neo4j
第一次登陆成功会提示你需要更改一次密码,在这里我吧密码更改为:whoami
这个时候 neo4j
就成功安装了:
最后运行命令启动 bloodhound
:
在终端输入:bloodhound
url :bolt://localhost:7687
user :neo4j
pass :whoami
这个时候出现下面的界面则代表 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 登陆后台:
输入以下信息连接到数据库说明安装就完成了:
URL : neo4j://localhost:7687
user :neo4j
pass :neo4j
第一次登陆成功需要更改一下 neo4j
的密码,我更改为:whoami
然后出现这个页面说明 neo4j
已经搭建完毕:
最后去 Github 上下载 BloodHound :https://github.com/BloodHoundAD/BloodHound
下载完后解压出来直接运行:BloodHound.exe
url : bolt://localhost:7687
user : neo4j
pass : whoami (就是刚刚更改的密码)
这个时候出现这个页面则代表安装完成:
从 https://neo4j.com/download-center/#community下载 macOS 版本的 neo4j Community Edition Server (不要从 brew 安装)
解压 neo4j
文件夹后在 macOS 终端中,将目录更改为 neo4j
文件夹,切换到 bin
目录,然后输入:
./neo4j console
然后浏览器访问:http://localhost:7474
url : bolt://localhost:7687
user : neo4j
pass : neo4j
第一次登陆成功需要更改一下密码:whoami
出现这个界面则代表安装成功:
最后去下载最新版本的 BloodHound GUI :https://github.com/BloodHoundAD/BloodHound/releases
解压文件夹并双击 BloodHound 输入刚刚设置的账户密码登陆:
user : neo4j
pass : whoami
以上就是各个操作系统安装 BloodHound 的详细步骤了,接下来就是 BloodHound 的使用教程。
当我们在本地安装完成 BloodHound 后,需要进行数据的采集与导入,数据的采集可以使用 ps1
脚本或者使用 exe
程序收集,工具下载地址: https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors
这里使用 SharpHound.exe 进行数据的采集,将 SharpHound.exe 拷贝到目标上,执行 SharpHound.exe -c all
进行数据采集:
采集完数据会在当前路径下生成一个以时间戳命名的 zip
文件,我们只需要把这个文件拖回来即可。
若目标机器上有 powershell 环境,我们还可以通过 ps1
脚本来采集数据:
powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"
采集完数据会在当前路径下生成一个以时间戳命名的 zip
文件,我们只需要把这个文件拖回来即可。
当我们数据采集完我们拖回本地后,我们就可以直接把 zip
文件导入:
导入数据后 Database info
就会有数据显示了:
1、Database Info(数据库信息),可以查看当前数据库中的域用户、域计算机等统计信息。
2、Node Indo(节点信息),单击某个节点时,在这里可以看到对应节点的相关信息。
3、Analysis(分析查询),在 BloodHound 中预设了一些查询条件,具体如下:
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)
接下来我就带大家看看最常用的查询条件如何分析。
点击 Analysis
- Find all Domain Admins
:
上图可以看到右边会有一个拓扑图显示,由黄色 DOMAIN.ADMINS@REDTEAM.COM
组查询后由两个域管理员,分别是用户:ADMIN@REDTEAM.COM
、ADMINISTRATOR@REDTEAM.COM
,这样我们就知道当前域内有两个域管理员。
点击 Analysis
- Find Shortest Paths to Domain Admins
:
上图可以看到右边会有一个拓扑图显示:
黄色图标的则代表的是用户组,可以看到有三个用户组 DOMAIN ADMINS、ENTERPRISE ADMINS、ADMINISTRATORS。
绿色图标小人则代表的是域用户,可以看到有三个域用户 WHOAMI、ADMIN、ADMINISTRATOR。
蓝色网状图标则代表当前域名,可以看到当前域名为 REDTEAM.COM。
紫色序列图标则代表默认域策略。
点击 Analysis
- Find Principals with DCSync Rights
:
DCSync 是域渗透中经常会用到的技术,我们可以通过 DCSync 来导出域内某个用户的 Hash,或者域内所有用户的 Hash。
Mimikatz 在 2015 年发布了新版本的 Mimikatz,新增加了 DCSync 功能。模仿一个域控制器 DC,从真实的域控制器中请求获取数据,例如账号的口令散列值等数据。
一个用户想发起 DCSync 攻击,必须获得以下任一用户的权限:
在一般默认情况下域管理员组具有该权限,所以在域渗透中拿到域管理员账号就可以变相拿到整个域的控制权限。
点击 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域的用户帐户都能访问对方域的资源,因为这两个域都得到了对方域的信任,就类似于上面提到的父子域信任关系。
对于域信任关系,我们后面会有单独篇章讲跨域攻击,通过一个域信任的关系来跨域攻击到另外一个域内,这都是后话了。
域委派是指将域内部用户的权限委派给服务账号,使用服务账号能以用户的权限在域内展开活动。
比如在域中如果出现一种使用 Kerberos 身份验证访问域中的服务B,而服务B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派。
委派主要分为非约束委派(Unconstrained delegation)
和约束委派(Constrained delegation)
两个方式,还有一种是基于资源的约束委派(Resource Based Constrained Delegation
)。
而通过非约束委派攻击我们就可以通过 TGT
去获取到 AD
或者其他域内服务主机的权限,至于什么是 TGT
我也会单独写一篇来讲解域内的每一个协议,大家只需要初步的认为非资源约束委派可以帮助我们拿到其他主机的权限就好。
其实 BloodHound 常用的也就这些,接下来我在讲下一些图标具体是干啥的。
当我们鼠标右键空白处时,会弹出以下内容:
我们可以鼠标右键点击任一节点,会弹出以下内容:
当我们看每个节点时,可能会发现有些节点和别的不太一样,比如有些有钻石图标还有靶子的图标,那些是什么意思呢?
蓝色位置图标意味着这是开始节点 ;
白色骷髅头说明是已拥有节点;
红色靶子图标是目标节点;
钻石图标则是高价值目标;
节点又细分为6种,分别是 Users 用户、Groups 组、Computers 计算机、Domain 域、GPOs 组策略对象、OUs 组织单位:
当用户与计算机时进行会话时,凭据会保留在内存中,可用 LSASS 注入或者凭据转储来获取用户凭据,图中该用户在两台计算机上存在会话:
也就是我们发现在他们两台计算机之间存在 HasSession 的关系,那么可以使用 PTH 哈希传递攻击通过中间的用户获取两台机器的权限。
MemberOf 此节点是上一节点的成员,由末端指向上的尖端:
如上图的最上面我标记的红圈圈,WHOAMI@REDTEAM.COM 就是 ADMINISTRATORS@REDTEAM.COM 本地管理员组下的成员。
如上图的中间我标记的红圈圈,ADMIN@REDTEAM.COM 就是 DOMAIN ADMINS@REDTEAM.COM 域管理员组下的成员。
如上图的最下面我标记的红圈圈,ADMINISTRATOR@REDTEAM.COM 就是 DOMAIN ADMINS@REDTEAM.COM 域管理员组下的成员。
AdminTo 末端是尖端的本地管理员,本地管理员对这台计算机的管理权限比较大,下面的这个用户组是前一台计算机的本地管理员:
如上图我标记红圈圈哪里可以得知,用户 ADMINISTRATOR@REDTEAM.COM 是域机器 AD-2016.REDTEAM.COM 的本地管理员用户,以此类推上面也有一个 WHOAMI@REDTEAM.COM 用户也是域机器 AD-2016.REDTEAM.COM 的本地管理员用户。
可能还会有一些其他的文字,代表不同的意思:
AllExtendedRights 扩展权限是授予对象的特殊权限,这些对象允许读取特权属性以及执行特殊操作;如果对象是用户,则可以重置用户密码;如果是组,则可以修改组成员;如果是计算机,则可以对该计算机执行基于资源的约束委派
到此第三章的内容:使用 BloodHound 分析大型域内环境 就写到这里了,内网渗透、域渗透的本质其实就是信息搜集,只要你搜集内网的信息越多,你才能了解一个内网是做什么的,那些地方会有瑕疵,那些地方会有可能被红队人员攻破的地方。
而 BloodHound 这款工具可以让我们快速知道当前内网域环境里,那些主机是高价值目标,那些用户是高价值用户,我们可以分析拓扑图来制定完美的攻击路线,这样就能够让我们快速的去打穿整个内网域。
这里是 渗透攻击红队,我是 saulGoodman ,有问题可以随时私信我与我联系。
我们下一篇,再见!