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_GroupOttenere 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 KB1234567Listare tutti i processi:
Get-ProcessVedere 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
}
}