Buenas, estoy haciendo un código para probar "cosas" de SQL injection. Estoy trabajando con PostgreSQL.
Básicamente estoy probando vulnerabilidades con el paso de variables por la URL (blablabla?id="algo")
La estructura de la web vulnerable que estoy haciendo es basicamente dos ficheros. Uno de login, que una vez logeado se pasa a otro fichero que muestra productos, que los puedes buscar (ahí está la vulnerabilidad, la búsqueda por la URL con un "id=")
El problema es que estoy haciendo algo mal y no funciona la cosa. La vulnerabilidad que quiero probar es causar un error en la query (por la URL) para que me devuelva pues por ejemplo la versión de la base de datos.
Si yo hago:
http://localhost/pruebas/producto.php?id='
Ésto peta que ya es lo que interesa y da el error siguiente:
pg_exec(): Query failed: ERROR: unterminated quoted string at or near "'''" LINE 1: select * from productos where referencia = ''' ^ in C:\...etc etc
El problema es cuando intento meter en el id ésto:
http://localhost/pruebas/producto.php?id= cast(version() as int)
Ésto en teoria también tendria que petar y darme un error que por ahí enmedio del error me diria la version de postgreSQL, el sistema operativo (en éste caso el mío porque lo hago todo en local, etc etc).
Pero no es el caso, no me peta y no sé por qué motivo.
Adjunto los códigos de éstos dos ficheros aver si alguien se le ocurre algo.
LOGIN.PHP
<?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='producto.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: </td>
<td><input type="text" name="nombre" id="nombre"></td>
</tr>
<tr>
<td>Clave: :</td>
<td><input type="password" name="pwd" id="pwd"></td>
</tr>
</table>
<input type="submit" value="Enviar">
</form>';
}
?>
PRODUCTO.PHP
<?php
//-----------------------Encabezado donde se muestra el nombre de usuario-----------
session_start();
include 'pg.inc.php'; //Funciones de operaciones con la base de datos
if (isset($_SESSION["usuario"])){
//Obtener el nombre del usuario
$sql = "select * from usuarios where id=".$_SESSION["usuario"];
$resultado = ejecutar_SQL($conexion,$sql);
$fila = fila($resultado,0);
$usuario = $fila["desc"];
//Mostrar un indicador del usuario logado
echo '<table border="1" width="100%">
<tr width="100%"><td>
HA INICIADO SESSION COMO: '.$usuario.'</td></tr></table><br>';
}
else{
//Si no está logado, redirigir a logon
header('Location: login.php');
}
//-----------------------------------------------------------------------------------
//----------------------Sección para la búsqueda de productos------------------------
//Si se indicó el producto, buscarlo
if(isset($_GET["id"])){
$sql = "select * from productos where referencia = '".$_GET["id"]."'";
$resultado = ejecutar_SQL($conexion,$sql);
if(numero_filas($resultado) == 0){
echo "Referencia no encontrada";
}
else{
$fila = fila($resultado,0);
echo "<h3>Datos sobre el producto:</h3>";
echo "<table border=1>";
echo "<tr><td>Referencia</td><td>Nombre</td><td>Precio</td></tr>";
echo "<tr><td>".$fila["referencia"].'</td><td>'.$fila["nombre"].'</td><td>'.$fila["precio"].'</td></tr>';
echo "</table>";
}
}
//Mostrar formulario "Buscar"
echo '<h3>Buscar Producto</h3>
<form method="GET" action="producto.php">
Buscar: <input type="text" id="id" name="id">
<input type="submit" value="Buscar">
</form>';
?>
Muchas gracias! Saludos