BREAKING KB-VULN: 4 FINAL: buen ejemplo de buffer overflow con ASLR activado
https://www.vulnhub.com/entry/kb-vuln-4-final,648/
Nivel: quizá medium (sobre todo por la parte de buffer overflow)
- ports: 80,22, la web parece hackeada de por sí (;)) y tiene un textpattern instalado. Después de probar varias cosas parece que lo único viable es loguear, pero no tenemos las claves
- de la página principal sacamos que ha sido un tal machineboy141 que dice que lo busquemos. Usamos sherlock y vamos al github asociado. Miramos varias cosas y parece que el objetivo es KB-DUMP, en cuyo zip hay varias imágenes (parece Mr Robot). Hacemos stego con stegseek y automáticamente saca en 3 imágenes texto oculto del que deducimos que es para loguear en el textpattern. Sabemos que el login tiene que ser admin, luego hacemos ROT47 y encontramos el descifrado (https://www.dcode.fr/cipher-identifier). Para loguear hace falta además actualizar la password: contiene 2020, pero la máquina es de 2021, actualizamos y ya... (ojo a esto que es bastante habitual en usuarios normales)
- una vez dentro solo hay que subir un shell reverse en la opción files, acceder a él y tenemos shell apache. Lo siguiente es escalar privilegios, subir en este caso al usuario machineboy (lo suyo es mirar en passwd o en home directamente para ver qué usuarios hay, pero con passwd sabemos el nivel de privilegio de cada uno)
- así que hay que entrar en machineboy. En el config.php de textpattern nos da una clave: ghostroot510 asociada al usuario textuser, y siempre hay que comprobar las claves, con machineboy y dentro.
- machineboy tiene privilegios lxd, pero no funciona la vulnerabilidad. Tenemos sin embargo en su home un script install root que parece debemos romper, hacer bufferoverflow. Nos da el código c y tenemos el gdb-peda instalado (así que está claro)
- install.c
#include <stdio.h>#include <stdlib.h>void spawn_shell(){setuid(0);system("/bin/bash");}int main(){char buff[30];const char *env = getenv("INSTALLED");if(env != NULL){strcpy(buff,env);printf("%s\n",buff);}else{system("sudo apt install sl");system("export INSTALLED=OK");}return 0;}
- es un ejemplo sencillo pero pedagógico para ver cómo funciona esto. Veamos:
al ejecutarse comprueba si hay una variable environment INSTALLED con algún valor, si la hay llena buff con su valor y lo imprime. Si no, ejecuta el apt install y exporta la variable.
Dos cosas:
1º que la función spawn_shell no se ejecuta nunca a no ser que accedamos a ella directamente por buffer overflow
2º que el punto de entrada es obviamente la variable buff
Lo primero además es comprobar si la máquina tiene aslr activado
cat /proc/sys/kernel/randomize_va_space
y lo tiene, luego el programa va cambiando la dirección de carga en memoria.
La aleatoriedad en la disposición del espacio de direcciones (conocida por las siglas en inglés ASLR) es una técnica de seguridad informática relacionada con la explotación de vulnerabilidades basadas en la corrupción de memoria. Con el fin de impedir que un atacante salte de forma fiable a, por ejemplo, una función explotable en concreto de la memoria, ASLR dispone de forma aleatoria las posiciones del espacio de direcciones de las áreas de datos clave de un proceso, incluyendo la base del ejecutable y las posiciones de la pila, el heap y las librerías.
Bajamos el programa a nuestra máquina, desactivamos aslr y en estático con gdb calculamos el payload que nos permita alcanzar la función spawn_shell que ejecuta el shell en root.
La inyección se hace a través de la variable env INSTALLED que comprueba e imprime.
1. Creamos un pattern con metasploit
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
Comentarios
Publicar un comentario