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. estube buscando en internet y haciendo pruebas con condigo injection pero no logro entender muy bien tengo una tabla llamada usuarios y para eliminarla claramente ...
  #1 (permalink)  
Antiguo 19/08/2008, 11:03
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 5 meses
Puntos: 3
Sql injection

estube buscando en internet y haciendo pruebas con condigo
injection pero no logro entender muy bien

tengo una tabla llamada usuarios y para eliminarla claramente
se escribe lo siguiente:

Código PHP:
mysql_query("drop table usuarios"); 
pero si por ejemplo tengo esta consulta
para llamar a ud usuario por id, como podria
agregar a esa consulta drop table usuarios

Código PHP:
mysql_query("select * from usuarios where id=".$_GET[id].""); 
intente con and pero no sirvio q hay q anteponer ' o " o cual otra?

Última edición por ..::MaRcOs::..; 19/08/2008 a las 11:26
  #2 (permalink)  
Antiguo 19/08/2008, 11:24
 
Fecha de Ingreso: julio-2008
Ubicación: Bogota
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sql injection

Hola marcos pues viendo el codigo veo un error

este es tu codigo.

Código PHP:
mysql_query("select from * usuarios where id=".$_GET[id].""); 
Podrias hacer esto

Código PHP:
$variable $_POST['nombre variable']; o podria ser $variable $_GET['nombre variable'];
$insertar mysql_query("select *  from  usuarios where id='$variable' "); 
la verdad no se * te aguanta en php... pero creo que con esto resulves el primer problema..

SALUDOS ....
  #3 (permalink)  
Antiguo 19/08/2008, 11:27
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Sql injection

gracias por responder carlosguzman si estaba mal el * jeje fue por q
lo hice aqui mismo de rapidez pero en los otros codigos si esta bien

ahora como hago para q a esa consulta agregar
mysql_query("drop table usuarios");
  #4 (permalink)  
Antiguo 19/08/2008, 11:36
 
Fecha de Ingreso: julio-2008
Ubicación: Bogota
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sql injection

Hola marco dame un ejemplo asi sea en pseudocodigo por favor es que no te entiendo la pregunta?

Saludos
  #5 (permalink)  
Antiguo 19/08/2008, 11:40
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Sql injection

ok tengo una consulta q me seleciona un usuario de la base de datos
que es mysql_query("select * from usuarios where id=".$_GET[id]."");

ahora quiero agregarle a la anterior consulta
mysql_query("drop table usuarios");

mysql_query( selecionar un usuario por GET y borrar la tabla usuarios );

espero me haya echo ententer...
  #6 (permalink)  
Antiguo 19/08/2008, 11:48
 
Fecha de Ingreso: julio-2008
Ubicación: Bogota
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sql injection

Ok se te entendi seria algo como esto.

Código PHP:
$variable $_POST['nombre variable']; o podria ser $variable $_GET['nombre variable'];
$insertar mysql_query("select *  from  usuarios where id='$variable' ");  

if (!
$insertar) {
    die(
'La consulta no se pudo dar porque :  ' mysql_error());
}

$borrartabla mysql_query("DROP TABLE table_name"); 
De esta forma lo que haria es buscar una persona en la tabla usuarios
si existe borra la tabla .
si no existe muestra un error dado que no existe la persona en la base de datos..


espero sea de ayuda..

Saludos..
  #7 (permalink)  
Antiguo 19/08/2008, 11:57
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Sql injection

jeje no creo q no me hice entender bien la idea es teniendo la siguiente
consulta q es la q utilizo en las paginas q hago, he leido y es vulnerable

$variable = $_GET['nombre variable'];
$insertar = mysql_query("select * from usuarios where id='$variable' ");

por q se dice q si se agrega "drop table usuarios" me borraria la tabla de los
usuarios pero estoy probando y probando y no consigo q la borre

por lo q he leido se agregaria a la url
archivo.php?id=1' drop table usuarios o archivo.php?id=1; drop table usuarios
pero no se como se hace exactamente
  #8 (permalink)  
Antiguo 19/08/2008, 12:02
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Sql injection

La injeccion de codigo creo que se manda a travez de la variable (sobretodo en GET)

la url que ejecutas por ejemplo seria

archivo.php?var='; DROP TABLE table_name --'

suponiendo que tu script hace esta consulta

select * from usuarios where id='$_GET["var"]';

la sustituir por el valor quedaria
select * from usuarios where id=''; DROP TABLE table_name --'';
esto ejecuta un select where id='';
un drop table
y los -- significa comentario

algo asi funciona la inyecion; para evitarla debes crear una funcion para validar que tipo de datos recibes por las variables.

EDICION
Lo recomendable (ademas de validar) es crear un usuario para la BD con los perminsos indipensables para evitar que pase eso si no haces un drop en tu sistema que no tenga esos permisos
  #9 (permalink)  
Antiguo 19/08/2008, 12:03
 
Fecha de Ingreso: julio-2008
Ubicación: Bogota
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sql injection

Si correcto es muy vulnerable.. por eso en ves de este codigo

