Visualizzazione post con etichetta script. Mostra tutti i post
Visualizzazione post con etichetta script. Mostra tutti i post

lunedì 18 febbraio 2019

Kali Linux: Visualizzare e modificare l'hostname da terminale

L'hostname (o host name) è il nome identificativo assegnato ad un dispositivo (host) all'interno di una rete e può essere composto da lettere, cifre e trattini. Generalmente agli host all'interno di una rete vengono assegnati nomi significativi che ne lasciano intuire il ruolo e spesso anche la posizione e il sistema operativo. In questo articolo mostrerò come visualizzare l'hostname delle propria postazione, come modificarlo temporaneamente, come modificarlo in maniera permanente e come assegnare un hostname randomico ad ogni avvio.


Visualizzare l'hostname

Per visualizzare il nome della propria postazione in Kali Linux basta eseguire da terminale il comando
hostname
Kali Linux, visualizzare l'hostname della propria postazione
FIG 1 - Kali Linux, visualizzare l'hostname della propria postazione



Modificare temporaneamente l'hostname

Per modificare temporaneamente il nome host si può far seguire al comando hostname il nome da assegnare
Ad es.
hostname PC1
Kali Linux, modificare temporaneamente l'hostname
FIG 2 - Kali Linux, modificare temporaneamente l'hostname





Modificare in maniera permanente l'hostname

Per assegnare permanentemente un nuovo nome host è necessario modificare i file hostname e host presenti nella directory /etc.
  • Da terminale digitare il comando leafpad /etc/hostname
    Kali Linux, aprire il file hostname utilizzando l'editor di testo leafpad
    FIG 3 - Kali Linux, aprire il file hostname utilizzando l'editor di testo leafpad
  • Sostituire il nome host visualizzato con quello desiderato quindi salvare e chiudere la finestra dell'editor;
    Kali Linux, modificare il file hostname utilizzando l'editor di testo leafpad
    FIG 4 - Kali Linux, modificare il file hostname utilizzando l'editor di testo leafpad
  • Ritornati alla finestra del terminale eseguire il comando leafpad /etc/hosts
    Kali Linux, aprire il file hosts utilizzando l'editor di testo leafpad
    FIG 5 - Kali Linux, aprire il file hosts utilizzando l'editor di testo leafpad
  • Sovrascrivere il vecchio nome host con quello desiderato quindi salvare e chiudere la finestra dell'editor;
    Kali Linux, modificare il file hosts utilizzando l'editor di testo leafpad
    FIG 6 - Kali Linux, modificare il file hosts utilizzando l'editor di testo leafpad
  • Riavviare il sistema digitando il comando reboot da terminale;
    Kali Linux, reboot del sistema
    FIG 7 - Kali Linux, reboot del sistema




Assegnare un hostname casuale ad ogni avvio del sistema

Per fare in modo che ad ogni avvio venga assegnato un nome casuale al nostro host è necessario creare uno script nella cartella /usr/bin/ e richiamarlo ad ogni avvio di sistema.

  • Creare un file vuoto nella cartella /usr/bin/ nominandolo rndhostname.sh digitando da terminale il seguente comando
    touch /usr/bin/rndhostname.sh
  • Aprire il file appena creato tramite l'editor di testo leafpad con il comando
    leafpad /usr/bin/rndhostname.sh

    Kali Linux, creazione file vuoto e avvio dell'editor leafpad
    FIG 8 - Kali Linux, creazione file vuoto e avvio dell'editor leafpad
  • Incollare il seguente script all'interno dell'editor quindi chiudere l'editor dopo aver salvato il file
    #!/bin/bash
    cp -n /etc/hosts{,.old}
    idomainname=$(domainname -i)
    fdomainname=$(domainname -f)
    newhn=$(cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c7)
    echo $newhn > /etc/hostname
    mv /etc/hosts /etc/hosts.old
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "$idomainname  $fdomainname    $newhn" >> /etc/hosts
    echo "# The following lines are desirable for IPv6 capable hosts" >> /etc/hosts
    echo "::1     localhost ip6-localhost ip6-loopback" >> /etc/hosts
    echo "ff02::1 ip6-allnodes" >> /etc/hosts
    echo "ff02::2 ip6-allrouters" >> /etc/hosts
    service hostname.sh stop
    sleep 1
    service hostname.sh start
    service networking stop
    sleep 1
    service networking start
    service network-manager stop
    sleep 1
    service network-manager start
    xhost +$newhn
    exit
    

    Lo script assegna un nome randomico composto da 7 caratteri alfanumerici (tr -dc 'A-Za-z0-9' | head -c7). Modificando opportunamente la seguente riga all'interno del codice
    newhn=$(cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c7)
    possiamo impostare una diversa lunghezza e scegliere un range diverso di caratteri da utilizzare nel nome host.
    Kali Linux, script per la generazione casuale e assegnazione del nome host
    FIG 9 - Kali Linux, script per la generazione casuale e assegnazione del nome host
  • Forniamo allo script i permessi di esecuzione con il comando
    chmod +x /usr/bin/rndhostname.sh

    Kali Linux, aggiungere i permessi di esecuzione al file
    FIG 10 - Kali Linux, aggiungere i permessi di esecuzione al file 
  • Per fare in modo che lo script venga eseguito ad ogni avvio utilizzeremo crontab. Da terminale eseguire il comando
    crontab -e
    Kali Linux, crontab
    FIG 11 - Kali Linux, crontab
  • Di default il file crontab verrà aperto con l'editor di testo nano. Posizionarsi alla fine del file e aggiungere la seguente riga
    @reboot /usr/bin/rndhostname.sh 
    Kali Linux, modifica crontab per l'avvio dello script ad ogni boot
    FIG 12 - Kali Linux, modifica crontab per l'avvio dello script ad ogni boot
  • Salvare la modifica (CTRL+O) e premere invio per accettare il nome del file proposto e che sovrascriverà il file cronotab, quindi uscire dall'editor nano tramite la combinazione di tasti CTRL+X. Da questo momento ad ogni avvio verrà generato e assegnato un nuovo hostname casuale.





giovedì 5 luglio 2018

PowerShell: Forzare l'esecuzione di uno script con privilegi elevati

Chi crea script PowerShell sa bene che alcune operazioni, per essere portate correttamente a termine, richiedono l'esecuzione con privilegi elevati. Purtroppo non c'è la possibilità di cliccare con il tasto destro del mouse sul file PS1 e selezionare "Esegui come amministratore" dal menu contestuale come avviene ad esempio con i file eseguibili. 
A questa mancanza è possibile sopperire aggiungendo allo script il seguente codice pubblicato sullo Script Center di Microsoft:

function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
     
    param([Switch]$Check) 
     
    $IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()` 
        ).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
         
    if ($Check) { return $IsAdmin }     
 
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file `"$($MyInvocation.ScriptName)`"" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction 'stop'  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break               
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else  
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 

La function, che va richiamata prima di eseguire altre operazioni, non fa altro che verificare se lo script è stato eseguito in una console con i permessi di amministratore e, in caso contrario, provvede autonomamente a rilanciarlo con i permessi elevati.
Se non è stato fatto il login con un utenza amministrativa verranno richieste le credenziali.
PowerShell, Esecuzione script con privilegi elevati
FIG 1 - PowerShell, Esecuzione script con privilegi elevati

Dal seguente link è possibile scaricare lo script di esempio
DOWNLOAD



lunedì 29 gennaio 2018

Windows 10: Personalizzare le impostazioni tramite uno script PowerShell

Windows 10 integra numerose funzioni/impostazioni molte delle quali nascoste e difficili da individuare. Chi ha la necessità di personalizzare spesso una nuova installazione di Windows 10, di Windows Server 2016 oppure intende applicare la stessa configurazione a più computer può trovare utile Windows 10 Initial Setup Script.
Una volta scaricato lo script Win10.ps1 è possibile aprirlo e modificarlo con un qualsiasi editor di testo, tuttavia è consigliabile utilizzare editor dotati di evidenziazione della sintassi come Notepad++, Sublime Text, Emacs , ecc.


