跨域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