AppleTV & nmap -sV
作者:BBKing
注意: 本博客中提及的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习机会,可能有助于更新或整合到现代工具和技术中。
某天工作时,妻子问我为什么电视开着。我不知道,也不是我开的。电视就在我桌旁,而且我知道别人也没开过。不过我之前在本地网络运行了nmap测试一些东西。你可能听说过对打印机使用nmap要小心,因为有些打印机会认真打印接收到的数据包,你可能不想浪费那么多纸。我的AppleTV是不是也在做类似的事情?
结果确实如此。跟我一起进行这次以工具练习为借口的调查吧。我发现追查自己的问题比读书或追查别人的问题更能让我理解事物的工作原理。
如果你有AppleTV,可以这样做:找到它的IP地址(设置 > 通用 > 关于 > IP地址。我的是192.168.10.110。顺便看看你是否也有型号A1625,运行tvOS 9.2.2,像我一样——也许这有关系?),然后关闭它。接着,在同一网络下的电脑上运行nmap版本扫描。
|
|
观察AppleTV上的小灯。我的在大约扫描开始30秒后亮起。完整扫描在两三分钟后完成,并声明以下六个端口为开放状态:
版本扫描结果
我关闭它再次运行扫描,得到相同结果,所以我确定是扫描把它唤醒了。现在我想知道是什么导致了这一切。也许这里有什么可以用来控制AppleTV?我能关闭它吗?播放一些音乐?骚扰邻居的AppleTV?
让我们看看这段时间网络上发生了什么。
在一个终端窗口中,我运行了tcpdump。在另一个窗口中,我再次运行版本扫描。运行扫描器或其他自动化工具时使用tcpdump显示流量是个好习惯。它帮助你在工具没有输出时确认它仍在运行。让你看到是否错误配置了扫描器,即将因扫描错误目标而陷入麻烦。
如果无参数运行,数据包头会输出到stdout。你可以添加bpf过滤器减少无关流量(例如‘not arp’),-n开关关闭名称解析和知名端口名称的使用,从而得到更短的行。如果你知道要查找的IP地址,这会很有帮助。对于这类事情,我发现让工具解释得越少越好。我想看到“端口22”而不是“ssh”,因为那里的东西可能并不总是ssh。
tcpdump在上,nmap在下
我将数据包捕获到文件(-w appletv.pcap)供后续分析。
我原以为会有一两个数据包导致设备开启,但让我们先看看最坏情况下要筛选多少数据包。
2,869个数据包超出了我想查看的范围。
如何缩小范围?那是完整的版本扫描,而我知道我感兴趣的东西靠近开始部分。
另外,我猜测我想要的数据包会发送到开放端口,而nmap扫描显然也会尝试与关闭端口通信。所以,再次尝试tcpdump,但只监听之前发现的开放端口:3689、5000、7000、7100、49152、62078。并且我一看到电视开启就按Ctrl-c停止收集流量。
从2869个数据包减少到122个。
好多了。我在Wireshark中打开数据包捕获,从底部(最近)开始查看。我寻找任何看起来像对话的内容。我注意到这个:
感兴趣的对话
右键单击该数据包,选择“Follow… TCP Stream”显示了这个类似HTTP的对话:
类似HTTP的对话
现在,RTSP不是HTTP,但语法非常相似:如果我知道发送到哪个IP和端口,我可以在命令行上完成。回顾Wireshark,是端口5000。
我关闭AppleTV并尝试它,将OPTIONS请求管道传输到netcat。我为‘echo’设置的“-e”标志告诉它解释反斜杠转义序列,这样我得到实际换行而不是字面反斜杠-n,后者对任何人都没有好处。
与捕获的响应相同
我得到相同的响应,但AppleTV仍然关闭——所以这不是我想要的。但有趣的是,我从一个“关闭”的系统得到如此完整的响应。
这是另一个候选:
看起来奇怪的HTTP请求
这看起来像是nmap为从某些特定系统获取特定响应而做的事情。请求是:GET /nice%20ports%2C/Tri%6Eity.txt%2ebak(“nice ports,/Trinity.txt.bak”?——是的,这是nmap的创造力在发挥作用。他们为什么发送这样的请求?答案:http://seclists.org/nmap-dev/2006/q2/207)
无论如何,我发送了这个请求,但没有得到任何响应。也没有电视唤醒。这也不是我想要的。进一步向开始部分查看,我看到两个裸GET请求,发送到不同端口。
GET / HTTP/1.0 到端口3689
我可以发送它:
|
|
然后电视开启了!
结果就是这个。仅仅一个“GET /”就足以从网络唤醒AppleTV。
所以,这就是我的答案。这是nmap版本扫描逻辑的一部分通用测试。就像扫描打印机会让它打印东西一样,这是扫描器的副作用,而不是其预期功能。这不是一个错误或某种晦涩数据包的巧妙处理方式。这是最基本的HTTP请求。有趣。这似乎表明AppleTV的某些功能可能通过此端口暴露,并且至少部分功能不需要认证。
在网上查找关于此端口的信息时,我遇到了这个“非官方AirPlay协议规范”,它解释了我在这里看到的一些内容,并提供了进一步研究的想法:https://nto.github.io/AirPlay.html。如果你感兴趣这能走多远,那将是我的下一步。
评论
Russell Butturini
2016年10月11日 @ 2:08 pm
很好的文章。你有没有把它连接到支持AnyNet+(如三星)的电视?它会监视连接到HDMI的支持AnyNet+的设备以启动和开启。想知道AppleTV是否唤醒,电视是否盲目地自行开启作为副作用。
BBKing
2016年10月12日 @ 8:47 am
是的——那是另一部分,Russell。AnyNet+似乎是三星对HDMI CEC(消费电子控制)标准的称呼,AppleTV在开启后使用它来告诉电视唤醒。
我注意到这在我用第四代AppleTV替换旧款时开始。它也允许你的AppleTV遥控器调整电视音量。Apple在这里谈论它:https://support.apple.com/en-us/HT205225