SQLi: ¿Extraer datos de MySQL sin saber los nombres de las columnas?

-3

Aquí está el código vulnerable:

<?php
     $filtered = "/information|schema|_/i"; 
    #... blahblah

    $query = "SELECT * FROM user WHERE id='$id' AND pw='$pw';"; // exist hidden column
    $query = @mysql_fetch_array(mysql_query($query)); 
?>

No se puede acceder a la tabla information_schema, ya que se filtra fuera de la inyección.

¿Hay una manera de extraer datos sin saber el nombre de la columna?

    
pregunta ansogpo1 18.11.2015 - 12:29
fuente

2 respuestas

2

Claro, solo agrega una condición como esta:

OR 1 = 1

a la cláusula where. Para su ejemplo, podría pasar un valor de test' OR '1'='1 para ejecutar este tipo de ataque.

Obviamente, si quieres seleccionar columnas de las que no sabes tu nombre solo puedes especificar SELECT *...

    
respondido por el Abe Miessler 18.11.2015 - 16:20
fuente
1

Sí, puedes, aunque eres un poco limitado. Las opciones son:

  • todos los datos de las tablas con el mismo número de columnas que la tabla de la que selecciona el material original, siempre que conozca el nombre de la tabla. La inyección sería:

    ' UNION SELECT * from someOtherTable -- -.
    
  • todos los datos de las tablas con menos nombres de columnas que la cantidad de columnas en la tabla original, siempre que haya una tabla con la cantidad de columnas de la tabla original menos la cantidad de columnas que desea seleccionar:

    ' UNION SELECT * from someOtherTable JOIN aThirdTable -- -
    
  • toda la meta información disponible a través de las funciones ( version() , database() , etc.).

  • todos los datos de las tablas donde conoce las columnas, por ejemplo, mysql.user .
  • Puedes adivinar nombres de columnas.

El elemento que especifica las columnas seleccionadas se llama select_expr en la documentación de MySQL . Si no controla la expresión de selección de la selección original y no conoce los nombres de las columnas, y no puede crear la cantidad correcta de columnas mediante uniones, hay, por lo que sé, y cuando leo la documentación, de ninguna manera de lograr eso.

    
respondido por el tim 27.08.2016 - 21:19
fuente

Lea otras preguntas en las etiquetas