Resolución de A3 SQL injection introduction Webgoat

En este artículo veremos cómo resolver la introducción de sql injection del apartado A3 de Webgoat de forma rápida y fácil

SQL Injection(Intro)

SQL es un lenguaje de programación estandarizado (ANSI en 1986, ISO en 1987) que se utiliza para gestionar bases de datos relacionales y realizar diversas operaciones sobre los datos que contienen.

Una base de datos es una colección de datos. Estos se organizan en filas, columnas y tablas, y se indexan para facilitar la búsqueda de información relevante.

Ejercicio 2

Para resolver este Ejercicio simplemente tenemos que hacer una consulta a la tabla Employees para seleccionar el departamento

SELECT department FROM employees WHERE first_name = 'Bob'

Ejercicio 3

Para resolver este Ejercicio simplemente tenemos que cambiar el departamento de Tobi Barnett a Ventas

UPDATE employees SET department = 'Sales' WHERE first_name = 'Tobi';

Ejercicio 4

Para resolver este Ejercicio simplemente tenemos que añadir el campo phone en la tabla employees. Como podemos ver, los ejercicios consisten en consultas SQL para acostumbrarnos a la dinámica

ALTER TABLE employees ADD COLUMN phone VARCHAR(20);

Ejercicio 5

Para resolver este Ejercicio simplemente tenemos que dar permisos al usuario authorized_user a la tabla grant_rights

GRANT SELECT ON grant_rights TO authorized_user;

Ejercicio 9

Una vez hemos realizado las primeras sentencias SQL tocará practicar cómo hacer SQL Injection

Para ver cuál tiene una respuesta que llame la atención

Cuando en el formulario escribimos smith’ OR ‘1’=’1 lo que hacemos es romper la consulta SQL original y agregar una condición que siempre es verdadera.

Lo que quiere decir esto es que la consulta normal sería algo cómo

SELECT * FROM user_data 
WHERE first_name='John' AND last_name='smith';

Pero con la inyección sería algo cómo

SELECT * FROM user_data 
WHERE first_name='John' AND last_name='smith' OR '1'='1';

La parte ‘1’=’1’ siempre es verdadera, por lo tanto, la condición del WHERE se vuelve verdadera para todos los registros y la base de datos devuelve todas las filas, aunque el apellido no sea smith

Ejercicio 10

En este punto tendrémos que detectar qué entrada es vulnerable a un SQL Injection

Para descubrir el campo vulnerable simplemente tendrémos que poner 1=’1’ en uno de los dos campos para ver cual tiene una respuesta que llame la atención

Una vez detectamos el campo vulnerable lanzaremos el ataque

0 OR 1234=1234

El OR 1 = 1 es una condición que siempre será verdadera, ya que 1 siempre es igual a 1. Esto significa que, sin importar lo que esté en el resto de la consulta, la consulta siempre devolverá todos los registros.

Ejercicio 11

Tendremos que descubrir el salario de los trabajadores

Para poder realizar este apartado tendremos que hacer como antes, encontrar el campo vulnerable y atacarlo

3SL99A' OR '1' = '1

Ejercicio 12

Aquí tendremos que concatenar consultas para modificar el salario

El punto y coma ; separa dos consultas SQL. Lo que pasa es que en muchas aplicaciones vulnerables a inyección SQL, no se valida correctamente la entrada del usuario. Esto permite que el atacante ejecute múltiples consultas SQL en una sola ejecución

' OR 1=1; UPDATE employees SET SALARY = 99999 WHERE FIRST_NAME = 'John'; --

Ejercicio 13

En esta práctica aplicaremos una consulta SQL para borrar una tabla; si leemos la práctica, nos pide que borremos la tabla access_logs

'; DROP TABLE access_log; --

Finalización

Espero que hayan aprendido mucho y que esta explicación les haya servido para entender mejor cómo funcionan las SQL injection. Muchas gracias por leer el artículo, y no olviden seguirme en Github 0x832 además iré subiendo resoluciones de máquinas de HTB, TryHackMe y más herramientas que vaya desarrollando.