elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Problema con el login (PostgreSQL+Apache+PHP5)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el login (PostgreSQL+Apache+PHP5)  (Leído 3,019 veces)
ars1993

Desconectado Desconectado

Mensajes: 60


640k deberian ser suficientes para todo el mundo..


Ver Perfil
Problema con el login (PostgreSQL+Apache+PHP5)
« en: 22 Enero 2014, 12:05 pm »

Buenas, es la primera vez que utilizo PostgreSQL como gestor de base de datos y estoy haciendo un informe sobre SQL injection. El problema es que estoy teniendo un error en el código y no tengo ni idea de donde estoy cometiendo el fallo. A ver si alguien mas experimentado me hecha una mano :P Basicamente son dos archivos:

login.php
Código:
<?php
session_start();

include 'pg.inc.php';

//Si se ha rellenado anteriormente el formulario, comprobar los datos
if(isset($_POST["nombre"])){

//Sentencia SQL a ejecutar
$sql = "SELECT * FROM usuarios WHERE nombre = ".$_POST["nombre"]." and contrasena = ".$_POST["pwd"];
echo $sql;
$resultado = ejecutar_SQL($conexion,$sql);

//Si hay filas, los datos de acceso eran correctos
if(numero_filas($resultado) != 0){

//Obtener los datos del usuario loggeado
$fila = fila($resultado,0);

//Almacenar su ID en los datos de la sesión
$_SESSION["usuario"] = $fila["id"];

//Dar la bienvenida
echo "<h3>Login OK</h3> Bienvenid@ ".$fila["desc"]."<br> Pulse <a href='prducto.php'>aqui;</a> para continuar.";
}
else{
echo "<h3>Login fallido</h3>";
}
}

//Si no se ha iniciado la sesión, mostrar un formulario de logon
if(!isset($_SESSION["usuario"])){
print '<form method="POST" action="login.php">
<table border="1">
<tr>
<td colspan="2"> Introduzca sus datos de acceso</td>
</tr>
<tr>
<td>Nombre:&nbsp;</td>
<td><input type="text" name="nombre" id="nombre"></td>
</tr>
<tr>
<td>Clave:&nbsp:</td>
<td><input type="password" name="pwd" id="pwd"></td>
</tr>
</table>
<input type="submit" value="Enviar">
</form>';
}

?>


pg.inc.php
Código:
<?php
//Abrir una conexión con la Base de Datos
function conectar($host, $db, $usuario, $contraseña){
return pg_connect("host=$host dbname=$db user=$usuario password=$contraseña");
}

//Cerrar una conexión
function cerrar_conexion($conexion){
pg_close($conexion);
}

//Ejecutar una consulta SQL sobre una conexión
function ejecutar_SQL($conexion, $cadena){
return pg_exec($conexion, $cadena);
}

//Obtener el número de filas de un resultado
function numero_filas($resultado){
return pg_numrows($resultado);
}

//Obtiene la fila número $i de un resultado
//Para obtener un campo se usa la sintaxis $fila_obtenida["nombre-de-la-columna"]
function fila($resultado, $i){
return pg_fetch_array($resultado, $i);
}


//Nos conectamos a la bd
$conexion = conectar('localhost', 'SQL_injection', 'postgres', '***********');
?>


El error que me da cuando hago el submit en el formulario es el siguiente:
Código:
Warning: pg_exec(): Query failed: ERROR: column "faqef" does not exist LINE 1: SELECT * FROM usuarios WHERE nombre = faqef and contrasena =... ^ in C:\xampp\htdocs\sql_injection\pg.inc.php on line 14


Pero lo mejor de todo, es que hago un echo de la consulta SQL que construyo y es correcta! :S
Código:
SELECT * FROM usuarios WHERE nombre = faqef and contrasena = fewe
En este caso, tendria que devolver un "login fallido" en vez de tirar un error.


Aver si alguien tiene mas vista que yo. Muchas gracias ;D ;D


En línea

640k deberian ser suficientes para todo el mundo..
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema con el login (PostgreSQL+Apache+PHP5)
« Respuesta #1 en: 22 Enero 2014, 13:01 pm »

los valores a comprar en los parámetros van entre comillas simples porque siempre puede causar errores


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: Problema con el login (PostgreSQL+Apache+PHP5)
« Respuesta #2 en: 22 Enero 2014, 20:16 pm »

Cambia esto,
Código
  1. $sql = "SELECT * FROM usuarios WHERE nombre = ".$_POST["nombre"]." and contrasena = ".$_POST["pwd"];

Por esto,
Código
  1. $sql = "SELECT * FROM usuarios WHERE nombre = '".$_POST["nombre"]."' AND contrasena = '".$_POST["pwd"]."'";
En línea

Te vendería mi talento por poder dormir tranquilo.
ars1993

Desconectado Desconectado

Mensajes: 60


640k deberian ser suficientes para todo el mundo..


Ver Perfil
Re: Problema con el login (PostgreSQL+Apache+PHP5)
« Respuesta #3 en: 23 Enero 2014, 14:08 pm »

@shellroot, tu solucion me ha funcionado, muchas gracias
En línea

640k deberian ser suficientes para todo el mundo..
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines