2010-08-20 19 views
9

Wikipedia fornisce information about one of the most common scenarios per lo sfruttamento di un sito croce scripting attacco riflette - con un certo grado di ingegneria sociale per indurre ignari utenti a fare clic su un link maligno:Quali sono i possibili vettori di attacco per lo scripting cross-site riflesso?

  1. Alice visita spesso un particolare sito web, che è ospitato da Bob . Il sito web di Bob consente ad Alice di accedere con una coppia nome utente/password e memorizza i dati sensibili , ad esempio la fatturazione informazioni.
  2. Mallory osserva che il sito Web di Bob contiene una vulnerabilità XSS riflessa.
  3. Mallory crea un URL per sfruttare la vulnerabilità e invia ad Alice un'e-mail , allettandola a fare clic su un collegamento per l'URL con falsi pretesti. Questo URL punterà al sito Web di Bob, ma conterrà il codice dannoso di Mallory, che il sito Web rifletterà.
  4. Alice visita l'URL fornito da Mallory mentre è collegato al sito Web di Bob .
  5. Lo script dannoso incorporato nell'URL viene eseguito nel browser di Alice, come se provenisse direttamente dal server Bob (questa è la reale vulnerabilità XSS ). Lo script può essere utilizzato per inviare il cookie di sessione di Alice a Mallory. Mallory può quindi utilizzare il cookie di sessione per rubare le informazioni sensibili disponibili ad Alice (credenziali di autenticazione, fatturazione informazioni, ecc.) Senza che Alice ne sia a conoscenza.

Ora, questo è di solito tende ad essere molto buono esempio quando il sito sembra essere una pagina-driven applicazione - la vulnerabilità viene sfruttata da ottenere l'utente di inviare un payload dannoso per l'applicazione (ancora più importante , mediante l'emissione di una richiesta GET dopo l'accesso) che viene riflessa nella risposta.

Ci sono dei vettori di attacco più interessanti, specialmente quelli da considerare quando l'applicazione utilizza un sacco di AJAX con la maggior parte delle richieste fatte su HTTP POST?

EDIT

Nel caso in cui non sono stato chiaro, mi piacerebbe conoscere i vari tipi di attacchi vettori applicabili alle riflette attacchi XSS, soprattutto quando il livello sul lato client dell'applicazione è implementata in modo diverso . Le applicazioni basate sulla pagina avrebbero un vettore di attacco che coinvolge le richieste HTTP GET emesse da un utente, ma sarebbe interessante sapere come questo funzioni per le applicazioni thick client, specialmente quelle che utilizzano oggetti XMLHttpRequest che emettono le richieste HTTP POST. Diversi meccanismi utilizzati nel rendering lato client ovviamente giustificano lo studio di diversi vettori di attacco. In alcuni casi, potrebbero non esserci vettori di attacco applicabili; la domanda è espressa per suscitare una tale risposta.

+0

Io suggerirei Serverfault potrebbe essere una sede più appropriata per questa domanda o, forse, http://webmasters.stackexchange.com/ –

+0

@ricebowl, ma perché dovrei metterlo su serverfault? Non sto cercando consigli per rafforzare un server. Sto tentando di dedurre un insieme di vettori di attacco su un'applicazione web. Questo è qualcosa a cui le persone esperte in sicurezza possono rispondere. Per come la vedo io, questa è una domanda sulla sicurezza: la vulnerabilità a riflettere l'XSS dovrebbe essere presa sul serio se un'applicazione viene scritta in un modo particolare? –

+0

Non sto del tutto suggerendo che SF * è * la sede giusta, sto solo guardando i due voti ravvicinati che suggeriscono di migrare * a * SF. Personalmente ritengo che webmasters.stackexchange.com sarebbe una scelta migliore, anche se, a mio parere, una delle due sarebbe una scelta migliore di SO, proprio per l'attenzione focalizzata sul server di tali siti (e per l'attenzione alla web-app di questa domanda). Gli utenti di quei siti potrebbero, ovviamente, sentirsi diversamente da me. –

risposta

3

Sì, in effetti ci sono alcune varianti dell'attacco XSS riflettente. Principalmente è il Samy Worm. In breve, Samy ha usato XSS per sparare a XHR su MySpace.com per leggere il token CSRF e creare una richiesta POST. In realtà questo è un modello di attacco generale che è utile per attaccare siti che utilizzano httponly cookies. Poiché l'uso dei cookie httponly diventa più popolare, così sarà questo modello di attacco.

Un altro carico utile xss è XSS Shell. Ciò fornisce all'utente malintenzionato un canale interattivo per il browser.

XSS viene utilizzato per consegnare un attacco "Drive-By-Download".

Xss può essere utilizzato anche su fake the news. Con xss contro news sources trovato regolarmente, questo è un problema piuttosto serio.

Modifica: Potresti anche essere interessato a come la fondazione Apache got owned utilizza xss e tinyurl. Here è un exploit che ho scritto che utilizza un attacco in stile Samy per ottenere CSRF.

+0

Grazie per la risposta; alcuni link sono interessanti. Ho appena finito di leggere il documento su XSS Shell. Per chiarire quello che sto cercando, in realtà ero interessato a saperne di più sul processo di "infezione" iniziale più di quello che si può ottenere dopo l'infezione. In poche parole, la domanda è: "Come posso sfruttare la vulnerabilità XSS riflessa in un'app, con una certa quantità di ingegneria sociale coinvolta?". Dato che non tutte le app sono costruite allo stesso modo, l'attacco contro GMail sarebbe diverso rispetto alla CNN; questo è un esempio potrebbe essere troppo stretto, ma spero che tu abbia l'idea. –

+0

@Vineet Reynolds Per essere onesti questo è per domande di programmazione, e sono più interessato a scrivere codice di exploit che a indurre le persone a fare clic sui collegamenti. Se sei interessato all'ingegneria sociale dovresti cercare altrove. Comunque forse sei interessato alla mia modifica. – rook

+0

Rook, nel caso in cui non sia stato frainteso, non mi interessa nemmeno l'aspetto dell'ingegneria sociale. Per quanto riguarda la preparazione degli exploit, non ho visto nulla al di là del semplice tipo di attacco link-in-a-mail. Questo è il motivo per cui sono interessato a sapere come devono essere scritti gli exploit se si richiede l'invio di moduli HTTP o XHR. Credo che il secondo link contenga una risposta a ciò che sto cercando. –

2

XSS riflesso si verifica quando una pagina visualizza input utente malintenzionato. La domanda "quali sono i vettori di attacco?" è quindi sinonimo di "quale input dell'utente può ricevere una pagina?"

Alcune fonti sono:

  • La stringa di query di una richiesta GET che possono provenire da:
    • un URL in un messaggio email
    • un redirect (tramite js, 301 risposta, o meta tag) da un sito hackerato o dannoso
  • Il corpo di una richiesta POST che possono provenire da:
    • una richiesta POST AJAX da qualsiasi dominio (la stessa politica di origine non interrompe la richiesta, solo analizzando la risposta)
    • Qualsiasi modulo con method = "POST" e action = "XSSed_site.com". I moduli possono essere inviati tramite js, o facendo clic su un pulsante che potrebbe essere fatto usando click-jacking.
  • Altre forme di input come ad esempio:
    • file js esterni come selezionatori di tabella o librerie che la pagina attaccato sta usando
    • comunicazione server-to-server che viene visualizzato sulla pagina attaccato
    • eventuali altri dati visualizzati sulla pagina attaccati che può essere modificato da un aggressore

Mi rendo conto che la sezione "Altre forme di input" sembra più una vulnerabilità XSS memorizzata, ma ogni applicazione è unica e alcuni possono tradurre l'input dell'utente in come i pezzi esterni vengono composti nella pagina (quindi riflessi).

Una stringa di query in una richiesta GET da una e-mail di phishing non è certamente l'unico vettore per XSS riflesso (buona domanda però).

3

benlbroussard lo ha già toccato, ma voglio reiterarlo a causa dell'importanza. Fat client, thin client, POST, GET, PUT; nessuna di queste cose è importante. Un buco XSS si basa su un sito che restituisce erroneamente qualche input a qualcuno.

Se stai cercando un attacco rigorosamente riflesso, il payload non deve essere memorizzato in nessuna parte nell'app di destinazione.In tal caso, penso che tu abbia ragione che un cliente grasso tenderà ad essere più resistente perché un GET è il modo più semplice per avviare un attacco XSS riflesso.

Per quanto riguarda più vettori di attacco, una cosa interessante sull'architettura Fat Client è la codifica di entità. Un thin client può essere un'entità che codifichi tutto e si faccia con esso, con grande beneficio. Un fat client deve codificare la risposta a un GET iniziale, ma le richieste asincrone con risposte intestate a JavaScript non possono essere (interamente) codificate e JS valide. Questo avanti e indietro aumenta la possibilità di non codificare qualcosa che dovrebbe essere, che è un grande passo verso la creazione di un vettore XSS.

Ha senso?

Carl

+0

tutto ha senso tranne che per la codifica delle entità delle richieste da parte del client. Credo che i client debbano utilizzare le regole di codifica come stabilito nel protocollo sottostante (HTTP), poiché disporre di più codifiche in vigore potrebbe portare ad attacchi che utilizzano più livelli di codifica. A parte questo, la maggior parte delle altre cose ha senso: AJAX (con XML nella risposta) è migliore di AJAH (con HTML) se uno ha bisogno di proteggere contro XSS è qualcosa che ho derivato. –

+0

@Vineet, buon affare. Temo che il mio post sia scritto male, in realtà mi riferivo alle risposte di codifica delle entità dal server, non alle richieste del client. Grande differenza vero? Non capisco come XML sia meglio di HTML. Il mio pensiero è tutto ciò che conta è come usi la risposta in JS, e questo spiega come deve essere protetto. Valutandolo come JS introduce alcuni vettori, inserendolo nel DOM ne introduce altri. Cosa mi manca? – Carl

+0

L'iniezione DOM è un argomento interessante. Di nuovo derivando un'idea qui - JavaScript che è presente (in una sezione CDATA forse) nella risposta del server (che è un documento XML), può essere interpretato se lo sviluppatore ha implementato la logica di presentazione in quel modo. Certamente non una buona pratica, che non impedirà alla gente di codificare una tale mostruosità, che si presta come una via per l'attacco. Non ci avevo pensato prima e quindi ho pensato che AJAX fosse più sicuro di AJAH. –

Problemi correlati