Сбросить пароль для переименованной учетной записи администратора - PullRequest
1 голос
/ 02 октября 2009

Мне нужно создать скрипт .VBS для сброса пароля локального администратора Windows на большой группе компьютеров. Моя проблема в том, что некоторые из наших сайтов переименовали учетную запись администратора по соображениям безопасности. У кого-нибудь есть скрипт, который меняет пароль учетной записи администратора на основе SID исходной учетной записи администратора?

Ответы [ 4 ]

1 голос
/ 03 октября 2009

Используя тот факт, что SID локального администратора всегда заканчивается на -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
0 голосов
/ 18 мая 2010

@ Ответ Дмитрия К хорош, и я ничего такого не знал. Но я знаю, что в PowerShell такие вещи обычно более чистые, поэтому я портировал их.

Например, можно написать целую функцию GetAdminName:

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

(Добавьте параметр -ComputerName к вызову gwmi, чтобы сделать это на сервере.)

Остальное становится:

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

(конечно, при необходимости применяя соответствующее имя компьютера).

0 голосов
/ 03 октября 2009

Как говорит Джошуа, я не думаю, что вы можете сделать это только с хостом сценариев Windows, вы можете использовать его, загрузить что-то и выполнить:

  • Пользовательское приложение, которое вызывает LookupAccountSid (SID S-1-5-domain-500 или группа администраторов enum) + NetUserSetInfo для сброса пароля (необходимо запустить от имени администратора)
  • http://home.eunet.no/pnordahl/ntpasswd/ (Сброс при загрузке)
  • Сброс хэшей SAM и взломать пароль (Каин, Джон Потрошитель, L0phtCrack и т. Д.)
0 голосов
/ 02 октября 2009

В каком-то месте есть инструмент под названием LookupAccountName (с источником!), Который, учитывая SID встроенного администратора, даст вам свое имя.

Вы, вероятно, в конечном итоге будете писать код на C ++, чтобы сделать это достаточно хорошо.

...