主页 > 网络知识 > Microsoft Forms未授权获取他人邮箱信息漏洞(2)

Microsoft Forms未授权获取他人邮箱信息漏洞(2)

为了去除受害者交互这个前提动作,我重新进行了测试构造。我想Microsoft Forms用户可以把他的调查数据分享给别人进行帮忙调查,那么我是否可以从这个方面来考虑考虑呢。用户A需要把他的调查数据分享给用户B,那么需要做到以下几步:

1、用户A选择需要分享的表单form,微软服务端自动为用户A生成一个分享链接;
2、用户A把该分享链接发送给用户B;
3、用户B打开该链接,并往里面填写提交调查数据时,就会向微软服务端有一个请求动作,而此时用户A可以在他的账户环境中看到用户B的提交数据。

在以上第3步的用户B提交数据过程,会有以下提交请求:

 

Microsoft Forms未授权获取他人邮箱信息漏洞

 

可以注意到其中包含了以下关键字段:

formapi/api/<ownerTenantID>/users/<ownerID>/forms(<formID>)/responses

用户B提交表单数据时,这里请求内容中的ownerTenantID, ownerID, formID与他相关,因此,我就想利用这些参数能否查看到用户B的相关信息,比如邮箱email呢?于是,我就用$select语法构造了以下查询请求:

 

Microsoft Forms未授权获取他人邮箱信息漏洞

 

但请求发出后,服务端却返回了404的状态。也即服务端不允许我访问createdBy属性或是其他用户的表单邮箱信息。但我又想到了另外一种方法:"是否有另一个实体有createdBy属性?并且还具有与forms表单实体相同的实体键(formID)?这又引发了我的想像,假设我们要找的实体为X,什么情况下实体键应该与forms表单实体键相同?

实体X具备createdBy属性,而我们的点在于需要通过该属性访问到其中的用户邮箱email。另外,假设X有一个名为accountID的实体键,为了访问其中的email,我们需要向其发送以下请求:

formapi/api/<ownerTenantID>/users/<ownerID>/X(<accountID>)$select=createdBy

这里的关键是accountID,因为我们并不知晓其中包含了什么东西,但从前面的步骤来看,我们可以通过用户B提交的表单看到其中的formID。之后,经过几种实体类型的比对,我又发现了另一个名为runtimeForms并包含createdBy属性的实体,且其与forms表单具备相同的实体键!这样,就完全满足了我前述想像的漏洞利用条件了:

 

Microsoft Forms未授权获取他人邮箱信息漏洞

接下来,我把请求中的forms用runtimeForms代替,并用$select语法去请求受害者的邮箱email。请求发出后,终于成功获取到了受害者的邮箱信息:

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

据此,我就能无交互地实现受害者邮箱信息获取了,当然最终也收获了微软官方奖励的$2k奖励。

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!