[Non sono sicuro se dovrei pubblicare questo post su SO o qui. Penso che le mie domande potrebbero essere risolte se ho avuto una buona esperienza con MySQL. Ma io no. Quindi probabilmente, la maggior parte di voi vorrà sicuramente dirmi per leggere un buon libro SQL (in tal caso, mi dica quali libri leggere come risposta alle mie domande non verrà data risposta in alcun modo libro, quindi, vorrei assolutamente leggere un libro che risponde a tali domande). Tuttavia, attualmente voglio sporcarmi le mani con i test delle penne della web app e non posso farlo senza immergermi direttamente in essa. Inoltre, esperienza e conoscenza derivano dalla pratica. :) Quindi per favore portami con me.]
Sono nuovo nel test delle penne delle app Web e sto praticando l'iniezione SQL sui Mutillidae. Sono nella pagina di accesso delle informazioni dell'utente e ho fornito l'input come ' or 'a' = 'a
. Lavorato. Ho ottenuto tutti i record dal database.
Ora voglio scoprire quante colonne ci sono nel database e i tipi di colonne (solo per esercitazioni). Volevo provare il metodo "ORDER BY" e il metodo "UNION SELECT 1, null, null--" meted sul I test di OWASP per la pagina Web di SQL injection. Così ho dato il mio input come ' or 'a' = 'a' ORDER BY 3--
(si noti che c'è uno spazio dopo --
. Non sono sicuro di come metterlo nel testo preformattato) in quanto sono stati restituiti 3 campi nel mio precedente attacco. Ha funzionato di nuovo. Così ho giocato con la query. Ho provato 1,2 invece di 3 nella seconda query e hanno funzionato bene. L'unico cambiamento era che l'ordine dei record restituiti era diverso. Tuttavia, la query ha funzionato anche quando ho fornito la query di input come ' or 'a' = 'a' ORDER BY 4--
e ' or 'a' = 'a' ORDER BY 5--
. Tuttavia, vedo ancora 3 campi nell'output. Inoltre, la query non ha funzionato quando ho dato ' or 'a' = 'a' ORDER BY 6--
o qualsiasi numero superiore a 6. Invece ho ricevuto un errore. Le mie domande:
-
Perché la query funziona quando fornisco 4 o 5 come input? Significa che ci sono 5 colonne? In tal caso, perché i record di output contengono solo 3 campi?
-
Perché la query not funziona quando fornisco un valore > = 6?
-
Ho anche notato che lo spazio è necessario dopo
--
. Se non fornisco uno spazio, l'iniezione SQL non funzionerà. Perché ho bisogno di uno spazio? -
Perché non è necessario un
;
(punto e virgola) nella mia query inserita. Per quanto ne so MySQL, non esegue la query a meno che non gli dessi un punto e virgola. Tuttavia, la mia query viene eseguita qui perfettamente senza un punto e virgola. Perché?