¿Es este filtro XSS vulnerable

2

Hace poco estaba probando un sitio web. Busqué en la barra de búsqueda y obtuve la siguiente respuesta.

AsíqueparaescapardetodoslosTAGSprobélosiguiente

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

recibílasiguienterespuesta

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

A continuación, probé el siguiente vector de ataque

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

y esta fue la respuesta

Creoqueestesitioesvulnerable.Parecequeheescapadodetodaslasetiquetas.Cualquierapuedesugeriralgo

ACTUALIZACIÓN

Asíqueintentéestoyfuncionó

<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

Aparece una ventana emergente. Pero todavía no entiendo por qué las páginas se bloquean cuando pongo onerror oralert (1)

ACTUALIZAR

Tengo una pregunta más ........ cuando uso la siguiente carga útil, aparece una ventana emergente ...  

pero si cierro el atributo SRC dentro de comillas dobles (que es la forma correcta) la página falla

captura de pantalla (cuando no se incluye SRC dentro de dobles preguntas)

ydedóndevienentodasestasetiquetas</div>decierre.Noestabanaquíantescuandobusquétérminossimplescomo"bicicleta"

    
pregunta shujaat 12.06.2017 - 20:32
fuente

2 respuestas

2

Puede ser vulnerable, pero no podemos decirlo de manera confiable sin más información.

Pero primero, no estás realmente escapando de etiquetas, estás cerrando etiquetas.

En la mayoría de las situaciones, no es necesario cerrar etiquetas, ya que el analizador ignorará cualquier posible error. Simplemente puede inyectar su carga útil img al principio, y funcionará (hay algunas excepciones, como textarea , title , script , etc., pero b y font están bien ).

En cuanto al filtro, podemos ver que todo después de = se corta. Debería investigar más a fondo suministrando más información, como a=b (para verificar si solo se corta dentro de una etiqueta). También puedes intentar codificar = como %3D .

Si eludir el problema = no funciona, deberías probar una carga útil que no lo requiera. Un ejemplo simple sería <script>alert(1)</script> .

    
respondido por el tim 12.06.2017 - 20:49
fuente
1

Es definitivamente vulnerable, porque pudiste obtener una ventana emergente usando onmouseover / onmouseout. Eso es lo suficientemente fácil como para explotar casi cualquier escenario, tal vez no con un 100% de confiabilidad pero es posible que sea bastante cercano (especialmente si se puede usar CSS en línea para que la "imagen" cubra la página, o similar). ¡Sin duda demuestra que cualquier filtro que veas no es lo suficientemente bueno!

Ahora, para construir un buen PoC ... hay algunas cosas que debes tener en cuenta. Una es que casi siempre vale la pena reservar su carga útil de exploit con cadenas de texto sin formato que puede buscar, como "bugbug" o "123456789". Asegúrese de que esas cadenas se muestren en la salida donde las espera (separadas solo por un espacio o algo), luego comience a poner HTML entre ellas. Esto hará que sea realmente obvio si sucede algo extraño (como cortar toda la entrada después de un cierto punto).

Otra cosa es buscar formas extrañas de obtener XSS. Parece que el sitio posiblemente esté usando una lista negra de cadenas permitidas, filtrando <script> y posiblemente cosas como onerror también. Ese tipo de filtro es inútil y, dado que existen mejores opciones como la codificación de salida, es un poco estúpido; incluso si lo hace perfecto hoy, mañana una actualización de la especificación HTML (o simplemente un navegador que admita algo no estándar) lo romperá, y en la práctica ni siquiera lo hará bien para el estándar actual (una vez vi un importante intento de organización financiera por alrededor de un mes antes de rendirse. Algunas cargas útiles para probar:

  • <iframe src="javascript:... (sí, puedes poner un javascript: URI como fuente de un iframe, y se ejecutará en el contexto de la página)
  • <iframe src="data:... (use una cadena codificada en base64 de una página HTML con un script que interactúe con la página principal)
  • <object data="javascript:... o data="data:... (objeto: el primo menos conocido de iframe)
  • <svg onload="..."> (una de las plantillas de carga útil más corta que conozco)

También deberías considerar evitar alert ; Usted pensaría que nadie sería tan tonto, pero he visto personas que filtran ese nombre de función específicamente para "bloquear" XSS; considera cosas menos utilizadas como console.log o prompt .

    
respondido por el CBHacking 13.06.2017 - 03:03
fuente

Lea otras preguntas en las etiquetas