Fase 3: Otener acceso
Inyeccion SQL
La inyección SQL es una técnica de inyección de código que puede destruir
su base de datos.
La inyección SQL es una de las técnicas de piratería web más comunes.
La inyección SQL es la colocación de código malicioso en las declaraciones
SQL, a través de la entrada de la página web.
Cómo funciona la inyección SQL
Los tipos de ataques que se pueden realizar mediante inyección SQL varían
según el tipo de motor de base de datos. El ataque funciona en sentencias
SQL dinámicas. Una declaración dinámica es una declaración que se genera
en tiempo de ejecución utilizando parámetros de contraseña de un
formulario web o una cadena de consulta URI.
LA INYECCIÓN SQL BASADA EN "" = "" ES SIEMPRE
VERDADERA
Si no hay nada que impida que un usuario ingrese una entrada "incorrecta",
el usuario puede ingresar alguna entrada "inteligente" como esta:
La declaración en sql quedaría de esta forma
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
El SQL anterior es válido y devolverá TODAS las filas de la tabla "Usuarios",
ya que OR 1 = 1 siempre es VERDADERO.
Otra forma parecida como quedaría nuestra declaración sql es esta
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
Un pirata informático puede obtener acceso a los nombres de usuario y
contraseñas en una base de datos simplemente insertando "O" "=" en el
cuadro de texto de nombre de usuario o contraseña:
Donde tendremos como resultado en donde el sql es válido y devolverá
todas las filas de la tabla "Usuarios", ya que OR "" = "" siempre es
VERDADERO.
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
INYECCIÓN SQL BASADA EN SENTENCIAS SQL POR LOTES
La mayoría de las bases de datos admiten instrucciones SQL por lotes.
Un lote de instrucciones SQL es un grupo de dos o más instrucciones SQL,
separadas por punto y coma.
Ejemplo
La declaración sql valida se vería asi
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;
Autenticación de derivación mediante
inyección de SQL
Forzar un error
Si ingresa una cadena con una comilla simple, como O'Brien el nombre
de usuario o la contraseña, obtendrá un error de software ya que el SQL
no es válido y no se puede analizar.
EJEMPLO PRACTICO INYECCIÓN SQL
Tenemos una aplicación web simple en [Link] que es
vulnerable a los ataques de inyección SQL solo con fines de demostración. El
código de formulario HTML anterior se toma de la página de inicio de
sesión. La aplicación proporciona seguridad básica, como desinfectar el
campo del correo electrónico. Esto significa que nuestro código anterior no
se puede usar para omitir el inicio de sesión.
Supongamos que un atacante proporciona la siguiente entrada
Paso 1: Ingrese xxx@[Link] como la dirección de correo electrónico
Paso 2: Ingrese xxx ') O 1 = 1 -]
Haga clic en el botón Enviar
Serás dirigido al tablero
La instrucción SQL generada será la siguiente
SELECCIONE * DE usuarios DONDE correo electrónico = ' xxx@[Link] ' Y
contraseña = md5 ('xxx') O 1 = 1 -] '); el sgte diagrama detalla como queda
la declaración sql
Otros tipos de ataque de inyección SQL
Las inyecciones SQL pueden hacer más daño que simplemente pasando los
algoritmos de inicio de sesión. Algunos de los ataques incluyen
Eliminar datos
Actualizando datos
Insertar datos
Ejecutar comandos en el servidor que pueden descargar e instalar
programas maliciosos como troyanos
Exportar datos valiosos, como detalles de tarjetas de crédito, correo
electrónico y contraseñas al servidor remoto del atacante
Obtener detalles de inicio de sesión del usuario, etc.
La lista de arriba no es exhaustiva; solo te da una idea de qué inyección SQL
Herramientas de automatización para inyección SQL
En el ejemplo anterior, utilizamos técnicas de ataque manual basadas en
nuestro vasto conocimiento de SQL. Existen herramientas automatizadas
que pueden ayudarlo a realizar los ataques de manera más eficiente y en el
menor tiempo posible. Estas herramientas incluyen
SQLSmack - [Link]
SQLPing
2: [Link]
=0&d=1
SQLMap - [Link]
Bibliografía
[Link]
[Link]
[Link]
[Link]