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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  SQL injection (pruebas)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SQL injection (pruebas)  (Leído 1,700 veces)
ars1993

Desconectado Desconectado

Mensajes: 60


640k deberian ser suficientes para todo el mundo..


Ver Perfil
SQL injection (pruebas)
« en: 28 Enero 2014, 12:27 pm »

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:
Código:
http://localhost/pruebas/producto.php?id='
Ésto peta que ya es lo que interesa y da el error siguiente:
Código:
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:
Código:
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
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='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:&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>';
}

?>



PRODUCTO.PHP
Código:
<?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


En línea

640k deberian ser suficientes para todo el mundo..
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: SQL injection (pruebas)
« Respuesta #1 en: 28 Enero 2014, 21:01 pm »

Para un ejemplo más clado de lo que estás haciendo, solo printea la query despúes de enviar la inyección. Ahora entra en el motor de base de datos y ejecuta la query y ve que devuelve. -con sólo ver la query te darás cuenta de tu fallo-


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
CAST EXEC en sql injection(Automated Sql Injection)
Nivel Web
EvilGoblin 2 5,033 Último mensaje 11 Julio 2010, 22:25 pm
por EvilGoblin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines