Hello Hackers!!
En el dia de hoy, vamos a realizar una prueba de penetracion hacia un servidor vulnerable a inyecciones SQL de segundo orden, Si deseas practicar realizando las diferentes actividades que voy a presentar durante este tutorial, te invito a revisar la maquina Nightmare de HackTheBox.
Antes de comenzar, quiero aclarar que todo mi contenido publicado se realiza con fines educativos, informativos y éticos.
No soy responsable del mal uso que puedan darte.
Con este tutorial aprenderas el siguiente contenido:
Como realizar un escaneo de puertos con Nmap
Como realizar un descubrimiento de directorios sobre un servidor web
Como realizar una inyeccion SQL de segundo orden sobre un servidor web
Como robar una cookie de sesion administrativa con una inyeccion XSS
Como realizar un analisis de ejecutables con strings
Como realizar una busqueda de informacion util para escalar privilegios
Como manipular un exploit para obtener una ejecucion exitosa
En cualquier proceso para piratear o tener control total sobre un servidor de manera no autorizada, se debe comenzar con una enumeración del sistema.
Para ello realizaremos un simple escaneo con Nmap, de la siguiente manera.
Con los resultados del escaneo anterior de Nmap, logramos identificar varios servicios interesantes corriendo en el servidor victima; entre ellos esta el puerto 80 (HTTP) y el 2222 (SSH).
Cuando visitamos la página web que esta corriendo en el puerto 80, encontramos una página de inicio de sesión.
Pagina web encontrada en el puerto 80
Inyectando codigo SQL en un aplicativo web
Después de probar algunos comandos de inyección SQL, encontramos que esta página es vulnerable a la “inyección SQL de segundo orden”. Esto significa que para aprovechar esta vulnerabilidad, tenemos que registrar a un usuario con nuestra consulta de inyección SQL y luego iniciar sesión con el mismo nombre de usuario, para finalmente ver las salidas de las consultas realizadas.
A continuacion, muestro como detectar un formulario vulnerable a una inyeccion SQL de segundo orden usando la comilla típica.
Detectando un formulario vulnerable a inyecciones SQL
El primer paso para poder empezar a realizar consultas a la base de datos por medio de este formulario vulnerable, es identificar el número de campos con order by.
Cuando iniciamos sesión con la carga util anterior, encontramos que no tenemos un error de SQL lo que significa que la tabla tiene 2 columnas.
Enumeracion con inyecciones SQL
Luego de identificar el numero de campos, podemos empezar a enumerar la base de datos.
Las siguientes cargas utiles nos ayudaron a encontrar una tabla con credenciales.
Cabe resaltar, que el aplicativo web cuenta con una validacion de JS que no permite el ingreso de muchos caracteres en los campos de inicio de sesion.
Para burlar dicha validacion podriamos hacer uso de BurpSuite.
Obteniendo credenciales de la tabla usuarios
Realizando un forzado de inicio de sesion en SSH con HYDRA
Gracias a la informacion obtenida con las inyecciones SQL, tenemos una tabla de usuarios con sus posibles correspondientes contraseñas.
El paso siguiente es organizar un diccionario con la informacion recopilada y realizar un ataque de fuerza bruta con HYDRA para iniciar sesion sobre el servicio de SSH. Ataque de fuerza bruta, es el proceso donde se intenta obtener acceso no autorizado a un sistema o software protegido por una contraseña. En otras palabras es obtener la contraseña correcta que le da acceso a un sistema protegido por un método de autenticación. Articulo Completo
Vamos a crear dos archivo de texto, en el primero alojamos todos los usuarios y en el segundo todas las credenciales:
El archivo de usuarios.txt debe tener el siguiente contenido:
El archivo de passwords.txt debe tener el siguiente contenido:
Ahora usando Hydra vamos a realizar un ataque de diccionario al servicio de “SSH”, para ello debemos importar los dos archivos recien creados con los parametros “L” y “P” .
Listo, hemos obtenido las credenciales de acceso: ftpuser:@whereyougo?.
Al intentar iniciar sesion en el servicio de SSH obtenemos lo siguiente:
Por el nombre del usuario y al ver que no pudimos obtener una shell luego de iniciar con SSH, intentemos iniciar sesion con SFTP.
SFTP, (SSH File Transfer Protocol) es un protocolo seguro de transferencia de archivos. Se ejecuta sobre el protocolo SSH . Es compatible con la funcionalidad completa de seguridad y autenticación de SSH. Articulo Completo
Explotando el servicio de SFTP
Una buena practica durante un pentesting es realizar busqueda de exploits relacionados a algun servicio o aplicativo que se encuentre corriendo en la victima.
Buscando vulnerabilidades sobre un servicio en Google.
Busqueda de vulnerabilidades con Google
Entre los resultados logramos identificar, que hay un exploit para SFTP.
OpenSSH <= 6.6 SFTP mal configurado configuración universal
OpenSSH le permite otorgar acceso SFTP a los usuarios sin permitir la ejecución completa de comandos usando “ForceCommand internal-sftp”. Sin embargo, si no configura correctamente el servidor y no utiliza ChrootDirectory, el usuario podrá acceder a todas las partes del sistema de archivos a las que tiene acceso, incluidos procfs.
Vamos a realizar una busqueda de este exploit usando la herramienta Searchesploit.
Para instalar searchsploit se debe ejecutar el siguiente comando:
Para realizar una busqueda con esta herramienta se debe ejecutar lo siguiente:
Vamos a copiarlo en nuestra carpeta y modificar su contenido para obtener RCE sobre nuestra victima.
Obteniendo ejecuccion de codigo remoto por medio de un exploit
Editamos el siguiente fragmento del exploit para su funcionamiento correcto:
Nos ponemos a escuchar en el puerto 443, el cual fue indicado previamente en la shell reversa con python.
Para evitar cualquier error con relacion a la libreira “pown”, se debe instalar con el comando pip install pwn.
Sabiendo esto vamos a proceder con la ejecuccion de nuestro exploit.
Luego de lo anterior, logramos obtener una shell por netcat por el puerto 443.
Como liberarse de una shell no interactiva
Generando una shell TTY con python.
Escalacion de privilegios en Linux
A continuacion, dejo una recopilacion de comandos utiles para enumerar un sistema y escalar privilegios.
Entre toda la variedad de comandos que podemos ejecutar, para esta demostracion el mas util fue el siguiente:
Analisis estatico de un binario con Strings
Vamos a realizar un analisis estatico al binario no tan usual llamado sls.
Para enumerar o analizar algun binario podemos usar la herramienta strings.
Como resultado obtenemos que este es un archivo ejecutable ELF.
Para poder obtener la ejecución de comandos debemos evitar los filtros anteriores.
Podríamos hacer esto usando caracteres de escape al estilo del lenguaje C.
Listo, ahora tenemos control sobre el usuario decoder.
Con en el siguiente comando podremos averiguar que version y sistema operativo esta corriendo.
Escalacion de privilegios
Busqueda de exploits con searchsploit
Si hacemos uso de la herramienta searchsploit, logramos identificar que la versión del kernel es vulnerable a esta vulnerabilidad.
Buscando Exploits para una explotacion hacia el kernel
Realizando modificaciones a un exploit desarrollado en C
Debemos eliminar o comentar los fragmentos de codigo que no correspondan al nucleo de nuestra maquina controlada, el cual fue obtenido con el comando uname -a.
Compilamos el codigo localmente y enviamos nuestro exploit a la maquina victima.
Creando un servidor HTTP para alojar nuestro malware
Ejecutamos el siguiente comando para levantar un servidor HTTP para exponer nuestro malware y posteriormente descargarlo en la maquina victima.
Descargamos nuestro exploit con el binario WGET.
Luego de descargar nuestro exploit, le asignamos permiso de ejecuccion y procedemos con iniciarlo.
Al ejecutarlo desde el grupo decoder no funciona, pero al probar desde ftuser conseguimos el usuario con maximos privilegios (root):