Linux Privilege Escalation
Last updated
Last updated
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Ας ξεκινήσουμε αποκτώντας κάποιες γνώσεις για το λειτουργικό σύστημα που τρέχει.
Αν έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή PATH
ενδέχεται να μπορείτε να αρπάξετε κάποιες βιβλιοθήκες ή δυαδικά αρχεία:
Ενδιαφέρουσες πληροφορίες, κωδικοί πρόσβασης ή κλειδιά API στις μεταβλητές περιβάλλοντος;
Ελέγξτε την έκδοση του πυρήνα και αν υπάρχει κάποια εκμετάλλευση που μπορεί να χρησιμοποιηθεί για την ανάδειξη προνομίων
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικά εκ των προτέρων μεταγλωττισμένα exploits εδώ: https://github.com/lucyoa/kernel-exploits και exploitdb sploits. Άλλες ιστοσελίδες όπου μπορείτε να βρείτε μερικά μεταγλωττισμένα exploits: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Για να εξάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτό τον ιστότοπο, μπορείτε να κάνετε:
Εργαλεία που μπορούν να βοηθήσουν στην αναζήτηση εκμεταλλεύσεων πυρήνα είναι:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (εκτέλεση ΣΤΟ θύμα, ελέγχει μόνο εκμεταλλεύσεις για πυρήνα 2.x)
Πάντα ψάξτε την έκδοση του πυρήνα στο Google, ίσως η έκδοση του πυρήνα σας να είναι γραμμένη σε κάποια εκμετάλλευση πυρήνα και τότε θα είστε σίγουροι ότι αυτή η εκμετάλλευση είναι έγκυρη.
Ανόρθωση Προνομίων Linux - Πυρήνας Linux <= 3.19.0-73.8
Βασισμένο στις ευάλωτες εκδόσεις του sudo που εμφανίζονται σε:
Μπορείτε να ελέγξετε αν η έκδοση του sudo είναι ευάλωτη χρησιμοποιώντας αυτό το grep.
Από τον χρήστη @sickrov
Ελέγξτε το smasher2 box του HTB για ένα παράδειγμα πώς μπορεί να εκμεταλλευτεί αυτή η ευπάθεια
Αν βρίσκεστε μέσα σε ένα container του Docker μπορείτε να προσπαθήσετε να δραπετεύσετε από αυτό:
Docker SecurityΕλέγξτε τι είναι προσαρτημένο και αποσυνδεδεμένο, πού και γιατί. Αν κάτι είναι αποσυνδεδεμένο μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για προσωπικές πληροφορίες
Καταγράψτε χρήσιμα δυαδικά αρχεία
Επίσης, ελέγξτε εάν έχει εγκατασταθεί κάποιος μεταγλωττιστής. Αυτό είναι χρήσιμο εάν χρειαστεί να χρησιμοποιήσετε κάποια εκμετάλλευση πυρήνα καθώς συνιστάται να τη μεταγλωττίσετε στο μηχάνημα όπου πρόκειται να τη χρησιμοποιήσετε (ή σε ένα παρόμοιο).
Ελέγξτε τη έκδοση των εγκατεστημένων πακέτων και υπηρεσιών. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) που θα μπορούσε να εκμεταλλευτεί για την ανάδειξη προνομίων... Συνιστάται να ελέγξετε χειροκίνητα την έκδοση του πιο ύποπτου εγκατεστημένου λογισμικού.
Αν έχετε πρόσβαση SSH στη μηχανή, μπορείτε επίσης να χρησιμοποιήσετε το openVAS για να ελέγξετε αν έχει εγκατασταθεί στη μηχανή ξεπερασμένο και ευάλωτο λογισμικό.
Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που θα είναι κυρίως άχρηστες, επομένως συνιστάται η χρήση κάποιων εφαρμογών όπως το OpenVAS ή κάτι παρόμοιο που θα ελέγξει αν κάποια έκδοση εγκατεστημένου λογισμικού είναι ευάλωτη σε γνωστές εκμεταλλεύσεις
Ρίξτε μια ματιά σε ποιες διεργασίες εκτελούνται και ελέγξτε αν κάποια διεργασία έχει περισσότερα προνόμια από ό,τι θα έπρεπε (ίσως ένα tomcat να εκτελείται από τον χρήστη root;)
Πάντα ελέγχετε για πιθανούς αποσφαλματωτές electron/cef/chromium που εκτελούνται, μπορείτε να τους εκμεταλλευτείτε για εξέλιξη προνομίων. Το Linpeas τους ανιχνεύει ελέγχοντας την παράμετρο --inspect
μέσα στη γραμμή εντολών της διαδικασίας.
Επίσης ελέγξτε τα προνόμιά σας πάνω στα δυαδικά των διεργασιών, ίσως μπορείτε να αντικαταστήσετε κάποιον.
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το pspy για την παρακολούθηση διεργασιών. Αυτό μπορεί να είναι πολύ χρήσιμο για την αναγνώριση ευάλωτων διεργασιών που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
Κάποιες υπηρεσίες ενός διακομιστή αποθηκεύουν διαπιστευτήρια σε καθαρό κείμενο μέσα στη μνήμη. Συνήθως θα χρειαστείτε δικαιώματα ρίζας για να διαβάσετε τη μνήμη των διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη ρίζα και θέλετε να ανακαλύψετε περισσότερα διαπιστευτήρια. Ωστόσο, θυμηθείτε ότι ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διεργασιών που σας ανήκουν.
Σημειώστε ότι σήμερα τα περισσότερα μηχανήματα δεν επιτρέπουν το ptrace από προεπιλογή που σημαίνει ότι δεν μπορείτε να αντλήσετε άλλες διεργασίες που ανήκουν στον μη εξουσιοδοτημένο χρήστη.
Το αρχείο /proc/sys/kernel/yama/ptrace_scope ελέγχει την προσβασιμότητα του ptrace:
kernel.yama.ptrace_scope = 0: όλες οι διεργασίες μπορούν να ελεγχθούν, όσο έχουν τον ίδιο uid. Αυτό είναι ο κλασικός τρόπος λειτουργίας του ptrace.
kernel.yama.ptrace_scope = 1: μόνο μια γονική διεργασία μπορεί να ελεγχθεί.
kernel.yama.ptrace_scope = 2: Μόνο ο διαχειριστής μπορεί να χρησιμοποιήσει το ptrace, καθώς απαιτείται η δυνατότητα CAP_SYS_PTRACE.
kernel.yama.ptrace_scope = 3: Δεν μπορεί να ελεγχθεί καμία διεργασία με το ptrace. Μόλις οριστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά η δυνατότητα ελέγχου με το ptrace.
Αν έχετε πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) μπορείτε να ανακτήσετε το Heap και να αναζητήσετε μέσα σε αυτό τα διαπιστευτήριά της.
Για ένα δεδομένο αναγνωριστικό διεργασίας, το maps δείχνει πώς η μνήμη είναι αντιστοιχισμένη μέσα στον χώρο διεύθυνσης εκείνης της διεργασίας· επίσης δείχνει τις άδειες κάθε αντιστοιχισμένης περιοχής. Το ψευδές αρχείο mem αποκαλύπτει την ίδια τη μνήμη των διεργασιών. Από το αρχείο **maps γνωρίζουμε ποιες περιοχές μνήμης είναι αναγνώσιμες και τις μετατοπίσεις τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να ψάξουμε στο αρχείο mem και να αντλήσουμε όλες τις αναγνώσιμες περιοχές σε ένα αρχείο.
/dev/mem
παρέχει πρόσβαση στη φυσική μνήμη του συστήματος, όχι στην εικονική μνήμη. Ο εικονικός χώρος διευθύνσεων του πυρήνα μπορεί να προσπελαστεί χρησιμοποιώντας το /dev/kmem.
Συνήθως, το /dev/mem
είναι μόνο αναγνώσιμο από τον root και την ομάδα kmem.
Το ProcDump είναι μια επανεκδοχή για Linux του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για τα Windows. Βρείτε το στο https://github.com/Sysinternals/ProcDump-for-Linux
Για την απορρόφηση μνήμης ενός διεργασίας μπορείτε να χρησιμοποιήσετε:
https://github.com/hajzer/bash-memory-dump (root) - _Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις ρίζας και να απορροφήσετε τη διεργασία που σας ανήκει
Σενάριο A.5 από https://www.delaat.net/rp/2016-2017/p97/report.pdf (απαιτείται ρίζα)
Αν διαπιστώσετε ότι η διεργασία ελέγχου ταυτότητας εκτελείται:
Μπορείτε να αδειάσετε τη διαδικασία (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους για να αδειάσετε τη μνήμη μιας διαδικασίας) και να αναζητήσετε διαπιστευτήρια μέσα στη μνήμη:
Το εργαλείο https://github.com/huntergregal/mimipenguin θα κλέψει διαπιστευτήρια κειμένου από τη μνήμη και από μερικά γνωστά αρχεία. Απαιτεί δικαιώματα ρίζας για να λειτουργήσει σωστά.
Χαρακτηριστικό | Όνομα Διεργασίας |
---|---|
Κωδικός 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: |
Ελέγξτε εάν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα σενάριο που εκτελείται από το ριζικό χρήστη (ευπάθεια με χρήση μπαλαντέρ; μπορείτε να τροποποιήσετε αρχεία που χρησιμοποιεί ο ριζικός χρήστης; χρησιμοποιήστε συμβολικούς συνδέσμους; δημιουργήστε συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο ριζικός χρήστης;).
Για παράδειγμα, μέσα στο /etc/crontab μπορείτε να βρείτε τη ΔΙΑΔΡΟΜΗ: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Σημειώστε πως ο χρήστης "user" έχει δικαιώματα εγγραφής στο /home/user)
Αν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή script χωρίς να ορίσει τη διαδρομή. Για παράδειγμα: * * * * root overwrite.sh Τότε, μπορείτε να αποκτήσετε ένα root shell χρησιμοποιώντας:
Εάν ένα script εκτελείται από τον χρήστη root και περιέχει ένα "*" μέσα σε ένα command, μπορείτε να εκμεταλλευτείτε αυτό για να προκαλέσετε απρόσμενα πράγματα (όπως ανέλιξη προνομίων). Παράδειγμα:
Αν το μπαλαντέρ προηγείται ενός διαδρόμου όπως /some/path/* , δεν είναι ευάλωτο (ακόμη και το ./* δεν είναι).
Διαβάστε την παρακάτω σελίδα για περισσότερα κόλπα εκμετάλλευσης μπαλαντέρ:
Wildcards Spare tricksΑν μπορείτε να τροποποιήσετε ένα σενάριο Cron που εκτελείται από το ριζικό χρήστη, μπορείτε να αποκτήσετε πολύ εύκολα ένα κέλυφος:
Αν το script που εκτελείται από το root χρησιμοποιεί ένα κατάλογο στον οποίο έχετε πλήρη πρόσβαση, ίσως είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και να δημιουργήσετε ένα σύνδεσμο σε έναν άλλο φάκελο που εξυπηρετεί ένα script που ελέγχετε εσείς
Μπορείτε να παρακολουθείτε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να αναβαθμίσετε τα προνόμια.
Για παράδειγμα, για παρακολούθηση κάθε 0,1 δευτερολέπτου για 1 λεπτό, ταξινόμηση με λιγότερες εκτελούμενες εντολές και διαγραφή των εντολών που έχουν εκτελεστεί τις περισσότερες φορές, μπορείτε να κάνετε:
Μπορείτε επίσης να χρησιμοποιήσετε pspy (αυτό θα παρακολουθεί και θα καταχωρίζει κάθε διεργασία που ξεκινά).
Είναι δυνατόν να δημιουργήσετε μια εργασία cron βάζοντας ένα χαρακτήρα αλλαγής γραμμής μετά από ένα σχόλιο (χωρίς χαρακτήρα νέας γραμμής), και η εργασία cron θα λειτουργεί. Παράδειγμα (σημειώστε τον χαρακτήρα αλλαγής γραμμής):
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο .service
, αν μπορείτε, μπορείτε να το τροποποιήσετε ώστε να εκτελεί το backdoor σας όταν η υπηρεσία ξεκινάει, επανεκκινείται ή σταματάει (ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση του υπολογιστή).
Για παράδειγμα δημιουργήστε το backdoor σας μέσα στο αρχείο .service με ExecStart=/tmp/script.sh
Να έχετε υπόψη ότι αν έχετε δικαιώματα εγγραφής σε δυαδικά αρχεία που εκτελούνται από υπηρεσίες, μπορείτε να τα αλλάξετε για backdoors, έτσι ώστε όταν οι υπηρεσίες επανεκτελούνται, τα backdoors θα εκτελούνται.
Μπορείτε να δείτε το PATH που χρησιμοποιείται από το systemd με:
Εάν ανακαλύψετε ότι μπορείτε να εγγράψετε σε οποιονδήποτε από τους φακέλους της διαδρομής, μπορεί να είστε σε θέση να εξελίξετε τα δικαιώματά σας. Πρέπει να αναζητήσετε σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών όπως:
Στη συνέχεια, δημιουργήστε ένα εκτελέσιμο αρχείο με το ίδιο όνομα με το δυαδικό αρχείο στη σχετική διαδρομή μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν ζητηθεί από την υπηρεσία να εκτελέσει την ευάλωτη ενέργεια (Έναρξη, Διακοπή, Επαναφόρτωση), το backdoor σας θα εκτελεστεί (συνήθως οι μη προνομιούχοι χρήστες δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες, αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε sudo -l
).
Μάθετε περισσότερα για τις υπηρεσίες με την εντολή man systemd.service
.
Οι Χρονοδιακόπτες (Timers) είναι αρχεία μονάδας του systemd των οποίων το όνομα τελειώνει σε **.timer**
που ελέγχουν αρχεία ή συμβάντα **.service**
. Οι Χρονοδιακόπτες μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογίου και γεγονότα μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα.
Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με:
Εάν μπορείτε να τροποποιήσετε ένα χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελέσει ορισμένες υπάρχουσες μονάδες του systemd (όπως ένα αρχείο .service
ή ένα αρχείο .target
).
Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η Μονάδα:
Η μονάδα που θα ενεργοποιηθεί όταν αυτός ο χρονοδιακόπτης λήξει. Το όρισμα είναι το όνομα μιας μονάδας, η οποία δεν έχει κατάληξη ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα του χρονοδιακόπτη, εκτός από την κατάληξη. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας του χρονοδιακόπτη να είναι πανομοιότυπα, εκτός από την κατάληξη.
Συνεπώς, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαζόσασταν:
Να βρείτε μια μονάδα systemd (όπως ένα .service
) που εκτελεί ένα εγγράψιμο δυαδικό αρχείο
Να βρείτε μια μονάδα systemd που εκτελεί ένα σχετικό μονοπάτι και να έχετε εγγράψιμα δικαιώματα πάνω στο σύστημα PATH του systemd (για να προσωποποιήσετε αυτό το εκτελέσιμο)
Μάθετε περισσότερα για τους χρονοδιακόπτες με την εντολή man systemd.timer
.
Για να ενεργοποιήσετε ένα χρονοδιακόπτη χρειάζεστε δικαιώματα ριζού και να εκτελέσετε:
Σημειώστε ότι ο χρονοδιακόπτης ενεργοποιείται δημιουργώντας ένα σύμβολο σύνδεσης προς αυτό στο /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Τα Unix Domain Sockets (UDS) επιτρέπουν τη επικοινωνία διεργασιών στον ίδιο ή διαφορετικό υπολογιστή μέσα σε μοντέλα πελάτη-εξυπηρετητή. Χρησιμοποιούν τυπικά αρχεία περιγραφέων Unix για τη διασύνδεση μεταξύ υπολογιστών και δημιουργούνται μέσω αρχείων .socket
.
Τα Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία .socket
.
Μάθετε περισσότερα για τα sockets με την εντολή man systemd.socket
. Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Αυτές οι επιλογές είναι διαφορετικές, αλλά μια περίληψη χρησιμοποιείται για να υποδείξει πού θα ακούει το socket (η διαδρομή του αρχείου AF_UNIX socket, ο αριθμός θύρας IPv4/6 για ακρόαση, κλπ.)
Accept
: Παίρνει ένα όρισμα boolean. Αν είναι true, ένα παράδειγμα υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση και μόνο το socket σύνδεσης περνιέται σε αυτό. Αν είναι false, όλα τα ακούσματα sockets περνιούνται στην ενεργοποιημένη μονάδα υπηρεσίας, και δημιουργείται μόνο μια μονάδα υπηρεσίας για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets δεδομένων και FIFOs όπου μια μονάδα υπηρεσίας χειρίζεται απόλυτα όλη την εισερχόμενη κίνηση. Προεπιλογή σε false. Λόγω λόγων απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για Accept=no
.
ExecStartPre
, ExecStartPost
: Παίρνει μία ή περισσότερες γραμμές εντολών, οι οποίες εκτελούνται πριν ή μετά τη δημιουργία και δέσμευση των ακουστικών sockets/FIFOs αντίστοιχα. Το πρώτο τεκμήριο της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από ορίσματα για τη διαδικασία.
ExecStopPre
, ExecStopPost
: Επιπλέον εντολές που εκτελούνται πριν ή μετά το κλείσιμο και την αφαίρεση των ακουστικών sockets/FIFOs αντίστοιχα.
Service
: Καθορίζει το όνομα της μονάδας υπηρεσίας που θα ενεργοποιηθεί στην εισερχόμενη κίνηση. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλέγεται η υπηρεσία που φέρει το ίδιο όνομα με το socket (με το επίθεμα αντικαταστάθηκε). Στις περισσότερες περιπτώσεις, δεν θα είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
Αν βρείτε ένα εγγράψιμο αρχείο .socket
μπορείτε να προσθέσετε στην αρχή της ενότητας [Socket]
κάτι σαν: ExecStartPre=/home/kali/sys/backdoor
και το backdoor θα εκτελεστεί πριν δημιουργηθεί το socket. Συνεπώς, ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση η συσκευή.
Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτήν τη διαμόρφωση του αρχείου socket ή αλλιώς το backdoor δεν θα εκτελεστεί
Αν εντοπίσετε οποιοδήποτε εγγράψιμο socket (τώρα μιλάμε για Unix Sockets και όχι για τα αρχεία διαμόρφωσης .socket
), τότε μπορείτε να επικοινωνήσετε με αυτό το socket και ίσως να εκμεταλλευτείτε μια ευπάθεια.
Παράδειγμα εκμετάλλευσης:
Socket Command InjectionΣημειώστε ότι ενδέχεται να υπάρχουν sockets που ακούνε για HTTP αιτήσεις (δεν αναφέρομαι σε αρχεία .socket αλλά σε αρχεία που λειτουργούν ως unix sockets). Μπορείτε να το ελέγξετε με:
Το Docker socket, που συχνά βρίσκεται στη διαδρομή /var/run/docker.sock
, είναι ένα κρίσιμο αρχείο που πρέπει να προστατεύεται. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη root
και τα μέλη της ομάδας docker
. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε ανάδειξη προνομίων. Εδώ υπάρχει μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι εάν το Docker CLI δεν είναι διαθέσιμο.
Εάν έχετε πρόσβαση εγγραφής στο Docker socket, μπορείτε να αναβαθμίσετε τα προνόμια χρησιμοποιώντας τις ακόλουθες εντολές:
Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί ακόμα να χειριστεί χρησιμοποιώντας το Docker API και εντολές curl
.
Λίστα Εικόνων Docker: Ανάκτηση της λίστας των διαθέσιμων εικόνων.
Δημιουργία Ενός Εμπορεύματος: Αποστολή αιτήματος για τη δημιουργία ενός εμπορεύματος που συνδέει το ριζικό κατάλογο του συστήματος φιλοξενίας.
Εκκίνηση του νεοδημιουργημένου εμπορεύματος:
Σύνδεση στο Εμπόρευμα: Χρησιμοποιήστε το socat
για να καθιερώσετε μια σύνδεση με το εμπόρευμα, ενεργοποιώντας την εκτέλεση εντολών μέσα σε αυτό.
Μετά την ρύθμιση της σύνδεσης socat
, μπορείτε να εκτελέσετε εντολές απευθείας στο εμπόρευμα με πρόσβαση σε root επίπεδο στο αρχείο συστήματος του φιλοξενητή.
Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο socket του docker επειδή βρίσκεστε μέσα στην ομάδα docker
έχετε περισσότερους τρόπους ανάδειξης δικαιωμάτων. Αν η διεπαφή του docker ακούει σε ένα θύρα μπορείτε επίσης να την εκμεταλλευτείτε.
Ελέγξτε περισσότερους τρόπους να διαφύγετε από το docker ή να το καταχραστείτε για ανάδειξη δικαιωμάτων σε:
Docker SecurityΑν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή ctr
διαβάστε την παρακάτω σελίδα καθώς μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων:
Αν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή runc
διαβάστε την παρακάτω σελίδα καθώς μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων:
Το D-Bus είναι ένα εξελιγμένο σύστημα Επικοινωνίας Διεργασιών (IPC) που επιτρέπει σε εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με το μοντέρνο σύστημα Linux στο μυαλό, προσφέρει ένα στιβαρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασική IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, θυμίζοντας τις βελτιωμένες UNIX domain sockets. Επιπλέον, βοηθά στη μετάδοση συμβάντων ή σημάτων, προωθώντας την ομαλή ενσωμάτωση μεταξύ στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από ένα δαίμονα Bluetooth για μια εισερχόμενη κλήση μπορεί να προκαλέσει τον σίγαση του αναπαραγωγέα μουσικής, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα απομακρυσμένο σύστημα αντικειμένων, απλοποιώντας τις αιτήσεις υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, διευκολύνοντας τις διαδικασίες που ήταν παραδοσιακά πολύπλοκες.
Το D-Bus λειτουργεί με βάση ένα μοντέλο επιτροπής/απαγόρευσης, διαχειρίζοντας τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κλπ) με βάση το συνολικό αποτέλεσμα των αντιστοιχιών των κανόνων πολιτικής. Αυτοί οι κανόνες καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, ενδεχομένως επιτρέποντας την ανάδειξη δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
Παρέχεται ένα παράδειγμα τέτοιας πολιτικής στο /etc/dbus-1/system.d/wpa_supplicant.conf
, που περιγράφει τις άδειες για το ριζικό χρήστη να κατέχει, να στέλνει και να λαμβάνει μηνύματα από το fi.w1.wpa_supplicant1
.
Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές πλαισίου "προεπιλογή" ισχύουν για όλους όσοι δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές.
Μάθετε πώς να απαριθμήσετε και να εκμεταλλευτείτε μια επικοινωνία D-Bus εδώ:
D-Bus Enumeration & Command Injection Privilege EscalationΕίναι πάντα ενδιαφέρον να απαριθμήσετε το δίκτυο και να καταλάβετε τη θέση της μηχανής.
Πάντα ελέγχετε τις δικτυακές υπηρεσίες που εκτελούνται στο μηχάνημα και με τις οποίες δεν ήταν δυνατή η αλληλεπίδραση πριν την πρόσβαση σε αυτό:
Ελέγξτε εάν μπορείτε να καταγράψετε την κίνηση. Αν μπορείτε, θα μπορούσατε να αποκτήσετε πρόσβαση σε ορισμένα διαπιστευτήρια.
Ελέγξτε ποιος είστε, ποια προνόμια έχετε, ποιοι χρήστες υπάρχουν στα συστήματα, ποιοι μπορούν να συνδεθούν και ποιοι έχουν δικαιώματα root:
Κάποιες εκδόσεις του Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει σε χρήστες με UID > INT_MAX να αναβαθμίσουν τα προνόμιά τους. Περισσότερες πληροφορίες: εδώ, εδώ και εδώ.
Εκμεταλλευτείτε το χρησιμοποιώντας: systemd-run -t /bin/bash
Ελέγξτε αν είστε μέλος κάποιας ομάδας που θα μπορούσε να σας χορηγήσει ριζικά προνόμια:
Interesting Groups - Linux PrivescΕλέγξτε αν υπάρχει κάτι ενδιαφέρον μέσα στο πρόχειρο (εάν είναι δυνατόν)
Αν γνωρίζετε κάποιον κωδικό πρόσβασης του περιβάλλοντος, δοκιμάστε να συνδεθείτε ως κάθε χρήστης χρησιμοποιώντας τον κωδικό.
Αν δεν σας πειράζει να κάνετε πολύ θόρυβο και οι δυαδικοί su
και timeout
υπάρχουν στον υπολογιστή, μπορείτε να δοκιμάσετε να εκτελέσετε βίαια τον χρήστη χρησιμοποιώντας το su-bruteforce.
Το Linpeas με την παράμετρο -a
επίσης δοκιμάζει να εκτελέσει βίαια τους χρήστες.
Αν ανακαλύψετε ότι μπορείτε να γράψετε μέσα σε κάποιο φάκελο του $PATH, ενδέχεται να μπορείτε να αναβαθμίσετε τα δικαιώματά σας με το δημιουργία ενός πίσω πόρτας μέσα στον εγγράψιμο φάκελο με το όνομα κάποιας εντολής που θα εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που δεν φορτώνεται από έναν φάκελο που βρίσκεται προηγούμενος στον εγγράψιμο φάκελο στο $PATH σας.
Μπορείτε να επιτραπείτε να εκτελέσετε κάποια εντολή χρησιμοποιώντας το sudo ή ενδέχεται να έχει το bit suid. Ελέγξτε το χρησιμοποιώντας:
Μερικές απροσδόκητες εντολές σας επιτρέπουν να διαβάσετε και/ή να γράψετε αρχεία ή ακόμα και να εκτελέσετε μια εντολή. Για παράδειγμα:
Η διαμόρφωση του Sudo μπορεί να επιτρέψει σε έναν χρήστη να εκτελέσει κάποια εντολή με τα προνόμια ενός άλλου χρήστη χωρίς να γνωρίζει τον κωδικό πρόσβασης.
Σε αυτό το παράδειγμα ο χρήστης demo
μπορεί να εκτελέσει το vim
ως root
, είναι τώρα εύκολο να αποκτήσετε ένα κέλυφος προσθέτοντας ένα κλειδί ssh στον κατάλογο root ή καλώντας το sh
.
Αυτή η οδηγία επιτρέπει στον χρήστη να ορίσει μια μεταβλητή περιβάλλοντος κατά την εκτέλεση κάποιας εντολής:
Αυτό το παράδειγμα, βασισμένο στη μηχανή HTB Admirer, ήταν ευάλωτο στο PYTHONPATH hijacking για τη φόρτωση ενός αυθαίρετου βιβλιοθήκης Python κατά την εκτέλεση του script ως root:
Μετάβαση για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε συμβολικούς συνδέσμους. Για παράδειγμα στο αρχείο sudoers: hacker10 ALL= (root) /bin/less /var/log/*
Εάν χρησιμοποιηθεί ένα wildcard (*), τότε είναι ακόμα πιο εύκολο:
Αντιμέτωπα μέτρα: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
Εάν η άδεια sudo δίνεται σε μια μόνο εντολή χωρίς να καθορίζεται η διαδρομή: hacker10 ALL= (root) less μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί εάν ένα suid δυαδικό αρχείο εκτελεί ένα άλλο πρόγραμμα χωρίς να καθορίζει τη διαδρομή γι' αυτό (ελέγξτε πάντα με την εντολή strings το περιεχόμενο ενός παράξενου SUID δυαδικού αρχείου).
Παραδείγματα φορτίου για εκτέλεση.
Εάν το suid δυαδικό αρχείο εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή, τότε μπορείτε να δοκιμάσετε να εξάγετε μια συνάρτηση με το όνομα της εντολής που καλεί το αρχείο suid.
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί /usr/sbin/service apache2 start πρέπει να δοκιμάσετε να δημιουργήσετε τη συνάρτηση και να την εξάγετε:
Η μεταβλητή περιβάλλοντος LD_PRELOAD χρησιμοποιείται για να καθορίσετε έναν ή περισσότερους κοινόχρηστους καταλόγους (.so αρχεία) που θα φορτωθούν από τον φορτωτή πριν από όλους τους άλλους, συμπεριλαμβανομένης της τυπικής βιβλιοθήκης C (libc.so
). Αυτή η διαδικασία είναι γνωστή ως προ-φόρτωση βιβλιοθήκης.
Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της λειτουργίας, ιδιαίτερα με εκτελέσιμα suid/sgid, το σύστημα επιβάλλει ορισμένες συνθήκες:
Ο φορτωτής αγνοεί το LD_PRELOAD για εκτελέσιμα όπου ο πραγματικός αναγνωριστικός χρήστης (ruid) δεν ταιριάζει με το αποτέλεσμα του αποτελεσματικού αναγνωριστικού χρήστη (euid).
Για εκτελέσιμα με suid/sgid, φορτώνονται μόνο βιβλιοθήκες σε τυπικούς καταλόγους που είναι επίσης suid/sgid.
Η εξέλιξη προνομιακών δικαιωμάτων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελέσετε εντολές με sudo
και το αποτέλεσμα της sudo -l
περιλαμβάνει την δήλωση env_keep+=LD_PRELOAD. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος LD_PRELOAD να διατηρείται και να αναγνωρίζεται ακόμα και όταν οι εντολές εκτελούνται με sudo
, πιθανώς οδηγώντας στην εκτέλεση κώδικα αυθαίρετων με προνομιακά δικαιώματα.
Αποθηκεύστε ως /tmp/pe.c
Στη συνέχεια μεταγλωττίστε το χρησιμοποιώντας:
Τελικά, αναβαθμίστε τα προνόμια εκτελώντας
Μια παρόμοια ανύψωση προνομίων μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος LD_LIBRARY_PATH επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
Όταν αντιμετωπίζετε ένα δυαδικό αρχείο με δικαιώματα SUID που φαίνεται ασυνήθιστο, είναι καλή πρακτική να ελέγξετε αν φορτώνει σωστά αρχεία .so. Αυτό μπορεί να ελεγχθεί εκτελώντας την παρακάτω εντολή:
Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)" υποδηλώνει ένα δυνητικό πεδίο εκμετάλλευσης.
Για να εκμεταλλευτεί κάποιος αυτό, θα πρέπει να συνεχίσει δημιουργώντας ένα αρχείο C, λέγοντάς το "/path/to/.config/libcalc.c", περιέχοντας τον παρακάτω κώδικα:
Αυτός ο κώδικας, αφού μεταγλωττιστεί και εκτελεστεί, στοχεύει στην αύξηση προνομίων με τον χειρισμό των δικαιωμάτων αρχείων και την εκτέλεση ενός κελύφους με αυξημένα προνόμια.
Μεταγλωττίστε τον παραπάνω αρχείο C σε ένα αρχείο κοινόχρηστου αντικειμένου (.so) με:
Τώρα που βρήκαμε ένα SUID δυαδικό που φορτώνει μια βιβλιοθήκη από έναν φάκελο όπου μπορούμε να γράψουμε, ας δημιουργήσουμε τη βιβλιοθήκη σε αυτόν τον φάκελο με τον απαραίτητο όνομα:
Εάν λάβετε ένα σφάλμα όπως
Αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση που ονομάζεται a_function_name
.
GTFOBins είναι μια συλλογή Unix δυαδικών που μπορούν να εκμεταλλευτούν από έναν εισβολέα για να παρακάμψει τους τοπικούς περιορισμούς ασφαλείας. GTFOArgs είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε μόνο να εισάγετε ορίσματα σε ένα εντολή.
Το έργο συλλέγει νόμιμες λειτουργίες των Unix δυαδικών που μπορούν να καταχραστούν για να διαφύγουν από περιορισμένα κελιά, να αναβαθμίσουν ή να διατηρήσουν υψηλά προνομιακά δικαιώματα, να μεταφέρουν αρχεία, να εκκινήσουν bind και αντίστροφα κελιά, και να διευκολύνουν τις άλλες εργασίες μετά την εκμετάλλευση.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
Αν μπορείτε να έχετε πρόσβαση στο sudo -l
μπορείτε να χρησιμοποιήσετε το εργαλείο FallOfSudo για να ελέγξετε αν βρίσκει τρόπο να εκμεταλλευτεί οποιονδήποτε κανόνα sudo.
Σε περιπτώσεις όπου έχετε πρόσβαση sudo αλλά όχι τον κωδικό, μπορείτε να αναβαθμίσετε προνομιακά δικαιώματα με περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αρπάζοντας το διακριτικό συνεδρίας.
Απαιτήσεις για την ανάκτηση προνομιακών δικαιωμάτων:
Έχετε ήδη ένα κέλυφος ως χρήστης "sampleuser"
Ο χρήστης "sampleuser" έχει χρησιμοποιήσει το sudo
για να εκτελέσει κάτι τις τελευταίες 15 λεπτά (από προεπιλογή αυτή είναι η διάρκεια του διακριτικού sudo που μας επιτρέπει να χρησιμοποιούμε το 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
Η πρώτη εκμετάλλευση (exploit.sh
) θα δημιουργήσει το δυαδικό activate_sudo_token
στο /tmp. Μπορείτε να το χρησιμοποιήσετε για ενεργοποίηση του διακριτικού sudo στη συνεδρία σας (δεν θα λάβετε αυτόματα ένα root shell, κάντε sudo su
):
Το δεύτερο exploit (exploit_v2.sh
) θα δημιουργήσει ένα κέλυφος sh στο /tmp υπό την ιδιοκτησία του χρήστη root με το setuid
Το τρίτο exploit (exploit_v3.sh
) θα δημιουργήσει ένα αρχείο sudoers που καθιστά τα sudo tokens αιώνια και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν το sudo.
Εάν έχετε δικαιώματα εγγραφής στον φάκελο ή σε οποιοδήποτε από τα δημιουργημένα αρχεία μέσα στον φάκελο, μπορείτε να χρησιμοποιήσετε το δυαδικό write_sudo_token για δημιουργία ενός sudo token για έναν χρήστη και ένα PID. Για παράδειγμα, αν μπορείτε να αντικαταστήσετε το αρχείο /var/run/sudo/ts/sampleuser και έχετε ένα κέλυφος ως αυτόν τον χρήστη με PID 1234, μπορείτε να αποκτήσετε δικαιώματα sudo χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης κάνοντας:
Το αρχείο /etc/sudoers
και τα αρχεία μέσα στο /etc/sudoers.d
ρυθμίζουν ποιος μπορεί να χρησιμοποιήσει το sudo
και πώς. Αυτά τα αρχεία από προεπιλογή μπορούν να διαβαστούν μόνο από τον χρήστη root και την ομάδα root.
Αν μπορείτε να διαβάσετε αυτό το αρχείο, θα μπορούσατε να αποκτήσετε μερικές ενδιαφέρουσες πληροφορίες, και αν μπορείτε να γράψετε οποιοδήποτε αρχείο, θα μπορούσατε να εξελίξετε τα δικαιώματά σας.
Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτήν την άδεια.
Ένας άλλος τρόπος για να καταχραστείτε αυτές τις άδειες:
Υπάρχουν μερικές εναλλακτικές λύσεις για το δυαδικό sudo
όπως το doas
για το OpenBSD, θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο /etc/doas.conf
Εάν γνωρίζετε ότι ένας χρήστης συνήθως συνδέεται σε ένα μηχάνημα και χρησιμοποιεί το sudo
για να αναβαθμίσει τα προνόμιά του και έχετε μια κέλυφος μέσα σε αυτό το πλαίσιο χρήστη, μπορείτε να δημιουργήσετε ένα νέο εκτελέσιμο sudo που θα εκτελεί τον κώδικά σας ως ριζοδόχο και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, τροποποιήστε το $PATH του πλαισίου χρήστη (για παράδειγμα προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το δικό σας εκτελέσιμο sudo να εκτελείται.
Σημειώστε ότι εάν ο χρήστης χρησιμοποιεί διαφορετικό κέλυφος (όχι bash) θα πρέπει να τροποποιήσετε άλλα αρχεία για να προσθέσετε τη νέα διαδρομή. Για παράδειγμα, το sudo-piggyback τροποποιεί τα ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Μπορείτε να βρείτε ένα άλλο παράδειγμα στο bashdoor.py
Ή να εκτελέσετε κάτι παρόμοιο:
Το αρχείο /etc/ld.so.conf
υποδεικνύει από πού προέρχονται τα φορτωμένα αρχεία διαμόρφωσης. Συνήθως, αυτό το αρχείο περιέχει την ακόλουθη διαδρομή: include /etc/ld.so.conf.d/*.conf
Αυτό σημαίνει ότι τα αρχεία διαμόρφωσης από /etc/ld.so.conf.d/*.conf
θα διαβαστούν. Αυτά τα αρχεία διαμόρφωσης δείχνουν σε άλλους φακέλους όπου οι βιβλιοθήκες θα αναζητηθούν. Για παράδειγμα, το περιεχόμενο του /etc/ld.so.conf.d/libc.conf
είναι /usr/local/lib
. Αυτό σημαίνει ότι το σύστημα θα αναζητήσει βιβλιοθήκες μέσα στον φάκελο /usr/local/lib
.
Αν για κάποιο λόγο ένας χρήστης έχει δικαιώματα εγγραφής σε οποιαδήποτε από τις διαδρομές που υποδεικνύονται: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, οποιοδήποτε αρχείο μέσα στο /etc/ld.so.conf.d/
ή οποιοδήποτε φάκελο μέσα στο αρχείο διαμόρφωσης μέσα στο /etc/ld.so.conf.d/*.conf
, μπορεί να εξελιχθεί σε προνομιακότητα.
Ρίξτε μια ματιά σε πώς να εκμεταλλευτείτε αυτήν την λανθάνουσα ρύθμιση στην ακόλουθη σελίδα:
Αντιγράφοντας τη βιβλιοθήκη στο /var/tmp/flag15/
, θα χρησιμοποιηθεί από το πρόγραμμα σε αυτή τη θέση όπως ορίζεται στη μεταβλητή RPATH
.
Στη συνέχεια δημιούργησε μια κακόβουλη βιβλιοθήκη στο /var/tmp
με gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Οι δυνατότητες του Linux παρέχουν ένα υποσύνολο των διαθέσιμων προνομίων ρίζας σε ένα διεργασία. Αυτό διακόπτει αποτελεσματικά τα προνόμια ρίζας σε μικρότερες και διακριτικές μονάδες. Κάθε μια από αυτές τις μονάδες μπορεί να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο των προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης. Διαβάστε την ακόλουθη σελίδα για να μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις καταχραστείτε:
Linux CapabilitiesΣε έναν κατάλογο, το bit για "εκτέλεση" υποδηλώνει ότι ο χρήστης που επηρεάζεται μπορεί να κάνει "cd" στον φάκελο. Το bit "ανάγνωσης" υποδηλώνει ότι ο χρήστης μπορεί να λίσταρει τα αρχεία, και το bit "εγγραφής" υποδηλώνει ότι ο χρήστης μπορεί να διαγράψει και δημιουργήσει νέα αρχεία.
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο των δικαιωμάτων κατά βούληση, ικανά να αντικαταστήσουν τα παραδοσιακά δικαιώματα ugo/rwx. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή απαγορεύοντας δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης. Περισσότερες λεπτομέρειες μποροϋν να βρεθούν εδώ.
Δώστε στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
Λήψη αρχείων με συγκεκριμένα ACLs από το σύστημα:
Σε παλαιότερες εκδόσεις μπορείτε να αρπάξετε μια συνεδρία κέλυφους ενός διαφορετικού χρήστη (root). Σε νεότερες εκδόσεις θα μπορείτε να συνδεθείτε μόνο σε συνεδρίες οθόνης του δικού σας χρήστη. Ωστόσο, θα μπορούσατε να βρείτε ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία.
Λίστα συνεδριών οθόνης
Σύνδεση σε μια συνεδρία
Αυτό ήταν ένα πρόβλημα με παλιές εκδόσεις tmux. Δεν μπόρεσα να απαγάγω μια συνεδρία tmux (v2.1) που δημιουργήθηκε από το ριζικό χρήστη ως μη προνομιούχος χρήστη.
Λίστα συνεδριών tmux
Συνδεθείτε σε μια συνεδρία
Ελέγξτε το Valentine box από το HTB για ένα παράδειγμα.
Όλα τα κλειδιά SSL και SSH που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κλπ) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να επηρεαστούν από αυτό το σφάλμα. Αυτό το σφάλμα προκαλείται κατά τη δημιουργία ενός νέου κλειδιού ssh σε αυτά τα λειτουργικά συστήματα, καθώς ήταν δυνατές μόνο 32,768 παραλλαγές. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και έχοντας το δημόσιο κλειδί ssh μπορείτε να αναζητήσετε το αντίστοιχο ιδιωτικό κλειδί. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Καθορίζει εάν επιτρέπεται η ελέγχει κωδικού πρόσβασης. Η προεπιλογή είναι no
.
PubkeyAuthentication: Καθορίζει εάν επιτρέπεται η ελέγχει με δημόσιο κλειδί. Η προεπιλογή είναι yes
.
PermitEmptyPasswords: Όταν επιτρέπεται ο έλεγχος κωδικού πρόσβασης, καθορίζει εάν ο διακομιστής επιτρέπει τη σύνδεση σε λογαριασμούς με κενές συμβολοσειρές κωδικού. Η προεπιλογή είναι no
.
Καθορίζει εάν ο ρίζα μπορεί να συνδεθεί χρησιμοποιώντας το ssh, η προεπιλογή είναι no
. Δυνατές τιμές:
yes
: η ρίζα μπορεί να συνδεθεί χρησιμοποιώντας κωδικό και ιδιωτικό κλειδί
without-password
ή prohibit-password
: η ρίζα μπορεί να συνδεθεί μόνο με ιδιωτικό κλειδί
forced-commands-only
: Η ρίζα μπορεί να συνδεθεί μόνο χρησιμοποιώντας ιδιωτικό κλειδί και εάν οριστούν οι επιλογές εντολών
no
: όχι
Καθορίζει τα αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την πιστοποίηση του χρήστη. Μπορεί να περιέχει διακριτικά στοιχεία όπως %h
, τα οποία θα αντικατασταθούν από τον κατάλογο home. Μπορείτε να υποδείξετε απόλυτα μονοπάτια (ξεκινώντας από /
) ή σχετικά μονοπάτια από τον κατάλογο home του χρήστη. Για παράδειγμα:
Η διαμόρφωση αυτή θα υποδείξει ότι εάν προσπαθήσετε να συνδεθείτε με το ιδιωτικό κλειδί του χρήστη "testusername", το ssh θα συγκρίνει το δημόσιο κλειδί του κλειδιού σας με αυτά που βρίσκονται στα /home/testusername/.ssh/authorized_keys
και /home/testusername/access
Η προώθηση του SSH agent σάς επιτρέπει να χρησιμοποιείτε τα τοπικά σας κλειδιά SSH αντί να αφήνετε τα κλειδιά (χωρίς φράσεις κλειδιού!) να κάθονται στον διακομιστή σας. Έτσι, θα μπορείτε να μεταβείτε μέσω ssh σε έναν οικοδεσπότη και από εκεί να μεταβείτε σε έναν άλλο οικοδεσπότη χρησιμοποιώντας το κλειδί που βρίσκεται στον αρχικό σας οικοδεσπότη.
Πρέπει να ορίσετε αυτήν την επιλογή στο $HOME/.ssh.config
όπως εδώ:
Παρατηρήστε ότι εάν το Host
είναι *
, κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να έχει πρόσβαση στα κλειδιά (το οποίο αποτελεί πρόβλημα ασφαλείας).
Το αρχείο /etc/ssh_config
μπορεί να αντικαταστήσει αυτές τις επιλογές και να επιτρέψει ή να απαγορεύσει αυτή τη διαμόρφωση.
Το αρχείο /etc/sshd_config
μπορεί να επιτρέψει ή να απαγορεύσει την προώθηση του ssh-agent με τη λέξη-κλειδί AllowAgentForwarding
(η προεπιλογή είναι επιτρέπεται).
Εάν ανακαλύψετε ότι η προώθηση του Agent είναι διαμορφωμένη σε ένα περιβάλλον, διαβάστε την ακόλουθη σελίδα καθώς μπορείτε να την εκμεταλλευτείτε για να αναβαθμίσετε τα προνόμια:
SSH Forward Agent exploitationΤο αρχείο /etc/profile
και τα αρχεία υπό τον φάκελο /etc/profile.d/
είναι σενάρια που εκτελούνται όταν ένας χρήστης εκτελεί ένα νέο κέλυφος. Επομένως, εάν μπορείτε να γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να αναβαθμίσετε τα προνόμια.
Ανάλογα με το λειτουργικό σύστημα τα αρχεία /etc/passwd
και /etc/shadow
μπορεί να έχουν διαφορετική ονομασία ή να υπάρχει ένα αντίγραφο. Συνεπώς, συνιστάται να βρείτε όλα αυτά τα αρχεία και να ελέγξετε αν μπορείτε να τα διαβάσετε για να δείτε αν υπάρχουν hashes μέσα στα αρχεία:
Σε ορισμένες περιπτώσεις μπορείτε να βρείτε κατακερματισμένους κωδικούς πρόσβασης μέσα στο αρχείο /etc/passwd
(ή ισοδύναμό του)
Πρώτα, δημιουργήστε έναν κωδικό πρόσβασης με έναν από τους παρακάτω εντολείς.
Στη συνέχεια προσθέστε τον χρήστη hacker
και προσθέστε τον δημιουργημένο κωδικό πρόσβασης.
Π.χ .: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Μπορείτε τώρα να χρησιμοποιήσετε την εντολή su
με hacker:hacker
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε ένα ψευδώνυμο χρήστη χωρίς κωδικό πρόσβασης. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να μειώσετε την τρέχουσα ασφάλεια της συσκευής.
ΣΗΜΕΙΩΣΗ: Στις πλατφόρμες BSD το /etc/passwd
βρίσκεται στο /etc/pwd.db
και /etc/master.passwd
, επίσης το /etc/shadow
μετονομάζεται σε /etc/spwd.db
.
Θα πρέπει να ελέγξετε αν μπορείτε να γράψετε σε κάποια ευαίσθητα αρχεία. Για παράδειγμα, μπορείτε να γράψετε σε κάποιο αρχείο ρύθμισης υπηρεσίας;
Για παράδειγμα, αν η μηχανή εκτελεί ένα διακομιστή tomcat και μπορείτε να τροποποιήσετε το αρχείο ρύθμισης υπηρεσίας Tomcat μέσα στο /etc/systemd/, τότε μπορείτε να τροποποιήσετε τις γραμμές:
Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει το tomcat.
Οι παρακάτω φάκελοι μπορεί να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Πιθανόν να μην μπορείτε να διαβάσετε τον τελευταίο, αλλά δοκιμάστε)
Διαβάστε τον κώδικα του linPEAS, αναζητά πολλά δυνητικά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης. Ένα ακόμα ενδιαφέρον εργαλείο που μπορείτε να χρησιμοποιήσετε για αυτό είναι το: LaZagne το οποίο είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών που αποθηκεύονται σε έναν τοπικό υπολογιστή για Windows, Linux & Mac.
Αν μπορείτε να διαβάσετε τα αρχεία καταγραφής, μπορείτε να βρείτε ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτά. Όσο πιο παράξενο είναι το αρχείο καταγραφής, τόσο πιο ενδιαφέρον θα είναι (πιθανόν). Επίσης, κάποια "κακά" ρυθμισμένα (με backdoor?) αρχεία καταγραφής ελέγχου μπορεί να σας επιτρέψουν να καταγράψετε κωδικούς πρόσβασης μέσα σε αυτά όπως εξηγείται σε αυτήν τη δημοσίευση: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Για να διαβάσετε τα αρχεία καταγραφής της ομάδας adm θα είναι πραγματικά χρήσιμο.
Θα πρέπει επίσης να ελέγξετε αρχεία που περιέχουν τη λέξη "password" στο όνομά τους ή μέσα στο περιεχόμενο, καθώς επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή hashes regexps. Δε θα αναφέρω εδώ πως να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το linpeas.
Αν γνωρίζετε από πού θα εκτελεστεί ένα script python και μπορείτε να γράψετε μέσα σε αυτόν τον φάκελο ή μπορείτε να τροποποιήσετε τις βιβλιοθήκες python, μπορείτε να τροποποιήσετε τη βιβλιοθήκη του λειτουργικού συστήματος και να την προσθέσετε backdoor (αν μπορείτε να γράψετε εκεί που θα εκτελεστεί το script python, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
Για να προσθέσετε backdoor στη βιβλιοθήκη, απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την ακόλουθη γραμμή (αλλάξτε την IP και τη θύρα):
Μια ευπάθεια στο logrotate
επιτρέπει σε χρήστες με δικαιώματα εγγραφής σε ένα αρχείο καταγραφής ή στους γονεϊκούς καταλόγους του να αποκτήσουν πιθανά αναβαθμισμένα προνόμια. Αυτό συμβαίνει επειδή το logrotate
, το οποίο συχνά τρέχει ως root, μπορεί να χειριστεί ώστε να εκτελέσει τυχαία αρχεία, ειδικά σε καταλόγους όπως ο /etc/bash_completion.d/. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο /var/log αλλά και σε οποιονδήποτε κατάλογο εφαρμόζεται η περιστροφή των καταγραφών.
Αυτή η ευπάθεια επηρεάζει την έκδοση 3.18.0
και παλαιότερες του logrotate
Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορούν να βρεθούν σε αυτήν τη σελίδα: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια με το logrotten.
Αυτή η ευπάθεια είναι πολύ παρόμοια με το CVE-2016-1247 (καταγραφές nginx), οπότε κάθε φορά που διαπιστώνετε ότι μπορείτε να τροποποιήσετε τις καταγραφές, ελέγξτε ποιος διαχειρίζεται αυτές τις καταγραφές και ελέγξτε αν μπορείτε να αναβαθμίσετε τα προνόμια αντικαθιστώντας τις καταγραφές με συμβολικούς συνδέσμους.
Αναφορά ευπάθειας: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
Εάν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να εγγράψει ένα σενάριο ifcf-<whatever>
στο /etc/sysconfig/network-scripts ή μπορεί να προσαρμόσει ένα υπάρχον, τότε το σύστημά σας είναι παραβιασμένο.
Τα σενάρια δικτύου, ifcg-eth0 για παράδειγμα, χρησιμοποιούνται για τις συνδέσεις δικτύου. Μοιάζουν ακριβώς με αρχεία .INI. Ωστόσο, στο Linux είναι ~ενεργοποιημένα~ από το Network Manager (dispatcher.d).
Στην περίπτωσή μου, το χαρακτηριστικό NAME=
σε αυτά τα σενάρια δικτύου δεν χειρίζεται σωστά. Εάν έχετε κενό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το τμήμα μετά το κενό/κενό διάστημα. Αυτό σημαίνει ότι ό,τι ακολουθεί μετά το πρώτο κενό/κενό διάστημα εκτελείται ως root.
Για παράδειγμα: /etc/sysconfig/network-scripts/ifcfg-1337
Ο κατάλογος /etc/init.d
είναι η έδρα των σεναρίων για το System V init (SysVinit), το κλασικό σύστημα διαχείρισης υπηρεσιών του Linux. Περιλαμβάνει σενάρια για εκκίνηση
, διακοπή
, επανεκκίνηση
και μερικές φορές επαναφόρτωση
υπηρεσιών. Αυτά μπορούν να εκτελεστούν απευθείας ή μέσω συμβολικών συνδέσμων που βρίσκονται στον κατάλογο /etc/rc?.d/
. Ένα εναλλακτικό μονοπάτι σε συστήματα Redhat είναι το /etc/rc.d/init.d
.
Από την άλλη, το /etc/init
σχετίζεται με το Upstart, ένα νεότερο σύστημα διαχείρισης υπηρεσιών που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα σενάρια SysVinit εξακολουθούν να χρησιμοποιούνται σε συνδυασμό με τις διαμορφώσεις Upstart λόγω μιας στρώσης συμβατότητας στο Upstart.
Το systemd εμφανίζεται ως ένας σύγχρονος διαχειριστής εκκίνησης και υπηρεσιών, προσφέροντας προηγμένες λειτουργίες όπως εκκίνηση δαίμονα κατόπιν αιτήματος, διαχείριση αυτόματης τοποθέτησης και στιγμιότυπα κατάστασης συστήματος. Οργανώνει τα αρχεία στον κατάλογο /usr/lib/systemd/
για πακέτα διανομής και στον κατάλογο /etc/systemd/system/
για τροποποιήσεις διαχειριστή, βελτιώνοντας τη διαδικασία διαχείρισης συστήματος.
Στατικά δυαδικά αρχεία impacket
LinEnum: https://github.com/rebootuser/LinEnum(-t option) Enumy: https://github.com/luke-goddard/enumy Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux Kernelpop: Απαριθμεί ευπάθειες πυρήνα σε Linux και MAC https://github.com/spencerdodd/kernelpop Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester EvilAbigail (με φυσική πρόσβαση): https://github.com/GDSSecurity/EvilAbigail Συλλογή περισσότερων σεναρίων: https://github.com/1N3/PrivEsc
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)