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

3,953 views
3,752 views

Published on

Vulnerabilidades en JSON www.hackingmexico.mx

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,953
On SlideShare
0
From Embeds
0
Number of Embeds
1,851
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×