Entendiendo la cláusula orden por utilizada en las inyecciones de SQL

2

Estoy tratando de enumerar una base de datos, creada específicamente con el propósito de aprender inyecciones SQL. Estoy tratando de descubrir el número de columnas que una declaración de selección particular podría estar usando. Lo hago por "Ordinal" ordenando el conjunto de resultados. Entonces, comienzo con ORDER BY 1, .. BY 2, y así sucesivamente hasta que obtengo un error al devolver 'Columnas desconocidas'. Ahora, para una inyección como esta:

localhost/sqli?id=2' order by 7 AND '1

La declaración SQL resultante es:

mysql> SELECT * FROM table_name where id='2' order by 7 and '1';

Esto devuelve un conjunto de resultados, pero esperaba que arrojara un error al devolver "unknown column '7' in 'order clause' ". ¿Por qué no arroja el error? La tabla con la que estoy trabajando tiene solo 3 columnas.

    
pregunta user1720897 24.04.2014 - 21:21
fuente

2 respuestas

2

Si observa la sintaxis de la cláusula ORDER BY para la declaración SELECT , declara:

[ORDER BY {col_name | expr | position}
  [ASC | DESC], ...]

Por lo tanto, puede especificar un nombre de columna ( col_name ), una expresión ( expr ) o una posición de columna ( position ), donde las posiciones de columna son enteros.

Ahora, si compara esta sintaxis con su cláusula ORDER BY :

… order by 7 and '1'

7 and '1' es una expresión , que consiste en una operación AND con 7 y '1' como operandos.

Sin embargo, lo siguiente funciona como se esperaba:

… order by 7, '1'

Donde 7 es una posición de columna y '1' es una expresión.

    
respondido por el Gumbo 25.04.2014 - 18:43
fuente
1

Creo que enumerar el número de columnas no es lo que está haciendo, porque para eso no necesitamos una "'" en el pedido por inyección, ya que no queremos que la aplicación arroje un error, excepto cuando la inyección supera el número de columnas en la declaración de selección original. Además, creo que debería usar comentar el resto de la declaración después de ordenar por .

    
respondido por el Asak 25.04.2014 - 08:50
fuente

Lea otras preguntas en las etiquetas