Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
bypass-url-parser — Teste des centaines de techniques de contournement d'URL contre des pages protégées 40X en utilisant des requêtes curl brutes, avec balayage multi-mode, usurpation d'en-tête et exportation des résultats en JSON/HTML pour l'évaluation du contrôle d'accès. | Kitploit
Outils/GitHubGitHub/laluka/bypass-url-parser
Analyse des VulnérabilitésCollecte d'InformationsContournement de WAFSécurité WebTests d'Intrusion
GitHublaluka/bypass-url-parser

bypass-url-parser

Teste des centaines de techniques de contournement d'URL contre des pages protégées 40X en utilisant des requêtes curl brutes, avec balayage multi-mode, usurpation d'en-tête et exportation des résultats en JSON/HTML pour l'évaluation du contrôle d'accès.

Voir le dépôt
1.1k122il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

Bypass Url Parser

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

Outil qui teste DE NOMBREUSES contournements d'URL pour atteindre une page protégée 40X.

Si vous vous demandez pourquoi ce code n'est qu'un vil wrapper curl, voici pourquoi :

  • La plupart des requêtes Python font de l'encodage/décodage d'URL/chemin/paramètre, et je déteste ça.
  • Si je soumets des caractères bruts, je veux que des caractères bruts soient envoyés.
  • Si j'envoie un chemin étrange, je le veux étrange, pas normalisé.

C'est étonnamment difficile à réaliser en Python sans perdre tous les avantages de la bibliothèque comme l'analyse, l'encapsulation SSL/TLS, etc.
Alors, faites comme moi, utilisez curl comme backend, ça ira très bien.

De plus, cet outil peut être utilisé comme bibliothèque, voir lib_sample_usage.py

Installation

Nous recommandons d'utiliser pipx pour installer cet outil :```bash pipx install bypass-url-parser

or for the latest dev version

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

root@kitploit:~
Sinon, vous pouvez utiliser `pip`:```bash
pip install bypass-url-parser

Utilisation```

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:~
## Résultat attendu```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] [/]

Installation

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! :)

En savoir plus sur les arguments supportés

Analyse des arguments

Bypass_url_parser permet de définir certains arguments de plusieurs manières:

  • -m, --mode, -s, --spoofip et -p, --spoofport peuvent être un nom de fichier, une chaîne, une liste de chaînes séparées par des virgules ou une liste (lorsque Bypasser est utilisé comme bibliothèque);
  • -u, --url peut être un nom de fichier, une chaîne ou une liste (lorsque Bypasser est utilisé comme bibliothèque);
  • stdin (avec -) est supporté pour tous ces arguments.

Par exemple, si vous souhaitez définir plusieurs URLs cibles (-u, --url), toutes les commandes suivantes produisent le même résultat:```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:~
### Définition de la cible

Une cible doit être définie pour que l'outil fonctionne. 2 options :

- `-u, --url`: URL(s), en GET
- `-R, --request`: Fichier de requête. Le protocole ne peut pas être deviné à partir du fichier, donc `http` par défaut ou `https` si l'option `--request-tls` est présente.

### Mode de contournement

Si `-m, --mode` est spécifié, vous pouvez sélectionner le mode de contournement souhaité pour exécuter un test (ou des tests) spécifique(s) et réduire le nombre de requêtes envoyées par l'outil.

Pour l'instant, le(s) mode(s) de contournement suivant(s) sont pris en charge :```
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

Exemple :```bash bypass-url-parser -u /path/urls -m "case_substitution, char_encode, http_headers_scheme"

root@kitploit:~
### Spoofip / Spoofport

Afin de personnaliser les adresses IP et les ports utilisés lors des tentatives de contournement, l'outil prend en charge les options suivantes :

- Avec `-s, --spoofip`, vous pouvez définir une ou plusieurs IP à injecter dans les en-têtes `ip-specific` (`X-Forwarded-For`, `X-Real-Ip`, etc.)
- Avec `-p, --spoofport`, vous pouvez définir certains ports à injecter dans les en-têtes `port-specific` (`X-Forwarded-Port`)

Par défaut, ces entrées personnalisées sont ajoutées aux listes internes d'IP/ports. Si vous souhaitez utiliser uniquement vos IP(s)/port(s), vous pouvez utiliser les arguments `--spoofip-replace` et/ou `--spoofport-replace`.

Exemple :```bash
bypass-url-parser -u /path/urls -s /path/custom_ip --spoofip-replace
bypass-url-parser -u /path/urls -p "3000, 9443, 10443"

Sortie JSON-Lines et chaînage de commandes

Avec l'option --jsonl, il est possible d'afficher les résultats sur stdout au format JSON-Lines. La sortie standard de l'outil et les résultats sont affichés avec un journal sur stderr, il est donc possible de rediriger le format de sortie JSON-Line vers d'autres outils :```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 :** Avec `-S 2` ou `-S 3`, la sortie JSON-Lines inclut également le chemin et le nom des fichiers html sauvegardés.*

### Sauvegarde des résultats

Par défaut, si l'URL cible est unique, l'outil enregistre une copie des résultats dans le répertoire `/tmp/tmpXXX-bypass-url-parser/`.

***Notes :** Si plusieurs URL cibles sont passées à `-u`, les résultats sont préfixés avec l'URL en tant que répertoire (`/tmp/tmpXXX-bypass-url-parser/http-target-com-8080-api-users/`).*

Il y a deux arguments pour personnaliser ce comportement :

- `-o, --outdir` pour définir un répertoire de sortie personnalisé
- `-S, --save-level` pour choisir un niveau de sauvegarde

Les niveaux de sauvegarde sont :

- `0` (NONE) : Désactiver la sauvegarde des sorties et la création du répertoire de sortie ;
- `1` (MINIMAL) : Sauvegarder uniquement le fichier journal du programme qui contient les résultats : `triaged-bypass.log` ;
- `2` (PERTINENT) : Sauvegarder le fichier journal `triaged-bypass.log` et les réponses curl **pertinentes (résultats)** dans le fichier `triaged-bypass.json` et des fichiers html séparés (par défaut) ;
- `3` (FULL) : Sauvegarder le fichier journal `triaged-bypass.log` et **toutes** les réponses curl dans le fichier `triaged-bypass.json` et des fichiers html séparés.

#### Exemple```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

Export des résultats

À partir du niveau MINIMAL, les résultats affichés par le programme sont enregistrés dans le fichier triaged-bypass.log.

Export JSON

Avec les niveaux d'enregistrement PERTINENT et FULL, le programme exporte en plus tous les résultats dans le fichier 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...]

Télécharger l’outil
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:~
Les rendre plus faciles à manipuler avec `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

Fichiers HTML

Avec les niveaux de sauvegarde PERTINENT et FULL, les commandes curl et les réponses HTTP complètes sont également stockées dans des pseudo fichiers .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:~
## Contributeurs

- Version initiale par [@TheLaluka](https://twitter.com/TheLaluka)
- Important remaniement et mode bibliothèque grâce à [@jtop_fap](https://twitter.com/jtop_fap)
- Prise en charge des builds `Docker` & `Pypi` grâce au travail de [@DugnyG](https://twitter.com/DugnyG)

## Licence

Copyright (C) 2022 Laluka

Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU Affero telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre choix) toute version ultérieure.

Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Consultez la Licence publique générale GNU Affero pour plus de détails.

Vous devriez avoir reçu une copie de la Licence publique générale GNU Affero avec ce programme. Si ce n'est pas le cas, consultez <https://www.gnu.org/licenses/>.