Inyección de SQL: omisión de inicio de sesión [cerrado]

5

Información de fondo: Inyección de SQL como tarea de la escuela. Acceso a bypass. Dados dos campos de entrada nombre y contraseña. Confirmar a través del botón resolver.

Información sobre lo que tengo y pude averiguar:

  • obviamente es una tarea vulnerable iniciar sesión en un sistema, mientras se olvida la contraseña ( formulario clásico con campos de entrada: nombre: INPUT , contraseña: INPUT )
  • se proporciona una sugerencia de que mi ID de inicio de sesión para la página de tareas es siempre aceptada, por lo tanto, solo debe faltar la contraseña (form: name: "my ID", contraseña: ENTRADA (?))
  • el servidor ejecuta / emula MySQL , lo encontré debido a errores que recibí al intentar diferentes entradas (por ejemplo, "'OR 1 = 1" -Tricks, Union- Comandos, Outcommenting, etc.):
  • - > la estructura se muestra a través de los errores de sintaxis de MySQL: SELECT name,password FROM login WHERE name='xyz' and password='xyz'
  • - > Los comandos de unión funcionan debido, por ejemplo, a errores de número de columna
  • Las comillas mágicas están desactivadas (?) o no podría evocar comandos SQL, supongo
  • El uso de caracteres GBK para evitar la manipulación a través de 'tampoco funcionó, parece que no se están reconociendo
  • No hay código PHP disponible
  • El servidor devuelve ' tarea resuelta ' cuando el inicio de sesión es exitoso

Pregunta: ¿Qué posibilidades me quedan por probar para finalmente iniciar sesión en el sistema correctamente mediante inyección SQL?

Ejemplos de entradas que probé:

name: myID [que es el ID que sugiere la sugerencia]

contraseña: ' OR '1'='1

  • el servidor devuelve ' respuesta incorrecta ' (el inicio de sesión no fue exitoso), no hay errores de mysql

nombre: myID' OR '1'='1' --

contraseña: whatever

  • mismo resultado

nombre: myID' AND NOT ('1'='2

contraseña: foo') AND name='myID' LIMIT 1 #

  • mismo resultado

Errores, por ejemplo, cuando:

nombre: myID' OR 1=1

contraseña: whatever

  • el servidor devuelve ' respuesta incorrecta ' (el inicio de sesión no fue exitoso), da como resultado un error de sintaxis, porque la entrada se coloca en ' '
pregunta vmboy04 31.12.2015 - 16:17
fuente

1 respuesta

3

El mecanismo de autenticación se implementa en el back-end y, por lo tanto, hay dos servicios clave que ofrecen muchos profesionales de la seguridad:

  • Evaluaciones de seguridad de la caja blanca
  • Evaluaciones de seguridad de caja negra
  • Evaluaciones de seguridad de caja gris
  • Evaluaciones de seguridad de la caja de vidrio

No entraré en detalles de cada una de estas ofertas de servicios, ya que es claramente el modelo comercial de la empresa, la organización y la forma en que se ofrecen estos servicios clave, pero para la comprensión técnica, uno debería tener en cuenta que depende de la Tipo de servicios que deben prepararse los casos de prueba.

Para un ejemplo, es posible que uno no tenga acceso al código fuente, y esto no debe detener a un atacante dado el tiempo & recursos para atacar un determinado punto de entrada, es decir, en este caso, una entrada de inicio de sesión. Lo que necesitaría ingresar depende del código fuente, pero como asesor de seguridad de caja negra, tendría que descubrir la base de prueba y error de lo que debe ser el back-end y, en consecuencia, preparar sus intentos.

Este enfoque requiere mucho tiempo, pero podría ser automatizado por Burp Suite ' Intruder ' y a lista de posibles entradas podría enviarse al intruso para automatizar el tarea para ti La omisión de autenticación adicional se ha descrito aquí . En cuanto a los errores que ha recibido, verifique todos estos elementos siguientes:

  1. Asegúrese de no estar conectado a un inicio de sesión de back-end honeypot .
  2. Asegúrese de que al automatizar, la aplicación no ha empleado límites de velocidad.
  3. Si lo anterior es cierto, asegúrese de haber ajustado el tiempo en Intruder.
  4. En cualquier caso, las medidas de limitación de velocidad se basan en la ubicación geográfica, intente pivots .
  5. Si el sistema devuelve 'tarea resuelta', deberías grep la salida a partir de los resultados del intruso y, por tanto, investigue las respuestas HTTP particulares. O bien, puede revisar los 'códigos de respuesta' y seleccionar 302 respuestas siempre que el sistema no arroje 200 en cada intento (si el inicio de sesión fue exitoso o no) o 500 en una etapa de error.

A veces, muchos evaluadores sobreestiman y nunca intentan métodos más simples que es ver si admin / admin funciona o lista proporcionada aquí funciona . Nuevamente, dependería de los enfoques de prueba y error sin tener que conocer el código fuente exacto pero intentando enumerar todos los errores que dispare y luego construya su bypass. Pruebe admin' or '1'='1'-- en ambos campos para obtener un ejemplo junto con otros mencionados en la lista.

    
respondido por el Shritam Bhowmick 31.12.2015 - 17:07
fuente

Lea otras preguntas en las etiquetas