Backup Oficial de SeguridadBlanca.Org

lunes, 14 de septiembre de 2009

Para el Hardening V1 by Me

Es la primera ves que haré una entrada así y espero les guste, enseñaré como proteger una web de Sql Injection muy popular la tipica que empiesa con -1+union...


Ahora nuestro codigo vulnerable será...



if (isset($_GET['id'])) {
$result = mysql_query("SELECT * FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}



Ahora como ven el Anteior code es vulnerable por dos lados por el Where y por el Select entonces por Ahora vamos a asegurad solo el Select ya que esta es solo la Versión 1 de los Artículos que haré de Hardening a Web APPs y CMS...

Para empesar tenemos que saber que hacemos con la consulta ahi lo que está diciendo como quien dice en Pseudocodigo es:

Seleccionar lo que venga de pages donde el id sea el que hemos ingresado o se nos ha asignado.

Entonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.

entonces lo que harémos será no ser vagos y hacer que se ponga campo por cam y registro por registro lo que pedimos nuestra sentencia sería asi:


if (isset($_GET['id'])) {
$result = mysql_query("SELECT id FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}




siendo la tabla:


CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`hp` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


por ahora espero que esto les ayude a que ya no cometan ese error en la proxima edición del tutorial les enseñaré al arreglar el error del Where que muchos cometen.


Espero les haya Gustado.


Saludos
Dr.White

2 comentarios:

  1. No entiendo lo que quieres decir en este apartado:
    Entonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.


    No veo el problema de hacer un select *.

    ResponderEliminar
  2. por ahora no estoy en mi pc por eso contesto de esta manera, no entiendo muy bien lo que dices david pero haciendo una inyeccion puedes sacar datos amigo, si usas el * filtrando no hay ningun problema pero si lo haces pues te arriesgas demaciado a un robo de datos, es posible que no te roben haciendo sierto tipo de consultas pero es recomendable no usarlo, es mas vas a ver en los scripts mas importantes que no lo usan ya que usando el asterisco + inyección puedes sacar los datos de las tablas segun la posición en la que esten...

    Un Saludo.

    ResponderEliminar