-
A continuación se muestra el código PHP que escribí que permite la inyección de SQL con un parámetro, es decir, 'id' en este caso.
-
Al intentar la inyección de SQL mediante la colocación de este 2 'ORDER BY 1; -' en el parámetro (campo de identificación), solo obtengo errores de SQL en la página.
-
Al ejecutar la consulta directamente en el servidor mysql, es decir, SELECT * FROM users WHERE id = '2' ORDER BY 1; - ''; Obtengo el siguiente resultado que es 1 fila junto con el error.
mysql> SELECT * FROM users WHERE id = '2' ORDER BY 1;--''; +----+----------+-----------+------------------+ | id | username | password | creditcard | +----+----------+-----------+------------------+ | 2 | John | password! | 3123456769384659 | +----+----------+-----------+------------------+ 1 row in set (0.00 sec)
ERROR 1064 (42000): Tiene un error en su sintaxis SQL; Consulte el manual que corresponde a la versión de su servidor MySQL para la sintaxis correcta para usar cerca de '-' '' en la línea 1
código PHP
<?php
require_once 'login.php';
if (!isset($_GET['id']))
{
echo <<<_END
<pre> <h1>WELCOME to the KINGDOM</h1>
<form action = 'si2.php' method = 'GET'>
id <input type = 'text' name = 'id'>
<input type = 'submit' value = 'cl1ck M3'></pre></form>
_END;
}
if(!get_magic_quotes_gpc())
{
$id = stripslashes($_GET['id']);
}
$connection = mysql_connect($db_hostname,$db_username,$db_password);
if(!$connection) die ("Unable to connect with MySql " . mysql_error());
mysql_select_db($db_database,$connection) or die('Could not connect with the database');
$query = "SELECT * FROM users WHERE id = '$id'";
$result = mysql_query($query);
if($result)
{
$rows = mysql_num_rows($result);
}
else { echo "Could not execute the Query: <br>" . mysql_error();}
if($rows >= 1)
{
for ($j=0 ; $j < $rows; ++$j)
{
$row = mysql_fetch_row($result);
echo "Hello $row[1]"."<br>";
echo "Your Credit Card Number is $row[3]"."<br><br>";
echo $query."<br>";
//echo $row[3];
}
}
else
{
echo "<br><br><br>Sorry no rows/results could be fetched on query execution <br><br><br>";
//echo $query;
}
?>
Mi pregunta es ¿por qué mi código no puede recuperar el conjunto de filas y mostrar las entradas de la tabla? Y en caso de que quiera entonces, ¿qué cambios debo intentar?