Il problema con il tuo approccio è che PHP non sta per (Okay, come indicato di seguito nei commenti, è possibile, ma è improbabile) eseguire più di una query simultanea e stai chiudendo la query iniziale con un punto e virgola, quindi cercando di crearne uno nuovo all'inizio di SELECT
. Dovresti UNION
o UNION ALL
li.
username'; SELECT * FROM users;
Dovrebbe essere simile a:
username='admin' UNION ALL SELECT CONCAT(username, 0x3A, password) AS details FROM users LIMIT 0,1;
Leggi questo link per la sintassi UNQL di MySQL link
Esistono due tipi principali di SQL Injection, sono Blind e basati su errori.
Blind è dove non si otterrà alcun output dalla query fornita, si potrebbe semplicemente notare un pezzo di testo o immagine o qualcos'altro mancante dalla pagina, e si deve enumerare attraverso varie opzioni per ottenere il risultato desiderato.
Basato sugli errori, come suggerisce il nome, dove lo script genera un errore, puoi vedere esattamente cosa devi fare. Vedrai almeno il risultato dell'iniezione da qualche parte sulla pagina o nel codice sorgente della pagina.
In tutti i casi, dovresti essere in grado di utilizzare la sintassi INTO OUTFILE
di MySQL per inviare i risultati dell'interrogazione in un file, assumendo che tu abbia le autorizzazioni giuste per farlo.
link
Questo è per la maggior parte dei casi di iniezione MySQL, tuttavia, ci sono più di due tipi di SQLi, ma per gli scopi di questa conversazione, sono quelli principali che devi sapere.
Questo è un buon tutorial sulle iniezioni SQL: link