Como qualquer administrador de sistema convencido da perfeição de sua própria memória e da capacidade de lembrar o código de instalação do Windows XP de 25 dígitos no meio da noite, ele recentemente capturou essa exceção.
Um belo dia, decidindo parar para verificar o que há no meu controlador UniFi, recebi uma mensagem incrível: Erro de login.

Depois de coçar a cabeça e se lembrar de como, em um momento, havia esquecido o código PIN do cartão, digitado puramente mecanicamente, ele começou a examinar as opções possíveis. Depois de meia hora tentando, procurando anotações em um caderno, revisando os escleróticos colados no monitor, percebi que precisava procurar soluções alternativas.
Faça imediatamente uma reserva para quem gosta de criticar - o gerenciador de contas / senhas, ala LastPass, é usado. Por uma questão de fato, é o LastPass que é usado. E os dados de lá não contribuíram para a autenticação bem-sucedida.
Depois de pesquisar nos fóruns burgueses, as informações necessárias para redefinir a senha de qualquer conta no controlador foram recebidas, compreendidas, digeridas e coletadas em um breve memorando.
Então, dado:
1. Controlador UniFi (não desempenha o papel de SO - Linux ou Windows) com acesso ao próprio SO.
2. acesso à Internet.
3. Braços retos.
O controlador UniFi armazena toda a configuração no banco de dados Mongo.
Verifique se há informações necessárias para a conta que você está procurando:
mongo --port 27117 ace --eval 'db.admin.find().forEach(printjson);'
Nesse caso específico, solicitamos informações para a conta de
administrador .
Se estivermos procurando pela
contabilidade VasyaPupkin
, a consulta terá a seguinte aparência:
mongo --port 27117 ace --eval 'db.VasyaPupkin.find().forEach(printjson);'
O escape é aproximadamente o seguinte:
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" }
Campo de interesse para nós:
x_shadow" : "$6$0YiSt9dQ$YrNKedOCjOP2xl3y9FhRasafdhbdfadamBKIjZ4l9Mm4cy/m49dt0bN.sYaFvgVb5vce45KypFe07iNYc1"
Após a
análise do Google
, descobrimos que o algoritmo de criptografia é compatível com
SHA-512 crypt (3).
Opa Adiamos a idéia de descriptografar para a prateleira mais distante e seguimos para o outro lado.
Como temos acesso ao banco de dados, precisamos apenas de um hash da senha que conhecemos. E atualizar o registro no banco de dados é algo simples.
Nós vamos para:
Selecionamos o algoritmo desejado, digite a senha que usaremos:

Aperte o pequeno botão azul mágico:

O hash resultante é cuidadosamente copiado, então precisamos dele.
E agora é hora da etapa final:
admin.mongo --port 27117 ace --eval 'db.admin.update({name:"admin"},{$set:{x_shadow:"$6$ee74396ce4c563de$oLm93BwJywYo1sUFgX8U0FC.p75t1Jv838.0defRCe36jgX6PU3h.m3NL6tjCs8Q/1Ymtge0DXz9shb//dyEN."}})'
Rolo de tambor ... Pressione Enter.
MongoDB shell version: 2.6.12 connecting to: 127.0.0.1:27117/ace WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Nós vamos para a página de autenticação do controlador UniFi, digite o nome de usuário:
admin (alteramos a senha para ele), digite a senha para a qual o hash foi gerado.
E pronto, tudo funciona, tem acesso, todo mundo está feliz e dançando.