• 前端web安全-CSRF基础入门


    前言

    今天找了个新地方进行学习 嘿嘿  采光不错!特别适合看书呢。

    前言

    1.CSRF

    跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

    2.漏洞危害

    是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)
    利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等

    CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

    3.CSRF漏洞原理

    从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

      1.登录受信任网站A,并在本地生成Cookie。

      2.在不登出A的情况下,访问危险网站B。

      看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

      1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

      2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

      3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

    一个场景:

    目标网站A:www.a.com

    恶意网站B:www.b.com

    目标网站A上有一个删除文章的功能,通常是用户单击"删除链接"时才会删除指定的文章,这个链接时www.a.com/blog/del?id=1,id号代表的是不同的文章。我们知道,这样删除文章实际上就是发出一个GET请求,那么如果目标网站A上存在一个XSS漏洞,执行的JS脚本无同源策略限制,就可以按下面的方式来删除文章.

    • 使用AJAX发出GET请求,请求值id=1,请求目标地址是www.a.com/blog/del?id=1
    • 或者动态创建一个标签对象(如img、iframe、script)等,将他们的src指向这个链接www.a.com/blog/del?id=1,发出的也是GET请求
    • 然后欺骗用户访问存在XSS脚本的漏洞页面(在目标网站A上),则攻击发生

    如果不使用这种方式,或者目标网站A根本不存在XSS漏洞,还可以如何删除文章?看CSRF思路

    • 在恶意网站B上编写一个CSRF页面(www.b.com/csrf.htm)页面,想想有什么办法GET请求到目标网站A上
    • 利用AJAX?不行,它禁止域传输数据
    • 那么,用代码<img src="http://www.a.com/blog/del?id=1">
    • 然后欺骗已经登录目标网站A的用户访问www.b.com/csrf.htm页面,则攻击发生

    这三个攻击过程有三个关键点:跨域发出了一个GET请求、可以无javascript参与,请求是身份认证后的

    1. 跨域发出一个GET请求
    2. 可以无javascript参与
    3. 请求是身份认证后的

    实例演示.

    漏洞网站:www.huahua.com

    黑客的恶意网站:www.hack.com

    这时我们本地搭建的一个测试网站 环境还是以上面A网站和B网站  A网站是我们的目标 当我们点击删除按钮后 它会想服务器发送这样一个HTTP请求

    当我们点击是会发出这样的跨域请求

    GET /www/admin/doAdminAction.php?act=delAdmin&id=2 HTTP/1.1
    Host: www.huahua.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Referer: http://www.hua.com/www/admin/listAdmin.php
    Cookie: PHPSESSID=4ot3e15t8m6frau1s0vvoft0b6
    Upgrade-Insecure-Requests: 1

     如果黑客构建一个这样的页面地址为:www.hack.com/csrf.html

    <html>
    <img src="http://192.168.233.1/www/admin/doAdminAction.php?act=delAdmin&id=2">
    </html>

     那么当用户打开页面的时候回发出这样的跨域请求 此时id=2的HUAHUAHUA账户被删除

    GET /www/admin/doAdminAction.php?act=delAdmin&id=2 HTTP/1.1
    Host: www.huahua.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
    Accept: image/webp,*/*
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Referer: http://www.hack.com/csrf.html
    Cookie: PHPSESSID=2a4eu21lbn2k1n126bddi56u60
    
    

    我们可以看到两个请求中,除了来源Referer值不一样外,其它都一样,尤其是我们的cookie的值,改Cookie是用户登录目标网站www.huahua.com的身份认证标志。跨域发出的请求也同样会带上目标网站A的用户Cookie,这样的请求就是身份认证后的,攻击才会成功。

    Cookie分为本地cookie和内存cookie,这两类cookie在CSRF的过程中存在一些诧异,IE浏览器默认不允许目标网站www.huahua.com的本地Cookie在这样的跨域请求中带上,除非在HTTP响应头中设置了P3P,这个响应头告诉浏览器允许网站(恶意网站www.hack.com)跨域请求目标网站A的资源时带上目标网站A的用户本地Cookie。对于非IE浏览器,就没这样的限制

    参考学习:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

         《web前端黑客技术》-前端黑客之CSRF

  • 相关阅读:
    12、mybatis学习——mybatis懒加载的设置
    11、mybatis学习——自定义结果映射resultMap以及关联查询
    10、mybatis学习——sqlmapper配置返回list和map结果集
    9、mybatis学习——sqlmapper配置中#{}和${}的区别
    8、mybatis学习——sqlmapper配置文件参数处理(单个参数,多个参数,命名参数)
    7、mybatis学习——mybatis基础增删改&&mybatis获取自增主键
    6、mybatis学习——mapper映射配置
    5、mybatis学习——mybatis多数据库厂商支持
    [20180927]ora-01426.txt
    [20180928]ora-01426(补充).txt
  • 原文地址:https://www.cnblogs.com/xhds/p/12324268.html
Copyright © 2020-2023  润新知