BloodHound官方使用指南

0x00  概觀

1.BloodHound介紹

BloodHound是一種單頁的JavaScript的Web應用程序,構建在Linkurious上,Electron編譯NEO4J數據庫是PowerShell/C# ingestor.node

BloodHound使用可視化圖來顯示Active Directory環境中隱藏的和相關聯的主機內容。攻擊者可使用BloodHound輕鬆識別高度複雜的攻擊路徑,不然很難快速識別。防護者可使用BloodHound來識別和防護那些相同的攻擊路徑。藍隊和紅隊均可以使用BloodHound輕鬆深刻了解Active Directory環境中的權限關係。python

BloodHound白色紅色標誌

BloodHound是由@ _wald0@CptJesus@ harmj0y共同開發。linux

2.入門基礎

BloodHound入門很是簡單。完成後,請轉到數據收集部分以開始收集數據,或使用BloodHound查看包含的數據庫。git

(1).windows

此視頻演示了NEO4J設置的過程:https://youtu.be/o22emeubrnkgithub

  1. Neo4j須要Java環境,所以請確保您運行的是最新版本的Java。         shell

  2. 轉到neo4j.com/download並點擊"下載服務器(Download Server)」               數據庫

  3. 下載當前版本的neo4j Server for Windows,選擇32位或64位。     npm

  4. 解壓縮在步驟4中下載的zip文件夾的內容。                 json

  5. 打開以管理員身份運行的cmd.exe,而後轉到您在步驟4中解壓縮到的文件夾。     ubuntu

  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"
}
  
  
  
  
相關文章
相關標籤/搜索