Código PHP:
$variable $_GET['VARIABLE']; 
Cambialo por esto

Código PHP:
$variable $_POST['VARIABLE']; 

Segun tengo entendido esto arregla el problema que me cuentas de la vulnerabilidad.. muy pocos utilizan el get.. por se da para ataques de hackers.. muy facil


ESO QUE DICES DE EL USUARIO ES BASICO.. SIEMPRE TIENES QUE CREAR UN USUARIO CON LO MINIMO DE ACCESSO. OSEA SOLO CON LOS PERMISOS NECESARIOS PARA PODER TRABAJAR.. NO LE DES PERMISO DE BORRAR NI ALTERAR ESO LO HARIAS CON EL ROOT EN DADO CASO.. DE ESA FORMA SE EVITA ATAQUE.. Y UTILIZA POST EN VES GET.

Saludos
  #10 (permalink)  
Antiguo 19/08/2008, 12:14
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Sql injection

ok pero ahora me nacio otra duda jaja
al darle permisos a un usuario para solo lectura entonces
al querer modificar el perfil de dicha persona creo q no se podria?

hay q crear varios usuarios?
unos q tengan privilegios de lectura otros escritura?
  #11 (permalink)  
Antiguo 19/08/2008, 12:19
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Sql injection

De hecho aun con POST es bulnerable...

A un usuario se le dan permisos con GRANT y los basicos son SELECT, INSERT Y UPDATE en casos especiales se les da DELETE.

Pero con esos permisos ya no te eliminan la tabla, ya no te alteran tus tablas no te crean porcedimientos etc...
  #12 (permalink)  
Antiguo 21/08/2008, 15:17
 
Fecha de Ingreso: julio-2008
Ubicación: Bogota
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sql injection

No solo dale permisos solo a esa base de datos.. en especifico si lo quiere a una tabla.. de esa forma no podra borrar nada.. solo dale insert , update..

Saludos
  #13 (permalink)  
Antiguo 21/08/2008, 15:40
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Sql injection

Pues difiero con tigo carlosguzman

Cita:
Iniciado por carlosguzman Ver Mensaje
No solo dale permisos solo a esa base de datos.. en especifico si lo quiere a una tabla.. de esa forma no podra borrar nada.. solo dale insert , update..
Al menos en la gran mayoria de los sistemas web se tiene una conexion ya definida que se utiliza, sobretodo cuando son programadores inexperto no se recomiendo mucho involucrar diferentes conexiones pues la gran mayoria de las veces se termina con muchas innecesarias y muchas mas sin cerrar.

Yo lo que mas recomiendo es darle a un usuario Select/Insert/Update y si la aplicacion lo requiere Delete incluso si mal no recuerdo se le puede poner una cuota de instrucciones por dia (claro que esto ya es de usuarios mas avanzados).

Bueno esta es mi opinion; ..::MaRcOs::.. tu toma lo que mas se adapte a tus necesidades.

Exito !!
  #14 (permalink)  
Antiguo 21/08/2008, 17:05
 
Fecha de Ingreso: abril-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 1
Exclamación Respuesta: Sql injection

Cita:
Iniciado por carlosguzman Ver Mensaje
Si correcto es muy vulnerable.. por eso en ves de este codigo

Código PHP:
$variable $_GET['VARIABLE']; 
Cambialo por esto

Código PHP:
$variable $_POST['VARIABLE']; 
Este código sigue siendo vulnerable, si se pasa por POST o por GET, la varible va a seguir teniendo el mismo valor, y por lo tanto el mismo efecto.

Un hacker con conocimiento decentes de HTTP, podría mandar la siguientes instrucciones al servidor:

POST /pagina.php HTTP 1.1\n\r
Host: midominio.com\n\r
\n\r
\n\r
variable: ';+DROP+TABLE+table_name


Y tendría el mismo efecto que pasarlo por GET, una de las soluciones es usar un validador de datos introducidos por el usuario como htmlpurifier, es un poco pesado y lento pero hace su trabajo. En realidad una inyección como esa es lo mejo que podría pasar, porque si usas una conexión con usuario con muchos privilegios hasta, colgal el servidor se podría lograr.
  #15 (permalink)  
Antiguo 21/08/2008, 17:33
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Sql injection

Realmente el tema de la seguridad es MUY amplio, debes tener usuarios con permisos limitados, puertos de acceso cerrados si no son utilizados, no tener instalados muchas herramieteas (phpmyadmin por ejemplo) las contraseñas de las bases de datos encriptadas (las que almacenas), y unas buenas practicas en programacion. por mensionar algunas.
Por ejemplo se supone que nosotros teniamos una seguridad media en uno de los desarrollos de la empresa y resulta que cuando solicitamos una demo de hacker controlado, salio que se metieron hasta la BD, sacando info de unos purtos donde estaba el phpmyadmin, por injeccion lograron sacar la version del mysql (no pudieron ejecutar sentencias, eso si lo teniamos contemplado) y por un metodo de testeo de contraseña de fuerza bruta (osea un robot que probaja contraseñas) lograron entrar =S se tardaron solo 5 dias...
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 17:17.