0% encontró este documento útil (0 votos)
86 vistas29 páginas

Estudio de Inyección SQL en DVWA

SQL Injection

Cargado por

Berna
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
86 vistas29 páginas

Estudio de Inyección SQL en DVWA

SQL Injection

Cargado por

Berna
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1

Universidad Mariano Gálvez de Guatemala


Facultad de Ingeniería en Sistemas De Información
Maestría en Seguridad Informática
Principios de Seguridad Informática
Ing. José Luis Chávez Cortéz

Tarea
Caso de Estudio 5 – Ataques de Inyección SQL

Kevyn Fernando Villanueva Diagut 1793-19-3379


Ada Bani Castañeda González 1793-16-6862
Martin Manuel Pérez López 1793-18-2388
Alfonso Bernabé Sánchez López 1793-18-5299

Plan Sábado Sección “A”


22 de febrero 2024
2

Contenido

Introducción............................................................................................................ 4 1

Ejercicio 01..................................................................................................... 6 1.1 Nivel:

low ........................................................................................................ 6
1.2 Descripción ..................................................................................................... 6 1.3

Evidencia de lo realizado ................................................................................ 6 1.4

Explicación del resultado obtenido.................................................................. 6

2 Ejercicio 02..................................................................................................... 8 2.1

Nivel: low ........................................................................................................ 8

2.2 Descripción ..................................................................................................... 8 2.3

Evidencia de lo realizado ................................................................................ 8 2.4

Explicación del resultado obtenido.................................................................. 8

3 Ejercicio 03................................................................................................... 10 3.1

Nivel: low .......................................................................................................10

3.2 Descripción ....................................................................................................10 3.3

Evidencia de lo realizado ...............................................................................10 3.4

Explicación del resultado obtenido.................................................................10 3.5

Descripción ....................................................................................................12 3.6

Evidencia de lo realizado ...............................................................................12 3.7

Explicación del resultado obtenido.................................................................12 3.8

Descripción ....................................................................................................14 3.9

Evidencia de lo realizado ...............................................................................14

3.10 Explicación del resultado obtenido.................................................................14

3.11 Descripción ....................................................................................................17

3.12 Evidencia de lo realizado ...............................................................................17

3.13 Explicación del resultado obtenido.................................................................17


3.14 Descripción ....................................................................................................19

3.15 Evidencia de lo realizado ...............................................................................20

3.16 Explicación del resultado obtenido.................................................................20

4 Ejercicio 04................................................................................................... 22 4.1

Nivel: medium ................................................................................................22

4.2 Descripción ....................................................................................................22 4.3

Evidencia de lo realizado ...............................................................................23 4.4

Explicación del resultado obtenido.................................................................23 4.5

Nivel: medium ................................................................................................26 4.6

Descripción ....................................................................................................26 4.7

Evidencia de lo realizado ...............................................................................26 4.8

Explicación del resultado obtenido.................................................................26

Conclusiones........................................................................................................ 29

Recomendaciones................................................................................................ 32

Introducción

La seguridad en aplicaciones web es un aspecto crítico en el desarrollo de software

contemporáneo. En este contexto, la Práctica de SQL Injection en Damn Vulnerable Web App

(DVWA) emerge como una experiencia educativa esencial para comprender las

vulnerabilidades y riesgos asociados con la manipulación indebida de consultas SQL en

entornos web.

El propósito fundamental de esta práctica es proporcionar a los maestrandos una

comprensión profunda de la inyección SQL, una de las vulnerabilidades más comunes y


peligrosas en aplicaciones web. Este documento tiene como objetivo guiar a través de los

diferentes niveles de seguridad en DVWA, desde una introducción a los conceptos básicos

hasta técnicas más avanzadas de explotación de vulnerabilidades.

A lo largo del contenido, se abordarán diversas áreas de seguridad en DVWA,

proporcionando una experiencia de aprendizaje secuencial y progresiva.

Cada sección de la práctica se enfocará en aspectos específicos de la inyección SQL,

tales como evadir la autenticación, obtener información privilegiada sobre la base de datos y

exponer contraseñas de usuarios. Cada ejercicio se explicará en detalle, desglosando las

