
PowerSploit - Un framework di post-exploitation per PowerShell
Esegui codice su una macchina target.
Invoke-DllInjectionInietta una DLL nel PID di processo a tua scelta.
Invoke-ReflectivePEInjectionCarica riflessivamente un file PE di Windows (DLL/EXE) nel processo di PowerShell o inietta riflessivamente una DLL in un processo remoto.
Invoke-ShellcodeInietta shellcode nel PID di processo a tua scelta o localmente all'interno di PowerShell.
Invoke-WmiCommandEsegue uno ScriptBlock di PowerShell su un computer target e restituisce il suo output formattato utilizzando WMI come canale C2.
Modifica e/o prepara gli script per l'esecuzione su una macchina compromessa.
Out-EncodedCommandComprime, codifica in Base-64 e genera output della riga di comando per un payload script di PowerShell.
Out-CompressedDllComprime, codifica in Base-64 e genera codice per caricare una DLL gestita in memoria.
Out-EncryptedScriptCripta file di testo/script.
Remove-CommentRimuove commenti e spazi bianchi extra da uno script.
Aggiungi capacità di persistenza a uno script PowerShell
New-UserPersistenceOptionConfigura le opzioni di persistenza a livello utente per la funzione Add-Persistence.
New-ElevatedPersistenceOptionConfigura le opzioni di persistenza con privilegi elevati per la funzione Add-Persistence.
Add-PersistenceAggiunge capacità di persistenza a uno script.
Install-SSPInstalla una DLL del Security Support Provider (SSP).
Get-SecurityPackagesEnumera tutti i pacchetti di sicurezza (SSP) caricati.
L'antivirus non ha scampo contro PowerShell!
Find-AVSignatureIndividua le singole firme AV di byte utilizzando lo stesso metodo di DSplit di "class101".
Tutti i tuoi dati sono miei!
Invoke-TokenManipulationElenca i token di accesso disponibili. Crea processi con token di accesso di altri utenti e impersona token di accesso nel thread corrente.
Invoke-CredentialInjectionCrea sessioni con credenziali in chiaro senza attivare il sospetto Event ID 4648 (Accesso con credenziali esplicite).
Invoke-NinjaCopyCopia un file da un volume partizionato NTFS leggendo il volume raw e analizzando le strutture NTFS.
Invoke-MimikatzCarica riflessivamente Mimikatz 2.0 in memoria utilizzando PowerShell. Può essere utilizzato per estrarre credenziali senza scrivere nulla su disco. Può essere utilizzato per qualsiasi funzionalità fornita da Mimikatz.
Get-KeystrokesRegistra i tasti premuti, l'ora e la finestra attiva.
Get-GPPPasswordRecupera la password in chiaro e altre informazioni per gli account distribuiti tramite Group Policy Preferences.
Get-GPPAutologonRecupera nome utente e password di autologon da registry.xml se distribuiti tramite Group Policy Preferences.
Get-TimedScreenshotUna funzione che acquisisce screenshot a intervalli regolari e li salva in una cartella.
New-VolumeShadowCopyCrea una nuova copia shadow del volume.
Get-VolumeShadowCopyElenca i percorsi dei dispositivi di tutte le copie shadow locali del volume.
Mount-VolumeShadowCopyMonta una copia shadow del volume.
Remove-VolumeShadowCopyElimina una copia shadow del volume.
Get-VaultCredentialMostra gli oggetti delle credenziali del Vault di Windows, comprese le credenziali web in chiaro.
Out-MinidumpGenera un minidump completo della memoria di un processo.
Get-MicrophoneAudioRegistra l'audio dal microfono di sistema e lo salva su disco.
Causa caos generale con PowerShell.
Set-MasterBootRecordCodice proof-of-concept che sovrascrive il Master Boot Record con il messaggio a tua scelta.
Set-CriticalProcessProvoca il blue screen della macchina all'uscita da PowerShell.
Strumenti per aiutare con l'elevazione dei privilegi su un target.
PowerUpRaccolta di controlli comuni per l'elevazione dei privilegi, insieme ad alcuni vettori di weaponization.
Strumenti per aiutare nella fase di ricognizione di un penetration test.
Invoke-PortscanEsegue una semplice scansione delle porte utilizzando socket regolari, basata (abbastanza) liberamente su nmap.
Restituisce i codici di stato HTTP e l'URL completo per i percorsi specificati quando viene fornito un file dizionario.
Scansiona un intervallo di indirizzi IP per i record PTR DNS.
PowerViewPowerView è una serie di funzioni che esegue l'enumerazione e lo sfruttamento della rete e del dominio Windows.
Una raccolta di dizionari utilizzati per aiutare nella fase di ricognizione di un penetration test. I dizionari sono stati presi dalle seguenti fonti.
Il progetto PowerSploit e tutti gli script individuali sono sotto licenza BSD 3-Clause salvo diversa indicazione esplicita.
Fai riferimento alla guida basata sui commenti in ogni singolo script per informazioni dettagliate sull'utilizzo.
Per installare questo modulo, sposta l'intera cartella PowerSploit in una delle tue directory dei moduli. I percorsi predefiniti dei moduli PowerShell sono elencati nella variabile d'ambiente $Env:PSModulePath.
Il percorso predefinito per utente è: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules"
Il percorso predefinito a livello di computer è: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Per utilizzare il modulo, digita Import-Module PowerSploit
Per vedere i comandi importati, digita Get-Command -Module PowerSploit
Se stai usando PowerShell v3 e vuoi rimuovere il fastidioso avviso 'Do you really want to run scripts downloaded from the Internet', una volta posizionato PowerSploit nel tuo percorso dei moduli, esegui il seguente one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Per aiuto su ogni singolo comando, Get-Help è tuo amico.
Nota: Gli strumenti contenuti in questo modulo sono stati tutti progettati in modo da poter essere eseguiti singolarmente. Includerli in un modulo favorisce semplicemente una maggiore portabilità.
Abbiamo bisogno di contributi! Se hai un'ottima idea per PowerSploit, ci piacerebbe aggiungerla. Le nuove aggiunte richiederanno quanto segue:
Per tutti i contributori e futuri contributori di PowerSploit, ti chiedo di seguire questa guida di stile quando scrivi i tuoi script/moduli.
Evita Write-Host a tutti i costi. Le funzioni/cmdlet di PowerShell non sono utilità da riga di comando! Le pull request contenenti codice che utilizza Write-Host non verranno prese in considerazione. Dovresti invece restituire oggetti personalizzati. Per ulteriori informazioni sulla creazione di oggetti personalizzati, leggi questi articoli:
Se vuoi visualizzare informazioni di debug rilevanti sullo schermo, usa Write-Verbose. L'utente può sempre aggiungere '-Verbose'.
Fornisci sempre un aiuto commentato descrittivo per ogni script. Inoltre, assicurati di includere il tuo nome e una licenza BSD 3-Clause (a meno che non ci siano circostanze eccezionali che impediscano l'applicazione della licenza BSD).
Assicurati che tutte le funzioni seguano il corretto accordo verbo-sostantivo di PowerShell. Usa Get-Verb per elencare i verbi predefiniti usati da PowerShell. Le eccezioni ai verbi supportati saranno valutate caso per caso.
Preferisco che i nomi delle variabili siano in maiuscolo e il più descrittivi possibile.
Fornisci spaziatura logica nel tuo codice. Indenta il codice per renderlo più leggibile.
Se ti ritrovi a ripetere codice, scrivi una funzione.
Cattura tutti gli errori previsti e fornisci output significativo. Se hai un errore che dovrebbe interrompere l'esecuzione dello script, usa 'Throw'. Se hai un errore che non necessita di interrompere l'esecuzione, usa Write-Error.
Se stai scrivendo uno script che interagisce con l'API Win32, cerca di evitare di compilare C# inline con Add-Type. Prova a usare il modulo PSReflect, se possibile.
Non utilizzare percorsi hardcoded. Uno script dovrebbe essere utilizzabile immediatamente. Nessuno dovrebbe dover modificare il codice a meno che non lo desideri.
La compatibilità con PowerShell v2 è fortemente desiderata.
Usa parametri posizionali e rendi i parametri obbligatori quando ha senso farlo. Ad esempio, cerco qualcosa come:
[Parameter(Position = 0, Mandatory = $True)]Non utilizzare alias a meno che non abbia senso per ricevere input da pipeline. Rendono il codice più difficile da leggere per le persone che non hanno familiarità con un particolare alias.
Cerca di non lasciare che i comandi si estendano troppo. Ad esempio, una pipeline è un posto naturale per un'interruzione di riga.
Non esagerare con i commenti inline. Usali solo quando alcuni aspetti del codice potrebbero confondere il lettore.
Piuttosto che usare Out-Null per sopprimere output indesiderati/irrilevanti, salva l'output indesiderato in $null. In questo modo si ottiene un leggero miglioramento delle prestazioni.
Usa valori predefiniti per i tuoi parametri quando ha senso. Idealmente, vuoi uno script che funzioni senza richiedere alcun parametro.
Se uno script crea oggetti personalizzati complessi, includi un file ps1xml che formatti correttamente l'output dell'oggetto.