Alcune domande riguardanti l'iniezione SQL

0

[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:

  1. 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?

  2. Perché la query not funziona quando fornisco un valore > = 6?

  3. Ho anche notato che lo spazio è necessario dopo -- . Se non fornisco uno spazio, l'iniezione SQL non funzionerà. Perché ho bisogno di uno spazio?

  4. 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é?

posta Pervy Sage 10.05.2014 - 23:09
fonte

1 risposta

3

Why does the query work when I give 4 or 5 as the input? Does that mean there are 5 columns? If so, why do the output records contain only 3 fields?

Sì, la query fallirebbe se si desidera ordinare secondo una colonna che non esiste. Così come posizione della colonna 5 funziona ma 6 no, ci sono solo 5 colonne selezionate. Perché solo 3 di questi sono visibili all'utente fino allo sviluppatore. Forse ha selezionato tutte le colonne (ad es. * ) invece di quelle necessarie o solo i 3 sono pensati per essere visibili all'utente.

Why does the query not work when I give any value >= 6?

Vedi sopra.

I also noticed that the space is necessary after the --. If I don't give a space, the SQL injection won't work. Why do I need a space?

MySQL richiede uno spazio bianco o un carattere di controllo dopo -- come indicato nella sintassi dei commenti :

In MySQL, the “-- ” (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on). This syntax differs slightly from standard SQL comment syntax, as discussed in Section 1.8.2.5, “'--' as the Start of a Comment”.

Why isn't a ; (semi-colon) necessary in my injected query. As far as I know MySQL, it doesn't execute the query unless I give it a semi-colon. However, my query executes here perfectly without a semi-colon. Why?

Il punto e virgola è richiesto solo come separatore tra le istruzioni. Viene anche utilizzato per terminare l'input dell'istruzione sulla console mysql .

    
risposta data 10.05.2014 - 23:37
fonte

Leggi altre domande sui tag