[SOLUCIONADO] ¿Para qué usan el csrf_token en los formularios?

Iniciado por GGZ, Diciembre 28, 2016, 05:04:09 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 28, 2016, 05:04:09 AM Ultima modificación: Diciembre 29, 2016, 08:13:50 PM por Nobody
Hola.

Una pregunta, hay páginas que usan un token al enviar formularios POST, pero no entiendo muy bien el funcionaiento de éste.
¿Alguien me podría explicar para que sirve?, porque yo de todos modos puedo sacar el token con bash.

Un ejemplo (funciona perfectamente):

Código: text
#!/bin/bash
echo "Token usado para enviar formularios via post"
while true; do wget -qO - http://codeforces.com/profile/ | grep -m 1 "input type='hidden' name='csrf_token' value" | awk '{print $6}' | cut -d "'" -f 2; done


Lo ejecutan con bash No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o ./co.sh

Saludos.

Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta,

No estoy 100% seguro, pero si un 99% de que los tokens se generan de forma dinámica. Es decir, el usuario ejecuta cierta acción, se genera el token y eso le sirve para llevar a cabo la acción que está realizando. Una vez que finalizó esa acción, el token queda deprecado (No sirve más)
Es por ello que por más de que lo puedas ver o robar, no lo vas a poder utilizar debido a que ya lo utilizó la persona previamente y quedó deprecado.

Saludos,
ANTRAX


Diciembre 28, 2016, 09:36:25 AM #2 Ultima modificación: Diciembre 28, 2016, 09:39:54 AM por GGZ
Mmm pero si yo lo puedo ver, dejo el token funcionando hasta que lo use, o ¿no es así? Entonces de todas formas puedo hacer la consulta.

Depende como esté hecho el sistema, pero en teoría 1 token se puede usar 1 sola vez. Esa persona ya lo utilizó en el momento que lo capturaste, por lo que cuando lo quieras usar ya no te servirá.

Saludos,
ANTRAX


Diciembre 28, 2016, 10:15:29 AM #4 Ultima modificación: Diciembre 28, 2016, 10:39:46 AM por GGZ
Claro entiendo ahora lo que decís. O sea que ¿no existe forma de usarlo?, la única forma sería adivinando el siguiente token sin hacer una petición a la página, porque cuando hago la petición el token ya se elimina, ¿no?

No creo, entonces ¿por qué existe el captcha? si con un token ya está (según tú definición), sólo podrías mandar una petición.

El captcha sirve para que no te roben una password por medio de fuerza bruta.
Son dos cosas diferentes


Creo que te había entendido mal, ya sé como funciona un token. Cada vez que entrás a la página se genera uno y se elimina cuando lo usás o después de un determinado tiempo.

Lo que yo había entendido de lo que me dijiste es que un token (que tranquilamente puede ser un formulario de contraseña y usuario) sólo se podía utilizar una vez entonces no podía mandar muchas consultas porque el token ya fue usado, pero no, simplemente se genera otro token y listo.

Buenas tardes CGZ,
Esto se usa en formularios con Django, es un método de seguridad que se implementa.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

;D

Vive solo por lo que estas dispuesto a morir

En mexico existia y algunos todavía los dan son TOKENS, consta de un dispositivo que genera números aleatorios cada 5 segundos, eran usados para acceder vía web, te pedía tu num de tarjeta o cuenta, tu nip y tu token, pero como dice antrax aunque otra persona sepa ese token, ya no servirá mas cuando iniciaste sesión o cuando han pasado los 5 segundos.

En realidad no se exactamente como funciona ese metodo, pero ya te explicaron maso menos como es que se utiliza.



Se que no tiene nada que ver con redes, pero tal vez el funcionamiento es similar.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


El token sirve para evitar CSRF, ahora bien, para ello, el token debe ser dinámico en cada petición, sino, no serviría de nada (ojo, aunque esto esté implementado podrías utilizar XSS para robar el token y hacer así CSRF, pero, ya estamos hablando de otra vulnerabilidad).

Sigamos, qué es CSRF?

CSRF (Cross-site request forgery) es una vulnerabilidad que permite al atacante que una víctima lance una petición a un servidor A, desde un servidor B, sin que la víctima obviamente lo sepa. Por este motivo, si el atacante no tiene el token, la aplicación nunca "tramitará" su petición. (Explicado a grosso modo para que me entiendas).


Cualquier cosa me comentas.



