Inyección SQL: El Hackeo Más Sencillo y Peligroso que Existe

Migma
31 Jul 202415:46

Summary

TLDREl vídeo explica la vulnerabilidad de inyección SQL, una técnica utilizada en hacking que puede obtener información de bases de datos. Muestra cómo ataques simples y poco sofisticados, como el de Sony Pictures, pueden tener consecuencias devastadoras. Se detalla cómo funciona SQL, las bases de datos relacionales y cómo una inyección SQL puede permitir a un atacante obtener datos o incluso borrar la base de datos. Además, se ofrece una solución sencilla para prevenir estas inyecciones mediante la parametrización de consultas.

Takeaways

  • 😱 Sony Pictures fue víctima de un ataque que expuso información confidencial de más de un millón de usuarios, demostrando la importancia de la seguridad cibernética.
  • 💻 Los ataques cibernéticos a Sony Pictures, Herland Paying Systems, Talk Talk y British Airways utilizaron técnicas sencillas de inyección SQL.
  • 🔐 Inyección SQL es una técnica usada para manipular consultas a una base de datos, permitiendo a los atacantes obtener acceso no autorizado.
  • 📚 Las bases de datos SQL son extremadamente influyentes y se utilizan ampliamente debido a su capacidad para modelar la realidad de manera sencilla.
  • 🧠 Es fundamental comprender cómo funciona una base de datos SQL y cómo se relacionan las tablas, filas y columnas.
  • 🔑 Las consultas SQL como SELECT, INSERT, UPDATE y DELETE son herramientas poderosas para manipular y recuperar datos.
  • 🚫 La falta de prácticas seguras de programación puede dejar las bases de datos vulnerables a ataques de inyección SQL.
  • 🔒 Para prevenir la inyección SQL, se deben utilizar parámetros en las consultas SQL en lugar de concatenar directamente la entrada del usuario.
  • 🎓 Este vídeo tiene un enfoque educativo para mostrar la facilidad con la que se pueden realizar ataques de inyección SQL y cómo evitarlos.
  • 🔎 La inyección SQL puede tener consecuencias graves, como el robo de información confidencial o la eliminación de bases de datos enteras.

Q & A

  • ¿Qué sucedió una mañana en las oficinas de Sony Pictures?

    -Una mañana en las oficinas de Sony Pictures, la información confidencial de más de un millón de usuarios fue expuesta, incluyendo nombres, direcciones de correo electrónico y contraseñas en texto claro.

  • ¿Cómo se pensó inicialmente que fue el ataque a Sony Pictures?

    -Inicialmente, se pensó que el ataque a Sony Pictures fue ejecutado por un grupo de hackers extremadamente hábiles utilizando técnicas avanzadas.

  • ¿Cuál fue la realidad del ataque a Sony Pictures?

    -La realidad del ataque a Sony Pictures fue mucho más simple y alarmante, ya que se utilizaron solo unas pocas líneas de código para obtener datos de millones de personas.

  • ¿Qué es la inyección SQL y cómo afecta a las bases de datos?

    -La inyección SQL es una técnica usada para atacar bases de datos relacionales, permitiendo a los atacantes ejecutar consultas maliciosas y obtener acceso no autorizado a información sensible.

  • ¿Cuáles son las diferencias entre bases de datos SQL y NoSQL?

    -Las bases de datos SQL, también conocidas como relacionales, utilizan el lenguaje SQL y organizan la información en tablas con filas y columnas. Las bases de datos NoSQL, por otro lado, no siguen el modelo relacional y pueden tener estructuras de datos más flexibles y diversas.

  • ¿Cómo se crea una tabla en una base de datos SQL para almacenar usuarios?

    -Para crear una tabla en una base de datos SQL para almacenar usuarios, se utiliza la instrucción 'CREATE TABLE' seguido de la definición de las columnas, como ID, nombre de usuario y contraseña.

  • ¿Qué es un ataque de inyección SQL y cómo se puede prevenir?

    -Un ataque de inyección SQL es cuando un atacante introduce código SQL malicioso en un formulario de login o en otro punto de entrada de datos para manipular las consultas de la base de datos. Se puede prevenir usando parámetros en las consultas, lo que evita que el código del atacante se ejecute directamente.

  • ¿Cómo se puede usar la inyección SQL para obtener acceso a una base de datos sin la contraseña correcta?

    -Mediante la inyección SQL, un atacante podría introducir una consulta que modifique la condición de verificación de la contraseña, como 'OR 1=1', lo que siempre se evalúa como verdadero y permite el acceso al sistema.

  • ¿Qué es un comentario en SQL y cómo se relaciona con la inyección SQL?

    -Un comentario en SQL es una parte del código que el intérprete de SQL ignora, generalmente usada para dejar anotaciones en el código. En el contexto de la inyección SQL, los comentarios se pueden usar para desactivar parte del código SQL que sigue, permitiendo así a los atacantes ejecutar comandos maliciosos.

  • ¿Cómo se pueden usar las uniones en consultas SQL para obtener información sensible?

    -Las uniones en consultas SQL se pueden usar para combinar resultados de múltiples consultas en una sola. En el contexto de la inyección SQL, esto puede ser explotado para obtener información sensible de la base de datos al inyectar una consulta que devuelva datos no solicitados.

  • ¿Cómo se puede proteger una aplicación web contra ataques de inyección SQL?

    -Para proteger una aplicación web contra ataques de inyección SQL, se deben usar parámetros en las consultas, validar y sanitizar los datos de entrada, usar sistemas de tipos fuertes y evitar la ejecución directa de consultas generadas por el usuario.

Outlines

00:00

😱 Ataques de Inyección SQL

El primer párrafo aborda la preocupante realidad de los ataques de inyección SQL, un tema relevante en la seguridad informática. Se menciona el incidente de Sony Pictures, donde la información confidencial de más de un millón de usuarios fue expuesta. Se destaca que estos ataques no siempre requieren técnicas sofisticadas y que la realidad puede ser más simple y alarmante. Se introduce el concepto de inyección SQL y se enfatiza que el vídeo tiene fines educativos y que no se debe intentar en un entorno real. Se explica que las bases de datos SQL son ampliamente utilizadas y se presentan sus ventajas, como la facilidad de modelar la realidad y manipular información.

05:01

💻 Demostración de Inyección SQL

El segundo párrafo presenta una demostración práctica de cómo funciona la inyección SQL. Se describe un formulario de inicio de sesión y cómo se ejecuta una consulta SQL para verificar las credenciales del usuario. Se explica que si no se siguen prácticas adecuadas, es posible manipular la consulta para obtener acceso no autorizado o incluso borrar información de la base de datos. Se muestra un ejemplo donde se inserta una consulta maliciosa que permite bypassear la autenticación y se resalta la importancia de entender estos riesgos para prevenirlos.

10:03

🔍 Explorando la Inyección SQL

Este tercer párrafo profundiza en las capacidades de la inyección SQL, mostrando cómo se puede manipular una consulta para obtener información confidencial, como contraseñas de otros usuarios, o para realizar operaciones no deseadas como borrar la base de datos. Se detalla un ejemplo en el que se cierra prematuramente la consulta original y se anexa una nueva consulta que se ejecuta en la base de datos, demostrando la potencia y peligro de esta técnica. Se enfatiza la importancia de manejar correctamente las consultas para evitar vulnerabilidades.

15:04

🛠 Solución de la Inyección SQL

El cuarto y último párrafo trata sobre cómo prevenir la inyección SQL. Se presenta una solución simple y efectiva que consiste en usar parámetros en lugar de insertar directamente la entrada del usuario en la consulta. Se explica que esta práctica evita que se ejecuten consultas no deseadas y se sugiere que los programadores deberían conocer y aplicar esta técnica. Se cierra el vídeo con un llamado a la acción para que los espectadores compartan sus opiniones sobre el contenido práctico y se despide al público.

Mindmap

Keywords

💡Sony Pictures

Sony Pictures es una de las mayores productoras de cine y televisión del mundo. En el vídeo, se menciona un incidente donde la información confidencial de más de un millón de usuarios fue expuesta, lo que ilustra la importancia de la seguridad de datos en grandes corporaciones.

💡Inyección SQL

La inyección SQL es una técnica utilizada en hacking para manipular consultas a bases de datos a través de entradas maliciosas. El vídeo explica cómo, si no se implementan medidas de seguridad adecuadas, un atacante podría aprovecharse de la inyección SQL para obtener datos sensibles o incluso borrar información de la base de datos.

💡Base de datos SQL

Las bases de datos SQL, también conocidas como relacionales, utilizan el lenguaje SQL para organizar y manipular información en tablas. El vídeo destaca cómo el lenguaje SQL es poderoso y flexible, pero también puede ser vulnerable a ataques si no se usa correctamente.

💡Lenguaje SQL

El Lenguaje SQL (Structured Query Language) es el estándar para manipular y recuperar datos en bases de datos relacionales. En el vídeo, se describe cómo se utiliza para crear tablas, insertar datos, y realizar consultas, pero también se muestra cómo puede ser explotad para inyecciones SQL.

💡Contraseñas en texto claro

Las contraseñas en texto claro son contraseñas que no están encriptadas y, por lo tanto, fácilmente legibles. El vídeo menciona que las contraseñas expuestas en el ataque a Sony Pictures estaban en texto claro, lo que representa un gran riesgo de seguridad.

💡Comentarios SQL

En el contexto del vídeo, los comentarios SQL se utilizan para ignorar parte del código SQL que no debería ejecutarse. Esto se muestra como una técnica en inyecciones SQL para manipular consultas y evitar que se realicen comprobaciones de seguridad.

💡Parámetros

Los parámetros en programación son valores que se pasan a una función o procedimiento para personalizar su comportamiento. En el vídeo, se explica cómo usar parámetros en consultas SQL puede prevenir la inyección SQL, al asegurarse de que los datos ingresados por el usuario se traten como datos y no como parte del código SQL.

💡Validación de entradas

La validación de entradas es el proceso de verificar que los datos proporcionados por el usuario son válidos y seguros antes de que se utilicen en una aplicación. El vídeo sugiere que la falta de validación de entradas es una de las causas de la vulnerabilidad a la inyección SQL.

💡Brilliant

Brilliant es una plataforma de aprendizaje interactivo mencionada en el vídeo como un medio para aprender sobre temas complejos de manera divertida y accesible. Aunque no está directamente relacionada con la inyección SQL, se presenta como un recurso para aprender sobre informática y otros temas.

💡Cifrado de contraseñas

El cifrado de contraseñas es el proceso de convertir contraseñas en un formato que no se puede leer fácilmente sin la clave adecuada. El vídeo menciona que, en un entorno real, las contraseñas deberían estar cifradas para proteger la información de los usuarios.

Highlights

Un ataque a Sony Pictures expuso información confidencial de más de un millón de usuarios.

El ataque a Sony Pictures fue ejecutado con solo unas pocas líneas de código.

Se confundió la simplicidad del ataque por sofisticación, lo que es alarmante.

Otras empresas como Herland, Talk Talk y British Airways sufrieron ataques similares.

Se explica que la inyección SQL es una técnica sencilla pero peligrosa.

El vídeo es educativo y se desaconseja intentar inyecciones SQL en entornos reales.

Se diferencian dos tipos de bases de datos: SQL y NoSQL.

Las bases de datos SQL son muy influyentes y se modelan de manera similar a la realidad.

Se describe cómo se organiza la información en bases de datos SQL.

Se explica el uso de SQL para manipular y recuperar datos de manera simple.

Se menciona que mal utilizado, SQL puede ser peligroso.

Se crea un ejemplo con Python para mostrar la facilidad de la inyección SQL.

Se explica cómo una inyección SQL puede permitir el acceso a información sin la contraseña correcta.

Se muestra cómo una simple cadena de texto puede alterar la ejecución de una consulta SQL.

Se demuestra la capacidad de borrar toda una base de datos a través de una inyección SQL.

Se explica cómo obtener la contraseña de un usuario a través de una inyección SQL.

Se presenta una solución simple para evitar inyecciones SQL: el uso de parámetros en consultas.

Se invita a los espectadores a dejar comentarios sobre si les gustan este tipo de vídeos prácticos.

Transcripts

play00:00

era una mañana como cualquier otra en

play00:01

las oficinas de Sony pictures una de las

play00:04

mayores productoras de cine y televisión

play00:06

del mundo los empleados estaban ocupados

play00:08

con sus tareas diarias cuando de repente

play00:10

se desató el caos la información

play00:12

confidencial de más de un millón de

play00:13

usuarios había sido expuesta nombres

play00:16

direcciones de correo electrónico y

play00:18

contraseñas en texto claro de primeras

play00:20

todo el mundo pensaba que debía tratarse

play00:21

de un ataque altamente sofisticado

play00:24

ejecutado por un grupo de hackers

play00:26

extremadamente hábiles utilizando

play00:27

técnicas avanzadas Pero la realidad era

play00:30

mucho más simple y en cierto modo mucho

play00:32

más alarmante para el ataque a Sony

play00:34

pictures apenas se utilizaron unas pocas

play00:36

líneas de código para obtener los datos

play00:38

de millones de personas y como el caso

play00:39

de Sony pictures tenemos otros muy

play00:41

similares a empresas como herland paying

play00:44

systems en 2008 Talk Talk en 2015 o

play00:47

British airways en 2018 todos estos

play00:49

ataques por muy desastrosos que fueran

play00:51

utilizaron una técnica muy sencilla y de

play00:54

la que vamos a hablar en el vídeo de hoy

play00:55

la inyección sql de la que probablemente

play00:58

muchos hayáis oído hablar pero que

play01:00

también probablemente no sepáis

play01:01

exactamente en qué consiste veremos lo

play01:03

potente que es esto ya que puedes

play01:05

obtener todo lo que quieras de una base

play01:07

de datos simplemente escribiendo en un

play01:09

formulario de login cabe aclarar Que

play01:11

obviamente Este vídeo es únicamente con

play01:13

fines educativos y que bajo ningún

play01:15

concepto debes intentar esto en un

play01:17

entorno real ya que te puedes meter en

play01:19

problemas muy serios lo que sí que

play01:21

haremos es una prueba en un entorno que

play01:22

he creado con python para mostraros lo

play01:24

fácil que es hacer esto si no se toman

play01:26

las medidas correctas para entender esto

play01:28

primero tenemos que ver Qué es y cómo

play01:30

funciona exactamente una base de datos a

play01:33

día de hoy podemos diferenciar entre dos

play01:35

bases de datos las sql y las no sql como

play01:38

entenderéis la influencia de sql en el

play01:40

mundo de las bases de datos es bastante

play01:42

grande de hecho hasta hace poco no

play01:44

existía otra cosa como en este vídeo

play01:46

vamos a hablar de inyecciones sql

play01:47

obviamente nos vamos a centrar en las

play01:49

bases de datos sql las bases de datos

play01:51

sql también conocidas como bases de

play01:53

datos relacionales utilizan el lenguaje

play01:56

sql structured query Language o lenguaje

play01:59

de resulta estructurado y organizan la

play02:01

información en Tablas con filas y

play02:03

columnas que se relacionan entre sí Por

play02:05

qué sql es tan influyente básicamente

play02:08

Porque modela la realidad de una forma

play02:09

muy simple y muy parecida a como se

play02:11

haría en la vida real Aunque más

play02:13

adelante veremos que mal utilizado puede

play02:15

dar auténtico miedo lo que puedes hacer

play02:17

con esto en sql tenemos tablas con filas

play02:19

y columnas muy similar a lo que

play02:21

podríamos tener en un Excel por ejemplo

play02:23

imagina que necesitamos crear una tabla

play02:25

para ver los usuarios registrados en

play02:27

nuestra aplicación en un Excel sería

play02:29

algo así siendo que tenemos tres

play02:31

columnas con un ID un nombre de usuario

play02:33

y una contraseña y cada fila pues es un

play02:36

usuario en sql esto es muy similar aquí

play02:38

tenemos una tabla llamada usuarios que

play02:40

almacena al usuario y la contraseña de

play02:42

cada persona además de un ID que

play02:44

identifica a cada uno la ventaja de sql

play02:47

respecto a un Excel es lo sencillo que

play02:49

es manipular estas tablas y leer la

play02:50

información si manejas bien la sintaxis

play02:52

del lenguaje que además no es demasiado

play02:55

complicada para definir y modificar la

play02:57

estructura de las bases de datos tenemos

play02:58

create alter y Drop para manipular los

play03:01

datos tenemos insert update y delete

play03:04

para realizar consultas y recuperar

play03:05

datos tenemos Select y para filtrar

play03:08

datos tenemos algunas como we Group Buy

play03:10

habin orderby entre otras por ejemplo

play03:13

para hacer lo que hemos hecho en Excel

play03:15

antes lo haríamos de la siguiente manera

play03:17

primero crearíamos una tabla usuarios

play03:18

tal y como lo he hecho aquí con create

play03:20

luego insertaría los datos con insert y

play03:23

con Select podríamos ver esos datos este

play03:25

Select mostraría todos los registros de

play03:27

la tabla que en este caso sería solo uno

play03:29

si quisiéramos Buscar un usuario en

play03:30

específico podríamos usar la cláusula we

play03:33

como veis es un lenguaje bastante fácil

play03:34

de entender y sobre todo a primera vista

play03:36

inofensivo en qué momento puede esto

play03:39

volverse peligroso Bueno pues ahora

play03:41

vamos a ir directamente al ejemplo que

play03:42

he creado con python para ver cuál es el

play03:44

gran problema que tiene esto si no se

play03:46

usan las prácticas adecuadas Por cierto

play03:48

si te gusta aprender de la forma en que

play03:49

hacemos en estos vídeos más entretenida

play03:51

y sin excesiva teoría probablemente te

play03:54

interese el patrocinador del vídeo de

play03:55

hoy si eres una persona que como yo le

play03:57

gusta estar constantemente aprendiendo

play03:59

brilliant es para ti brilliant es una

play04:01

plataforma de aprendizaje interactivo

play04:03

donde realmente puedes sumergirte en

play04:05

temas complejos de manera divertida y

play04:07

accesible una de las cosas que más me

play04:09

gusta de brilliant es que no se trata

play04:11

solo de memorizar información Se trata

play04:13

de entender y aplicar lo que aprendes y

play04:15

es la principal baza de brilliant sobre

play04:17

otras plataformas de aprendizaje en

play04:18

brilliant hay muchos cursos de bastantes

play04:20

temáticas distintas pero como es obvio

play04:22

nos vamos a centrar en los cursos de

play04:24

informática briliant es una plataforma

play04:26

que es útil da igual en el nivel en el

play04:27

que te encuentres algunos cursos son

play04:29

bastante básicos si por ejemplo quieres

play04:31

aprender a programar puedes empezar

play04:33

construyendo programas en python con un

play04:35

editor integrado que facilita el

play04:36

aprendizaje de conceptos simples como

play04:38

son bucles y variables si ya sabes

play04:40

programar Quizás te pueden interesar

play04:42

cursos de estructuras de datos Y

play04:43

algoritmos para aprender o reforzar

play04:46

conocimientos y si aún quieres ir más

play04:48

allá Yo he estado haciendo los cursos de

play04:50

Inteligencia artificial y redes

play04:51

neuronales Y la verdad es que me han

play04:53

encantado ya que te permiten entender

play04:55

Cómo funcionan los modelos de lenguaje

play04:56

como chat gpt de una manera muy práctica

play04:59

y entre retenida y como estos pues

play05:01

tenemos muchos más por lo que aunque no

play05:03

estés seguro de si esto te interesa o no

play05:05

puedes probar todo lo que brilliant

play05:07

tiene para ofrecer de forma gratuita

play05:08

durante 30 días para eso debéis acceder

play05:10

desde este enlace brilliant.org bar

play05:13

migma o también la tenéis abajo en la

play05:15

descripción además si decides

play05:17

suscribirte tendrás un 20% de descuento

play05:19

en la suscripción anual Así que yo que

play05:21

tú no perdías tu oportunidad de aprender

play05:23

de manera efectiva y divertida con

play05:25

brilliant y ahora sí sigamos con el

play05:28

vídeo Vale pues vamos con ello como veis

play05:30

aquí tenemos el código que hace lo que

play05:33

vamos a a probar ahora ahora os enseñaré

play05:35

exactamente lo que es es un formulario

play05:37

básicamente pero primero vamos a ver la

play05:39

base de datos como veis aquí tengo una

play05:41

query sql que nos muestra simplemente lo

play05:43

que hay en la base de datos que si la

play05:44

ejecuto podéis ver queé es lo que os he

play05:46

enseñado Antes tenemos un usuario con un

play05:49

ID que es uno que esto se pone

play05:51

automáticamente luego el nombre del

play05:52

usuario la contraseña la contraseña si

play05:54

fuese una aplicación normal y y que

play05:57

fuese medianamente decente estaría

play05:59

cifrada pero aquí para que el ejemplo

play06:00

sea más claro y se entienda mejor pues

play06:02

no lo he cifrado además Sería más

play06:04

trabajo pues simplemente este código os

play06:06

lo dejaré en la descripción por si le

play06:08

queréis echar un ojo pero vamos es es un

play06:11

formulario bastante simple esto sería el

play06:13

código en python y esto sería el html de

play06:16

login bastante simple también y vamos a

play06:21

ejecutarlo vale como veis aquí lo

play06:23

tenemos es un login normal y corriente y

play06:26

si nos fijamos en la consola Nos vamos

play06:28

aquí ejecutamos la query tenemos que el

play06:30

usuario es misma y la contraseña es test

play06:32

vamos a comprobar y contraseña test

play06:36

damos a login y nos pone que el el

play06:37

inicio de sesión se han completado se ha

play06:39

completado correctamente nos pone aquí

play06:41

bienvenido normalmente nos pone el

play06:43

nombre del usuario que ya veréis que con

play06:45

esto ahora podemos hacer cosas y que nos

play06:48

hemos logrado correctamente Además yo

play06:49

aquí a modo de Test os quiero enseñar

play06:52

Cuál es la query que se está ejecutando

play06:54

realmente por detrás eh si nos vamos al

play06:56

código esta sería la query Y si os dais

play06:58

cuenta la query no es siempre la misma

play07:00

bueno en este caso Sí porque esto está

play07:02

mal A ver espérate vale esta sería la

play07:05

query si os dais cuenta la query no es

play07:07

siempre la misma lo que estamos haciendo

play07:08

aquí es lo que os comentaba antes

play07:11

seleccionamos un usuario de la tabla

play07:13

usuarios qué usuario Bueno pues el

play07:15

usuario que sea igual al usuario que

play07:17

estamos insertando pero su contraseña

play07:19

también tiene que ser igual a la

play07:20

contraseña que estamos insertando va

play07:22

fila por fila si coincide una cosa y la

play07:24

otra no pues no nos deja es bastante

play07:26

sencillo pero esto tiene un problema los

play07:28

que entend dais un poco de programación

play07:30

ya os habréis dado cuenta que en general

play07:33

código tiene unos pocos problemas pero

play07:35

hay uno bastante evidente Así que vamos

play07:37

a probar con una cosa vamos a irnos para

play07:39

atrás y en este caso vamos a probar la

play07:42

siguiente contraseña ponemos aquí una

play07:43

comilla ponemos aquí un or 1 = 1 guion

play07:48

guion vale luego os explicaré por qué

play07:50

estoy haciendo esto pero vamos a probar

play07:51

a ver qué pasa vaya nos deja entrar si

play07:53

os dais cuenta aquí nos pone la query

play07:56

que hemos utilizado y efectivamente para

play07:57

que veáis que es esto lo que se está

play08:00

ejecutando bueno nos he enseñado lo que

play08:01

pasa si yo pongo cualquier otra cosa que

play08:03

nos pone que el usuario y la contraseña

play08:05

es incorrecta O sea que no es que nos

play08:06

esté dejando entrar con cualquier cosa

play08:07

que pongamos vamos a probar otra vez

play08:09

esto aquí vale Qué es lo que está

play08:11

pasando aquí si os habéis fijado antes

play08:13

lo primero que he puesto a la hora de

play08:14

poner la contraseña es una comilla una

play08:16

comilla que es justamente lo que estoy

play08:18

poniendo aquí básicamente la contraseña

play08:20

es esto de aquí por qué bueno la

play08:22

contraseña la está cogiendo como si no

play08:23

estuviese poniendo nada y luego está

play08:25

haciendo una comprobación eh que

play08:27

básicamente Es que la contraseña sea

play08:28

nada lo cual es incorrecto o que uno sea

play08:31

igual a uno lo cual es correcto Y luego

play08:33

por qué pongo esto aquí Bueno estos dos

play08:36

iones de aquí son en sql son comentarios

play08:39

Entonces si os dais cuenta aquí en el

play08:40

editor todo lo que pongo a partir de los

play08:42

comentarios no hace nada entonces así me

play08:46

evito que me coja esta comilla y me dé

play08:48

error si yo eh No no comentas esta parte

play08:51

me estaría cogiendo una comilla aquí y

play08:53

por temas de sintaxis me estaría

play08:55

diciendo Oye aquí pasa algo raro

play08:57

entonces en inyecciones sql este el tema

play08:59

de los comentarios es super importante y

play09:01

claro si os dais cuenta yo puedo poner

play09:03

comentos aquí y todo lo que se ponga a

play09:05

partir de aquí no hace nada Entonces qué

play09:07

pasa si yo como nombre de usuario cierro

play09:10

comillas y luego comento todo lo que

play09:12

viene aquí pues en ese caso me estaría

play09:14

comprobando si existe un usuario llamado

play09:16

mma y ya está No creo que se entiende

play09:19

vamos a probar desde la consola sería

play09:22

simplemente como si yo aquí pongo we

play09:24

usuario to la misma veis me devuelve lo

play09:27

mismo programa La verdad es que es

play09:28

bastante simple y lo único que hace es

play09:30

comprobar si existe un usuario Bueno más

play09:32

que si existe un usuario lo lo único que

play09:34

hace es comprobar si la query devuelve

play09:36

algo si yo aquí pongo we usuario igual a

play09:39

cualquier cosa Random pues no devuelve

play09:40

nada entonces el programa no se sigue

play09:42

ejecutando bueno o nos dice que que que

play09:44

que ha fallado Entonces vamos a probar

play09:46

otra cosa más fijaos si yo aquí pongo we

play09:49

usuario migma cierro las comillas otra

play09:52

vez y comento lo que viene detrás aquí

play09:54

ya puedo poner podría poner esto pero

play09:56

aquí puedo poner cualquier cosa como

play09:57

veis nos deja entrar que lo que está

play09:59

pasando aquí pues que estamos cerrando

play10:01

las comillas antes de tiempo otra vez

play10:02

esto es muy importante y luego estamos

play10:04

comentando todo lo demás o sea todo esto

play10:06

lo ignora todo lo que viene a partir de

play10:08

aquí lo ignora esto es bastante potente

play10:10

pero es que puede ir aún mucho más allá

play10:12

podemos llegar incluso a borrar todo lo

play10:14

que hay en la base de datos vamos a ver

play10:16

cómo vamos a borrar esto qué es lo que

play10:18

pasa si yo aquí lo que hago es cerrar

play10:20

las comillas O sea a partir de aquí aquí

play10:22

me está pidiendo que inserte un nombre

play10:24

de usuario aquí puedo poner Yo cualquier

play10:26

cosa pero qué pasa Yo si cierro las

play10:27

comillas pongo un punto y coma que es lo

play10:29

que sql interpreta como para que se

play10:32

ejecuta otra query distinta y la query

play10:35

que ejecuto es un delete qué es lo que

play10:36

pasaría Bueno vamos a probarlo aquí

play10:39

pongo una comilla pongo dos puntos Y a

play10:42

partir de aquí ya puedo ejecutar otra

play10:44

query distinta Como por ejemplo un

play10:46

delete from usuarios pongo un punto y

play10:49

coma para que se ejecute esto y comento

play10:51

todo lo que viene por detrás qué es lo

play10:53

que pasará aquí Bueno lo que va a pasar

play10:55

es que nos va a decir que la contraseña

play10:57

es incorrecta porque no existe ningún

play10:58

usuar que se llame así pero qué pasará

play11:00

más allá de eso vamos a ver

play11:02

efectivamente nos pone que el usuario el

play11:04

nombre de usuario y la contraseña son

play11:05

incorrectos pero vamos a ver la base de

play11:09

datos otra vez a ver qué es lo que ha

play11:11

pasado como veis no hay usuarios hemos

play11:14

borrado todo lo que había en la base de

play11:16

datos simplemente insertando una query

play11:19

en la base de datos simplemente o sea

play11:21

simplemente poniendo un una query la en

play11:23

en un formulario hemos borrado todo lo

play11:25

que había en la base de datos en este

play11:27

caso era solo un usuario pero Si

play11:28

hubiesen sido 100 1000 100,000 los

play11:31

hubiésemos borrado absolutamente todos

play11:33

esto ya de por sí es tremendo Y la

play11:36

verdad es que más peligroso que esto

play11:38

pocas cosas hay pero vamos a intentar

play11:40

hacer una query un poquito más compleja

play11:42

para hacer una cosa que también es

play11:43

bastante interesante que es en lugar de

play11:45

que simplemente nos deje entrar que

play11:46

también nos diga Cuál es la contraseña

play11:48

del usuario que que a la que hemos

play11:50

accedido o sea sin nosotros tener la

play11:52

necesidad de poner directamente la

play11:53

contraseña que nos la diga cómo hacemos

play11:55

esto Bueno voy a poner la query y os la

play11:57

voy a intentar explicar un poquito por

play11:58

encima vale la query es todo esto que

play12:00

veis aquí pero no es tan complicada como

play12:02

puede parecer vamos a explicar qué es lo

play12:04

que estamos haciendo aquí vale primero

play12:05

de todo el nombre de usuario ponemos el

play12:07

nombre de usuario y cerramos la comillas

play12:09

las comillas porque en este caso vamos a

play12:11

poner otra query más detrás en este caso

play12:13

no necesitamos poner el punto y coma

play12:15

para ejecutarlo sino que vamos a hacer

play12:16

una Unión en este caso nos va a devolver

play12:18

dos filas primero nos va a devolver la

play12:20

fila con el nombre de usuario que es lo

play12:22

que nos devolvería de normal pero luego

play12:23

nos va a devolver otra columna donde en

play12:26

lugar del nombre de usuario nos va a

play12:27

poner la contraseña vamos V a ver esto

play12:29

poco a poco vale lo que tenemos que

play12:31

hacer es escribir en en usuario en este

play12:33

caso que es aquí donde vamos a escribir

play12:35

las queries que nos van a dar acceso a

play12:36

lo que queremos en este caso la la

play12:38

contraseña del usuario es lo que

play12:39

queremos obtener Entonces vamos a ver

play12:41

esta query paso por paso la vamos a ver

play12:43

aquí en la consola aquí tenemos que

play12:44

escribir el nombre del usuario del que

play12:46

queremos obtener su contraseña y vamos a

play12:48

usar la palabra clave Unión que es algo

play12:50

que no hemos usado antes Para qué sirve

play12:52

esto Bueno pues para eh anidar otra

play12:54

línea y así podemos hacer aquí otro

play12:55

Select en el que vamos a seleccionar la

play12:57

contraseña del usuario llamado migma

play13:00

Entonces esto es lo que vamos a pegar en

play13:02

usuario lo que pasa es que aquí

play13:03

tendríamos que Añadir un comentario para

play13:06

eliminar todo lo que viene después de

play13:07

esto vamos a ejecutarlo aquí para ver

play13:10

qué es lo que nos da primero de todo

play13:11

como veis nos da dos líneas qué es lo

play13:13

que hace nuestro código la primera

play13:15

en este caso eh al crear un usuario yo

play13:17

le he puesto la de contraseña test todo

play13:19

en mayúscula si os dais cuenta antes lo

play13:21

he puesto en minúscula por qué lo he

play13:23

puesto ahora en mayúscula porque el

play13:24

hecho de que salga en mayúscula eh se

play13:26

ordena automáticamente y las mayúsculas

play13:28

tienen prioridad sobre so las minúsculas

play13:29

entonces este Sale primero si esto fuese

play13:32

minúscula saldría primero migma y lo que

play13:34

tendríamos que hacer en esta query se

play13:35

podría hacer es un orderby un order Buy

play13:38

eh Por el nombre de usuario y luego

play13:41

descendente Pero bueno eso no es

play13:43

necesario en este caso y directamente

play13:45

nos imprime test vamos a verlo vamos a

play13:46

copiar esto lo vamos a pegar aquí y de

play13:49

contraseña ponemos cualquier cosa

play13:50

hacemos login y como veis nos dice

play13:51

bienvenido test pero test no es el

play13:53

nombre de usuario es la contraseña del

play13:55

usuario para que veáis lo potente que es

play13:57

esto y la de cosas que podemos obtener y

play13:59

como esto podemos hacer muchísimas cosas

play14:01

más esto es un tutorial bastante básico

play14:03

vale Y la pregunta del millón Cómo

play14:05

arreglamos esto Bueno pues bastante

play14:07

fácil de hecho el propio lenguaje nos lo

play14:09

deja eh En vez de pegar directamente o

play14:12

como una variable lo que inserta

play14:14

el usuario aquí podemos poner una

play14:16

interrogación y aquí lo mismo ponemos

play14:18

una interrogación y luego a la hora de

play14:20

ejecutar la query como parámetros ya nos

play14:22

lo está poniendo Aquí copilot estos son

play14:24

los parámetros los parámetros de la

play14:26

función a ejecutar haciéndolo de esta

play14:28

forma el propio programa evita que que

play14:31

hagas este tipo de cosas vamos vamos a

play14:33

probarlo aquí ponemos migma ponemos Test

play14:35

en mayúscula y nos deja entrar y como

play14:38

veis lo que nos pone en la query no en

play14:40

la query misma ya no nos sale que hemos

play14:43

introducido migma y hemos introducido

play14:44

test nos salen interrogaciones da igual

play14:46

lo que pongamos entonces podemos probar

play14:48

lo que hemos probado antes poner aquí

play14:50

migma y comentarios y aquí poner

play14:52

cualquier cosa y en este caso ya nos

play14:55

deja hacer lo que hacíamos antes es una

play14:57

solución muy simple eh esto obviamente

play15:00

es en todos los lenguajes de

play15:01

programación y es un fallo muy grande

play15:03

hacerlo en tu código Bueno más bien no

play15:05

hacer esto en tu código es un fallo muy

play15:08

muy grande porque ya veis todo lo que se

play15:10

puede hacer y pues nada más este ha sido

play15:12

el vídeo de hoy un poco distinto a lo

play15:14

que solemos hacer me apetecía hacer un

play15:16

vídeo un poco más práctico un poco más

play15:18

de programación y enseñándoos unas cosas

play15:20

que si bien Esto es bastante simple es

play15:22

algo que cualquier programador que haya

play15:24

tocado un poco de sql sabe que esto se

play15:26

puede hacer y que hay que evitarlo a

play15:28

toda Costa pero me apetecía enseñároslo

play15:29

decidme por los comentarios si os gustan

play15:31

este tipo de vídeos Así un poco más

play15:32

prácticos y nos vemos en el siguiente

play15:35

adiós

Rate This

5.0 / 5 (0 votes)

Etiquetas Relacionadas
Seguridad InformáticaInyección SQLProgramaciónCódigo SencilloHackingPrevenciónPythonBase de DatosEducativoCybersecurity