
PowerSploit - A PowerShell Post-Exploitation Framework
Fork creato per aggiungere alcune funzionalità a PowerView.ps1 che eseguo comunemente manualmente
Esegue codice su una macchina target.
Invoke-DllInjectionInietta una DLL nel process ID che scegli.
Invoke-ReflectivePEInjectionCarica in modalità riflessiva un file PE Windows (DLL/EXE) nel processo di PowerShell, oppure inietta in modalità riflessiva una DLL in un processo remoto.
Invoke-ShellcodeInietta shellcode nel process ID che scegli oppure localmente all'interno di PowerShell.
Invoke-WmiCommandEsegue uno ScriptBlock di PowerShell su un computer target e restituisce il relativo output formattato utilizzando WMI come canale C2.
Modifica e/o prepara script per l'esecuzione su una macchina compromessa.
Out-EncodedCommandComprime, codifica in Base-64 e genera output da riga di comando per uno script payload di PowerShell.
Out-CompressedDllComprime, codifica in Base-64 e produce codice generato per caricare una DLL gestita in memoria.
Out-EncryptedScriptCripta file di testo/script.
Remove-CommentRimuove i commenti e gli spazi bianchi extra da uno script.
Aggiunge 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 elevata per la funzione Add-Persistence.
Add-PersistenceAggiunge capacità di persistenza a uno script.
Install-SSPInstalla una DLL del provider di supporto per la sicurezza (SSP).
Get-SecurityPackagesEnumera tutti i pacchetti di sicurezza caricati (SSP).
L'AV non ha alcuna possibilità contro PowerShell!
Find-AVSignatureIndividua le firme AV a byte singolo utilizzando lo stesso metodo di DSplit di "class101".
Tutti i tuoi dati appartengono a me!
Invoke-TokenManipulationElenca i token di accesso disponibili. Crea processi con i token di accesso di altri utenti e impersona i token di accesso nel thread corrente.
Invoke-CredentialInjectionCrea accessi con credenziali in chiaro senza innescare un sospetto Event ID 4648 (Accesso con credenziali esplicite).
Invoke-NinjaCopyCopia un file da un volume partizionato NTFS leggendo il volume grezzo e analizzando le strutture NTFS.
Invoke-MimikatzCarica in modalità riflessiva Mimikatz 2.0 in memoria utilizzando PowerShell. Può essere utilizzato per eseguire il dump delle 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 propagati tramite le Preferenze dei Criteri di gruppo.
Get-GPPAutologonRecupera nome utente e password di autologon da registry.xml se distribuiti tramite le Preferenze dei Criteri di gruppo.
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 dei volumi locali.
Mount-VolumeShadowCopyMonta una copia shadow del volume.
Remove-VolumeShadowCopyElimina una copia shadow del volume.
Get-VaultCredentialMostra gli oggetti credenziali del vault di Windows, incluse le credenziali web in chiaro.
Out-MinidumpGenera un minidump della memoria completa di un processo.
Get-MicrophoneAudioRegistra l'audio dal microfono di sistema e lo salva su disco
Causa scompiglio generale con PowerShell.
Set-MasterBootRecordCodice proof of concept che sovrascrive il master boot record con il messaggio di tua scelta.
Set-CriticalProcessCausa il blue screen della tua macchina all'uscita da PowerShell.
Strumenti per aiutare con l'escalation dei privilegi su un target.
PowerUpRaccolta di controlli comuni per l'escalation dei privilegi, insieme ad alcuni vettori di weaponizzazione.
Strumenti per supportare la fase di ricognizione di un penetration test.
Invoke-PortscanEsegue una semplice scansione delle porte usando socket normali, basata (abbastanza) liberamente su nmap.
Get-HttpStatusRestituisce i codici di stato HTTP e l'URL completo per i percorsi specificati quando viene fornito un file dizionario.
Invoke-ReverseDnsLookupScansiona un intervallo di indirizzi IP per i record DNS PTR.
PowerViewPowerView è una serie di funzioni che esegue enumerazione e sfruttamento di rete e domini Windows.
Una raccolta di dizionari utilizzata per supportare la fase di ricognizione di un penetration test. I dizionari sono stati presi dalle seguenti fonti.
Il progetto PowerSploit e tutti i singoli script sono sotto licenza BSD 3-Clause salvo diversa indicazione esplicita.
Fare riferimento alla guida basata sui commenti in ogni singolo script per informazioni dettagliate sull'utilizzo.
Per installare questo modulo, inserisci 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 del modulo per utente è: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Il percorso predefinito del modulo a livello di computer è: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Per usare il modulo, digitare Import-Module PowerSploit
Per vedere i comandi importati, digitare Get-Command -Module PowerSploit
Se utilizzi PowerShell v3 e vuoi rimuovere il fastidioso avviso 'Vuoi davvero eseguire script scaricati da Internet?', dopo aver inserito PowerSploit nel 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 è il tuo amico.
Nota: gli strumenti contenuti in questo modulo sono stati tutti progettati per poter essere eseguiti singolarmente. Includerli in un modulo serve semplicemente ad aumentarne la 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 i futuri contributori di PowerSploit, chiedo di seguire questa guida di stile quando scrivete i vostri script/moduli.
Evita Write-Host a tutti i costi. Le funzioni/cmdlet di PowerShell non sono utility da riga di comando! Le pull request contenenti codice che usa Write-Host non verranno prese in considerazione. Dovresti invece restituire oggetti personalizzati. Per maggiori informazioni sulla creazione di oggetti personalizzati, leggi questi articoli:
Se vuoi visualizzare informazioni di debug pertinenti sullo schermo, usa Write-Verbose. L'utente può sempre semplicemente aggiungere '-Verbose'.
Fornisci sempre una guida descrittiva basata sui commenti per ogni script. Inoltre, assicurati di includere il tuo nome e una licenza BSD 3-Clause (a meno che non ci siano circostanze attenuanti 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 tra il codice. Indenta il codice per renderlo più leggibile.
Se ti accorgi di ripetere codice, scrivi una funzione.
Gestisci tutti gli errori previsti e fornisci output significativi. Se hai un errore che dovrebbe fermare l'esecuzione dello script, usa 'Throw'. Se hai un errore che non deve fermare l'esecuzione, usa Write-Error.
Se stai scrivendo uno script che interfaccia con l'API Win32, cerca di evitare di compilare C# inline con Add-Type. Cerca di usare il modulo PSReflect, se possibile.
Non usare percorsi hardcoded. Uno script dovrebbe essere utilizzabile subito, senza modifiche. Nessuno dovrebbe dover modificare il codice a meno che non voglia.
La compatibilità con PowerShell v2 è molto desiderata.
Usa parametri posizionali e rendi i parametri obbligatori quando ha senso farlo. Ad esempio, cerco qualcosa come il seguente:
[Parameter(Position = 0, Mandatory = $True)]Non usare alias a meno che non abbia senso per ricevere input dalla pipeline. Rendono il codice più difficile da leggere per chi non ha familiarità con un particolare alias.
Cerca di non far andare troppo in lungo i comandi. Ad esempio, una pipeline è un punto naturale per un'interruzione di riga.
Non esagerare con i commenti inline. Usali solo quando alcuni aspetti del codice potrebbero creare confusione nel lettore.
Invece di 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.