¿Vulnerabilidad de la Inyección SQL de MariaDB?

1

Estoy probando la inyección de SQL en un sitio web.

Básicamente, lo estoy intentando en la siguiente url:

http://example.org/webpage/*

donde en lugar del * se debe inyectar la carga útil. Cuando intento poner allí: ' OR 1=1/* , la url será así: http://example.org/webpage/'%20OR%201=1/* - esta es la salida:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '/*', 'IT', 'name=\' OR 1=1/*', 1499954730)' at line 1

¿Esto significa que es vulnerable a la inyección SQL? Si es así, ¿cómo puedo tratar de explotarlo con sqlmap? Esto es lo que intenté ejecutar:

$ sqlmap -u "http://example.org/webpage/*"  pero dice que no hay nada inyectable, y creo que falló.

    
pregunta XRichardX 13.07.2017 - 16:09
fuente

2 respuestas

2

Podría estar equivocado, pero estoy bastante seguro de que su principal problema es que está intentando hacer una inyección de mysql mal. Como regla general, si una carga útil puede desencadenar un error de sintaxis de SQL, entonces sus intentos de evitar la Inyección de SQL no están funcionando realmente . Por ejemplo, si estaba utilizando consultas preparadas, no hay forma de que la carga útil genere un error de sintaxis SQL.

En este caso particular, el problema es que está utilizando el tipo de comentario incorrecto para ocultar el resto del comando. En este caso, es probable que tenga más suerte (haciendo que ocurra la inyección SQL) si usara un guión doble ( -- ) o un signo de libra ( # ) que ambos inician comentarios de una sola línea en MariaDB. El carácter de comentario que está utilizando ( /* ) es un carácter de comentario de varias líneas que no tiene ningún carácter de comentario de cierre. Esto parece ser la fuente del error de SQL. Si bien no estoy familiarizado personalmente con sqlmap, mi sospecha es que puede pensar que no existe una vulnerabilidad de inyección, no porque esté seguro, sino simplemente porque su carga útil de inyección está generando un error de SQL y, por lo tanto, no está ocurriendo ninguna inyección. Inténtalo de nuevo con el carácter de comentario adecuado.

Para reiterar, el hecho de que reciba un error de SQL me hace pensar que es vulnerable a la inyección de SQL, simplemente no está haciendo la inyección de SQL correctamente.

Editar

Creo que tu próximo paso es ignorar sqlmap por un momento. El ataque que está haciendo ' OR 1=1 seleccionaría todos los registros. Su URL implica que este es un tipo de página view , que muestra solo un registro a la vez. Como resultado, hay muchos casos en los que tal carga útil de inyección SQL puede no tener ningún resultado en la página en cuestión. Esta es la parte que puede hacer que sea difícil: la inyección de SQL solo es "exitosa" si realmente puede hacer algo con el ataque e impactar la aplicación de manera significativa. Así, por ejemplo, si su carga útil hace que cargue todos los registros en el comando SQL, pero la página en cuestión muestra implícitamente solo el primer resultado (porque es una página de tipo view ), entonces no se dará cuenta de que su inyección ha sido exitoso.

El problema es que su carga útil de inyección SQL dada es específica del contexto y puede no funcionar en todos los sitios de un sitio web determinado, incluso si la página es vulnerable a la inyección SQL. Eso hace que la inyección de SQL sea más complicada. Algunas herramientas de inyección de SQL pueden automatizar parte de esa dificultad, pero no sé si sqlmap es una herramienta de ese tipo.

Así que ditch sqlmap por un momento. Pruebe un tipo diferente de carga útil. En lugar de seleccionar ' OR 1=1 , intente hacer ' AND 1=0 . Esto debería (teóricamente) dar como resultado cero registros. Entonces, si obtienes un 404 (o ninguno de los resultados en general), consideraría esa evidencia de que la página es vulnerable a la inyección de SQL.

Por supuesto, si te sientes malvado, puedes probar las variantes en '; DROP TABLE users-- hasta que algo se rompa :) Aunque sería malo.

    
respondido por el Conor Mancone 13.07.2017 - 16:34
fuente
0

Buen día 2u.

Te equivocas con el punto de inyección. enlace '% 20OR% 201 = 1 / * < --- bad enlace * / < --- good

Intente capturar la solicitud http completa con el depurador web (e.x. LiveHTTPHeaders / BurpSuite) y guárdelo en el archivo (e.x. req.txt). Después de eso, inicie sqlmap con la siguiente cadena: python sqlmap.py -r req.txt - hilos 10 - nivel 5 - riesgo 3 - agente-aleatorio - lote -v 3 y pega la salida aquí.

Todo lo mejor, N.T.

    
respondido por el r3V0Lution 14.07.2017 - 09:11
fuente

Lea otras preguntas en las etiquetas