
シングルスレッドのコマンドラインアプリケーションを、CIDR と glob 対応の高速なマルチスレッドアプリケーションに簡単に変換できます。
単一スレッドのコマンドラインアプリケーションを、CIDRやグロブ対応の高速なマルチスレッドアプリケーションに簡単に変換します。
Interlace: コードを一切書かずにペネトレーションテストやバグバウンティのワークフローを自動化・マルチスレッド化するツール
以下のコマンドでインストール:
$ python3 setup.py install
依存関係がインストールされ、Interlace が interlace として PATH に追加されます。
| 引数 | 説明 |
|---|---|
| (stdin) | 他のアプリケーションからターゲットリストをカンマ区切り形式、CIDR表記、または個別ホストとしてパイプで渡す |
| -t | ターゲットまたはドメイン名をカンマ区切り形式、CIDR表記、または個別ホストとして指定 |
| -tL | ターゲットまたはドメイン名のリストを指定 |
| -e | 除外するターゲットのリストをカンマ区切り形式、CIDR表記、または個別ホストとして指定 |
| -eL | 除外するターゲットのリストを指定 |
| -threads | 同時に実行する最大スレッド数を指定 (デフォルト:5) |
| -timeout | 各スレッドのタイムアウト値(秒)を指定 (デフォルト:600) |
| -c | 各ターゲットまたはドメインに対して実行する単一のコマンドを指定 |
| -cL | 各ターゲットまたはドメインに対して実行するコマンドのリストを指定 |
| -o | コマンド内で _output_ として使用できる出力フォルダ変数を指定 |
| -p | コマンド内で _port_ として使用できるポート変数のリストを指定。単一ポート、カンマ区切りリスト、ダッシュ表記の範囲が使用可能 |
| -pL | プロキシのリストを指定 |
| --proto | コマンド内で _proto_ として使用できるプロトコルを指定 |
| -rp | コマンド内で _realport_ として使用できる実際のポート変数を指定 |
| -random | コマンド内で _random_ としてランダムに使用されるファイルのディレクトリを指定 |
| --no-bar / --sober | 設定するとプログレスバーが表示されなくなります |
| --no-cidr | 設定するとターゲットファイル内のCIDR表記が自動的に個別ホストに展開されなくなります |
| --no-color | 設定すると前景色や背景色がすべて除去されます |
| --silent | 設定すると重要な情報のみが表示され、バナーなどの情報は伏せられます |
| -v | 設定すると端末に詳細な出力が表示されます |
| 例 | 表記の種類 |
|---|---|
| 80 | 単一ポート |
| 1-80 | ダッシュ表記、1から80までの各ポートに対してコマンド実行 |
| 80,443 | ポート80とポート443の両方に対してコマンド実行 |
-t と -tL はどちらも同じように処理されます。nmap を使用するときと同じようにターゲットを渡すことができます。CIDR表記、ダッシュ表記、またはカンマ区切りのターゲットリストが使用可能です。1つのターゲットリストファイル内で、行ごとに異なる表記タイプを使用することもできます。
あるいは、STDIN 経由でターゲットを渡すこともでき、その場合は -t や -tL は不要です。
実行時に以下の変数がコマンド内で置き換えられます:
| 変数 | 置き換え内容 |
|---|---|
| _target_ | 現在のスレッドが実行中の、展開されたターゲットリストで置き換えられる |
| _cleantarget_ | http:// または https:// が除去されたターゲットに置き換えられる |
| _safe-target_ | コマンドから自動的に引用符で囲まれ、サブコマンドの実行を防ぐターゲットに置き換えられる |
| _host_ | _target_ と同じ動作をし、互換的に使用可能 |
| _output_ | Interlace の出力フォルダ変数で置き換えられる |
| _port_ | Interlace の展開済みポート変数で置き換えられる |
| _realport_ | Interlace の実際のポート変数で置き換えられる |
| _proxy_ | Interlace のプロキシリストで置き換えられる |
| _random_ | Interlace からランダムに選択されたファイルで置き換えられる |
Interlace はコマンドファイル内の実行フローを制御するための2つの追加機能も提供します: _blocker_ と _block:<name>_。ブロッカーは、その前にリストされたすべてのコマンドが完了するまで、その後にリストされたコマンドの実行を防ぎます。ブロックは、ブロック内にリストされたコマンドをターゲットに対して順次実行するために使用できます。
これらはターゲットごとに実行されます。利用可能なスレッドがあり、現在のターゲットに対してブロッカーが邪魔をしている場合、Interlace は効率を最大化するためにターゲットリスト内の次のターゲットからコマンドを開始します。
これらの機能を使用することで、個々のターゲットに対する実行フローをより直接的に制御し、コマンドが順番通りに実行されない事態を防ぐことができます。
ブロッカーは、その上のすべてのコマンドが完了するまで、その下の何も実行しないようにします(現在アクティブなホストに対して)。例えば、以下の場合:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
ここでブロッカーを使用することで、ベースフォルダ構造が作成される前に nmap がターゲット上で実行されるのを防ぎ、nmap が例外をスローするのを防ぎます。
ブロックはその内部のすべてを順次実行させます。コマンドファイルごとに複数のブロックを使用することもできます。例えば、以下の場合:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
この例では、ブロックは以前と同じように実行されますが、スレッド数が十分に高い場合、nikto は即座に実行を開始し、結果を端末に返します(その間、nmap とファイル作成はバックグラウンドで行われます)。
targets.txt というファイルに以下の内容があると仮定します:
bugcrowd.com
hackerone.com
Interlace を使用して、このファイル内の任意の数のターゲットに対して以下のように実行できます: bash
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v
=========================================================================
Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com > ./bugcrowd.com-nikto.txt] Added to Queue
これにより、各ホストに対して Nikto が実行され、各ターゲット用のファイルに保存されます。上記の例では > 演算子を使用しているため、結果は端末にフィードバックされません。しかし、これは意図された機能であり、そうしないと Nikto の結果がどのターゲットのものかを特定できなくなります。
フィードバックが必要なアプリケーションの場合は、コマンドを通常通りに渡すか(tee を使用)してください。
上記の例を使用して、同じターゲットに対してポート 80 と 443 の両方で個別のスキャンを実行したいとします。その場合は以下のようにします: