[Informativo] Como hacer inyecciones SQL?

PIN
Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Si eres un programador es algo tan basico como saber jugar resident evil que sepas sobre la seguridad web por que pueda que seas capas de construir sistemas grandes y robustas pero si no cuidas el lado de la seguridad vamos mal ya que descuidamos la informacion que tenemos dentro.

 

Es como construir una casa pero te olvidas de colocar a la puerta la cerraduro

200
Bueno si entraste a este articulo al ver el titulo pensaras que te enseñare hacer inyecciones sql y es cierto lo voy hacer pero del lado mas informativo para que puedas tener el criterio correcto para optimizar la seguridad. Queda claro para entender todo lo que expondre en las siguientes lineas debes saber el lenguaje SQL (Structured Query Language).

Entiende que…

Ok seguro que muchas veces escuchaste que las entradas (input) de tus formularios deben estar saniadas que es como un primer filtro (front end) y como segundo filtro seria al lado del servidor al momento de capturar los envios que pueden ser GET O POST.

Por que tanto filtro?

Seguro que tu profesor te lo dijo y ni le paraste bola (no le hiciste caso) y es que un formulario usualmente es para guardarlo a la base de datos o hacer alguna consulta y esta parte es la clave de la inyeccion ya que es el momento donde se aplica. Ahora espero que entiendas por que tanto tu profesor te lo dijo y si no lo hizo ya lo sabes.

Mucho contexto quiero saber como hacer una inyeccion SQL!!!

ok creo que sabiendo esto te sera mas facil saber como te pueden hacer una inyeccion pero debemos pensar como atacante para tener claro como cubrirnos.

Como hacer inyecciones… [informativo]

como es tu consulta en tu aplicacionn para hacer un login? algo similar a esto cierto?

SELECT * FROM usuarios WHERE usuario='$usuario' AND contrasena='$contrasena'

si, algo simple y claro los valores $usuario y $contrasena son variables que previamente capturamos de lo que envio el formulario ingresado por nuestro usuario luchito el bueno. pero si nos visita alguna vez nos visita luchito el malo y quiere hacer alguna travesura? pero que travesura puede hacer?

que pasaria si luchito el malo ingresa una contraseña en blanco (da igual si ingresa algo aqui) y como nombre de usuario:

‘ OR 1=1 —

que crees que pasaria? simple salto las condiciones y tiene acceso inmediato pero no vas que te lo diga y no es suficiente que me creas asi que te explico. el por que sucederia eso.

examinamos lo que ingreso como usuario luchito y quedaria asi:

sql_1

la idea de luchito es primero cerrar con ‘ la primera condicion y crea una condicion donde no hay pierde por que hace una comparacion de 1=1 ya para cerrar con todo coloca — que sirve para comenzar asi que todo lo que va depues se asumira como comentario y no sirve para la consulta y si es asi como quedo?

SELECT * FROM usuarios WHERE usuario='' OR 1=1

mas claro ahora de lo que sucedio? y esto tiene muchas variantes que llegan hacer lo mismo asi que cuando armes un login ten en cuenta que se puede entrar de esta manera.

ok entonces me diras que no desarrollas sistemas grandes que solo sistemas de noticias o catalogos de productos «cositas basicas y sencillas». Dejame decirte igual eres vulnerable y te explicare por donde te pueden atacar inocente joven.

desarrollaste una catalo de productos con una url similar a esto:

http://tuweb.com/producto.php?id=746

pero bueno y si vuelve nuestro amigo luchito el maligno y quiere hacer otras maldades? pero que puede hacer aqui?…
que pasaria si cambia tu url con un ‘…

http://tuweb.com/producto.php?id=’746

internamente tu query de que esta armando algo asi y recepciona el get id:

SELECT * FROM productos WHERE id='746'

ahora recibio el valor de get cambiado

SELECT * FROM productos WHERE id=''1'

esto mandara un error tipico por tener 2 ‘ dentro de un valor para la condicion:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘1’
LIMIT 0, 1000′ at line 1

pero ademas de este error te mandara toda la query y se puede obtener datos como nombres de campos y nombre de tablas aqui un captura de una web vulnerada.

Screenshot_1

de esta forma puedes comenzar a inyectar sql y usar UNION del sql para poder extraer data de otras tablas y por que no usar INNER JOIN? simple que con union no es necesario que las tablas tengan una relacion (PK Y FK)

Muchos servidor actuales que alquilan hosting ya tiene activador firewall (Mod_Security) para evitar estos ataques  y tambien los framework que utilizamos para programar ya cuentan con filtros antes de ejecutar los query’s pero es basico estos conocimientos sobre las inyecciones sql .

Espero haberte ayudado ampliar tus conocimientos sobre las inyecciones y reitero que este articulo va por un lado informativo para que puedas optimizar la seguridad de tus aplicativos.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Hi, I'm luis rodriguez

Hola, Soy Luis Rodriguez, radico en Lima – Perú, formado en una carrera informática, desempeñando desde el 2007 como programador web y viendo proyectos desde Front End y Back End a lo que me perfile como Full Stack. Esta Experiencia junto a mi interés en la Analítica Web me ayudó mucho entender el funcionamiento interno de las herramientas de analítica, con las que vengo trabajo activamente desde 2017. Linkedin

http://luisrodriguez.pe

Leave Your Comments