Script XSS riflesso che passa attraverso l'URL come farlo funzionare e quali sono i presupposti per il suo funzionamento?

3

Cercando di conoscere la sicurezza, ho creato il sito web più semplice sul mio localhost composto da una pagina html fornita da un server Apache. Ho iniziato a provare e ad aggiungere lo script JS che sarebbe stato eseguito alla fine di un URL:
/index.html?message=<script>alert('XSS');</script>

Il browser lo codifica per:

/index.html?message=%3Cscript%3Ealert(%27XSS%27);%3C/script%3E

La mia comprensione del modo in cui questo tipo di vettore di attacco dovrebbe funzionare è che l'autore dell'attacco invia un URL simile alla vittima - > la vittima fa clic su di essa - > lo script viene eseguito (non è sicuro sul momento esatto in cui dovrebbe essere eseguito?)

Domande:

  1. Perché non viene eseguito?
  2. Come eseguirlo?
  3. Quali sono i prerequisiti di un simile attacco - forse non è sufficiente solo per avere una semplice pagina web?
  4. Quando dovrebbe essere eseguito questo script? Dopo il DOM carica?

Anche l'esplorazione generale su come dovrebbe funzionare sarebbe molto apprezzata. Grazie!

    
posta Mindaugas Bernatavičius 20.09.2014 - 04:37
fonte

1 risposta

4

Gli attacchi XSS si basano sul fatto che l'input viene trasmesso al browser dell'utente finale. L'attacco più comune è fondamentalmente un sito PHP contenente

<?php
echo $_GET["message"];
?>

Passerai quindi a questo URL un parametro contenente il codice javascript. Se desideri configurarlo, crea un file something.php sul tuo server web, inserisci il codice sopra e accedi a http://your-server/something.php?message=<script>alert('XSS');</script> nel tuo browser. Dovrebbe quindi visualizzare un popup contenente XSS.

In una pagina HTML statica, questo non è possibile, poiché genera solo contenuti basati sul codice HTML statico del server. XSS richiede l'inclusione del codice fornito dall'utente. L'esclusione è, se il codice HTML carica un codice javascript vulnerabile, che consente l'input fornito dall'utente.

Il punto principale di XSS è che un utente malintenzionato vuole includere il codice HIS sul tuo sito web, senza effettivamente hackerare il server web. Questo è possibile solo con linguaggi di programmazione lato server, che generano qualcosa, l'autore dell'attacco precedentemente inserito nel server.

Fondamentalmente l'hacker vuole che l'HTML guardi al browser in questo modo

<html><body>Foo<script>alert('XSS');</script></body></html>

invece di

<html><body>Foo</body></html>

Pensa ad esempio a un forum oa commenti su un articolo. L'utente dovrebbe essere autorizzato a lasciare le sue osservazioni. Il server deve salvare questo e presentare lo stesso commento ad altri utenti. Se il commento stesso contiene codice javascript e il programma server non lo attenua, produrrebbe lo stesso codice come parte del blocco dei commenti.

Quanto a quando questo è caricato nel browser, non è facile rispondere. Dipende da dove il codice dell'hacker è incluso nel corpo della pagina o dai file javascript caricati successivamente. Se è incluso come tag javascript nell'HTML principale, verrà caricato dopo il completamento del carico DOM. Soprattutto come accennato prima, la vulnerabilità XSS potrebbe verificarsi anche all'interno di un file javascript (che prende l'input dell'utente, ad esempio un URL e lo carica). In questo caso non è possibile dire quando verrà eseguito esattamente il codice. Puoi associare questo codice javascript a un pulsante, a un evento textblock () o a un timer.

EDIT:

Esaminando l'attacco javascript, ecco cosa inseriresti nel file del tuo server

<html><body>
<script type="text/javascript">
    var queryDict = {};
    location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]});
    document.write(decodeURIComponent(queryDict["message"]));
</script>
</body></html>

Le prime due righe, basicamente prendono tutti i parametri GET e li suddividono in un array (tratto da qui ). La terza riga restituisce semplicemente questo nella pagina HTML. Ovviamente questo potrebbe anche essere fatto da qualsiasi altra manipolazione DOM dal codice eseguito.

    
risposta data 20.09.2014 - 11:17
fonte

Leggi altre domande sui tag