
Фильтруйте и дедуплицируйте большие списки URL, удаляя статические расширения, нежелательные ключевые слова, идентификаторы, языковые варианты и параметры, формируя чистые наборы конечных точек для веб-разведки.
Это инструмент для очистки списка URL. В качестве отправной точки я взял замечательный инструмент uro от Somdev Sangwan. Но я хотел изменить некоторые вещи, внести улучшения (например, работу с GUID) и сделать его более настраиваемым.
urless поддерживает Python 3.
Установите urless в стандартное (глобальное) окружение Python.
pip install urless
ИЛИ
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
Вы можете обновить с помощью
pip install --upgrade urless
Быстрая установка в изолированном Python-окружении с помощью pipx
pipx install git+https://github.com/xnl-h4ck3r/urless.git
Вы просто передаёте список URL (из файла или через конвейер из STDIN) и получаете очищенный файл или URL на выходе. Но каким образом они очищаются? Объясню это ниже, но сначала несколько терминов, которые будут использоваться:
-fe, указаны в FILTER_EXTENSIONS в config.yml, или, если ни того, ни другого нет, используется список по умолчанию: .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, указаны в FILTER_KEYWORDS в config.yml, или, если ни того, ни другого нет, используется список по умолчанию: blog,article,news,bootstrap,jquery,captcha,node_modulesLANGUAGE в config.yml, или, если его нет, используется список по умолчанию из наиболее распространённых кодов 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, будет включено только одно совпадение с regex пользовательского ID, если есть несколько URL, где это единственное различие.-lang и URL содержит языковой код (например, en-gb), будет включён только один из языковых кодов, если есть несколько URL, где языковой код различается.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 — список ключевых слов через запятую (например, blog,article,news и т.д.), с которыми сверяются URL в определённых случаях.FILTER_EXTENSIONS — список расширений файлов через запятую (например, .css,.jpg,.jpeg и т.д.), с которыми сверяются все URL. Если URL содержит любую из этих строк, он будет исключён из вывода.LANGUAGE — список языковых кодов через запятую (например, en-gb,fr,nl и т.д.), с которыми сверяются все URL при передаче аргумента -lang. Если есть несколько URL с разными языковыми кодами, будет выведена только одна версия URL.REMOVE_PARAMS — список чувствительных к регистру имён параметров через запятую (например, cachebuster,cacheBuster), которые будут удалены из всех URL перед обработкой.В настоящее время существуют автоматические проверки regex для части пути, являющейся глобально уникальным идентификатором (GUID) и целочисленным ID, но аргумент -rcid / --regex-custom-id позволяет указать регулярное выражение для определения пользовательского ID. Например, если у цели есть определённый формат ID (не GUID и не целое число), вы можете задать для него регулярное выражение, и тогда в выводе будет возвращён только один из них, если остальная часть URL совпадает. Например:
U-65241Xhttps://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
ВАЖНЫЕ ПРИМЕЧАНИЯ ПО REGEX:
-rcid.[^(\?|\/|#|$)]* в конец вашего regex, что будет означать ВСЕ остальные символы до конца части пути.^ в начало и $ в конец вашего regex, чтобы гарантировать, что оно представляет всю часть пути между слэшами. Однако они будут добавлены автоматически, если вы их пропустите.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]', и посмотреть, выглядит ли ваше выражение корректным (оно должно выделять только то, что вас интересует, и выделять всю часть пути, которая является пользовательским ID).https://target.com/blah/xnl/settings, где xnl — это имя пользователя, вы не сможете создать regex для имени пользователя, потому что это недостаточно уникальный формат, чтобы отличить его от других возможных значений пути.Если вы столкнулись с какими-либо проблемами или у вас есть идеи по улучшению, пожалуйста, не стесняйтесь создавать issue на Github. Если есть проблема, будет полезно указать точную команду, которую вы запускали, и подробное описание проблемы. Если возможно, запустите с -v, чтобы воспроизвести проблему, и сообщите мне о любых сообщениях об ошибках.
Нет — не стесняйтесь создавать issue на Github, чтобы предложить улучшения.
Удачи и успешной охоты! Если вам действительно нравится этот инструмент (или любые другие), или они помогли вам найти отличный баунти, подумайте о том, чтобы КУПИТЬ МНЕ КОФЕ! ☕ (Мне не помешает кофеин!)
🤘 /XNL-h4ck3r
| Аргумент | Длинный аргумент | Описание |
|---|
| -i | --input | Файл с URL-адресами для очистки. |
| -o | --output | Выходной файл, который будет содержать очищенный список URL (по умолчанию: output.txt). Если вывод передаётся в другую программу, результат будет записан в STDOUT. |
| -fk | --filter-keywords | Список ключевых слов через запятую для исключения ссылок (если параметров нет). Это переопределит список FILTER_KEYWORDS, указанный в config.yml |
| -fe | --filter-extensions | Список расширений файлов через запятую для исключения. Это переопределит список FILTER_EXTENSIONS, указанный в config.yml |
| -rp | --remove-params | Список чувствительных к регистру параметров через запятую для удаления из ВСЕХ URL. Это переопределит список REMOVE_PARAMS, указанный в config.yml. Это может быть полезно, например, для удаления параметров cache buster.** |
| -ks | --keep-slash | Завершающий слэш в конце URL во входных данных не будет удалён. Поэтому в результате могут быть одинаковые URL: один с завершающим слэшем и один без него. |
| -khw | --keep-human-written | По умолчанию любой URL, содержащий в части пути более 3 дефисов (-), удаляется, поскольку считается, что это контент, написанный человеком (например, пост в блоге), и он не интересен. Передача этого аргумента сохранит их в выводе. |
| -kym | --keep-yyyymm | По умолчанию любой URL с путём, содержащим /YYYY/MM (где YYYY — год, а MM — месяц), удаляется, поскольку предполагается, что это блог/новостной контент, и он не интересен. Передача этого аргумента сохранит их в выводе. |
| -rcid | --regex-custom-id | ИСПОЛЬЗУЙТЕ С ОСТОРОЖНОСТЬЮ! Regex для пользовательского идентификатора, который использует ваша цель. Убедитесь, что значение передано в кавычках. Подробнее об этом см. в разделе ниже. |
| -iq | --ignore-querystring | Удаляет строку запроса (включая фрагменты URL #), поэтому на выходе остаются только уникальные пути. |
| -fnp | --fragment-not-param | Не обрабатывать фрагменты URL # так же, как параметры, например, если ссылка содержит ключевое слово фильтра и фрагмент (или параметр), ссылка обычно сохраняется, но если этот аргумент передан и ссылка содержит слово фильтра и фрагмент, ссылка будет удалена. Кроме того, если этот аргумент передан и используется -iq / --ignore-querystring, фрагмент НЕ будет удалён из ссылок, если в ссылке нет строки запроса. |
| -lang | --language | Если передан и существуют несколько URL с разными языковыми кодами в составе пути, будет выведена только одна версия URL. Коды указаны в разделе LANGUAGE файла config.yml. |
| -c | --config | Путь к YML-файлу конфигурации. Если не передан, ищется файл config.yml в каталоге конфигурации по умолчанию, например ~/.config/urless/. |
| -dp | --disregard-params | Некоторые фильтры не применяются, если URL содержат параметры, поскольку по умолчанию мы хотим видеть все возможные параметры. Если этот аргумент передан, фильтрация будет выполнена независимо от наличия параметров. |
| -nb | --no-banner | Скрывает вывод баннера инструмента (по умолчанию он скрыт, если вы передаёте входные данные через конвейер в urless). |
| --version | Показать номер текущей версии. | |
| -v | --verbose | Подробный вывод |
-), но НЕ является GUID. Это подразумевает контент, написанный человеком, например how-to-hack-the-planet. Если передан аргумент -khw, он не будет удалён./YYYY/MM/, например год, месяц. Обычно это статический контент, например блог. Если передан аргумент -kym, он не будет удалён.#) И аргумент -dp/--disregard-params НЕ был передан: