Questo filtro XSS è vulnerabile

2

Quindi recentemente stavo testando un sito web. Ho cercato la bici nella barra di ricerca e ho ottenuto la seguente risposta.

QuindipersfuggireatuttiiTAGhoprovatoilseguente

</b></font></b>bike

holaseguenterisposta

<b><fontsize="2" color="#df3d20" face="Arial">Your search: <b></b></font></b>bike&nbsp;&nbsp;&nbsp;&nbsp;Found 0 item(s)

successivamente ho provato il seguente vettore di attacco

</b></font></b><img src=x onerror=prompt(1)>

e questa era la risposta

Pensochequestositosiavulnerabile.Sembracheioabbiasfuggitoatuttiitag.Qualcunopotrebbesuggerirequalcosa

Aggiorna

Quindihoprovatoquestoehafunzionato

<imgonmouseover="alert(1)" onmouseout="normalImg(this)" border="0" src="http://d2fbmjy3x0sdua.cloudfront.net/cdn/farfuture/hSDgO-dX1na9VZajH8LUXXZbZFW0DYjcPLDuabM2-1c/mtime:1486670171/sites/default/files/styles/nas_bird_teaser_illustration/public/4995_Sib

ottengo un popup. Ma non riesco ancora a capire perché le pagine si blocchino quando metto onerror oralert (1)

Aggiorna

Ho ancora una domanda ........ quando uso il seguente carico utile, ottengo un pop up ....  

ma se chiudo l'attributo SRC all'interno di virgolette doppie (che è il modo corretto) la pagina si blocca

schermata (quando non si inserisce SRC all'interno di doppi qout)

edadovevengonotuttiquestitagdichiusura</div>.Nonc'eranoprimaquandohocercatoterminisemplicicome"bike"

    
posta shujaat 12.06.2017 - 20:32
fonte

2 risposte

2

Potrebbe essere vulnerabile, ma non possiamo dirlo in modo affidabile senza ulteriori informazioni.

Ma prima, non stai davvero sfuggendo ai tag, stai chiudendo i tag.

Nella maggior parte dei casi, la chiusura dei tag non è necessaria, in quanto il parser ignorerà felicemente eventuali errori. Puoi inserire il tuo payload img all'inizio e funzionerà (ci sono alcune eccezioni, come textarea , title , script , ecc, ma b e font vanno bene ).

Per quanto riguarda il filtro, possiamo vedere che tutto dopo = è troncato. Dovresti investigare ulteriormente fornendo più input, come a=b (per verificare se è solo tagliato all'interno di un tag). Puoi anche provare a codificare = come %3D .

Se bypassare il problema = non funziona, dovresti provare un carico utile che non lo richiede. Un semplice esempio potrebbe essere <script>alert(1)</script> .

    
risposta data 12.06.2017 - 20:49
fonte
1

È sicuramente vulnerabile, perché è stato possibile ottenere un popup usando onmouseover / onmouseout. Questo è abbastanza facile da sfruttare quasi ogni scenario, forse non con un'affidabilità del 100%, ma plausibilmente abbastanza vicino (specialmente se puoi usare CSS in linea per far sì che l'immagine copra la pagina o simili). Certamente dimostra che qualunque filtro tu stia vedendo non è abbastanza buono!

Ora, per costruire effettivamente un buon PoC ... ci sono alcune cose che dovresti tenere a mente. Uno è che vale quasi sempre la pena di prenotare il tuo payload exploit con stringhe di testo normale che puoi cercare, come "bugbug" o "123456789". Assicurati che quelle stringhe siano visualizzate nell'output dove ti aspetti (separate solo da uno spazio o qualcosa), quindi inizia a inserire l'HTML tra di loro. Ciò renderà davvero ovvio se accade qualcosa di strano (come tagliare tutti gli input dopo un certo punto).

Un'altra cosa è cercare modi strani per ottenere XSS. Sembra che il sito stia probabilmente utilizzando una lista nera di stringhe consentite, filtrando <script> e probabilmente anche roba come onerror . Quel tipo di filtro è inutile e, dato che esistono opzioni migliori come la codifica dell'output, una specie di stupido; anche se lo rendi perfetto oggi, domani un aggiornamento alle specifiche HTML (o solo un browser che supporti qualcosa di non standard) lo romperà, e in pratica non lo farai nemmeno per lo standard attuale (una volta ho visto un importante org finanziari provate per circa un mese prima di arrendervi). Alcuni payload da provare:

  • <iframe src="javascript:... (sì, puoi mettere un javascript: URI come sorgente di un iframe, e verrà eseguito nel contesto della pagina)
  • <iframe src="data:... (usa una stringa codificata in base 64 di una pagina HTML con uno script che interagisce con la pagina padre)
  • <object data="javascript:... o data="data:... (oggetto: il cugino meno noto dell'iframe)
  • <svg onload="..."> (uno dei modelli di payload più brevi che conosca)

Dovresti anche considerare di evitare alert ; penseresti che nessuno sarebbe così sciocco, ma ho visto persone che filtrano il nome di questa funzione in modo specifico per "bloccare" XSS; considera le cose meno utilizzate come console.log o prompt .

    
risposta data 13.06.2017 - 03:03
fonte

Leggi altre domande sui tag