雄迈摄像头研究笔记一:telnet的开启

2019-08-1022:12:46来源:mmseh 评论 2,758 views

年前买了个雄迈摄像头,对家里进行安防监控,该摄像头其实就是个安装了linux系统的嵌入式设备,到手后,对于其未默认开启telnet服务感到很是不爽,所以打算hack之。
最简单的办法其实是 TTL 连上去后开启,其次就是下载固件后直接更改固件,在启动脚本里增加启动 telnetd 的语句后刷进去,但是因为是新买的,不想失去保修,而且也想趁机多研究学习下,所以只考虑有没有远程开启的办法。
从固件开始下手,先去官网下载该摄像头的最新固件.
下载完后本地解压,查看了下 busybox 的定义列表,确实有 telnetd ,并且 /bin 下面也建立了telnetd 的别名,也就是说是支持 telnet 服务的,只是没开启而已。
在固件文件中搜索了下 telnet 的配置,也没找到相关配置,此路不太可行。

从官方客服下手,在花言巧语之下,找官方要到了 telnet 开启工具 opentelnet ,输入目标设备 ip 后就能远程开启设备的 telnet 服务
但是该工具有几个限制:
1.只可以临时开启telnet,摄像头重启后就得重新开启
2.该工具使用必须输入一个一次性的超级密码,而这个密码得找客服才能算出来
3.该工具会检测输入ip地址,只能对内网设备使用

风小博:
对于IPC设备,可以向端口 9527 发送字符串: OpenTelnet:OpenOnce

超级密码这个比较简单,简单研究下后就破解掉了,内网使用也简单,本地做个端口映射也绕过了。
只是暂时对 telnet 的临时开启没办法,每次重启再去开 telnet 也麻烦。
所以开始研究永久开启telnet的办法
永久开启有两种途径
1.就和临时开启telnet一样,系统本身支持永久开启的命令
2.系统没有支持永久开启的命令,但是可以将 telnetd 加到启动脚本里去,达到系统启动时自动启动telnet服务的目的

先对工具抓包,发现是和摄像头的9530端口进行通信,发送了OpenTelnet:OpenOnce的命令给摄像头
然后telnet登陆上摄像头,使用命令netstat -ap查看是谁在用9530这个端口:

netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:34567           0.0.0.0:*               LISTEN      1190/Sofia
tcp        0      0 0.0.0.0:554             0.0.0.0:*               LISTEN      1190/Sofia
tcp        0      0 0.0.0.0:www             0.0.0.0:*               LISTEN      1190/Sofia
tcp        0      0 0.0.0.0:telnet          0.0.0.0:*               LISTEN      1169/telnetd
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      1190/Sofia
tcp        0      0 0.0.0.0:9530            0.0.0.0:*               LISTEN      1165/dvrHelper

dvrHelper 这是个啥玩意呢?

因为摄像头的busybox里命令残缺不全,在里面找东西和分析都麻烦的很,所以还是在本地固件里分析吧。

在固件文件夹里搜索到 dvrHelper ,发现是 dvrbox 的链接,然后查找dvrbox中的文本

除了找到OpenTelnet:OpenOnce之外,还找到了OpenTelnet:Forever

顾名思义,难不成这个语句就是永久开启telnet的语句?

将之前的opentelnet工具改改,把发送的命令由OpenOnce改成OpenTelnet:Forever

执行后重启摄像头,telnet 服务还是没启动, 看来是弄错了什么东西,或者系统根本不支持telnet的永久开启?此路已经不通,掉转方向继续进行研究

开始查找系统的可写目录,仅找到以下三个:

/mnt/mtd
/utils
/var/tmp

其中/utils是内存系统,重启后会清空,所以不是此目录
/var/tmp也是临时文件夹,重启会删除,所以也不是此目录
本来试图修改/etc/init.d文件夹下的rcS文件,做到开机启动telnetd
但是该文件是只读,研究许久都没发现修改该文件或者其子过程的办法
/mnt/mtd呢?

研究半天/mnt/mtd,也是毫无头绪,改倒是可以改,但是没法添加到启动项中去
不过也可能是使用文件作为配置文件,启动检测到文件存在时则执行telnetd,否则不执行,这点只能从固件中找答案
仍然是研究dvrbox文件

#strings dvrbox |grep telnet
telnetctrl
LIBDVR : Get telnetctrl Fialed, telnetctrl=1
macGuarder: Open telnetd Forever 
killall telnetd
macGuarder: Close telnetd Forever

居然还有 killall telnetd 语句,是不是即使将telnetd想办法添加到启动项,也会被干掉?

但是又注意到另外一个字符telnetctrl
难道telnetctrl就是该配置参数名?

使用telnetctrl在固件文件夹下全局搜索
发现仅在armbenv中再次提到了该参数
那armbenv是个什么呢?
执行armbenv命令,提示使用-r参数打印环境信息
继续执行armbenv -r

根据结果以及个人的猜测,我认为armbenv是设置系统启动环境变量用的
另外其有一个-s参数,可以设置param,要不试试?
执行以下命令 armbenv -s telnetctrl 1
提示成功
再执行armbenv -r
发现telnetctrl已经存在

重启
直接telnet
成功!

备注
1.经测试重置不会移除telnetctrl参数,目测armbenv工具应该是读写uboot配置的工具,所以在文件系统里当然找不到对应的配置记录了
2.telnet的账号密码获取其实很简单,把固件解压后,查看romfs-x.cramfs\etc\passwd文件,里面有加密后的密码串,把密码串在搜索引擎里面搜下,就找到了对应的密码
我手上这款摄像头的账号密码是:

root
xmhdipc

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: