Las inyecciones de SQL no parecen funcionar

1

Estoy intentando ejecutar un SQLi pero el mysql da una respuesta de error. La entrada debe comentar todo desde después de los dos guiones para que pueda dar como resultado lo siguiente: '%' . En su lugar, da este error: '--%' '.

Este es el código que estoy usando para ejecutar la consulta.

if(isset($_GET['test'])){

    $test = $_GET['test'];

    //test
    $res = $db->run_query_find_all( "SELECT * FROM product WHERE name LIKE '%$test%'");

    while($product = $res->fetch_assoc()){
        print_r($product);
    }

}

Entrada

  

'; -

En el ejemplo del editor:

Respuesta:

  

TienesunerrorentusintaxisSQL;revisaelmanualque  correspondealaversióndesuservidorMySQLparaqueseutilicelasintaxiscorrecta  cercade'-%''enlalínea1

Actualizar

TodavíarecibounerrorinclusosisimplificomiSQLi.CuandohagounasolicitudPOSTconlamismaconsulta,nomuestraerrores,peromuestratodaslasfilasdelatabladeProductos,loquesignificaqueelSQLifueexitoso.

Entrada:'--

Entrada:'#

    
pregunta melkawakibi 26.05.2017 - 15:37
fuente

2 respuestas

4

Primero, echemos un vistazo a tu entrada:

'   <-- this closes the quoted string
;   <-- this closes the SELECT statement
--  <-- this comments out the rest

Esto en realidad no tiene mucho sentido. Incluso si su función run_query_find_all admite consultas múltiples, lo cual es poco probable, ¿por qué querría crear una nueva consulta solo para comentarla? [En realidad, no debería causar un problema, pero tampoco es necesario, y siempre es bueno mantener su carga útil lo más simple posible; la complejidad hace que sea difícil ver dónde están los errores reales]

Esto significa que podemos simplificar su carga útil a '-- .

Ahora tenemos esto:

'   <-- this closes the quoted string
--  <-- this comments out the remaining characters, so that we have a valid query

Aunque todavía tenemos un error. La documentación de comentarios de MySQL explica por qué:

  

Desde una secuencia hasta el final de la línea. En MySQL, el estilo de comentario - (doble guión) requiere que al segundo guión le siga al menos un espacio en blanco o un carácter de control (como un espacio, una pestaña, una nueva línea, etc.).

Necesitas un carácter de espacio en blanco después del comentario de doble guión. Entonces, agrégalo o usa un carácter de comentario diferente:

'-- -   <-- will work
'#       <-- will also work (URL encode as %23 if needed)

Tenga en cuenta que agregué otro carácter después del espacio en blanco para evitar que se recorte el espacio en blanco.

    
respondido por el tim 26.05.2017 - 15:58
fuente
1

La documentación dice:

  

En MySQL, el estilo de comentario - (doble guión) requiere que al segundo guión le siga al menos un espacio en blanco o un carácter de control (como un espacio, una pestaña, una nueva línea, etc.). Esta sintaxis difiere ligeramente de la sintaxis estándar de comentarios de SQL.

    
respondido por el Sjoerd 26.05.2017 - 15:58
fuente

Lea otras preguntas en las etiquetas