Un ejemplo práctico

Un ejemplo práctico – Codelivly

 

A medida que avanza la tecnología, también evolucionan los medios por los cuales los piratas informáticos intentan explotarla. Los ataques Cross-Site Scripting (XSS) son uno de esos métodos utilizados por los ciberdelincuentes para obtener acceso a información confidencial. Sin embargo, hay formas de eludir los filtros XSS y proteger su sitio web contra tales ataques. En este artículo, vamos a discutir un ejemplo práctico de cómo omitir los filtros XSS.

Cross-site scripting (XSS) es una vulnerabilidad común de las aplicaciones web que permite a los atacantes inyectar scripts maliciosos en las páginas web. XSS se puede utilizar para diversos fines, como el robo de cookies, el secuestro de sesiones, el phishing, la desfiguración, etc.

Sin embargo, muchas aplicaciones web han implementado filtros XSS para prevenir o mitigar los ataques XSS. Los filtros XSS son mecanismos que analizan la entrada y salida del usuario en busca de cadenas o caracteres sospechosos que puedan indicar un intento de XSS. Pueden bloquear, codificar, desinfectar o eliminar estas entradas o salidas.

Pero los filtros XSS no son perfectos. Se pueden eludir utilizando diversas técnicas que explotan sus debilidades o limitaciones. En esta publicación de blog, le mostraremos un ejemplo práctico de cómo omitir un filtro XSS usando trucos de codificación de caracteres.

Descubre: Cómo crear un escáner de vulnerabilidades XSS en Python

Sugerencias de codificación de caracteres

Para eludir los filtros que se basan en escanear texto en busca de cadenas sospechosas específicas, los atacantes pueden codificar cualquier cantidad de caracteres de diferentes maneras:

  • Codificación HTML: implica el uso de entidades HTML para representar caracteres. Por ejemplo, `<` peut être codé comme `<`, `>` como `>` y `”` como `"`.
  • – Codificación de URL: Esto implica el uso de signos de porcentaje seguidos de valores hexadecimales para representar caracteres. Por ejemplo, `<` peut être codé comme `%3C`, `>` como `%3E` y `”` como `%22`.
  • – Codificación hexadecimal: Esto implica el uso de barras invertidas seguidas de valores hexadecimales para representar caracteres. Por ejemplo, `<` peut être codé comme `\\x3c`, `>` como `\\x3e` y `”` como `\\x22`.
  • – Codificación Unicode: Esto implica el uso de barras invertidas seguidas de “u” y valores hexadecimales para representar caracteres Unicode. Por ejemplo, `<` peut être codé comme `\\u003c`, `>` como `\\u003e` y `”` como `\\u0022`.

Estos métodos de codificación se pueden combinar o anidar para crear codificaciones más complejas que pueden escapar a los filtros simples.

Ejemplo Supongamos que tenemos una aplicación web que permite a los usuarios enviar comentarios en publicaciones de blog. La aplicación tiene un filtro XSS que analiza la entrada del usuario para las siguientes cadenas:

- `<script>` 
— `<img` 
— `<div` 
— `<iframe` 
— `<svg`

Si alguna de estas cadenas se encuentra en la entrada del usuario, el filtro bloqueará el envío y mostrará un mensaje de error. Queremos inyectar un script de alerta simple en nuestro comentario:

