Iniezione SQL: come iniziare quando il valore del parametro id non è numerico

0

Attualmente sto imparando l'iniezione SQL e mi sento abbastanza a mio agio nell'iniezione SQL di base. Lo sto imparando risolvendo le sfide online e finora mi sono imbattuto solo in situazioni in cui il parametro 'id' è numerico. ad esempio: link

Ora mi sono imbattuto in una situazione in cui il valore del parametro id è un misto di caratteri e numeri casuali. Ho provato a generare un errore utilizzando tutti i modi possibili, da virgolette singole a query vere e false a non avere successo. Ho anche pensato che potesse essere codificato da qualcosa, quindi ho cercato di decodificarlo anche usando convertitori online. Non ho bisogno di aiuto per risolvere la sfida, ho bisogno di conoscere i vari modi in cui posso avvicinarmi a un URL come link .

    
posta aed94 20.07.2018 - 14:46
fonte

2 risposte

2

Il tipo di argomento non dovrebbe giocare alcun ruolo in SQL injection altro da come viene creata la query SQL in primo luogo.

SQL injection abusa di una query SQL creata dal parametro come una stringa. Il server Web considera l'intero URL come una stringa e analizza anche tutti i parametri come stringa. Pertanto, anche quando ID è numerico, ad esempio 1, viene trattato da un server Web come stringa e il codice viene quindi inserito come stringa. Ciò ti consente di inserire caratteri speciali, che non sarebbero possibili se fossero consentiti solo numeri.

Tuttavia, potrebbero esserci delle differenze nella query SQL. Quando si utilizza la stringa in una query SQL, la stringa deve essere racchiusa tra virgolette singole ' . I numeri possono, ma non devono essere. Numero: SELECT * FROM Test WHERE id = $NUMBER; Stringa: SELECT * FROM Test WHERE id = '$TEXT';

Quando hai una stringa racchiusa tra virgolette, devi prima chiudere le virgolette. Ad esempio, invierai A'; DROP TABLES *;-- che ti darebbe: %codice%. Puoi vedere il SELECT * FROM Test WHERE id = 'A'; DROP TABLES *; --' di finire il primo ' in modo che il tuo comando ' sia trattato come un comando e non come testo. Il - è usato per i commenti in SQL e qui lo usiamo per eliminare DROP TABLES *; di chiusura. Altrimenti, causerebbe una query SQL non valida.

Tieni presente che i numeri CAN utilizzano anche virgolette in una query, quindi l'utilizzo di questo metodo di escape potrebbe essere utile per provare anche se il sito utilizza solo numeri nel parametro. Inoltre, a seconda del motore SQL, altri tipi di virgolette possono essere utilizzabili virgolette singole, ad esempio virgolette doppie, che cambierebbero il modo in cui devi sfuggirle.

    
risposta data 20.07.2018 - 15:16
fonte
1

Non c'è differenza qui. Esegui l'iniezione SQL proprio come avresti fatto se il valore del parametro fosse numerico. Tuttavia, visto che il tuo normale modo di generare un errore non sta funzionando, potrebbero esserci alcune contromisure. Rilevare errori manualmente senza avere un occhio allenato può essere difficile a volte.

Se hai ancora problemi dopo aver considerato tutto quello che ho detto, forse dovresti utilizzare qualcosa come sqlmap per aiutarti.

    
risposta data 20.07.2018 - 18:34
fonte

Leggi altre domande sui tag