2009-10-02 6 views
1

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

+0

+1 для ясности и объяснения именно того, что вам нужно. Не могу с тобой помочь :( –

ответ

1

Используя тот факт, что 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

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

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

0

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

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

@ ответ DmitryK это хорошо, и я не знаю ни одной из этих вещей. Но я знаю, что такие вещи обычно чище в 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() 

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