Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2FA
2FA
Donde a
partir del escaneo de puertos de Nmap pude saber que el servicio SMB se está ejecutando en
los puertos 139 y 445. Luego, enumerando los recursos compartidos del servidor Samba, pude
saber que hay un archivo de texto compartido donde encontré la ruta de un endpoint de una
API que ofrece una funcionalidad similar al comando ping. Luego, aprovechando que el
endpoint era vulnerable a Command Injection, logre inyectar un comando que genere un
reverse Shell. Luego, para la escalada privilegio horizontal, logre encontrar un script en Bash
que era ejecutado de manera automatizada y periódica con los privilegios del usuario athena,
logrando modificar su contenido y realizar una reverse Shell. Luego, en la escalada vertical,
aproveche que athena podía cargar un módulo kernel, que viene a ser un LKM rootkit, con los
privilegios del usuario root, logrando analizar su código fuente con Ghidra.
En este caso debemos acceder al sistema destino y obtener las banderas. Para
ello empezaremos utilizando el comando openvpn y el archivo de
configuración OpenVPN con el fin de establecer una conexión VPN y poder
acceder a los laboratorios donde están las máquinas virtuales y vulnerables.
10.8.123.194 ; whoami
10.8.123.194 | whoami
10.8.123.194 `whoami`
10.8.123.194 $(whoami)
Podemos verificar que si hay dos usuarios locales en el sistema destino que tienen sus
directorios home, pero no podemos acceder a ellos.
Ahora enumeraremos los archivos y directorios cuyos grupos primario sean el usuario
local athena o ubuntu. Ademas, estos archivos y directorios deben tener el permiso
habilitado de lectura para el usuario www-data.
Podemos observar que logramos encontrar un script en Bash que va crear un
subdirectorio backup en el directorio home del usuario local athena. Luego, va copiar
todo los archivos del subdirectorio notes en el subdirectorio backup. Luego, se
realizara una compresion recursiva de todo los subdirectorios y directorios del
directorio backup en el archivo notes_backup.zip. Luego, se eliminaran todos los
archivos con la extension txt y sh del directorio backup. Luego, se imprime el mensaje
Backup completed. Ademas, tenemos el permiso de modificar el contenido del script.
Ahora enumeraremos todos los procesos que se ejecutan en el sistema destino y en
tiempo real con el fin de saber si este script viene a ser como una tarea cron que se
ejecuta periodicamente con los privilegios de algun usuario local.
De esta manera logramos realizar una escalada privilegio horizontal llegando a ser el
usuario athena.
Ahora buscaremos vectores de escalada de privilegio en el sistema de archivos del
usuario athena.
Podemos observar que el usuario athena puede cargar un modulo de kernel llamado
venom.ko mediante el comando insmod y con el privilegio del usuario root mediante el
comando sudo y sin proveer credenciales. Ademas, si enumeramos informacion del
modulo de kernel venom.ko, nos daremos cuenta de que el autor es monad y viene a
ser un LKM rootkit.
Ahora buscaremos informacin sobre el LKM rootkit y su autor, en en el motor de
busqueda de Google.
Podemos observar que logramos enconrar el repositorio Github del usuario monad
donde uno de los repositorio llamado Diamorphine, se trata de un LKM rootkit para
kernel de ciertas versiones en sistemas basados en Linux. Ademas, este LKM rootkit
se compila como un modulo de kernel que va estar invisble, es decir, si intentamos
enumerar todos los modulos cargados en el sistema Linux, no aparecera. Esto lo
podemos comprobar en la siguiente imagen, pero si lo queremos hacer visible,
podemos enviar una señal numero 63 a cualquier pid de cualquier proceso.
Una de las funcionalidades de este LKM rootkit viene a ser una forma de generar
persistencia ya que qnos permite ser el usuario root enviando una señal numero 64 a
cualquier proceso.
Podemos observar que si envamos una seña numero 64 al proceso con PID igual a 0,
se nos cierra automaticamente la sesion de nuestra reverse shell .
Ahora debido a que los modulos de kernel vienen a ser archivos binario compilados,
utilizaremos Ghidra para observar el codigo fuente escrito en lenguaje de
programacion C, y poder observar la modificacion que se ha hecho en la funcionalidad
de ser el usuario root.
Ademas, si observamos el codigo fuente original del script en C que le corresponde a
este rootkit en el respositorio Github, podremos observar que la funcionalidad de ser el
usuario root esta especificada en la funcion give_root.
Podemos observar que si la variable iVar3 es igual a 0x39, que viene a ser 57 en base
decimal, se ejecutara la funcion give_root. Por lo tanto, la señal numero 52 deberiamos
enviar para ser el usuario root.
Podemos observar que nuestro uid es igual a 0 por lo que ya somos el usuario root
mediante el uso de este LKM rootkit que viene a ser una formar interesante de generar
persistencia por el hecho de que el modulo kernel se vuelve invisible cuando se carga
al kernel del sistema operativo.
Ahora buscaremos las dos banderas en el sistema de archivos del usuario root.