Come integrazione all'articolo relativo alle vulnerabilità password [1] vorrei spiegarvi come riuscire (per mezzo di WSH) a cambiare/resettare la password di amministratore locale di più computer membri del dominio.
Preparazione
Prima di tutto tenete presente che le operazioni andranno eseguite utilizzando un account di dominio che possieda almeno diritti amministrativi locali sui computer client della rete.
Il passo successivo è quello di scaricare dalla mia sezione scripts [2] questi due vbs:
- Change Local Administrator Password On All Computers In A List [3]
- List All Computers And Users Within An OU And Subous [4]
Lo script principale è "Change Local Administrator Password On All Computers In A List" ed ha lo scopo di collegarsi a tutti i computer client della rete resettandone/cambiandone la password dell'account "Administrator" locale.
Lo script secondario "List All Computers And Users Within An OU And Subous" invece è di supporto e servirà per estrapolare agevolmente da Active Directory la lista di tutti i computer da sottoporre al "trattamento" descritto sopra.
Il passo successivo è, se già non lo avete fatto, di estrarre gli script sopra citati ed estrarli in una cartella qualsiasi, per comodità diciamo che dovete estrarli nella cartella "C:\Scripts".
Siccome questi script sono studiati per poter essere eseguiti tramite il motore WSH cscript.exe vi consiglio di aprire un prompt dei comandi e recarvi all'interno della suddetta cartella "C:\Scripts".
Estrazione degli account computer da Active Directory
"Change Local Administrator Password On All Computers In A List" necessita di avere come input un file di testo denominato computers.txt contenente tutti i nomi dei computer sui quali modificare la password in questione, sarà quindi necessario ottenere a priori queste informazioni. Farlo è molto semplice:
Modificate lo script "List All Computers And Users Within An OU And Subous" e modificate i due parametri che vedete cerchiati in rosso nell'immagine seguente:
Const ADS_SCOPE_SUBTREE = valore_numerico
è la variabile con la quale impostare la profondità della ricerca, cioè il numero di sottolivelli a partire dal Base Dn (la prossima variabile) nei quali verrà effettuata la ricerca degli oggetti. Questa variabile è utile nel caso in cui vi interessi estrarre soltanto una parte di tutti i computer contenuti in un albero di unità organizzative. In qualsiasi altro caso è sufficiente impostare questa variabile ad un numero abbastanza alto da garantire l'elaborazione di tutte le unità organizzative.
"SELECT Name FROM 'LDAP://ou=Computer,ou=Radice,dc=dominio,dc=lan' WHERE objectCategory='Computer'"
rappresenta il percorso LDAP [7] che lo script utilizzerà come punto di partenza (base dn) per l'estrazione degli account. Per chi non lo sapesse OU serve a dichiarare il nome di una Organizational Unit (unità organizzativa) e DC serve a dichiarare le Domain Component (le componenti del nome di dominio). Di seguito potete vedere la struttura di un dominio fittizio da prendere come riferimento per l'impostazione delle due variabili appena citate:
Se volete approfondire l'argomento LDAP vi consiglio di leggere LDAP per Amministratori Active Directory - LDAP for Active Directory Administrators [9]
Salvate e chiudete la modifica dello script quando pensate che sia corretto ed adeguato alle vostre esigenze. Eseguitelo (dal prompt dei comandi aperto in precedenza) mediante il comando:
cscript list_all_computers_and_users_within_an_ou_and_subous.vbs > computers.txt
la parte finale > computers.txt si occuperà di reindirizzare completamente l'output dello script all'interno del file di testo computers.txt (se non esiste verrà creato)
Se aprite questo file vi renderete conto che è quasi perfetto per il nostro scopo:
Le prime tre righe mostrano la versione di WSH e non ci servono, cancellatele e salvate il file. Ora computers.txt è pronto per poter essere fornito in input a "Change Local Administrator Password On All Computers In A List".
Vi faccio notare che questo script può essere eseguito con successo da un qualsiasi utente di dominio di Active Directory.
Si dia inizio al cambio password
Ora che abbiamo creato il file computers.txt tutto il lavoro è già fatto. Non resta che eseguire lo script "Change Local Administrator Password On All Computers In A List" tramite cscript (in questo caso per l'avvio potrebbe bastare anche Wscript e quindi un semplice doppio clic sul file vbs).
cscript change_local_administrator_password_on_all_computers_in_a_list.vbs
Attendete fino alla comparsa della finestra che vi avvisa che l'esecuzione dello script è terminata. Potrete quindi accedere ai due files di log: errors.txt e changedpwd.txt.
Nel primo troverete il resoconto degli eventuali errori riscontrati durante l'esecuzione dei comandi.
Il secondo invece mostra su quali computer è stata cambiata con successo la password di administrator locale.
Grazie al file errors.txt, come vedete nell'immagine sopra, vi sarà possibile anche distinguere i computer sui quali non avete accesso tramite le vostre credenziali utente da quelli ai quali l'accesso non avviene semplicemente perché sono spenti o inesistenti.
L'unica raccomandazione che vi faccio è quella di prestare particolare attenzione alla password che andrete ad impostare tramite questo script, se nel dominio sono attivi criteri sulle password è bene che li rispettiate altrimenti rischiate di ritrovarvi con un file changepwd.txt vuoto ed un errors.txt pieno di errori numerici di difficile comprensione... ;-)
Conclusioni
Poiché questo argomento a mio avviso è strettamente collegato alla sicurezza delle password assegnate agli amministratori locali, vi consiglio di approfondirlo mediante la lettura di Proteggere la rete Windows dalle vulnerabilità password - Windows password hacking tools for Penetration Testing [1].
Autore
Mirko Iodice
mirko -at- notageek (.dot) it