9

一次实战之JSONP 漏洞

 3 years ago
source link: http://netsecurity.51cto.com/art/202012/637745.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

描述

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。

NrQRfuj.jpg!mobile

传入callback 值会在结果里面直接返回。因此,如果该参数过滤不严格。可以随便输入:callback值为:alert(‘1’);parseResponse 字符串。返回结果会打印个alert窗口,然后也会正常执行。

实际上就是由于服务器端对JSONP 的请求来源的检查不严格导致的;

攻击者模拟用户向有漏洞的服务器发送JSONP请求,然后就获取到了用户的某些信息,再将这些信息发送到攻击者可控的服务器

原理

JSONP的最基本的原理是:动态添加一个

过程

首先,找到存在该漏洞地址:

http://IP:9081/api/v0/sqjr/resident/service/BannerInfo.queryRecommendList.json?province=%E6%B5%99%E6%B1%9F%E7%9C%81&city=%E6%9D%AD%E5%B7%9E%E5%B8%82&jsoncallback=jsonp_1605671133151_19776

vANjae3.png!mobile

修改请求包信息,在返回值开头中可见calmness;

传过去的calmness就是函数名,服务端返回的是一个函数调用,可以理解为:evil就是一个函数,(["customername1","customername2"])就是函数参数,网站前端只需要再编写代码处理函数返回的值即可。

6jYZvmI.png!mobile

VZbQfuE.png!mobile

继续:

如果我们修改jsoncallback的值为其他值,此处的返回值也会相应改变。我们可以劫持jsoncallback参数,自己构造jsoncallback处理函数,受害者点击我们伪造的链接后,向jsonp接口发起请求,请求得到数据的处理方式由我们自己的jsoncallback处理函数处理,由此可以达到劫持目的

进行POC的编写或者进行淘金

ZJzMjyB.png!mobile

当然,还有绕过token防护进行csrf攻击;Referer 头的绕过等等;

修复建议

json正确的http头输出尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。如果是跨域的数据传输,必须要对敏感的数据获取做权限认证。

【责任编辑:赵宁宁 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK