La inyección de SQL es posible pero las consultas seleccionadas no funcionan

2

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.

    
pregunta william cage 13.06.2014 - 13:03
fuente

1 respuesta

3

La biblioteca del cliente MySQL no permite múltiples consultas apiladas de forma predeterminada, por lo que no puede ejecutar una declaración arbitraria solo con esta inyección.

Esta es una práctica mitigación contra los ataques automatizados simples, pero con el conocimiento de la aplicación específica todavía hay mucho que puede hacer con una inyección selecta. Si llega a ver el resultado de la consulta, puede UNION con otra selección en una tabla que desee conocer (de lo contrario, vea 'Inyección ciega' para obtener técnicas más tediosas para obtener esa información). Si tiene permisos SELECT INTO , puede causar un daño real (la escritura de archivos arbitrarios posiblemente se extienda a la ejecución de código arbitrario).

    
respondido por el bobince 13.06.2014 - 15:55
fuente

Lea otras preguntas en las etiquetas