赛博保安日志 - jsonp
type: channel
link: https://blog.anheng.tech/index.php/tag/jsonp/
items: Jsonp漏洞

Jsonp漏洞
type: item
date: 2021-10-13T13:33:00+08:00
description: 声明：本篇文章仅用于自己的学习交流，笔记记录以及感悟记载，不得用于其他用途。（图片来源于百度百科。)一、同源策略1、什么是同源策略SOP，全称为同源策略 (Same Origin Policy)，该策略是浏览器的一个安全基石，如果没有同源策略，那么，你打开了一个合法网站，又打开了一个恶意网站。那么恶意网站的脚本能够随意的操作合法网站的任何可操作资源，没有任何限制。浏览器要严格隔离两个不同源的网站，目的是保证数据的完整性和机密性。（==PS：进了别人家客厅，没有允许就不要进卧室了。==）2、什么算是同源那么何为同源呢，即两个站点需要满足同协议，同域名，同端口这三个条件。"同源" 的定义：（==PS：三个缺一不可，一个不一样就不同源。==）3、不受同源策略限制的下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的（==PS：特权。==） 实战中只需要修改src对应的值 , 并把该文件放在vps上即可 SRC挖掘中只有返回了敏感信息的jsonp劫持才能算是有危害jsonp.html jsonp劫持 然后访问http://127.0.0.1/1.php（==PS：复现时虚拟机开的环境，所以没有放到VPS中。==）整个的流程1.用户测试网站发现存在jsonp 2.构造poc 3.诱导用户访问 4.访问恶意的html 5.从响应中获取src对应的url 6.对该url发起请求 7.获取响应的json数据 , 传入回调函数执行 , 弹出敏感信息（==PS：流程清晰。==）这个实验的演示 , 只是简单的通过js代码 , 把敏感信息弹出来 , 证明存在jsonp劫持漏洞 , 如果想要进一步利用可以修改poc的js代码 , 把敏感数据当成参数 , 去请求我们的远程服务器 , 并在接收敏感信息 , 保存到一个文件中1.php<?php if($_GET['file']){ file_put_contents('json.txt',$_GET['file']); } ?>1.html jsonp劫持 http://192.168.23.130/1.html（==PS：在这里烦了个小错，昨天晚上没睡好，今天把1.php和user.php内容反了。==）（4）Jsonp漏洞危害攻击者构造恶意的html页面，利用链接诱导受害者进行点击，从而获取到受害者的敏感信息（5）Jsonp漏洞挖掘思路google hacking语法 :inurl:json inurl:callback= site:a.com inurl:json常用关键词：callback jsoncallback jsonpcallback jsoncall jsonpcall cb jsoncb jsonpcb =json =jsonp =jQuery 手工测试f12 , network , 勾选Preserve log , 防止页面刷新跳转的时候访问记录被重置 然后 F5 刷新，进入 NetWork 标签 ，CTRL+F 查找一些关键词 如 callback json jsonp jsonpcallback 然后找响应中存在敏感信息的 , 然后构建 poc测试（6）防御方案json 正确的 http 头输出尽量避免跨域的数据传输，对于同域的数据传输使用 xmlhttp 的方式作为数 据获取的方式，依赖于 javascript 在浏览器域里的安全性保护数据，如果是跨域的数据传输，必须要对敏 感的数据获取做权限认证；严格安全的实现 CSRF 方式调用 JSON 文件：限制 Referer 、部署一次性 Token 等；严格安装 JSON 格式标准输出 Content-Type 及编码（ Content-Type : application/json; charset=utf-8 ）；严格过滤 callback 函数名及 JSON 里数据的输出；严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)；其他一些比较“猥琐”的方法：如在 Callback 输出之前加入其他字符(如：/**/、回车换行)这样不影响 JSON 文件加载，又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON ，听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。