L'iniezione SQL è possibile ma le query selezionate non funzionano

2

Sono black-box per testare un'applicazione che usa il framework java spring e MySQL nel back-end.

Quando inserisco una virgoletta singola ( ' ) in un campo della casella di testo, il server restituisce un codice di stato HTTP 500 Errore interno del server con la traccia dello stack di errori di sotto,

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select code, name, num_code from car where UPPER (code) LIKE UPPER('%'%') LIMIT 0,10];

Quindi è assolutamente un SQL Injection.

E per questo motivo, ho provato a eliminare una riga in un'altra tabella che si trova nello stesso DB con il payload sottostante:

%'); DELETE FROM p_test WHERE t_id=1#

che a sua volta cambia la query come:

select code, name, num_code from car where UPPER (code) LIKE UPPER('%%'); DELETE FROM p_test WHERE t_id=1# %') LIMIT 0,10

Ora una riga deve essere cancellata nella tabella p_test con t_id = 1 , ma restituisce il codice di stato HTTP 500 con la traccia dello stack sottostante,

[http-bio-8080-exec-7] ERROR c.q.j.e.r.CommonHandlerExceptionResolver - doResolveException going to resolve the following exception : org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select code,name,num_code from car where UPPER (code) LIKE UPPER('%%'); DELETE FROM p_test WHERE t_id=2#%') LIMIT 0,10]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM p_test WHERE t_id=2#%') LIMIT 0,10' at line 1

Se qualcuno ha qualche idea, rispondi.

    
posta william cage 13.06.2014 - 13:03
fonte

1 risposta

3

La libreria client MySQL non consente più query impilate per impostazione predefinita, quindi non è possibile eseguire una dichiarazione arbitraria con questa sola iniezione.

Questa è una pratica mitigazione contro semplici attacchi automatici, ma con la conoscenza dell'applicazione specifica c'è ancora molto che puoi fare con un'iniezione selezionata. Se vedi l'output della query puoi UNION con un'altra selezione su un tavolo di cui vuoi sapere (altrimenti vedi 'iniezione cieca' per tecniche più noiose per ottenere quei dati). Se disponi di autorizzazioni di SELECT INTO puoi causare un danno reale (la scrittura di un file arbitrario può eventualmente diventare escalation per l'esecuzione di codice arbitrario).

    
risposta data 13.06.2014 - 15:55
fonte