kali中安装使用BloodHound(碰到的部分问题解决)
安装
apt-get install bloodhound
运行neo4j
neo4j start
错误1
ERROR! Neo4j cannot be started using java version 1.8.0_221.
* Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j.
* Please see https://neo4j.com/docs/ for Neo4j installation instructions.
因为我的电脑中默认不是openjdk
解决办法
修改usr/share/neo4j/bin/neo4j
164行:JAVA_CMD="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"
188行:JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/"
错误2
root@windows7:~# 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
run: /usr/share/neo4j/run
Starting Neo4j.
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.
./bin/neo4j:行394: /usr/share/neo4j/logs/neo4j.log: 没有那个文件或目录
解决办法
创建/logs/
目录 和neo4j.log
文件
成功
- 第一次登录后会要求修改密码
Host默认为 bolt://127.0.0.1:7687
User默认为 neo4j
Password默认为 neo4j
运行bloodhound
bloodhound
- 输入帐号密码登录即可
帐号密码为neo4j的帐号密码
BloodHound需要来自Active Directory(AD)环境的三条信息才能运行:
- 哪些用户登录了哪些机器
- 哪些用户拥有管理员权限
- 哪些用户和组属于哪些组
在大多数情况下,收集此信息不需要管理员权限,也不需要在远程系统上执行代码。
因为需要的这三条信息都依赖于powerview.ps1脚本的bloodhound,其分为两部分:
一是powershell采集器脚本SharpHound.ps1
二是可执行文件SharpHound.exe.
这两个采集器的下载地址为:
https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.ps1
https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.exe
采集数据
SharpHound.exe -c all
或者
Invoke-Bloodhound -CollectionMethod ALL
收集器选项
枚举选项
CollectionMethod - 要使用的集合方法。此参数接受以逗号分隔的值列表。具有以下默认值(Default: Default):
Default - 执行组成员身份收集、域信任收集、本地管理收集和会话收集
Group- 执行组成员身份集合
LocalGroup - 执行本地管理员集合
RDP - 执行远程桌面用户集合
DCOM - 执行分布式COM用户集合
GPOLocalGroup - 使用组策略对象执行本地管理员收集
Session- 执行会话收集
ObjectProps - 为LastLogon或PwdLastSet等属性执行对象属性收集
ComputerOnly - 执行本地管理员,RDP,DCOM和会话集合
LoggedOn - 执行特权会话收集(需要目标系统上的管理员权限)
Trusts - 执行域信任枚举
ACL - 执行ACL的收集
Container - 执行容器的收集
DcOnly - 仅使用LDAP执行收集。包括Group,Trusts,ACL,ObjectProps,Container和GPOLocalGroup。
All- 执行除GPOLocalGroup和LoggedOn之外的所有收集方法
SearchForest - 搜索林中的所有域,而不仅仅是当前域
Domain - 搜索特定域。如果为null,则使用当前域(默认值:null)
Stealth - 执行隐藏收集方法。所有隐藏选项都是单线程的。
SkipGCDeconfliction - 会话枚举期间跳过全局编录取消冲突。这可以加快枚举速度,但会导致数据可能不准确。
ExcludeDc - 从枚举中排除域控制器(避免使用Microsoft ATA标志:)
ComputerFile - 指定要从中加载计算机名称/ IP的文件
OU - 指定要枚举的OU
连接选项
DomainController - 指定要连接的域控制器(默认值:null)
LdapPort - 指定LDAP所在的端口(默认值:0)
SecureLdap - 使用安全LDAP而不是常规LDAP连接到AD。默认情况下将连接到端口636。
IgnoreLdapCert - 忽略LDAP SSL证书。例如,如果存在自签名证书,则使用
LDAPUser - 用于连接LDAP的用户名。还需要LDAPPassword参数(默认值:null)
LDAPPass - 用户连接LDAP的密码。还需要LDAPUser参数(默认值:null)
DisableKerbSigning - 禁用LDAP加密。不推荐。
性能选项
Threads- 指定要使用的线程数(默认值:10)
PingTimeout - 指定ping请求的超时(以毫秒为单位)(默认值:250)
SkipPing - 指示Sharphound跳过ping请求以查看系统是否已启动
LoopDelay - 会话循环之间的秒数(默认值:300)
MaxLoopTime - 继续会话循环的时间值。格式为0d0h0m0s。Null值将会循环两个小时。(默认值:2h)
Throttle - 在每次请求到计算机后添加延迟。值以毫秒为单位(默认值:0)
Jitter - 为阀门值增加百分比 jitter。(默认值:0)
输出选项
JSONFolder - 存储json文件的文件夹(默认值: .)
JSONPrefix - 要添加到JSON文件的前缀(默认值:“”)
NoZip - 不要将JSON文件压缩到zip文件。将JSON文件存储在磁盘上。(默认值:false)
EncryptZip - 将随机生成的密码添加到zip文件中。
ZipFileName - 指定zip文件的名称
RandomFilenames -随机输出文件名
PrettyJson - 在多行上输出带缩进的JSON以提高可读性。权衡是增加文件大小。
缓存选项
CacheFile - Sharphound缓存的文件名。(默认值:BloodHound.bin)
NoSaveCache - 不要将缓存文件存储到磁盘上。如果没有此标志,BloodHound.bin将从磁盘中被删除
Invalidate --使缓存文件无效并生成新缓存
杂项选项
StatusInterval - 枚举期间显示进度的间隔(以毫秒为单位)(默认值:30000)
详细 - 启用详细输出
## 界面使用
1.界面介绍
BloodHound界面设计直观,操作重点突出。因为BloodHound是以Electron应用程序编译的,所以它跨平台的,可在Windows,OSX和Linux上运行。
(1).认证
当您第一次打开BloodHound时,会收到登录提示:
BloodHound登录提示
Database URL是NEO4J数据库运行的IP地址和端口,格式应为bolt://ip:7687
DB Username是为NEO4J的数据库的用户名。NEO4J数据库的默认用户名是NEO4J
DB Password 是NEO4J数据库的密码。NEO4J数据库的默认密码是NEO4J。提供的示例数据库的密码是BloodHound
(2).概观
成功登录后,BloodHound将在其名称中绘制名为“Domain Admins”的任何组,并向您显示属于该组的有效用户:
BloodHound界面概述
上图中,BloodHound界面分为5个部分:
- 1.菜单和搜索栏
- 2.图形绘制区域
- 3.设置
- 4.放大/缩小并重置
- 5.初始密码查询
(3).菜单和搜索栏
BloodHound菜单
搜索栏和菜单旨在直观且以操作为重点。左上角的三行将切换“数据库信息”,“节点信息”和“查询”选项卡的下拉列表。
“数据库信息”选项卡显示有关当前加载的数据库的基本信息,包括用户、计算机、组和关系(或边)的数量。您还可以在这里执行基本的数据库管理功能,包括注销和切换数据库,以及清除(读取:从中删除所有信息)当前加载的数据库(注意!)
“节点信息”选项卡将显示有关您在图表中单击的节点的信息。
“查询”选项卡将显示我们在BloodHound中包含的预建查询,以及您可以自己构建其他查询。稍后将提供有关此内容的更多信息。
(4).图形绘制区域
这是BloodHound绘制节点和边缘的区域。按住ctrl键将循环显示三个选项以显示节点标签:Default Threshold, Always Show, Never Show.。可以单击并按住一个节点,将其拖动到其他点。您也可以单击一个节点,侦探犬将用该节点的信息填充“节点信息”选项卡。
(5).设置
设置
- 刷新 - BloodHound将重新计算并重新绘制当前显示。
- 导出图表 - BloodHound可以将当前绘制的图形导出为JSON格式,或者导出为PNG。
- 导入图 表- BloodHound将以JSON格式绘制导入的图形。
- 上传数据 - BloodHound将自动检测然后提取CSV格式的数据。有关此内容的更多信息,请参阅CSV提取。
- 更改布局类型 - 在分层(dagre)和强制导向图布局之间切换。
- 设置 - 改变节点折叠行为,并在低细节模式之间切换
(6).放大/缩小并重置
加号(+)将放大。减号(-)将缩小。中心图标会将图表重置为默认缩放。
(7).初始密码查询
BloodHound您对当前加载的NEO4J数据库运行自定义密码查询。有关此主题的更多信息,请参阅Cypher查询语言。
2.用户
单击计算机节点将在“ Node Info”选项卡中填充有关该计算机的信息:
BloodHound用户节点信息
(1).节点信息
-Name:这是节点的名称,采用域简单格式。
- SAMAccountName:这是用户的SAMAccountName。此信息目前不是由接收程序收集的。
- Display Name:这是用户的Windows显示名称。此信息目前不是由接收程序收集的。
-Password Last Changed:这是用户密码上次更改的日期。此信息目前不是由接收程序收集的。
- Sessions:这些是接收程序在收集期间标识用户登录的所有计算机
(2).组成员身份
- First Degree Group Memberships:这些组是用户显式成员的组。这是输入命令net user username /domain 时看到的信息
- Unrolled Group Memberships: 这些都是用户有效的组成员身份。这相当于运行Get-NetGroup -User username的信息
- Foreign Group Memberships:这些是用户所属的所有外部组
(3).本地管理员权利
- First Degree Local Admin: 这些计算机明确地将用户本身添加为系统上的本地管理员
- Group Delegated Local Admin Rights: 这些是用户根据委派的组权限获得管理员权限的计算机
- Derivative Local Admin Rights:: 这些是用户可以通过模拟当前使用具有管理员权限的计算机的用户来获得管理员权限的计算机,而不管链接的深度如何
(4).出站对象控制
-First Degree Object Control::这些是用户直接控制的其他对象
- Group Delegated Object Control:这些是此用户通过安全组委派控制的对象。
-Transitive Object Control:这些用户具有仅ACL的攻击路径的对象。
(5).入站对象控制
- Explicit Object Controllers:对该用户具有一级控制权的其他主体。
- Unrolled Object Controllers:通过展开控制此用户的一级组,我们可以看到通过安全组委派控制此对象的所有有效主体
- Transitive Object Controllers:这些是环境中具有此用户对象的仅ACL攻击路径的其他主体。
3.计算机
单击计算机节点将在“ Node Info”选项卡中填充有关该计算机的信息:
BloodHound计算机节点选项卡
(1).节点信息
- Name:这是节点的名称,采用完全限定格式。
- OS:计算机的操作系统。此信息目前不是由接收程序收集的。
- Allows Unconstrained Delegation:计算机是否允许无约束委派。此信息目前不是由接收程序收集的。
- Sessions: 这些是在数据收集过程中由接收程序识别的计算机上的用户会话。
(2).本地管理员
- Explicit Admins:这些是在系统上具有本地管理员权限的显式用户和组。这相当于在主机上运行命令net localgroup administrators
- Unrolled Admins:这些是对系统具有管理员权限的所有有效组和用户。这相当于运行命令get netlocalgroup-computername computername-recurse
- Derivative Local Admins:这些是具有计算机衍生管理风格攻击路径的所有有效组和用户
(3).组成员身份
- First Degree Group Membership:这些是计算机所属的组。
- Unrolled Group Memberships: 这些都是计算机拥有的有效组成员身份。
- Foreign Group Memberships::这些是计算机所属的所有外部组。
(4).本地管理员权限
- First Degree Local Admin:这些计算机对象在系统上显式添加为本地管理员的计算机。
- Group Delegated Local Admin Rights::这些是计算机根据委派的组权限获得管理员权限的计算机。
- Derivative Local Admin Rights:这些是计算机可以通过冒充当前使用用户具有管理员权限的计算机的用户获得管理员权限的计算机,无论此链接的深度如何。
(5).出站对象控制
- First Degree Object Control::这些是此计算机可直接控制的其他对象。
- Group Delegated Object Control:这些是此计算机通过安全组委派控制的对象。
-Transitive Object Control:这些是此计算机具有仅ACL的攻击路径的对象。
4.组
单击计算机节点将在“ Node Info”填充有关该组的信息
BloodHound计算机节点选项卡
(1).节点信息
- Name::组的显示名称。
- Sessions:这些是接收程序在收集过程中识别出该组的有效用户登录的所有计算机
(2).组成员
- Direct Members: 这些是显式添加到此组的用户和组。这是输入命令 net group groupname/domain时看到的信息
- Unrolled Members::这些都是组的有效组成员身份。这相当于运行命令get netgroup-groupname groupname-recurse
- Foreign Members::这些属于该组的用户本身属于外部域
(3).组成员身份
- First Degree Group Memberships:这些是属于此组的用户,它们自己属于外部域
- Unrolled Group Memberships:这些都是组中有效的组成员身份
- Foreign Group Memberships:: 这些是组所属的所有外部组。
(4).本地管理员权限
- First Degree Local Admin:这些是将组本身明确添加为系统本地管理员的计算机。
-Group Delegated Local Admin Rights:这些是用户组管理员根据委派的组权限进行权限的计算机。 这些是用户组管理员根据委派的组权限授予的计算机。
- Derivative Local Admin Rights::这些是该组可以通过冒充当前使用用户具有管理员权限的计算机的用户获得管理员权限的计算机,无论此链接的深度如何。
这些是组可以通过模拟当前使用用户具有管理员权限的计算机的用户来获得管理员权限的计算机,而不管链接的深度如何
(5).出站对象控制
- First Degree Object Control::这些是此计算机可直接控制的其他对象。
- Group Delegated Object Control:这些是此计算机通过安全组委派控制的对象。
-Transitive Object Control:这些是此计算机具有仅ACL的攻击路径的对象。
(6).入站对象控制
- Explicit Object Controllers:对该组具有一级控制权的其他主体。
-Unrolled Object Controllers: 通过展开控制此组的一级组,我们可以看到通过安全组委派控制此对象的所有有效主体
- Transitive Object Controllers::这些是环境中具有此组对象的仅ACL攻击路径的其他主体。
5.寻路径
BloodHound中的寻路径的工作原理与您喜欢的图形软件中的工作方式类似。单击道路图标,将弹出“Target Node”文本框。
BloodHound寻路
首先,指定“开始节点”。这可以是BloodHound图表中的任何类型的节点。BloodHound将为您自动完成此字段。
接下来,指定“目标节点”。同样,这可以是BloodHound图表中的任何类型的节点,BloodHound将为您自动完成此字段。
按“播放”按钮,如果存在此类路径,BloodHound将确定起始节点和目标节点之间的所有最短路径。然后,BloodHound将在图形绘制区域中显示路径
查询分析信息数据
- 进入查询模块,有24个常用的查询条件
|模块|解释|
| ---- | ---- |
|Find all Domain Admins|查找所有域管理员|
|Find Shortest Paths to Domain Admins|查找到域管理员的最短路径|
|Find Principals with DCSync Rights|查找具有DCSync权限的主体|
|Users with Foreign Domain Group Membership|具有外部域组成员资格的用户|
|Groups with Foreign Domain Group Membership|具有外部域组成员身份的组|
|Map Domain Trusts|映射域信任|
|Shortest Paths to Unconstrained Delegation Systems|无约束委托系统的最短路径|
|Shortest Paths from Kerberoastable Users|Kerberosatable用户的最短路径|
|Shortest Paths to Domain Admins from Kerberoastable Users|Kerberoastable用户到域管理员的最短路径|
|Shortest Path from Owned Principals|从拥有的主体的最短路径|
|Shortest Paths to Domain Admins from Owned Principals|从拥有的主体到域管理员的最短路径|
|Shortest Paths to High Value Targets|通往高价值目标的最短路径|
|Find Computers where Domain Users are Local Admin|查找域用户为本地管理员的计算机|
|Shortest Paths from Domain Users to High Value Targets|从域用户到高价值目标的最短路径|
|Find All Paths from Domain Users to High Value Targets|查找从域用户到高价值目标的所有路径|
|Find Workstations where Domain Users can RDP|查找域用户可以RDP的工作站|
|Find Servers where Domain Users can RDP|查找域用户可以RDP的服务器|
|Find Dangerous Rights for Domain Users Groups|查找域用户组的危险权限|
|Find Kerberoastable Members of High Value Groups|寻找高价值群体中的Kerberosatable成员|
|List all Kerberoastable Accounts|列出所有Kerberostable帐户|
|Find Kerberoastable Users with most privileges|查找拥有最多权限的Kerberostable用户|
|Find Domain Admin Logons to non-Domain Controllers|查找到非域控制器的域管理员登录|
|Find Computers with Unsupported Operating Systems|查找具有不受支持的操作系统的计算机|
|Find AS-REP Roastable Users (DontReqPreAuth)|查找AS-REP可烘焙用户(DontReqPreAuth)|
0x01 查询所有域管理员
点击Find all Domain Admins选项,选择需要查询的域名,如图:
可以看出当前域只有1个具有管理员权限的用户。
按ctrl键可循环显示不同的节点标签。也可选中某个节点,在其图标上按住鼠标左键,将节点移动到其他位置。单击节点可看节点信息。
0x02 查找到达域管理员的最短路径
单击“Find Shortest Paths to Domain Admins”选项,bloodhound进行分析,将列出可以到达域管理员最短的路径:
我的环境就三台机子,并且我拿下的这台机子上就是域管理员在登录,因此就直接到达域管。
就用一下书上的图做演示吧:
用户组为从上到下的包含制度:两个组,上面的节点包含下面的。
- 一个人的节点图标:代表一个用户;
- 多个人的节点图标:代表用户组;
- 计算机图标:代表域内一台计算机;
MemberOf:表示组的成员
GenericAll:表示我对你有权限
ForceChangePassword: 分支用户表示我可以对你强制推送策略,可以直接更改你的用户密码;
AdminTo:表示我是你的本地管理员
HasSession:表示我可以拿到你的会话;
DCSync: 分支用户表示我可以对该域的域控进行DCSync同步
- 左上角为目标域管理员组,也就是拥有15个具有域管理员权限的用户,我们只需顺着路径得到这15个中的一个节点即可,因此他们是横向的核心目标,是这次路径查询的每跳路径的尽头;
- 左下角第一条线路,这三个用户属于第一个节点的组、第一节点组又在第二节点组的组内,第二节点组又对其上部的第三节点的用户具有权限,该用户又是上一台第四个节点的计算机的本地管理员,可以在这台计算机上拿到上面一个就是第五个节点用户的session会话,该用户属于DOMAIN ADMINS组。可以通过hash传递(PTH)的方法拿下域管理员和域控制器。在其中第三个节点的分支中的用户可以对处于第三节点的用户强制推送恶意策略,可以直接修改第三节点用户密码,进而再次PTH拿下第四节点,继续推进。
- 中间的组,第一个节点中的三个用户为域管理员委派服务账号,有权限可以对该域的域控制器进行DCsync同步,将第二节点的用户的HASH同步过来,第二节点用户属于DOMAIN ADMINS组,进而拿下域控制器。
- 最右边那组,第一节点的用户是第二节点计算机的本地管理员,在该计算机上可以获得第三节点的用户HASH,第三节点用户又属于第四节点的组,第四节点组是第五节点计算机的本地管理员组,在该计算机可以获取第五节点用户的HASH,该用户是DOMAIN ADMINS组用户,进而拿下域控制器。
0x03 查看指定用户与域关联的详细信息
单击某个用户节点,bloodhound将在节点信息选项卡中罗列出该节点的信息。可以查看该用户Name、DisPlayName、最后修改密码时间、最后登陆时间、该用户登陆在那台计算机存在Session,是否启动、属于那些组、拥有那些机器的本地管理员权限、对访问对象对控制权限等。
0x04 查看指定计算机与域的关系
单击任意计算机图标,可看到该计算机在域内的名称、系统版本、是否启用、是否允许无约束委托等信息。单击域控看看:
更多请参考:https://www.cnblogs.com/backlion/p/10643132.html
https://www.cnblogs.com/-chenxs/p/12375489.html