taibeihacker
Moderator
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設置的過程:轉到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並通過輸入:neo4jnet 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配置為接受遠程連接。
克隆BloodHoundGithub repo
git clone https://github.com/adaptivethreat/Bloodhound
啟動neo4j服務器,將NEO4J指向提供的示例圖形數據庫。
從此處找到的相應版本運行BloodHound或從源代碼編譯BloodHound。
./BloodHound
通過bolt://localhost:7687上提供的示例圖形數據庫的身份驗證。用戶名是“neo4j”,密碼是“BloodHound”
您現在可以開始收集數據!
(3).KALI
1.確保是最新系統,同過執行以下命令更新系統apt-get updateapt-get dist-upgrade2.安裝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
下載並安裝neo4j社區版。可選:如果您計劃在不同主機上運行neo4j和PowerShell接收程序,請將REST API配置為接受遠程連接。
克隆BloodHoundGithub repo
git clone https://github.com/adaptivethreat/Bloodhound
啟動neo4j服務器,將NEO4J指向提供的示例圖形數據庫。
從此處找到相應的版本運行BloodHound應用程序或從源代碼編譯BloodHound。
通過bolt://localhost:7687上提供的示例圖形數據庫的身份驗證。用戶名是“neo4j”,密碼是“BloodHound”您現在可以開始收集數據!
3.源码编译BloodHound
(1).windows
安裝NodeJS安裝electron-packager
npm install -g electron-packager
克隆BloodHound GitHubrepo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
npm install
使用'npm run winbuild'命令編譯BloodHound
npm run winbuild
(2).Linux
安裝NodeJS安裝electron-packager
sudo npm install -g electron-packager
克隆BloodHound GitHubrepo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
npm install
使用'npm run winbuild'命令編譯BloodHound
npm run linuxbuild
(3).OSX
安裝NodeJS安裝electron-packager
sudo npm install -g electron-packager
克隆BloodHound GitHubrepo
git clone https://github.com/adaptivethreat/Bloodhound
從根目錄BloodHound中運行'npm install'命令
sudo npm install
使用'npm run winbuild'命令編譯BloodHound
npm run macbuild
4.运行BloodHound的开发版本
安裝Node.js克隆BloodHound GitHubrepo
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文件。通過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指定自己的全局編錄。