内网域渗透分析工具BloodHound

2022-11-02 15:25:00 浏览数 (1)

前言

当渗透进入内网后,利用BloodHound对庞大内网域环境进行自动化信息搜集并整理分析数据,提高渗透效率。

0x01 BloodHound 介绍

BloodHound是一款可视化图形分析域环境中的关系的工具,以用图与线的形式,将域内用户、计算机、组、Sessions、ACLs以及域内所有相关用户、组、计算机、登陆信息、访问控制策略之间的关系更直观的展现在红队人员面前进行更便捷的分析域内情况,更快速的在域内提升自己的权限。它也可以使蓝队成员对己方网络系统进行更好的安全检测及保证域的安全性。

Neo4j是一款NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,Bloodhound利用这种特性加以合理分析,可以更加直观的将数据以节点空间”来表达相关数据。BloodHound通过在域内导出相关信息,在将数据收集后,将其导入Neo4j数据库中,进行展示分析。

0x02 Neo4j 数据库安装

安装Neo4j数据库。

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

安装完成后先运行图形化数据库Neo4j。

代码语言:javascript复制
neo4j start

启动后,浏览器访问如下,默认账号密码都是neo4j

代码语言:javascript复制
Host : http://localhost:7474
Username : neo4j
Password : neo4j

首次登录会提示修改密码,例如将密码修改为:123456,修改后跳转如下页面,表示Neo4j安装成功。

0x03 BloodHound 安装

注意:这里建议使用BloodHound GUI 4.0.3版本,BloodHound GUI 4.1.0之后的版本以及所使用的数据采集工具都经过重构,对部分windows系统执行采集数据时兼容性较差,且4.1.0版本对应采集工具的数据结果与4.0.3版本是不通用的。

访问项目地址下载BloodHound GUI 4.0.3版本

  • 下载地址:https://github.com/BloodHoundAD/BloodHound/releases

下载完后,解压到kali linux下,并切换到该目录下执行启动命令:

代码语言:javascript复制
./BloodHound --no-sandbox

启动命令执行成功后,会自动跳出登录页面,登录即可使用。

代码语言:javascript复制
Host : bolt://localhost:7687
Username : neo4j
Password : 123456

登录成功后,出现如下页面表示启动bloodhound成功。

0x04 BloodHound 使用

BloodHound需要来自Active Directory(AD)环境的三条信息才能运行:

  • 哪些用户登录了哪些机器
  • 哪些用户拥有管理员权限
  • 哪些用户和组属于哪些组

在大多数情况下,收集此信息不需要管理员权限,也不需要在远程系统上执行代码。

BloodHound 数据采集

在本地安装 BloodHound GUI 4.0.3 完成后,需要进行数据的采集与导入,数据的采集可以使用 ps1 脚本或者使用 exe 程序收集,需要使用对应版本的数据采集工具。

  • 下载地址: https://github.com/BloodHoundAD/BloodHound/tree/f4d9c1af1529124d33c9f360a27686eea51755e1/Collectors

将数据采集工具上传到目标系统下,采集工具有两个版本,分别对应执行如下命令即可:

代码语言:javascript复制
# 二进制采集工具命令:
SharpHound.exe -c all
# powershell采集工具命令:
powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"

例如使用 SharpHound.exe 进行数据的采集,将 SharpHound.exe 拷贝到目标上,执行数据采集命令即可。

采集成功后,会生成一个基于时间命名的zip文件,此文件保存了采集到的域环境数据信息。

BloodHound 数据导入

将数据采集完生成的zip文件,上传导入到BloodHound分析。

导入数据后 Database info 就会显示数据信息。

BloodHound 功能说明

BloodHound整体页面功能如下:

菜单与搜索栏具体如下:

1、Database Info(数据库信息),可以查看当前数据库的基本信息,包括用户、计算机、组和关系(或边)的数量。

2、Node Indo(节点信息),当单击某个节点时,可以显示对应节点的相关信息。

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

在界面空白处,点击右键查看功能菜单如下:

在节点位置处,点击右键查看功能菜单如下:

BloodHound 图标说明

在图形绘制区域存在不同的图标,各自代表着不同的意思。

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

每个节点中可以有不同的标记图标:

  • 蓝色位置图标表示开始节点;
  • 白色骷髅头说明是已拥有节点;
  • 红色靶子图标是目标节点;
  • 钻石图标则是高价值目标;
BloodHound 关系说明

在每个节点与节点之间都有对应的关系,分别代表着不同的意思。

HasSession

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

MemberOf

MemberOf 表示组的成员,此节点是上一节点的成员,由末端指向上的尖端。

AdminTo

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

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,虽然用户不属于前域,但仍拥有前域的权限。

参考文章

  • https://mp.weixin.qq.com/s/CVpSnIvu-oPoJxw1cav6Kg
  • https://bbs.ichunqiu.com/thread-59896-1-1.html

0 人点赞