Foros del Web » Programando para Internet » PHP »

SQL Injection

Estas en el tema de SQL Injection en el foro de PHP en Foros del Web. Hola, hace poco mi empresa paso una auditoria de seguridad, y nos dieron el toque por la posibilidad de SQL injection, la web q hay ...
  #1 (permalink)  
Antiguo 09/05/2008, 02:31
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta SQL Injection

Hola,
hace poco mi empresa paso una auditoria de seguridad, y nos dieron el toque por la posibilidad de SQL injection, la web q hay en el servidor es puramente informativa, donde hay varias querys para mostrar unos articulos segun el usuario haya escogido.
Hay una web solamente interna, no de uso publico, para el mantenimineto de articulos. donde ya pide un usuario y una contraseña, pero ese usuario y esa contraseña no se guardan en ninguna base de datos, sino q en el mismo codigo ya controla quien entra, y como he dicho no es d dominio publico sino q es solamente de uso interno.

Puede un usuario malintencionado hacer algo en mi pagina web?
cambiarme los articulos por ejemplo?
a titulo de seguridad, como afecta esto?
Como podria evitar el SQL Injection q me ha dicho la auditoria esta?

Saludos y gracias de antemano!
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #2 (permalink)  
Antiguo 09/05/2008, 10:25
Avatar de bufom  
Fecha de Ingreso: enero-2008
Ubicación: Panamá
Mensajes: 1.384
Antigüedad: 16 años, 3 meses
Puntos: 13
Re: SQL Injection

Con un sistema IPS_DB_MSSQL---buffer.overflow si lo puedes conseguir es buenisimo te lo recomiendo...
FIREWALL de caja
tambien es bueno que tengas todos tus parches actualizados en el SQL

suerte...
__________________
“La experiencia es simplemente el nombre que le damos a nuestros errores”
  #3 (permalink)  
Antiguo 09/05/2008, 16:30
Avatar de HookerSP  
Fecha de Ingreso: diciembre-2004
Mensajes: 983
Antigüedad: 19 años, 4 meses
Puntos: 12
Re: SQL Injection

Yo por principio no me pronuncio sobre auditorias que hacen otros, y menos con la poca información que se puede poner aqui. Habría que ver tu esquema. Lo mas que hago es recabar informacion de auditorias anteriores, pero siendo bastante discreto.

Lo que si tengo claro, es que si yo en una auditoria digo que un sistema es vulnerable a SQL Injection, les pongo un ejemplo para que vean que no me estoy inventando nada.

¿No te han dicho cómo se puede aprovechar esa supuesta vulnerabilidad?.
Un saludo
Hooker
Un saludo
  #4 (permalink)  
Antiguo 12/05/2008, 00:40
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: SQL Injection

Hola, antetodo gracias por vuestras respuestas!

La vulnerabilidad es solo q al mostrar una ficha de un producto las variables pasan por URL, es decir, www.mipagina.com/fichaproducto?codiarticulo=1003

q tampoco ser hasta q punto esto es SQLInjection ya q al recibir la varibale en la web tengo puesto
$codiarticulo= mysql_real_escape_string($_GET["codiarticulo"]);

Cita:
¿No te han dicho cómo se puede aprovechar esa supuesta vulnerabilidad?.
No, no han dicho nada, solo el analisis!
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #5 (permalink)  
Antiguo 12/05/2008, 06:43
Avatar de - s4n -  
Fecha de Ingreso: abril-2007
Mensajes: 79
Antigüedad: 17 años
Puntos: 1
Re: SQL Injection

En principio si la variable se le pasa por GET lo que podrías hacer es interceptar la petición y modificar la variable que se le pasa a la base de datos metiendo comando SQL directamente como por ejemplo http://www.mipagina.com/fichaproduct...lo=1003'Or 1=1-- con lo que el resultado sería siempre cierto y te mostraría el listado completo de los artículos que se le puedan pasar a la variable codiarticulo, si el servidor es vulnerable a este tipo de ataques, podrías llegar a enumerar la base de datos completa y si mostrara alguna ruta al servidor en algún error tipo SQL que se muestre por pantalla pues peor jeje.

Para evitar este tipo de ataques lo primero que se suele hacer es filtrar a nivel web, con scripts que puedes crear o directamente bajarte de apache o iis los caracteres(',*,%,=,-,+ etc etc) seguro que puedes encontrar cómo hacerlo en la web del fabricante que hayas escogido, fortificación del serivdor o del código. Si el atacante mete algún caracter de este tipo se le redirige a una página de error estática y simple con un mensaje de advertencia o diciendole que ese tipo de caracteres no se aceptan.

De todas formas hay muchisima documentación de inyección SQL y Blind SQL (de forma ciega)

Lo que también como a todos me parece extraño es que NO te hayan echo un informe con vulnerabilidades, ejemplos y recomendaciones, es lo que se suele hacer vaya.

Un saludo.
__________________
"There is no 'patch' for stupidity."

http://inssecurity.wordpress.com
  #6 (permalink)  
Antiguo 12/05/2008, 09:21
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: SQL Injection

Hola de nuevo, ya me estado documentando pero hay cosas q aun tengo dudas.
si yo le pasara a la pagina ficha el codigofamilia por url
Código PHP:
<?
if(empty($_GET["codigofamilia"]) or ($_GET["codigofamilia"]=='')){
    
header ("Location:  /default.htm");
}else{
    
$codigofamilamysql_real_escape_string($_GET["codigofamila"]);
    
$codigoarticle mysql_real_escape_string($_GET["codigoarticle "]);
    
//SQL
    
$qry_familia mysql_query("SELECT * FROM familia WHERE codi_familia=$codigofamilia")
                    or die (
"Error SQL - Variable incorrecta: ".mysql_error());
//... (contenido web)...
<? } ?>
con el codigo anterior q problemas puedo tener?
no podrian llegar a ver nada no? o se me escapa algo? porque si es solo ver los articulos, bueno, se muestran en la pagina principal asi q no es niguna novedad.
Podria llegar a modificar el contenido?

Saludos y gracias
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 12/05/2008 a las 09:30
  #7 (permalink)  
Antiguo 13/05/2008, 00:31
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: SQL Injection

Hola de nuevo,

alguien me podria decir si voy por el camino correcto?

Saludos y gracias
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #8 (permalink)  
Antiguo 13/05/2008, 01:23
Avatar de - s4n -  
Fecha de Ingreso: abril-2007
Mensajes: 79
Antigüedad: 17 años
Puntos: 1
Re: SQL Injection

Sergi, si no filtras los caracteres podrán seguir inyectando código y pasarlo como parámetro en la url.
__________________
"There is no 'patch' for stupidity."

http://inssecurity.wordpress.com
  #9 (permalink)  
Antiguo 13/05/2008, 01:52
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: SQL Injection

Pero dara un error de SQL si le pone mas parametros en la URL, no?
almenos yo lo estuve provando y daba error cuando pase el tipico or 1=1 o bien cualquier tipo de valor!

Igualmente le pondre el filtro de simbolos para evitar problemas mayores... como ser q el codigo siempre va a ser numerico le puse un filtro con expresiones regulares

Código PHP:
if(eregi("^([0-9])*$"$_GET["codigofamilia"]){.....}else{ ... } 


Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 13/05/2008 a las 02:54
  #10 (permalink)  
Antiguo 13/05/2008, 13:38
 
Fecha de Ingreso: noviembre-2007
Ubicación: Córdoba
Mensajes: 70
Antigüedad: 16 años, 5 meses
Puntos: 1
Re: SQL Injection

Hola.

La expresión debe quedar así:
Código:
^[0-9]*$
El modificador uno o más debe ir junto a los corchetes. Los paréntesis en este caso sobrarían puesto que no necesitas sacar ningún valor, sólo ver si la expresión coincide.

Este tipo de comprobación es la que suelo hacer yo y supongo que con eso quedaría suficientemente filtrada la entrada. Si me equivoco, hacédmelo saber.

Saludos.
__________________
http://www.javierav.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:15.