Demostración de Inyección SQL utilizando WebGoat

  • Posted on: 13 November 2014
  • By: ReYDeS

Una inyección SQL es una técnica utilizada para manipular servicios web enviando consultas SQL a un sistema gestor de bases de datos relacional (RDBMS), para alterar, insertar, o borrar datos en una base de datos.

Para el siguiente ejemplo se utilizará las versión 5.4 de WebGoat, WebGoat es una aplicación web J2EE deliveradamente insegura, diseñada para enseñar lecciones de seguridad en aplicaciones web. En cada lección, el usuario debe demostrar su conocimiento en un tema de seguridad explotando una vulnerabilidad real en la aplicación WebGoat.

Ingresar a WebGoat utilizando un navegador web.

Ingresar a la opción “Injection Flaws -> LAB: SQL Injection -> Stage 1: String SQL Injection”.

Se ingresa cualquier contraseña para el usuario “Larry stooge (employee)”. El mensaje devuelto por la aplicación es “* Login Failed” o Login Fallido.

Una solución válida para obtener la contraseña del usuario "Neville" sería realizar un ataque por fuerza bruta utilizando una gran cantidad de palabras como posibles contraseñas. Pero esto consume tiempo, recursos y no necesariamente implica la obtención de la contraseña correcta.

Otra técnica implica aprovecharse de inyecciones SQL, para acceder a la base de datos y realizar diversas acciones.

Se infiere la estructura de la consulta realizada hacia la base de datos, como la siguiente:

SELECT * FROM Datos WHERE Nombre = 'Usuario' AND Password = 'Contraseña'

Con esta inferencia es factible realizar la siguiente evaluación.


SELECT * FROM Datos WHERE Nombre = 'Usuario' AND Password = '' OR 1=1-- '

Esto le indica a la Base de Datos a autenticarse válida como “Usuario” sin necesidad de conocer su contraseña, esto a razón de ' OR 1=1-- fuerza a la base de datos a interpretar la consulta como Verdadera. Los símbolos “-- ” con un espacio en blanco al final definen como un comentario todo lo ubicado a su derecha.

Como es factible visualizar, se utiliza “Firebug” para modificar la fuente HTML de la página y visualizar el campo “Password”, así como incrementar su tamaño.

El nombre de usuario utilizado es “Neville”, el cual tiene permisos de administrador, razón por la cual es factible realizar operaciones de administración, como buscar personal, visualizar perfiles o borrar sus perfiles.

Las Inyecciones SQL son ejemplos perfectos sobre las debilidades en los controles de integridad. Adicionalmente la privacidad también puede ser comprometida, así como la confidencialidad y no repudio, dependiendo de la clasificación y funcionalidad de la aplicación web explotada.

Fuentes:

https://code.google.com/p/webgoat/
https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project
http://csrc.nist.gov/publications/nistpubs/800-95/SP800-95.pdf
http://getfirebug.com/

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Webinar Informática Forense