
PowerSploit - A PowerShell Post-Exploitation Framework
Geforkt, um PowerView.ps1 ein paar Funktionen hinzuzufügen, die ich häufig manuell ausführe
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 eine DLL reflektiv in einen entfernten Prozess.
Invoke-ShellcodeInjiziert Shellcode in die Prozess-ID Ihrer Wahl oder lokal innerhalb von PowerShell.
Invoke-WmiCommandFührt einen PowerShell-ScriptBlock auf einem Zielcomputer aus und gibt dessen formatierte Ausgabe über WMI als C2-Kanal zurück.
Skripte für die Ausführung auf einem kompromittierten Computer ändern und/oder vorbereiten.
Out-EncodedCommandKomprimiert, base-64-kodiert und erzeugt Befehlszeilenausgabe für ein PowerShell-Payload-Skript.
Out-CompressedDllKomprimiert, base-64-kodiert und gibt generierten Code aus, um eine verwaltete DLL in den Speicher zu laden.
Out-EncryptedScriptVerschlüsselt Textdateien/Skripte.
Remove-CommentEntfernt Kommentare und überflüssige Leerzeichen aus einem Skript.
Persistenzfunktionen zu einem PowerShell-Skript hinzufügen
New-UserPersistenceOptionKonfiguriert Persistenzoptionen auf Benutzerebene für die Add-Persistence-Funktion.
New-ElevatedPersistenceOptionKonfiguriert erhöhte Persistenzoptionen für die Add-Persistence-Funktion.
Add-PersistenceFügt einem Skript Persistenzfunktionen hinzu.
Install-SSPInstalliert eine DLL eines Security Support Providers (SSP).
Get-SecurityPackagesZählt alle geladenen Sicherheitspakete (SSPs) auf.
AV hat gegen PowerShell keine Chance!
Find-AVSignatureErmittelt einzelne Byte-AV-Signaturen mit derselben Methode wie DSplit aus "class101".
Alle Ihre Daten gehören mir!
Invoke-TokenManipulationListet verfügbare Anmeldetoken auf. Erstellt Prozesse mit Anmeldetoken anderer Benutzer und führt im aktuellen Thread einen Identitätswechsel mit Anmeldetoken durch.
Invoke-CredentialInjectionErstellt Anmeldungen mit Klartext-Anmeldedaten, ohne ein verdächtiges Ereignis mit der ID 4648 (Explizite Anmeldedaten-Anmeldung) 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 mithilfe von PowerShell reflektiv in den Speicher. Kann verwendet werden, um Anmeldedaten zu extrahieren, ohne etwas auf die Festplatte zu schreiben. Kann für jede Funktion verwendet werden, die Mimikatz bereitstellt.
Get-KeystrokesProtokolliert gedrückte Tasten, Uhrzeit und das aktive Fenster.
Get-GPPPasswordRuft das Klartext-Passwort und andere Informationen für Konten ab, die über Gruppenrichtlinien-Einstellungen (Group Policy Preferences) verteilt wurden.
Get-GPPAutologonRuft Benutzername und Passwort der automatischen Anmeldung (Autologon) aus registry.xml ab, sofern diese über Gruppenrichtlinien-Einstellungen verteilt wurden.
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-Webanmeldedaten.
Out-MinidumpErzeugt einen Minidump des vollständigen Speichers eines Prozesses.
Get-MicrophoneAudioNimmt Audio über das Systemmikrofon auf und speichert es auf der Festplatte.
Mit PowerShell allgemeines Chaos anrichten.
Set-MasterBootRecordProof-of-Concept-Code, der den Master Boot Record mit der von Ihnen gewählten Nachricht überschreibt.
Set-CriticalProcessLässt Ihren Computer beim Beenden von PowerShell einen Blue Screen anzeigen.
Werkzeuge zur Unterstützung bei der Rechteausweitung auf einem Ziel.
PowerUpZentrale Anlaufstelle für übliche Prüfungen zur Rechteausweitung sowie einige Weaponization-Vektoren.
Werkzeuge zur Unterstützung der Aufklärungsphase eines Penetrationstests.
Invoke-PortscanFührt einen einfachen Portscan mit regulären Sockets durch, der (ziemlich) lose auf nmap basiert.
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ührt.
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-Clause-Lizenz, sofern nicht ausdrücklich etwas anderes angegeben ist.
Für detaillierte Informationen zur Verwendung lesen Sie die kommentarbasierte Hilfe in jedem einzelnen Skript.
Um dieses Modul zu installieren, legen Sie den gesamten PowerSploit-Ordner in eines Ihrer Modulverzeichnisse. Die standardmäßigen PowerShell-Modulpfade sind in der Umgebungsvariable $Env:PSModulePath aufgelistet.
Der standardmäßige Modulpfad pro Benutzer lautet: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Der standardmäßige Modulpfad auf Computerebene lautet: "$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 den folgenden Einzeiler aus, nachdem Sie PowerSploit in Ihren Modulpfad gelegt haben:
$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 aufnehmen. Neue Ergänzungen erfordern Folgendes:
An alle Mitwirkenden und zukünftige Mitwirkende von PowerSploit: Ich bitte Sie, diesen Styleguide zu befolgen, wenn Sie Ihre Skripte/Module schreiben.
Vermeiden Sie Write-Host um jeden Preis. PowerShell-Funktionen/-Cmdlets sind keine Kommandozeilenprogramme! Pull Requests mit Code, der Write-Host verwendet, werden nicht berücksichtigt. Sie sollten stattdessen benutzerdefinierte Objekte ausgeben. Weitere Informationen zum Erstellen benutzerdefinierter Objekte finden Sie in diesen Artikeln:
Wenn Sie relevante Debug-Informationen auf dem Bildschirm anzeigen möchten, verwenden Sie Write-Verbose. Der Benutzer kann einfach '-Verbose' anhängen.
Stellen Sie für jedes Skript stets eine beschreibende, kommentarbasierte Hilfe bereit. Stellen Sie außerdem sicher, dass Sie Ihren Namen und eine BSD-3-Clause-Lizenz angeben (sofern keine mildernden Umstände vorliegen, die die Anwendung der BSD-Lizenz verhindern).
Stellen Sie sicher, dass alle Funktionen der korrekten PowerShell-Verb-Substantiv-Konvention folgen. Verwenden Sie Get-Verb, um die von PowerShell verwendeten Standardverben aufzulisten. Ausnahmen von den unterstützten Verben werden von Fall zu Fall geprüft.
Ich bevorzuge, dass Variablennamen großgeschrieben und so beschreibend wie möglich sind.
Sorgen Sie für logische Abstände in Ihrem Code. Rücken Sie Ihren Code ein, um die Lesbarkeit zu verbessern.
Wenn Sie feststellen, dass Sie Code wiederholen, schreiben Sie eine Funktion.
Fangen Sie alle vorhersehbaren Fehler ab und geben Sie aussagekräftige Ausgaben aus. Wenn Sie einen Fehler haben, der die Ausführung des Skripts stoppen soll, 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, vermeiden Sie es, C# inline mit Add-Type zu kompilieren. Verwenden Sie nach Möglichkeit das PSReflect-Modul.
Verwenden Sie keine hartcodierten Pfade. Ein Skript sollte sofort einsatzbereit sein. Niemand sollte den Code ändern müssen, außer er möchte es.
PowerShell-v2-Kompatibilität ist sehr erwünscht.
Verwenden Sie positionelle Parameter und machen Sie Parameter verpflichtend, wenn es sinnvoll ist. Zum Beispiel suche ich nach Folgendem:
[Parameter(Position = 0, Mandatory = $True)]Verwenden Sie keine Aliase, es sei denn, es ist für den Empfang von Pipeline-Eingaben sinnvoll. Sie erschweren das Lesen des Codes für Personen, die mit einem bestimmten Alias nicht vertraut sind.
Versuchen Sie, Befehle nicht zu lang werden zu lassen. Eine Pipeline ist beispielsweise 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 den Leser verwirrend sein könnten.
Anstatt Out-Null zum Unterdrücken unerwünschter/irrelevanter Ausgaben zu verwenden, speichern Sie die unerwünschte Ausgabe in $null. Das bietet eine leichte Leistungsverbesserung.
Verwenden Sie Standardwerte für Ihre Parameter, wenn es sinnvoll ist. Idealerweise möchten Sie ein Skript, das ohne Angabe von Parametern funktioniert.
Wenn ein Skript komplexe benutzerdefinierte Objekte erstellt, fügen Sie eine ps1xml-Datei bei, die die Ausgabe des Objekts ordnungsgemäß formatiert.