在了解跨域漏洞之前我们需要了解一下什么是同源策略。

同源策略

同源策略是浏览器最核心也最基本的安全功能,不同的客户端脚本在没有明确的情况下,不能读取对方的Dom、cookie、session、ajax等操作的权限资源。

同源策略是浏览器得行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截得是客户的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收

如果没有同源策略,那么,你打开了一个合法网站,又打开了一个恶意网站。恶意网站的脚本能够随意的操作合法网站的任何可操作资源,没有任何限制。
同源3个条件:协议、域名、端口相同

为什么要跨域

随着互联网的发展,同源策略越来越严格,目前,对于非同源的网站共有三种行为受到限制。
(1)Cookie、LocalStorage和IndexDB无法获取。
(2)DOM无法获得。
(3)Ajax请求不能发送。
虽然这些限制是必要的,但是有时很不方便,合理的用途也会受到影响,因此需要跨域。
有三个标签可以允许跨域加载资源:、、

CORS

什么是CORS跨域?CORS,即跨域资源共享,它是一种机制,WEB应用程序可以通过在HTTP中增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。

CORS规范规定了在Web服务器和浏览器之间交换的标头内容,该标头内容限制了源域之外的域请求web资源。CORS规范标识了协议头中以下字段。当网站请求跨域资源时,服务器将返回此标头,并由浏览器添加标头Origin。
主要有下面三个字段:


Access-Control-Allow-Origin:* a.com 指定哪些域可以访问域资源。例如,如果a.com想要访问b.com的资源,那么开发人员可以使用此标头安全地授予a.com对b.com资源的访问权限。Access-Control-Allow-Credentials:true 指定浏览器是否将使用请求发送cookie。仅当allow-credentials标头设置为true时,才会发送Cookie。Access-Control-Allow-Methods:*  指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性

跨域的场景

  1. 比如后端开发完一部分业务代码后,提供接口给前端用,在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问的问题。
  2. 程序员在本地做开发,本地的文件夹并不是在一个域下面,当一个文件需要发送ajax请求,请求另外一个页面的内容的时候,就会跨域。
  3. 子站域名希望调用主站域名的用户资料接口,并将数据显示出来。
  4. 电商网站想通过用户浏览器加载第三方快递网站的物流信息。

CORS跨域漏洞是怎么发生的

  1. 假设用户登陆一个含有CORS配置网站vuln.com,同时又访问了攻击者提供的一个链接evil.com。
  2. evil.com的网站向vuln.com这个网站发起请求获取敏感数据,浏览器能否接收信息取决于vuln.com的配置。
  3. 如果vuln.com配置了Access-Control-Allow-Origin头且为预期,那么允许接收,否则浏览器会因为同源策略而不接收。

案例演示(一)

A:192.168.100.5
B:192.168.100.11

(A)192.168.100.5 ajax.html 文件内容
(B)192.168.100.11 hello.php 中内容

  1. 在A(100.5) 点击确定后(页面发生变化),初始为hello,world 点击后如图所示。

  2. 这就将不同源网站上的数据给访问下来了。

流程概述
正常用户登陆后查看个人信息,这个接口是调用个人信息得,如果这个接口存在了cors跨域漏洞 那么我们是不是可以构造语句,将恶意得网站源码发布到公网 发送给正常用户,当用户点击的时候就会执行这个跨域请求从而获取敏感信息。

正常业务流程

  1. 如果在hello文件中设置Access-Control-Allow-Origin不为* 那么就指定了,从该域下请求hello文件是允许的,其余会被拦截。

  1. 我们点击确定 发现浏览器拦截掉了。

例如

一个身份信息展示接口,每个用户访问该接口会将其信息展示到页面上,如果该接口将Access-Control-Allow-Origin 设置为 * (那么在不同源下就可以请求到该接口获取对方身份信息)。

案例二(将获取数据发送到DNS解析平台)

A服务器上CORS_POC.html文件
B服务器上userinfo.php文件

  1. 当正常用户访问恶意用户构造的链接时(跨域访问,参数传到了img src地址中进行携带参数请求)

  1. 看CEYE.IO 发现数据被携带请求。

  1. 从而在DNS平台获取100.11中数据

JSONP漏洞

JSONP是JSON的一种使用模式,可以让网页从别的域名获取资料,即跨域读取数据,它利用的是script标签的src属性不受同源策略的特性,jsonp劫持就是攻击者获取了本应该传给网站其他接口的数据

原理:JSONP实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的src 不受同源策略约束来跨域获取数据。

JSONP漏洞的利用过程及危害

通过JSONP技术可以实现数据的跨域访问,必然会产生安全问题,如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B便存在JSONP漏洞,网站A利用JSONP漏洞能够获取用户在网站B上的数据。

漏洞攻击流程(一)

A(100.5)就相当于攻击者。服务端新建 jsonp.html


<html>
<head>
<title>test</title>
<meta charset="utf-8">
<script type="text/javascript">
function JSONP(obj){alert('user: '+obj["username"]+' pwd: '+obj["password"]);
}
</script>
</head>
<body>
<script type="text/javascript" src="http://192.168.100.11/callback.php?callback=JSONP"></script>
</body>
</html>

B(100.11)正常用户服务端,新建callback.php文件


<!-- 192.168.100.11/callback.php -->
<?phpheader('Content-type: application/json');$callback = $_GET["callback"];//json数据$json_data = '{"username":"admin","password":"admin888"}';//输出jsonp格式的数据echo $callback . "(" . $json_data . ")";
?>

