Bypass FS protections: read-only / no-exec / Distroless
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=86a800b7&sv=1)
Αν ενδιαφέρεστε για καριέρα hacking και να χακάρετε το μη χακαρισμένο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική πολωνική).
Videos
Στα παρακάτω βίντεο μπορείτε να βρείτε τις τεχνικές που αναφέρονται σε αυτή τη σελίδα εξηγημένες πιο αναλυτικά:
read-only / no-exec σενάριο
Είναι όλο και πιο συνηθισμένο να βρίσκουμε μηχανές linux που είναι τοποθετημένες με προστασία συστήματος αρχείων μόνο για ανάγνωση (ro), ειδικά σε κοντέινερ. Αυτό συμβαίνει γιατί η εκτέλεση ενός κοντέινερ με σύστημα αρχείων ro είναι τόσο εύκολη όσο η ρύθμιση του readOnlyRootFilesystem: true
στο securitycontext
:
Ωστόσο, ακόμα και αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το /dev/shm
θα είναι ακόμα εγγράψιμο, οπότε είναι ψευδές ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι τοποθετημένος με προστασία no-exec, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ δεν θα μπορείτε να το εκτελέσετε.
Από την προοπτική μιας κόκκινης ομάδας, αυτό καθιστά πολύπλοκο το να κατεβάσετε και να εκτελέσετε δυαδικά αρχεία που δεν είναι ήδη στο σύστημα (όπως backdoors ή enumerators όπως το kubectl
).
Ευκολότερη παράκαμψη: Σενάρια
Σημειώστε ότι ανέφερα δυαδικά αρχεία, μπορείτε να εκτελέσετε οποιοδήποτε σενάριο εφόσον ο διερμηνέας είναι μέσα στη μηχανή, όπως ένα shell script αν το sh
είναι παρόν ή ένα python script αν το python
είναι εγκατεστημένο.
Ωστόσο, αυτό δεν είναι αρκετό για να εκτελέσετε το δυαδικό backdoor σας ή άλλα δυαδικά εργαλεία που μπορεί να χρειαστεί να εκτελέσετε.
Παράκαμψη μνήμης
Αν θέλετε να εκτελέσετε ένα δυαδικό αρχείο αλλά το σύστημα αρχείων δεν το επιτρέπει, ο καλύτερος τρόπος να το κάνετε είναι να το εκτελέσετε από τη μνήμη, καθώς οι προστασίες δεν ισχύουν εκεί.
Παράκαμψη FD + exec syscall
Αν έχετε μερικούς ισχυρούς κινητήρες σεναρίων μέσα στη μηχανή, όπως Python, Perl, ή Ruby, μπορείτε να κατεβάσετε το δυαδικό αρχείο για να το εκτελέσετε από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (create_memfd
syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες και στη συνέχεια να καλέσετε μια exec
syscall υποδεικνύοντας τον fd ως το αρχείο προς εκτέλεση.
Για αυτό μπορείτε εύκολα να χρησιμοποιήσετε το έργο fileless-elf-exec. Μπορείτε να του περάσετε ένα δυαδικό αρχείο και θα δημιουργήσει ένα σενάριο στη δηλωμένη γλώσσα με το δυαδικό αρχείο συμπιεσμένο και b64 κωδικοποιημένο με τις οδηγίες για αποκωδικοποίηση και αποσυμπίεση σε έναν fd που δημιουργείται καλώντας την create_memfd
syscall και μια κλήση στην exec syscall για να το εκτελέσετε.
Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως η PHP ή το Node γιατί δεν έχουν καμία προεπιλεγμένη μέθοδο για να καλέσουν ωμές syscalls από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσετε την create_memfd
για να δημιουργήσετε τον περιγραφέα μνήμης για να αποθηκεύσετε το δυαδικό αρχείο.
Επιπλέον, η δημιουργία ενός κανονικού fd με ένα αρχείο στο /dev/shm
δεν θα λειτουργήσει, καθώς δεν θα επιτρέπεται να το εκτελέσετε λόγω της προστασίας no-exec.
DDexec / EverythingExec
DDexec / EverythingExec είναι μια τεχνική που σας επιτρέπει να τροποποιήσετε τη μνήμη της δικής σας διαδικασίας αντικαθιστώντας την /proc/self/mem
.
Επομένως, ελέγχοντας τον κώδικα συναρμολόγησης που εκτελείται από τη διαδικασία, μπορείτε να γράψετε ένα shellcode και να "μεταλλάξετε" τη διαδικασία για να εκτελέσετε οποιονδήποτε αυθαίρετο κώδικα.
DDexec / EverythingExec θα σας επιτρέψει να φορτώσετε και να εκτελέσετε το δικό σας shellcode ή οποιοδήποτε δυαδικό από μνήμη.
Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική, ελέγξτε το Github ή:
DDexec / EverythingExecMemExec
Memexec είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα DDexec shellcode demonised, οπότε κάθε φορά που θέλετε να τρέξετε ένα διαφορετικό δυαδικό αρχείο, δεν χρειάζεται να επανεκκινήσετε το DDexec, μπορείτε απλά να τρέξετε το memexec shellcode μέσω της τεχνικής DDexec και στη συνέχεια να επικοινωνήσετε με αυτόν τον δαίμονα για να περάσετε νέα δυαδικά αρχεία για φόρτωση και εκτέλεση.
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το memexec για να εκτελέσετε δυαδικά αρχεία από ένα PHP reverse shell στο https://github.com/arget13/memexec/blob/main/a.php.
Memdlopen
Με παρόμοιο σκοπό με το DDexec, η τεχνική memdlopen επιτρέπει έναν ευκολότερο τρόπο φόρτωσης δυαδικών αρχείων στη μνήμη για να τα εκτελέσετε αργότερα. Θα μπορούσε ακόμη και να επιτρέπει τη φόρτωση δυαδικών αρχείων με εξαρτήσεις.
Distroless Bypass
Τι είναι το distroless
Τα distroless containers περιέχουν μόνο τα απαραίτητα ελάχιστα στοιχεία για να τρέξει μια συγκεκριμένη εφαρμογή ή υπηρεσία, όπως βιβλιοθήκες και εξαρτήσεις χρόνου εκτέλεσης, αλλά αποκλείουν μεγαλύτερα στοιχεία όπως διαχειριστές πακέτων, shell ή συστήματα βοηθητικών προγραμμάτων.
Ο στόχος των distroless containers είναι να μειώσει την επιφάνεια επίθεσης των containers εξαλείφοντας περιττά στοιχεία και ελαχιστοποιώντας τον αριθμό των ευπαθειών που μπορούν να εκμεταλλευτούν.
Reverse Shell
Σε ένα distroless container μπορεί να μην βρείτε καν sh
ή bash
για να αποκτήσετε μια κανονική shell. Δεν θα βρείτε επίσης δυαδικά αρχεία όπως ls
, whoami
, id
... όλα όσα συνήθως τρέχετε σε ένα σύστημα.
Επομένως, δεν θα μπορείτε να αποκτήσετε μια reverse shell ή να καταγράψετε το σύστημα όπως συνήθως κάνετε.
Ωστόσο, αν το παραβιασμένο container τρέχει για παράδειγμα μια εφαρμογή flask, τότε το python είναι εγκατεστημένο, και επομένως μπορείτε να αποκτήσετε μια Python reverse shell. Αν τρέχει node, μπορείτε να αποκτήσετε μια Node rev shell, και το ίδιο με σχεδόν οποιαδήποτε γλώσσα scripting.
Χρησιμοποιώντας τη γλώσσα scripting, μπορείτε να καταγράψετε το σύστημα χρησιμοποιώντας τις δυνατότητες της γλώσσας.
Αν δεν υπάρχουν προστασίες read-only/no-exec
, μπορείτε να εκμεταλλευτείτε τη reverse shell σας για να γράψετε στο σύστημα αρχείων τα δυαδικά σας αρχεία και να τα εκτελέσετε.
Ωστόσο, σε αυτού του είδους τα containers, αυτές οι προστασίες θα υπάρχουν συνήθως, αλλά μπορείτε να χρησιμοποιήσετε τις προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε.
Μπορείτε να βρείτε παραδείγματα για το πώς να εκμεταλλευτείτε κάποιες ευπάθειες RCE για να αποκτήσετε reverse shells γλωσσών scripting και να εκτελέσετε δυαδικά αρχεία από τη μνήμη στο https://github.com/carlospolop/DistrolessRCE.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-e70bceed6fa35760d025f037a78106ab025a68cd%252Fimage%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=86a800b7&sv=1)
Αν ενδιαφέρεστε για μια καριέρα hacking και να χακάρετε το αχάκωτο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών).
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated