2010-08-10 18 views
8

Il sito ho lavorato è stato recentemente tentato di essere violato dal seguente script SQL injectionPuoi spiegare questa iniezione SQL?

boys' and 3=8 union 
select 1, 
concat(0x232425,ifnull(`table_name`,0x30),char(9),ifnull(`table_rows`,0x30), char(9),0x252423), 
3,4,5,6,7,8,9 

from `information_schema`.`tables` 

where table_schema=0x62646B3032 limit 44,1 -- And '8'='8 

Questa iniezione restituito il nome della tabella mysql. Questo è stato segnalato dal sistema di segnalazione degli errori su quel sito Web e siamo riusciti a correggere quella parte, tuttavia non sono in grado di capire cosa significa l'iniezione sopra riportata?

Chiunque può spiegare questo?

Peniel

+0

Sto cercando specificamente il significato di utilizzo come "0x232425", ifnull ('table_rows', 0x30) ecc nell'iniezione sopra. – Penuel

+4

http://xkcd.com/327/ –

risposta

4

Secondo this il concat MySQL()

Restituisce la stringa che risulta dalla concatenazione degli argomenti. Può avere uno o più argomenti. Se tutti gli argomenti sono stringhe non binarie, il risultato è una stringa non binaria. Se gli argomenti includono stringhe binarie, il risultato è una stringa binaria. Un argomento numerico è convertito al suo equivalente sotto forma di stringa binaria

Così 0x232425 viene convertito # $% che viene semplicemente sommato al l'inizio e la fine del campo nome_tabella. Forse solo per rendere più facile per loro estrarre i nomi del tavolo più tardi usando Regex.

In seguito il char (9) è equivalente a una scheda come potete vedere here ed è proprio lì per formattare l'output più bello.

Il 3,4,5,6,7,8,9 è proprio lì in modo che le colonne corrispondano alla tabella ragazzi su cui stanno eseguendo l'Unione.

+1

Grazie e ottima spiegazione. – Penuel

6

Stanno usando una selezione da punto di vista degli schemi delle informazioni a server MySQL:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Usano alcuni hack intelligenti per sbaragliare le semplici tecniche di prevenzione di SQL injection.

+0

Sebbene si usi MySQL, entrambi i database hanno tabelle information_schema (da MySQL 5). – SteveCav

+0

Questo è MySQL. Notare i backtick. Ma sì, MySQL ha anche un "database" di informazioni_schema. – cHao

+0

Grazie a tutti, ma quello che sto cercando valori specifici come 0x232425 nella query. Che cosa sta facendo? – Penuel

3
Questa iniezione ha restituito il nome della tabella mysql.

Vuoi dire che il tuo sito web ha visualizzato il nome della tabella quando hai dato questo input, o che la query restituisce che quando viene eseguito dal client mysql? Se viene visualizzato sul tuo sito Web, l'autore dell'attacco ha la possibilità di iniettare query molto più dannose. Controlla i tuoi dati.

+0

Ha mostrato il nome della tabella sul nostro sito web. Ci siamo resi conto della serietà e abbiamo riparato quella parte con i filtri di input.Stiamo anche lavorando su alcuni filtri di input globali in modo che, anche se i programmatori non riescono a controllare l'input, quell'input verrebbe ignorato automaticamente dall'applicazione, costringendo i programmatori a verificare l'input. – Penuel

Problemi correlati