• SRC必会技巧——CORS跨域漏洞


    一、同源策略介绍

    同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读取对方的资源,所以,abc.com下的js脚本采用ajax读取def.com里面的文件数据是会被拒绝的。

    同源策略限制了从同一源文件的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制。

    二、解决跨域问题

    由于同源策略的影响,当我们从一个域名的网页去请求另一个域名的资源时,就无法成功获取资源。如果我们想要成功获取资源,那么就要用到跨域。

    跨域解决方案:jsonp,cors,postMessage。

    三、CORS跨域资源共享

    CORS跨域资源共享漏洞一般在于请求包当中Origin请求头,然后去观察相应包当中Access-Control-Allow-Origin当网站发起跨域资源请求时,服务端将返回协议,并且浏览器添加Origin。

    1717930816_66658b40ca9ef4472daab.png!small?1717930817869

    请求头当中添加Origin:www.abc.com随意输入一个网址,查看相应包发现Access-Control-Allow-Origin:www.abc.com内容随之改变。

    在正常情况下,服务器端返回Access-Control-Allow-Origin:*的时候资源可以被本地域进行访问,当变成null表明可以被任意外域进行访问。

    1717930837_66658b551df1c777f3826.png!small?1717930838362

    如图所示请求,在请求包当中不存在origin协议但是发现相应包存在目标协议,则可以进行具体分析,在请求包当中添加Origin协议,测试是否可以进行外域访问,当然这一步的前提是查看是否相应包当中存在敏感信息,如果存在在进行跨域。

    1. 是否存在敏感信息。
    2. 相应包是否存在Access-Control-Allow-Origin
    3. 查看请求头是否有Origin,有则尝试跨域,无则添加Origin协议
    4. 查看是否相应包协议跟随请求包协议进行变化

    我们这里对请求包和相应包进行一下详解:

    request:

    1  GET /resources/public-data/ HTTP/1.1
    2  Host: bar.com
    3  User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
    4  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5  Accept-Language: en-us,en;q=0.5
    6  Accept-Encoding: gzip,deflate
    7  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    8  Connection: keep-alive
    9  Referer: http://example.com/examples/access-control/simpleXSInvocation.html
    10 Origin: http://example.com

    response:

    11  HTTP/1.1 200 OK
    12  Date: Mon, 01 Dec 2020 00:23:53 GMT
    13  Server: Apache/2.0.61 
    14  Access-Control-Allow-Origin: *
    15  Keep-Alive: timeout=2, max=100
    16  Connection: Keep-Alive
    17  Transfer-Encoding: chunked
    18  Content-Type: application/xml

    这里request是请求首部,在第十行Origin表明该请求来源于http://example.com.

    response可以看到http://bar.com的服务端响应,响应中携带了响应首部字段Access-Control-Allow-Origin

    使用OriginAccess-Control-Allow-Origin就能完成最简单的访问控制了,本例中,服务端返回的Access Access-Control-Allow-Origin:*表明,该资源可以被任意外域进行访问,如果服务端仅允许来自http://example.com的访问,该首部字段的内容如下:

    Access-Control-Allow-Origin: http://example.com

    如果跨域请求可以包含cookie的话,在服务端响应应该有这一字段:

    Access-Control-Allow-Credentials: true

    这样的话攻击者就可以利用这个漏洞来窃取已经在这个网站登录了的用户的信息(利用cookie)。

    四、漏洞利用

    1、这里以droabox靶场为例

    1717930942_66658bbed63e1547f5cd7.png!small?1717930943541

    这个接口会返回已经登录的用户信息数据,通过访问该网页的响应我们可以看到这里可能存在CORS跨域资源共享漏洞。

  • 相关阅读:
    微信小程序clearInterval无法关闭时间间隔器问题解决
    【Ubuntu】Systemctl 管理 MinIO 服务器的启动和停止
    软文推广提升品牌曝光的技巧,媒介盒子告诉你
    java毕业设计房屋租赁系统Mybatis+系统+数据库+调试部署
    深度学习之 11 空洞卷积的实现
    浅析即时通讯移动端开发DNS域名劫持等杂症
    离线密码破解(1)
    图象的感光原件、成象原理、相机的相关坐标系
    Linux Kprobes探索与实践一
    升级到tomcat10和Java 21后,idea控制台system.out.println输出中文乱码问题
  • 原文地址:https://www.freebuf.com/vuls/403124.html