このツールは、脆弱性の可能性がある、または他のテスターが見逃しがちな興味深い機能を明らかにする隠しパラメータの特定を支援します。高い精度は、ページの行ごとの比較、レスポンスコードの比較、およびリフレクションを通じて達成されます。
すべての機能を説明するドキュメントは https://sh1yo.art/x8docs/ で閲覧できます。ドキュメントのソースは /docs.md にあります。
admin=true のような非ランダム値を持つパラメータを発見可能。x8 -u "https://example.com/" -w <wordlist>
デフォルトパラメータを使用:
x8 -u "https://example.com/?something=1" -w <wordlist>
/?something=1 は /?something=1&%s と同等
x8 -u "https://example.com/" -X POST -w <wordlist>
またはカスタムボディ:
x8 -u "https://example.com/" -X POST -b '{"x":{%s}}' -w <wordlist>
%s は {"x":{"a":"b3a1a", "b":"ce03a", ...}} のように異なるパラメータに置き換えられます
x8 -u "https://example.com/" "https://4rt.one/" -W0
x8 -u "https://example.com/" --param-template "user[%k]=%v" -w <wordlist>
これで各リクエストは /?user[a]=hg2s4&user[b]=a34fa&... のようになります。
パラメータをエンコードする必要がある場合もあります。これも可能です:
x8 -u "https://example.com/?path=..%2faction.php%3f%s%23" --encode -w <wordlist>
GET /?path=..%2faction.php%3fWTDa8%3Da7UOS%26rTIDA%3DexMFp...%23 HTTP/1.1
Host: example.com
x8 -u "https://example.com" --headers -w <wordlist>
個別のヘッダーをターゲットにすることもできます:
x8 -u "https://example.com" --headers -H "Cookie: %s" -w <wordlist>
以下のURLでツールをチェックし、他のツールと比較できます:
https://4rt.one/level1 (GET)
https://4rt.one/level3 (GET)
USAGE:
x8 [FLAGS] [OPTIONS]
FLAGS:
--append 出力ファイルに追加(上書きではなく)
-B -x http://localhost:8080 と同等
--check-binary バイナリコンテンツタイプのレスポンスボディをチェック
--disable-additional-checks プライベート
--disable-colors
--disable-custom-parameters admin=true のようなパラメータを自動チェックしない
--disable-progress-bar
--disable-trustdns DNS関連の問題を解決できる場合があります
--encode リクエスト前にクエリまたはボディをエンコード(例: & → %26, = → %3D)
エンコードする文字: ", `, , <, >, &, #, ;, /, =, %
-L, --follow-redirects リダイレクトを追跡
--force 25MB以上のページでのパラメータ検索を強制。--one-worker-per-host オプションでワーカーが1つの場合のエラーを除去
-h, --help ヘルプ情報を表示
--headers ヘッダー発見モードに切り替え。
注: Content-Length および Host ヘッダーは自動的にリストから削除されます
--invert デフォルトでは、パラメータはPUTまたはPOSTメソッドの場合のみボディ内で送信されます。
この動作をオプション指定で上書き可能
--mimic-browser ブラウザが通常設定するデフォルトヘッダーを追加
--one-worker-per-host 同じホストの複数URLは順次チェックされ、異なるホストのURLは並行してチェックされます。
ワーカー数は増加しません
--reflected-only ページ比較を無効にし、リフレクションされたパラメータのみを検索
--remove-empty 見つかったパラメータがないurl:methodペアのファイルへの出力をスキップ
--replay-once リプレイプロキシが指定されている場合、見つかったすべてのパラメータを1つのリクエストで送信
--strict ページの異なる部分を変更したパラメータのみを報告
--test リクエストとレスポンスを表示
-V, --version バージョン情報を表示
--verify 見つかったパラメータを検証
OPTIONS:
-b, --body <body> 例: --body '{"x":{%s}}'
使用可能な変数: {{random}}
-c <concurrency> URLあたりの同時リクエスト数 [デフォルト: 1]
--custom-parameters <custom-parameters>
true/false yes/no などの非ランダム値を持つこれらのパラメータをチェック
(デフォルトは "admin bot captcha debug disable encryption env show sso test waf")
--custom-values <custom-values>
カスタムパラメータの値(デフォルトは "1 0 false off null true yes no")
-t, --data-type <data-type>
使用可能: urlencode, json
--body が指定されている場合、自動検出可能(デフォルトは "urlencode")
-d, --delay <リクエスト間の遅延(ミリ秒)> [デフォルト: 0]
-H <headers> 例: -H 'one:one' 'two:two'
--http <http> HTTPバージョン。サポート: --http 1.1, --http 2
-j, --joiner <joiner>
パラメータテンプレートの結合方法。例: --joiner '&'
デフォルト: urlencoded - '&', json - ', ', ヘッダー値 - '; '
--learn-requests <学習リクエスト数> 学習リクエストのカスタム数を設定 [デフォルト: 9]
-m, --max <max>
リクエストあたりの最大パラメータ数を変更
(デフォルトはクエリ: <=256, ヘッダー: 64, ボディ: 512)
-X, --method <メソッド> 複数値対応: -X GET POST
-o, --output <ファイル>
-O, --output-format <出力形式> standart, json, url, request [デフォルト: standart]
-P, --param-template <パラメータテンプレート>
%k - キー, %v - 値。例: --param-template 'user[%k]=%v'
デフォルト: urlencoded - <%k=%v>, json - <"%k":%v>, ヘッダー - <%k=%v>
-p, --port <ポート> リクエストファイルで使用するポート
--progress-bar-len <プログレスバー長> [デフォルト: 26]
--proto <プロトコル> リクエストファイルで使用するプロトコル(デフォルトは "https")
-x, --proxy <プロキシ>
--recursion-depth <再帰深度>
見つかったパラメータで同じパラメータリストを再帰的にチェックし、新しいパラメータが見つからなくなるまで続ける。
現在 --verify とは競合します
--replay-proxy <リプレイプロキシ>
最後に、見つかったすべてのパラメータを使用してリプレイプロキシ経由でターゲットにリクエスト
-r, --request <リクエスト> 生のHTTPリクエストファイル
--save-responses <保存先ディレクトリ>
パラメータが見つかった場合、リクエストとレスポンスをディレクトリに保存
--split-by <分割文字列>
指定されたシーケンスでリクエストを行に分割。デフォルトでは \r, \n, \r\n で分割
--timeout <タイムアウト> HTTPリクエストのタイムアウト(秒)[デフォルト: 15]
-u, --url <URL>
%s でカスタム注入ポイントを追加可能
複数のURLとファイル名をサポート:
-u filename.txt
-u https://url1 http://url2
-v, --verbose <詳細度> 詳細度 0/1/2 [デフォルト: 1]
-w, --wordlist <ワードリスト>
パラメータファイル(空の場合は標準入力から読み取り)[デフォルト: ]
-W, --workers <ワーカー数>
同時にチェックするURL数。
-W0 ですべてを並行実行 [デフォルト: 1]
パラメータ:
ヘッダー:
Burp Suite との連携は send to 拡張機能を介して行います。
エントリに名前を付け、次の行をコマンドに挿入します:
/path/to/x8 --progress-bar-len 20 -c 3 -r %R -w /path/to/wordlist --proto %T --port %P
よく使う引数(--output-format, --replay-proxy, --recursion-depth など)も追加できます。
注: プログレスバーが正しく動作しない場合は、--progress-bar-len の値を小さくしてみてください。
'Run in background' から 'Run in terminal' に切り替えます。

