BloodHound介绍 BloodHound 通过图与线的形式,将域内用户、计算机、组、会话、ACL,以及域内所有的相关用户、组、计算机、登录信息、访问控制策略之间的关系,直观地展现在红队成员面前,为他们更便捷地分析域内情况、更快速地在域内提升权限提供条件。 BloodHound可以帮助蓝队成员更好地对己方网络系统进行安全检查,以及保证域的安全性。BloodHound使用图形理论,在活动目录环境中自动理清大部分人员之间的关系和细节。使用BloodHound,可以快速、深人地了解活动目录中用户之间的关系,获取哪些用户具有管理员权限、哪些用户对所有的计算机都具有管理员权限、哪些用户是有效的用户组成员等信息。 BloodHound可以在域内导出相关信息,将采集的数据导人本地Neo4j数据库,并进行展示和分析。Neo4j是一款NoSQL图形数据库,它将结构化数据存储在网络内而不是表中。BloodHound正是利用Neo4j的这种特性,通过合理的分析,直观地以节点空间的形式表达相关数据的。Neo4j和MySQL及其他数据库一样,拥有自己的查询语言Cypher Query Language。因为Neo4j是一款非关系型数据库,所以,要想在其中进行查询,同样需要使用其特有的语法。 GitHub仓库地址: https://github.com/BloodHoundAD/BloodHound BloodHound安装 /bin/neo4j:行390: /usr/share/neo4j/logs/neo4j.log 没有那个文件或目录 解决方法: 创建 最后运行命令启动 在终端输入 输入账号密码: 使用BloodHound分析大型域内环境 当我们在本地安装完成 bloodhound后,需要进行数据的采集与导入,数据的采集可以使用 https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors BloodHound 版块介绍 Database Info(数据库信息),可以查看当前数据库中的域用户、域计算机等统计信息。 Node Indo(节点信息),单击某个节点时,在这里可以看到对应节点的相关信息。 Analysis(分析查询),在 BloodHound 中预设了一些查询条件,具体如下: 在界面空白处,点击右键查看功能菜单如下: 在节点位置处,点击右键查看功能菜单如下: 节点可以分为6种类型,分别是 Users 用户、Groups 组、Computers 计算机、Domain 域、GPOs 组策略对象、OUs 组织单位: 每个节点中可以有不同的标记图标: 蓝色位置图标表示开始节点; 白色骷髅头说明是已拥有节点; 红色靶子图标是目标节点; 钻石图标则是高价值目标; BloodHound 关系说明 如上图的最上面我标记的红圈圈,[email protected] 就是 [email protected] 本地管理员组下的成员。 如上图的中间我标记的红圈圈,[email protected] 就是 DOMAIN [email protected] 域管理员组下的成员。 如上图的最下面我标记的红圈圈,[email protected] 就是 DOMAIN [email protected] 域管理员组下的成员。 AdminTo 末端是尖端的本地管理员,本地管理员对这台计算机的管理权限比较大,下面的这个用户组是前一台计算机的本地管理员: 如上图我标记红圈圈哪里可以得知,用户 [email protected] 是域机器 AD-2016.REDTEAM.COM 的本地管理员用户,以此类推上面也有一个 [email protected] 用户也是域机器 AD-2016.REDTEAM.COM 的本地管理员用户。 可能还会有一些其他的文字,代表不同的意思: AllExtendedRights 扩展权限是授予对象的特殊权限,这些对象允许读取特权属性以及执行特殊操作;如果对象是用户,则可以重置用户密码;如果是组,则可以修改组成员;如果是计算机,则可以对该计算机执行基于资源的约束委派 AddMember 可以向目标安全组添加任意成员 ForceChangePassword 可以任意重置目标用户密码 GenericAll 可以完全控制目标对象 GenericWrite 写入权限,修改目标的属性或者将主体添加入组等 Owns 保留修改 security descriptors 的能力,会忽略DACL权限的限制 WriteDacl 可写入目标DACL,修改DACL访问权 WriteOwner 保留修改 security descriptors 的能力,会忽略DACL权限的限制 ReadLAPSPassword 读取LAPS上的本地管理员凭证 ReadGMSAPassword 读取GMSA上的本地管理员凭证 Contains 可以在OU上添加一个新的ACE,它将继承到该OU下的所有子对象上,比如说在OU上应用GenericAll ACE ,那么所有子对象都将继承GenericAll属性 GpLink 将其设置为链接容器中的对象 CanRDP 用远程桌面进行会话 CanPSRemote 用PowerShell进行会话 ExecuteDCOM 实例化目标的COM对象并调用其方法,可以在特定条件下执行代码 AllowedToDelegate 有这个特权的节点可以将任何域主体(包括Domain Admins)模拟到目标主机上的特定服务 AddAllowedToAct 可以控制任意的安全主体伪装为特定计算机的任何域用户 AllowedToAct 可以使用此用户滥用S4U2self / S4U2proxy进程,将任何域用户模拟到目标计算机系统,并以“该用户”身份接收有效的服务票证 SQLAdmin 该用户是目标计算机的MSSQL管理员 HasSIDHistory 用户的SID历史记录,用户在域迁移后,票据还包含着前域所在组的SID,虽然用户不属于前域,但仍拥有前域的权限 点击 绿色图标代表用户,黄色图标代表用户组 点击 从上图可以看出: 点击 DCSync 是域渗透中经常会用到的技术,我们可以通过 DCSync 来导出域内某个用户的 Hash,或者域内所有用户的 Hash。 Mimikatz 在 2015 年发布了新版本的 Mimikatz,新增加了 DCSync 功能。模仿一个域控制器 DC,从真实的域控制器中请求获取数据,例如账号的口令散列值等数据。 一个用户想发起 DCSync 攻击,必须获得以下任一用户的权限: Administrators 组内的用户 Domain Admins 组内的用户 Enterprise Admins 组内的用户 域控制器的计算机帐户 在一般默认情况下域管理员组具有该权限,所以在域渗透中拿到域管理员账号就可以变相拿到整个域的控制权限。 点击 可能有一些朋友还不知道什么是信任, 为什么要在域之间建立信任关系? 域是安全边界,若无信任关系,域用户帐户只能在本域内使用。信任关系在两个域之间架起了一座桥梁,使得域用户帐户可以跨域使用。 确切地说就是:信任关系使一个域的 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,这个过程就可以理解为委派。 委派主要分为非约束委派 而通过非约束委派攻击我们就可以通过
apt-get install bloodhound
neo4j start
/logs/
目录和neo4j.log
文件
mkdir /usr/share/neo4j/logs
touch /usr/share/neo4j/logs/neo4j.log
bloodhound
:
bloodhound
neo4j
123456
ps1
脚本或者使用exe
程序收集。工具下载地址:
SharpHound.exe all
powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"
HasSession
MemberOf
AdminTo
ACL Edges
Containers
特殊 Edges
板块实例
Find all Domain Admins (查询所有域管理员)
Analysis
- Find all Domain Admins
:Find Shortest Paths to Domain Admins (寻找到域管理员的最短路径)
Analysis
- Find Shortest Paths to Domain Admins
:黄色
图表的则代表的是 用户组
绿色
图表的则代表的是 域用户
绿色网状图标
则代表 当前域名
紫色序列图标
则代表 默认域策略
Find Principals with DCSync Rights (查找具有DCSync权限的主体)
Analysis
- Find Principals with DCSync Rights
:
Map Domain Trusts(查看域信任关系)
Analysis
- Map Domain Trusts
:Shortest Paths to Unconstrained Delegation Systems (查询到非约束委派系统的最短路径)
(Unconstrained delegation)
和约束委派(Constrained delegation)
两个方式,还有一种是基于资源的约束委派(Resource Based Constrained Delegation
)。TGT
去获取到 AD
或者其他域内服务主机的权限,至于什么是 TGT
我也会单独写一篇来讲解域内的每一个协议,大家只需要初步的认为非资源约束委派可以帮助我们拿到其他主机的权限就好。
原文始发于微信公众号(SecretTeam安全团队):域渗透系列 域信息收集之BloodHound
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论