Сброс пароля контроллера UniFi

  • Tutorial
Как любой системный администратор, уверившийся в совершенстве собственной памяти и способности посреди ночи вспомнить 25-значный код установки Windows XP, поймал недавно такой вот exception.

В один прекрасный день, решив зайти проверить что там с моим контроллером UniFi, получил удивительное сообщение: Login error.



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

Сразу оговорюсь для любителей покритиковать — менеджер учетных записей/паролей, аля LastPass, используется. Собственно говоря, именно LastPass используется. И данные оттуда не способствовали удачной аутентификации.

Поискав на буржуйских форумах, необходимая информация для сброса пароля от любой учетки в контроллере была получена, осмыслена, переварена и собрана в краткую памятку.

Итак, дано:

1. Контроллер UniFi(не играет роли ОС — Linux or Windows) с доступом в саму операционку.
2. Доступ в Интернет.
3. Прямые руки.

Контроллер UniFi всю конфигурацию хранит в базе Mongo.

Проверяем, есть ли нужная нам информация по искомой учетной записи:

mongo --port 27117 ace --eval 'db.admin.find().forEach(printjson);'

В данном конкретном случае запрашиваем информацию для учетной записи admin.

Если ищем для учетки VasyaPupkin запрос будет выглядеть следующим образом:

mongo --port 27117 ace --eval 'db.VasyaPupkin.find().forEach(printjson);'

Выхлоп получаем приблизительно следующий:


MongoDB shell version: 2.6.12
connecting to: 127.0.0.1:27117/ace
{
        "_id" : ObjectId("567bfd4fe4b0c81300ff3158"),
        "email" : "admin@company.com",
        "email_alert_enabled" : true,
        "email_alert_grouping_enabled" : true,
        "html_email_enabled" : true,
        "is_professional_installer" : false,
        "last_site_name" : "default",
        "name" : "admin",
        "requires_new_password" : false,
        "time_created" : NumberLong(1450966351),
        "ui_settings" : {
                "dashboardConfig" : {
                        "dashboards" : {
                                "5b4c57aadc236c7de53e3c3c" : {
                                        "order" : 1
                                }
                        },
                        "lastActiveDashboardId" : "5b4c57aadc236c7de53e3c3c"
                },
                "statisticsPreferBps" : true
        },
        "x_shadow" : "$6$0YiSt9dQ$YrNKedOCjOP2xl3y9FhRasafdhbdfadamBKIjZ4l9Mm4cy/m49dt0bN.sYaFvgVb5vce45KypFe07iNYc1"
}

Интересующее нас поле:

x_shadow" : "$6$0YiSt9dQ$YrNKedOCjOP2xl3y9FhRasafdhbdfadamBKIjZ4l9Mm4cy/m49dt0bN.sYaFvgVb5vce45KypFe07iNYc1"

После анализа гугления узнаем, что алгоритм шифрования — SHA-512 crypt(3) compatible.

Упс. Откладываем идею декрипта на дальнюю полочку и идем другим путем.
Доступ к базе у нас есть, соответственно нужен просто хеш от известного нам пароля. А обновить запись в базе дело-то нехитрое.

Идем на :
Выбираем нужный алгоритм, вводим тот пароль, который будем использовать:



Нажимаем волшебную Синенькую кнопочку:



Полученный хеш аккуратненько копируем, далее он нам понадобится.

И вот настало время для финального шага:

admin.mongo --port 27117 ace  --eval 'db.admin.update({name:"admin"},{$set:{x_shadow:"$6$ee74396ce4c563de$oLm93BwJywYo1sUFgX8U0FC.p75t1Jv838.0defRCe36jgX6PU3h.m3NL6tjCs8Q/1Ymtge0DXz9shb//dyEN."}})'

Барабанная дробь… Нажимаем Enter.


MongoDB shell version: 2.6.12
connecting to: 127.0.0.1:27117/ace
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Идем на страницу аутентификации контроллера UniFi, вводим имя пользователя: admin (мы же ж для него пароль меняли), пароль вводим тот, для которого генерировали хеш.

И, вуаля, все работает, доступы есть, все счастливы и танцуют.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 5

    0
    Ну, да. Даже в Графане требуется авторизация. А в МонгоДБ — по дефолту нет.
    Юбикам про эту «фичу» не сообщили? А то как-то несекьюрно вдруг по всему миру стало.
      0
      Согласен, первая мысль, которая возникла при опробовании данного способа — «Чьорт побьери, ведь даже sudo не просит. Так тут можно вообче на контроллере получить че хошь».
      Но на убнтшном форуме пишут, что в монгодб доступ только локалхост, поэтому и метод вполне себе приемлемый — ведь доступ к серверу уже имеется.
        0
        Вообще говоря, наружу не должны торчать никакие порты, если доступ к ним не нужен — надо блокировать на уровне файрвола все, что не должно быть открыто (всегда ваш, кэп). Тогда, даже если наколбасить конфигурацию с привязкой не только на localhost (или забыть про конфиги старой версии MongoDB), то жить станет немного проще (вот тут ребята из Shodan написали чуть подробнее про момент с версиями).
        0
        Еще можно было бы попробовать hashcat-ом забрутить перестановки соседних букв и опечатки, если предполагаемый пароль известен
          0
          В том-то и дело, что пробовал, но результата не дало. Да и по времени такой вариант побыстрее будет.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое