CSRF

gran avance para las aplicaciones web, y no son los basados en JSON CSRF. A menudo, las aplicaciones web basadas en el JSON tecnología ( un acrónimo de la expresión "JavaScript Object Notation") para enviar y recibir solicitudes desde y hacia el servidor, y esto puede ser las aplicaciones web expuestas a labrecha , como  CSRF . En este caso, la explotación de la brecha se ser más complejo que en uso normal. 

Por ejemplo , supongamos que estamos probando penetrar en un sitio en particular, y descubrimos lapetición siguiente

POSTAL / editar / 1 / nombre de usuario HTTP / 1.1
Anfitrión: example.com
Content-Type: application / json
Content-Length: 19
{ "Nombre de usuario": "test"}

obvio para usted que existe algún tipo de las fichas en la demanda, lo que nos permite llevar a cabo ataques CSRF y cambiar el nombre de usuario a la víctima sin su conocimiento si van a visitar la página bajo nuestro control. El siguiente paso es la preparación de un archivo HTML para llevar a cabo el ataque, pero ¿cómo lo haremos en los casos normales



Se envía a los parámetros y valores en el parámetro de formulario = valor, y contrastarlo con el código HTML es el siguiente:



<Input type = "hidden" name = "nombre de usuario" "value =" prueba "/>

Pero en este caso lo que se envía en forma de { "parámetro": "valor"}, ¿qué podemos hace
podemos tratar de manipular el HTML Bkod para enviar una petición similar para la solicitud anterior, pero con algunas diferencias son las siguientes:
k4n0j2d8Antiguo código se utiliza para formar la labor de la solicitud, y debe tenerse en cuenta que el valor de la enctype de forma en el texto / sin formato, y para evitar que el navegador de una codificación URL operación de entrada antes de la presentación de la solicitud.


En la forma sin entrada no tiene valor, pero el valor de un nombre que es { "nombre de usuario": "test" }, ahora para enviar la aplicación en su navegador y ver qué pasa ( se puede ver la solicitud enviada por eluso de cualquier herramienta de proxy como  eructar suite ):


OSTAL / editar / 1 / nombre de usuario HTTP / 1.1
Anfitrión: example.com
Content-Type: text / plain
Content-Length: 24
= { "Nombre de usuario": "hackeado"}
Lo que ha sido específicamente? Y por qué no es el signo = después de que el emisor de carga útil?
Como hemos identificado en la forma de un código HTML que envíe la solicitud y determinar el tipo de contenido como text / plain, y ya que la carga útil se envía sin el trabajo de codificación URL estado. Pero el envío de el signo =, y fue porque nos hemos identificado el remitente de carga útil como el valor de la denominación en el sector . De entrada, y lo que el navegador hace es que toma el valor de nombre seguido por el signo = y luego ss vale la pena el valor, que está vacío en este caso. 

Ahora, que podemos decir que el ataque había tenido éxito cuando las condiciones siguientes son disponibles:
  • La aplicación web no garantiza que el valor de la cabecera Content-Type es application / json
  • El analizador JSON ignora los valores adicionales en el contenido de la solicitud, tales como la marca de = en este caso
  • Segundo intento
Afortunadamente, hay una solución más práctica que la solución anterior, veamos el siguiente código HTML medida

upotc2ah
Ealor medio del código que ha cambiado el nombre y el valor de una manera que nos permite enviar el valor de sonido JSON, y al mismo tiempo nos permite explotar el sonido hueco y exitosa. El siguiente es el remitente del servidor de aplicación en este caso:
POSTAL / editar / 1 / nombre de usuario HTTP / 1.1
Anfitrión: example.com
Conexión: cerrar
Content-Type: text / plain
Content-Length: 39
{ "Nombre de usuario": "hackeado", "pueden ignorarse": "="}
¿Por qué era en este caso?
Como hemos mencionado anteriormente, el navegador envía el valor del nombre, y luego = entonces el valor del valor, en este caso, todo lo que hemos hecho es que hemos añadido valor adicional puede ignorarse su nombre mediante la adición de un marcador "," en el emisor JSON, y el valor en este caso es =. Este método no funciona en todos los casos, ya que debe ser añadir nuevos parámetros a la petición del servidor remitente permitido por la aplicación web, y que los valores de estos parámetros están ignorando una parte, el código de fondo.
Tal vez ahora pensando en hacer el mismo ataque, pero mediante el uso de XMLHttpRequest, Vamos a hablar de este asunto y ver qué pasa. Vamos a ajustar el código HTML contiene el código siguiente
XSS


  • La creación de un nuevo objeto XMLHttpRequest tipo y el nombre xhr, el objeto de esto es simplemente lo que está enviando la solicitud para el servidor más tarde
  • Xhr ajustarse cambiando el valor del atributo de la verdadera afirma withCredentials, y en este caso será enviado a las cookies específicas del sitio infectadas con el remitente de la demanda
  • Utilice la función de apertura para enviar una solicitud POST a la URL mencionada
  • Además de la cabecera de la petición de solicitud llamado Content-Type y el valor de application / json hasta que la tradición de la aplicación original con exactitud
  • Por último, utilice la función de envío para enviar la solicitud realidad mediante la conversión de la función de la carga útil de JSON objeto a través del uso de JSON.stringify a continuación, pasar la salida de carga útil para enviar una función previamente mencionado


Por último, la solicitud se envía automáticamente al abrir la página en cualquier navegador, ahora vamos a abrir la página y usar la suite eructar o cualquier herramienta de proxy para que podamos ver la demanda del remitente
kchdaio2

XMLHttpRequest, está primero asegúrese de que el valor de la cabecera Content-Type, si es que no eran iguales a text / plain se envía la solicitud OPCIONES antes de la aplicación original, este tipo se conoce de las solicitudes de peticiones previas al vuelo, y son por lo general la etapa de las etapas para hacer sitio merecido seguro (en este contexto llamado origen) envía esta solicitud. 

Si fue contenida responde el servidor a la solicitud de pre-vuelo a la cabecera-Allow-Origen Access-Control y su valor es * (es decir, cualquier origen) o si el valor es el dominio del remitente de la verificación previa-petición (en nuestro caso es nula y por lo que envió que desde su PC a nuestra se es no servidor), se envía a todos solicitud original en este caso. Haciendo caso omiso de la aplicación original que no eran este es el caso. 

Entonces, ¿qué podemos hacer si la respuesta no es necesaria para responder? 

Como lo hicimos en el ejemplo anterior, en este caso debe enviar la aplicación después de cambiar la cabecera Content-Type text / plain luego enviar la solicitud de nuevo, la siguiente imagen es la solicitud después de que cambiamos la cabecera se ha mencionado anteriormen

u2vtkj2h
Como vemos, enviamos una solicitud POST también se quería y sin solicitud previa al vuelo Enviar como en el ejemplo anterior, sabiendo que el éxito del ataque en este caso depende tanto dependen de dos condiciones mencionadas anteriormente en el ejemplo anterior. 
Espero que se han beneficiado de este artículo, por favor no dude en dejar sus preguntas y consultas si había un claro parcia