
PowerSploit - PowerShell ポストエクスプロイテーションフレームワーク
ターゲットマシン上でコードを実行します。
Invoke-DllInjectionDLLを指定したプロセスIDに注入します。
Invoke-ReflectivePEInjectionWindows PEファイル(DLL/EXE)をPowerShellプロセスにリフレクティブにロードするか、DLLをリモートプロセスにリフレクティブに注入します。
Invoke-Shellcodeシェルコードを指定したプロセスIDに注入するか、PowerShell内でローカルに注入します。
Invoke-WmiCommandターゲットコンピュータ上でPowerShell ScriptBlockを実行し、WMIをC2チャネルとして使用してフォーマットされた出力を返します。
スクリプトを修正・準備して、侵害されたマシン上で実行できるようにします。
Out-EncodedCommandPowerShellペイロードスクリプトを圧縮、Base64エンコードし、コマンドライン出力を生成します。
Out-CompressedDll圧縮、Base64エンコードし、マネージドDLLをメモリに読み込むためのコードを出力します。
Out-EncryptedScriptテキストファイルやスクリプトを暗号化します。
Remove-Commentスクリプトからコメントや余分な空白を削除します。
PowerShellスクリプトに永続化機能を追加します。
New-UserPersistenceOptionAdd-Persistence関数のユーザーレベルの永続化オプションを構成します。
New-ElevatedPersistenceOptionAdd-Persistence関数の昇格済み永続化オプションを構成します。
Add-Persistenceスクリプトに永続化機能を追加します。
Install-SSPセキュリティサポートプロバイダ(SSP)DLLをインストールします。
Get-SecurityPackagesロードされているすべてのセキュリティパッケージ(SSP)を列挙します。
AVはPowerShellに敵いません!
Find-AVSignature「class101」のDSplitと同じ方法を使用して、単一バイトのAVシグネチャを特定します。
あなたのデータはすべて私のものです!
Invoke-TokenManipulation利用可能なログオントークンを一覧表示します。他のユーザーのログオントークンを使用してプロセスを作成し、現在のスレッドでログオントークンを偽装します。
Invoke-CredentialInjectionクリアテキストの資格情報でログオンを作成し、疑わしいイベントID 4648(明示的な資格情報ログオン)をトリガーしません。
Invoke-NinjaCopyNTFSパーティション上のボリュームを生で読み取り、NTFS構造を解析してファイルをコピーします。
Invoke-MimikatzPowerShellを使用してMimikatz 2.0をメモリにリフレクティブにロードします。ディスクに何も書き込まずに資格情報をダンプするために使用できます。Mimikatzが提供するすべての機能に使用できます。
Get-Keystrokes押されたキー、時刻、アクティブウィンドウを記録します。
Get-GPPPasswordグループポリシー基本設定を通じてプッシュされたアカウントのプレーンテキストパスワードやその他の情報を取得します。
Get-GPPAutologonグループポリシー基本設定を通じてプッシュされた場合、registry.xmlから自動ログオンのユーザー名とパスワードを取得します。
Get-TimedScreenshot定期的にスクリーンショットを撮り、フォルダに保存する関数です。
New-VolumeShadowCopy新しいボリュームシャドウコピーを作成します。
Get-VolumeShadowCopyすべてのローカルボリュームシャドウコピーのデバイスパスを一覧表示します。
Mount-VolumeShadowCopyボリュームシャドウコピーをマウントします。
Remove-VolumeShadowCopyボリュームシャドウコピーを削除します。
Get-VaultCredentialクリアテキストのWeb資格情報を含むWindows Vault資格情報オブジェクトを表示します。
Out-Minidumpプロセスのフルメモリミニダンプを生成します。
Get-MicrophoneAudioシステムマイクからオーディオを録音し、ディスクに保存します。
PowerShellで一般的な混乱を引き起こします。
Set-MasterBootRecordマスターブートレコードを任意のメッセージで上書きする概念実証コードです。
Set-CriticalProcessPowerShellを終了するとマシンをブルースクリーンにします。
ターゲット上での権限昇格を支援するツール。
PowerUp一般的な特権昇格のチェックと、いくつかの武器化ベクトルをまとめたものです。
ペネトレーションテストの偵察段階を支援するツール。
Invoke-Portscan通常のソケットを使用して、nmapに(かなり)大まかに基づいたシンプルなポートスキャンを行います。
Get-HttpStatus辞書ファイルが提供された場合、指定されたパスに対するHTTPステータスコードと完全なURLを返します。
Invoke-ReverseDnsLookupIPアドレス範囲をスキャンしてDNS PTRレコードを探します。
PowerViewPowerViewは、ネットワークおよびWindowsドメインの列挙と悪用を実行する一連の関数です。
ペネトレーションテストの偵察段階を支援するために使用される辞書のコレクション。辞書は以下のソースから取得されました。
PowerSploitプロジェクトおよびすべての個別のスクリプトは、特に明記されていない限り、BSD 3-Clauseライセンスの下にあります。
各スクリプトのコメントベースのヘルプを参照して、詳細な使用方法を確認してください。
このモジュールをインストールするには、PowerSploitフォルダ全体をモジュールディレクトリの1つに配置します。デフォルトのPowerShellモジュールパスは、$Env:PSModulePath環境変数にリストされています。
デフォルトのユーザー単位のモジュールパスは:"$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules"
デフォルトのコンピュータレベルのモジュールパスは:"$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
モジュールを使用するには、Import-Module PowerSploitと入力します。
インポートされたコマンドを確認するには、Get-Command -Module PowerSploitと入力します。
PowerShell v3を実行していて、インターネットからダウンロードしたスクリプトを実行してもよいかという厄介な警告を削除したい場合は、PowerSploitをモジュールパスに配置した後、次のワンライナーを実行します:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
各コマンドのヘルプについては、Get-Helpが便利です。
注意:このモジュールに含まれるツールはすべて個別に実行できるように設計されています。モジュールに含めることで、移植性が向上します。
コントリビューションを募集しています!PowerSploitに素晴らしいアイデアがあれば、ぜひ追加したいです。新しい追加には以下が必要です:
PowerSploitへのすべてのコントリビューターおよび将来のコントリビューターへ、スクリプト/モジュールを作成する際はこのスタイルガイドに従ってください。
Write-Hostは絶対に避けてください。PowerShell関数/コマンドレットはコマンドラインユーティリティではありません!Write-Hostを使用するコードを含むプルリクエストは考慮されません。代わりにカスタムオブジェクトを出力する必要があります。カスタムオブジェクトの作成方法の詳細については、以下の記事を読んでください:
関連するデバッグ情報を画面に表示したい場合は、Write-Verboseを使用してください。ユーザーはいつでも -Verbose を追加できます。
すべてのスクリプトに説明的なコメントベースのヘルプを常に提供してください。また、あなたの名前とBSD 3-Clauseライセンスを含めるようにしてください(BSDライセンスの適用を妨げる特別な状況がない限り)。
すべての関数が適切なPowerShellの動詞-名詞の規則に従っていることを確認してください。Get-Verbを使用して、PowerShellで使用されるデフォルトの動詞を一覧表示します。サポートされている動詞の例外は、ケースバイケースで検討されます。
変数名は大文字にし、できるだけ説明的にすることを推奨します。
コードの間に論理的なスペースを入れてください。コードをインデントして読みやすくしてください。
コードを繰り返している場合は、関数を作成してください。
予想されるすべてのエラーをキャッチし、意味のある出力を提供してください。スクリプトの実行を停止すべきエラーがある場合は、'Throw'を使用してください。実行を停止する必要のないエラーがある場合は、Write-Errorを使用してください。
Win32 APIとインターフェースするスクリプトを作成する場合、Add-TypeでC#をインラインでコンパイルしないようにしてください。可能であればPSReflectモジュールを使用してください。
ハードコードされたパスは使用しないでください。スクリプトはすぐに使えるようにすべきです。コードを変更する必要があるのは、ユーザーが望む場合のみです。
PowerShell v2との互換性が強く望まれます。
位置パラメータを使用し、意味がある場合はパラメータを必須にしてください。例えば、以下のようなものが望ましいです:
[Parameter(Position = 0, Mandatory = $True)]パイプライン入力を受け取る場合を除き、エイリアスは使用しないでください。特定のエイリアスに慣れていない人にとって、コードが読みにくくなります。
コマンドが長くなりすぎないようにしてください。例えば、パイプラインは改行に適した場所です。
インラインコメントを使いすぎないでください。コードの特定の側面が読者にとって混乱を招く可能性がある場合にのみ使用してください。
不要な/無関係な出力を抑制するためにOut-Nullを使用する代わりに、不要な出力を$nullに保存してください。これによりわずかなパフォーマンス向上が得られます。
意味がある場合は、パラメータにデフォルト値を使用してください。理想的には、パラメータを必要とせずに動作するスクリプトを目指してください。
スクリプトが複雑なカスタムオブジェクトを作成する場合は、オブジェクトの出力を適切にフォーマットするps1xmlファイルを含めてください。