
PowerSploit - A PowerShell Post-Exploitation Framework
PowerView.ps1 に、私が普段手動で行っているいくつかの機能を追加するためにフォークしました。
ターゲットマシン上でコードを実行します。
Invoke-DllInjection任意のプロセス ID に DLL を注入します。
Invoke-ReflectivePEInjectionWindows PE ファイル (DLL/EXE) を PowerShell プロセスにリフレクティブにロードするか、リモートプロセスに DLL をリフレクティブに注入します。
Invoke-Shellcode任意のプロセス ID、またはローカルの PowerShell 内にシェルコードを注入します。
Invoke-WmiCommand対象コンピュータ上で PowerShell ScriptBlock を実行し、WMI を C2 チャネルとして使用して、その整形された出力を返します。
侵害されたマシン上で実行するために、スクリプトを変更または準備します。
Out-EncodedCommandPowerShell ペイロードスクリプトを圧縮し、Base-64 エンコードして、コマンドライン出力を生成します。
Out-CompressedDllマネージド DLL をメモリにロードするための生成コードを圧縮し、Base-64 エンコードして出力します。
Out-EncryptedScriptテキストファイル/スクリプトを暗号化します。
Remove-Commentスクリプトからコメントと余分な空白を削除します。
PowerShell スクリプトに永続化機能を追加します
New-UserPersistenceOptionAdd-Persistence 関数のユーザーレベルの永続化オプションを構成します。
New-ElevatedPersistenceOptionAdd-Persistence 関数の昇格された永続化オプションを構成します。
Add-Persistenceスクリプトに永続化機能を追加します。
Install-SSPセキュリティサポートプロバイダー (SSP) DLL をインストールします。
Get-SecurityPackages読み込まれているすべてのセキュリティパッケージ (SSP) を列挙します。
PowerShell の前では AV も無力です!
Find-AVSignature"class101" の DSplit と同じ方法を利用して、1 バイトの AV シグネチャを特定します。
あなたのデータはすべて私のもの!
Invoke-TokenManipulation利用可能なログオントークンを一覧表示します。他のユーザーのログオントークンを使用してプロセスを作成し、現在のスレッドでログオントークンを偽装します。
Invoke-CredentialInjection疑わしいイベント ID 4648 (明示的な資格情報ログオン) をトリガーせずに、平文の資格情報を使用してログオンを作成します。
Invoke-NinjaCopyNTFS でパーティション分割されたボリュームから、生のボリュームを読み取って NTFS 構造を解析することでファイルをコピーします。
Invoke-MimikatzPowerShell を使用して Mimikatz 2.0 をメモリ内にリフレクティブにロードします。ディスクに何も書き込まずに資格情報をダンプするために使用できます。Mimikatz が提供するあらゆる機能に使用できます。
Get-Keystrokes押されたキー、時刻、アクティブウィンドウを記録します。
Get-GPPPasswordグループポリシー基本設定 (Group Policy Preferences) を通じて配布されたアカウントの平文パスワードとその他の情報を取得します。
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 フォルダー全体をいずれかのモジュールディレクトリに配置します。既定の 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 の適切な動詞-名詞の規則に従っていることを確認してください。PowerShell で使用される既定の動詞を一覧表示するには、Get-Verb を使用します。サポート対象の動詞の例外は、ケースバイケースで検討されます。
変数名は大文字で始め、可能な限り説明的な名前にすることを好みます。
コードの間に論理的な空白を入れてください。読みやすくするためにコードをインデントしてください。
コードの繰り返しが多いと感じたら、関数を書いてください。
予想されるすべてのエラーをキャッチし、意味のある出力を提供してください。スクリプトの実行を停止すべきエラーの場合は 'Throw' を使用してください。実行を停止する必要のないエラーの場合は Write-Error を使用してください。
Win32 API と連携するスクリプトを作成する場合は、Add-Type を使用した C# のインラインコンパイルを避けるようにしてください。可能であれば PSReflect モジュールを使用してください。
ハードコードされたパスを使用しないでください。スクリプトはすぐにそのまま使用できるものであるべきです。誰も、望まない限りコードを変更する必要はありません。
PowerShell v2 との互換性が強く望まれます。
位置指定パラメータを使用し、意味がある場合はパラメータを必須にしてください。たとえば、次のようなものを想定しています:
[Parameter(Position = 0, Mandatory = $True)]パイプライン入力を受け取る場合など、意味がある場合を除き、エイリアスを使用しないでください。エイリアスは、特定のエイリアスに慣れていない人にとってコードを読みにくくします。
コマンドが長くなりすぎないようにしてください。たとえば、パイプラインは改行に適した場所です。
インラインコメントを多用しすぎないでください。コードの特定の側面が読者を混乱させる可能性がある場合にのみ使用してください。
不要/無関係な出力を抑制するために Out-Null を使用するのではなく、不要な出力を $null に保存してください。そうすることで、わずかにパフォーマンスが向上します。
意味がある場合は、パラメータに既定値を使用してください。理想的には、パラメータを一切必要とせずに動作するスクリプトが望ましいです。
スクリプトが複雑なカスタムオブジェクトを作成する場合は、オブジェクトの出力を適切にフォーマットする ps1xml ファイルを含めてください。