Mi definición, para que se pueda entender fácil:
Imagina que el token es el sistema de doble autentificación aplicado en muchos servicios (como gmail), el cual si lo activas, puedes configurar tu teléfono para que si intentas iniciar sesión, tengas que introducir un código (token) que te envían al teléfono u otro correo alternativo. Ese código solo puedes utilizarlo una vez, y si no llegas a utilizarlo caduca al poco tiempo, en este caso, el token es el código aleatorio que recibes en el teléfono y tienes que introducir para iniciar sesión.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El token sirve para evitar CSRF, ahora bien, para ello, el token debe ser dinámico en cada petición, sino, no serviría de nada (ojo, aunque esto esté implementado podrías utilizar XSS para robar el token y hacer así CSRF, pero, ya estamos hablando de otra vulnerabilidad).

Sigamos, qué es CSRF?

CSRF (Cross-site request forgery) es una vulnerabilidad que permite al atacante que una víctima lance una petición a un servidor A, desde un servidor B, sin que la víctima obviamente lo sepa. Por este motivo, si el atacante no tiene el token, la aplicación nunca "tramitará" su petición. (Explicado a grosso modo para que me entiendas).


Cualquier cosa me comentas.

Esa es la unica respuesta correcta de todas las que te dieron

Voy a tratar de explicar un poco mas.
Un captcha está para asegurarse de que hay una persona haciendo una petición. Si no está el captcha, podes automatizar la peticion con un programa.
Un token anti csrf está para asegurarse de que la petición la hizo el usuario que está logueado y que esta no fue forzada por otra página.

Por ejemplo, yo puedo poner esto en este post: <img src="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta">
Suponiendo que vos estas logueado en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y que esa es la url para hacer transferencias, tu navegador al tratar de cargar la imagen estaria haciendo una transferencia de plata sin que vos lo sepas.
Si esa página agrega el token como un parámetro y lo checkea cuando recibe la petición, va a tirar un error en lugar de hacer la transferencia. Yo no podria saber ese token por la same origin policy de los navegadores.
También se puede forzar una petición POST, poniendo un formulario y enviandolo con javascript

Si estas haciendo un bot podes hacer que se loguee, lea el token y haga la petición, porque no estan intentando protegerse de un bot, si no de un csrf.

¡Hola!

Dada la cantidad de respuestas y la información aportada, doy el tema como solucionado.

Por favor, no dudés en comentar si surge alguna otra duda.

Saludos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Diciembre 31, 2016, 08:00:17 AM #13 Ultima modificación: Enero 01, 2017, 04:45:30 PM por GGZ
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El token sirve para evitar CSRF, ahora bien, para ello, el token debe ser dinámico en cada petición, sino, no serviría de nada (ojo, aunque esto esté implementado podrías utilizar XSS para robar el token y hacer así CSRF, pero, ya estamos hablando de otra vulnerabilidad).

Sigamos, qué es CSRF?

CSRF (Cross-site request forgery) es una vulnerabilidad que permite al atacante que una víctima lance una petición a un servidor A, desde un servidor B, sin que la víctima obviamente lo sepa. Por este motivo, si el atacante no tiene el token, la aplicación nunca "tramitará" su petición. (Explicado a grosso modo para que me entiendas).


Cualquier cosa me comentas.

Esa es la unica respuesta correcta de todas las que te dieron

Voy a tratar de explicar un poco mas.
Un captcha está para asegurarse de que hay una persona haciendo una petición. Si no está el captcha, podes automatizar la peticion con un programa.
Un token anti csrf está para asegurarse de que la petición la hizo el usuario que está logueado y que esta no fue forzada por otra página.

Por ejemplo, yo puedo poner esto en este post: <img src="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta">
Suponiendo que vos estas logueado en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y que esa es la url para hacer transferencias, tu navegador al tratar de cargar la imagen estaria haciendo una transferencia de plata sin que vos lo sepas.
Si esa página agrega el token como un parámetro y lo checkea cuando recibe la petición, va a tirar un error en lugar de hacer la transferencia. Yo no podria saber ese token por la same origin policy de los navegadores.
También se puede forzar una petición POST, poniendo un formulario y enviandolo con javascript

Si estas haciendo un bot podes hacer que se loguee, lea el token y haga la petición, porque no estan intentando protegerse de un bot, si no de un csrf.

Buenísima explicación, todo aclarado.

Gracias a todos los que se tomaron el tiempo de contestarme.