
PowerSploit - A PowerShell Post-Exploitation Framework
Code auf einem Zielcomputer ausführen.
Invoke-DllInjectionInjiziert eine DLL in die Prozess-ID Ihrer Wahl.
Invoke-ReflectivePEInjectionLädt eine Windows-PE-Datei (DLL/EXE) reflektiv in den PowerShell-Prozess oder injiziert reflektiv eine DLL in einen entfernten Prozess.
Invoke-ShellcodeInjiziert Shellcode in die Prozess-ID Ihrer Wahl oder lokal in PowerShell.
Invoke-WmiCommandFührt einen PowerShell-ScriptBlock auf einem Zielcomputer aus und gibt dessen formatierte Ausgabe über WMI als C2-Kanal zurück.
Skripte zur Ausführung auf einem kompromittierten Computer ändern und/oder vorbereiten.
Out-EncodedCommandKomprimiert, kodiert Base-64 und generiert Befehlszeilenausgabe für ein PowerShell-Payload-Skript.
Out-CompressedDllKomprimiert, kodiert Base-64 und gibt generierten Code aus, um eine verwaltete DLL im Speicher zu laden.
Out-EncryptedScriptVerschlüsselt Textdateien/Skripte.
Remove-CommentEntfernt Kommentare und überflüssige Leerzeichen aus einem Skript.
Persistenzfähigkeiten zu einem PowerShell-Skript hinzufügen.
New-UserPersistenceOptionKonfiguriert Benutzerpersistenzoptionen für die Add-Persistence-Funktion.
New-ElevatedPersistenceOptionKonfiguriert erhöhte Persistenzoptionen für die Add-Persistence-Funktion.
Add-PersistenceFügt einem Skript Persistenzfähigkeiten hinzu.
Install-SSPInstalliert eine DLL eines Security Support Providers (SSP).
Get-SecurityPackagesListet alle geladenen Sicherheitspakete (SSPs) auf.
AV hat gegen PowerShell keine Chance!
Find-AVSignatureFindet einzelne Byte-AV-Signaturen mit der gleichen Methode wie DSplit aus 'class101'.
Alle Ihre Daten gehören mir!
Invoke-TokenManipulationListet verfügbare Anmeldetoken auf. Erstellt Prozesse mit Anmeldetoken anderer Benutzer und imitiert Anmeldetoken im aktuellen Thread.
Invoke-CredentialInjectionErstellt Anmeldungen mit Klartext-Anmeldeinformationen, ohne ein verdächtiges Ereignis-ID 4648 (Explizite Anmeldeinformationen) auszulösen.
Invoke-NinjaCopyKopiert eine Datei von einem NTFS-partitionierten Volume, indem das rohe Volume gelesen und die NTFS-Strukturen analysiert werden.
Invoke-MimikatzLädt Mimikatz 2.0 reflektiv in den Speicher mittels PowerShell. Kann verwendet werden, um Anmeldeinformationen zu dumpen, ohne etwas auf die Festplatte zu schreiben. Kann für jede mit Mimikatz bereitgestellte Funktionalität verwendet werden.
Get-KeystrokesProtokolliert gedrückte Tasten, Zeit und das aktive Fenster.
Get-GPPPasswordRuft das Klartext-Passwort und andere Informationen für Konten ab, die über Gruppenrichtlinienpräferenzen (Group Policy Preferences) verteilt wurden.
Get-GPPAutologonRuft Benutzername und Passwort für die automatische Anmeldung aus registry.xml ab, wenn über Gruppenrichtlinienpräferenzen verteilt.
Get-TimedScreenshotEine Funktion, die in regelmäßigen Abständen Screenshots erstellt und in einem Ordner speichert.
New-VolumeShadowCopyErstellt eine neue Volumeschattenkopie.
Get-VolumeShadowCopyListet die Gerätepfade aller lokalen Volumeschattenkopien auf.
Mount-VolumeShadowCopyMountet eine Volumeschattenkopie.
Remove-VolumeShadowCopyLöscht eine Volumeschattenkopie.
Get-VaultCredentialZeigt Windows-Vault-Anmeldeinformationsobjekte an, einschließlich Klartext-Webanmeldeinformationen.
Out-MinidumpErstellt einen vollständigen Speicher-Minidump eines Prozesses.
Get-MicrophoneAudioZeichnet Audio vom Systemmikrofon auf und speichert es auf der Festplatte.
Mit PowerShell allgemeines Chaos verursachen.
Set-MasterBootRecordProof-of-Concept-Code, der den Master Boot Record mit einer Nachricht Ihrer Wahl überschreibt.
Set-CriticalProcessVerursacht einen Bluescreen Ihres Computers beim Beenden von PowerShell.
Werkzeuge zur Unterstützung bei der Privilegieneskalation auf einem Ziel.
PowerUpZentrale Sammlung gängiger Privilegieneskalationsprüfungen, zusammen mit einigen Weaponization-Vektoren.
Werkzeuge zur Unterstützung in der Aufklärungsphase eines Penetrationstests.
Invoke-PortscanFührt einen einfachen Portscan mit regulären Sockets durch, lose basierend auf nmap.
Get-HttpStatusGibt die HTTP-Statuscodes und die vollständige URL für angegebene Pfade zurück, wenn eine Wörterbuchdatei bereitgestellt wird.
Invoke-ReverseDnsLookupScannt einen IP-Adressbereich nach DNS-PTR-Einträgen.
PowerViewPowerView ist eine Reihe von Funktionen, die Netzwerk- und Windows-Domänen-Enumeration und -Ausnutzung durchführen.
Eine Sammlung von Wörterbüchern, die in der Aufklärungsphase eines Penetrationstests verwendet werden. Die Wörterbücher stammen aus den folgenden Quellen.
Das PowerSploit-Projekt und alle einzelnen Skripte stehen unter der BSD-3-Klausel-Lizenz, sofern nicht ausdrücklich anders angegeben.
Siehe die kommentarbasierte Hilfe in jedem einzelnen Skript für detaillierte Verwendungsinformationen.
Um dieses Modul zu installieren, legen Sie den gesamten PowerSploit-Ordner in eines Ihrer Modulverzeichnisse. Die standardmäßigen PowerShell-Modulpfade sind in der Umgebungsvariablen $Env:PSModulePath aufgelistet.
Der standardmäßige benutzerspezifische Modulpfad ist: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Der standardmäßige computerweite Modulpfad ist: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Um das Modul zu verwenden, geben Sie Import-Module PowerSploit ein
Um die importierten Befehle anzuzeigen, geben Sie Get-Command -Module PowerSploit ein
Wenn Sie PowerShell v3 ausführen und die lästige Warnung 'Möchten Sie wirklich Skripte ausführen, die aus dem Internet heruntergeladen wurden' entfernen möchten, führen Sie nach dem Platzieren von PowerSploit in Ihrem Modulpfad den folgenden Einzeiler aus:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Für Hilfe zu jedem einzelnen Befehl ist Get-Help Ihr Freund.
Hinweis: Die in diesem Modul enthaltenen Werkzeuge wurden alle so konzipiert, dass sie einzeln ausgeführt werden können. Die Aufnahme in ein Modul dient lediglich der erhöhten Portabilität.
Wir brauchen Beiträge! Wenn Sie eine großartige Idee für PowerSploit haben, würden wir sie gerne hinzufügen. Neue Ergänzungen erfordern Folgendes:
Für alle Beitragenden und zukünftigen Beitragenden zu PowerSploit bitte ich Sie, diesen Style Guide beim Schreiben Ihrer Skripte/Module zu befolgen.
Vermeiden Sie Write-Host um jeden Preis. PowerShell-Funktionen/Cmdlets sind keine Befehlszeilenprogramme! Pull-Requests, die Code mit Write-Host enthalten, werden nicht berücksichtigt. Stattdessen sollten Sie benutzerdefinierte Objekte ausgeben. Weitere Informationen zum Erstellen benutzerdefinierter Objekte finden Sie in diesen Artikeln:
Wenn Sie relevante Debugging-Informationen auf dem Bildschirm anzeigen möchten, verwenden Sie Write-Verbose. Der Benutzer kann einfach '-Verbose' anhängen.
Stellen Sie immer eine beschreibende, kommentarbasierte Hilfe für jedes Skript bereit. Stellen Sie außerdem sicher, dass Sie Ihren Namen und eine BSD-3-Klausel-Lizenz angeben (es sei denn, es liegen mildernde Umstände vor, die die Anwendung der BSD-Lizenz verhindern).
Stellen Sie sicher, dass alle Funktionen der korrekten PowerShell-Verb-Nomen-Vereinbarung folgen. Verwenden Sie Get-Verb, um die von PowerShell verwendeten Standardverben aufzulisten. Ausnahmen von unterstützten Verben werden von Fall zu Fall betrachtet.
Ich bevorzuge, dass Variablennamen großgeschrieben und so beschreibend wie möglich sind.
Sorgen Sie für logische Abstände zwischen Ihrem Code. Rücken Sie Ihren Code ein, um ihn lesbarer zu machen.
Wenn Sie feststellen, dass Sie Code wiederholen, schreiben Sie eine Funktion.
Fangen Sie alle vorhersehbaren Fehler ab und geben Sie sinnvolle Ausgaben. Wenn Sie einen Fehler haben, der die Ausführung des Skripts stoppen sollte, verwenden Sie 'Throw'. Wenn Sie einen Fehler haben, der die Ausführung nicht stoppen muss, verwenden Sie Write-Error.
Wenn Sie ein Skript schreiben, das mit der Win32-API interagiert, versuchen Sie, die Inline-Kompilierung von C# mit Add-Type zu vermeiden. Versuchen Sie, wenn möglich, das PSReflect-Modul zu verwenden.
Verwenden Sie keine festcodierten Pfade. Ein Skript sollte sofort einsatzbereit sein. Niemand sollte den Code ändern müssen, es sei denn, er möchte es.
PowerShell v2-Kompatibilität ist sehr erwünscht.
Verwenden Sie Positionsparameter und machen Sie Parameter erforderlich, wenn es sinnvoll ist. Zum Beispiel suche ich etwas wie das Folgende:
[Parameter(Position = 0, Mandatory = $True)]Verwenden Sie keine Aliase, es sei denn, es ist sinnvoll für den Empfang von Pipeline-Eingaben. Sie erschweren das Lesen des Codes für Personen, die mit einem bestimmten Alias nicht vertraut sind.
Versuchen Sie, Befehle nicht zu lang laufen zu lassen. Zum Beispiel ist eine Pipeline ein natürlicher Ort für einen Zeilenumbruch.
Übertreiben Sie es nicht mit Inline-Kommentaren. Verwenden Sie sie nur, wenn bestimmte Aspekte des Codes für einen Leser verwirrend sein könnten.
Anstatt Out-Null zu verwenden, um unerwünschte/irrelevante Ausgaben zu unterdrücken, speichern Sie die unerwünschte Ausgabe in $null. Dies bietet eine geringfügige Leistungsverbesserung.
Verwenden Sie Standardwerte für Ihre Parameter, wenn es sinnvoll ist. Idealerweise möchten Sie ein Skript, das ohne Parameter funktioniert.
Wenn ein Skript komplexe benutzerdefinierte Objekte erstellt, fügen Sie eine ps1xml-Datei hinzu, die die Ausgabe des Objekts ordnungsgemäß formatiert.