6个版本
0.1.5 | 2022年1月15日 |
---|---|
0.1.4 | 2021年11月18日 |
#10 in #neo4j
80KB
490 行
bh (BloodHound CLI)
使用Rust编写的非官方BloodHound CLI工具。
使用bloodhound NEO4J模式进行优化的命令行neo4j工具。
此工具执行以下操作
- 解析来自各种转储文件格式的凭据,同时将用户标记为在BH中拥有
- 将这些凭据存储在NEO4J中,可以从BloodHound GUI客户端查看
- 将凭据与用户主体以'impacket-friendly格式'转储到stdout
- 转储可访问的计算机
- 还允许批量取消标记,这也将删除凭据
此工具目前尚未执行的操作
- 显示图形,这最适合GUI,因为它具有图形界面
- 它目前不包含许多查询,它执行我认为我在日常测试中需要的功能
安装和设置
只有两个步骤
- 像大多数rust二进制文件一样安装它
cargo安装bhound#这将将其安装为'bh'
- 添加您的凭据(用您的凭据或任何其他内容替换)
cat > ~/.bhdb << EOF
user=neo4j
pass=password
server=192.168.1.22:7687
EOF
用法
所有命令目前都接受一个位置参数,它可以是它将尝试从中解析用户的文本文件,也可以是单个用户,bh
应该能够识别出来。但话虽如此,请注意您向其抛出的内容。
标记拥有主体 (-m)
这将解析以下任何一种格式,同时忽略无效行
- hashcat格式(secretsdump.py)
- LSA secretsdump.py格式,例如:domain.com/user:password123
- userprincipalname,例如:[email protected]
不需要进行先前的格式化,因为用户名+域在提交到数据库之前会进行规范化。这意味着您可以通过将大多数常见输出输入到bh
中来自动将用户标记为拥有并存储凭据在NEO4J数据库中。您将能够通过在“额外属性”下查看凭据来从BloodHound GUI客户端看到凭据。
这应在下面的图像中显示
这也意味着为了您的方便,您只需将整个 ntds.dit 溢出文件(以 hashcat 格式)输入到 bh
,就无需再次在 dit 文件中 grep。
这里唯一的注意事项是,一些 AD 域经历了很多变化,提供的域可能是指定的 NetBIOS 名称或与存储在 neo4j 中的域不同的域。您可以使用 -d
标志强制指定给定的主体或主体列表使用特定域,如下面的示例所示
$ cat dit-dump.ntds
sprawl.local\service_one:1105:aad3b435b51404eeaad3b435b51404ee:64f12cddaa88057e06a81b54e73b949b:::
sprawl.local\kerby:1106:aad3b435b51404eeaad3b435b51404ee:2782ac0a5f160561f1e061bacf148f2e:::
sprawl.local\user1:1107:aad3b435b51404eeaad3b435b51404ee:6184be9146ff782ee1edaf65bb25b7a7:::
sprawl.local\lowpriv:1111:aad3b435b51404eeaad3b435b51404ee:64f12cddaa88057e06a81b54e73b949b:::
$ bh dit-dump.ntds -m -d sprawl.local
found user file: dit-dump.ntds
marked [email protected] as owned: true
marked [email protected] as owned: true
marked [email protected] as owned: true
marked [email protected] as owned: true
本地管理员访问的导出(-g)
提供一个用户主体名称,bh 将根据 NEO4J 数据库返回具有管理员访问权限的计算机。
$ bh -g [email protected]
-------- [email protected] --------
ADSS.SPRAWL.LOCAL
COMP1.SPRAWL.LOCAL
从 NEO4J 导出用户凭证(-c)
此代码片段可能是渗透测试过程中使用此工具的最常见方式。通过添加 -c 标志,如果可用,则导出明文密码;如果没有,则返回填充的散列 arg;如果没有,则忽略凭据。这是以 impacket 格式导出的,这意味着您可以简单地复制并粘贴到任何 impacket 示例脚本中。
$ bh [email protected] -c
-------- [email protected] --------
-hashes aad3b435b51404eeaad3b435b51404ee:6184be9146ff782ee1edaf65bb25b7a7 SPRAWL.LOCAL/[email protected]
-hashes aad3b435b51404eeaad3b435b51404ee:6184be9146ff782ee1edaf65bb25b7a7 SPRAWL.LOCAL/[email protected]
帮助输出以供参考
bh 0.1.1
deadjakk
Pentesting workflow optimizer that works with the bloodhound NEO4J db & schema
USAGE:
bh [FLAGS] [OPTIONS] <principals>
FLAGS:
-c, --cred-dump
dump credentials as well as the principal name (only used with -g)
-g, --getadmins
get a list of computers to which the provided principal(s) have local administrators rights, passwords will
be retrieved automagically in impacket format if present in database in impacket format
-h, --help
Prints help information
-m, --markowned
mark user or list of users as owned
-V, --version
Prints version information
OPTIONS:
-d, --domain <domain>
force a domain value for parsing, good if you're importing things from that might use an older name or a
NETBIOS name for the domain
ARGS:
<principals>
newline-separated file containing a list of principals or principals+passwords see --help for more info and
example formats... any parsed passwords will be viewable in the bloodhound GUI when marking principals as
owned
the following formats are accepted (invalid lines are ignored):
optionaldomain\user:password
optionaldomain/user:password
user@domain.com:password
domain\user:RID:hash:hash::: (hashcat format)
user:RID:hash:hash::: (hashcat format)
some common output you might use here is output from secretsdump.py (secrets/sam/or ntds.dit) (hashcat
format)
output file or any hashcat format file to import passwords during the owned
我与 BloodHound GUI 的制作者没有任何关联
依赖关系
~9–18MB
~213K SLoC