Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3009160
  • 博文数量: 167
  • 博客积分: 613
  • 博客等级: 中士
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-13 21:35
个人简介

人, 既无虎狼之爪牙,亦无狮象之力量,却能擒狼缚虎,驯狮猎象,无他,唯智慧耳。

文章分类
文章存档

2015年(19)

2014年(70)

2013年(54)

2012年(14)

2011年(10)

分类: 网络与安全

2014-06-24 11:00:14

   今天继续WEB安全的学习,下面将要介绍的是比较常见的XSS与CRSF攻击。这部分只是一个概要性质的了解,作为自己知识体系的一个补充,基本上会介绍攻击的基本原理、形式,以及防御的方法和思路。

一、XSS(Cross Site Script)
   顾名思义,跨站脚本攻击,通常是指通过HTML注入技术篡改了网页,在其中插入了恶意的脚本,从而在用户浏览网页时浏览器自动执行该脚本实施的一种攻击。最初的时候XSS都是要跨域的,因此称为“跨站脚本”,但是今天由于Javascript的强大功能以及网站前端应用的复杂化,是否跨站已经不是那么重要了,但是出于习惯,我们仍旧称为XSS(为了与CSS区别,使用了'X')。
   如同上面所说的,XSS的关键有两点:“注入”和“脚本”。注入技术一般是利用网络页面自身语言的漏洞进行插入代码,而脚本则一般是Javascript。根据注入的代码是否持久可以分为反射型XSS与存储型XSS。所谓反射型XSS,是指简单地将用户的输入“反射”给浏览器,因此攻击者必须诱使用户触发该恶意链接,才会执行相应的脚本。但是这种情况大多是修改于内存中的网页,因此重启之后就会失效,我们称之为非持久型XSS。
   存储型XSS,比如攻击者发布带有恶意代码的博客,恶意链接存储在博客服务器上,每次用户浏览该博客时都会执行脚本,这种方式保存时间长,称为持久型XSS。当除了上面两种,还有一种基于DOM对象的XSS攻击,这里不再详细讨论。
   XSS攻击的实现一个依赖于“注入漏洞”,一个依赖于“XSS Payload”,无论哪个,都极大的依赖于Javascript的使用。因为利用强大的Javascript,可以执行窃取cookie、构造GET\POST请求、模拟浏览器发包、识别用户浏览器/安装软件以及获取真实IP等多种功能。这需要优秀的Javascript编写和调试技术,因为自己对于这方面并不熟悉,因此没有继续深入了解。
   XSS的防御有多种技术,但是需要根据不同的实施环境进行不同的防御,常见的有HttpOnly、输入输出检查等,这部分实现不懂,就说这么多吧。

二、CSRF(Cross Site Request Forgery)
   跨站请求伪造,自己的理解就是攻击者伪造用户请求进行攻击。这里一个简单的例子可以供大家参考,比如想删除Sohu博客的某篇文章,我们知道可以使用:

点击(此处)折叠或打开

  1. http://blog.sohu.com/manage/entry.do?m=delete&id=15677256
    那么我们只需要先在自己的域构造一个页面:,其内容为:

点击(此处)折叠或打开

  1. <img src = "http://blog.sohu.com/manange/entry.do?m=delete&id=15677256">
    然后攻击者用户访问这个页面,同时用户的浏览器就会向Sohu服务器发送GET请求,删除相应的博客。
   大体的攻击过程就是这样,攻击者首先构造包含攻击脚本的页面,然后诱使用户点击,执行攻击脚本,造成攻击。其关键在于服务器能够认证接受攻击脚本的请求,这里用到的主要是Cookie技术。一般来说,Cookie的使用方式是:
-1. 浏览器向服务器发起请求,此时浏览器中没有Cookie;
-2. 服务器向浏览器写入Cookie;
-3. 在浏览器运行期间,只要访问这个网站的所属页面,都可以直接使用该Cookie;
   这里应当区分一个临时会话Cookie和本地Cookie,看是浏览器访问认证的时候使用的是本地Cookie,建立连接之后使用会话Cookie保持和建立新的页面会话;只要浏览器运行,会话Cookie存在,浏览器就可以继续访问该网站的其他页面。但是出于安全考虑,当访问另一个站点(另一个域)时,需要发送本地Cookie作为认证,有些浏览器不支持发送第三方的Cookie,有些浏览器则会允许。上面的测试实例使用IE浏览器会失败,因为IE默认禁止发送第三方的Cookie;使用Firefox则会成功,因为Firefox默认允许发送第三方的Cookie。
   主流浏览器中,默认拦截第三方Cookie的浏览器有IE6-8,Safari;不会拦截的有Firefox2-3、Opera、Google Chrome、Android等。上述的攻击如果使用IE浏览器,就需要先诱使用户访问目标网站,再访问我们伪造的目标网站的操作请求。由于P3P头的存在,一方面便于广告等跨域,但是另一方面也放开了第三方Cookie的发送限制,很多时候如果测试CSRF时发现