consultas inyectadas y analizando los resultados obtenidos.

El objetivo final de esta práctica va más allá de la mera identificación y explotación de

vulnerabilidades; busca concientizar sobre la importancia de integrar medidas de seguridad

efectivas en el desarrollo de aplicaciones web. Se enfatizará la necesidad de utilizar prácticas

seguras, tales como consultas preparadas, validación de entradas de usuario y la restricción de

privilegios en las cuentas de bases de datos.

En resumen, la Práctica de SQL Injection en DVWA se presenta como una oportunidad

integral para explorar y comprender la inyección SQL, fortaleciendo las habilidades en

seguridad informática y fomentando la adopción de mejores prácticas para garantizar

aplicaciones web más seguras y resilientes.

1 Ejercicio 01

1.1 Nivel: low

1.2 Descripción
En este punto empezaremos a mostrar datos, para ello estableceremos un escenario

siempre cierto (always true) de manera que mostremos todos los resultados, tanto los falsos

como los ciertos. Introducimos la consulta: sql' or '0'='0

1.3 Evidencia de lo realizado

SELECT first_name, last_name FROM users WHERE user_id = 'Sql' or '0'='0'

1.4 Explicación del resultado obtenido


Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “sql' or '0'='0”.

Este parámetro es un ejemplo clásico de una inyección SQL que busca siempre evaluar

como verdadero el resultado esperado. A continuación, se desglosará la consulta y se

proporcionará una explicación del resultado obtenido:

"sql'": Esto es parte de la consulta original y generalmente se espera que termine con

una comilla simple ('), por lo que estamos cerrando la cadena SQL original.

"or": En SQL, la cláusula "OR" actúa como un operador lógico que devuelve verdadero

si al menos una de las condiciones es verdadera.


"'0'='0": Esta es la nueva condición que se ha introducido. Estamos comparando una

cadena ('0') con otra cadena ('0'). Dado que ambas cadenas son iguales, la condición siempre

será verdadera, independientemente de los datos reales en la base de datos.

Como resultado, la consulta se comportará como si la autenticación fuera exitosa, y la

aplicación web mostrará todos los resultados disponibles, tanto los falsos como los

verdaderos.

A continuación, mostramos la ejecución de la consulta:

2 Ejercicio 02

2.1 Nivel: low

2.2 Descripción

Mostrar la versión de la Base de Datos. Sql' or '0'=0 UNION SELECT NULL,

version()#

2.3 Evidencia de lo realizado

SELECT first_name,last_name FROM users WHERE user_id=' sql' or '0'=0 UNION


SELECT NULL, version()#'

2.4 Explicación del resultado obtenido


Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: "Sql' or '0'=0 UNION SELECT NULL, version()#"

Este parámetro es un ejemplo de una inyección SQL que busca mostrar la versión de la

base de datos. A continuación, se detallará la consulta y se proporcionará una explicación del

resultado obtenido:

- "Sql' or '0'=0": Esto es similar a la consulta del ejercicio #1 y generalmente se espera

que termine con una comilla simple ('), cerrando la cadena SQL original. Además, esperando

que nos devuelva siempre un valor verdadero.

- "UNION SELECT NULL, version()#": Esta es la parte que se utiliza para realizar la

unión con otra consulta. En este caso, se está uniendo con una consulta que selecciona "NULL"

como primer campo y la versión de la base de datos ("version()") como segundo campo.

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta


original y evitar que interfiera con la nueva parte que agregamos.

A continuación, mostramos la ejecución de la consulta:

10

3 Ejercicio 03

3.1 Nivel: low

3.2 Descripción

Ver el usuario que actúa en la base de datos. Sql' or '0'=0 UNION SELECT NULL,

user()#

3.3 Evidencia de lo realizado

SELECT first_name,last_name FROM users WHERE user_id='Sql' or '0'=0 UNION

SELECT NULL, user()#'


3.4 Explicación del resultado obtenido
Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “Sql' or '0'=0 UNION SELECT NULL, user()#”

Esta consulta es un ejemplo de inyección SQL que busca obtener información sobre el

usuario que está actuando en la base de datos.

11

- "Sql' or '0'=0": Esto es parte de la consulta inicial y generalmente se espera que

termine con una comilla simple ('), y también nos devuelva un resultado verdadero.

- "UNION SELECT NULL, user()#": Esta es la parte que se utiliza para realizar la unión

con otra consulta. En este caso, se está uniendo con una consulta que selecciona "NULL" como

primer campo y el resultado de la función "user()" como segundo campo.

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta

original y evitar que interfiera con la nueva parte que hemos agregado.

En resumen, la consulta original tiene una estructura de unión que combina los

resultados de dos consultas. La primera parte ("Sql' or '0'=0") siempre es verdadera, como en
los ejercicios anteriores, lo que garantiza que se logren evadir las condiciones de autenticación.

La segunda parte ("UNION SELECT NULL, user()#") realiza la unión con una consulta que

selecciona "NULL" como primer campo y el resultado de la función "user()" como segundo

campo. A continuación, mostramos la ejecución de la consulta:

12

3.5 Descripción

Mostrar el nombre de la Base de Datos. Sql' or '0'=0 UNION SELECT NULL,

database()#

3.6 Evidencia de lo realizado

SELECT first_name,last_name FROM users WHERE user_id='Sql' or '0'=0 UNION

SELECT NULL, database()#'


3.7 Explicación del resultado obtenido
Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “Sql' or '0'=0 UNION SELECT NULL, database()#”

Esta consulta es un ejemplo de inyección SQL que busca obtener información sobre el

nombre de la base de datos.

- "Sql' or '0'=0": Esto es parte de la consulta inicial y generalmente se espera que

termine con una comilla simple ('), y también nos devuelva un resultado verdadero.

13

- "UNION SELECT NULL, database()#": Esta es la parte que se utiliza para realizar la

unión con otra consulta. En este caso, se está uniendo con una consulta que selecciona "NULL"

como primer campo y el resultado de la función "database()" como segundo campo.

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta

original y evitar que interfiera con la nueva parte que hemos agregado.

En resumen, la consulta tiene una estructura de unión que combina los resultados de
dos consultas. La primera parte ("Sql' or '0'=0") siempre es verdadera, como en los ejercicios

anteriores, lo que garantiza que logren evadir las condiciones de autenticación. La segunda

parte ("UNION SELECT NULL, database()#") realiza la unión con una consulta que selecciona

"NULL" como primer campo y el resultado de la función "database()" como segundo campo.

A continuación, mostramos la ejecución de la consulta:

14

3.8 Descripción

Mostrar todas las tablas contenidas en information_schema. sql' and 1=0 UNION

SELECT NULL, table_name from information_schema.tables#

3.9 Evidencia de lo realizado

SELECT first_name,last_name FROM users WHERE user_id='sql' and 1=0 UNION

SELECT NULL, table_name from information_schema.tables#'


3.10 Explicación del resultado obtenido
Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “sql' and 1=0 UNION SELECT NULL, table_name from

information_schema.tables#”

Esta consulta es un ejemplo de inyección SQL que busca obtener información sobre

todas las tablas contenidas en la base de datos "information_schema".

15

- "sql' and 1=0": Esto es parte de la consulta original y generalmente se espera que

termine con una comilla simple ('), cerrando la cadena SQL original. La condición "1=0" se utiliza

para que la parte original de la consulta nunca sea verdadera, asegurando que no se obtengan

resultados de la consulta original.

- "UNION SELECT NULL, table_name from information_schema.tables#": Esta es la

parte que se utiliza para realizar la unión con otra consulta. En este caso, se está uniendo con

una consulta que selecciona "NULL" como primer campo y el nombre de la tabla ("table_name")

de la base de datos "information_schema.tables" como segundo campo.

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta


original y evitar que interfiera con la nueva parte que hemos agregado.

En resumen, la consulta original tiene una estructura de unión que combina los

resultados de dos consultas. La primera parte ("sql' and 1=0") siempre evalúa como falsa

debido a la condición "1=0", lo que garantiza que se evadan las condiciones de autenticación.

La segunda parte ("UNION SELECT NULL, table_name from information_schema.tables#")

realiza la unión con una consulta que selecciona "NULL" como primer campo y el nombre de la

tabla de "information_schema.tables" como segundo campo.

16

A continuación, mostramos la ejecución de la consulta:

17

3.11 Descripción

En este caso podemos observar campos interesantes almacenados en la base de datos

como:

User_privileges, Session_variables, User_privileges, …

Mostrar los campos de las columnas en information_schema. %' and 1=0 union select

null, table_name from information_schema.tables where table_name like 'user%'# 3.12


Evidencia de lo realizado

SELECT first_name,last_name FROM users WHERE user_id='%' and 1=0 union select
null, table_name from information_schema.tables where table_name like 'user%'#'

3.13 Explicación del resultado obtenido


Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “%' and 1=0 union select null, table_name from

information_schema.tables where table_name like 'user%'#”

18

Esta consulta es un ejemplo de inyección SQL que busca obtener información sobre las

tablas de la base de datos "information_schema" que tienen nombres que contienen la cadena

'user'. Ahora, desglosemos la consulta y proporcionemos una explicación del resultado

obtenido:

- "% and 1=0": Esto es parte de la consulta original y generalmente se espera que

termine con un carácter comodín (%) y una condición que siempre sea falsa ("1=0"). La

condición "1=0" se utiliza para garantizar que la parte original de la consulta nunca sea

verdadera, asegurando que no se obtengan resultados de la consulta original.


- "UNION SELECT NULL, table_name from information_schema.tables where

table_name like 'user%'#": Esta es la parte que se utiliza para realizar la unión con otra

consulta. En este caso, se está uniendo con una consulta que selecciona "NULL" como primer

campo y el nombre de la tabla ("table_name") de la base de datos "information_schema.tables"

como segundo campo. La condición "where table_name like 'user%'" se utiliza para filtrar las

tablas cuyos nombres contienen la cadena 'user'.

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta

original y evitar que interfiera con la nueva parte que hemos agregado.

En resumen, la consulta original tiene una estructura de unión que combina los

resultados de dos consultas. La primera parte ("% and 1=0") siempre evalúa como falsa debido

a la condición "1=0", lo que garantiza que se puedan evadir las condiciones de autenticación.

La segunda parte ("UNION SELECT NULL, table_name from information_schema.tables

where table_name like 'user%'#") realiza la unión con una consulta que selecciona "NULL"

como primer campo y el nombre de la tabla de "information_schema.tables" como segundo

campo, pero solo para aquellas tablas cuyos nombres contienen 'user'.

19

A continuación, mostramos la ejecución de la consulta:


3.14 Descripción

Así mostramos todos los campos para cada usuario dentro de la tabla USERS

Mostrar los campos de las columnas.

20

La información que vamos a encontrar son las contraseñas para cada

usuario. Sql' and 1=0 UNION SELECT NULL,

concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users

# 3.15 Evidencia de lo realizado


SELECT first_name,last_name FROM users WHERE user_id='Sql' and 1=0 UNION
SELECT NULL, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users #'

3.16 Explicación del resultado obtenido


Vamos a analizar el parámetro que hemos introducido en este ejercicio:

Parámetro introducido: “Sql' and 1=0 UNION SELECT NULL,

concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users #”

Esta consulta es un ejemplo de inyección SQL que busca obtener información sobre los

usuarios, incluyendo sus nombres y contraseñas, de la tabla "users". Ahora, desglosemos la

consulta y proporcionemos una explicación del resultado obtenido:

21

- "Sql' and 1=0": Esto es parte de la consulta original y generalmente se espera que

termine con una comilla simple ('), cerrando la cadena SQL original. La condición "1=0" se utiliza

para que la parte original de la consulta nunca sea verdadera, asegurando que no se obtengan

resultados de la consulta original.


- "UNION SELECT NULL, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password)

FROM users #": Esta es la parte que se utiliza para realizar la unión con otra consulta. En este

caso, se está uniendo con una consulta que selecciona "NULL" como primer campo y

concatena los campos "first_name", "last_name", "user", y "password" de la tabla "users" como

segundo campo, separados por caracteres de nueva línea ("0x0a").

- "#": El símbolo de almohadilla (#) se utiliza para comentar el resto de la consulta

original y evitar que interfiera con la nueva parte que hemos agregado.

En conclusión, la consulta original tiene una estructura de unión que combina los

resultados de dos consultas. La primera parte ("Sql' and 1=0") siempre evalúa como falsa

debido a la condición "1=0", lo que garantiza que se puedan evadir las condiciones de

autenticación. La segunda parte ("UNION SELECT NULL,

concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users #") realiza la

unión con una consulta que selecciona "NULL" como primer campo y concatena los campos de

la tabla "users" como segundo campo.

A continuación, mostramos la ejecución de la consulta:


22
4 Ejercicio 04

4.1 Nivel: medium

4.2 Descripción

Vemos que el parámetro $id se pasa recoge mediante GET y se pasa a la función

mysql_real_escape_string() la cual antepone barras invertidas a los siguientes caracteres: \x00,

\n, \r, \, ', " y \x1a. Probaremos entonces a realizar la misma consulta, pero sin el carácter

especial comilla-simple ‘. 1 or 1=1

23

4.3 Evidencia de lo realizado

4.4 Explicación del resultado obtenido


En el escenario de vulnerabilidad de inyección SQL de nivel medio en DVWA,

observamos que el parámetro id, estaba limitado a un elemento seleccionable, en donde solo

podíamos seleccionar los id de los usuarios existentes. Sin embargo, lo que se hizo fue

inyectar la consulta desde la estructura html de la página, dentro del valor del atributo “value”

del elemento “<option>…</option>” seleccionado por defecto. Podemos ver la parte resaltada

en la figura anterior.

$id se recoge mediante el método POST y luego se pasa a la función

mysqli_real_escape_string(). Esta función tiene la función de agregar barras invertidas a

ciertos caracteres especiales para prevenir inyecciones SQL. Sin embargo, en este caso, se
omite el carácter especial de comilla-simple ('), permitiendo así la explotación de la

vulnerabilidad.

Pasos Realizados:
24

1. Se proporcionó la entrada al parámetro $id a través del método POST,

simulando así un ataque de inyección SQL.

2. A pesar de que la función mysqli_real_escape_string() se utilizó para sanitizar

la entrada, el carácter especial comilla-simple ('), el cual normalmente sería

escapado, fue excluido intencionalmente.

3. La consulta inyectada 1 or 1=1 se ejecutó con éxito, aprovechando la condición

lógica siempre verdadera (1=1).

4. Se observaron los resultados de la consulta, revelando información de todos los

usuarios almacenados en la base de datos.

En resumen, la consulta inyectada 1 or 1=1 ha evadido la autenticación esperada y ha

recuperado información de todos los usuarios en la base de datos, ya que la condición 1=1

siempre es verdadera. La falta de escape para el carácter de comilla-simple permitió que la

inyección SQL tuviera éxito, subrayando la importancia de implementar técnicas de sanitización

adecuadas y de asegurar una capa de seguridad sólida en el manejo de consultas SQL para

prevenir este tipo de ataques.

25

A continuación, mostramos la ejecución de la consulta:


26

4.5 Nivel: medium

4.6 Descripción

En esta ocasión se hará una prueba de un sistema que hace referencia al nombre de la

tabla en hexadecimal expuesto en un trabajo final de master en la Universidad de Almería

(Waysen Restoin, Javier y Pérez Sánchez, Francisco Javier). Según este trabajo se puede

extraer toda la información de la tabla users haciendo referencia a su nombre en hexadecimal:

0x7573657273.

1 and 1=0 UNION SELECT table_name, column_name from

information_schema.columns where table_name=0x7573657273

4.7 Evidencia de lo realizado


4.8 Explicación del resultado obtenido
En el escenario de vulnerabilidad de inyección SQL de nivel medio en DVWA,

observamos que el parámetro id, estaba limitado a un elemento seleccionable, en donde solo

podíamos seleccionar los id de los usuarios existentes. Sin embargo, lo que se hizo fue

inyectar la consulta

27

desde la estructura html de la página, dentro del valor del atributo “value” del elemento

“<option>…</option>” seleccionado por defecto. Podemos ver la parte resaltada en la figura

anterior.

En este ejercicio de inyección SQL de nivel medio en DVWA, se exploró una

vulnerabilidad que involucra la manipulación del nombre de la tabla en hexadecimal. La

aplicación, al no validar adecuadamente la entrada del usuario, permite la ejecución de

consultas SQL maliciosas.

Pasos Realizados:

1. Se proporcionó la entrada al parámetro $id a través del método POST, imitando

un ataque de inyección SQL.


2. La consulta inyectada 1 and 1=0 UNION SELECT table_name, column_name

from information_schema.columns where table_name=0x7573657273 se

diseñó para extraer información de la tabla users en formato hexadecimal

(0x7573657273).

3. La aplicación ejecutó la consulta inyectada con éxito, revelando los nombres de

las columnas de la tabla users en la base de datos.

En conclusión, la consulta inyectada explotó la vulnerabilidad en la aplicación al

referenciar la tabla users en formato hexadecimal. Esto permitió recuperar los nombres de todas

las columnas de la tabla users en la base de datos, revelando información sensible sobre la

estructura de la base de datos. Este hallazgo destaca la importancia de validar y sanitizar

adecuadamente las entradas del usuario para prevenir ataques de inyección SQL y garantizar la

seguridad de la aplicación.

28

A continuación, mostramos la ejecución de la consulta:

29

Conclusiones
En el transcurso de la práctica de SQL Injection en Damn Vulnerable Web App (DVWA),

se han identificado hallazgos clave que arrojan luz sobre la vulnerabilidad crítica de inyección

SQL y sus implicaciones en la seguridad de las aplicaciones web. Esta evaluación se presenta

de manera objetiva, sin perder de vista el propósito de comprender y abordar las

vulnerabilidades asociadas con este tipo de ataques.

Hallazgos Clave:

Los datos y descubrimientos más destacados revelan la capacidad de evadir la

seguridad y obtener acceso no autorizado a información sensible mediante técnicas de

inyección SQL. Estos hallazgos respaldan de manera concluyente la hipótesis de que la

inyección SQL puede comprometer la integridad y confidencialidad de los datos en aplicaciones

web.

La capa de seguridad en aplicaciones web, particularmente en el manejo de consultas

SQL, juega un papel importante en la mitigación de vulnerabilidades. La falta de validación y

sanitización adecuadas de las entradas del usuario deja a las aplicaciones expuestas a ataques

de inyección SQL. Los resultados de esta práctica subrayan la importancia de implementar

medidas efectivas en esta capa, como consultas preparadas, para prevenir con éxito ataques

de inyección SQL.

30

Relación con Objetivos de la Investigación:

Cada uno de los ejercicios realizados en DVWA estuvo directamente alineado con los

objetivos de la investigación, proporcionando una comprensión detallada de cómo estas

vulnerabilidades pueden ser explotadas y subrayando la necesidad de fortalecer las defensas

contra ataques de inyección SQL.


Implicaciones:

Las implicaciones de estos hallazgos son significativas para el campo de la seguridad

informática. La capacidad de manipular consultas SQL puede tener consecuencias

perjudiciales, desde el acceso no autorizado hasta la exposición de información confidencial.

La importancia de abordar estas vulnerabilidades radica en la preservación de la integridad y

seguridad de las aplicaciones web, siendo esencial para la protección de datos sensibles.

Limitaciones y Áreas para Futura Investigación:

Es fundamental reconocer las limitaciones de esta práctica, como el entorno controlado

de DVWA. Futuras investigaciones podrían expandir el alcance a entornos del mundo real,

explorar nuevas variantes de inyección SQL y desarrollar estrategias de mitigación más

avanzadas para fortalecer aún más la seguridad en aplicaciones web.

La conclusión reafirma la importancia de abordar activamente las vulnerabilidades de

inyección SQL en el desarrollo de aplicaciones web. La seguridad debe considerarse como una

31

prioridad central para evitar riesgos potenciales y proteger la confianza de los usuarios en

entornos digitales cada vez más interconectados.

En resumen, esta investigación subraya la necesidad crítica de implementar prácticas de

seguridad robustas para prevenir y mitigar ataques de inyección SQL. Al reconocer la magnitud

de las amenazas potenciales, se convierte en un llamado a la acción para que la comunidad de

desarrollo y seguridad informática refuerce sus esfuerzos y adopte enfoques proactivos hacia la

protección de aplicaciones web. La inyección SQL no solo es una vulnerabilidad, sino una

advertencia constante sobre la urgencia de mantener la seguridad digital en un entorno en


constante evolución.

32

Recomendaciones

1. Implementación Rigurosa de Consultas Preparadas:

• Fundamentación: La adopción de consultas preparadas es esencial para prevenir

inyecciones SQL al parametrizar las consultas y evitar la concatenación de datos de

entrada del usuario directamente en las consultas SQL.

• Relación con Hallazgos: Aborda directamente la vulnerabilidad de inyección SQL,

ofreciendo una barrera efectiva contra los ataques.

2. Validación y Sanitización de Entradas de Usuario:

• Fundamentación: La validación rigurosa y la sanitización de las entradas del usuario

reducen el riesgo de inyecciones SQL al garantizar que solo se acepten datos válidos y

seguros.

• Relación con Hallazgos: Contrarresta la manipulación de entradas del usuario,

fortaleciendo la capa de seguridad contra ataques.

3. Auditorías Regulares de Seguridad:

• Fundamentación: Realizar auditorías periódicas permite identificar y abordar

rápidamente nuevas vulnerabilidades o posibles brechas de seguridad.

• Relación con Hallazgos: Contribuye a mantener un entorno seguro y a prevenir futuros


ataques de inyección SQL.

4. Capacitación Continua del Personal de Desarrollo:


33

• Fundamentación: La formación constante en prácticas seguras de desarrollo sensibiliza

al equipo sobre la importancia de mitigar las vulnerabilidades, como la inyección SQL. •

Relación con Hallazgos: Mejora la cultura de seguridad en el desarrollo de software.

5. Implementación de Cortafuegos de Aplicación Web (WAF):

• Fundamentación: Los WAF pueden detectar y bloquear patrones de inyección SQL,

proporcionando una capa adicional de seguridad.

• Relación con Hallazgos: Refuerza la protección contra ataques de inyección SQL a nivel

de aplicación.

6. Seguimiento Continuo y Evaluación de las Medidas de Seguridad:

• Fundamentación: Establecer métricas y evaluar regularmente la efectividad de las

medidas de seguridad permite ajustar y mejorar las defensas.

• Relación con Hallazgos: Proporciona una forma de medir el éxito y adaptarse a las

amenazas emergentes.

7. Priorización de Correcciones según el Nivel de Riesgo:

• Fundamentación: Enfocarse en corregir las vulnerabilidades de inyección SQL de mayor

riesgo primero garantiza una asignación eficiente de recursos.


• Relación con Hallazgos: Aborda de manera proactiva las vulnerabilidades más críticas.

8. Documentación Exhaustiva de Buenas Prácticas de Seguridad:

• Fundamentación: Proporcionar orientación clara y documentar las mejores prácticas de

seguridad facilita su adopción y cumplimiento por parte del equipo de desarrollo. • Relación

con Hallazgos: Promueve una cultura de seguridad desde el diseño.

34

9. Consideración de Posibles Obstáculos:

• Fundamentación: Reconocer posibles desafíos, como la resistencia al cambio o la

limitación de recursos, ayuda a anticipar y abordar obstáculos en la implementación de

medidas de seguridad.

• Relación con Hallazgos: Demuestra una comprensión realista de la implementación de

recomendaciones.

10. Involucramiento Activo de las Partes Interesadas:

• Fundamentación: Fomentar la participación y el compromiso de todas las partes

interesadas fortalece la implementación exitosa de medidas de seguridad. •

Relación con Hallazgos: Aborda la necesidad de una cooperación integral para

garantizar la seguridad efectiva en aplicaciones web.

También podría gustarte