Introducción

Esta máquina presenta conceptos y herramientas básicas que se utilizan en el hacking ético.

He utilizado OpenVPN y Kali Linux para resolver este desafío. Descarga el archivo de configuración de VPN (.ovpn), abre una ventana de terminal y ejecuta el siguiente comando:

sudo openvpn starting_point.ovpn 

¿Qué significa el acrónimo SQL?
What does the acronym SQL stand for?


SQL significa “Structured Query Language”, un lenguaje utilizado para gestionar bases de datos relacionales.

> Structured Query Language

¿Cuál es uno de los tipos más comunes de vulnerabilidades en SQL?
What is one of the most common type of SQL vulnerabilities?

> SQL Injection

¿Cuál es la clasificación de esta vulnerabilidad en el OWASP Top 10 de 2021?
What is the 2021 OWASP Top 10 classification for this vulnerability?


La inyección de código aparece en la clasificación OWASP Top 10 de 2021 bajo “A03:2021-Injection”.

> A03:2021-Injection

Enumaración

Antes de continuar a responder las siguientes preguntas, realizaremos un escaneo de puertos utilizando la herramienta nmap para obtener información clave sobre el sistema objetivo.

Ecaneo con Nmap

-F: Se usa escanear solo los puertos más comunes.
-sV: Detecta las versiones de los servicios.
-n: Omite la resolución de nombres de host.
-Pn: Omite los escaneos de ping, asumiendo que los hosts están activos.

¿Qué reporta Nmap como servicio y versión en el puerto 80 del objetivo?
What does Nmap report as the service and version that are running on port 80 of the target?

> Apache httpd 2.4.38 ((Debian))

¿Cuál es el puerto estándar utilizado para el protocolo HTTPS?
What is the standard port used for the HTTPS protocol?

> 443

¿Cómo se denomina una carpeta en la terminología de aplicaciones web?
What is a folder called in web-application terminology?

> Directory

¿Cuál es el código de respuesta HTTP para errores de ‘No Encontrado’?
What is the HTTP response code is given for ‘Not Found’ errors?

> 404

Análisis de Vulnerabilidades

Gobuster es una herramienta usada para forzar directorios en un servidor web. ¿Qué bandera usamos con Gobuster para especificar que buscamos directorios y no subdominios?
Gobuster is one tool used to brute force directories on a webserver. What switch do we use with Gobuster to specify we’re looking to discover directories, and not subdomains?

> dir

Con Gobuster no he encontrado nada útil, el siguiente paso podría ser verificar si existen credenciales predeterminadas o si hay alguna forma de saltarse el login con SQL Injection.

Credenciales posibles:

admin:admin
guest:guest
user:user
root:root
administrator:password

Ninguna de estas credenciales parece funcionar.


¿Cómo funciona la inyección SQL?

Cuando ingresas un nombre de usuario y contraseña, la base de datos verifica en su tabla si proporcionaste las credenciales correctas antes de darte acceso.

$sql="SELECT * FROM users WHERE username = '$username' AND password = '$password'";

En la página de inicio de sesión, supongamos que ingresmas el nombre de usuario como “admin” y la contraseña “password123”.

$sql="SELECT * FROM users WHERE username = 'admin' AND password = 'password123'";

Si las credenciales son correctas, podras iniciar sesión.

En nuestro caso, no tenemos ninguna credencial disponible. La inyección SQL generalmente funciona porque no se hace una validación de los datos de entrada. Esto significa que podemos proporcionar un nombre de usuario con caracteres como ' y # dependiendo del motor de base de datos para crear un comentario.

Por ejemplo, Si proporcionamos el usuario como admin'# y una contraseña cualquiera, la consulta SQL quedaría así:

$sql="SELECT * FROM users WHERE username='$admin'#' AND password='123'";

En esta consulta, el carácter ' cierra el string del nombre de usuario, y el carácter # marca el inicio de un comentario en SQL. Todo lo que aparece después del # será ignorado por el intérprete SQL. Como resultado, la consulta real que se enviará a la base de datos será:

$sql="SELECT * FROM users WHERE username='$admin'";

Esto hace que la base de datos busque únicamente un usuario con el nombre admin, sin validar la contraseña, lo que permite eludir los mecanismos de autenticación si existe dicho usuario en la tabla.

¿Qué carácter único se puede usar para comentar el resto de una línea en MySQL?
What single character can be used to comment out the rest of a line in MySQL?


El carácter # se utiliza para comentar el resto de una línea en MySQL.

> #

Para hacer la inyección SQL debes ingresar admin'#, y como contraseña, he utilizado tres caracteres aleatorios. En la imagen se muestra el formulario de inicio de sesión y el resultado del inicio de sesión exitoso.

SQL Injection y Flag

Si la entrada del usuario no se maneja con cuidado, podría interpretarse como un comentario. Usa un comentario para iniciar sesión como admin (administrador) sin conocer la contraseña. ¿Cuál es la primera palabra en la página web devuelta?
If user input is not handled carefully, it could be interpreted as a comment. Use a comment to login as admin without knowing the password. What is the first word on the webpage returned?


Usando un comentario como admin'#, puedes iniciar sesión sin contraseña.

> Congratulations

La flag ha sido obtenida exitosamente, y ha sido censurada para respetar las reglas de HTB.