首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用一首歌曲来谱写RTMP协议分析

为了让我这篇技术稿更加有情趣,打算用一首歌曲的结构来命名我整篇文章的脉络。

一、前序

最近在重温由W.Richard Stevens 的传世之作《TCP/IP详解》,看到第12章TCP ,基于传输层有TCP 、 UDP 、 TLS 、DCCP 、SCTP 、RSVP 、PPTP等,那我好奇那基于TCP有哪些协议呢?在Google里面查找了一下,有一个协议映入眼帘 RTMP ,RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP协议没听过啊,一下子激起了我想要揭开它的面纱的冲动,大概研究了RTMP协议整整3天时间,试图想要找出一些漏洞出来,幸运的是我找到了!很鸡冻,下面就是我对此协议的分析。

二、RTMP协议分析

1) 播放一个RTMP协议的流媒体需要经过:

1>握手 2> 建立链接 3>建立流 4>播放 5>发送 ———————

1>握手(Handshark)

Handshake done Handshake done

Note:交互示意图就不讲解了,很简单!为了让本技术稿有很好的易读性,我尽力注释!

2>建立链接(ConnectResponse)

3>建立流

4>播放

←—-抓包播放的关键字符串 “play”

5>发送(Send)——Metadata

2)用我的宝贝wireshark抓包来分析一下过程

1>抓包:

2>RTMP消息结构:

还是用XMind做个示意图吧!

要想在相应的网络环境上传输就需要将消息拆分成较小的数据块

3>消息块的报文结构:

Note:时间戳:由于时间戳在电子取证中的重要作用及其法律地位,时间戳系统必须拥有极高的安全级别, 安全保护应包括物理环境安全和软件安全。

4>RTMP消息分块

Message被分割为几个消息块的过程中, Message Body大小固定的消息块(Chunk Size,默认128个字节)并在其首部加上Chunk Header 就组成了相应的消息块。

Eg:309字节的消息块进行分块示意图如下所示:

3) HnadsShark阶段的源码分析

三、渗透测试&

分析到RTMP居然是未加密协调,很开心!然后就查了一下此协议的都应用在哪些方面,结果是:流媒体/交互服务器之间进行音视频和数据通信 ,我第一就想到的应用场景是当今炙手可热的直播平台,随便百度了一下,点进去一个直播平台如下图:

哇塞,可爱的妹子,心里想再瞅瞅,不一会有有一个恶心的弹窗蹦出来,如下图:

我毫不犹豫的关闭这个弹窗,心里想:还敢不敢让我安安静静的看这个直播,没过30s又出现这个弹窗!我明白了这个直播平台想要收集我的个人信息不认证不给看!心里憋屈,想着能不能绕过注册认证看直播呢?反正已经知道RTMP协议是未加密的,是明文传输的!先抓包看一下再说。

Note:1>想要抓到完整的三次握手包,必须是在免费观看的那段时间进行抓包,弹窗后后抓的包是不完整的!

2>由于这种通信模式是最常见的C/S模式,突然让我想到刚刚分享了Rtmp的消息结构,Play/Pause它是C/S交互的字符串标志!

Note:ID(15-20)是负责发送AMF编码的命令,负责User与Server之间的交互 eg:Play/Pause。

也就是Rtmp协议里面肯定有”play”这个字符串!然后用wireshark的过滤器进行字符串关键字的查询;由于是未加密的协议,只要我找到这个播放的URL地址,再找个可以播放这种流式协议的播放器不就大功告成了吗?突然脑袋中灵光乍现,记得在2017-7-27的BUF早餐铺就有报道一个内容是: 关于因频繁杀后台,VLC播放器将华为机型列入黑名单。

Note: VLC是开源播放器应用,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议!正好得来全不费工夫!

Just Do It !

1>首先筛选出字符串为”rtmp”——(B1)

Note: 右下角的ASCII区明文显示:rtmp://pull.kktv8.com:1935/livekktv。

当时有点鸡冻,直接将这部分url地址粘贴在VLC的没有打开!

2>我居然忘记一个最重要的字符串”Play”,赶紧再筛选一次——(B2)

3>URL组合:rtmp://pull.kktv8.com:1935/livekktv/128128278 ——(B3)

4>Play it!(B4)

5>Bingo-→妹子终于现身(B5)

Note:RTMP RTSP 协议都可以用来做视频直播,只要我们拿到它们的URL,都可以通过VLC Media Player进行播放查看。

6>发散思维(留个大家的思考问题)(B6)

这个渗透实验的成功,让我想到一些比如爱奇艺,腾讯视频,优酷等要看那些美国大片必须要买VIP才能观看,并且最重要的是可以试看几分钟,但是这些视频传输是基于Http协议的,或者说是一个客户端和服务器端请求和应答的标准(TCP)!这个方面我之前研究过,在此就不赘述了!大家可以再脑袋大开一点研究研究!

四、修复方案

1>协议不变的基础上,总体思路:首先明确漏洞点,然后明确代码块,再加权限函数。

需要加的权限函数如下://类似于大家通常在数据库里边添加校验位一个作用

2>使用加密协议RTMPS协议;

3>让用户不要试看,一点击进去就需要认证,防止捕获到完整的数据包;

整首歌的结构是:

C+A+B+D+B1+B2+B3+B4+B5+B6+E;

熬夜写歌,是否动听!

*本文原创作者:星空111,本文属FreeBuf原创奖励计划,未经许可禁止转载

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180820B1BKAL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券