Estoy probando una aplicación de caja negra que utiliza Java Framework y MySQL en el back-end.
Cuando inserto una comilla simple ( '
) en un campo de cuadro de texto, el servidor devuelve un error de servidor interno del código de estado HTTP 500 con el siguiente seguimiento de la pila de errores,
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; mala gramática SQL [seleccione el código, nombre, num_code del auto donde el SUPERIOR (código) LIKE UPPER ('%'% ') LIMIT 0,10];
Así que es absolutamente una inyección SQL.
Y debido a eso, intenté eliminar una fila en otra tabla que se encuentra en la misma base de datos con la carga útil a continuación:
%'); DELETE FROM p_test WHERE t_id=1#
que a su vez cambiará la consulta como:
select code, name, num_code from car where UPPER (code) LIKE UPPER('%%'); DELETE FROM p_test WHERE t_id=1# %') LIMIT 0,10
Ahora debe eliminarse una fila en la tabla p_test con t_id = 1
, pero devuelve el código de estado HTTP 500 con el seguimiento de pila inferior,
[http-bio-8080-exec-7] ERROR c.q.j.e.r.CommonHandlerExceptionResolver - doResolveException resolverá la siguiente excepción: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; mala gramática de SQL [seleccione código, nombre, num_code del auto donde UPPER (code) LIKE UPPER ('%%'); ELIMINAR DE p_test DONDE t_id = 2 #% ') LIMIT 0,10]; la excepción anidada es com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: tiene un error en su sintaxis SQL; revise el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'BORRAR DESDE p_test DONDE t_id = 2 #%') LIMITE 0,10 'en la línea 1
Si alguien tiene alguna idea, responda.