La inyección de SQL no funciona con mysqli

0

Estoy creando un sitio web simple y burlón que demuestra la inyección de SQL. Se parece a esto:

Elback-endestáescritoenPHP.

<?php$query=$_GET['query'];$min_length=3;if(strlen($query)>=$min_length){$raw_results=mysqli_query($con,"SELECT * FROM tools
            WHERE ('name' LIKE '%$query%')");

        if($raw_results === FALSE) { 
            echo "query failed, no results available." . mysqli_error($con);
            die();
        }

        if(mysqli_num_rows($raw_results) > 0){ // if one or more rows are returned do following

            while($results = mysqli_fetch_array($raw_results)){
                echo "<p><h3>".$results['name']."</h3>".$results['price']."</p>";
            }

        }
        else{ // if there is no matching rows do following
            echo "No results";
        }

    }
    else{ // if query length is less than minimum
        echo "Minimum length is ".$min_length;
    }
?>

Para esta siguiente línea de código:

$raw_results = mysqli_query($con, "SELECT * FROM tools
                WHERE ('name' LIKE '%$query%')");

Si modifico el código en:

    $raw_results = mysqli_query($con, "SELECT * FROM tools
        WHERE ('name' LIKE '%')");//$query%')");

Mientras proporcione una cadena que sea más larga o igual a tres caracteres, se mostrará la base de datos completa, lo que significa que ')");// es un ataque de inyección de SQL válido.

Pero cuando proporciono ')");// como entrada maliciosa en el cuadro de búsqueda, recibí este mensaje de advertencia:

  

error en la consulta, no hay resultados disponibles. Tienes un error en tu sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de ""); //% ')' en la línea N

No estoy seguro de por qué mi inyección SQL no podría recuperar ningún dato.

    
pregunta Yu Zhang 06.04.2017 - 04:16
fuente

1 respuesta

4

Está intentando salir de la función de PHP, que no es cómo funcionan las inyecciones de SQL. Una inyección SQL no es una inyección de código PHP y las comillas dobles no permitirán que se escape de la cadena PHP.

Solo puede modificar la cadena PHP que contiene la declaración SQL:

"SELECT * FROM tools WHERE ('name' LIKE '%$query%')"

En su lugar, intente algo como x%' or '%' = ' .

    
respondido por el Arminius 06.04.2017 - 04:34
fuente

Lea otras preguntas en las etiquetas