Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2023-24329-lab — स्व-निहित Docker प्रयोगशाला जो CVE-2023-24329 का प्रदर्शन करती है, एक Python urllib पार्सर डिफरेंशियल जो URL स्कीम और होस्ट फ़िल्टर को बायपास करता है, जिसमें हैंड्स-ऑन सुरक्षा शिक्षा के लिए कमजोर और पैच किए गए वातावरण शामिल हैं। | Kitploit
उपकरण/GitHubGitHub/jithinodattu/cve-2023-24329-lab
भेद्यता विश्लेषणशोषणवेब सुरक्षाCTFपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubjithinodattu/cve-2023-24329-lab

CVE-2023-24329-lab

स्व-निहित Docker प्रयोगशाला जो CVE-2023-24329 का प्रदर्शन करती है, एक Python urllib पार्सर डिफरेंशियल जो URL स्कीम और होस्ट फ़िल्टर को बायपास करता है, जिसमें हैंड्स-ऑन सुरक्षा शिक्षा के लिए कमजोर और पैच किए गए वातावरण शामिल हैं।

रिपॉजिटरी देखें
44 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2023-24329 — पार्सर विभेद प्रयोगशाला

केवल शैक्षिक उपयोग। यह प्रयोगशाला एक सुरक्षित, पृथक वातावरण में एक वास्तविक कमजोरी को प्रदर्शित करने के लिए मौजूद है। इसे उन प्रणालियों पर कभी न चलाएं जिनके आप स्वामी नहीं हैं। किसी भी उत्पादन प्रणाली में जानबूझकर तोड़े गए फ़िल्टर कोड का पुनः उपयोग कभी न करें।

एक स्व-निहित Docker प्रयोगशाला जो CVE-2023-24329 — Python के urllib.parse.urlparse() में एक पार्सर विभेद का प्रदर्शन करती है, जो Python < 3.11.4 पर URL योजना और होस्ट फ़िल्टर को बायपास करने की अनुमति देता है।

प्रयोगशाला एक API दिखाती है जो स्पष्ट रूप से file:// URL और आंतरिक होस्टनामों को ब्लॉक करती है, जिसे अपने स्वयं के कंटेनर से /etc/passwd पढ़ने और एक निजी आंतरिक सेवा को हिट करने के लिए धोखा दिया जा सकता है — फिर यह साबित करती है कि वही एक्सप्लॉइट पैच किए गए Python पर विफल हो जाता है।


कमजोरी

Python का urlparse() और अंतर्निहित HTTP/फ़ाइल फ़ेचर्स इस बात पर असहमत हैं कि अग्रणी रिक्त स्थान वाले URL को कैसे संभाला जाए। प्रभावित संस्करणों पर:

root@kitploit:~
from urllib.parse import urlparse

urlparse(" file:///etc/passwd").scheme   # → ""   (खाली — फ़िल्टर पास)
urlparse(" file:///etc/passwd").hostname # → None (खाली — फ़िल्टर पास)

लेकिन urllib.request.urlopen(" file:///etc/passwd") रिक्त स्थान को हटा देता है और वैसे भी file:///etc/passwd को लाता है।

वह अंतर जो पार्सर देखता है और जो फ़ेचर करता है — यही कमजोरी है।

Python 3.11.4 ने पार्स करने से पहले अग्रणी रिक्त स्थान/नियंत्रण वर्णों को हटाकर इस अंतर को बंद कर दिया।


डेमो — तीन चरण

चरणआप क्या देखते हैंयह क्या सिखाता है
1 — मूलfile:///etc/passwd → 403 blocked schemeफ़िल्टर उचित दिखता है
2 — एक्सप्लॉइटएक स्थान उपसर्ग के साथ वही URL → 200 + /etc/passwd और आंतरिक रहस्य की सामग्रीएक स्थान पूरे फ़िल्टर को हरा देता है
3 — पैचPython 3.11.4 के विरुद्ध वही पेलोड → 403 blockedपैच किया गया urlparse पहले रिक्त स्थान हटाता है; फ़िल्टर इसे सही ढंग से पकड़ता है

आर्किटेक्चर

एक पृथक Docker ब्रिज नेटवर्क (cve-lab-net) पर चार सेवाएँ:

सेवाPython संस्करणभूमिकाहोस्ट पोर्ट
vulnerable-api3.11.3भोले URL फ़िल्टर के साथ लक्ष्य API8000
fixed-api3.11.4समान कोड, पैच किया गया इंटरप्रेटर8000
internal-service3.12नकली आंतरिक मेटाडेटा एंडपॉइंटकोई नहीं
attacker3.12एक्सप्लॉइट ड्राइवरकोई नहीं

internal-service का कोई होस्ट पोर्ट मैपिंग नहीं है — यह केवल Docker नेटवर्क के अंदर से पहुंच योग्य है, एक वास्तविक विश्वास सीमा का अनुकरण करता है।


पूर्वापेक्षाएँ

  • Docker Desktop (या Docker Engine + Compose प्लगइन)
  • छवियों के लिए ~500 MB डिस्क स्थान

त्वरित आरंभ

root@kitploit:~
git clone <repo-url>
cd CVE-2023-24329-lab

चरण 1 — मूल: फ़िल्टर को धारण करना चाहिए

root@kitploit:~
docker compose -f docker-compose.vulnerable.yml up --build -d
docker compose -f docker-compose.vulnerable.yml exec attacker python exploit.py baseline

चरण 1 — मूल फ़िल्टर धारण करता है

चरण 2 — एक्सप्लॉइट: फ़िल्टर को बायपास करें

root@kitploit:~
docker compose -f docker-compose.vulnerable.yml exec attacker python exploit.py exploit

चरण 2 — बायपास सफल, /etc/passwd और आंतरिक रहस्य उजागर

चरण 3 — पैच: वही पेलोड, पैच किया गया Python

root@kitploit:~
docker compose -f docker-compose.vulnerable.yml down
docker compose -f docker-compose.fixed.yml up --build -d
docker compose -f docker-compose.fixed.yml exec attacker python exploit.py verify

चरण 3 — पैच Python 3.11.4 पर धारण करता है

नीचे उतारें

root@kitploit:~
docker compose -f docker-compose.fixed.yml down

निर्देशिका लेआउट

root@kitploit:~
CVE-2023-24329-lab/
├── docker-compose.vulnerable.yml   # Python 3.11.3 (प्रभावित)
├── docker-compose.fixed.yml        # Python 3.11.4 (पैच)
├── vulnerable-api/
│   ├── app.py                      # भोले फ़िल्टर के साथ Flask API
│   ├── requirements.txt
│   └── Dockerfile
├── internal-service/
│   ├── app.py                      # नकली आंतरिक मेटाडेटा एंडपॉइंट
│   ├── requirements.txt
│   └── Dockerfile
└── attacker/
    ├── exploit.py                  # डेमो ड्राइवर (baseline / exploit / verify)
    ├── requirements.txt
    └── Dockerfile

कमजोर और फिक्स की गई API सेवाएँ समान स्रोत कोड साझा करती हैं — केवल आधार छवि Python संस्करण भिन्न है। यह प्रयोगशाला का मुख्य वैज्ञानिक-नियंत्रण गुण है।


बायपास कैसे काम करता है

कमजोर API फ़िल्टर (सरलीकृत):

root@kitploit:~
parsed = urllib.parse.urlparse(url)

if parsed.scheme.lower() in {"file", "gopher", "ftp", "data"}:
    return 403  # blocked

if parsed.hostname in {"localhost", "127.0.0.1", "internal-service"}:
    return 403  # blocked

urllib.request.urlopen(url)  # मूल, असंशोधित स्ट्रिंग लाओ

बायपास पेलोड एक एकल अग्रणी स्थान है:

root@kitploit:~
 file:///etc/passwd
^
space (0x20)

Python ≤ 3.11.3 पर, urlparse एक खाली योजना और कोई होस्टनाम देखता है → फ़िल्टर पास। urlopen स्थान हटाता है → file:///etc/passwd लाता है।

Python ≥ 3.11.4 पर, urlparse पहले स्थान हटाता है → सही ढंग से scheme=file देखता है → फ़िल्टर 403 के साथ ब्लॉक करता है।


फिक्स (पैच किया गया Python क्या करता है)

CPython मुद्दा #102153 — फिक्स पार्स करने से पहले URL की शुरुआत से C0 नियंत्रण वर्ण और स्थान हटाता है। पैच के बाद पार्सर और फ़ेचर दोनों इस बात पर सहमत होते हैं कि URL क्या है, इसलिए फ़िल्टर को इस तरह बायपास नहीं किया जा सकता।

Python संस्करण की परवाह किए बिना सही रक्षात्मक पैटर्न:

root@kitploit:~
# पार्स करें → भागों से पुनर्निर्माण करें → पुनर्निर्मित URL को डाउनस्ट्रीम पास करें।
# फ़िल्टर और फ़ेचर दोनों फिर उसी स्ट्रिंग पर काम करते हैं।
parsed = urllib.parse.urlparse(url)
safe_url = parsed.geturl()  # घटकों से पुनर्निर्मित
urllib.request.urlopen(safe_url)

मुख्य शिक्षण बिंदु

  1. पार्सर विभेद एक कमजोरी वर्ग है, एक बार की बग नहीं। यही विचार HTTP अनुरोध तस्करी, SAML भ्रम हमले, और log4j के ${jndi:...} बायपास को संचालित करता है।
  2. जब पार्सर आपसे झूठ बोलता है तो ब्लॉकलिस्ट विफल हो जाती हैं। बुरे इनपुट की गणना करना एक हारने वाला खेल है।
  3. पुनर्निर्मित URL को मान्य करें, कच्चे इनपुट स्ट्रिंग को नहीं।
  4. एक मामूली संस्करण, एक छोटा पैच, बड़ा परिणाम। CPython फिक्स कुछ पंक्तियों का है।

संदर्भ

  • NVD: CVE-2023-24329
  • CPython मुद्दा: github.com/python/cpython/issues/102153
  • मूल प्रकटीकरण: Yebo Cao — खोजें "CVE-2023-24329 Yebo Cao"
  • व्यापक वर्ग: PortSwigger — SSRF फ़िल्टर बायपास तकनीकें
  • व्यापक वर्ग: James Kettle — HTTP डीसिंक हमले

सुरक्षा रेलिंग

  • internal-service पोर्ट को कभी भी होस्ट पर एक्सपोज़ न करें।
  • इस प्रयोगशाला को कभी भी किसी उत्पादन नेटवर्क से जुड़ी मशीन पर न चलाएं।
  • vulnerable-api/app.py में फ़िल्टर कोड शिक्षण उद्देश्यों के लिए जानबूझकर तोड़ा गया है — इसे किसी भी वास्तविक प्रणाली में कॉपी न करें।

लाइसेंस

MIT — शैक्षिक उद्देश्यों के लिए एट्रिब्यूशन के साथ उपयोग, साझा और अनुकूलन करने के लिए स्वतंत्र।

टूल डाउनलोड करें