Windows 10 Initial Setup Script, Editing del file Win10.ps1
FIG 1 - Windows 10 Initial Setup Script, Editing del file Win10.ps1

Si tratta di uno script PowerShell ben strutturato contenente un lungo elenco di impostazioni, organizzate a coppie, con effetto opposto: nella colonna di sinistra sono presenti i comandi che disabilitano una funzionalità di Windows mentre a destra ci sono i comandi opposti che permettono di riabilitare la funzione disattivata in precedenza (questi ultimi sono per default disabilitati in quanto preceduti dal simbolo # che trasforma in un commento tutto quello che segue sulla stessa riga).
I comandi che non sono commenti, ovvero che non presentano il simbolo # iniziale, verranno applicati a Windows all'esecuzione dello script. 
Lo script può essere avviato, utilizzando un account con privilegi elevati, semplicemente cliccando sul file Win10.ps1 con il tasto destro del mouse e selezionando Esegui con Powershell dal menu contestuale. 


Esegui con PowerShell
FIG 2 - Esegui con PowerShell

Lo script può essere lanciato anche da riga di comando permettendo di specificare le funzioni da eseguire.
Ad es. se si intende disabilitare la telemetria e abilitare il firewall di Windows 10 è possibile lanciare il seguente comando
powershell.exe -NoProfile -ExecutionPolicy Bypass -File Win10.ps1 DisableTelemetry EnableFirewall

In alternativa è possibile passare allo script un file di testo contenente l'elenco delle funzioni da eseguire
Ad es.
powershell.exe -NoProfile -ExecutionPolicy Bypass -File Win10.ps1 -preset preset.txt
Il contenuto del file preset.txt avrà un aspetto simile al seguente
#Privacy Settings
DisableTelemetry
DisableWebSearch

#Service Tweaks
EnableFirewall
DisableAutoplay

Al termine dell'esecuzione verrà richiesto di premere un tasto per procedere al riavvio del sistema.




lunedì 3 novembre 2014

VBS: Recuperare il product key di Windows tramite VBS


Esistono diversi tool di terze parti che permettono il recupero del product key del sistema operativo e di altre applicazioni, tra questi segnalo l'ottimo ProduKey della NirSoft (www.nirsoft.net) scaricabile gratuitamente ed eseguibile senza alcuna installazione.
In questo articolo verrà mostrato come recuperare il product key di Windows tramite uno script VBS.
Il Product Key di Windows è una sequenza di 25 caratteri (lettere e numeri) divisi in 5 gruppi da 5 caratteri ognuno. I caratteri utilizzati all'interno di un product key sono BCDFGHJKMPQRTVWXY2346789 mentre non vengono utilizzati i caratteri AEILNOSUZ015. Il product key è memorizzato all'interno del registro di sistema e codificato in un valore DWORD all'interno della chiave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId.
Nella decodifica del valore DWORD DigitalProductId bisogna fare attenzione alla versione di Windows infatti, a partire da Windows 8, il metodo di codifica del product key è cambiato.

Lo script che ho creato visualizza le informazioni relative al nome del prodotto, il Product ID e il Product Key permettendo, inoltre, di salvare le informazioni trovate all'interno di un file di testo (.txt).
Di seguito il sorgente dello script VBS


Option Explicit 

Dim strComputer, objWMIService, objItem, Caption, colItems
Dim ProductName,ProductID,ProductKey,ProductInfo, Version, Win8Version, WinOlderVersion
Win8Version = "6.2 6.3"
WinOlderVersion ="6.1 6.0 5.2 5.1 5.0"

'Di seguito i valori della stringa CurrentVersion presente all'interno della chiave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion che indica la versione di Windows
'Windows 8.1                 6.3
'Windows Server 2012 R2      6.3
'Windows 8                   6.2
'Windows Server 2012         6.2
'Windows 7                   6.1
'Windows Server 2008 R2      6.1
'Windows Server 2008         6.0
'Windows Vista               6.0
'Windows Server 2003 R2      5.2
'Windows Server 2003         5.2
'Windows XP 64-Bit Edition   5.2
'Windows XP                  5.1
'Windows 2000                5.0
'Crea oggetto wscript.shell
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
' in Caption memorizzo la Versione di Windows
For Each objItem in colItems
    Caption = objItem.Caption  
Next
 Dim objshell,path,DigitalID, Result 
 Set objshell = CreateObject("WScript.Shell")
 'Recupero le informazioni dalle chiavi di registro"
 DigitalID = objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")
 ProductName = "Product Name: " & objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
 ProductID = "Product ID: " & objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID")
 Version= objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
 
 If InStr(Win8Version,Version) Then
  'Windows 8 o Windows 8.1
  ProductKey = "Product Key: " & GetKeyWindows8(DigitalID) 
 Else
  If InStr(WinOlderVersion,Version) Then
     ' Windows 7 o antecedente
  ProductKey = "Product Key: " & GetKeyWindows7(DigitalID) 
  Else
     msgBox "Versione di Windows non supportata." & vblf &"Il presente Script è stato testato per versioni di Windows comprese tra Windows 2000 e Windows 8.1" , vbOKOnly+vbCritical, "Versione Windows non supportata"
  ProductKey ="Product Key: Non Rilevato"
     End If   
  
 End If
 
 ProductInfo = ProductName  & vbNewLine & ProductID  & vbNewLine & ProductKey
 'Mostra i dati e chiedi se si intende salvare in un file
 If vbYes = MsgBox(ProductInfo  & vblf & vblf & "Vuoi salvare le informazioni in un file?", vbYesNo + vbQuestion, "Windows Product Key") then
    Save ProductInfo
 End If


'Convert i valori binari della chiave "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId" in caratteri per Windows 8
Function GetKeyWindows8(Key)
    Const KeyOffset = 52
    Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
    'Check if OS is Windows 8
    isWin8 = (Key(66) \ 6) And 1
    Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    i = 24
    Maps = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Current= 0
        j = 14
        Do
           Current = Current* 256
           Current = Key(j + KeyOffset) + Current
           Key(j + KeyOffset) = (Current \ 24)
           Current=Current Mod 24
            j = j -1
        Loop While j >= 0
        i = i -1
        KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
        Last = Current
    Loop While i >= 0 
    keypart1 = Mid(KeyOutput, 2, Last)
    insert = "N"
    KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
    If Last = 0 Then KeyOutput = insert & KeyOutput
    GetKeyWindows8 = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
 
End Function
'Converte i valori binari della chiave "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId" in caratteri per Windows 7
Function GetKeyWindows7(ProductID)
    Const KeyOffset = 52
 Dim i, Cur, x, Maps
    i = 0
    Maps = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        x = 14
  i=i+1
        Do
            Cur = Cur * 256
            Cur = ProductID(x + KeyOffset) + Cur
            ProductID(x + KeyOffset) = (Cur \ 24) And 255
            Cur = Cur Mod 24
            x = x -1
        Loop While x >= 0
  if (i Mod 6) = 0 Then
   ProductKey = "-" & ProductKey
   i = i + 1
  End If  
  ProductKey = Mid(Maps, Cur + 1, 1) & ProductKey   
    Loop While i < 29
    GetKeyWindows7 = ProductKey
End Function

'Salva i dati in un file
Function Save(Data)
    Dim fso, fName, txt,objshell,UserName
    Set objshell = CreateObject("wscript.shell")
    'Crea un file di testo con nome WindowsKeyInfo.txt, nello stesso percorso del vbs, contenente le informazioni
    fName = "WindowsKeyInfo.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile(fName)
    txt.Writeline Data
    txt.Close
End Function

Per chi volesse scaricare il file VBS può utilizzare il link di seguito
DOWNLOAD