Linux Privilege Escalation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ας αρχίσουμε να αποκτούμε κάποιες γνώσεις για το λειτουργικό σύστημα που εκτελείται
Αν έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή PATH
μπορεί να είστε σε θέση να υποκλέψετε κάποιες βιβλιοθήκες ή δυαδικά αρχεία:
Ενδιαφέρουσες πληροφορίες, κωδικοί πρόσβασης ή κλειδιά API στις μεταβλητές περιβάλλοντος;
Ελέγξτε την έκδοση του πυρήνα και αν υπάρχει κάποια εκμετάλλευση που μπορεί να χρησιμοποιηθεί για την κλιμάκωση των δικαιωμάτων.
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικούς ήδη compiled exploits εδώ: https://github.com/lucyoa/kernel-exploits και exploitdb sploits. Άλλες τοποθεσίες όπου μπορείτε να βρείτε μερικούς compiled 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 Privilege Escalation - Linux Kernel <= 3.19.0-73.8
Βασισμένο στις ευάλωτες εκδόσεις sudo που εμφανίζονται σε:
Μπορείτε να ελέγξετε αν η έκδοση του sudo είναι ευάλωτη χρησιμοποιώντας αυτό το grep.
Από @sickrov
Ελέγξτε το smasher2 box of HTB για ένα παράδειγμα του πώς αυτή η ευπάθεια θα μπορούσε να εκμεταλλευτεί
Αν βρίσκεστε μέσα σε ένα docker container, μπορείτε να προσπαθήσετε να ξεφύγετε από αυτό:
Docker SecurityΕλέγξτε τι είναι τοποθετημένο και αποτοποθετημένο, πού και γιατί. Αν κάτι είναι αποτοποθετημένο, μπορείτε να προσπαθήσετε να το τοποθετήσετε και να ελέγξετε για ιδιωτικές πληροφορίες.
Καταγράψτε χρήσιμα δυαδικά αρχεία
Επίσης, ελέγξτε αν είναι εγκατεστημένος οποιοσδήποτε μεταγλωττιστής. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσετε κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσετε στη μηχανή όπου θα το χρησιμοποιήσετε (ή σε μία παρόμοια).
Check for the version of the installed packages and services. Maybe there is some old Nagios version (for example) that could be exploited for escalating privileges… It is recommended to check manually the version of the more suspicious installed software.
Αν έχετε πρόσβαση SSH στη μηχανή, μπορείτε επίσης να χρησιμοποιήσετε openVAS για να ελέγξετε για παρωχημένο και ευάλωτο λογισμικό που είναι εγκατεστημένο στη μηχανή.
Σημειώστε ότι αυτές οι εντολές θα δείξουν πολλές πληροφορίες που θα είναι κυρίως άχρηστες, επομένως συνιστάται κάποιες εφαρμογές όπως το OpenVAS ή παρόμοιες που θα ελέγξουν αν κάποια εγκατεστημένη έκδοση λογισμικού είναι ευάλωτη σε γνωστά exploits
Ρίξτε μια ματιά σε ποιες διαδικασίες εκτελούνται και ελέγξτε αν κάποια διαδικασία έχει περισσότερα δικαιώματα από ό,τι θα έπρεπε (ίσως μια tomcat που εκτελείται από τον root;)
Πάντα να ελέγχετε για πιθανές electron/cef/chromium debuggers που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να ανεβάσετε δικαιώματα. Linpeas ανιχνεύουν αυτά ελέγχοντας την παράμετρο --inspect
μέσα στη γραμμή εντολών της διαδικασίας.
Επίσης ελέγξτε τα δικαιώματά σας πάνω στα δυαδικά αρχεία των διαδικασιών, ίσως μπορείτε να αντικαταστήσετε κάποιον.
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το pspy για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
Ορισμένες υπηρεσίες ενός διακομιστή αποθηκεύουν διαπιστευτήρια σε καθαρό κείμενο μέσα στη μνήμη. Κανονικά θα χρειαστείτε δικαιώματα root για να διαβάσετε τη μνήμη διαδικασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη root και θέλετε να ανακαλύψετε περισσότερα διαπιστευτήρια. Ωστόσο, θυμηθείτε ότι ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε.
Σημειώστε ότι σήμερα οι περισσότερες μηχανές δεν επιτρέπουν το ptrace από προεπιλογή, που σημαίνει ότι δεν μπορείτε να απορρίψετε άλλες διαδικασίες που ανήκουν στον μη προνομιούχο χρήστη σας.
Το αρχείο /proc/sys/kernel/yama/ptrace_scope ελέγχει την προσβασιμότητα του ptrace:
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.
Αν έχετε πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) θα μπορούσατε να αποκτήσετε το Heap και να αναζητήσετε μέσα στα διαπιστευτήριά της.
Για μια δεδομένη ταυτότητα διαδικασίας, οι χάρτες δείχνουν πώς είναι χαρτογραφημένη η μνήμη μέσα στον εικονικό χώρο διευθύνσεων αυτής της διαδικασίας; δείχνει επίσης τις άδειες κάθε χαρτογραφημένης περιοχής. Το mem ψευδοαρχείο εκθέτει τη μνήμη των διαδικασιών. Από το αρχείο maps γνωρίζουμε ποιες περιοχές μνήμης είναι αναγνώσιμες και τους μετατοπιστές τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να αναζητήσουμε στο αρχείο mem και να εξάγουμε όλες τις αναγνώσιμες περιοχές σε ένα αρχείο.
/dev/mem
παρέχει πρόσβαση στη φυσική μνήμη του συστήματος, όχι στη εικονική μνήμη. Ο εικονικός χώρος διευθύνσεων του πυρήνα μπορεί να προσπελαστεί χρησιμοποιώντας το /dev/kmem.
Τυπικά, το /dev/mem
είναι αναγνώσιμο μόνο από τον root και την ομάδα kmem.
Το ProcDump είναι μια επαναστατική έκδοση του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για Windows. Μπορείτε να το βρείτε στο https://github.com/Sysinternals/ProcDump-for-Linux
Για να εξάγετε τη μνήμη μιας διαδικασίας μπορείτε να χρησιμοποιήσετε:
https://github.com/hajzer/bash-memory-dump (root) - _Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις root και να εξάγετε τη διαδικασία που ανήκει σε εσάς
Script A.5 από https://www.delaat.net/rp/2016-2017/p97/report.pdf (απαιτείται root)
Εάν διαπιστώσετε ότι η διαδικασία αυθεντικοποίησης εκτελείται:
Μπορείτε να εκτελέσετε dump της διαδικασίας (δείτε τις προηγούμενες ενότητες για να βρείτε διάφορους τρόπους για να εκτελέσετε dump της μνήμης μιας διαδικασίας) και να αναζητήσετε διαπιστευτήρια μέσα στη μνήμη:
Το εργαλείο 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:
Ελέγξτε αν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα σενάριο που εκτελείται από τον root (ευπάθεια wildcard; μπορεί να τροποποιήσει αρχεία που χρησιμοποιεί ο root; χρησιμοποιήστε symlinks; δημιουργήστε συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο root;).
Για παράδειγμα, μέσα στο /etc/crontab μπορείτε να βρείτε το PATH: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Σημειώστε πώς ο χρήστης "user" έχει δικαιώματα εγγραφής στο /home/user)
Αν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή σενάριο χωρίς να ορίσει το path. Για παράδειγμα: * * * * root overwrite.sh Τότε, μπορείτε να αποκτήσετε ένα root shell χρησιμοποιώντας:
Αν ένα σενάριο που εκτελείται από τον root έχει ένα “*” μέσα σε μια εντολή, θα μπορούσατε να το εκμεταλλευτείτε για να κάνετε απροσδόκητα πράγματα (όπως privesc). Παράδειγμα:
Αν το wildcard προηγείται από μια διαδρομή όπως /some/path/* , δεν είναι ευάλωτο (ούτε ./* είναι).
Διαβάστε την παρακάτω σελίδα για περισσότερα κόλπα εκμετάλλευσης wildcard:
Wildcards Spare tricksΑν μπορείτε να τροποποιήσετε ένα σενάριο cron που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα:
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί ένα κατάλογο όπου έχετε πλήρη πρόσβαση, ίσως θα ήταν χρήσιμο να διαγράψετε αυτόν τον φάκελο και να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να κλιμακώσετε τα δικαιώματα.
Για παράδειγμα, για να παρακολουθήσετε κάθε 0.1s κατά τη διάρκεια 1 λεπτού, ταξινομήστε κατά λιγότερες εκτελεσμένες εντολές και διαγράψτε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε:
Μπορείτε επίσης να χρησιμοποιήσετε pspy (αυτό θα παρακολουθεί και θα καταγράφει κάθε διαδικασία που ξεκινά).
Είναι δυνατόν να δημιουργήσετε ένα cronjob βάζοντας έναν χαρακτήρα επιστροφής καροτσιού μετά από ένα σχόλιο (χωρίς χαρακτήρα νέας γραμμής), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα επιστροφής καροτσιού):
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε .service
αρχείο, αν μπορείτε, θα μπορούσατε να το τροποποιήσετε ώστε να εκτελεί το backdoor σας όταν η υπηρεσία είναι ξεκινά, επανεκκινείται ή σταματά (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).
Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο .service αρχείο με ExecStart=/tmp/script.sh
Λάβετε υπόψη ότι αν έχετε δικαιώματα εγγραφής σε δυαδικά αρχεία που εκτελούνται από υπηρεσίες, μπορείτε να τα αλλάξετε με backdoors ώστε όταν οι υπηρεσίες εκτελούνται ξανά, τα backdoors να εκτελούνται.
Μπορείτε να δείτε το PATH που χρησιμοποιεί η systemd με:
Αν διαπιστώσετε ότι μπορείτε να γράφετε σε οποιονδήποτε από τους φακέλους της διαδρομής, μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα. Πρέπει να αναζητήσετε σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών όπως:
Τότε, δημιουργήστε ένα εκτελέσιμο με το ίδιο όνομα όπως το σχετικό διαδρομή δυαδικό μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν ζητηθεί από την υπηρεσία να εκτελέσει την ευάλωτη ενέργεια (Έναρξη, Διακοπή, Επαναφόρτωση), το backdoor σας θα εκτελείται (οι μη προνομιούχοι χρήστες συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε το sudo -l
).
Μάθετε περισσότερα για τις υπηρεσίες με το man systemd.service
.
Χρονοδιακόπτες είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε **.timer**
που ελέγχουν τα αρχεία **.service**
ή γεγονότα. Χρονοδιακόπτες μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογιακού χρόνου και μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα.
Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με:
Αν μπορείτε να τροποποιήσετε έναν χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελεί κάποιες υπάρχουσες μονάδες του systemd (όπως ένα .service
ή ένα .target
)
Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η Μονάδα:
Η μονάδα που θα ενεργοποιηθεί όταν λήξει αυτός ο χρονοδιακόπτης. Το επιχείρημα είναι ένα όνομα μονάδας, του οποίου το επίθημα δεν είναι ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα χρονοδιακόπτη, εκτός από το επίθημα. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας χρονοδιακόπτη να είναι ονομάζονται ομοίως, εκτός από το επίθημα.
Επομένως, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαστεί να:
Βρείτε κάποια μονάδα systemd (όπως μια .service
) που εκτελεί ένα εγγράψιμο δυαδικό αρχείο
Βρείτε κάποια μονάδα systemd που εκτελεί μια σχετική διαδρομή και έχετε δικαιώματα εγγραφής πάνω στη διαδρομή systemd (για να προσποιηθείτε ότι είναι εκτελέσιμο)
Μάθετε περισσότερα για τους χρονοδιακόπτες με man systemd.timer
.
Για να ενεργοποιήσετε έναν χρονοδιακόπτη χρειάζεστε δικαιώματα root και να εκτελέσετε:
Note the timer is activated by creating a symlink to it on /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix Domain Sockets (UDS) enable process communication on the same or different machines within client-server models. They utilize standard Unix descriptor files for inter-computer communication and are set up through .socket
files.
Sockets can be configured using .socket
files.
Learn more about sockets with man systemd.socket
. Inside this file, several interesting parameters can be configured:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να υποδείξει πού θα ακούσει το socket (η διαδρομή του αρχείου socket AF_UNIX, το IPv4/6 και/ή τον αριθμό θύρας για να ακούσει, κ.λπ.)
Accept
: Δέχεται ένα boolean επιχείρημα. Αν είναι true, μια υπηρεσία δημιουργείται για κάθε εισερχόμενη σύνδεση και μόνο το socket σύνδεσης περνά σε αυτήν. Αν είναι false, όλα τα listening sockets περνούν στην ξεκινώμενη μονάδα υπηρεσίας, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μια ενιαία μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. Προεπιλογή είναι το false. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για Accept=no
.
ExecStartPre
, ExecStartPost
: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες εκτελούνται πριν ή μετά τη δημιουργία και δέσμευση των listening sockets/FIFOs, αντίστοιχα. Ο πρώτος τόκος της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διαδικασία.
ExecStopPre
, ExecStopPost
: Πρόσθετες εντολές που εκτελούνται πριν ή μετά το κλείσιμο και την αφαίρεση των listening sockets/FIFOs, αντίστοιχα.
Service
: Προσδιορίζει το όνομα της μονάδας υπηρεσίας που θα ενεργοποιηθεί με εισερχόμενη κίνηση. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με το socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
If you find a writable .socket
file you can add at the beginning of the [Socket]
section something like: ExecStartPre=/home/kali/sys/backdoor
and the backdoor will be executed before the socket is created. Therefore, you will probably need to wait until the machine is rebooted.
&#xNAN;Note that the system must be using that socket file configuration or the backdoor won't be executed
If you identify any writable socket (now we are talking about Unix Sockets and not about the config .socket
files), then you can communicate with that socket and maybe exploit a vulnerability.
Παράδειγμα εκμετάλλευσης:
Socket Command InjectionΣημειώστε ότι μπορεί να υπάρχουν κάποια sockets που ακούν για HTTP αιτήματα (Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets). Μπορείτε να το ελέγξετε με:
Αν το socket απαντήσει με ένα HTTP αίτημα, τότε μπορείτε να επικοινωνήσετε μαζί του και ίσως να εκμεταλλευτείτε κάποια ευπάθεια.
Το Docker socket, που συχνά βρίσκεται στο /var/run/docker.sock
, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Από προεπιλογή, είναι γράψιμο από τον χρήστη root
και τα μέλη της ομάδας docker
. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο.
Αν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές:
These commands allow you to run a container with root-level access to the host's file system.
In cases where the Docker CLI isn't available, the Docker socket can still be manipulated using the Docker API and curl
commands.
List Docker Images: Retrieve the list of available images.
Create a Container: Send a request to create a container that mounts the host system's root directory.
Start the newly created container:
Attach to the Container: Use socat
to establish a connection to the container, enabling command execution within it.
After setting up the socat
connection, you can execute commands directly in the container with root-level access to the host's filesystem.
Note that if you have write permissions over the docker socket because you are inside the group docker
you have more ways to escalate privileges. If the docker API is listening in a port you can also be able to compromise it.
Check more ways to break out from docker or abuse it to escalate privileges in:
Docker SecurityIf you find that you can use the ctr
command read the following page as you may be able to abuse it to escalate privileges:
If you find that you can use the runc
command read the following page as you may be able to abuse it to escalate privileges:
D-Bus είναι ένα προηγμένο σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC) που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας βελτιωμένα sockets τομέα UNIX. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ των στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες.
Το D-Bus λειτουργεί με ένα μοντέλο επιτρεπόμενου/απαγορευμένου, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση προνομίων μέσω της εκμετάλλευσης αυτών των αδειών.
Ένα παράδειγμα μιας τέτοιας πολιτικής στο /etc/dbus-1/system.d/wpa_supplicant.conf
παρέχεται, λεπτομερώς τις άδειες για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από fi.w1.wpa_supplicant1
.
Πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές "προεπιλογής" ισχύουν για όλα τα μη καλυπτόμενα από άλλες συγκεκριμένες πολιτικές.
Μάθετε πώς να καταγράφετε και να εκμεταλλεύεστε μια επικοινωνία D-Bus εδώ:
D-Bus Enumeration & Command Injection Privilege EscalationΕίναι πάντα ενδιαφέρον να καταγράφετε το δίκτυο και να προσδιορίζετε τη θέση της μηχανής.
Πάντα να ελέγχετε τις υπηρεσίες δικτύου που εκτελούνται στη μηχανή με την οποία δεν μπορέσατε να αλληλεπιδράσετε πριν την πρόσβαση σε αυτήν:
Ελέγξτε αν μπορείτε να καταγράψετε την κίνηση. Αν μπορείτε, θα μπορούσατε να αποκτήσετε κάποιες διαπιστευτήρια.
Έλεγξε ποιος είσαι, ποιες άδειες έχεις, ποιοι χρήστες είναι στα συστήματα, ποιοι μπορούν να συνδεθούν και ποιοι έχουν root άδειες:
Ορισμένες εκδόσεις του Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει στους χρήστες με UID > INT_MAX να κερδίζουν δικαιώματα. Περισσότερες πληροφορίες: εδώ, εδώ και εδώ.
Εκμεταλλευτείτε το χρησιμοποιώντας: systemd-run -t /bin/bash
Ελέγξτε αν είστε μέλος κάποιου γκρουπ που θα μπορούσε να σας δώσει δικαιώματα root:
Interesting Groups - Linux PrivescΕλέγξτε αν υπάρχει κάτι ενδιαφέρον μέσα στο clipboard (αν είναι δυνατόν)
Αν γνωρίζετε οποιονδήποτε κωδικό του περιβάλλοντος δοκιμάστε να συνδεθείτε ως κάθε χρήστης χρησιμοποιώντας τον κωδικό.
Αν δεν σας πειράζει να κάνετε πολύ θόρυβο και τα δυαδικά su
και timeout
είναι παρόντα στον υπολογιστή, μπορείτε να προσπαθήσετε να κάνετε brute-force χρήστη χρησιμοποιώντας su-bruteforce.
Linpeas με την παράμετρο -a
προσπαθεί επίσης να κάνει brute-force χρήστες.
Αν διαπιστώσετε ότι μπορείτε να γράψετε μέσα σε κάποιον φάκελο του $PATH μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα σας δημιουργώντας μια πίσω πόρτα μέσα στον εγγράψιμο φάκελο με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από έναν διαφορετικό χρήστη (ιδανικά root) και που δεν φορτώνεται από φάκελο που βρίσκεται πριν από τον εγγράψιμο φάκελο σας στο $PATH.
Μπορεί να σας επιτρέπεται να εκτελέσετε κάποια εντολή χρησιμοποιώντας sudo ή μπορεί να έχουν το bit suid. Ελέγξτε το χρησιμοποιώντας:
Ορισμένες αναπάντεχες εντολές σας επιτρέπουν να διαβάσετε και/ή να γράψετε αρχεία ή ακόμη και να εκτελέσετε μια εντολή. Για παράδειγμα:
Η ρύθμιση του Sudo μπορεί να επιτρέπει σε έναν χρήστη να εκτελεί κάποια εντολή με τα δικαιώματα άλλου χρήστη χωρίς να γνωρίζει τον κωδικό πρόσβασης.
Σε αυτό το παράδειγμα, ο χρήστης demo
μπορεί να εκτελέσει vim
ως root
, είναι τώρα απλό να αποκτήσει κανείς ένα shell προσθέτοντας ένα ssh key στον κατάλογο root ή καλώντας sh
.
Αυτή η οδηγία επιτρέπει στον χρήστη να ορίσει μια μεταβλητή περιβάλλοντος κατά την εκτέλεση κάτι:
Αυτό το παράδειγμα, βασισμένο στη μηχανή HTB Admirer, ήταν ευάλωτο σε PYTHONPATH hijacking για να φορτώσει μια αυθαίρετη βιβλιοθήκη python ενώ εκτελεί το σενάριο ως 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 δυαδικού αρχείου).
Παραδείγματα payload για εκτέλεση.
Αν το suid δυαδικό αρχείο εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή, τότε, μπορείς να προσπαθήσεις να εξάγεις μια συνάρτηση με το όνομα της εντολής που καλεί το αρχείο suid.
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί /usr/sbin/service apache2 start πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις:
Then, when you call the suid binary, this function will be executed
The LD_PRELOAD environment variable is used to specify one or more shared libraries (.so files) to be loaded by the loader before all others, including the standard C library (libc.so
). This process is known as preloading a library.
However, to maintain system security and prevent this feature from being exploited, particularly with suid/sgid executables, the system enforces certain conditions:
The loader disregards LD_PRELOAD for executables where the real user ID (ruid) does not match the effective user ID (euid).
For executables with suid/sgid, only libraries in standard paths that are also suid/sgid are preloaded.
Η εκμετάλλευση δικαιωμάτων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελείτε εντολές με 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", που θα περιέχει τον παρακάτω κώδικα:
Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει στην ανύψωση δικαιωμάτων μέσω της χειραγώγησης των αδειών αρχείων και της εκτέλεσης ενός shell με ανυψωμένα δικαιώματα.
Μεταγλωττίστε το παραπάνω αρχείο C σε ένα κοινόχρηστο αντικείμενο (.so) με:
Τέλος, η εκτέλεση του επηρεαζόμενου SUID δυαδικού αρχείου θα πρέπει να ενεργοποιήσει την εκμετάλλευση, επιτρέποντας πιθανή παραβίαση του συστήματος.
Τώρα που έχουμε βρει ένα SUID δυαδικό αρχείο που φορτώνει μια βιβλιοθήκη από έναν φάκελο όπου μπορούμε να γράψουμε, ας δημιουργήσουμε τη βιβλιοθήκη σε αυτόν τον φάκελο με το απαραίτητο όνομα:
Αν λάβετε ένα σφάλμα όπως
αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση που ονομάζεται a_function_name
.
GTFOBins είναι μια επιμελημένη λίστα Unix δυαδικών αρχείων που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψουν τους τοπικούς περιορισμούς ασφαλείας. GTFOArgs είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε μόνο να εισάγετε επιχειρήματα σε μια εντολή.
Το έργο συλλέγει νόμιμες συναρτήσεις Unix δυαδικών αρχείων που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφη, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα δικαιώματα, να μεταφέρουν αρχεία, να δημιουργήσουν 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")}'
Εάν μπορείτε να αποκτήσετε πρόσβαση στο 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
):
The δεύτερη εκμετάλλευση (exploit_v2.sh
) θα δημιουργήσει ένα sh shell στο /tmp κατοχυρωμένο από τον root με setuid
Η τρίτη εκμετάλλευση (exploit_v3.sh
) θα δημιουργήσει ένα αρχείο sudoers που καθιστά τους sudo tokens αιώνιους και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo
Αν έχετε δικαιώματα εγγραφής στον φάκελο ή σε οποιοδήποτε από τα δημιουργημένα αρχεία μέσα στον φάκελο, μπορείτε να χρησιμοποιήσετε το δυαδικό write_sudo_token για να δημιουργήσετε ένα sudo token για έναν χρήστη και PID. Για παράδειγμα, αν μπορείτε να αντικαταστήσετε το αρχείο /var/run/sudo/ts/sampleuser και έχετε ένα shell ως αυτός ο χρήστης με PID 1234, μπορείτε να αποκτήσετε δικαιώματα sudo χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης κάνοντας:
Το αρχείο /etc/sudoers
και τα αρχεία μέσα στο /etc/sudoers.d
ρυθμίζουν ποιος μπορεί να χρησιμοποιήσει το sudo
και πώς. Αυτά τα αρχεία κατά προεπιλογή μπορούν να διαβαστούν μόνο από τον χρήστη root και την ομάδα root.
Αν μπορείτε να διαβάσετε αυτό το αρχείο, θα μπορούσατε να αποκτήσετε κάποιες ενδιαφέρουσες πληροφορίες, και αν μπορείτε να γράψετε οποιοδήποτε αρχείο, θα είστε σε θέση να κλιμακώσετε τα δικαιώματα.
Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτήν την άδεια.
Ένας άλλος τρόπος για να καταχραστείτε αυτές τις άδειες:
Υπάρχουν μερικές εναλλακτικές στο δυαδικό sudo
, όπως το doas
για το OpenBSD, θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο /etc/doas.conf
Αν γνωρίζετε ότι ένας χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το sudo
για να κλιμακώσει τα δικαιώματα και έχετε αποκτήσει ένα shell μέσα σε αυτό το περιβάλλον χρήστη, μπορείτε να δημιουργήσετε ένα νέο εκτελέσιμο sudo που θα εκτελεί τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, τροποποιήστε το $PATH του περιβάλλοντος χρήστη (για παράδειγμα προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το εκτελέσιμο sudo σας να εκτελείται.
Σημειώστε ότι αν ο χρήστης χρησιμοποιεί ένα διαφορετικό shell (όχι 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 παρέχουν ένα υποσύνολο των διαθέσιμων δικαιωμάτων root σε μια διαδικασία. Αυτό σπάει αποτελεσματικά τα δικαιώματα root σε μικρότερες και διακριτές μονάδες. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διαδικασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο δικαιωμάτων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης. Διαβάστε την παρακάτω σελίδα για να μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις εκμεταλλευτείτε:
Linux CapabilitiesΣε έναν κατάλογο, το bit για "εκτέλεση" υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "cd" στον φάκελο. Το "ανάγνωση" bit υποδηλώνει ότι ο χρήστης μπορεί να καταγράψει τα αρχεία, και το "γραφή" bit υποδηλώνει ότι ο χρήστης μπορεί να διαγράψει και να δημιουργήσει νέα αρχεία.
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανές να υπερκαλύπτουν τα παραδοσιακά δικαιώματα ugo/rwx. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης. Περισσότερες λεπτομέρειες μπορείτε να βρείτε εδώ.
Δώστε στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
Λάβετε αρχεία με συγκεκριμένα ACL από το σύστημα:
Σε παλιές εκδόσεις μπορείς να υφαρπάξεις κάποιες συνεδρίες κελύφους ενός διαφορετικού χρήστη (root). Σε νεότερες εκδόσεις θα μπορείς να συνδεθείς μόνο σε συνεδρίες οθόνης του δικού σου χρήστη. Ωστόσο, μπορείς να βρεις ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία.
Λίστα συνεδριών οθόνης
Σύνδεση σε μια συνεδρία
Αυτό ήταν ένα πρόβλημα με παλιές εκδόσεις tmux. Δεν μπόρεσα να υποκλέψω μια συνεδρία tmux (v2.1) που δημιουργήθηκε από τον root ως μη προνομιούχος χρήστης.
List tmux sessions
Σύνδεση σε μια συνεδρία
Check Valentine box from HTB for an example.
Όλα τα SSL και SSH κλειδιά που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κ.λπ.) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να επηρεάζονται από αυτό το σφάλμα. Αυτό το σφάλμα προκαλείται κατά τη δημιουργία ενός νέου ssh κλειδιού σε αυτά τα λειτουργικά συστήματα, καθώς μόνο 32,768 παραλλαγές ήταν δυνατές. Αυτό σημαίνει ότι όλες οι δυνατότητες μπορούν να υπολογιστούν και έχοντας το δημόσιο κλειδί ssh μπορείτε να αναζητήσετε το αντίστοιχο ιδιωτικό κλειδί. Μπορείτε να βρείτε τις υπολογισμένες δυνατότητες εδώ: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Καθορίζει εάν επιτρέπεται η αυθεντικοποίηση με κωδικό πρόσβασης. Η προεπιλογή είναι no
.
PubkeyAuthentication: Καθορίζει εάν επιτρέπεται η αυθεντικοποίηση με δημόσιο κλειδί. Η προεπιλογή είναι yes
.
PermitEmptyPasswords: Όταν επιτρέπεται η αυθεντικοποίηση με κωδικό πρόσβασης, καθορίζει εάν ο διακομιστής επιτρέπει την είσοδο σε λογαριασμούς με κενές συμβολοσειρές κωδικού πρόσβασης. Η προεπιλογή είναι no
.
Καθορίζει εάν ο root μπορεί να συνδεθεί χρησιμοποιώντας ssh, η προεπιλογή είναι no
. Δυνατές τιμές:
yes
: ο root μπορεί να συνδεθεί χρησιμοποιώντας κωδικό πρόσβασης και ιδιωτικό κλειδί
without-password
ή prohibit-password
: ο root μπορεί να συνδεθεί μόνο με ιδιωτικό κλειδί
forced-commands-only
: Ο root μπορεί να συνδεθεί μόνο χρησιμοποιώντας ιδιωτικό κλειδί και εάν οι επιλογές εντολών είναι καθορισμένες
no
: όχι
Καθορίζει αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως το %h
, το οποίο θα αντικατασταθεί από τον κατάλογο του χρήστη. Μπορείτε να υποδείξετε απόλυτους διαδρομές (ξεκινώντας από /
) ή σχετικές διαδρομές από το σπίτι του χρήστη. Για παράδειγμα:
Αυτή η ρύθμιση θα υποδείξει ότι αν προσπαθήσετε να συνδεθείτε με το ιδιωτικό κλειδί του χρήστη "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
(η προεπιλογή είναι επιτρεπτή).
Αν διαπιστώσετε ότι η Forward Agent είναι ρυθμισμένη σε ένα περιβάλλον, διαβάστε την παρακάτω σελίδα καθώς μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα:
SSH Forward Agent exploitationΤο αρχείο /etc/profile
και τα αρχεία κάτω από το /etc/profile.d/
είναι σενάρια που εκτελούνται όταν ένας χρήστης τρέχει ένα νέο shell. Επομένως, αν μπορείτε να γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να κερδίσετε δικαιώματα.
Αν βρείτε κάποιο περίεργο προφίλ script, θα πρέπει να το ελέγξετε για ευαίσθητες λεπτομέρειες.
Ανάλογα με το λειτουργικό σύστημα, τα αρχεία /etc/passwd
και /etc/shadow
μπορεί να έχουν διαφορετικό όνομα ή να υπάρχει ένα αντίγραφο ασφαλείας. Επομένως, συνιστάται να βρείτε όλα αυτά και να ελέγξετε αν μπορείτε να τα διαβάσετε για να δείτε αν υπάρχουν hashes μέσα στα αρχεία:
Σε ορισμένες περιπτώσεις μπορείτε να βρείτε password hashes μέσα στο αρχείο /etc/passwd
(ή ισοδύναμο).
Πρώτον, δημιουργήστε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές.
Στη συνέχεια, προσθέστε τον χρήστη hacker
και προσθέστε τον παραγόμενο κωδικό πρόσβασης.
E.g: 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 server και μπορείτε να τροποποιήσετε το αρχείο ρύθμισης υπηρεσίας Tomcat μέσα στο /etc/systemd/, τότε μπορείτε να τροποποιήσετε τις γραμμές:
Η πίσω πόρτα σας θα εκτελείται την επόμενη φορά που θα ξεκινήσει το tomcat.
Οι παρακάτω φάκελοι μπορεί να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Πιθανώς δεν θα μπορείτε να διαβάσετε τον τελευταίο αλλά δοκιμάστε)
Διαβάστε τον κώδικα του linPEAS, αναζητά πολλά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης. Ένα άλλο ενδιαφέρον εργαλείο που μπορείτε να χρησιμοποιήσετε γι' αυτό είναι: LaZagne το οποίο είναι μια ανοιχτού κώδικα εφαρμογή που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης που είναι αποθηκευμένοι σε τοπικό υπολογιστή για Windows, Linux & Mac.
Αν μπορείτε να διαβάσετε καταγραφές, μπορεί να είστε σε θέση να βρείτε ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές. Όσο πιο παράξενη είναι η καταγραφή, τόσο πιο ενδιαφέρουσα θα είναι (πιθανώς). Επίσης, κάποιες "κακώς" ρυθμισμένες (backdoored?) καταγραφές ελέγχου μπορεί να σας επιτρέψουν να καταγράψετε κωδικούς πρόσβασης μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Για να διαβάσετε τα αρχεία καταγραφής, η ομάδα adm θα είναι πολύ χρήσιμη.
Πρέπει επίσης να ελέγξετε για αρχεία που περιέχουν τη λέξη "password" στο όνομα ή μέσα στο περιεχόμενο, και επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή hashes regexps. Δεν θα παραθέσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το linpeas.
Αν γνωρίζετε από πού θα εκτελεστεί ένα python script και μπορείτε να γράψετε μέσα σε αυτόν τον φάκελο ή μπορείτε να τροποποιήσετε τις βιβλιοθήκες python, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελείται το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
Για να backdoor την βιβλιοθήκη απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (αλλάξτε IP και PORT):
Μια ευπάθεια στο logrotate
επιτρέπει σε χρήστες με δικαιώματα εγγραφής σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το logrotate
, που συχνά εκτελείται ως root, μπορεί να χειραγωγηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το /etc/bash_completion.d/. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο /var/log αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών.
Αυτή η ευπάθεια επηρεάζει την έκδοση logrotate
3.18.0
και παλαιότερες
Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με logrotten.
Αυτή η ευπάθεια είναι πολύ παρόμοια με CVE-2016-1247 (αρχεία καταγραφής nginx), οπότε όποτε διαπιστώσετε ότι μπορείτε να τροποποιήσετε αρχεία καταγραφής, ελέγξτε ποιος διαχειρίζεται αυτά τα αρχεία και ελέγξτε αν μπορείτε να ανυψώσετε δικαιώματα αντικαθιστώντας τα αρχεία καταγραφής με symlinks.
Αναφορά ευπάθειας: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
Αν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να γράψει ένα σενάριο ifcf-<whatever>
στο /etc/sysconfig/network-scripts ή μπορεί να προσαρμόσει ένα υπάρχον, τότε το σύστημά σας είναι pwned.
Τα σενάρια δικτύου, όπως το ifcg-eth0, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι ~sourced~ στο Linux από τον Network Manager (dispatcher.d).
Στην περίπτωσή μου, το NAME=
που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε λευκό/κενό χώρο στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά τον λευκό/κενό χώρο. Αυτό σημαίνει ότι όλα μετά τον πρώτο λευκό χώρο εκτελούνται ως root.
Για παράδειγμα: /etc/sysconfig/network-scripts/ifcfg-1337
Ο φάκελος /etc/init.d
είναι το σπίτι των scripts για το System V init (SysVinit), το κλασικό σύστημα διαχείρισης υπηρεσιών Linux. Περιλαμβάνει scripts για start
, stop
, restart
, και μερικές φορές reload
υπηρεσίες. Αυτά μπορούν να εκτελούνται απευθείας ή μέσω συμβολικών συνδέσμων που βρίσκονται στο /etc/rc?.d/
. Ένας εναλλακτικός δρόμος στα συστήματα Redhat είναι το /etc/rc.d/init.d
.
Από την άλλη πλευρά, το /etc/init
σχετίζεται με το Upstart, μια νεότερη διαχείριση υπηρεσιών που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα scripts του SysVinit εξακολουθούν να χρησιμοποιούνται παράλληλα με τις ρυθμίσεις του Upstart λόγω ενός επιπέδου συμβατότητας στο Upstart.
systemd αναδύεται ως μια σύγχρονη διαχείριση εκκίνησης και υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως εκκίνηση daemon κατ' απαίτηση, διαχείριση automount και στιγμιότυπα κατάστασης συστήματος. Οργανώνει αρχεία στο /usr/lib/systemd/
για πακέτα διανομής και /etc/systemd/system/
για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος.
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 Συγκέντρωση περισσότερων scripts: https://github.com/1N3/PrivEsc
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)