那么我们今天就来了解一下cors跨域和jsonp劫持漏洞
同源策略
为什么还要讲一遍同源策略,我们之前写xss的时候有讲到过,不了解的同学可以看看我们的那篇xss文章,那么该策略是浏览器的一个安全基石,如果没有同源策略,那么,你打开了一个合法的网站,又打开了一个恶意网站,恶意网站的脚本能够随意的操作合法网站的任意可操作资源,没有任何限制。
cors(跨域资源共享)
CORS(Cross Origin Resource Sharing),跨域资源共享,为了弥补JSONP等跨域常见技术的缺陷,而提出的安全方便的跨域方案。它允许浏览器想跨域服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持,相比JSONP更加复杂,但是一般目前的浏览器都是支持的,服务器只需要进行相应配置,其通信过程都是浏览器自动完成,对于开发人员来说,跟写AJAX的代码没有区别,只是会在发送跨域请求时在HTTP请求头中添加一些字段来验证,关键字段如下:
1、Access-Control-Allow-Origin:指定哪些域可以访问域资源。例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。
2、Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送cookie。仅当allow-credentials标头设置为true时,才会发送Cookie。
3、Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性。
CORS实现流程
1、服务器配置支持CORS,默认认可所有域都可以访问
2、浏览器客户端把所在的域填充到Origin发送跨域请求
3、服务器根据资源权限配置,在响应头中添加ccess-Control-Allow-Origin Header,返回结果
4、浏览器比较服务器返回的Access-Control-Allow-Origin Header和请求域的Origin,如果当前域获得授权,则将结果返回给页面
怎么判断是否存在cors跨域。
请求投存在origin参数且可控(不存在可自行添加不影响结果)
响应头存在下面两个:1、Access-Control-Allow-Orighin:指定哪些域可以访问域资源,2、Access-Control-Allow-Credentials:指定浏览器是否存将使用请求发送cookie,仅当allow-credentials标头设置为true时,才会发送cookie
Access-Control-Allow-Methods:PUT,GET,POST //请求方式
靶机是这样的,然后我们开启burp监听,刷新这个靶机抓取数据包,比如说我们在测试网站的时候,抓到数据包
那我们就访问该网页抓请求包
将其发送到repeater模块,并且点击go,可以看见它这里返回了一些信息,就是我们上面所说的一些信息。
返回包看见这两个的时候,可以去测一下这个跨域攻击。怎么测呢??
那我们添加Origin:http://www.baidu.com这样一条参数,看它是否可控,那么执行之后,我们返回包原本是星号,添加了这一条参数后,就变成了百度的域名
Cors跨域攻击有什么用???可以获取一个用户的铭感信息,如果能获取到敏感信息,那么它就是个高危了,可以看见我们的靶机,那么我们就可以确定了他这里存在跨域攻击
利用的话,就用这个cors的利用靶机。那我们就选择get,然后生成poc利用的包
这里它就是一个响应的数据
Cors和jsonp都是csrf系统里面的一种,是读取型的
Jsonp劫持
先了解一下什么是JSONP:
JSONP是一种跨域请求资源的解决方案,JSONP可以绕过AJAX遵循的同源策略。
更容易理解的解释就是:利用"script标签可以跨域请求,并且把返回的结果当作js来执行"的特点来获取第三方的资源
判断的条件,第一个是跟域没有关系,然后它返回的数据要是一个json的数据并且要有能被调用的回调函数,像这种就是一个json的数据
allback:
其实callback很好理解,同样是为了更好的使用第三方数据,第三方允许"请求方"使用自定义的callback名称,可以看到我们的靶场这里,可以看见它的参数,有个callback的参数,它的值就是可以调用的,那回调函数是什么?我们常见的话,就是callback参数的,还有一个jsonpcallback的参数就叫回调函数
什么叫可控呢?安全问题:
当攻击者知道返回资源的地址时,且资源中存在隐私信息。是不是可以构造攻击页面,诱导用户访问并获取用户隐私呢?
怎么说呢...
用户在访问qq.com时页面会生成对应的Cookie,当访问子域game.qq.com/user?callback=blabla 时页面将返回game.qq.com下的用户信息
攻击者构造了攻击页面http://www.attack.com/phishing 当用户访问时将会执行攻击页面中的js,恶意的js创建了script标签,并以用户的名义加载game.qq.com/user?callback=blabla
在参数的值输入a,它这里就输出了一个a,输入之后,它这个页面能发送改变,这个就是它的参数可控参数就是会被,然后回调调用,然后可控。可控之后,就是满足了我们判断他这个地方是否存在jsonp劫持的条件,跟域名没关系,返回的也是json数据
还是利用刚才的那个poc环境,我们输入靶机的漏洞地址,下面输入回调参数的值
防护建议:1、验证http referer头信息,2、在请求中添加csrfToken并在后端进行验证。
最后喜欢我文章的朋友请加圈子关注我们,私信关键词:加群。(送免费资料和优惠券)
就会自动分享给你群号。欢迎大家加入我们的安全大家庭。提高大家的安全意识,提升大家的网络安全技能一直是我们的初衷和愿景,让我们共同成为守护信息世界的"SaFeMAN"。
还有可以关注我们微信公众号,在公众号上输入安界网,就可以关注到我们,领取资料和优惠券!!