¿Cómo evitar la barra invertida que se escapa xss?

2

Estoy intentando omitir algunos filtros XSS. Cada vez que inserto una sola cita, obtengo una barra invertida, por lo que escribí esta carga útil:

 \';alert(1);\'

En el código fuente se ve así:

<script>
a = '\';alert(1);\''
</script>

pero todavía no puedo obtener un cuadro de alerta. ¿Qué está mal?

    
pregunta Xozu 18.08.2016 - 10:51
fuente

2 respuestas

1

Es imposible saber con certeza sin ver el código que ejecuta el servidor, pero podemos hacer algunas conjeturas:

  • Parece que hay una plantilla parecida a esto:

    a = '{escape(input)}';
    
  • Usted dice que ' se reemplaza por \' .

  • Por su ejemplo, parece que \' no afectado es una excepción a la regla anterior (probablemente para evitar el ataque que estaba intentando). Esto es un poco sorprendente, lo normal sería reemplazar el \ con \ , por lo que obtendría \\' .
  • Es posible que haya muchas otras defensas incorporadas que aún no hayas notado porque no has logrado omitir la primera.

Es importante comprender el contexto del que quiere escapar. En este caso, se trata de una cadena literal de JavaScript (o la Regla # 3 en ). Para salir de él, tienes dos opciones:

  1. Cambia a un contexto de JavaScript general. Creo que esto solo se puede hacer al obtener un ' sin escapar ahí. Si \' no se ve afectado sin importar el contexto, intente \' . Si tienes suerte, no se hace nada acerca de la primera barra invertida. Mientras estás en eso, prueba diferentes números de barras invertidas, por si acaso.

  2. Finalice el bloque de script para entrar en un contexto HTML. Intenta algo como esto:

    </script><script> alert(1); </script><script>
    

    Lo más probable es que < se escape a &lt; , pero vale la pena intentarlo.

Vea también esta pregunta relacionada .

    
respondido por el Anders 18.08.2016 - 11:29
fuente
0

Bypass escapado comillas dobles

Según su descripción, esto debería funcionar:

\ "); alerta (" xss

El "se escapará como \", dando como resultado \ ", que escapa del \, pero no el".

Para evitar esto, al menos también deberías escapar de \ as \.

Omitir doble comillas y doble barra diagonal inversa a una sola barra invertida

Según su comentario, asumo las partes relevantes reales del trabajo de filtrado de esta manera:

" -> \"
\ -> \

Esto tampoco es seguro. Una inyección podría tener este aspecto:

\\ "); alerta (1

"se escapará como \" en el paso 1, lo que nos lleva a \\ ", que luego se transforma en \" en el paso 2. No puedes usar comillas dobles en la cadena inyectada, pero eso no es un problema ya que XSS con comillas simples o completamente sin comillas es perfectamente posible.

Para asegurar esto, la doble barra invertida tendría que escaparse, no transformarse en una sola, lo que nos daría \\\\\ "con la inyección descrita anteriormente, que es segura.

    
respondido por el Harshal Benake 18.08.2016 - 11:38
fuente

Lea otras preguntas en las etiquetas