开始

  1. 我们访问jsonp.html,页面会执行script,请求http://192.168.100.11/callback.php?callback=JSONP,然后将请求的内容作为参数,执行JSONP函数,JSONP函数将请求的内容alert出来。最终的结果如下:
    这样我们就实现了通过js操作跨域请求到的资源,绕过了同源策略。
    但是伴随着业务的发展总会出现安全问题,JSONP使用不当也会造成很多安全问题。

JSON漏洞危害

JSONP是一种敏感信息泄露的漏洞,攻击者通过巧妙设计一个网站,网站中包含其他网站的JSONP漏洞利用代码,将链接通过邮件等形式推送给受害人,如果受害者点击了链接,则攻击者便可以获取受害者的个人的信息,如邮箱、姓名、手机等信息。

其他文章

(微信公众号搜索)

Web漏洞之CORS与JSONP跨域漏洞相关推荐

  1. 蜜罐中利用jsonp跨域漏洞和xss漏洞的分析

    一.前言 我们在打红队的时候,经常会碰到蜜罐,而更有一些"主动防御"的蜜罐中利用到了一些网站的跨域漏洞和xss,对此进行简单分析. 二.蜜罐的概念 蜜罐主要是通过布置诱饵,诱使攻击 ...

  2. Jsonp跨域漏洞浅析

    为什么要用到jsonp跨域? 同源策略:协议.域名.端口都相同,是一种安全策略,不同源的客户端脚本在没有明确授权的情况下,不能读取对方资源. 如何解决跨域(目前我掌握的有两种手段 (1)JSONP方式 ...

  3. web漏洞挖掘指南-前端跨域漏洞

    web漏洞挖掘指南 前端跨域漏洞 一.何为跨域 1.设想一种场景,一个恶意网站上嵌入了一个iframe标签去加载银行的登陆页面,高度和宽度的设置和真实的银行官网一样,当用户访问恶意网站并登录时,攻击者 ...

  4. 【漏洞利用】JSONP跨域请求漏洞 挖掘、利用详解

    参考文章 轻松搞定JSONP跨域请求 jsonp跨域原理,使用以及同源策略 跨域漏洞丨JSONP和CORS跨域资源共享 Tag: Ref: [[019.同源策略]] 本片文章仅供学习使用,切勿触犯法律 ...

  5. CORS跨域漏洞学习

    目录 前言 一.CORS及SOP简介 跨域访问的一些场景: 二.CORS跨域原理及漏洞成因 CORS跨域--简单请求的流程 CORS跨域--非简单请求的流程 三.CORS漏洞攻击流程 四.CORS漏洞 ...

  6. 修复Cors跨域漏洞

    由于项目是采用前后端分离开发的,所以前端项目访问服务器时需要跨域,所以就在服务器配置了 Access-Control-Allow-Origin 等于 * ,代码如下 @Configuration pu ...

  7. jsonp-反向代理-CORS解决JS跨域问题的个人总结

    jsonp-反向代理-CORS解决JS跨域问题的个人总结 网上说了很多很多,但是看完之后还是很混乱,所以我自己重新总结一下. 解决 js 跨域问题一共有8种方法, jsonp(只支持 get) 反向代 ...

  8. 怎么更好掌握Web前端技术?JS的跨域是怎么回事?

    怎么更好掌握Web前端技术?JS的跨域是怎么回事?JavaScript跨域是指通过JS在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过JS获取页面中不同域的框架中(if ...

  9. .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器...

    1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.We ...

  10. JSONP跨域jQuery处理整理(附天气数据实例)

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

最新文章

  1. pytorch 过采样
  2. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络
  3. 计算机会计课程试题及答案,会计电算化课后简答题及答案.doc
  4. textarea的不可拉伸和不可编辑
  5. JS任务栏滚动效果问题
  6. 【Hoxton.SR1版本】Spring Cloud Gateway网关初体验
  7. linux九九乘法表,linux shell 九九乘法表
  8. CMMI 4高级别过程改进案例介绍
  9. M3DGIS三维电子沙盘大数据人工智能元宇宙地理信息系统第5课
  10. python虚拟变量回归_Python中使用虚拟变量的OLS最佳解决方案?
  11. ecc升级s4后金额字段负号提前,导出excel负号却在后面
  12. https网站安全证书提示已过期怎么办?
  13. 移动端测试=== 两个概念 内存泄漏 和 内存溢出 【转】
  14. 如何编写无法维护的代码
  15. Redis缓存知识-穿透、击穿、雪崩
  16. Top命令查询结果界面参数详解
  17. matlab弹簧阻尼系统论文,MATLAB系统仿真报告有阻尼受迫振动系统.doc
  18. error MSB8020 问题解决
  19. 电子签名界“特斯拉“发财报了,国内电子签行业何时诞生巨头?
  20. YouTube-dl中文帮助文档

热门文章

  1. 美团饿了么外卖推广联盟导航的小程序实现推广无力时候该不该卖掉变现
  2. SpringBoot Banner图标修改 + 文字生成器
  3. 同名的同义词和视图解惑
  4. Linux——RAID磁盘阵列及配置
  5. 树莓派Python开发第8课: PWM实验
  6. 苹果应用提审与NAT64
  7. [哈佛幸福课13 听后感]
  8. lenovo启动热键_联想电脑如何进入U盘启动,按哪个快捷键?
  9. 至强服务器性能排行,志强cpu天梯图_2020年至强cpu天梯图性能排行榜
  10. 在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构