Réinitialiser le mot de passe pour le compte renommé Administrateur
-
19-09-2019 - |
Question
Je dois créer un script .vbs pour réinitialiser le mot de passe administrateur local Windows sur un grand groupe d'ordinateurs. Mon problème est que certains de nos sites ont renommé le compte administrateur pour des raisons de sécurité. Quelqu'un at-il un script qui modifie le mot de passe du compte administrateur basé sur le SID du compte Administrateur d'origine?
La solution
En utilisant le fait que le SID administrateur local se termine toujours par -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
Autres conseils
Il y a un outil flottant autour de quelque part appelé LookupAccountName (avec la source!) Que, étant donné le SID du adminitrator builtin vous donnera son nom.
Vous allez probablement finir par l'écriture de code C ++ pour tirer celui-off assez bien.
Comme Josué dit, je ne pense pas que vous pouvez le faire avec l'hôte de script Windows uniquement, vous pouvez l'utiliser télécharger quelque chose et l'exécuter:
- Une application personnalisée qui appelle LookupAccountSid (S-1-5-domain-500 SID ou d'un groupe admin ENUM) + NetUserSetInfo pour réinitialiser le mot de passe (a besoin pour fonctionner cela comme admin)
- http://home.eunet.no/pnordahl/ntpasswd/ (Réinitialiser au démarrage)
- Vider le SAM et le crack hash du mot de passe (Cain, John the Ripper, L0phtCrack etc)
@ réponse de DmitryK est bonne, et je ne savais pas de ce genre de choses. Mais je sais que ce genre de chose est généralement plus propre dans PowerShell, donc je l'ai porté.
Par exemple, on peut écrire toute fonction GetAdminName
:
$adminName = (gwmi win32_account | ? { $.SID.StartsWith( 'S-1-5-' ) -and $.SID.EndsWith( '-500' ) }).Name
(Ajoutez l'option -ComputerName
à l'appel gwmi
pour ce faire sur un serveur.)
Le reste devient:
$user = ([ADSI]"WinNT://$($env:COMPUTERNAME)/$adminName,User") $user.SetPassword( 'xxx' ) $user.SetInfo()
(application du nom de l'ordinateur approprié au besoin, bien sûr.)