漏洞发现过程

之前我一直在学校学习我比较讨厌的科目知识,所以最近我决定放松休息一下,我告诉自己必须要在HackerOne平台中的Vimeo漏洞众测中有所发现。于是,我就直接想测试一下Vimeo平台的上传功能,尤其是通过Google云端硬盘 (Google Drive)上传到Vimeo的一些功能特性,所以,在我的Google云端硬盘中我选择了一个特定视频文件,把它执行到Vimeo的上传操作,然后用BurpSuite查看它的具体上传请求信息。

从上图可见,上传视频文件的具体URL链接中包含了Google云盘中的相关身份验证信息,以便让Vimeo后端服务器能有权限从Google云盘中获取到相应文件,具体的验证信息存在于请求头的header参数中。

所以,看到这里我就想在自己的VPS中架设一个环境,发起上传视频文件到Vimeo平台的操作,看看上传请求发起后,在Vimeo后端服务器和我的VPS服务器之间会发生什么情况。经测试,从我VPS端上传到Vimeo后,我VPS中的具体网络情况如下,Vimeo后端响应回来的消息有些奇怪,尤其是其黄色部分。

其黄色部分的Range,和Content-Range等引起了我的注意,但从其名字中我也大概能猜测到其大致用途。可以这样假设,大多数时候,因为用户上传的视频文件都是比较大的,所以Vimeo不会用一个上传请求来实现对整个文件的上传。但如果用户需要上传的视频文件较小,那么Vimeo就会实现一次请求上传了。所以这样来看,Vimeo对用户需要上传的大视频文件都是采取每次请求部份文件,然后多次请求,再实现最终整个文件的组装完成。整个上传流程大概的逻辑如下:

也就是说,Vimeo服务器请求用户需要上传的视频文件时,它会判断如果文件足够小,那么建立一次连接就可以上传完成,就不需要后续再建立连接了。基于此,我突然想到,如果我不向Vimeo服务端发送整个上传文件会如何呢?比如,按以上原理,如果我的VPS告诉Vimeo后端服务器,我需要上传的文件有500B,那么Vimeo后端服务器就会来取走这500B,但是,如果现在我的VPS告诉Vimeo后端服务器我的文件只有200B,那么之后会发生什么呢?说白了,也就是看看Vimeo后端对大文件上传的具体操作行为,来试试看。

在此,我用Python编写了一个脚本来监测Vimeo的这种取大文件的操作,我需要上传的视频文件长度共554231B。测试发现,当Vimeo后端服务器来取我的这个554231B大文件时,监测脚本显示,第一次Vimeo后端只会读取8228B长度的部份文件内容!

Cool,Vimeo后端在取完8228B长度的部份文件后,会再接着往下取文件的其余部份,由此,一个SSRF场景在我脑海中油然而生。如果我的VPS告诉Vimeo后端服务器一个重定向响应,那Vimeo后端服务器会跟着跳转吗?还是会存储这个重定向响应?还是继续接着往下读取文件其余部份?我的构思场景逻辑如下,Vimeo后端在取完第一次的8228B长度的部份文件内容后,会继续发起对后续文件的读取,这个时候,我在后续文件内容中插入一个恶意文件内容-http://evil.com/Hello.txt,其文件内容为HelloWorld!zzz,共15个字节。那么Vimeo后端在读取余下的546094字节文件时,会一并请求我们恶意插入的链接http://evil.com/Hello.txt,把HelloWorld!zzz也顺利读取到。

由于一些Web托管服务端对上述攻击场景作了安全限制,所以我自己动手搭建了一个主机网站进行测试实现,很幸运,我的猜想是对的!按照以上思路在对Vimeo后端的视频文件上传中,可以成功实现上述预计的攻击测试场景。

Notice: 在Vimeo服务中,我们可以下载原始的上传文件,所以根据这种下载路径,我们也能轻松构造对响应的一些假冒伪造操作。

漏洞利用

经过测试,我发现Vimeo后端服务相关操作是建立在Google云上的,它后端部署了一个谷歌云实例,而且请求这个实例http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token,可以发现其默认的API访问token!那么有了这个token之后,我就能把我的公共SSH密钥添加到实例中,然后再通过我的私钥去连接它,就能连接到Vimeo在Google云上的实例,按照上述我们预设的步骤成功实现SSRF。(此处可参考另一Vimeo SSRF漏洞)

挖洞经验:通过Vimeo的文件上传功能发现其SSRF漏洞相关推荐

  1. Google Project Zero挖洞经验整理

    1. 目标:漏洞挖掘越来越难 2. 关注客户端,包括安卓,IOS,WINDOWS操作系统,PDF,DOC,AV等等:各种OSS开源代码安全,并且开放了OSS-FUZZ工具: 3. 漏洞削减技术来帮助G ...

  2. 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

    之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能.本文我将主要讲解如何使用libcurl库去实现相关功能.(转载请指明出于breaksoftware的csdn博客) libcurl在 ...

  3. 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

    在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传 ...

  4. Spring MVC环境中的文件上传功能实现

    在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像.商品图片.邮件附件等等.其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上 ...

  5. php用ajaxs上传图片_php+ajax实现图片文件上传功能实例

    目前常用的异步文件上传功能有几种,比较多见的如使用iframe框架形式,ajax功能效果,以及flash+php功能,下面介绍ajax与iframe实现异步文件上传的功能的例子. 方法一,利用jque ...

  6. Java文件上传功能代码 —— 普遍适用

    版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/72782207 一. 前言   通过之前的博 ...

  7. query AjaxUpload实现多文件上传功能代码实例教程

    在PHP网站开发中,文件上传功能时常用到,之前我已介绍过如何利用PHP实现文件上传功能.随着WEB技术的发展,用户体验成为衡量网站成功与否的关键,今天和大家分享如何在PHP中利用Jquery实现Aja ...

  8. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    原文:学习ASP.NET Core Razor 编程系列十三--文件上传功能(一) 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习A ...

  9. springboot util 测试类怎么写_SpringBoot入门建站全系列(九)文件上传功能与下载方式...

    SpringBoot入门建站全系列(九)文件上传功能与下载方式 Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍. 文件的下载 ...

最新文章

  1. PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数...
  2. Hibernate学习(4)- Hibernate对象的生命周期
  3. 爬取虎牙之二:试用htmlunit模拟js爬取ajax页面
  4. redis 队列_Redis系列5实现简单消息队列
  5. 数学建论文模标准模板
  6. js中this的指向问题
  7. 把对方陷入困境中(博弈论的诡计)
  8. java版本不兼容_java 中jdk版本不兼容的问题小记
  9. beeline执行sql文件_【SparkSQL】介绍、与Hive整合、Spark的th/beeline/jdbc/thriftserve2、shell方式使用SQL...
  10. Visual Studio 开发(三):Visual Studio 使用时常见问题解决方案
  11. 数学之美系列好文,强烈推荐
  12. [SRv6]《SRv6网络编程》SRv6 OAM与随路网络测量(1/2:OAM)
  13. Python smtp拟人个性化群发邮件,imap退信批量处理和SuiteCRM结合使用问题
  14. Vue实现tab导航栏,支持左右滑动
  15. 百旺如何看是否清卡_百旺开票系统每月清卡怎么操作
  16. Vue Websocket 监听 websocket.readyState
  17. Charset API
  18. vue+高德地图绘制路径
  19. 图片点击放大,你的网页也能做到!
  20. 保监会就交强险费率浮动征询专家意见 凸显3焦点

热门文章

  1. 使用ComplexHeatmap绘制3D热图
  2. 益生菌拯救“社恐”?肿瘤攘外安内?胎盘似癌?这个世界怎么了。。。
  3. 加拿大生信开源学习资源Bioinformatics.ca
  4. Linux下那些查找命令
  5. P5706 【深基2.例8】再分肥宅水(python3实现)
  6. 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
  7. echarts formatter_牛X!用 Echarts 打造一个轮播图!
  8. scsi协议_存储协议有哪些类型?常见存储协议分析
  9. java 二阶段提交,二阶段提交协议(Two Phase Commitment Protocol)
  10. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化