Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/llamasoft/polyshell
ペイロード生成スクリプトと自動化ペネトレーションテストレッドチーミングペイロード開発
GitHubllamasoft/polyshell

polyshell

Bash/Batch/PowerShellのポリグロット!

リポジトリを見る
22520133年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

PolyShell: Bash/Batch/PowerShell のポリグロット

概要

PolyShell は Bash、Windows Batch、PowerShell で同時に動作するスクリプトです(つまりポリグロット)。

これにより PolyShell はペネトレーションテストにおいて有用なテンプレートとなります。ほとんどのシステムでターゲット固有のペイロードを必要とせず実行できるからです。また、PolyShell は USB Rubber Ducky、MalDuino、または類似のデバイスを使用した入力インジェクションによる配信に特化して設計されています。

バッチデモ PowerShell デモ Unix シェルデモ

使用方法

スタンドアロンスクリプトとして

  1. スクリプトをコピー・リネームして正しいファイル拡張子(.sh、.bat、.ps1)にします。
  2. Unix シェル、バッチファイル、または PowerShell でスクリプトを実行します。

入力インジェクションを使用する

  1. ターゲットマシンでターミナルを開きます。
  2. ペイロードを実行します。
  3. Ctrl-C を押し、exit を実行します。

入力インジェクションの方法はスクリプトの方法とは若干動作が異なります。スクリプトとして実行すると、ペイロードは言語が処理された直後に終了します。インジェクションで配信すると、代わりに読み取りループが実行されます。これがないと、ペイロードはターミナルウィンドウを閉じるものの、代わりに不明なウィンドウに対して入力を続けてしまいます。Ctrl-C でスクリプトを読み取りループから抜け出させ、意図しない副作用を防ぎます。

また、スクリプトをターミナルに 貼り付け ても失敗する可能性があります。読み取りループに達した後、一部のターミナルは残りの貼り付けテキストを読み取りループの入力として扱います(良好)が、他のターミナルでは読み取りループ終了後もスクリプトを実行し続けることがあります(不良)。

動作原理

主なトリックは、いずれか一つの言語に固有のコードを実行したいときに、他の言語を「見ないふり」させることにあります。これは、引用符、リダイレクト、コメントに関する言語の癖を利用することで実現します。次の行を考えてみてください。

echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"

各言語は echo コマンドを認識しますが、行の残りの部分を異なる方法で解釈します。
例えば、各言語が文字列として解釈する部分は次のようになります。

      echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
Bash                                      [-----]     [---]
Batch       [-----------------------------]     [-]   [---]
PS          [-----------------------------]     [-]

この行を実行した後、Bash スクリプトは ヒアドキュメント、PowerShell スクリプトは 複数行コメント に入り、バッチスクリプトは通常通り実行を続けます。各言語の実行が終了したら、それを終了させます。これにより、後半のスクリプトでその言語の癖に対応する必要がなくなります。

注意点

明らかに、このポリグロットを作るために必要なトリックは 通常の コーディング規則に従っていません。
活用された、または回避しなければならなかった癖はかなり多くあります。

  • 3つの言語はすべて異なるエスケープ文字を持っています。
    • Bash:バックスラッシュ(\)
    • Batch:キャレット(^)
    • PowerShell:バックティック(`)
  • エスケープ文字は Bash および PowerShell の文字列内では機能しますが、バッチの文字列内では機能しません。
  • リダイレクト(すなわち < と >)は引用符で囲まれていない限り、3つの言語すべてで特別な意味を持ちます。
  • リダイレクトはコマンドの末尾に置く必要はありません。
    • これは有効な Bash/Batch/PowerShell です:echo >output.txt "Hello World"。
  • バッチだけが複数行の文字列やコメントを持たない言語です。
  • バッチは > を、文字列に直接接していてもリダイレクトとして扱いますが、PowerShell は扱いません。
  • バッチスクリプトの GOTO 文は、スクリプトとして実行された場合にのみ機能し、対話的に実行された場合は機能しません。
  • PowerShell の複数行コメント(<#)は、直前に空白がなければなりません。
  • Bash のヒアドキュメントは、引用符で囲まれておらずコメントでなければ、どこでも 開始できます。
ツールをダウンロード