Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
bypass-url-parser — Тестирует сотни техник обхода URL для защиты страниц с кодами 40X, используя сырые curl-запросы, с многорежимным сканированием, подменой заголовков и экспортом результатов в JSON/HTML для оценки контроля доступа. | Kitploit
Инструменты/GitHubGitHub/laluka/bypass-url-parser
Анализ уязвимостейСбор информацииОбход WAFВеб-безопасностьТестирование на Проникновение
GitHublaluka/bypass-url-parser

bypass-url-parser

Тестирует сотни техник обхода URL для защиты страниц с кодами 40X, используя сырые curl-запросы, с многорежимным сканированием, подменой заголовков и экспортом результатов в JSON/HTML для оценки контроля доступа.

Репозиторий
1.1k1221 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Bypass Url Parser

PyPI - Version PyPI - Python Version PyPI - License pdm-managed

Инструмент, который тестирует MANY обходов URL для доступа к 40X protected page.

Если вам интересно, почему этот код — nothing but a dirty curl wrapper, вот почему:

  • Большинство Python-запросов выполняют кодирование/декодирование URL/путей/параметров, и я это ненавижу.
  • Если я отправляю необработанные символы, я хочу, чтобы они были отправлены как есть.
  • Если я отправляю странный путь, я хочу, чтобы он остался странным, а не нормализованным.

Это surprisingly hard достичь в Python, не потеряв все возможности библиотеки, такие как парсинг, инкапсуляция SSL/TLS и так далее.
Так что будьте как я, используйте curl as a backend, всё будет нормально.

Также этот инструмент можно использовать как библиотеку, см. lib_sample_usage.py

Установка

Мы рекомендуем использовать pipx для установки этого инструмента:```bash pipx install bypass-url-parser

or for the latest dev version

pipx install git+https://github.com/laluka/bypass-url-parser

root@kitploit:~
Как вариант, вы можете использовать `pip`:```bash
pip install bypass-url-parser

