Web篇(6.3) 14. 跨站请求伪造 ❀ FortiWeb 攻防演练 您所在的位置:网站首页 dvwa是什么意思 Web篇(6.3) 14. 跨站请求伪造 ❀ FortiWeb 攻防演练

Web篇(6.3) 14. 跨站请求伪造 ❀ FortiWeb 攻防演练

2023-05-06 13:04| 来源: 网络整理| 查看: 265

  【简介】CSRF (Cross-site request forgery),即跨站请求伪造,也被称为 one-click attack 或者 session riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的则是网站对用户网页浏览器的信任。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

  跨站请求伪造

  跨站点请求伪造(CSRF)攻击,是利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

  举例:假如一家银行用以运行转账操作的URL地址如下:http://www.examplebank.co/withdraw?account=AccoutName&amount=1000&for=PayeeName,那么,一个恶意攻击者可以在另一个网站上放置如下代码: 。如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。

  这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。

  透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义运行操作。

  安全等级 - Low

  将DVWA的安全等级切换到Low。

    ① 选择【CSRF】,出现的是一个非常常见的修改并验证密码的输入窗口,点击【View Source】。

    ② 从源代码可以看出,这里只是对用户输入的两个密码进行判断,看是否相等。不相等就提示密码不匹配。相等的话,查看有没有设置数据库连接的全局变量和其是否为一个对象。如果是的话,用mysqli_real_escape_string() 函数去转义一些字符,如果不是的话输出错误。是同一个对象的话,再用md5进行加密,再更新数据库。

    ③ 故意输错两次密码,提交后显示密码不匹配。可以看到上面有修改密码的链接。

    ④ 直接在链接上修改正确的密码,回车后,代码执行,显示密码修改成功。

    ⑤ 现实攻击场景下,需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。这里简单的写一个html文件。

    ⑥ 当打开这个页面的时候,看上去只是显示了一个信息,但实际上修改密码的代码已经执行了。

    ⑦ 退出DVWA再登录,你就会发现,密码已经不是第一次修改的123456,而是Error.html页面隐藏的命令修改成的123了。

          【提示】 需要注意的是,CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用FireFox浏览器登录的这个系统,而用Chrome点击这个链接,攻击是不会触发的,因为Chrome并不能利用FireFox浏览器的cookie,所以会自动跳转到登录界面。

  安全等级 - Medium

  将安全等级升级为中级。

    ① 从源代码可以看出,代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是localhost),希望通过这种机制抵御CSRF攻击。

    ② 正常的登录DVWA,选择CSRF,修改密码,用BurpSuite抓包,可以看到有Referer。

    ③ 当我们再打开另一个页面,在顶部URL中自己输入同样的修改密码链接时,它会报错,提示你Http Referer字段没有定义索引。

    ④ 用BurpSuite抓包,没有看到Referer。把正常抓包的Referer代码复制到新开网页的抓包中,点击【Forward】,一样会显示修改密码成功。

  安全等级 - High

  将安全等级升级为高级。

    ① 从源代码可以看出,代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器都会返回一个随机的token,当浏览器向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。这里因为对请求的token进行了验证,所以比上两个等级的更加的安全。

  ② 再次输入密码验证,可以看到,在请求的URL中最末尾加入了token。

  在这里,我们要想获取到用户的token,并提交修改密码的表单的话,就必须得把我们的攻击脚本注入到目标服务器中 。而要想注入到目标服务器,同时得发挥作用,获取用户的 token修改密码的话,就得和XSS漏洞一起结合实现了。

  我们将如下代码通过存储型XSS插入到数据库中,这语句会弹出用户的token。

  安全等级 - Impossible

  将安全等级升级为不可能。

    ① 从源代码可以看出,代码利用PDO技术防御SQL注入,至于防护CSRF,则要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF攻击。

  FortiWeb 防护

  FortiWeb可以阻止这一类的攻击。

     ① 登录FortiWeb VM,选择菜单【Web保护】-【高级保护设置】-【CSRF保护规则】,点击【新建】。

      ② 输入保护规则名称和动作,在页面列表和URL列表中加入要保护的网页。

      ③ 选择菜单【策略】-【Web保护规范】,选择自定的规范GeneralWebSiteProtect,点击【编辑】。

      ④ 在CSRF保护规则中启用新建的dvwa,配置完成。

      当FortiWeb收到对列表中的某个web页面的请求时,它会在该web页面中嵌入一个javascript。该脚本在客户机的web浏览器中运行,并自动将参数tknfv(反csrf标记)附加到具有href属性和HTML表单元素。随后的请求是生成包含tknfv参数的HTML元素。和Dvwa中high高级代码加入token是一样的原理。

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有