
静的拡張子、不要なキーワード、ID、言語バリアント、パラメータを除去することで大規模なURLリストをフィルタリング・重複排除し、Web偵察用のクリーンなエンドポイントセットを生成します。
これはURLリストを整理(de-clutter)するためのツールです。 出発点として、Somdev Sangwan氏の素晴らしいツール uro をベースにしました。ただし、いくつかの点を変更し、改善(GUIDへの対応など)を加え、よりカスタマイズ可能にしたいと考えました。
urless は Python 3 をサポートしています。
urless をデフォルト(グローバル)のPython環境にインストールします。
pip install urless
または
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
アップグレードするには:
pip install --upgrade urless
pipx を使用した、分離されたPython環境でのクイックセットアップ
pipx install git+https://github.com/xnl-h4ck3r/urless.git
基本的に、URLのリスト(ファイルから、またはSTDINからのパイプ)を渡すと、整理されたファイルまたはURLリストが出力されます。では、どのように整理されるのでしょうか? 以下で説明しますが、その前に使用される用語をいくつか紹介します:
-fe で渡すか、config.yml の FILTER_EXTENSIONS で指定するか、またはそのどちらも存在しない場合にデフォルトのリスト .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image を指します。-fk で渡すか、config.yml の FILTER_KEYWORDS で指定するか、またはそのどちらも存在しない場合にデフォルトのリスト blog,article,news,bootstrap,jquery,captcha,node_modules を指します。config.yml の LANGUAGE で指定できる言語コードのリストを指します。存在しない場合は、最も一般的なコードのデフォルトリスト en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko が使われます。処理内容は以下の通りです:
-dp/--disregard-params 引数が渡された場合:
REMOVE_PARAMS(または -rp/--remove-params 引数で上書きされたもの)で指定された不要なパラメータが含まれる場合、処理前にすべてのURLから削除されます。-rcid/--regex-custom-id が渡され、URLパスにカスタムIDが含まれる場合、カスタムID正規表現に一致するものが1つだけ含まれます(そのIDだけが異なる複数のURLがある場合)。-lang 引数が渡され、URLに言語コード(例: en-gb)が含まれる場合、言語コードだけが異なる複数のURLがあるとき、言語コードの1つだけが含まれます。#)があり かつ / 引数が渡されていない場合:
cat target_urls.txt | urless
または
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
または
urless -i target_urls.txt -o output.txt
config.yml ファイルには、必要に応じて更新できるキーがあります:
FILTER_KEYWORDS - 特定の状況でURLがチェックされるキーワードのカンマ区切りリスト(例: blog,article,news など)。FILTER_EXTENSIONS - すべてのURLがチェックされるファイル拡張子のカンマ区切りリスト(例: .css,.jpg,.jpeg など)。URLがこれらの文字列のいずれかを含む場合、出力から除外されます。LANGUAGE - -lang 引数が渡されたときにすべてのURLがチェックされる言語コードのカンマ区切りリスト(例: en-gb,fr,nl など)。異なる言語コードを持つ複数のURLがある場合、URLの1つのバージョンのみが出力されます。REMOVE_PARAMS - 処理前にすべてのURLから削除される大文字小文字を区別するパラメータ名のカンマ区切りリスト(例: cachebuster,cacheBuster)。現在、パス部分がグローバル一意識別子(GUID)および整数IDであるかどうかの自動正規表現チェックがありますが、-rcid / --regex-custom-id 引数を使用すると、カスタムIDを識別するための正規表現を提供できます。例えば、ターゲットが特定のID形式(GUIDや整数ではない)を持っている場合、そのための正規表現を指定でき、URLの残りが同じであれば、出力にはそのうちの1つだけが返されます。例:
U-65241X のような形式のユーザーIDを持っているとします。https://target.com/blah/U-61723A/settings
https://target.com/blah/U-63352B/settings
https://target.com/blah/U-61351A/profile
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
urless を呼び出して -rcid 'U-[0-9]{5}[A-Z]' を渡すと、出力は次のようになります:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
重要な正規表現に関する注意事項:
-rcid 引数に渡すときは、常に正規表現をシングルクォートで囲んでください。[^(\?|\/|#|$)]* を追加すると、パス部分の末尾までの他のすべての文字が対象になります。^、末尾に $ を追加して、スラッシュ間のパスの部分全体を表すようにできます。ただし、これらを省略した場合は自動的に追加されます。cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' を実行し、式が正しいかどうかを確認できます(関心のある部分だけをハイライトし、カスタムIDであるパスの部分全体をハイライトする必要があります)。https://target.com/blah/xnl/settings のようなURLがあり、xnl がユーザー名である場合、ユーザー名用の正規表現を作成することはできません。他の可能なパス値と区別するために十分に一意な形式ではないためです。何か問題が発生した場合や改善のアイデアがある場合は、遠慮なくGithubでIssueを立ててください。問題がある場合は、実行した正確なコマンドと問題の詳細な説明を提供していただけると助かります。可能であれば、-v を付けて問題を再現し、表示されたエラーメッセージをお知らせください。
なし - 機能強化の提案があれば、遠慮なくGithubのIssueを立ててください。
幸運を、そして良いハンティングを! このツール(または他のツール)が本当に気に入った場合、または素晴らしいバウンティを見つけるのに役立った場合は、コーヒーをごちそうしてください! ☕(カフェインが必要なんです!)
🤘 /XNL-h4ck3r
| 引数 | 長い引数 | 説明 |
|---|
| -i | --input | 整理(de-clutter)するURLのリストを含むファイル。 |
| -o | --output | 整理されたURLリストを出力するファイル(デフォルト: output.txt)。別のプログラムにパイプした場合、出力は代わりにSTDOUTに書き込まれます。 |
| -fk | --filter-keywords | パラメータがない場合にリンクを除外するための、カンマ区切りのキーワードリスト。config.yml で指定された FILTER_KEYWORDS リストを上書きします。 |
| -fe | --filter-extensions | 除外するファイル拡張子のカンマ区切りリスト。config.yml で指定された FILTER_EXTENSIONS リストを上書きします。 |
| -rp | --remove-params | 大文字小文字を区別するパラメータのカンマ区切りリストで、すべてのURLから削除します。config.yml で指定された REMOVE_PARAMS リストを上書きします。例えば、キャッシュバスターのパラメータを削除するのに便利です。** |
| -ks | --keep-slash | 入力URLの末尾にある末尾スラッシュは削除されません。そのため、末尾スラッシュ付きと無しの同一URLが出力される可能性があります。 |
| -khw | --keep-human-written | デフォルトでは、パス部分に3つ以上のダッシュ(-)を含むURLは、人間が書いたコンテンツ(例: ブログ記事)と見なされ、興味深くないため削除されます。この引数を渡すと、それらは出力に保持されます。 |
| -kym | --keep-yyyymm | デフォルトでは、パスに /YYYY/MM(YYYYは年、MMは月)を含むURLは、ブログ/ニュースコンテンツと見なされ、興味深くないため削除されます。この引数を渡すと、それらは出力に保持されます。 |
| -rcid | --regex-custom-id | 注意して使用してください! ターゲットが使用するカスタムID用の正規表現。値は引用符で囲んで渡してください。詳細については下記のセクションを参照してください。 |
| -iq | --ignore-querystring | クエリ文字列(URLフラグメント # を含む)を削除し、出力をユニークなパスだけにします。 |
| -fnp | --fragment-not-param | URLフラグメント # をパラメータと同じように扱いません。例えば、リンクにフィルタキーワードとフラグメント(またはパラメータ)がある場合、通常はリンクが保持されますが、この引数が渡され、リンクにフィルタワードとフラグメントがある場合は、リンクは削除されます。また、この引数が渡され、-iq / --ignore-querystring が使用された場合、リンクにクエリ文字列がなければフラグメントは削除されません。 |
| -lang | --language | 渡されると、パスの一部として異なる言語コードを持つ複数のURLがある場合、URLの1つのバージョンのみが出力されます。コードは config.yml の LANGUAGE セクションで指定されます。 |
| -c | --config | YML設定ファイルへのパス。渡されない場合、デフォルトの設定ディレクトリ(例: ~/.config/urless/)で config.yml ファイルを探します。 |
| -dp | --disregard-params | URLにパラメータがある場合に行われない特定のフィルタリングがあります。デフォルトでは、すべての可能なパラメータを確認したいからです。この引数が渡されると、パラメータの有無に関係なくフィルタリングが行われます。 |
| -nb | --no-banner | ツールのバナー出力を非表示にします(urlessに入力をパイプする場合はデフォルトで非表示になります)。 |
| --version | 現在のバージョン番号を表示します。 | |
| -v | --verbose | 詳細(verbose)出力 |
-)を含むが、GUIDではない場合。これは人間が書いたコンテンツを示します(例: how-to-hack-the-planet)。-khw 引数が渡された場合、これは削除されません。/YYYY/MM/ が含まれる場合(例: 年、月)。これは通常、ブログなどの静的コンテンツです。-kym 引数が渡された場合、これは削除されません。-dp--disregard-params