This page looks best with JavaScript enabled

Password Spraying seguro en el dominio con Sprayhound

 ·   ·   5 min read  ·  Autor - Snifer

Contaremos con varias entradas en relación con pentesting sobre Active Directory poniendo un énfasis al uso de herramientas que permitan realizar un pentest sobre ello y además ver y profundizar en la integración de las mismas.

Hoy veremos un script en Python que nos permite realizar Password Spraying en un Directorio Activo de Windows.

Sprayhound

Es un script realizado en Python que realiza un password spraying seguro sobre un Active Directory, permitiendo trabajar e integrar directamente con Bloodhound, llegando a marcar directamente en Bloodhound cuando se obtiene el credencial de un usuario

Instalación

Para instalar tenemos dos opciones realizar directamente por pip, vale aclarar que requieres estar con python 3.

1
python3 -m pip install sprayhound

O desde el mismo repositorio.

1
2
3
4

git clone git@github.com:Hackndo/sprayhound.git
cd sprayhound
python3 setup.py install

Ejecución de Sprayhound

Si ejecutamos sprayhound -h obtendremos la siguiente información.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
sprayhound v0.0.3 - Password spraying                          
                                                               
optional arguments:                                                
  -h, --help            show this help message and exit     
  --unsafe              Enable login tries on almost locked out accounts                                                       
  --force               Do not prompt for user confirmation   
  --nocolor             Do not use color for output            
  -v                    Verbosity level (-v or -vv)            
                                                               
credentials:                                                   
  -u USERNAME, --username USERNAME                             
                        Username                                                                     
  -U USERFILE, --userfile USERFILE                             
                        File containing username list              
  -p PASSWORD, --password PASSWORD                                 
                        Password                               
  --lower               User as pass with lowercase password   
  --upper               User as pass with uppercase password
  -t THRESHOLD, --threshold THRESHOLD                  
                        Number of password left allowed before locked out                                                                               
ldap:                                                          
  -dc DOMAIN_CONTROLLER, --domain-controller DOMAIN_CONTROLLER 
                        Domain controller                          
  -d DOMAIN, --domain DOMAIN                                       
                        Domain FQDN                            
  -lP LDAP_PORT, --ldap-port LDAP_PORT                         
                        LDAP Port                                  
  -lu LDAP_USER, --ldap-user LDAP_USER                         
                        LDAP User                        
  -lp LDAP_PASS, --ldap-pass LDAP_PASS                             
                        LDAP Password                       
  -lssl, --ldap-ssl     LDAP over TLS (ldaps)                       
  -lpage LDAP_PAGE_SIZE, --ldap-page-size LDAP_PAGE_SIZE            
                        LDAP Paging size (Default: 200)                                              
neo4j:                                                                        
  -nh NEO4J_HOST, --neo4j-host NEO4J_HOST       
                        Neo4J Host (Default: 127.0.0.1)               
  -nP NEO4J_PORT, --neo4j-port NEO4J_PORT   
                        Neo4J Port (Default: 7687)         
  -nu NEO4J_USER, --neo4j-user NEO4J_USER                             
                        Neo4J user (Default: neo4j)                   
  -np NEO4J_PASS, --neo4j-pass NEO4J_PASS                             
                        Neo4J password (Default: neo4j)                                                  

Si tenemos este resultado quiere decir que está instalado correctamente.

Para realizar el password spraying requerimos contar dos escenarios.

  • Tener un listado de posibles usuarios.
  • Contar con algún usuario válido en dominio para obtener el resto de usuarios, ya sea por ejemplo con Crackmapexec o realizarlo con ayuda de Sprayhound

Sprayhound con usuarios.

1
 sprayhound -U users.txt -p test -d dino.corp -dc 172.16.190.129

En caso de que tengamos algún usuario con la contraseña que estemos realizando el password spraying será el siguiente.

Autenticación a LDAP

En el caso de que contamos con un usuario válido podremos autenticarnos por LDAP para obtener los usuarios del dominio y además identificar la política de contraseñas haciendo por ello lo mencionado al inicio del post que es una forma de hacerlo seguro.

Entonces ejecutamos con los flags -lu y -lp que nos brindara la autenticación por LDAP para obtener todos los usuarios y comprobar sobre ellos el proceso de Password Spraying.

1
 sprayhound -p 'Password!' -d dino.corp -dc 172.16.190.129 -lu snifer -lp 'Password!'

Al realizar esta tarea validamos la autenticación y como obtiene los usuarios de dominio un total de 105.

Integración con Bloodhound

Ahora veremos la integración con Bloodhound que permite tener sprayhound para ello primero obtendremos con el ingestor respectivo el mapeo del dominio y cargaremos el mismo en Bloodhound.

Mapeando el dominio con Bloodhound.

En este punto ejecutamos el ingestor de python bloodhound.py para realizar el mapeo del dominio y contar con la integracion respectiva.

Ejecucion con Bloodhound

Para que sprayhound se autentique correctamente contra Bloodhound tendremos que hacer uso de las variables -nu y -np por defecto se autenticara al 127.0.0.1, pero si deseas que lo realice a otro equipo en específico se realiza con -nh.

El comando completo se muestra a continuación.

1
 sprayhound -p 'Password!' -d dino.corp -dc 172.16.190.129 -nu ' ' -lu snifer -lp 'Password!'

En este caso identificamos que se tiene dos usuarios válidos con la contraseña que estamos registrando.

A diferencia de las anteriores pruebas nos menciona nuevamente si deseamos marcar como owned al indicarle que si nos especificara que realizo la tarea.

Si visualizamos en Bloodhound veremos que ambos están marcados.

Si al realizar el proceso e identificamos un usuario valido pero el mismo no se encuentra en bloodhound obtendremos el siguiente mensaje.

Camino para ser Domain Admin

Al realizar la ejecución de la herramienta y obtenemos algún usuario con privilegios administrativos en el dominio, veremos al final [PATH TO DA].

Si llegamos a visualizar esto en Bloodhound además de marcarlo podremos ver que evidentemente se tiene una forma de acceder a ser ADMINISTRADOR DE DOMINIO.

Monitoreando la autenticación con LDAPMONITOR

Por fines de prueba me dispuse a realizar el monitoreo del controlador de dominio por medio de ldapmonitor para identificar los eventos que estaba realizando.

El controlador de dominio comienza a recibir todos los intentos de inicio de sesión del resto de las cuentas, verificando que es solo uno por usuario.

En este caso, ejecute él bloqueó de una cuenta después de 5 intentos, para comprobar si estaba correctamente funcionando el proceso.

Punto final

Como saben estamos ya con esta entrada trabajando con una integración con Bloodhound, y además de ver como ejecutar otra herramienta.

Regards
Snifer

Share on
Support the author with

Avatar
WRITTEN BY
Snifer
Creador del proyecto Snifer@L4b's, Consultor en Seguridad Informática.