0x00 概觀
1.BloodHound介紹
BloodHound是一種單頁的JavaScript的Web應用程序,構建在Linkurious上,用Electron編譯,NEO4J數據庫是PowerShell/C# ingestor.
BloodHound使用可視化圖來顯示Active Directory環境中隱藏的和相關聯的主機內容。攻擊者可以使用BloodHound輕松識別高度復雜的攻擊路徑,否則很難快速識別。防御者可以使用BloodHound來識別和防御那些相同的攻擊路徑。藍隊和紅隊都可以使用BloodHound輕松深入了解Active Directory環境中的權限關系。
BloodHound是由@ _wald0,@CptJesus,@ harmj0y共同開發。
2.入門基礎
BloodHound入門非常簡單。完成后,請轉到數據收集部分以開始收集數據,或使用BloodHound查看包含的數據庫。
(1).windows
此視頻演示了NEO4J設置的過程:https://youtu.be/o22emeubrnk
Neo4j需要Java環境,因此請確保您運行的是最新版本的Java。
轉到neo4j.com/download並點擊"下載服務器(Download Server)”
下載當前版本的neo4j Server for Windows,選擇32位或64位。
解壓縮在步驟4中下載的zip文件夾的內容。
打開以管理員身份運行的cmd.exe,然后轉到您在步驟4中解壓縮到的文件夾。
CD到bin目錄下,並通過運行安裝neo4j作為服務: neo4j.bat install-service
下載/克隆BloodHound GitHub repo,然后將BloodHoundExampleDB.graphdb復制到data\databasesneo4j目錄下的文件夾中。
在cmd.exe中,返回一個目錄,然后cd 到conf目錄下。打開neo4j.conf,取消對行dbms.active_database=graph.db的注釋。更改此行,使其顯示為dbms.active_database=bloodhoundsexampledb.graphdb。另外,取消對行dbms.allow_upgrade=true的注釋,使其顯示為dbms.allow_upgrade=true,然后保存此文件。
進入到cmd.exe並通過輸入:neo4j net start neo4j
通過在瀏覽器中打開http://localhost:7474/來驗證NEO4J是否正在運行。NEO4J Web控制台應該正常顯示。
從此處下載到的版本運行BloodHound.exe 或從源代碼編譯BloodHound。
在bolt://localhost:7687上對提供的示例圖形數據庫進行身份驗證。用戶名是“neo4j”,密碼是“BloodHound”。
您現在可以開始收集數據!
(2).Linux
有關在Linux上設置BloodHound的更好說明,請參閱此博客文章:https://stealingthe.network/quick-guide-to-installing-bloodhound-in-kali-rolling/
下載並安裝neo4j社區版。
可選:如果您計划在不同主機上運行neo4j和PowerShell接收程序,請將REST API配置為接受遠程連接。
克隆BloodHound Github repo
git clone https://github.com/adaptivethreat/Bloodhound
啟動neo4j服務器,將NEO4J指向提供的示例圖形數據庫。
從此處找到的相應版本運行BloodHound 或從源代碼編譯BloodHound。
./BloodHound
通過bolt://localhost:7687上提供的示例圖形數據庫的身份驗證。用戶名是“neo4j”,密碼是“BloodHound”
您現在可以開始收集數據!
(3).KALI
apt-get update
apt-get dist-upgrade
apt-get install bloodhound
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
下載並安裝neo4j社區版。
可選:如果您計划在不同主機上運行neo4j和PowerShell接收程序,請將REST API配置為接受遠程連接。
克隆BloodHound Github repo
git clone https://github.com/adaptivethreat/Bloodhound
啟動neo4j服務器,將NEO4J指向提供的示例圖形數據庫。
從此處找到相應的版本運行BloodHound應用程序或從源代碼編譯BloodHound。
- 通過bolt://localhost:7687上提供的示例圖形數據庫的身份驗證。用戶名是“neo4j”,密碼是“BloodHound”
您現在可以開始收集數據!
3.源碼編譯BloodHound
(1).windows
安裝 electron-packager
npm install -g electron-packager
克隆BloodHound GitHub repo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
npm install
使用'npm run winbuild'命令編譯BloodHound
npm run winbuild
(2).Linux
安裝 electron-packager
sudo npm install -g electron-packager
克隆BloodHound GitHub repo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
npm install
使用'npm run winbuild'命令編譯BloodHound
npm run linuxbuild
(3).OSX
安裝 electron-packager
sudo npm install -g electron-packager
克隆BloodHound GitHub repo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
sudo npm install
使用'npm run winbuild'命令編譯BloodHound
npm run macbuild
4.運行BloodHound的開發版本
克隆BloodHound GitHub repo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令'
npm install
使用'npm run dev'命令運行開發版本服務器
npm run dev
使用Ctrl + R完成WebPack編譯后,刷新electron窗口
0x02 數據采集
1.介紹
BloodHound需要來自Active Directory環境的三條信息才能運行:
- 誰在哪里登錄?
- 誰擁有管理權限?
- 哪些用戶和組屬於哪些組?
- (可選)哪些主體可以控制其他用戶和組對象?
在大多數情況下,收集此信息不需要管理員權限,也不需要在遠程系統上執行代碼。基於PowerView的PowerShell攝取器使數據收集變得快速而簡單。ingestor(采集器)位於 BloodHound repo下的ingestor目錄下。
收集器收集許多額外的數據,這些數據提供了更多路徑,以及節點屬性以方便使用。
(1).PowerShell執行策略
默認情況下,PowerShell不允許執行PowerShell腳本;但是,在大多數情況下,繞過此限制非常簡單。通常,通過運行以下命令,您可以在不受此限制的情況下輸入PowerShell執行命令:
PS C:\> PowerShell -Exec Bypass
有關更多選項,請參閱NetSPI上的這篇精彩博文,其中介紹了繞過PowerShell執行策略的15種不同方法。
(2).數據采集
使用BloodHound接口完成數據采集。該接口支持上傳帶有數據的zip文件,以及單個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時,會收到登錄提示:
“Database URL”是NEO4J數據庫運行的IP地址和端口,格式應為bolt://ip:7687
DB Username是為NEO4J的數據庫的用戶名。NEO4J數據庫的默認用戶名是NEO4J
DB Password 是NEO4J數據庫的密碼。NEO4J數據庫的默認密碼是NEO4J。提供的示例數據庫的密碼是BloodHound
(2).概觀
成功登錄后,BloodHound將在其名稱中繪制名為“Domain Admins”的任何組,並向您顯示屬於該組的有效用戶:
上圖中,BloodHound界面分為5個部分:
(3).菜單和搜索欄
搜索欄和菜單旨在直觀且以操作為重點。左上角的三行將切換“數據庫信息”,“節點信息”和“查詢”選項卡的下拉列表。
“數據庫信息”選項卡顯示有關當前加載的數據庫的基本信息,包括用戶、計算機、組和關系(或邊)的數量。您還可以在這里執行基本的數據庫管理功能,包括注銷和切換數據庫,以及清除(讀取:從中刪除所有信息)當前加載的數據庫(注意!)
“節點信息”選項卡將顯示有關您在圖表中單擊的節點的信息。
“查詢”選項卡將顯示我們在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”選項卡中填充有關該計算機的信息:
(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”選項卡中填充有關該計算機的信息:
(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”填充有關該組的信息
(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將在圖形繪制區域中顯示路徑
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" }