前言
在日常我们练习域控的时候,通常会因为用户太多,或者根本不知道域控里面有多少台机器,再或者说找不到DA(Domain Administrator)而烦恼,恰逢近期我正在在使用一个工具,名为BloodHound,各位在Github上也能找到,所以跟大家分享一下使用的经验。
这是个什么工具
BloodHound 采用了原始 PowerPath 概念验证背后的关键概念,并将其放入可操作、直观、易于使用的功能中,用于摄取和分析数据,从而高效、准确地展示如何在 AD 域中升级权限。
为什么要用它
BloodHound 是一个免费的公共工具,它可以根据你输入的语句来自动执行理解 Active Directory 环境中的关系背后的许多繁琐和乏味的工作。你可以使用 BloodHound 快速深入了解 AD,准确了解任何用户对哪些计算机拥有管理员权限、哪些用户对任何计算机有效拥有管理员权限以及有效的组成员身份信息。
相关文档
https://bloodhound.readthedocs.io/en/latest/index.html
https://github.com/neo4j/neo4j
https://github.com/CompassSecurity/BloodHoundQueries/blob/master/BloodHound_Custom_Queries/customqueries.json
第一次使用
Kali Linux
启动Neo4j服务
kali@kali:~$ sudo neo4j start
Directories in use:
home: /usr/share/neo4j
config: /usr/share/neo4j/conf
logs: /usr/share/neo4j/logs
plugins: /usr/share/neo4j/plugins
import: /usr/share/neo4j/import
data: /usr/share/neo4j/data
certificates: /usr/share/neo4j/certificates
licenses: /usr/share/neo4j/licenses
run: /usr/share/neo4j/run
Starting Neo4j.
Started neo4j (pid:334819). It is available at http://localhost:7474
There may be a short delay until the server is ready.
浏览器打开localhost:7474
来设置初始的账号和密码
默认密码为neo4j:neo4j
在第一次登陆之后,系统会提示我们修改密码,修改完密码后之后就可以搭配BloodHound来使用。
启动BloodHound
直接在kali当中输入BloodHound,如果没有安装,请使用如下命令安装:
kali@kali: ~$ sudo apt-get install bloodhound
然后再执行
kali@kali: ~$ bloodhound
打开BloodHound之后,BloodHound会自动检测neo4j
服务是否自动启动
显示绿色的打钩框代表已经检测到neo4j服务启动,能够直接连接,使用我们设置的neo4j的新密码进行登录。
开始使用BloodHound
导入数据
因为在一开始的时候BloodHound并没有任何数据,所以需要从Windows上通过一个Powershell脚本来把域控的信息收集下来。
脚本地址:https://github.com/BloodHoundAD/SharpHound
然后需要在Windows上能够与LDAP达成通信的用户来执行这个脚本。
PS C:UsersPublic> Import-Module .Sharphound.ps1
PS C:UsersPublic> Invoke-BloodHound -CollectionMethod All -OutputDirectory C:UsersPublic -OutputPrefix "AD_Information"
2023-06-03T09:20:22.3688459-07:00|INFORMATION|This version of SharpHound is compatible with the 4.2 Release of BloodHound
2023-06-03T09:20:22.5909898-07:00|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2023-06-03T09:20:22.6383624-07:00|INFORMATION|Initializing SharpHound at 9:20 AM on 10/12/2022
2023-06-03T09:20:22.9661022-07:00|INFORMATION|Flags: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2023-06-03T09:20:23.3881009-07:00|INFORMATION|Beginning LDAP search for corp.com
2023-06-03T09:20:23.4975127-07:00|INFORMATION|Producer has finished, closing LDAP channel
2023-06-03T09:20:23.4975127-07:00|INFORMATION|LDAP channel closed, waiting for consumers
2023-06-03T09:20:53.6398934-07:00|INFORMATION|Status: 0 objects finished (+0 0)/s -- Using 96 MB RAM
2023-06-03T09:21:13.6762695-07:00|INFORMATION|Consumers finished, closing output channel
2023-06-03T09:21:13.7396906-07:00|INFORMATION|Output channel closed, waiting for output task to complete
Closing writers
2023-06-03T09:21:13.8983935-07:00|INFORMATION|Status: 106 objects finished (+106 2.12)/s -- Using 104 MB RAM
2023-06-03T09:21:13.8983935-07:00|INFORMATION|Enumeration finished in 00:00:50.5065909
2023-06-03T09:21:14.0094454-07:00|INFORMATION|Saving cache with stats: 66 ID to type mappings.
68 name to SID mappings.
2 machine sid mappings.
2 sid to domain mappings.
0 global catalog mappings.
2023-06-03T09:21:14.0255279-07:00|INFORMATION|SharpHound Enumeration Completed at 9:21 AM on 06/03/2023! Happy Graphing!
根据以上中的输出,我们总共扫描了 106 个对象。这显然会根据域中存在的对象和会话数量而有所不同。
在这种情况下,SharpHound 实质上是从本地用户那里获取域的快照,我们应该能够分析用户帐户有权访问的所有内容。收集的数据存储在Public上的 zip 文件中:
PS C:UsersPublic> ls C:UsersPublic
Directory: C:UsersPublic
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/27/2023 11:00 PM 12680 AD_Information_20230603230019_BloodHound.zip
-a---- 9/27/2022 11:00 PM 9734 MTk2MmZkNjItY2IyNC00MWMzLTk5YzMtM2E1ZDcwYThkMzRl.bin
接下来需要将.zip
文件传输到我们的机器上,我们才能导入数据查看域的信息。
在Bloodhound
的右侧选择上传数据
选择从zip包中解压出来的json文件点击上传
等待上传完成后即可查看域控的信息
[基础用法]寻找最短路径到达域控管理员
在左上角的"Analysis"中的最底部"Shortest Paths"可以找到"Find Shortest Paths to Domain Admins", 这意味着你可以通过这个选项去找到你可以找到最短路径的域控管理员
这样就能看到域控管理员的成员
可以看到拥有用户名的是[email protected]
这个用户, 其次则是[email protected]
, 最后是[email protected]
点击任意一个用户, 即可来到NODE INFO
选项
选择GROUP MEMBERSHIP
选项的Unrolled Group Membership
即可看到这个用户属于哪个组下面的信息
当然, 以上只是最基础的操作, 接下来就有语句来提供给你们了
[进阶用法]语句
其实在最底下有一个Raw Query
, 在这里面能够使用一些特定的语句输出我们想要的拓扑
1. 查找具有 SPN 的所有用户/查找所有 Kerberoastable 用户
MATCH (n:User)WHERE n.hasspn=true
RETURN n
2. 查找所有包含"admin"的组
Match (n:Group) WHERE n.name CONTAINS "ADMIN" return n
3. 查找所有拥有高权限组的用户
MATCH p=(n:User)-[r:MemberOf*1..]->(m:Group {highvalue:true}) RETURN p
4. 查找所有活跃的Domain Admin会话
MATCH (n:User)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-512' MATCH p = (c:Computer)-[:HasSession]->(n) return p
5. 查看所有用户
MATCH (n) RETURN n
6. 所有域控管理员
MATCH (n:Group) WHERE n.name =~ "(?i).*DOMAIN ADMINS.*"
WITH n
MATCH (n)<-[r:MemberOf*1..]-(m)
RETURN n,r,m
还没完
如果想知道更多语句的, 在公众号后台回复BloodHound
就会返回一个pdf格式的大全书(请注意部分命令无结果不可用可能是因为你收集的域信息并没有相符合的或者你的域控的域名打错了.)所以发现出错之后可以检查一下:))))
END
感谢你看到这,如果不嫌烦的话可以点个在看并且点赞,当然转发到朋友圈让更多人看到对我来说帮助更大!:))))))))))))))
本公众号秉承知识分享,但是不时会接一些小广告,请谅解。
如果你想联系我交流,可以直接在公众号点击联系我
,即可获取我的微信二维码。
原文始发于微信公众号(Aaron与安全的那些事):域控枚举工具 | 这么好用你不来试试?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论