Questa domanda riguarda un piccolo dettaglio in un compito scolastico più ampio. Ho lottato con questo piccolo problema per troppo tempo.
ABCTF ha organizzato una competizione Capture-the-Flag che si è tenuta all'inizio di quest'anno. Uno dei problemi in questa competizione è stata un'iniezione SQL. Questo è un URL per la descrizione dell'attività e questo è un URL per il modulo di accesso che doveva essere iniettato. Esiste una soluzione pubblicata per questo problema e appare come segue:
Nome utente: -1 'union select 1,1,1,1 #
Password: 1
Ho bisogno di capire come potrebbe apparire la stringa della query di back-end. L'ipotesi più semplice e più ingenua sarebbe
String query = "SELECT FROM user WHERE username = '" + inputA + "' AND password = '" + inputB + "';";
execute(query);
Ma questo produrrebbe
String query = "SELECT FROM users WHERE username = '-1' union select 1,1,1,1 #' AND password = '1';";
execute(query);
Il problema più evidente di questo è che le virgolette sono sbilanciate. Inoltre, non capisco quale output produrrebbe l'istruzione SELECT. Come ho capito, il carattere "#" è usato per indicare tabelle temporanee in MS SQL Server, come "#temporary_table". Ho anche suonato con altre semplici affermazioni, ma nulla avrebbe avuto senso.
Qualcuno ha un'idea di come potrebbe sembrare la query di backend ? Qualsiasi suggerimento è apprezzato.