```html 
<script>alert(1)</script>

Si enviamos este comentario directamente, el filtro lo detectará y lo bloqueará. Así que tenemos que codificarlo de alguna manera.

Una posible solución es utilizar la codificación HTML para algunos caracteres:

&#60;script&#62;alert(1)&#60;/script&#62;

Esto puede funcionar si el filtro solo busca coincidencias de cadenas exactas. Sin embargo, algunos filtros pueden descodificar entidades HTML antes de analizarlas. Así que necesitamos algo más sofisticado.

Otro método posible es utilizar la codificación de URL para algunos de los caracteres:

%3Cscript%3Ealert(1)%3C/script%3E

Esto puede funcionar si el filtro solo busca cadenas de texto sin formato. Sin embargo, algunos filtros pueden decodificar valores codificados en URL antes de analizarlos. Así que necesitamos algo más avanzado.

Un tercer método posible es utilizar la codificación hexadecimal para algunos caracteres:

\\x3cscript\\x3ealert(1)\\x3c/script\\x3e

Esto puede funcionar si el filtro solo busca cadenas alfanuméricas. Sin embargo, algunos filtros pueden decodificar valores codificados en hexadecimal antes de analizarlos. Así que necesitamos algo más inteligente.

\\u003cscript\\u003ealert(1)\\u003c/script\\u003e

Esto puede funcionar si el filtro solo busca cadenas ASCII. Sin embargo, algunos filtros pueden decodificar valores codificados en Unicode antes de analizarlos. Así que necesitamos algo más delicado.

Una quinta forma posible es usar una combinación de diferentes codificaciones para diferentes partes de nuestro script:

%26#x6c;t;\\x73cript&#62;\\u0061lert(1)%26#x6c;t;/\\x73cript&#62;

Este comentario utiliza una combinación de diferentes técnicas de codificación para representar los caracteres de la cadena original de una manera que pueda escapar a la detección de los filtros de seguridad.

Comienza con el carácter de ampersand "&" representado en la codificación de URL como %26. Luego, la cadena "l" se representa en codificación de entidad HTML hexadecimal como #x6c;. La siguiente parte de la cadena es la palabra "script", donde la "s" se representa en codificación hexadecimal ASCII con un carácter de escape de barra invertida como \\x73y los caracteres restantes se representan en codificación de entidad HTML como cript&#62;.

El siguiente carácter en la cadena es la letra minúscula "a", que se representa en codificación Unicode con un carácter de escape de barra invertida como \\u0061. El resto de la cadena, "lert(1)", se representa en codificación ASCII.

Luego, la cadena termina con el carácter de y comercial "&" nuevamente representado en la codificación de URL como %26seguido de la cadena "t;/" representada en codificación ASCII y la cadena "script>" representada en codificación de entidad HTML.

Los atacantes pueden usar este tipo de codificación para eludir los filtros de seguridad que buscan cadenas o caracteres específicos en la entrada del usuario. Sin embargo, es importante tener en cuenta que el uso de estas técnicas para explotar las vulnerabilidades de las aplicaciones web es ilegal y poco ético. Para protegerse contra los ataques XSS, los desarrolladores web deben implementar prácticas de codificación seguras, como validación de entrada, saneamiento de salida y consultas parametrizadas.

Descubra: el XSS reflexivo conduce a $ 3,000 en Microsoft Forms Bug Bounty Rewards

**************************************************** ***************************************

Supongamos que tenemos un sitio web con una barra de búsqueda. Los desarrolladores del sitio web han implementado un filtro XSS que limpia cualquier entrada escrita en la barra de búsqueda antes de que se muestre en el sitio web. Sin embargo, el filtro tiene fallas y podemos eludirlo inyectando código malicioso en la barra de búsqueda.

Paso 1: Identifique el filtro

El primer paso para eludir un filtro XSS es identificar el filtro en sí. En nuestro ejemplo, sabemos que se implementa un filtro XSS, pero necesitamos averiguar cómo funciona.

Paso 2: inyectar código malicioso

El siguiente paso es inyectar el código malicioso en la barra de búsqueda. Podemos hacer esto usando el siguiente script:

Cuando se ejecuta este código, aparecerá un cuadro de alerta con el texto "XSS".

Paso 3: Observar el comportamiento del filtro

Una vez que hemos inyectado el código, debemos observar el comportamiento del filtro. En nuestro ejemplo, el filtro es defectuoso y deja pasar el código. Sin embargo, si el filtro fuera efectivo, desinfectaría la entrada y evitaría la ejecución del código.

Paso 4: puentear el filtro

Ahora que sabemos cómo funciona el filtro, podemos sortearlo usando una técnica llamada "codificación XSS". La codificación XSS implica la codificación de código malicioso para que aparezca como texto inofensivo para el filtro, pero aún ejecutable por el navegador.

Por ejemplo, podemos codificar el código que usamos en el paso 2 de la siguiente manera:

Cuando se ejecuta este código, siempre muestra el cuadro de alerta con el texto "XSS", aunque se codificó para que apareciera como texto inofensivo para el filtro.

Conclusión

Los ataques XSS representan una seria amenaza para la seguridad del sitio web, pero existen formas de proteger su sitio web de tales ataques. Al comprender cómo funcionan los filtros XSS y cómo omitirlos, puede asegurarse de que su sitio web sea seguro y que su información de usuario esté protegida. Es fundamental mantenerse al día con las últimas tendencias de seguridad e implementar las medidas de seguridad adecuadas para proteger su sitio web contra los ciberdelincuentes.

Si quieres conocer otros artículos parecidos a Un ejemplo práctico puedes visitar la categoría Tutoriales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas