Cómo hacer que sqlmap explote una vulnerabilidad de SQLi

1

He encontrado una simple vulnerabilidad de SQL ciego booleano y quiero que sqlmap haga la iteración por mí, pero no parece funcionar, tengo la impresión de que intenta comenzar en un punto en el que estoy muy lejos. Aquí están los detalles. La vulnerabilidad es así

http://host/path?param=123

y puedo consultar de esta manera

http://host/path?param=123' or 10 = (select len(system_user()));--

(URL codificada por supuesto). Si la segunda condición o condición es verdadera, obtendré en algún lugar de la respuesta "Encontrados 1000 hits". Si es falso habrá "0 resultados encontrados". Así que ahora puedo hacer una búsqueda binaria fácilmente con

http://host/path?param=123' or 100 < (select ascii(substring(system_user(), 1, 1));--

carácter por carácter (es MS SQL Server en caso de que no lo hayas notado). Esto parece tan fácil que no puedo entender que sqlmap me sigue diciendo que "param no parece ser inyectable". Aquí está la llamada sqlmap que he intentado:

sqlmap -u "http://host/path?param=123" -p param --current-user --dbms mssql --prefix="123' or " --suffix=";--" --risk 3 --level 2

He jugado con --risk, --level y --technique = B y también --string="Found 1000 hits". Nada ayuda. ¿Cómo puedo decirle a sqlmap que no busque nada sino que simplemente haga esta tonta iteración?

    
pregunta kaidentity 18.05.2017 - 10:12
fuente

2 respuestas

2

Los puntos de inyección tan simples como su ejemplo pueden sin duda ser recogidos por sqlmap.

Aquí hay algunas ideas para solucionar problemas:

  • ¿Podría el servidor usar un WAF o reaccionar de otra manera al agente de usuario sqlmap ( sqlmap/x.x )? Use --user-agent para especificar el mismo agente de usuario que tiene su navegador (o uno genérico).

  • ¿El servidor reacciona de manera diferente en las solicitudes HTTP consecutivas y rápidas? Puede usar --delay para especificar un intervalo de retraso entre solicitudes.

  • Para una inyección tan simple, por lo general, no necesita especificar --prefix y --suffix . Mejor omítalos para no meterse con el propio proceso de análisis de sqlmap.

  • Intente omitir --dbms mssql si no está 100% seguro acerca del DBMS backend. Por lo general, sqlmap puede resolverlo por sí mismo.

  • ¿Podrían autenticarse las solicitudes o depender de algunas configuraciones de cookies que desconoce? Use --cookie para agregar las mismas cookies que se podrían configurar en su navegador.

  • Depure las solicitudes y respuestas con sqlmap y compárelas con lo que obtiene en su navegador. Puede establecer un alto nivel de verbosity (por ejemplo, -v 6 ) para supervisar todo el tráfico HTTP .

  • Use curl para verificar que la inyección manual generalmente funciona fuera de su navegador. Por ejemplo:

    curl "http://host/path?param=123' or 10 = (select len(system_user()));--" | grep "1000 hits"
respondido por el Arminius 18.05.2017 - 11:08
fuente
2

Como mencionó que encontró un SQli ciego basado en valores booleanos, necesitará una entrada de mapa sql como la que se muestra a continuación:

#sqlmap -u "http://host/path?param=123" --technique=B --level=5 --risk=3 --random-agent --dbms=MSSQL
  • --technique switch forzará solo los ataques ciegos SQLi
  • --random-agent se asegurará de que uses un agente de usuario legítimo, la mayoría de las vulnerabilidades no pueden ser explotadas si no proporcionas esto ya que el sitio puede impedirle ver a un agente desconocido
  • aumentar el nivel
  • Además, su consulta no tiene ningún otro parámetro, así que omita el proporcionar la parte del parámetro y el sufijo y los prefijos
respondido por el Nipun Jaswal 18.05.2017 - 12:37
fuente

Lea otras preguntas en las etiquetas