端末のフォントレンダリングに問題がある場合は、Send to Miscellaneous Options で xterm オプションを調整できます。既存の内容を xterm -rv -fa 'Monospace' -fs 10 -hold -e %C に置き換えるか、xterm を好みの端末エミュレーターに置き換えてください。
これで、プロキシ/リピータータブからツールにリクエストを送信できます:

次のダイアログで、コマンドを変更し、新しい端末ウィンドウで実行できます。

コマンド実行後、新しい端末ウィンドウが表示され、実行中のツールが表示されます。

注: v4.0.0 以降、cargo install によるインストールでは main ブランチではなく crate ブランチが使用されます。このブランチは、HTTP 正規化を実行し無効なリクエストの送信を防ぐオリジナルの reqwest ライブラリを含みます。これらの制限なしで修正版 reqwest を使用したい場合は、'Releases' ページからインストールするか、ソースからビルドすることをお勧めします。
Docker
git clone https://github.com/Sh1Yo/x8
cd x8
docker build -t x8 .
Linux
# pacman -Sy x8
git clone https://github.com/sh1yo/x8
cd x8
cargo build --release
# フルパスを指定しなくても使用できるよう、バイナリを $PATH に移動
cp ./target/release/x8 /usr/local/bin
# /usr/local/bin が存在しない場合
# sudo cp ./target/release/x8 /usr/bin
cargo install x8
Mac
git clone https://github.com/sh1yo/x8
cd x8
cargo build --release
# フルパスを指定しなくても使用できるよう、バイナリを $PATH に移動
cp ./target/release/x8 /usr/local/bin
cargo install x8
Windows