Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
By Annika Pringles
 JSON: Un formato ligero de  intercambio de datos basado en  nombre/valor:{"parameter":"value","next_parameter":"next_val...
 Y como Ajax utiliza HTTP podemos  accesar a los datos JSON  directamente en el explorador  modificando la URL En la API...
 JSON está chido, pero cuando  necesitamos que regrese valores  que contengan HTML, ahí hay  problema! Podemos intentar ...
 Como a los exploradores les encanta  renderear código a pesar de que le  indiques que el Content-Type sea  application/j...
 Verificando que se puedan agregar  extensiones arbitrarias en la URL El sitio esté usando HTTPS La página tenga ‘heade...
 Como siempre, hay que validar  todos los input que haga el usuario Cuando el input del usuario se  tenga que regresar a...
Upcoming SlideShare
Loading in …5
×

HackingMexico Xss en aplicaciones web con ajax

4,200 views

Published on

Vulnerabilidades en JSON www.hackingmexico.mx

  • Be the first to comment

  • Be the first to like this

HackingMexico Xss en aplicaciones web con ajax

  1. 1. By Annika Pringles
  2. 2.  JSON: Un formato ligero de intercambio de datos basado en nombre/valor:{"parameter":"value","next_parameter":"next_value"} Usando Ajax, podemos transmitir datos JSON mientras la página Web se esté cargando.
  3. 3.  Y como Ajax utiliza HTTP podemos accesar a los datos JSON directamente en el explorador modificando la URL En la API de Twitter podemos armar una URL que regresa en formato JSON los datos de mi Twitter:https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=annikapringles&count=1&callback=callbackcallback([{"created_at":"Sat Apr 21 15:15:51 +00002012","id":193719704974659584,"id_str":"193719704974659584","text":""vestida", paramatar","source":"u003ca href="http://twitter.com/#!/download/iphone"rel="nofollow"u003eTwitter foriPhoneu003c/au003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":52305348,"id_str":"52305348","name":"AnnikaPringles","screen_name":"annikapringles","location":"Mexico City","description":"Im an operation thatis executed in every 3d software, when a 4 sided vertical node dynamic is cross interpolated with aparticle dampening...
  4. 4.  JSON está chido, pero cuando necesitamos que regrese valores que contengan HTML, ahí hay problema! Podemos intentar inyectando un <s> en alguno de los datos del request, y si vemos que el explorador responde con texto y una línea quiere decir que la página es vulnerable al XSS
  5. 5.  Como a los exploradores les encanta renderear código a pesar de que le indiques que el Content-Type sea application/json o application/x- javascript, puedes ser objetivo de que alguien pueda ‘esnifear’ tu contenido y así puedan ejecutar Javascripts chuecos Internet Explorer confía ciegamente en la extensión cuando se está ‘esnifeando’ contenido y las extensiones de los archivos pueden ser cambiadas en cualquier momento, esto es, si tenemos usuario/json nos regresa texto plano, pero si le cambiamos a usuario/json.html lo puede interpretar como HTML! Dependiendo el servidor web hay varias formas de hacer este cambio de extensiones: /json.htm /json.html /json/.html (PHP and Asp.NET) /json;.html (JSP) /json.cgi?a.html
  6. 6.  Verificando que se puedan agregar extensiones arbitrarias en la URL El sitio esté usando HTTPS La página tenga ‘headers’ para cache-control: no cache o pragma: no-cache El sitio tenga el ‘header’ content- disposition: attachment Que el Content-Type del sitio esté puesto para image/[anything]
  7. 7.  Como siempre, hay que validar todos los input que haga el usuario Cuando el input del usuario se tenga que regresar al explorador, siempre codificar ese texto propiamente, p.ej.: reemplazar < con Unicode como u003C Y finalmente, como un extra, incluir en el servidor web el header X-Content-Type-Options: nosniff, esto para evitar que ‘esnifeen’ contenido en Internet Explorer 8+ y otros exploradores

×