tags: Comandi_Powershell Windows powershell


Trovare file

 
Get-ChildItem -Path C:\ -Recurse -Filter "interesting-file.txt" -ErrorAction SilentlyContinue
 
 
#Con Wildcard
 
Get-ChildItem -Path C:\ -Recurse -Filter "*interesting*" -ErrorAction SilentlyContinue
 
#Nel caso la flag Filter non dovesse funzionare usa:
 
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq "interesting-file.txt" }
 

Trovare file che contengono la parola “API KEY”:

Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue | Select-String "API_KEY"

Codificare e Decodificare file in Base64

 
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\percorso\interesting-file.txt"))
 
#Se il file è lungo e vuoi salvare l'output direttamente in un nuovo file (es. `encoded.b64`) per evitare di intasare la console:
 
$B64 = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("interesting-file.txt")) $B64 | Out-File "encoded.b64"
 
#Anche se non propriamente un comando PowerShell Certuil è comunque un comando nativo di Windows:
 
certutil -encode interesting-file.txt output.b64
 
#Per decodificare puoi usare questo:
 
$Encoded = Get-Content "encoded.b64"
[System.IO.File]::WriteAllBytes("file-ripristinato.txt", [System.Convert]::FromBase64String($Encoded))
 

Enumerazione Utenti e Gruppi

Utenti

 
#Comando semplice:
 
Get-LocalUser
 
#Comando che fornisce più informazioni ed è compatibile con tutti i sistemi, pure quelli vecchi:
 
Get-WmiObject -Class Win32_UserAccount
 

Gruppi

Get-WmiObject -Class Win32_Group

Ottenere informazioni sull’IP

 
Get-NetIPConfiguration  
 
gip         #E l'alias per il comando soprastante
 
#Oppure un comando che fornisce informazioni più dettagliate:
 
Get-NetIPAddress
 

Listare le porte in ascolto

 
Get-NetTCPConnection
 
#Per vedere solo quelle in ascolto 
 
Get-NetTCPConnection -State Listen
 
#script "one-liner" molto utile che combina questo comando con `Get-Process` per dirti direttamente il **nome del programma** su ogni porta in ascolto:
 
Get-NetTCPConnection -State Listen | Select-Object LocalPort, OwningProcess, @{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}}
 
#Per listare le porte UDP usa gli stessi comandi, ma con oggetto diverso:
 
Get-NetUDPEndpoint
 

Listare le Patch sul sistema

 
Get-HotFix
 
#Nel caso non dovesse funzionare usa:
 
Get-CimInstance -ClassName Win32_QuickFixEngineering
 

Esempio pratico: Se vuoi verificare se il sistema è vulnerabile a un exploit famoso (es. vuoi sapere se è stata applicata la patch per una specifica vulnerabilità del kernel), puoi cercare un ID specifico:

Get-HotFix -Id KB1234567

Listare tutti i processi:

Get-Process

Vedere il proprietario di una cartella

Get-ACL C:

Script Equivalente ad un Nmap (Basico):

$Target = "127.0.0.1"  # Sostituisci con l'IP target
$Ports = 1..1024       # Range di porte (es. da 1 a 1024)
 
foreach ($Port in $Ports) {
    $Socket = New-Object System.Net.Sockets.TcpClient
    try {
        # Tenta la connessione. Se fallisce, va nel blocco 'catch'
        $Connect = $Socket.BeginConnect($Target, $Port, $null, $null)
        # Imposta un timeout di 100ms per renderlo veloce (puoi aumentarlo)
        $Wait = $Connect.AsyncWaitHandle.WaitOne(100, $false)
 
        if ($Socket.Connected) {
            Write-Host "Porta $Port APERTA" -ForegroundColor Green
            $Socket.Close()
        }
    } catch {
        # Silenzia gli errori per le porte chiuse
    }
}