Mi spiace in anticipo se questa è una domanda noobish, ma non riesco a trovare il giusto fraseggio per ottenere la risposta su google o qui - Sono abbastanza nuovo per SQL e sto lavorando su una sfida SQLi che è un'iniezione cieca. La pagina non restituisce alcuna informazione a meno che tu non esegua correttamente una query o utilizzi le virgolette in un modello che non sono stato in grado di identificare, nel qual caso dice "non puoi farlo". È silenzioso se si causa qualsiasi tipo di errore con il proprio input. Di conseguenza non sono stato in grado di capire quale sia il backend, quale varietà di SQL viene utilizzata, quale sia il nome del database o quali siano i nomi delle tabelle.
L'istruzione in esecuzione deve essere qualcosa come " SELECT * FROM table WHERE title='
". Il sito mi consentirà di scaricare tutte le voci della tabella da cui viene eseguita la query iniettando something' OR '1' = '1
. So che c'è un'altra tabella nel database contenente informazioni che ho bisogno di ottenere (una bandiera), ma se provo qualcosa come something' UNION SELECT * FROM users WHERE '1' = '1
, restituisce "non puoi farlo". Anche dopo molti scherzi, non sono stato in grado di capire quali criteri filtra le virgolette - la dichiarazione UNION che ho provato ha la stessa quantità di caratteri di citazione dell'istruzione OR '1' = '1 che FA eseguire e aggiungere virgolette superflui che non cambiano il significato della query (aggiungendo virgolette aperte e chiuse casuali, inserendo una virgoletta singola in un commento nel mezzo della query) a volte si attiva "non è possibile farlo" e qualche volta no. Non sono stato in grado di identificare uno schema.
La mia domanda è questa: c'è un modo per indurmi a pensare che sto usando il giusto numero / modello di virgolette, come un pattern che già conosco, ma includo anche un'istruzione UNION codificata in esadecimale che verrebbe eseguito come parte della query? Ho provato cose come something' OR '1' = '1 CONVERT(varbinary(max), <hex code for ' UNION SELECT * FROM users WHERE '1' = '1>)
ma non ho ottenuto alcun risultato. Dal momento che l'iniezione è cieca, non posso dire se sto facendo qualcosa che è un errore di sintassi (l'istruzione CONVERT trasforma effettivamente il codice esadecimale in ASCII che sarebbe poi eseguito come parte della query?) O se la mia logica è disattivata. Se qualcuno potrebbe farmi sapere se ciò che sto facendo ha senso e / o indicarmi la giusta direzione che sarebbe molto apprezzato.
Grazie!