Collabtive系统CSRF攻击实验

Collabtive系统跨站请求伪造攻击实验

实验简介

本次实验的目的是了解和体验跨站请求伪造(CSRF或XSRF)攻击。CSRF攻击涉及用户受害者,受信任的网站,恶意网站。受害者与受信任的站点和用户拥有一个活跃的会话同时访问恶意网站。恶意网站注入一个HTTP请求为受信任的站点到受害者用户会话牺牲其完整性。
CSRF(Cross-site request forgery):中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。作用:攻击者盗用了你的身份,以你的名义发送恶意请求。危害:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

实验内容

环境搭建

首先我们需要搭建两个站点,分别是可信站点和攻击站点。
设置DNS(/etc/hosts)

127.0.0.1   www.csrfattacker.com
127.0.0.1   www.csrf.com

使用Apache创建这两个站点:

$ sudo vim /etc/apache2/conf.d/lab1.conf
80>
ServerName http://www.csrfattacker.com
DocumentRoot /var/www/CSRF/Attacker/

$ sudo vim /etc/apache2/conf.d/lab2.conf
80>
ServerName http://www.csrf.com
DocumentRoot /var/www/CSRF/Collabtive/

建立完成后启动Apache和MySQL

$ sudo service apache2 start
$ sudo mysqld_safe

我们可以使用浏览器访问这两个网站来检验服务是否正常启动。

对目标网站进行攻击

我们可以进行CSRF攻击,是源于浏览器使用的同源策略。简单来说,同源策略就是,浏览器代替我们向服务器发送请求,这个请求在服务器端看起来就是我们的计算机发出的,而并不知道是真实的人发出还是系统或软件发出,只当做相同的来处理。因此,我们可以使用一个网站伪造用户向另一个网站发送恶意请求,这个伪造的请求不会被受害服务器识别。
既然如此,我们就首先要让浏览器获得受害方的cookie等资源,从而获得受害网站的访问权限。我们以admin的身份登录受害网站www.csrf.com。我们试图伪造admin用户的请求。
既然我们需要伪造请求,我们就先需要知道请求的格式。使用抓包工具抓取用户资料修改页面发送的数据。这是一个post请求,因此我们需要在攻击网站上伪造用户发出一个符合格式的post请求。我们在攻击网站编写代码如下:

This page forges an HTTP POST request.

将这个网页保存为攻击网站访问的默认网页(如index.html),当用户在登录受害网站时访问攻击网站,攻击网站就会发送一个合法的POST请求修改用户资料。攻击成功。

对CSRF攻击进行防御

在进行CSRF攻击时,我们发现,我们是在模拟用户向服务器端发送一个合法的请求,这个的前提是,我们需要知道(伪造出)请求的全部内容。那么我们是否可以让攻击者无法伪造请求,从而消除攻击呢?答案是有的,随机数。
我们可以要求用户在发送请求时,加上自己的cookie等双方共有的随机数,这样验证时双方匹配而第三者无法得知。当然这也不是说使用cookie就可以做到万无一失,因为攻击者还可以利用XSS等手段获得这些随机数。
(修改验证配置文件,增加验证用户sessionid,代码略)

你可能感兴趣的:(Seed实验,csrf)