Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: romerixo en 25 Septiembre 2014, 22:46 PM

Título: ¿Es vulnerable a SQL Injection este código?
Publicado por: romerixo en 25 Septiembre 2014, 22:46 PM

Buenas, me gustaría saber si este simple código en el que se validan los datos de un formulario de login sería vulnerable a SQL Injection, y en tal caso, cual serian las sentencias, gracias ^^

Código (php) [Seleccionar]
<?php

$dbhost
='xxx';
$dbusername='xxx';
$dbuserpass='xxx';
$dbname='xxx';

// Conectar a la base de datos
mysql_connect ($dbhost$dbusername$dbuserpass);
mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
if (
$_POST['username']==null){
echo 
"No introdujo usuario";
}
if (
$_POST['username']) {
//Comprobacion del envio del nombre de usuario y password
$username=$_POST['username'];
$password=$_POST['password'];
if (
$password==NULL) {
echo 
"La password no fue enviada";
}else{
$query mysql_query("SELECT username,password FROM usuarios WHERE username = '$username'") or die(mysql_error());
$data mysql_fetch_array($query);
if(
$data['password']!=$password) {
echo 
"$password\n";
echo 
"Login incorrecto";
}else{
$query mysql_query("SELECT username,password FROM usuarios WHERE username = '$username'") or die(mysql_error());
$row mysql_fetch_array($query);
session_start();
$_SESSION["k_username"] = $username;
echo (
"Bienvenido <strong>".$_POST['username']." </strong> ya puedes acceder a las siguientes secciones:<br><center>".'<a href="2684268413971397/addatabase.php">Registrar datos</a>'."");
echo (
"<br><br><center><a href='2684268413971397/visualization.php'>Buscador</a>." );
echo (
"<br><br><center><a href='2684268413971397/tablasasignacion.php' target='auto_blank'>((TABLAS DE ASIGNACIÓN))</a>");
}
}
}
?>
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: engel lex en 25 Septiembre 2014, 22:54 PM
si no tienes magic quotes montado, si...


Código (php) [Seleccionar]
$username=$_POST['username'];
$password=$_POST['password'];
if ($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT username,password FROM usuarios WHERE username = '$username'") or die(mysql_error());


si yo por username paso en el input algo tipo

Citar' OR '1'='1


la consulta quedará
Código (sql) [Seleccionar]
SELECT username,password FROM usuarios WHERE username = '' OR '1'='1'

lo que retornará todo...

y tienes
Citarecho "$password\n";

así que no puedes ver el username, pero puedes usar LIMIT para sacar todas las contraseñas

por cierto, las contraseñas no se guardan en crudo, eso es pecado  :-X se guardan MINIMO en MD5 u otro algoritmo de hash
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: MinusFour en 25 Septiembre 2014, 23:15 PM
Cita de: engel lex en 25 Septiembre 2014, 22:54 PM
si no tienes magic quotes montado, si...


Código (php) [Seleccionar]
$username=$_POST['username'];
$password=$_POST['password'];
if ($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT username,password FROM usuarios WHERE username = '$username'") or die(mysql_error());


si yo por username paso en el input algo tipo


la consulta quedará
Código (sql) [Seleccionar]
SELECT username,password FROM usuarios WHERE username = '' OR '1'='1'

lo que retornará todo...

y tienes
así que no puedes ver el username, pero puedes usar LIMIT para sacar todas las contraseñas

por cierto, las contraseñas no se guardan en crudo, eso es pecado  :-X se guardan MINIMO en MD5 u otro algoritmo de hash

$password no es la contraseña de la base de datos. Pero es cierto que puedes modificar la query.
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: engel lex en 25 Septiembre 2014, 23:22 PM
rayos ando medio dormido hoy!

MinusFour tienes razon, es que vi la linea

Código (php) [Seleccionar]
if($data['password']!=$password) {
echo "$password\n";


y vi como si fuera una asignación

pero igual retornará un error de mysql, lo que da una pista al hecho que hay una asignacion directa y sospecho que se puede inyectar algo indebido...

y no me retracto de las contraseñas en crudo
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: romerixo en 25 Septiembre 2014, 23:49 PM
Wow..rápidas respuestas, ¡Muchas gracias por responder!, Esta web es un pequeño proyectito que me hice hace bastantes años, y ya obsoleto, el código anterior es el que hay para la validación, he intentado algunas sentencias de inyection pero sin éxito, les propongo un pequeño reto si se aburren mucho para confirmar que el código es vulnerable, la url de la web es http://galaxyview.comuf.com/ (http://galaxyview.comuf.com/), tienen carta blanca para defacear o sacar el listado de usuarios. Saludos y de nuevo, Gracias por las respuestas...excelente foro!
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: romerixo en 26 Septiembre 2014, 17:26 PM
mmm...¿Nadie se anima?
Título: Re: ¿Es vulnerable a SQL Injection este código?
Publicado por: Yaldabaot en 26 Septiembre 2014, 22:44 PM
Prueba con expresiones regulares en PHP, lo harás más seguro ;)