BloodHound官方使用指南

时间:2024-04-14 22:36:11

0x00  概观

1.BloodHound介绍

BloodHound是一种单页的JavaScript的Web应用程序,构建在Linkurious上,Electron编译NEO4J数据库是PowerShell/C# ingestor.

BloodHound使用可视化图来显示Active Directory环境中隐藏的和相关联的主机内容。攻击者可以使用BloodHound轻松识别高度复杂的攻击路径,否则很难快速识别。防御者可以使用BloodHound来识别和防御那些相同的攻击路径。蓝队和红队都可以使用BloodHound轻松深入了解Active Directory环境中的权限关系。

BloodHound白色红色标志

BloodHound是由@ _wald0@CptJesus@ harmj0y共同开发。

2.入门基础

BloodHound入门非常简单。完成后,请转到数据收集部分以开始收集数据,或使用BloodHound查看包含的数据库。

(1).windows

此视频演示了NEO4J设置的过程:https://youtu.be/o22emeubrnk

  1. Neo4j需要Java环境,因此请确保您运行的是最新版本的Java。         

  2. 转到neo4j.com/download并点击"下载服务器(Download Server)”               

  3. 下载当前版本的neo4j Server for Windows,选择32位或64位。     

  4. 解压缩在步骤4中下载的zip文件夹的内容。                 

  5. 打开以管理员身份运行的cmd.exe,然后转到您在步骤4中解压缩到的文件夹。     

  6. CD到bin目录下,并通过运行安装neo4j作为服务: neo4j.bat install-service         

  7. 下载/克隆BloodHound GitHub repo,然后将BloodHoundExampleDB.graphdb复制到data\databasesneo4j目录下的文件夹中。      

  8.  在cmd.exe中,返回一个目录,然后cd 到conf目录下。打开neo4j.conf,取消对行dbms.active_database=graph.db的注释。更改此行,使其显示为dbms.active_database=bloodhoundsexampledb.graphdb。另外,取消对行dbms.allow_upgrade=true的注释,使其显示为dbms.allow_upgrade=true,然后保存此文件。

  9.  进入到cmd.exe并通过输入:neo4j net start neo4j  

  10.  通过在浏览器中打开http://localhost:7474/来验证NEO4J是否正在运行。NEO4J Web控制台应该正常显示。

  11. 此处下载到的版本运行BloodHound.exe 从源代码编译BloodHound

  12. 在bolt://localhost:7687上对提供的示例图形数据库进行身份验证。用户名是“neo4j”,密码是“BloodHound”。

您现在可以开始收集数据!   

(2).Linux

有关在Linux上设置BloodHound的更好说明,请参阅此博客文章:https://stealingthe.network/quick-guide-to-installing-bloodhound-in-kali-rolling/

  1. 下载并安装neo4j社区版。 

    可选:如果您计划在不同主机上运行neo4j和PowerShell接收程序请将REST API配置为接受远程连接

  2. 克隆BloodHound Github repo  

    git clone https://github.com/adaptivethreat/Bloodhound

  3. 启动neo4j服务器,将NEO4J指向提供的示例图形数据库。  

  4. 此处找到的相应版本运行BloodHound 从源代码编译BloodHound。 

    ./BloodHound

  5.  通过bolt://localhost:7687上提供的示例图形数据库的身份验证。用户名是“neo4j”,密码是“BloodHound”

   您现在可以开始收集数据!   

(3).KALI

1.确保是最新系统,同过执行以下命令更新系统
apt-get update
apt-get dist-upgrade
2.安装Bloodhound只需运行以下命令即可。Bloodhound依赖于neo4j,因此也将被安装。
apt-get install bloodhound

3.更改Neo4j的默认密码
neo4j console

4.现在在http://localhost:7474上有一个远程接口。通过浏览器打开此URL链接地址,然后更改默认密码。您还将看到它在localhost上启用了Bolt,在以后会用到它。

5.使用默认凭据登录(如下),然后将要求您更改密码: 

  • 用户名:neo4j
  • 密码:neo4j

继续完成密码更改后,并关闭浏览器窗口。

6.弹出一个新的终端窗口打开并运行以下命令启动Bloodhound。

bloodhound

正如您所看到的,Bloodhound现在正在运行并等待一些用户输入。在发布Neo4j之前,它还启用了Bolt on bolt://127.0.0.1:7687。您需要将其用作数据库URL。

  • 数据库URL -   bolt://127.0.0.1:7687
  • 用户名 - neo4j
  • 密码 - 您新更改的密码

点击登录,你应该看到Bloodhound工具删除了数据。您现在可以导入数据并进行分析。

(4).OSX

  1. 下载并安装neo4j社区版

    可选:如果您计划在不同主机上运行neo4j和PowerShell接收程序请将REST API配置为接受远程连接

  2. 克隆BloodHound Github repo  

    git clone https://github.com/adaptivethreat/Bloodhound

  3. 启动neo4j服务器,将NEO4J指向提供的示例图形数据库。

  4. 此处找到相应的版本运行BloodHound应用程序从源代码编译BloodHound

  5.  通过bolt://localhost:7687上提供的示例图形数据库的身份验证。用户名是“neo4j”,密码是“BloodHound”

您现在可以开始收集数据!   


3.源码编译BloodHound

(1).windows

  1. 安装NodeJS

  2. 安装 electron-packager

    npm install -g electron-packager

  3. 克隆BloodHound GitHub repo

    git clone https://github.com/adaptivethreat/Bloodhound

  4. 根目录BloodHound中运行\'npm install\'命令

    npm install

  5. 使用\'npm run winbuild\'命令编译BloodHound

    npm run winbuild

(2).Linux

  1. 安装NodeJS

  2. 安装 electron-packager

    sudo npm install -g electron-packager

  3. 克隆BloodHound GitHub repo

    git clone https://github.com/adaptivethreat/Bloodhound

  4. 根目录BloodHound中运行\'npm install\'命令

    npm install

  5. 使用\'npm run winbuild\'命令编译BloodHound

    npm run linuxbuild

(3).OSX

  1. 安装NodeJS

  2. 安装 electron-packager

    sudo npm install -g electron-packager

  3. 克隆BloodHound GitHub repo

    git clone https://github.com/adaptivethreat/Bloodhound

  4. 根目录BloodHound中运行\'npm install\'命令

    sudo npm install

  5. 使用\'npm run winbuild\'命令编译BloodHound

    npm run macbuild

4.运行BloodHound的开发版本

  1. 安装Node.js

  2. 克隆BloodHound GitHub repo

    git clone https://github.com/adaptivethreat/Bloodhound

  3. 根目录BloodHound中运行\'npm install\'命令\'

    npm install

  4. 使用\'npm run dev\'命令运行开发版本服务器

    npm run dev

  5. 使用Ctrl + R完成WebPack编译后,刷新electron窗口



0x02 数据采集

1.介绍

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

  1.  谁在哪里登录?
  2. 谁拥有管理权限? 
  3.  哪些用户和组属于哪些组?
  4. (可选)哪些主体可以控制其他用户和组对象?

在大多数情况下,收集此信息不需要管理员权限也不需要在远程系统上执行代码基于PowerView的PowerShell摄取器使数据收集变得快速而简单。ingestor(采集器)位于 BloodHound repo下的ingestor目录下。

收集器收集许多额外的数据,这些数据提供了更多路径,以及节点属性以方便使用。

(1).PowerShell执行策略

默认情况下,PowerShell不允许执行PowerShell脚本;但是,在大多数情况下,绕过此限制非常简单。通常,通过运行以下命令,您可以在不受此限制的情况下输入PowerShell执行命令:

PS C:\> PowerShell -Exec Bypass

有关更多选项,请参阅NetSPI上的这篇精彩博文,其中介绍了绕过PowerShell执行策略的15种不同方法。

(2).数据采集

使用BloodHound接口完成数据采集。该接口支持上传带有数据的zip文件,以及单个JSON文件 。  

通过BloodHound接口采集JSON



2.数据收集器

(1).SharpHound - C#Ingestor

BloodHound现在包括一个完全自定义的C#采集器,从头开始编写以支持采集任务。有两个选项可以使用采集器,可执行文件和PowerShell脚本的选项。两个采集器都支持相同的选项集。运行PowerShell版本的命令是Invoke-BloodHound。与所有PowerShell脚本一样,它必须在没有执行策略限制的PowerShell运行环境中运行。有关绕过执行策略运行PowerShell的详细信息,请参阅NetSPI的此博客文章

有关详细信息,包括标志和新功能,请参阅此处的博客文章

Invoke-BloodHound

(2).基本用法

Invoke-BloodHound执行填充后端BloodHound数据库所需的集合选项。如果未指定任何选项,则默认情况下,它将收集所有展开的组成员身份信息,所有可访问的域信任信息,并将收集所有可从当前域访问的计算机上的会话/本地管理员数据。所有数据都将导出到当前目录中的JSON文件中。。*-JSONFolder C:\Temp*参数将修改文件输出到的文件夹,并且

-jsonprefix  domainx将指定的标志添加到每个输出文件的开头。

对于没有登录域的用户会话数据,默认情况下,全局编录用于尝试解除冲突用户可能所在的域。如果用户存在于林中的多个域中,则使用一系列权重进行修改攻击路径的可能性。如果要跳过此全局编目冲突方法,请指定-skipgcdeconfliction标志

(3).收集器选项

枚举选项

  • 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)
  • 详细 - 启用详细输出

3.JSON采集

SharpHound默认在Zip文件中输出几个JSON文件。BloodHound界面支持单个文件以及Zip文件。上传数据的最简单方法是将文件拖放到用户界面上除节点显示选项卡之外的任何位置。

食入

4.基于Python的BloodHound采集器

BloodHound.py是一个基于Python的BloodHound 采集器,基于Impacket

此版本的BloodHound 仅与BloodHound 2.0或更新版本兼容

(1).限制

BloodHound.py目前有以下限制:

  • 尚不支持所有BloodHound(SharpHound)功能(有关支持的收集方法,请参阅下面的内容)
  • Kerberos支持尚未完成
  • 尚未实现跨林成员身份解析

(2).安装和使用

您可以通过pip命令:pip install bloodhound来进行安装,或者通过克隆此存储库并运行python setup.py install或使用 pip install .. BloodHound.py 来安装。BloodHound.p需要impacket、ldap3和dnspython模块才能正常运行

安装将向您的路径中添加命令行工具bloodhound-python。

要使用bloodhound-采集器,您至少需要登录域的凭据。您需要使用此域的用户名(或受信任域中的用户的username@domain)指定-u选项。如果您的DNS设置正确,并且AD域在您的DNS搜索列表中,那么bloodhound.py将自动为您检测该域。如果没有,则必须使用-d选项手动指定它

默认情况下,bloodhound.py将查询LDAP和域中的各个计算机,以枚举用户、计算机、组、信任、会话和本地管理员。如果要限制收集,请指定--collectionmethod参数,该参数支持以下选项(类似于sharphound):

  • Default -本地管理员集合和会话集合  执行组成员身份收集、域信任收集、本地管理收集和会话收集
  • Group - 执行组成员身份收集
  • LocalAdmin - 执行本地管理员收集 
  • Session - 执行会话收集      
  • Acl -  执行acl收集
  • Trusts - 执行域信任枚举
  • LoggedOn - 执行特权会话枚举(需要目标上的本地管理员)
  • ObjectProps - 为LastLogon或PwdLastSet等属性执行对象属性集合       
  • All - 运行上述所有方法,LoggedOn除外          

muliple集合方法应以逗号分隔,例如:-c group,localadmin

您可以覆盖某些自动检测选项,例如,如果要使用其他域控制器,则使用-dc指定主域控制器的主机名或者使用-gc指定自己的全局编录


0x03 界面使用

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).设置

设置

  1. 刷新 - BloodHound将重新计算并重新绘制当前显示。    
  2. 导出图表 - BloodHound可以将当前绘制的图形导出为JSON格式,或者导出为PNG。 
  3. 导入图 表- BloodHound将以JSON格式绘制导入的图形。
  4. 上传数据 - BloodHound将自动检测然后提取CSV格式的数据。有关此内容的更多信息,请参阅CSV提取。 
  5. 更改布局类型 - 在分层(dagre)和强制导向图布局之间切换。 
  6. 设置 -  改变节点折叠行为,并在低细节模式之间切换

(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将在图形绘制区域中显示路径


0x04 高级用法

1.neo4j REST API

Neo4j有一个RESTful API,可用于查询或修改BloodHound图。API支持事务性语句

默认情况下,端点位于http://localhost:7474/db/data/transaction/commit

必要的HTTP头

Accept: application/json; charset=UTF-8
Content-Type: application/json
Authorization: BASE64 ENCODED USERNAME:PASSWORD
POST Body
{
 "statements": [
 {
 "statement": "CYPHER QUERY GOES HERE"
 }
 ]
}

CURL查询以获得USERNAME@DOMAIN.COM的本地管理员

curl -X POST \
http://localhost:7474/db/data/transaction/commit \
-H \'accept: application/json; charset=UTF-8\' \
-H \'authorization: BASE64 ENCODED USER:PASS\' \
-H \'content-type: application/json\' \
-d \'{"statements": [{"statement": "MATCH (c:Computer) WHERE NOT c.name=\'\\'\'USERNAME@DOMAIN.COM\'\\'\' WITH c MATCH p = shortestPath((n:User {name:\'\\'\'USERNAME@DOMAIN.COM\'\\'\'})-[r:HasSession|AdminTo|MemberOf*1..]->(c)) RETURN count(p)"}]}\'

Python请求示例

user = USER@DOMAIN.COM
statement = "MATCH p=(n:User {name:\'%s\'})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer) RETURN count(p)" % user 
headers = { "Accept": "application/json; charset=UTF-8",
                "Content-Type": "application/json",
                "Authorization": "BASE64 ENCODED USERNAME:PASSWORD" }
    data = {"statements": [{\'statement\': statement}]}
    url = \'http://localhost:7474/db/data/transaction/commit\'
r = requests.post(url=url,headers=headers,json=data)

neo4j官方文档

http://neo4j.com/docs/rest-docs/current/

neo4j HTTP REST API官方文档

https://neo4j.com/docs/developer-manual/current/http-api


2.BloodHound JSON格式


SharpHound导出的数据存储在JSON文件中。有八个单独的JSON文件格式提供不同的数据。

基本JSON格式

所有JSON文件都以元标记结尾,元标记包含文件中的对象数以及文件中的数据类型。实际数据存储在一个数组中,其中的值与元标记中的字符串相匹配。

{
    "users":[
        {
            "name": "ADMIN@TESTLAB.LOCAL"
        }
    ],
    "meta":{
        "type" : "users",
        "count": 1
    }
}

可能的类型/对象格式是:

  • users
  • groups
  • ous
  • computers
  • gpos
  • domains
  • gpoadmins
  • sessions

对象格式

users:

"Name": "ADMINISTRATOR@TESTLAB.LOCAL",
"PrimaryGroup": "DOMAIN USERS@TESTLAB.LOCAL",
"Properties": {
    "domain": "TESTLAB.LOCAL",
    "objectsid": "S-1-5-21-883232822-274137685-4173207997-500",
    "enabled": true,
    "lastlogon": 1532041405,
    "pwdlastset": 1531772261,
    "serviceprincipalnames": [],
    "hasspn": false,
    "displayname": null,
    "email": null,
    "title": null,
    "homedirectory": null,
    "description": "Built-in account for administering the computer/domain",
    "userpassword": "Password123!",
    "admincount": true
},
"Aces": [
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "Owner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    }
],
"AllowedToDelegate": []

computers

"Name": "WINDOWS1.TESTLAB.LOCAL",
"PrimaryGroup": "DOMAIN COMPUTERS@TESTLAB.LOCAL",
"Properties": {
    "objectsid": "S-1-5-21-883232822-274137685-4173207997-1106",
    "highvalue": false,
    "domain": "TESTLAB.LOCAL",
    "enabled": true,
    "unconstraineddelegation": false,
    "lastlogon": 1532094035,
    "pwdlastset": 1530133811,
    "serviceprincipalnames": [
        "RestrictedKrbHost/WINDOWS1",
        "HOST/WINDOWS1",
        "RestrictedKrbHost/WINDOWS1.testlab.local",
        "HOST/WINDOWS1.testlab.local"
    ],
    "operatingsystem": "Windows 7 Ultimate N Service Pack 1",
    "description": null
},
"LocalAdmins": [
    { "Name": "DOMAIN ADMINS@TESTLAB.LOCAL", "Type": "Group" },
    { "Name": "ADMINISTRATOR@TESTLAB.LOCAL", "Type": "User" },
    { "Name": "ADMIN@TESTLAB.LOCAL", "Type": "User" }
],
"RemoteDesktopUsers": [
    { "Name": "DFM@TESTLAB.LOCAL", "Type": "User" }
],
"DcomUsers": [
    { "Name": "DFM.A@TESTLAB.LOCAL", "Type": "User" }
],
"AllowedToDelegate": []
}

groups:

{
"Name": "SCHEMA ADMINS@TESTLAB.LOCAL",
"Properties": {
    "highvalue": false,
    "domain": "TESTLAB.LOCAL",
    "objectsid": "S-1-5-21-883232822-274137685-4173207997-518",
    "admincount": true,
    "description": "Designated administrators of the schema"
},
"Aces": [
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "Owner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericWrite",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    }
],
"Members": [
        { 
            "MemberName": "ADMIN@TESTLAB.LOCAL", 
            "MemberType": "user" 
        },
        {
            "MemberName": "ADMINISTRATOR@TESTLAB.LOCAL",
            "MemberType": "user"
        }
    ]
}

domains

{
"Name": "TESTLAB.LOCAL",
"Properties": {
    "objectsid": "S-1-5-21-883232822-274137685-4173207997",
    "highvalue": true,
    "description": null,
    "functionallevel": "2012 R2"
},
"Links": [
    { "IsEnforced": false, "Name": "LOCALADMINS@TESTLAB.LOCAL" },
    {
        "IsEnforced": false,
        "Name": "DEFAULT DOMAIN POLICY@TESTLAB.LOCAL"
    }
],
"Trusts": [
    {
        "TargetName": "DEV.TESTLAB.LOCAL",
        "IsTransitive": true,
        "TrustDirection": 2,
        "TrustType": "ParentChild"
    },
    {
        "TargetName": "EXTERNAL.LOCAL",
        "IsTransitive": true,
        "TrustDirection": 2,
        "TrustType": "External"
    }
],
"Aces": [
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "Owner",
        "AceType": ""
    },
    {
        "PrincipalName":
            "ENTERPRISE READ-ONLY DOMAIN CONTROLLERS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "GetChanges"
    },
    {
        "PrincipalName": "DOMAIN CONTROLLERS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "GetChangesAll"
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "GetChanges"
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "GetChangesAll"
    },
    {
        "PrincipalName":
            "ENTERPRISE DOMAIN CONTROLLERS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "GetChanges"
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "All"
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "GenericAll",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ADMINISTRATORS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "ExtendedRight",
        "AceType": "All"
    }
],
"ChildOus": ["357F42BA-7892-441B-8836-DC148D651F3F"],
"Computers": [
    "WINDOWS1.TESTLAB.LOCAL",
    "WINDOWS2.TESTLAB.LOCAL",
    "WINDOWS10.TESTLAB.LOCAL"
],
"Users": [
    "DFM@TESTLAB.LOCAL",
    "DFM.A@TESTLAB.LOCAL",
    "ADMINISTRATOR@TESTLAB.LOCAL",
    "GUEST@TESTLAB.LOCAL",
    "ADMIN@TESTLAB.LOCAL",
    "KRBTGT@TESTLAB.LOCAL",
    "HARMJ0Y@TESTLAB.LOCAL",
    "TESTUSER$@TESTLAB.LOCAL"
]
}

GPO:

{
"Name": "DEFAULT DOMAIN POLICY@TESTLAB.LOCAL",
"Properties": {
    "highvalue": false,
    "description": null,
    "gpcpath":
        "\\\\testlab.local\\sysvol\\testlab.local\\Policies\\{31B2F340-016D-11D2-945F-00C04FB984F9}"
},
"Guid": "31B2F340-016D-11D2-945F-00C04FB984F9",
"Aces": [
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "Owner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "ENTERPRISE ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteOwner",
        "AceType": ""
    },
    {
        "PrincipalName": "DOMAIN ADMINS@TESTLAB.LOCAL",
        "PrincipalType": "group",
        "RightName": "WriteDacl",
        "AceType": ""
    }
    ]
}

ous:

{
    "Guid": "357F42BA-7892-441B-8836-DC148D651F3F",
    "Properties": {
        "name": "DOMAIN CONTROLLERS@TESTLAB.LOCAL",
        "highvalue": false,
        "blocksinheritance": false,
        "description": "Default container for domain controllers"
    },
    "ChildOus": [],
    "Computers": ["PRIMARY.TESTLAB.LOCAL"],
    "Users": [],
    "Links": [
        {
            "IsEnforced": false,
            "Name": "DEFAULT DOMAIN CONTROLLERS POLICY@TESTLAB.LOCAL"
        }
    ]
}

sessions:

{
    "UserName": "DFM@TESTLAB.LOCAL",
    "ComputerName": "WINDOWS1.TESTLAB.LOCAL",
    "Weight": 1
}gpoadmins
{
    "Computer": "PRIMARY.TESTLAB.LOCAL",
    "Name": "DOMAIN ADMINS@TESTLAB.LOCAL",
    "Type": "group"
}