Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > La Taberna
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 15-04-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
¡Vaya! Parece que seguimos esquivos. El caso es que no dan un sólo ejemplo de inyección de código debido al uso de % sin parámetros. He visto algunos ejemplos pero se deben en realidad al uso de apóstrofos. Creo que soy de la opinión de Delphius.

Eso, o simplemente no les parece adecuado compartir sus conocimientos.

// Saludos
Es porque te has centrado en la parte de "rompimiento" y no en la de "extracción de información".

Hacer un
Código SQL [-]
drop table
es un daño, pero aparte de tumbar el servicio no provee una ventaja. El ejemplo de los apostrofes es para obtener acceso (login) o eliminar un filtro del SQL.

Ahora bien, una vez estas dentro, que es lo que sigue? Si no estas buscando tumbar el servicio, la opción logica es minar información. Es este punto donde entra el asunto del '%':

Extraer info de los usuarios (averiguar la info de Bob):

http://www.unixwiz.net/techtips/sql-injection.html
Cita:
We can do the query on email name or full name (or presumably other information), each time putting in the % wildcards that LIKE supports:
Código SQL [-]
SELECT email, passwd, login_id, full_name
  FROM members
 WHERE email = 'x' OR full_name LIKE '%Bob%';

Injectando el sql desde un query de pagina & deduciendo la tabla que tiene los logins de usuarios:

http://www.securiteam.com/securityre...DP0N1P76E.html
Cita:
We also can search for data using LIKE keyword:
Código SQL [-]
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--

Osea, lo que falto aclarar antes es que el ejemplo clásico de inyección es de rompimiento (acceso), pero una vez dentro, es uso mas "tradicional" del sql, el conocimiento del lenguaje, el tipo de motor, entorno, etc. Hay se usa el rango completo, como acceso a tablas de sistemas, funciones, comandos de búsqueda (donde entra el %!!!), etc...

El error mio fue presumir que era obvio que se puede usar cualquier comando del SQL con una inyección, sin ser claro en el porque..

Es por eso que se puede usar el '%' para una inyección, es cosa de darse cuenta que la inyección no solo rompe, sino que tambien extrae información.
__________________
El malabarista.
Responder Con Cita
  #22  
Antiguo 16-04-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No hombre, no. Para que tú puedas poner una consulta como las de arriba, necesitas inyectarla. Y para eso es necesario que puedas poner apóstrofos sin restricciones. Una vez que puedes hacer esto entonces claro que puedes hacer uso del comodín para averiguar información. Pero el mal no está en el comodín en sí.

Es por eso que molesta ver este tipo de mensajes en donde se hace una afirmación que asusta y que no necesariamente es correcta.

Digámoslo de otra manera. Un código como este:

Código Delphi [-]
Query1.SQL.Add('select * from tabla where nombre like ' + Edit1.Text );

deja abierta la puerta a la inyección SQL. Pero si escapamos los apóstrofos:

Código Delphi [-]
Query1.SQL.Add('select * from tabla where nombre like ' + Escape(Edit1.Text ));

sigo sin ver dónde está el problema con que el usuario escriba un comodín. Los ejemplos que pones se basan en poder inyectar una sentencia con comodín pero gracias a que se deja abierta la puerta del apóstrofo.

Es decir, no es que no entienda cómo usar el comodín para extraer información, una vez rota la entrada (usando tus términos). El caso es que el mensaje original dice, textualmente:

Cita:
He visto muchos casos donde por ejemplo en un soft de gestión, para buscar un producto por nombre le piden al usuario que escriba un "%" como comodín si no se sabe el nombre completo
Dando a entender que el mero uso del comodín es nocivo, sin siquiera saber si el software en cuestión usa o no parámetros, y aún no usándolos, sin saber si escapa o no los apóstrofos.

// Saludos
Responder Con Cita
  #23  
Antiguo 16-04-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Dando a entender que el mero uso del comodín es nocivo, sin siquiera saber si el software en cuestión usa o no parámetros, y aún no usándolos, sin saber si escapa o no los apóstrofos.
No creo que Mario halla querido ensañarse con el comodín. Más bien debe ser un hipotético escenario en donde los desarrollares dejan al usuario ingresar código SQL arbitrariamente, confiando en la buena voluntad de los usuarios. O aveces, también confiando en la ignorancia de ellos...
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #24  
Antiguo 16-04-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Yo algo de injección SQL he escuchado, leído e investigado pero no he dedicado tiempo como para ponerlo en análisis y pruebas. En lo que hace a aplicaciones de escritorio, si el usuario no tiene demasiadas posibilidades de meter dedo ¿nos libra de algún ataque?
Se escucha mucho hablar de injección SQL en el entorno web, es más las fuentes que estuve viendo de tu enlace se centra esto, pero hasta el momento no he visto algún artículo que hable de esto para aplicaciones de escritorio ¿Vale lo mismo?

Saludos,
Sí, vale igual.

Imagínate que tienes una ventana, en ella tienes un TEdit dónde se supone que el usuario ingresará un valor a buscar. En tu código la búsqueda la procesas así:
Código Delphi [-]
Query1.SQL.Text = ('select * from clientes where no_cliente = ' + Edit1.text);

Si el usuario ingresa "101" en el TEdit, la consulta SQL anterior quedaría así: select * from clientes where no_cliente = 102.

Pero supongamos que el usuario, en lugar de ingresar un número, ingresa en el TEdit algo cómo: "102; delete from clientes where 1=1;", la consulta anterior quedaría así: select * from clientes where no_cliente = 102; delete from clientes where 1=1;.

Es obvio lo devastador que resultaría esta consulta, no? Eso es inyección de SQL. Es hacer que tu aplicación ingenuamente ejecute código SQL arbitrario, sea cuál sea. Esta vulnerabilidad hace a tu aplicación quedar como una tonta que hace todo lo que le dicen sin poner reparo.

Saludos
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #25  
Antiguo 16-04-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
No creo que Mario halla querido ensañarse con el comodín. Más bien debe ser un hipotético escenario en donde los desarrollares dejan al usuario ingresar código SQL arbitrariamente, confiando en la buena voluntad de los usuarios. O aveces, también confiando en la ignorancia de ellos...
Tienes razón. En realidad mi crítica no va tanto hacia el comentario de mamcx, sino al original de AzidRain. Vamos a ver: al leer el comentario original que abrió el hilo, de inmediato me vino a la mente un programa en el que hago precisamente eso: dejar que el usuario ponga un comodín para realizar búsquedas. Claro que yo lo hago usando parámetros. Pero al ver, así a secas, que se menciona el uso del comodín como uno de los ejemplos en donde tal vez por comodidad practicamente se puede hacer de todo, pues me alerto y por ello pregunto en qué reside el peligro del comodín. Y la única respuesta que he recibido se refiere a la no precaución de evitar los apóstrofos.

Lo que puedo concluir hasta el momento es que no tiene ningún peligro permitir que el usuario escriba un comodín en la consulta. A menos, claro, que no escape (bien directamente o bien por el uso de parámetros) el apóstrofo, pero eso es harina de otro costal.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Aprendiendo a usar Trigger... verito_83mdq MySQL 11 23-02-2011 01:05:13
Aprendiendo juegos de delphi ferra99 Varios 6 29-10-2008 13:47:19
Aprendiendo calistian Varios 4 14-06-2008 22:47:48
Aprendiendo a Aprender Firebird...!!! RK2 Firebird e Interbase 5 12-05-2008 21:11:48
Aprendiendo delphi for php JULIPO PHP 6 21-09-2007 22:19:47


La franja horaria es GMT +2. Ahora son las 17:49:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi