Pergunta

Eu preciso criar um script .VBS para redefinir a senha do administrador local do Windows em um grande grupo de computadores. Meu problema é que alguns dos nossos sites tiver renomeado a conta de administrador por motivos de segurança. Alguém tem um script que altera a senha da conta de administrador com base no SID da conta de administrador original?

Foi útil?

Solução

Usando o fato de que o administrador local SID sempre termina com -500:

strComputer="."    ' local computer by default   
Set objUser=GetObject("WinNT://" & strComputer & "/" & GetAdminName & ",user")     
objUser.SetPassword "New local admin password"     
objUser.SetInfo 

Function GetAdminName   
  'This function was written using information from Table J.1 from the Windows XP resource Kit
  'http://www.microsoft.com/resources/documentation/Windows/XP/all/reskit/en-us/Default.asp?url=/resources/documentation/Windows/XP/all/reskit/en-us/prnc_sid_cids.asp

  Set objNetwork = CreateObject("Wscript.Network") 'get the current computer name 
  objComputerName = objNetwork.ComputerName    
  Set objwmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & objComputerName)

  qry = "SELECT * FROM Win32_Account where Domain = '" & cstr(objComputerName) & "'" 
  'set query, making sure to only look at local computer

  For Each Admin in objwmi.ExecQuery(qry)   
    if (left(admin.sid, 6) = "S-1-5-" and right(admin.sid,4) = "-500") then 'look for admin sid
       GetAdminName = admin.name
    end if   
  next    
end Function

Outras dicas

Há uma ferramenta flutuante em algum lugar chamado LookupAccountName (com fonte!) Que, dada a SID do adminitrator builtin vai lhe dar seu nome.

Você provavelmente vai acabar escrevendo código C ++ para puxar este fora razoavelmente bem.

Como Joshua diz, eu não acho que você pode fazer isso com Windows Scripting único hospedeiro, você pode usá-lo baixar alguma coisa e executá-lo:

  • Um aplicativo personalizado que chama LookupAccountSid (S-1-5-domain-500 SID ou enum grupo admin) + NetUserSetInfo para redefinir a senha (Necessidades para executar este como admin)
  • http://home.eunet.no/pnordahl/ntpasswd/ (Reset na inicialização)
  • Dump os hashes SAM e quebrar a senha (Cain, John the Ripper, L0phtCrack etc)

@ resposta de DmitryK é bom, e eu não sabia nada disso. Mas eu sei que esse tipo de coisa geralmente é mais limpo em PowerShell, então eu portado-lo.

Por exemplo, toda a função GetAdminName pode ser escrita:

$adminName = (gwmi win32_account | ? { $.SID.StartsWith( 'S-1-5-' ) -and $.SID.EndsWith( '-500' ) }).Name

(Adicionar a opção -ComputerName à chamada gwmi para fazer isso em um servidor.)

O resto torna-se:

$user = ([ADSI]"WinNT://$($env:COMPUTERNAME)/$adminName,User")
$user.SetPassword( 'xxx' )
$user.SetInfo()

(aplicando o nome do computador apropriado, conforme necessário, é claro.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top