Verifica della vulnerabilità legata all'iniezione SQL

4

Recentemente ho trovato quello che ritengo essere un difetto grave nella sicurezza di un programma per computer di terze parti utilizzato all'interno della mia azienda. Chiedo scusa per aver mantenuto volutamente dei dettagli vaghi, ma spero che tu capisca!

Quando inserisci elementi nel database, non puoi inserire un apostrofo singolo nel campo del nome: gli utenti in genere hanno fatto ricorso a '' . Ho quindi scoperto questo problema quando tentavo di analizzare l'output CSV da un'esportazione eseguita da questo programma, quando la delimitazione del valore ha rotto il parser che stavo usando.

Ho parlato con il team di supporto responsabile di questo software di terze parti, chiedendo se si trattava di un tentativo di evitare l'iniezione SQL, che ha confermato che il motivo era "per evitare problemi in SQL". Anche se questo è un sistema solo per uso interno, non posso fare a meno di pensare che

  1. Questa è una pratica di codifica orrenda - semplicemente usando le istruzioni preparate invece risolverebbe istantaneamente questo problema (oltre a consentire singoli apostrofi nelle esportazioni CSV e impedire un sacco di soluzioni hack-y come risultato).

  2. Ci deve essere un modo in cui si può eseguire arbitrariamente SQL senza usare un 'proprio. Cioè '' o ''' va bene, solo ' non lo è.

Ho sollevato questo problema con il mio manager non appena l'ho scoperto (e sono passato alle conclusioni di SQL injection), ma prima di iniziare davvero a escalation delle cose vorrei confermarmi che è il buco della sicurezza che credo che sia ( oltre alla pratica di codifica orribile).

Se qualcuno può confermare che i miei sospetti sarebbero grandiosi e se riesci a trovare un esempio di codice SQL malevolo che non utilizza un ' isolato, lo apprezzerei molto.

    
posta Authentik8 04.02.2015 - 14:02
fonte

1 risposta

2

Suppongo che i dati vengano inseriti da una sorta di front-end, con un elenco di campi?

Per ragioni argomentative assumerò 4 campi. Nel primo campo fai questo:

''',(SELECT @@version), (SELECT @@version), (SELECT @@version))--

Negli altri campi metti tutto ciò che vuoi perché sono comunque commentati dal doppio trattino. Questo dovrebbe restituire la versione del server nella seconda colonna dei dati.

Modificato per l'aggiunta: potrebbe essere necessario uno spazio e un altro trattino alla fine. (Quindi -- - )

    
risposta data 04.02.2015 - 14:29
fonte