Iniezione SQL basata su errori

2

Comprendo l'idea concettuale che sta dietro SQLi basato sull'errore, ma non l'effettiva esecuzione.

In particolare, non riesco a dare un senso a questa espressione:

or 1 group by concat_ws(0x3a,version(),floor(rand(0)*2)) having min(0) or 1--

Qual è il motivo per cui "o 1", "floor (rand (0) * 2)" e min (0)?

    
posta Kiuhnm 20.01.2015 - 01:15
fonte

1 risposta

2

SQLi basato su errori si basa su un bug trovato in MySQL riguardante l'istruzione GROUP BY (vedi qui e qui ).

Per attivare il bug devi seguire le seguenti regole:

  1. Utilizza una funzione di aggregazione.
  2. GROUP BY una colonna che ha due valori identici su righe diverse.
  3. L'output della funzione rand () deve apparire nella colonna del punto 2 sopra.

La stringa

or 1 group by concat_ws(0x3a,version(),floor(rand(0)*2)) having min(0) or 1--

è iniettato in una clausola WHERE, quindi or 1 (che equivale a or true ) viene usato per cancellare le condizioni precedenti e mostrare quante più righe possibile. In questo modo, dovrebbero esserci almeno due righe con lo stesso valore per floor(rand(0)*2)) . Questo si occupa dei punti 2 e 3. Usiamo floor () in modo che i valori restituiti siano solo 0 o 1. Se dovessimo usare direttamente rand, sarebbe quasi impossibile soddisfare il punto 2.

Abbiamo bisogno di having min(0) per occuparci del punto 1.

Inoltre, l'istanza di or 1 alla fine della query è inutile e può essere rimossa.

    
risposta data 20.01.2015 - 18:39
fonte

Leggi altre domande sui tag