Использование```

Bypass Url Parser, made with love by @TheLaluka A tool that tests MANY url bypasses to reach a 40X protected page.

Usage: bypass-url-parser (-u | -R ) [-m ] [-o ] [-S ] [ (-H

)...] [-r ] [-s ] [--spoofip-replace] [-p ] [--spoofport-replace] [-t ] [-T ] [--request-tls] [--jsonl] [--dump-payloads] [-x <proxy_url>] [-v | -d | -dd]

Program options: -u, --url URL (path is optional) to run bypasses against -R, --request Load HTTP raw request from a file -H, --header

Header(s) to use, format: "Cookie: can_i_haz=fire" -m, --mode Bypass modes. See 'Bypasser.BYPASS_MODES' in code [Default: all] -o, --outdir Output directory for results -x, --proxy <proxy_url> Set a proxy in the format http://proxy_ip:port. -S, --save-level Save results level. From 0 (DISABLE) to 3 (FULL) [Default: 2] -s, --spoofip IP(s) to inject in ip-specific headers -p, --spoofport Port(s) to inject in port-specific headers -r, --retry Retry attempts of failed requests. Set 0 to disable all retry tentatives [Default: 1] -t, --threads Scan with N parallel threads [Default: 1] -T, --timeout Request times out after N seconds [Default: 5]

General options: -h, --help Show help, you are here :) -v, --verbose Verbose output -d, --debug Show more details like curl commands generated by this tool -dd, --debug Print Debug level 2 (with all classes debug_class output) -V, --version Show version info

Misc options: --spoofip-replace Disable list of default internal IPs in 'http_headers_ip' bypass mode --spoofport-replace Disable list of default internal ports in 'http_headers_port' bypass mode --request-tls Force usage of TLS/HTTPS for the request load with the '-R, --request' option --dump-payloads Print all payloads (curls) generated by this tool. --jsonl Print results in JSON lines format (pipe command output)

Examples: bypass-url-parser -u "http://127.0.0.1/juicy_403_endpoint/" -s 8.8.8.8 -d bypass-url-parser -u /path/urls -t 30 -T 5 -H "Cookie: me_iz=admin" -H "User-agent: test" bypass-url-parser -R /path/request_file --request-tls -m "mid_paths, end_paths"

root@kitploit:~
## Ожидаемый результат```bash
bypass-url-parser -u http://127.0.0.1:8000/foo/bar
2022-08-09 14:52:40 lalu-perso bup[361559] WARNING Trying to bypass 'http://127.0.0.1:8000/foo/bar' url (3213 payloads)...
2022-08-09 14:52:40 lalu-perso bup[361559] INFO Doing: 50 / 3213
[...]
2022-08-09 14:52:54 lalu-perso bup[361559] INFO Doing: 3200 / 3213
2022-08-09 14:52:54 lalu-perso bup[361559] INFO Retry (1/3) the '16' failed curl commands with 10 threads and 10s timeout
2022-08-09 14:52:54 lalu-perso bup[361559] INFO Retry (2/3) the '16' failed curl commands with 5 threads and 20s timeout
2022-08-09 14:52:54 lalu-perso bup[361559] INFO Retry (3/3) the '16' failed curl commands with 1 threads and 30s timeout
2022-08-09 14:52:55 lalu-perso bup[361559] INFO
[#####] [bypass_method] [payload] => [status_code] [content_type] [content_length] [lines_count] [word_counts] [title] [server] [redirect_url]
[GROUP (1587)] [original_request] [http://127.0.0.1:8000/foo/bar] => [404] [text/html] [469] [14] [95] [Error response] [SimpleHTTP/0.6 Python/3.8.10] []
[GROUP (10)] [http_methods] [-X CONNECT http://127.0.0.1:8000/foo/bar] => [501] [text/html] [500] [14] [96] [Error response] [SimpleHTTP/0.6 Python/3.8.10] []
[SINGLE] [mid_paths] [http://127.0.0.1:8000/???foo/bar] => [200] [text/html] [913] [26] [27] [Directory listing for /???foo/bar] [SimpleHTTP/0.6 Python/3.8.10] []
[SINGLE] [mid_paths] [http://127.0.0.1:8000//???foo/bar] => [301] [] [] [0] [0] [] [SimpleHTTP/0.6 Python/3.8.10] [/???foo/bar]
[SINGLE] [mid_paths] [http://127.0.0.1:8000/??foo/bar] => [200] [text/html] [911] [26] [27] [Directory listing for /??foo/bar] [SimpleHTTP/0.6 Python/3.8.10] []
[SINGLE] [mid_paths] [http://127.0.0.1:8000//??foo/bar] => [301] [] [] [0] [0] [] [SimpleHTTP/0.6 Python/3.8.10] [/??foo/bar]
[SINGLE] [mid_paths] [http://127.0.0.1:8000/?foo/bar] => [200] [text/html] [909] [26] [27] [Directory listing for /?foo/bar] [SimpleHTTP/0.6 Python/3.8.10] []
[SINGLE] [mid_paths] [http://127.0.0.1:8000//?foo/bar] => [301] [] [] [0] [0] [] [SimpleHTTP/0.6 Python/3.8.10] [/?foo/bar]
[SINGLE] [mid_paths] [http://127.0.0.1:8000///?anythingfoo/bar] => [200] [text/html] [929] [26] [27] [Directory listing for ///?anythingfoo/bar] [SimpleHTTP/0.6 Python/3.8.10] []
[SINGLE] [mid_paths] [http://127.0.0.1:8000////?anythingfoo/bar] => [200] [text/html] [931] [26] [27] [Directory listing for ////?anythingfoo/bar] [SimpleHTTP/0.6 Python/3.8.10] []
[GROUP (2)] [mid_paths] [http://127.0.0.1:8000/#?foo/bar] => [200] [text/html] [893] [26] [27] [Directory listing for /] [SimpleHTTP/0.6 Python/3.8.10] []
[GROUP (2)] [mid_paths] [http://127.0.0.1:8000//#?foo/bar] => [301] [] [] [0] [0] [] [SimpleHTTP/0.6 Python/3.8.10] [/]

Установка

LINUX```bash

Deps

sudo apt install -y bat curl virtualenv python3

Tool

virtualenv -p python3 .py3 source .py3/bin/activate PDM_BUILD_SCM_VERSION="$(git describe --abbrev=0)-dev" pip install .

If bup installed globally, use

python src/bypass_url_parser/init.py -u https://thinkloveshare.com/juicy_403_endpoint/

Else this should work

bypass-url-parser -u https://thinkloveshare.com/juicy_403_endpoint/ cat /tmp/tmpRANDOM-bypass-url-parser/triaged-bypass.json | jq -r '.results[].request_curl_cmd' cat /tmp/tmpRANDOM-bypass-url-parser/triaged-bypass.json | jq -r '.results[].response_data'

root@kitploit:~
### DOCKER```bash
docker run --rm -it -v "$PWD:/host" -w /host ghcr.io/laluka/bypass-url-parser:latest bash -il
# Then bup -h, keep the docker open as the output is saved by default in /tmp
# Or specify the output to the current directory, and consult them later! :)

Подробнее о поддерживаемых аргументах

Разбор аргументов

Bypass_url_parser позволяет задавать некоторые аргументы различными способами:

  • -m, --mode, -s, --spoofip и -p, --spoofport аргументы могут быть именем файла, строкой, разделенным запятыми списком строк или списком (при использовании Bypasser в качестве библиотеки);
  • -u, --url аргумент может быть именем файла, строкой или списком (при использовании Bypasser в качестве библиотеки);
  • stdin (с -) поддерживается для всех этих аргументов.

Например, если вы хотите задать несколько целевых URL-адресов (-u, --url), все следующие команды дают одинаковый результат:```bash bypass-url-parser -u http://thinkloveshare.com/test bypass-url-parser -u /path/urls cat /path/urls | bypass-url-parser -u - echo 'http://thinkloveshare.com/test' | bypass-url-parser -u -

root@kitploit:~
### Определение цели

Для работы инструмента должна быть определена цель. 2 варианта:

- `-u, --url`: URL-адрес(а), метод GET
- `-R, --request`: Файл запроса. Протокол не может быть определён из файла, поэтому по умолчанию используется `http` или `https`, если присутствует опция `--request-tls`.

### Режим обхода

Если указан `-m, --mode`, вы можете выбрать желаемый режим обхода для выполнения конкретного теста (или тестов) и сократить количество запросов, отправляемых инструментом.

На данный момент поддерживаются следующие режимы обхода:```
all, mid_paths, end_paths, case_substitution, char_encode, http_methods, http_versions, http_headers_method, http_headers_scheme, http_headers_ip, http_headers_port, http_headers_url, user_agent

Пример:```bash bypass-url-parser -u /path/urls -m "case_substitution, char_encode, http_headers_scheme"

root@kitploit:~
### Spoofip / Spoofport

Для настройки IP-адресов и портов, используемых при попытках обхода, инструмент поддерживает следующие опции:

- С помощью `-s, --spoofip` вы можете указать несколько IP-адресов для вставки в заголовки типа `ip-specific` (`X-Forwarded-For`, `X-Real-Ip` и т.д.)
- С помощью `-p, --spoofport` вы можете указать несколько портов для вставки в заголовки типа `port-specific` (`X-Forwarded-Port`)

По умолчанию эти пользовательские записи добавляются во внутренние списки IP/портов. Если вы хотите использовать только свои IP/порты, вы можете использовать аргументы `--spoofip-replace` и/или `--spoofport-replace`.

Пример:```bash
bypass-url-parser -u /path/urls -s /path/custom_ip --spoofip-replace
bypass-url-parser -u /path/urls -p "3000, 9443, 10443"

Вывод в формате JSON-Lines и передача через конвейер

С опцией --jsonl можно выводить результаты на stdout в формате JSON-Lines. Стандартный вывод и результаты инструмента отображаются с помощью логгера на stderr, поэтому можно передавать вывод в формате JSON-Line другим инструментам:```bash bypass-url-parser -u "https://thinkloveshare.com/juicy_403_endpoint/" -t 20 -S 0 -m case_substitution,char_encode --jsonl | jq

root@kitploit:~
***Notes:** With `-S 2` или `-S 3`, вывод JSON-Lines также включает путь и имя сохраненных html-файлов.*

### Сохранение результатов

По умолчанию, если целевой URL уникален, инструмент сохраняет копию результатов в каталоге `/tmp/tmpXXX-bypass-url-parser/`.

***Notes:** Если в `-u` передано несколько целевых URL, к результатам добавляется префикс в виде каталога с URL (`/tmp/tmpXXX-bypass-url-parser/http-target-com-8080-api-users/`).*

Для настройки этого поведения предусмотрено два аргумента:

- `-o, --outdir` для установки пользовательского выходного каталога
- `-S, --save-level` для выбора уровня сохранения

Уровни сохранения:

- `0` (NONE): Отключить сохранение вывода и создание выходного каталога;
- `1` (MINIMAL): Сохранять только файл журнала программы, содержащий результаты: `triaged-bypass.log`;
- `2` (PERTINENT): Сохранять файл журнала программы `triaged-bypass.log` и **релевантные (результаты)** curl-ответы в файле `triaged-bypass.json` и отдельных html-файлах (По умолчанию);
- `3` (FULL): Сохранять файл журнала программы `triaged-bypass.log` и **все** curl-ответы в файле `triaged-bypass.json` и отдельных html-файлах.

#### Пример```bash
bypass-url-parser -S 0
bypass-url-parser -S 1 -o /tmp/bypass-res
bypass-url-parser -S 2 -o /tmp/bypass-res2 -H "User-Agent: curl 7.74.0" -u http://thinkloveshare.com/juicy_403_endpoint/
tree /tmp/bypass-res2/
├── bypass-2469eecf6c38b5817d2248e911ad4382.html
├── bypass-6f7cce7caf0a0a4b440859fa189d496d.html
├── bypass-80f4ab5d32b4e74c20630c7e67f2e42f.html
├── bypass-93079abffe63d34f79ac4a511cd6b5e6.html
├── bypass-945822230d58d1ad4680d5dfbc470ecb.html
├── bypass-e6118c315eea0e5b2ebc4fcafe0559c0.html
├── triaged-bypass.json
└── triaged-bypass.log

0 directories, 8 files

Экспорт результатов

Начиная с уровня MINIMAL, результаты, отображаемые программой, сохраняются в файл triaged-bypass.log.

Экспорт в JSON

На уровнях сохранения PERTINENT и FULL программа дополнительно экспортирует все результаты в файл triaged-bypass.json:```json { "url": "http://thinkloveshare.com/juicy_403_endpoint/", "bypass_modes": "all", "results": [ { "request_curl_cmd": "/usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is -H 'X-BlueCoat-Via: localhos[...SNIP...]", "request_curl_payload": "-H X-BlueCoat-Via: localhost http://thinkloveshare.com/juicy_403_endpoint/", "response_headers": "HTTP/1.1 301 Moved Permanently\nConnection: keep-alive\nContent-Length: 162\nServer: GitHub.c[...SNIP...]", "response_data": "\n301 Moved Permanently\n\n

301 Moved Permane[...SNIP...]", "response_status_code": 301, "response_content_type": "text/html", "response_content_length": 162, "response_lines_count": 7, "response_words_count": 4, "response_title": "301 Moved Permanently", "response_server_type": "GitHub.com", "response_redirect_url": "", "response_html_filename": "bypass-e6118c315eea0e5b2ebc4fcafe0559c0.html" }, { "request_curl_cmd": "/usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is -X PROPFIND http://thinklove[...SNIP...]", "request_curl_payload": "-X PROPFIND ", "response_headers": "HTTP/1.1 405 Method Not Allowed\nConnection: close\nContent-Length: 131\nServer: Varnish\nRet[...SNIP...]", "response_data": "\n405 Not Allowed\n<body bgcolor="white">\n\nYour browser sent an invalid request.\n\n", "response_status_code": 400, "response_content_type": "text/html", "response_content_length": 90, "response_lines_count": 3, "response_words_count": 7, "response_title": "", "response_server_type": "", "response_redirect_url": "", "response_html_filename": "bypass-2469eecf6c38b5817d2248e911ad4382.html" } ] } 19 │ Your browser sent an invalid request. 20 │ ───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: /tmp/bypass-res2/bypass-6f7cce7caf0a0a4b440859fa189d496d.html ───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ /usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is -X CONNECT 2 │ 3 │ HTTP/1.1 400 Bad Request 4 │ Connection: close 5 │ Content-Length: 15 6 │ content-type: text/plain; charset=utf-8 7 │ x-served-by: cache-par-lfpg1960083 8 │ 9 │ invalid request ───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: /tmp/bypass-res2/bypass-80f4ab5d32b4e74c20630c7e67f2e42f.html ───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ /usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is 2 │ 3 │ HTTP/1.1 400 Bad Request 4 │ Connection: keep-alive 5 │ Content-Length: 9121 6 │ Server: GitHub.com 7 │ Content-Type: text/html; charset=utf-8 8 │ ETag: "64417b9f-23a1" 9 │ Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; img-src data:; connect-src 'self' 10 │ X-GitHub-Request-Id: 598E:F13E:26EE27D:284F5D2:64486731 11 │ Accept-Ranges: bytes 12 │ Date: Tue, 25 Apr 2023 23:50:11 GMT 13 │ Via: 1.1 varnish 14 │ X-Served-By: cache-par-lfpg1960046-PAR 15 │ X-Cache: MISS 16 │ X-Cache-Hits: 0 17 │ X-Timer: S1682466611.396077,VS0,VE101 18 │ Vary: Accept-Encoding 19 │ X-Fastly-Request-ID: 30bd6af5892c40da130ee49bbeacd147a1a6b3c3 20 │ 21 │ 22 │ 23 │ 24 │ 25 │ 26 │ Bad request · GitHub Pages 27 │ [...SNIP...]

Скачать инструмент
https://thinkloveshare.com/juicy_403_endpoint/
http://thinkloveshare.com/juicy_403_endpoint/

405 N[...SNIP...]", "response_status_code": 405, "response_content_type": "", "response_content_length": 131, "response_lines_count": 5, "response_words_count": 5, "response_title": "405 Not Allowed", "response_server_type": "Varnish", "response_redirect_url": "", "response_html_filename": "bypass-945822230d58d1ad4680d5dfbc470ecb.html" }, { "...": "[...SNIP...]"}, { "request_curl_cmd": "/usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is 'http://thinkloveshare.com/j[...SNIP...]", "request_curl_payload": "http://thinkloveshare.com/juicy_403_endpoint/\u00b0//", "response_headers": "HTTP/1.1 400 Bad request\nConnection: keep-alive\nContent-Length: 90\nCache-Control: no-cache[...SNIP...]", "response_data": "

400 Bad request

root@kitploit:~
Облегчение их обработки с помощью `jq`:```bash
$ jq -r '.results[] | [.request_curl_payload, .response_status_code, .response_content_type, .response_content_length] | join("|")' /tmp/bypass-res2/triaged-bypass.json

-H X-BlueCoat-Via: localhost http://thinkloveshare.com/juicy_403_endpoint/|301|text/html|162
-X PROPFIND http://thinkloveshare.com/juicy_403_endpoint/|405||131
http://thinkloveshare.com/%3b%2f%2e%2e%2f%2e%2e%2f%2fjuicy_403_endpoint/|400|text/html|9121
-H Host: 8.8.8.8 http://thinkloveshare.com/juicy_403_endpoint/|404|text/html|9115
-X CONNECT http://thinkloveshare.com/juicy_403_endpoint/|400|text/plain|15
http://thinkloveshare.com/juicy_403_endpoint/°//|400|text/html|90

Файлы HTML

При уровнях сохранения PERTINENT и FULL команды curl и полные HTTP-ответы также сохраняются в псевдо-файлах .html:```bash $ echo /tmp/bypass-res2/*.html | xargs batcat ───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: /tmp/bypass-res2/bypass-2469eecf6c38b5817d2248e911ad4382.html ───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ /usr/bin/curl -sS -kgi -H 'User-Agent: curl 7.74.0' --path-as-is 'http://thinkloveshare.com/juicy_403_endpoint/°//' 2 │ 3 │ HTTP/1.1 400 Bad request 4 │ Connection: keep-alive 5 │ Content-Length: 90 6 │ Cache-Control: no-cache 7 │ Content-Type: text/html 8 │ Accept-Ranges: bytes 9 │ Date: Tue, 25 Apr 2023 23:51:38 GMT 10 │ Via: 1.1 varnish 11 │ X-Served-By: cache-par-lfpg1960025-PAR 12 │ X-Cache: MISS 13 │ X-Cache-Hits: 0 14 │ X-Timer: S1682466698.230664,VS0,VE10 15 │ Vary: Accept-Encoding 16 │ X-Fastly-Request-ID: b6bbb82302420db4f101a316dca39cc283a4fd44 17 │ 18 │

400 Bad request

http://thinkloveshare.com/juicy_403_endpoint/
http://thinkloveshare.com/%3b%2f%2e%2e%2f%2e%2e%2f%2fjuicy_403_endpoint/
root@kitploit:~
## Участники

- Первый выпуск от [@TheLaluka](https://twitter.com/TheLaluka)
- Масштабный рефакторинг и режим библиотеки благодаря [@jtop_fap](https://twitter.com/jtop_fap)
- Поддержка сборок `Docker` и `Pypi` благодаря доброй работе [@DugnyG](https://twitter.com/DugnyG)

## Лицензия

Copyright (C) 2022 Laluka

Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять её в соответствии с условиями Стандартной общественной лицензии GNU Affero, опубликованной Free Software Foundation, либо версии 3 этой лицензии, либо (на ваше усмотрение) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. Стандартную общественную лицензию GNU Affero для получения более подробной информации.

Вы должны были получить копию Стандартной общественной лицензии GNU Affero вместе с этой программой. Если нет, см. <https://www.gnu.org/licenses/>.