Comprensione dell'ordine per clausola utilizzata nelle Iniezioni SQL

2

Sto cercando di enumerare un database, creato appositamente allo scopo di imparare le iniezioni SQL. Sto cercando di scoprire il numero di colonne che potrebbe utilizzare una determinata istruzione select. Lo faccio con "Ordinal" ordinando il set di risultati. Quindi, comincio con ORDER BY 1, .. BY 2 e così via fino a quando ricevo un errore che restituisce "Colonna sconosciuta". Ora, per un'iniezione come questa:

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

L'istruzione SQL risultante è:

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

Restituisce un set di risultati, ma mi aspettavo che generasse un errore restituendo "unknown column '7' in 'order clause' ". Perché non genera l'errore. La tabella con cui sto lavorando ha solo 3 colonne.

    
posta user1720897 24.04.2014 - 21:21
fonte

2 risposte

2

Se osservi la sintassi della clausola ORDER BY per la dichiarazione SELECT , afferma:

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

Quindi specifichi un nome di colonna ( col_name ), un'espressione ( expr ) o una posizione di colonna ( position ), dove le posizioni delle colonne sono numeri interi.

Ora se confronti questa sintassi con la tua clausola ORDER BY :

… order by 7 and '1'

7 and '1' è una espressione , che consiste in un'operazione AND con 7 e '1' come operandi.

Tuttavia, il seguente funziona come previsto:

… order by 7, '1'

Dove 7 è una posizione di colonna e '1' è un'espressione.

    
risposta data 25.04.2014 - 18:43
fonte
1

Penso che l'enumerazione del numero di colonne non sia ciò che sta facendo perché per questo non abbiamo bisogno di un "" nell'ordine per iniezione poiché non vogliamo che l'applicazione lanci un errore tranne quando l'iniezione supera il numero di colonne nell'istruzione select originale. Inoltre, penso che dovresti usare il commento del resto della frase dopo order by .

    
risposta data 25.04.2014 - 08:50
fonte

Leggi altre domande sui tag