2010-10-20 24 views
7

Guardando attraverso alcuni log di Apache, ho incontrato il seguente schema più volte (URL decodificato):Qual è il significato SQL di 0x5E5B7D7E?

GET /foo.php?id=1 and union select 0x5E5B7D7E,0x5E5B7D7E,0x5E5B7D7E,... -- 

Chiaramente questo è un tentativo di SQL injection. Ma perché la costante mostrata sopra? Non riesco a vedere come potrebbe essere particolarmente significativo, anche se sembra apparire abbastanza frequentemente.

Per quello che vale, la costante sopra mappa per i seguenti caratteri ASCII: "^[}~" o "~}[^" se si inverte l'ordine dei byte. Il valore in decimale è 1,583,054,206, in ottale è 013626676576. Il codice non sembra mappare a una sequenza utile di istruzioni x86.

Una ricerca Google per il numero rivela semplicemente i resti dei tentativi di utilizzare lo stesso attacco SQL injection su altri siti - nessuna informazione sull'attacco stesso.

Qualcuno ha qualche idea?

+0

la mia ipotesi è che siccome le parole chiave sql sembrano essere parte di un'istruzione più grande perché la sequenza inizia con un "e", i numeri dopo le parole chiave non sono necessariamente una parte dell'istruzione sql che stanno cercando di iniettare . forse stanno cercando di iniettare sql e non-sql allo stesso tempo? – akonsu

+0

Sì, ho notato che "e unione" è un po 'strano, ma la mia vera tranquillità è: perché quel numero? Sembra essere un elemento comune negli attacchi SQL injection. – tylerl

+0

Potrebbe voler provare a sfruttare un software specifico. Che tipo di software sta funzionando il tuo sito? – mellowsoon

risposta

8

Questo valore è un identificativo univoco. Se il valore "^[}~" appare nella pagina, il bot sa che sei vulnerabile a SQL injection, dove appare come se il valore "0x5E5B7D7" non fosse interpretato dal tuo server sql. Questo test di SQL injection probabilmente inizia con un solo 0x5E5B7D7E e quindi continua con un numero predefinito di essi. Questo perché con un'unione selezionare l'unione deve restituire lo stesso numero di colonne della selezione a cui è stato aggiunto, e il bot deve forzare questo valore.

Nota che questo test non funziona con iniezione sql cieca perché il valore "^[}~" non sarà visibile. A blind sql injection test per mysql si invierà una chiamata a sleep(30) o BENCHMARK(5000000,md5(1337)). Ciò causerà il caricamento della pagina per alcuni secondi, indicando che questo codice SQL è in esecuzione.