CSRF

Cross-Side Request Forgery

Técnicas de evasión

Clickjacking

La explotación de clickjacking en el mismo endpoint evita toda la protección CSRF.

Para probarlo usar el siguiente html cambiando la URL de la etiqueta iframe:

<html>
<head>
<title>Clickjack test page</title>
</head>
<body>
<p>Website is vulnerable to clickjacking!</p>
<iframe src="http://www.yoursite.com/sensitive-page" width="500" height="500"></iframe>
</body>
</html>

Cambiar el método de la solicitud

Por ejemplo, esta solicitud:

POST /change_password
POST cuerpo:
nueva_contraseña=qwerty

Puede reescribirse como:

GET /change_password?new_password=qwerty

Protección CSRF a través de tokens

El hecho de que un sitio utilice tokens CSRF no significa que los esté validando correctamente.

Elimina el parámetro de token o envía un token en blanco

Por ejemplo, si una solicitud legítima se ve así:

POST /change_password
POST cuerpo:
new_password=qwerty&csrf_tok=871caef0757a4ac9691aceb9aad8b65b

Prueba esto:

POST /change_password
POST cuerpo:
nueva_contraseña=qwerty

o esto:

POST /change_password
POST cuerpo:
new_password=qwerty&csrf_tok=

Utilice el token CSRF de otra sesión

Es posible que la aplicación solo verifique si el token es válido o no, y no verifica si pertenece al usuario actual . Si ese es el caso, simplemente puede codificar su propio token CSRF en la carga útil. Digamos que el token de la víctima es 871caef0757a4ac9691aceb9aad8b65b , y el tuyo es YOUR_TOKEN. Puede obtener su propio token CSRF fácilmente, pero no el token de la víctima. Intente eludir la protección CSRF proporcionando su propio token en lugar del token legítimo.

Protección CSRF a través de Referer

Digamos que attacker.com es un dominio de su propiedad. Y bank.com es el sitio que está atacando. El sitio no utiliza tokens CSRF, sino que está comprobando el encabezado del remitente. que puedes hacer ahora?

Eliminar el encabezado del referidor

De manera similar a enviar un token en blanco, a veces todo lo que necesita hacer para omitir una verificación de referencia es simplemente no enviar una referencia. Para hacer esto, puede agregar la siguiente metaetiqueta a la página que aloja su carga útil:

<meta name = "referrer" content = "no-referrer">

Es posible que la aplicación solo esté validando el remitente si se envía uno, en ese caso, ¡ha omitido con éxito su protección CSRF!

Omitir la expresión regular

Si la verificación de referencia se basa en una lista blanca, puede intentar omitir la expresión regular utilizada para validar la URL. Por ejemplo, puede intentar colocar el nombre de dominio de la víctima en la URL de referencia como subdominio o como directorio.

Si el sitio está buscando “ bank.com” en la URL árbitro, tal vez “ bank.com.attacker.com” o “ attacker.com/bank.com” va a funcionar.

Last updated