
urllib.parse और requests के बीच URL पार्सर अंतर के माध्यम से SSRF शोषण का प्रदर्शन करता है, जिसमें असुरक्षित सेवा और PoC एक्सप्लॉइट स्क्रिप्ट शामिल है।
# vulnerable_service.py - Validates URL with urllib.parse, fetches with requests
from flask import Flask, request
import requests
import urllib.parse
app = Flask(__name__)
def is_allowed_url(url):
parsed = urllib.parse.urlparse(url)
# Only allow http://localhost and http://127.0.0.1
return parsed.hostname in ('localhost', '127.0.0.1')
@app.route('/fetch')
def fetch():
url = request.args.get('url')
if not is_allowed_url(url):
return "Blocked", 403
# Fetch with requests (different parser)
r = requests.get(url, timeout=5)
return r.text
if __name__ == '__main__':
app.run(port=5000)
एक सेवा URLs को सत्यापित करने के लिए Python के urllib.parse.urlparse का उपयोग करती है, लेकिन फिर उन्हें requests लाइब्रेरी से प्राप्त करती है। दोनों पार्सरों द्वारा विशेष वर्णों (जैसे @) को संभालने के तरीके में अंतर एक हमलावर को व्हाइटलिस्ट को बायपास करने और आंतरिक संसाधनों तक पहुंचने की अनुमति देता है।
urlparse [email protected] को होस्टनाम localhost के रूप में मानता है (@ से पहले का भाग उपयोगकर्ता नाम है), जबकि requests होस्ट को evil.com के रूप में व्याख्या करता है।pip install flask requests
python vulnerable_service.py
python exploit_ssrf_parser_diff.py