跨域CORS JSONP回调 域名接管劫持

跨域CORS JSONP回调 域名接管劫持

1.0 前置知识

我们首先要学习下同源策略,这在之前的博客中说过很多次了,同源策略限制了来自不同源的Web页面脚本如何相互交互,以防止恶意网

站读取另一个网站的数据。这里的“源”指的是协议(http或https)、域名以及端口号的组合。同源策略的核心原则是,只有当两个URL的

协议、域名和端口都完全相同时,它们才被视为同源。

有了同源策略像我们之前的csrf等攻击手段就可能被拦截

同源策略做检测的浏览器,不是服务器

同时我们还需要明白

1.1 CORS

既然存在同源策略,那网站如果想要使用别的网站的资源应该怎么办呢?这时候就要用到CORS即跨源资源共享,该机制使用额外的HTTP

头来告知浏览器让一个域的web应用访问不同源服务器上的指定资源,浏览器通过识别http头来判断跨域请求是否是CORS,是否进行拦截

请求网站如果开启了CORS,会在请求的响应报文中注明可以被跨域请求的域名

首部字段为:Access-Control-Allow-Origin:域名

域名处设置为* 那么所有的域名都可以跨域对其资源进行请求。

我们可以通过CORS存在的漏洞来获取后台页面等资源

在白盒环境下我们直接看设置判断是否存在该漏洞

在黑盒下我们通过测试来判断是否能获取资源,存在该漏洞

一般使用自动化工具 cors scanner,检测出网目标站跨域请求的网站

1.2 JSONP和回调

如果我们不使用CORS,就可以使用JSONP,这是在早期我们处理跨域请求时用到的技

术,适用于较旧的浏览器,而且JSONP只能使用get方法

JSONP的基本原理是利用<script>标签的src属性没有同源策略限制的特点。当浏览

器加载带有src属性的script标签时,可以不受同源策略的约束从任何服务器请求

JavaScript文件并执行。因此,JSONP利用这一点,通过动态插入script标签来实现跨

域请求。

使用JSONP时,有一个重要的概念是回调,即Callback,实现跨域数据的传递就是通

过回调实现的

首先在前端构造一个回调函数,然后构造一个<script>标签 src指向我们跨域请求的

API地址地址的末尾用查询字符串形式加上回调函数的名称,后端收到前端的请求后,

创建一个合法的js代码,包含一个函数调用,函数名就是传递的回调函数的名称,参

数就是服务器传给前端的数据,数据通过json传递,前端加载这个<script>标签后

收到该js代码,执行构造的回调函数,收到后端传输的数据。

如果网站存在jsonp策略,我们可以通过伪造对应网站的触发回调的script,利用回调

的跨域特点获得对应用户的回调信息。

检测该漏洞可以通过bp的jsonp hunter插件来进行自动寻找,会把目标页面所有的回

调信息显示在bp,从而不用人工去筛查,找到存在敏感信息的回调,我们就可以进行

认为构造钓鱼触发了

1.3子域名接管

子域名接管本质是利用CNAME使当前域名指向另一个域名时,如果被指向的域名过

期被我们获得,就可以通过控制被指向域名从而达到控制原域名解析的结果。

批量查询cname指向可以使用自动化工具 dnsub

posted @ 2024-07-09 23:48  折翼的小鸟先生  阅读(7)  评论(0编辑  收藏  举报