wenooo les voy a enseñar como tienen q inyectar una base de datos.
La seguridad en las aplicaciones se torna cada vez más compleja, con la presencia de técnicas q van desde la ingeniería social hasta ataqs DoS, pasando por la sencilla inyección de código SQL. No se pueden imaginar la cantidad de aplicaciones q día a día crean los programadores con este fallo crítico.
¿En qué consiste la inyección SQL? Es una técnica de hackeo con un funcionamiento bastante simple. Se basa en atacar aplicaciones cuyo formulario de inicio de sesión o cuadros de texto no se encuentran validados completamente o de la manera adecuada.
Paso a mostrarles un ejemplo, se necesita q tengan nociones de SQL.
Supongamos q tenemos una aplicación construida en PHP y MySQL, pueden instalarlo localmente si tienen WampServer, la cual tiene una página de inicio de sesión: login.php.
Ahora bien, login.php tiene dos campos de texto, uno para el usuario y otro para la clave. El del usuario tendrá name user y el de la clave tendrá name pass.
Los name son campos q sirven para identificar los inputs y recuperarlos desde la página a la cual es enviada la acción. El formulario sería algo así:
upongamos q al iniciar sesión aqui seremos redirigidos a una página de tipo index.php. Aquí es donde suelen haber errores. Comúnmente lo q hacen las aplicaciones aquí es recuperar el código de ésta manera:
dijo:$usua = $_POST['user'];
$clav = $_POST['pass'];
Lo cual no tiene gran relevancia, si estamos usando un método POST en el formulario de login.php, pero lo q ocasiona el problema es el código q le sigue … éste:
dijo:$sql="SELECT * FROM usuarios WHERE user = '$usua' AND password='$clav'";
Lo q hace esa sentencia es verificar q existe el usuario mediante la devolución de un registro completo (y único en teoría). Por ejemplo, suponiendo q nuestro nombre de usuario sea Pepe y nuestra clave sea pepito123, entonces la cadena sql qdaría de ésta forma:
dijo:$sql="SELECT * FROM usuarios WHERE user = 'Pepe' AND password='pepito123'";
aca es donde entra la inyección SQL. No nos complicaremos mucho y comenzaremos con el clásico usuario vacío q valida todo y omitiremos la validación de clave. ¿Cómo? De la siguiente manera:
dijo:Usuario: ' or 1=1 --'
Clave: dsadsadas (da igual, escriban lo q sea, luego veremos por qué)
Al pasar estos valores por la cadena de validación SQL tendremos lo siguiente:
dijo:$sql="SELECT * FROM usuarios WHERE user = '' or 1=1 --'' AND password='dsadsadas'";
dijo:En MySQL un — es el inicio de un comentario, por lo q todo lo q se encuentra luego de éste par de caracteres no se ejecutará, por lo q solo nos qdará:
$sql="SELECT * FROM usuarios WHERE user = '' or 1=1 ";
Obviamente es improbable q se cumpla q exista nuestro usuario de login con nombre vacío (user = ''), sin embargo la segunda condición (1=1) siempre se cumple, por lo q podemos acceder a sistemas con bastante facilidad.
Evidentemente se exhiben cambios entre versiones de bases de datos y lenguajes de programación, por eso me tomé el trabajo de referirlos a un material bastante interesante q encontré en la web (enlace al final del post).
Esta hoja de referencia para inyección en SQL contiene códigos de guía para bases de dato Oracle, MySQL, SQL Server, PostgreSQL y lenguajes de programación como PHP, ASP, ASP.NET y Java, además de las diferentes combinaciones.
Se sorprenderán de la cantidad de aplicaciones q tienen vulnerabilidades q permiten inyección SQL en su formulario de login o inicio de sesión, ustedes no comentan los mismos errores. Yo mismo encontré problemas de este tipo en aplicaciones web de mi facultad como parte de un proyecto para mi curso de Seguridad Informática en la UNI.
wenoo q les alla servido.