Bloodhound Queries Cheatsheet
- Gustavo Viana
- Segurança ofensiva
- 24 de janeiro de 2024
O Bloodhound é uma ferramenta excelente, como já foi demonstado no nosso post de Introdução ao Bloodhound e neste post vamos conferir diversas queries úteis que auxiliarão no uso da ferramenta.
GPOS
Listar GPOs que têm GPLink com o domínio
MATCH p = (m:GPO)-[r:GPLink]->(n:Domain) RETURN p
Mostrar caminhos de usuários que têm permissões sobre uma GPO que tem GPLink com o domínio
- Com grupo
MATCH p = (:User)-[:MemberOf*1..]->(:Group)-[:GenericWrite|WriteDacl|GenericAll|WriteOwner]->(:GPO)-[:GPLink*]->(:Domain) RETURN p
- Sem grupo
MATCH p = (:User)-[:Owns|GenericWrite|WriteDacl|GenericAll|WriteOwner]->(:GPO)-[:GPLink*]->(:Domain) RETURN p
- Grupos e usuários
MATCH p = ()-[:Owns|GenericWrite|WriteDacl|GenericAll|WriteOwner]->(:GPO)-[:GPLink*]->(:Domain) RETURN p
- Todos os membros de um grupo específico (DBA como exemplo)
MATCH p = (u:User)-[:MemberOf]->(g:Group {name: "[email protected]"})-[:Owns|GenericWrite|WriteDacl|GenericAll|WriteOwner]->(:GPO)-[:GPLink*]->(:Domain) RETURN p
Mostrar usuários que têm permissões sobre alguma GPO
MATCH p = (u:User)-[:Owns|GenericWrite|WriteDacl|GenericAll|WriteOwner]->(:GPO) RETURN u
DCSync
Listar grupos e usuários que têm permissão de DCSync
MATCH p=()-[:DCSync|AllExtendedRights|GenericAll]->(:Domain) RETURN p
ASRep Roasting
Listar usuários vulneráveis a AS-REP Roasting (Não requerem pré autenticação do Kerberos)
MATCH (u:User {dontreqpreauth: true}) RETURN u
Kerberoasting
Listar usuários vulneráveis a Kerberoasting (Possuem um Service Principal Name)
- Todos os usuários
MATCH (n:User)WHERE n.hasspn=true RETURN n
- Somente os usuários ativos
MATCH (u:User) WHERE u.hasspn=true AND u.enabled = TRUE RETURN u
Senhas
Listar usuários que não têm expiração de senha
- Todos os usuários
MATCH p = (u:User {pwdneverexpires: True}) RETURN u
- Somente os usuários ativos
MATCH p = (u:User {pwdneverexpires: True}) WHERE u.enabled = TRUE RETURN u
Listar usuários que não alteram a senha há mais de 12 meses e estão ativos
MATCH (u:User) WHERE u.pwdlastset < (datetime().epochseconds - (360 * 86400)) and NOT u.pwdlastset IN [-1.0, 0.0] AND u.enabled = TRUE RETURN u
Listar usuários que estão com o atributo Password-Not-Required como TRUE e estão ativos
MATCH (n:User {enabled: True, passwordnotreqd: True}) RETURN n
Listar grupos que podem ler senhas LAPS
MATCH p=(g:Group)-[:AllExtendedRights|ReadLAPSPassword]->(n:Computer) RETURN g
Listar computadores sem LAPS
MATCH p = (d:Domain)-[r:Contains*1..]->(c:Computer {haslaps: false}) RETURN p
Projeto de Custom Queries do Bloodhound
Existe um projeto no github com diversas queries úteis para que você utilize no Bloodhound. Abaixo está o comando (tanto no Linux quanto no Windows) para que você as utilize.
Baixar customqueries
- No Linux
curl -o ~/.config/bloodhound/customqueries.json "https://raw.githubusercontent.com/CompassSecurity/BloodHoundQueries/master/BloodHound_Custom_Queries/customqueries.json"
- No Windows (Powershell)
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/CompassSecurity/BloodHoundQueries/master/BloodHound_Custom_Queries/customqueries.json" -OutFile "$env:USERPROFILE\AppData\Roaming\bloodhound\customqueries.json"
Depois de baixar as queries customizadas, basta reabrir o Bloodhound que já aparecerão na sessão de Custom Queries.
Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !