2019-01-31技术讨论 看我如何重置海康威视IP摄像机的管理

  咱们常常在网上看到某某通用IP摄像机被黑客运用的新闻。大多数情况下,制造商并不会强制用户设置安全暗码,一般您能够运用默许暗码直接登录。但有些厂商异乎寻常——海康威视。初次登录时运用暗码是12345,但接下来会强制您更改暗码。这难道能够阻挠攻击者拜访设备吗?可是并没有。第一次我开端测验海康威视DS-7604NI-E1 NVR的安全性时,由于我忘记了我设置的登录暗码。谷歌告诉我能够运用海康威视的Search Active Devices Protocol东西,该东西除了能够扫描子网上的设备功用外,还能够挑选重置设备的办理员暗码。当我装置该东西并挑选Forgot Password选项时,它会提示我输入一个安全密钥,可是我没有什么安全密钥。

  所以这对我没什么卵用——我需求另一种方法进入。我能够在80端口上拜访办理面板。运用Burp Suite阻拦流量,并发现当用户测验登录时,发现当用户企图登录时,会向坐落/PSIA/Custom/SelfExt/userCheck的端点宣布XHR GET恳求。用户名和暗码包括在内。该恳求将回来带有字段的XML文档,假如验证失利则回来401,假如成功则回来200。我依稀记得那个pin只能包括数字,大概是5-6位数。此外,假如您输入过错的pin太屡次,也不会确定。这为爆炸提供条件。了解这些之后,我用Python中创建了一个脚本,它仅仅遍历一系列pin码并检查呼应:

  可是,暗码重置选项引起了我的爱好——如安在体系上检查代码?是否能够在本地生成它?为了找到这个答案,我需求设备上的二进制文件。走运的是,一旦具有办理员暗码,就能够轻松取得对设备的root拜访权限:您只需将一个PUT恳求发送到/ISAPI/System/Network/telnetd的端点,并运用以下数据:

  这将启用telnet看护程序,您能够将其衔接并以root办理员身份登录。进入busybox shell:

  经过一些根本的枚举测验后,我发现当设备启动时,坐落/home/hik/start.sh的脚本将履行,它向/home/app提取一些二进制文件,设置一些内容并终究履行二进制文件/home/app/hicore。考虑到它的巨细,如同正是我正在寻觅的,所以我运用FTP将其上传到我的PC并运转。仅从输出成果来看,如同这个二进制文件简直担任一切作业:保管网络前端,后端,与SADP通讯,检查暗码,驱动衔接的摄像头号。运用IDA翻开,查找的字符串security code,我发现Invalid security code的引证以及在0x9C0E6D对Default password of admin restored的引证,这如同是我一直在寻觅:

  从无效的暗码分支向后查找,咱们发现如同它比较了两个字符串,其间一个是由0xC2D04处的子程序发生的, 另一个或许是用户输入。0xC2D04的子程序如下所示:

  经过检查反汇编代码,很明显这是一个函数,它承受两个参数,一个作为种子的字符输入数组和指向输出方位的指针 ——从种子生成代码。咱们接下来就会了解输入内容是什么了。现在,咱们能够经过运用Hex-Rays生成函数的伪代码来看看:

  看起来如同它为遍历输入,运用for循环生成一个数(由IDA命名为v5),运用循环计数器生成一些十分根本的算术(乘法和XOR)以及每个字符的数值。咱们能够用Python表明如下:

  然后将其乘以硬编码的数字1751873395,并将其格局化为字符串作为无符号long。在Python中,咱们能够运用numpy来表明:

  最终,for循环遍历字符串中的每个字符,并运用一些硬编码偏移量和字符值生成一个新字符串。在Python中表明为:

  可是,由于字符仅仅运用几个偏移量生成,因而这实际上是一个替换暗码,上面的块能够替换为:

  很好,可是终究是什么才干成为种子呢?再看一下反汇编,看起来输入是一个从内存中取出的字符串,结合设备的日期格局为:{string}{yyyy}{mm}{dd}

  所以这个奥秘的字符串是设备的序列号。尽管这能够从SADP东西中获取,但假如与日期一同主动获取它会更简单。我在其间查找了带有“serial”的字符串,找到了一个XML呼应模板:

  这看起来十分像UPNP数据。在0xAE427D,咱们乃至能够看到该文件的“location”。/upnpdevicedesc.xml的确能够发送GET恳求来获取序列号,而且设备的本地时刻包括在呼应头中,这就是咱们生成代码所需的全部内容。咱们现在能够编写一个函数,它为keygen生成输入:

  运转此指令会生成一个密钥,当输入SADP时,的确会将暗码重置为12345。

  总而言之,这种安全措施是行不通的。更糟糕的是,它或许会发生一种假的安全感,而这种安全感或许会被攻击者乱用,然后无法正常作业。尽管我的脚本不允许您重置其他人的暗码,由于您必须在本地摄像机的SADP中手动输入暗码。