Possono ancora essere sfuggite 4 singole virgolette producendo una iniezione sql sul server sql? [duplicare]

4

Ho trovato un semplice breakout in una clausola where in uno dei nostri progetti in cui il codice è così vecchio da richiedere di non poter utilizzare i parametri per comunicare con ms SQL server. È scritto in C ++, non riesco a leggere questa lingua e non sono in grado di accedere al codice in alcun modo.

Per illustrare il problema ho aggiunto un esempio di un'istruzione non dannosa, la parte in grassetto è ciò che l'utente può inserire direttamente

SELECT '1 ' SELECT 2--';

L'offerta singola dopo 1 sta causando la rottura in questo scenario. Questo è ciò che ho mostrato al team.

Hanno quindi effettuato un rilevamento nel codice che cerca le virgolette singole e aggiunge altre tre virgolette singole dopo ogni singola citazione trovata. Quindi l'esempio diventerebbe questo

SELECT '1'''' SELECT 2--';

Non mi piace affatto questa soluzione, ma non riesco più a trovare un modo per uscire. I campi all'interno del database sono memorizzati trattati come caratteri nvarchar. C'è ancora la possibilità di bypassare questa pratica in qualsiasi tipo?

    
posta Samyne 07.02.2018 - 10:51
fonte

2 risposte

1

the code is so old that they claim they can't use parameters to communicate with ms SQL server

Questa è una scusa pessima. È come dire "la tua macchina è così vecchia, non possiamo costruire le cinture di sicurezza". Potrebbero dover rifare un sacco di lavoro con tecniche più moderne, ma può essere fatto.

La correzione che hanno applicato è l'escaping, che è una soluzione corretta (la seconda soluzione migliore per le query parametrizzate). Per evitare un apostrofo (o 'virgoletta singola') in MSSQL, puoi lo precede con un altro apostrofo . Perché gli sviluppatori ne hanno aggiunti altri due? L'unica spiegazione che posso pensare è che l'output è interpretato come SQL di nuovo, ma sinceramente non lo so e dovrebbe creare bug se non altro.

Per quanto riguarda come uscirne, quella parte della tua domanda sembra essere un duplicato di questa (anche se la tua è specifica per MSSQL):

Come sconfiggere il raddoppio degli apostrofi creare un attacco SQLi?

La risposta è fondamentalmente:

[...] you may be able to force various SQL databases to translate unicode to the local charset. For example, Ā could be converted to A. Even worse: U+02BC, or ʼ would be translated as ', which is U+0027. This is called Unicode-based Smuggling.

    
risposta data 13.05.2018 - 13:25
fonte
0

Stanno codificando i personaggi pericolosi - questo non è un approccio sbagliato, ma può creare altri problemi. Stanno cambiando la lunghezza della stringa - se non stanno facendo attenzione a controllare la lunghezza dopo la codifica, potrebbero aprirsi a un buffer overflow, o (in alcuni casi) troncare la codifica nel mezzo per creare un preventivo inaspettato.

Prova a inserire tutte le virgolette singole e guarda cosa succede.

Meglio rifiutare le virgolette singole, supponendo che si tratti di un nome di colonna e si può essere sicuri che non ci siano colonne con virgolette singole.

    
risposta data 13.04.2018 - 03:37
fonte

Leggi altre domande sui tag