Hace 10 años | Por noexisto a securitybydefault.com
Publicado hace 10 años por noexisto a securitybydefault.com

Hoy vamos a hablar de las inyecciones de código SQL (SQL Injections), una de las típicas vulnerabilidades que nos podemos encontrar en cualquier auditoría web. Ha llegado un punto que ya no nos sorprenden toparnos con ella en todo tipo de aplicaciones, sean críticas o no, y lo que está claro es que no sólo permite la obtención de información de la base de datos, si no la ejecución de comandos en el sistema operativo y el total compromiso del sistema afectado [..] Curiosamente, uno de sus compañeros contactó con Microsoft para informar...

Comentarios

ccguy

#4 Al contrario, quitaron el WHERE. Por ejemplo metiendo en algún cambio del formulario algo tipo

' OR TRUE ; --

D

Un ATS. Adorador Transexual de Satán.

noexisto

#1 Reptiliano, seguro, como Sara Carbonero

D

#2 Ummm, pues no me importaría inseminar sus huevos.

D

#3 ¿Ya te aburriste de tu amor platonico?

chulonsky

Qué casualidad, el SQL inyection apareció mas o menos al mismo tiempo que las grandes empresas empezaron a utilizar becarios como programadores.

viktor77

#17 El otro día vi una web en la que al enviar un formulario el query MYSQL lo generaba en el cliente y lo enviaba al servidor con una petición POST. Impresionante lol

delawen

#18 Pero nunca superará a las comprobaciones de contraseña dentro del mismo javascript. Eso sí que es seguridad.

D

#19 Incluso en grandes webs se colaban grandes fallos, en la de megaupload hace muchos años cambiando un 0 por un 1 te reconocía como premium en la mayoría de sus servicios.

D

#18 #19 Por favor, enlaces a esos sitios!!! lol lol lol

Lo que me sigue pareciendo increíble hoy en día, e incluso lo he visto alguna vez en la gente con la que trabajo, es que sigan existiendo las inyecciones SQL con lo sencillísimo que es crear las sentencias predeterminadas y luego rellenar las variables.

Joder, si todos los lenguajes de programación ya traen bibliotecas estándar para hacer algo así!!!

Aclaro: Lo que he visto en mi trabajo es gente haciendo esto:
String var = input();
String consulta = "Select * FROM Usuarios Where ID="+var;

Una auténtica atrocidad...

prejudice

#22 todos los lenguajes de programación ya traen bibliotecas estándar para hacer algo así!!!

¿Te refieres a los ORM's como Doctrine (PHP), SqlAlchemy (Python), Hibernate (Java), etc ?
¿ O te refieres a cosas mas "rudimentarias" como la clase QSqlQuery ( http://qt-project.org/doc/qt-4.8/qsqlquery.html ) de las librerias Qt4, que permite construir consultas pero carece de mapeado objecto-relacional ?

D

#23 NO estoy hablando de mapeado objeto-relacional, sino solo y exclusivamente de escapado de queries para que no te metan un DROP TABLE por ahí en medio.

El resto de tu comentario es simple pedantería.

prejudice

#27 Llevas razón, creo que podría haber resumido mi comentario usando solo las primeras 5 palabras.

arivero

Yo siempre habia asumido que eran una evolucion natural de la inyeccion de codigo en los scripts de la shell de unix. Las comillas de ejecucion, vamos. Que el primer ebook que tuve todavia lo desprotegi con ellas, porque aunque filtraban las comillas, se les olvido que dolar+parentesis en bash tiene el mismo uso.

D

No usar variables enlazadas (binded vars) en las consultas: Oh, esto sí que es golpe de remo.

CTprovincia

No se, ¿tu madre?

Sofrito

No creo que sea correcto decir quién las descubrió, sino quién les dio nombre. Las inyecciones SQL las descubre cualquier buen programador en menos de 15 minutos. Por tanto, fueron conocidas en el mismo instante en el que el lenguaje SQL se usó para hacer sitios webs.

alexwing

#11 He incluso antes, no solo es un problema de sitios webs, cualquier aplicación de gestión que use base de datos podría verse comprometida.

sotanez

Yo diría que las más obvias a cualquiera con un poco de malicia.

D

chema ha subido justo hoy un video sobre el mismo tema que el artículo, ameno como siempre, deberia hacerse un vlog este tío...

CTprovincia

Es muy común en las páginas que requieren pasar alguna cadena, esto suele ocurrir en páginas con login o con búsquedas por texto.

Cuando son números, es muy fácil de evitar una "inyección", cuando es texto, no medida infalible (según los expertos), pero de momento, hay que evitar meter la variable que se "pasa" directamente, es de sentido común que veas que es lo que te estás "comiendo".

Hay gente que lee la cadena y excluye cualquier cosa que tenga las palabras "Delete", "Drop", "Insert", ... es muy drástico, pero funciona.

lecter23

#24 Pide perdón por la solución que acabas de aportar!

CTprovincia

#25 ¡Jamás! ¡Yo nunca la he usado ni la usaré! Solo lo he visto por ahí ... y si es verdad que funcina.

AdobeWanKenobi

De pura casualidad, vaya.

D

Algún yonki seguro.

matadme por favor