CORS跨域学习篇 – 作者:掌控安全帆先生

CORS跨域访问

  • 什么是CORS

    1. 全称跨域资源共享,用来绕过SOP(同源策略)来实现跨域访问的一种技术。

    2. CORS漏洞利用CORS技术窃取用户敏感信息

  • 同源策略简介

    1. 同源策略是浏览器最核心也是最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方的dom、cookie、session、ajax等操作的权限资源。

    2. 同源有三个条件:协议、域名、端口相同

  • 同源检测的示例

    1. 检测成功的之后同协议、同域名、同端口

    2. 图片[1]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

  • 漏洞产生原因

    1. 由于配置不当,Origin源未严格,从而造成跨域问题。Origin用于检测来自哪个域

  • 两种跨域的方式

    1. JSONP跨域请求

      1. 只能通过浏览器发送GET包

      2. 是一种利用HTML中<script></script>元素标签,远程调用json文件来实现数据传递技术,它的特点是可以跨域读取数据。

    2. CORS跨域请求

      1. Cors允许浏览器向跨域服务器发出XmlHttpRequest请求,COSRS和JSONP的区别:CORS是JSONP的升级版,JSONP只能通过get方式请求,CORS支持get,post,head请求

  • CORS的两种请求方式

    • 简单请求

      1. 浏览器直接发出CORS请求,即浏览器自动在请求的header中加上Origin字段,告诉浏览器这个请求来自哪个源。服务器端收到请求后,会对比这个字段,如果这个源在服务器端的许可范围内,服务器的响应头会加上以下字段

    • Access-Control-Allow-Origin:(这里的值为Origin的值)

    • Access-Control-Allow-Credentials:true

    • 非简单请求

      1. 预检请求

    请求方式为OPTIONS,这个请求是来询问的,请求头要包含以下字段

    • Origin:请求源

    • Access-Control-Request-Method:cors请求会用到的请求方式

    • Access-Control-Request-Headers:cors请求会额外发送的请求头字段

  • 服务器收到预检请求后会检查上面三个字段的值确定是否允许跨区请求,如果任意一个字段不满足要求,都不允许进行跨域访问

  • 返回包头部的ACAO根据请求报文Origin生成

    1. 图片[2]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

  • CORS漏洞与CSRF漏洞

  • 相同点

    • 都需要借助第三方网站

    • 都需要借助ajax的异步过程

    • 一般都需要用户登陆

  • 不同点

    • 第三方网站可以利用CORS漏洞读取到受害者的敏感信息

    • 第三方网站可以利用CSRF漏洞替受害者完成诸如转账等敏感操作

  • 简单的检测漏洞的方法

    1. 选中Origin方法

    2. 图片[3]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

    3. 然后来到历史,点击筛选器把方法写到红框处,进行筛选Access-Control-Allow-Origin: foo.example.org,剩下的就是可能存在CORS漏洞。

    4. 图片[4]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

发送的origin和返回的origin一样,acao为true,就存在漏洞

Referer检查,这种情况下可以通过某处的xss漏洞进行绕过检查

图片[5]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

  • 常见的漏洞点

    1. 互联网厂商的api接口

    2. 聊天程序的api接口

    3. 区块链厂商

    4. App的api

补充:

CORS的规范中还提到了“NULL“源。触发这个源是为了网页跳转或者是来自本地HTML文件。

目标应用可能会接受NULL源,并且这个可能被测试者利用,任何网站很容易使用沙盒iframe来获取null源

  • 为什么服务端会有这样的漏洞

    1. 开发人员开发,调试,测试代码一般都在本地

    2. 有时候他们会调用线上服务器数据

    3. 所以这样的问题很隐蔽也很常见

  • CORS防御

    1. 不要配置”Access-Control-Allow-Origin”为通配符”*”,而且更重要的是,要严格校验来自请求数据数据包中的”Origin”的值

    2. 避免使用”Access-Control-Allow-Credentials:true”

    3. 减少”Access-Control-Allow-Methods所允许的方法”

  • 本地环境搭建,获取信息

    1. 我在本地写了4个文件

      1. 其中demo1_1.html和demo2_1.php是本地服务器,demo3_1.php和sava.php是攻击者的脚本,需要钓鱼配合使用

      2. 图片[6]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

      3. demo3_1.php代码

第一个箭头下的链接是攻击者保存的地址

第二个箭头下的链接是本地服务器的地址

图片[7]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

·靶场演示

    1. 我到demo3_1.php去登陆

    2. 图片[8]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

他会跳转到demo2_1.php下,cookie也会带着到这里

图片[9]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

这时就可以构造钓鱼邮件发送给受害者去点击刷新

图片[10]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

F12查看,可以看到向外发起请求

图片[11]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

再回到文件处,发现创建了一个文件

图片[12]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

·Wordpress cors

  • 复现过程

    1. 影响版本:2.4。首先打开首页,抓包查看响应

      1. 看到返回包的内容,返回了wp-json链接

      2. 图片[13]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

然后复制这个链接,补全这个url,可以看到返回出来的json数据

图片[14]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

在请求包中加入origin头192.168.10.31,再次发送,发现响应消息中ACAO已经变成了origin的头,并且ACAC为true。从而证明了是存在cors跨域漏洞的。

图片[15]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

生成一个HTML内容,放入vps下,起一个名字。

图片[16]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

然后诱骗受害者点击,就会把json数据发送到你的服务器,从而获取对方的敏感信息

图片[17]-CORS跨域学习篇 – 作者:掌控安全帆先生-安全小百科

参考:https://blog.csdn.net/qq_35569814/article/details/101068142

参考:https://blog.csdn.net/weixin_45447309/article/details/108176922

来源:freebuf.com 2020-12-18 13:52:17 by: 掌控安全帆先生

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论