Foros del Web » Programando para Internet » PHP »

Ejemplos de inyeccion SQL

Estas en el tema de Ejemplos de inyeccion SQL en el foro de PHP en Foros del Web. Hola, Estoy empezando a ior hablar de SQL inyection, y mas o menos sé lo que es, pero me gusatria saber como se hace, es ...
  #1 (permalink)  
Antiguo 07/07/2005, 13:59
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 20 años, 7 meses
Puntos: 4
Ejemplos de inyeccion SQL

Hola,

Estoy empezando a ior hablar de SQL inyection, y mas o menos sé lo que es, pero me gusatria saber como se hace, es decir si alguien puede ponerme un ejemplo sencilo explicativo.
Si consigo entender bien este problema podre luchar contra él.

Gracias.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #2 (permalink)  
Antiguo 07/07/2005, 14:44
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
A ver, a groso modo, para q sepas lo q es, te pondre un ejemplo muy facil:

dos.php
Código PHP:
<a href="uno.php?id=4">Noticia 4</a
uno.php
Código PHP:
$result mysql_query("SELECT * FROM TABLA WHERE id=".$_GET['id'].";");
$row mysql_fetch_row($result);
.... 
Teniendo, esto scripts, en cuanto desde dos.php te lanza a uno.php pasando por linea de direcciones la variable id, permite la inyeccion de SQL, haciendo alguien pudiera unirle algo a la sentencia y asi obteniendo resultados no deseados.

Por ejemplo, alguien podria hacer lo siguiente:

http://tusitio.com/uno.php?id=1%20UN...0TABLE%20TABLA

%20 = (espacio en blanco).
Agregando al final de la clave (DROP TABLE TABLA), lo cual borraria la tabla.

El tema es much mas amplio, pero esto es la base, espero q te haya ayudado en algo.

Un saludo.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #3 (permalink)  
Antiguo 07/07/2005, 14:57
Avatar de tyo100  
Fecha de Ingreso: febrero-2005
Ubicación: Monterrey, NL
Mensajes: 475
Antigüedad: 19 años, 2 meses
Puntos: 1
y como se haria para evitar que eso pase???
__________________
Desde la tierra de los nopales, las tortillas de maiz, y en cuya ciudad se encuenta el cerro de la silla.
NalgAss Web
SpiderMex - La Historia del Hombre Araña en MEXICO
  #4 (permalink)  
Antiguo 07/07/2005, 15:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Hombre, yo uso un sistema algo rudimentario :D, por q no conozco otro :(.

Código PHP:
$result mysql_query("SELECT * FROM TABLA WHERE id='".$_GET['id']."'); 
Meto el id entre comillas simples. Asi consigo q por lo menos pete si intenan algo.

Esto daria el siguiente resultado:

http://tusitio.com/uno.php?id=1%20UN...0TABLE%20TABLA

Código PHP:
$result mysql_query("SELECT * FROM TABLA WHERE id='1 UNION DROP TABLE TABLA'); 
Por lo tanto error. Pero se q no es una solucion muy buena. Si buscas por el foro encontraras algo seguro.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #5 (permalink)  
Antiguo 07/07/2005, 16:05
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Y a eso le agrego una ' en el get, y te rompo todo de nuevo, quedaria algo asi:

http://tusitio.com/uno.php?id=1'%20DROP%20TABLE%20TABLA
$result = mysql_query("SELECT * FROM TABLA WHERE id='1' UNION DROP TABLE TABLA');

Para que esto no pase, dos cosas basicas. Una, nuca llamar directamenre al get dentro del sql, hacer algo como:

$var = isset($_GET["var"]) ? intval($_GET["var"]): 0; #Para el caso numerico

$result = mysql_query("SELECT * FROM TABLA WHERE id='".$var."');

Igual, como se inicio, a groso modo.

PD: Siguiendo lo basico, lo peor no es un drop, truncate o lo que sea, por que el backup siempre lo arregla todo, sino que te entren por la db al host, o roben info.

PD2: Un buen amigo para strings es la funciona addslashes.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 07/07/2005, 16:59
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 18 años, 11 meses
Puntos: 0
$result = mysql_query("SELECT * FROM TABLA WHERE id=".$_GET['id'].";");
$row = mysql_fetch_row($result);
....

eos no se puede usar?
  #7 (permalink)  
Antiguo 07/07/2005, 17:55
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
darksteel01, con toda la buena onda del mundo, no podes preguntar eso despues de lo que se posteo arriba...media pila;)

PD: Estaria bueno que se siga con esto, proponiendo ejemplos y demás, seguramente terminemos creando un thread mas que interesante.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 07/07/2005, 21:14
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 3 meses
Puntos: 11
Esto tb sucede


$sql="select * from usuarios where login=$login and clave=$clave";


cuando entro como usuario a una cuenta y pongo esto en la contraseña ' or '1'='1

entro al sistemas porque la cadena queda asi

$sql="select * from usuarios where login=jose14 and clave= or 1=1 ";

y como es verdadero (true)

enro al sistemas

esos e arregla usando esto

$clave=str_replace("x","'",$clave)


algo asi...


Entro
  #9 (permalink)  
Antiguo 08/07/2005, 04:26
Jep
 
Fecha de Ingreso: febrero-2005
Mensajes: 42
Antigüedad: 19 años, 2 meses
Puntos: 0
Richardinj estas seguro?
Yo lo he comprobado ahora con mi web, y utilizo un sistema identico al tuyo, por suerte cuando pongo lo que me has indicado me dice que la contraseña no es valida.
responde porfavor ;P!
  #10 (permalink)  
Antiguo 08/07/2005, 06:51
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Carambas amigos,

Solo hacer:

$var=htmlentities(addslashes($var));// Por cada var.

Aunque por defecto el addslashes esta implicito en la config de PHP.

Y si es paginado el tradicional: if(!is_numeric($var))$var=1// La pagina 1

Otras cosillas hay, pero eso es un buen inicio.

El profesor Josemi y Cluster nos han explicado bastante de eso, usad las FAQS.
  #11 (permalink)  
Antiguo 08/07/2005, 06:56
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Precisamente acabo de venirme a FDW por que acabo de meter este user en el form:

+%27select+%2A+FROM+users%27+

Y vieran lo que paso...

(Por tener un eregi() en una parte del codigo)...

Por eso:

http://www.forosdelweb.com/f18/if-in_array-sin-diferencia-minus-mayus-como-314865/#post1169224

Ayudenme
  #12 (permalink)  
Antiguo 08/07/2005, 11:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Cita:
Iniciado por nicolaspar
Y a eso le agrego una ' en el get, y te rompo todo de nuevo, quedaria algo asi:

http://tusitio.com/uno.php?id=1'%20DROP%20TABLE%20TABLA
$result = mysql_query("SELECT * FROM TABLA WHERE id='1' UNION DROP TABLE TABLA');

Para que esto no pase, dos cosas basicas. Una, nuca llamar directamenre al get dentro del sql, hacer algo como:

$var = isset($_GET["var"]) ? intval($_GET["var"]): 0; #Para el caso numerico

$result = mysql_query("SELECT * FROM TABLA WHERE id='".$var."');

Igual, como se inicio, a groso modo.

PD: Siguiendo lo basico, lo peor no es un drop, truncate o lo que sea, por que el backup siempre lo arregla todo, sino que te entren por la db al host, o roben info.

PD2: Un buen amigo para strings es la funciona addslashes.

nicolaspar, ostia vaya fallo mas tonto :D
la verdad es q ni lo habia pensado. La verdad es q habra q usar el addslahes para anular estas comillas cabro... :D

Muchas gracias.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #13 (permalink)  
Antiguo 08/07/2005, 14:10
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 3 meses
Puntos: 11
Desacuerdo

Cita:
Iniciado por Jep
Richardinj estas seguro?
Yo lo he comprobado ahora con mi web, y utilizo un sistema identico al tuyo, por suerte cuando pongo lo que me has indicado me dice que la contraseña no es valida.
responde porfavor ;P!
.. esta en todas partes ha... que raro...


En este post esta todo www.maestrosdelweb.com/editorial/inyecsql/
  #14 (permalink)  
Antiguo 08/07/2005, 14:11
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 3 meses
Puntos: 11
Es igual

tanto como para ASP y PHP


en los dos casos....
  #15 (permalink)  
Antiguo 05/04/2008, 01:03
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Re: Ejemplos de inyeccion SQL

usa esta funcion para todas las variables externas $_GET $_POST $_COOKIE etc...

Código PHP:

if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

ejemplo de llamando a la funcion:

Código PHP:
$variable=GetSQLValueString($_GET['Id'],"int"); 
  #16 (permalink)  
Antiguo 05/04/2008, 08:31
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Re: Ejemplos de inyeccion SQL

Y despues dicen que la ayuda nunca llega, tarde pero llega... :)
Saludos
__________________
Drupal Argentina
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 20:52.