¿Por qué no puede sqlmap encontrar una inyección de SQL en mi código?

6

Instalé XAMPP en mi PC de desarrollo, e inicié el servidor HTTP Apache y MySQL.

Viene con una página de prueba "colección de CD", con el siguiente código PHP de fondo:

mysql_query("DELETE FROM cds WHERE id=".round($_REQUEST['id']));

No soy un experto en PHP, supongo que la llamada round está ahí para evitar la inyección de SQL. Así que lo eliminé del código PHP, dejando lo siguiente:

mysql_query("DELETE FROM cds WHERE id=".$_REQUEST['id']);

Verifiqué que puedo modificar los parámetros de consulta en la URL para hacer lo que me gusta en la base de datos, por lo que la vulnerabilidad de inyección de SQL definitivamente está ahí.

Ahora estoy tratando de usar sqlmap para encontrar la vulnerabilidad de inyección de SQL. Lo ejecuto así:

python sqlmap.py -u "http://127.0.0.1/xampp/cds.php?action=del&id=14"

Pero devuelve lo siguiente:

  

[16:01:47] [ADVERTENCIA] El parámetro GET 'id' no es inyectable [16:01:47]   [CRITICAL] todos los parámetros no son inyectables, intente aumentar   --nivel / - valores de riesgo para realizar más pruebas. Ejecute de nuevo sin proporcionar el interruptor --te chnique. Dale una oportunidad con el interruptor - sólo texto si   La página de destino tiene un bajo porcentaje de contenido textual (~ 15.27% de   el contenido de la página es texto)

¿Alguna idea de lo que puedo estar haciendo mal?

    
pregunta LeopardSkinPillBoxHat 04.06.2012 - 08:03
fuente

4 respuestas

8

Existe una gran probabilidad de que su servidor no muestre ningún error / advertencia. Sqlmap intenta inyectar cargas de tipo sql inj.-like y observa el "estado" de la aplicación web. Como sqlmap no tiene acceso a su código vulnerable o contenido de base de datos, solo puede adivinar la vulnerabilidad potencial observando el comportamiento de la aplicación web, en este caso el comportamiento "visual" (no hay advertencias / errores - no hay errores sql-inj). / p>

Sin embargo, sqlmap te dio una buena idea: intenta aumentar los valores de nivel / riesgo:

    python sqlmap.py -u "http://..." --level=3 --risk=3

después de ese cambio, aumentará la cantidad de cargas útiles (enviadas a su aplicación web) y encontrará sql.inj ciego. Significa que en el nivel 3 (y --risk = 3) sqlmap no comprueba solo los efectos "visibles". Utiliza alguna operación de toma de tiempo [BENCHMARK ()] que retrasa la respuesta del servidor si es sql. Inj. Ocurre.

    
respondido por el p____h 06.06.2012 - 09:16
fuente
2

¿Tiene que iniciar sesión en la aplicación web para visitar esa página? Si es así, sqlmap no tiene su cookie de autenticación, por lo que es posible que deba alimentar una cookie válida con --cookie=... .

No tengo mucha experiencia con sqlmap, pero noté que una página web en línea afirma que sqlmap 0.9 no es confiable y la última versión de desarrollo es más confiable . Eso es una cosa más que podrías intentar.

Siempre hay algo obvio: ¿probó las recomendaciones que sugiere en la salida que citó?

    
respondido por el D.W. 04.06.2012 - 08:45
fuente
2

1) Utilice la última revisión de nuestro repositorio (de su salida dada es obvio que está usando v0.9 anterior - muchas cosas han cambiado hasta entonces):
$ svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

2) Los mensajes de error no son necesarios para la detección de sqlmap (como en otras "herramientas"). Sqlmap encuentra la manera de inyectar algo para usarlo y no "solo" busca mensajes de error (que no prueban nada)

3) Aumente el nivel / riesgo cuando esté seguro de que debería ser explotable (por ejemplo, --level = 3 --risk = 3) pero en la mayoría de los casos, el nivel / riesgo predeterminado no debería ser suficiente

Saludos cordiales,
Miroslav Stampar

    
respondido por el stamparm 06.06.2012 - 09:57
fuente
-2

¡Vamos intercambio de pila! De Verdad? ¡Esto es tan fácil de responder! Echemos otro vistazo:

id=". round ($ _ REQUEST ['id']))

¿Ya lo viste? ¡Su inyección de SQL está siendo redondeada fuera de la imagen! PHP está redondeando "0 O 1 = 1; -" a solo 1. Elimine la función de ronda y trátese toda la noche.

    
respondido por el d3k4y 25.12.2014 - 08:14
fuente

Lea otras preguntas en las etiquetas