diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index ae0b1ad72..d0f2ac1ad 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -62,7 +62,7 @@ Si tu entrada se refleja dentro del valor del atributo de una etiqueta, podrías 1. **Escapar del atributo y de la etiqueta** (luego estarás en el HTML sin procesar) y crear una nueva etiqueta HTML para abusar de ella: `">` está codificado o eliminado), según la etiqueta, podrías **crear un evento** que ejecute código JS: `" autofocus onfocus=alert(1) x="` -3. Si **no puedes escapar del atributo** (`"` se está codificando o eliminando), entonces, según **qué atributo** refleje tu valor y **si controlas todo el valor o solo una parte**, podrás abusar de él. Por **ejemplo**, si controlas un evento como `onclick=`, podrás hacer que ejecute código arbitrario cuando se haga clic en él. Otro **ejemplo** interesante es el atributo `href`, donde puedes usar el protocolo `javascript:` para ejecutar código arbitrario: **`href="javascript:alert(1)"`** +3. Si **no puedes escapar del atributo** (`"` se está codificando o eliminando), entonces, según **qué atributo** refleje tu valor y si controlas todo el valor o solo una parte, podrás abusar de él. Por **ejemplo**, si controlas un evento como `onclick=`, podrás hacer que ejecute código arbitrario cuando se haga clic en él. Otro **ejemplo** interesante es el atributo `href`, donde puedes usar el protocolo `javascript:` para ejecutar código arbitrario: **`href="javascript:alert(1)"`** 4. Si tu entrada se refleja dentro de etiquetas "**no explotables**", podrías intentar el truco de **`accesskey`** para abusar de la vulnerabilidad (necesitarás algún tipo de ingeniería social para explotar esto): **`" accesskey="x" onclick="alert(1)" x="`** ### Dentro del código JavaScript @@ -302,7 +302,7 @@ Los eventos de estilo son una técnica comúnmente utilizada en ataques de XSS ( Los eventos de estilo se basan en la idea de que los navegadores web pueden interpretar ciertos atributos de estilo como código JavaScript. Al aprovechar esto, un atacante puede insertar código malicioso en un atributo de estilo y lograr que se ejecute cuando se activa un evento específico, como hacer clic en un enlace o pasar el cursor sobre un elemento. -Un ejemplo común de un evento de estilo es el uso del atributo "onmouseover". Al insertar código JavaScript en este atributo, el atacante puede lograr que se ejecute cuando el usuario pasa el cursor sobre un elemento en particular. Esto puede permitir al atacante robar información confidencial, redirigir al usuario a sitios maliciosos o realizar otras acciones no deseadas. +Un ejemplo común de un evento de estilo es el uso del atributo "onmouseover". Al insertar código JavaScript en este atributo, el atacante puede lograr que se ejecute cuando el usuario pasa el cursor sobre un elemento en particular. Esto puede permitir al atacante robar información confidencial, redirigir al usuario a sitios maliciosos o realizar otras acciones maliciosas. Es importante tener en cuenta que los eventos de estilo son solo una de las muchas técnicas utilizadas en ataques de XSS. Los desarrolladores web deben implementar medidas de seguridad adecuadas, como la validación y el filtrado de entrada de usuario, para proteger sus aplicaciones contra este tipo de ataques. ```python @@ -346,18 +346,13 @@ Ten en cuenta que **cualquier tipo de codificación HTML es válida**: ``` **Bypassar evento interno usando codificação Unicode** -A codificação Unicode pode ser usada para contornar eventos internos em ataques de Cross-Site Scripting (XSS). Ao codificar os caracteres especiais em suas representações Unicode, é possível evitar a detecção de filtros de entrada e executar código malicioso. +A técnica de codificação Unicode é frequentemente usada para contornar filtros de entrada que bloqueiam certos caracteres especiais. Ao usar a codificação Unicode, é possível representar caracteres especiais por meio de sequências de escape, permitindo que eles passem pelos filtros de entrada. -Para realizar esse tipo de bypass, siga as etapas abaixo: +No contexto de XSS (Cross-Site Scripting), essa técnica pode ser usada para contornar a restrição de eventos internos, como `onmouseover` ou `onclick`. Ao codificar os caracteres especiais relevantes em sequências de escape Unicode, é possível injetar código malicioso em um site e executá-lo quando o evento é acionado. -1. Identifique o evento interno que está sendo filtrado ou bloqueado. -2. Codifique os caracteres especiais em suas representações Unicode usando a tabela de codificação Unicode. -3. Insira o código malicioso codificado no campo de entrada ou parâmetro afetado. -4. Quando o código malicioso for renderizado, os caracteres especiais serão decodificados e o evento interno será executado. +Por exemplo, se o filtro de entrada bloquear o caractere `<`, podemos usar a sequência de escape Unicode correspondente `<` para contornar o filtro. Dessa forma, podemos injetar código malicioso em um atributo de evento, como `onmouseover`, e executá-lo quando o evento ocorrer. -É importante ressaltar que a codificação Unicode pode variar dependendo do contexto e da linguagem de programação utilizada. Portanto, é necessário adaptar a codificação de acordo com o ambiente específico em que o ataque está sendo realizado. - -Além disso, é fundamental lembrar que a exploração de vulnerabilidades de XSS é ilegal, a menos que seja realizada em um ambiente controlado e com permissão explícita do proprietário do sistema. +É importante ressaltar que a codificação Unicode não é uma solução universal para contornar filtros de entrada. Alguns filtros podem ser configurados para detectar e bloquear sequências de escape Unicode. Portanto, é essencial entender as limitações e implementar outras técnicas de evasão, se necessário. ```javascript //For some reason you can use unicode to encode "alert" but not "(1)" @@ -456,7 +451,7 @@ Si puedes inyectar cualquier URL en una etiqueta **` //No safari @@ -576,11 +571,16 @@ Cuando el servidor web recibe los datos de entrada codificados, los decodifica y Para explotar esta vulnerabilidad, el atacante debe encontrar un punto de entrada en la aplicación web donde pueda inyectar código malicioso. Esto puede ser a través de campos de entrada de usuario, como formularios de inicio de sesión o campos de comentarios, o mediante parámetros de URL. -Una vez que se encuentra un punto de entrada, el atacante puede comenzar a codificar el código malicioso para evitar la detección y la filtración. Por ejemplo, puede codificar caracteres especiales como "<" o ">" en su equivalente HTML "<" o ">", o codificar todo el código utilizando la codificación de URL. +Una vez que se encuentra un punto de entrada, el atacante puede comenzar a manipular los datos de entrada para codificar el código malicioso. Por ejemplo, si el atacante desea inyectar un script JavaScript, puede codificarlo utilizando la función `encodeURIComponent()` en JavaScript. -Una vez que el código malicioso se ha codificado, se inyecta en el punto de entrada y se envía al servidor web. El servidor web decodifica los datos de entrada y los muestra en el navegador del usuario sin realizar ninguna validación o filtrado adecuado. Como resultado, el código malicioso se ejecuta en el contexto del sitio web vulnerable. +```javascript +var maliciousCode = ''; +var encodedCode = encodeURIComponent(maliciousCode); +``` -Para protegerse contra la ejecución de código codificado, es importante implementar medidas de seguridad adecuadas, como la validación y el filtrado de datos de entrada, la codificación adecuada de salida y el uso de bibliotecas y marcos de trabajo seguros. Además, mantenerse actualizado con los últimos parches y actualizaciones de seguridad también es fundamental para protegerse contra las vulnerabilidades conocidas. +El código malicioso codificado se puede enviar al servidor web a través de la solicitud HTTP. Cuando el servidor web recibe los datos de entrada codificados, los decodifica y los muestra en el navegador del usuario sin realizar ninguna validación o filtrado adecuado. Como resultado, el código malicioso se ejecuta en el contexto del sitio web vulnerable, lo que permite al atacante lograr sus objetivos maliciosos. + +Para protegerse contra la ejecución de código codificado, es importante implementar medidas de seguridad adecuadas en la aplicación web. Esto incluye la validación y filtrado de datos de entrada, la implementación de listas blancas de caracteres permitidos y la codificación adecuada de datos de salida. Además, mantenerse actualizado con los parches de seguridad y las mejores prácticas de desarrollo web puede ayudar a prevenir ataques de XSS. ```markup \"/\"src=\"/\"onerror=eval(id) +(function(x){this[x+`ert`](1)})`al` +window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) +document['default'+'View'][`\u0061lert`](3) ``` ### XSS con inyección de encabezado en una respuesta 302 @@ -1195,44 +1209,36 @@ Existen tres tipos principales de XSS: 2. **Almacenado (Stored XSS):** El código malicioso se almacena en la base de datos de la aplicación web y se muestra a los usuarios cuando acceden a ciertas páginas o secciones. Esto puede ocurrir en comentarios, perfiles de usuario, mensajes de chat, etc. -3. **Basado en DOM (DOM-based XSS):** El código malicioso se ejecuta en el lado del cliente manipulando el DOM (Modelo de Objetos del Documento) de la página web. Esto ocurre cuando la aplicación web utiliza JavaScript para procesar datos no confiables sin realizar una adecuada validación o sanitización. +3. **Basado en DOM (DOM-based XSS):** El código malicioso se ejecuta en el lado del cliente manipulando el DOM (Modelo de Objetos del Documento) de la página web. Esto puede ocurrir cuando la aplicación web utiliza JavaScript para procesar datos no confiables sin realizar una validación adecuada. ## Prevención de XSS -Para prevenir el XSS, es importante seguir buenas prácticas de seguridad en el desarrollo de aplicaciones web: +Para prevenir ataques XSS, es importante seguir buenas prácticas de seguridad en el desarrollo de aplicaciones web: - **Validación y sanitización de datos:** Siempre se deben validar y sanitizar los datos de entrada antes de mostrarlos en la página web. Esto incluye la eliminación de caracteres especiales y la codificación de HTML. - **Uso de encabezados de seguridad:** Configurar encabezados de seguridad como Content-Security-Policy (CSP) y X-XSS-Protection puede ayudar a mitigar los ataques XSS al restringir el origen y el tipo de contenido permitido en la página. -- **Escape adecuado de datos:** Al mostrar datos dinámicos en la página, es importante escapar correctamente los caracteres especiales para evitar la interpretación errónea como código HTML o JavaScript. +- **Escape adecuado de datos:** Al mostrar datos dinámicos en la página, se debe utilizar la función de escape adecuada para asegurarse de que los caracteres especiales se muestren correctamente y no se interpreten como código malicioso. -- **Implementación de mecanismos de autenticación y autorización:** Utilizar mecanismos de autenticación y autorización sólidos puede ayudar a prevenir ataques XSS al limitar el acceso a funciones sensibles de la aplicación. - -- **Actualización y parcheo regular:** Mantener la aplicación web actualizada con las últimas correcciones de seguridad y parches es esencial para protegerse contra nuevas vulnerabilidades conocidas. +- **Educación y conciencia:** Es importante educar a los desarrolladores y usuarios sobre los riesgos de XSS y cómo prevenirlo. Esto incluye la capacitación en buenas prácticas de seguridad y la promoción de la conciencia sobre la importancia de no hacer clic en enlaces sospechosos o proporcionar información confidencial en sitios web no confiables. ## Ejemplo de código vulnerable A continuación se muestra un ejemplo de código vulnerable a XSS: ```html - - - -Página vulnerable a XSS - - -

Bienvenido

-

Hola, !

- - + ``` -En este ejemplo, el valor del parámetro `nombre` se muestra directamente en la página sin ninguna validación o sanitización. Un atacante podría aprovechar esto para inyectar código malicioso en la URL y ejecutarlo en el navegador del usuario. +En este ejemplo, el valor de `userInput` se muestra directamente en la página sin ninguna validación o sanitización. Un atacante podría aprovechar esto para inyectar código malicioso y ejecutarlo en el navegador de los usuarios. -## Conclusiones +## Conclusion -El XSS es una vulnerabilidad grave que puede tener consecuencias significativas para la seguridad de una aplicación web y sus usuarios. Es importante comprender cómo funciona el XSS y seguir las mejores prácticas de seguridad para prevenirlo. +El XSS es una vulnerabilidad grave que puede tener consecuencias significativas para la seguridad de una aplicación web y sus usuarios. Es importante tomar medidas proactivas para prevenir y mitigar los ataques XSS, siguiendo las mejores prácticas de seguridad y manteniendo una buena educación y conciencia sobre los riesgos asociados. ```javascript // It's also possible to execute JS code only with the chars: []`+!${} @@ -1290,25 +1296,25 @@ Durante una prueba de penetración, es posible que desees encontrar las direccio Aquí hay algunas técnicas que puedes utilizar para encontrar las IPs internas: -1. **Ping Sweep**: Utiliza una herramienta como `nmap` para realizar un barrido de ping en un rango de direcciones IP. Esto te permitirá identificar qué direcciones IP están activas en la red. +1. **Ping Sweep**: Utiliza una herramienta como `nmap` para realizar un barrido de ping en la red objetivo. Esto te permitirá descubrir las direcciones IP activas en la red. ```bash - nmap -sn 192.168.0.0/24 + nmap -sn ``` -2. **ARP Scanning**: Utiliza una herramienta como `arp-scan` para realizar un escaneo ARP en la red. Esto te permitirá obtener una lista de direcciones IP y las correspondientes direcciones MAC de los dispositivos en la red. +2. **ARP Scanning**: Utiliza la tabla ARP para descubrir las direcciones IP y las direcciones MAC de los dispositivos en la red local. Puedes utilizar la herramienta `arp-scan` para realizar esto. ```bash arp-scan --localnet ``` -3. **DNS Lookup**: Realiza una búsqueda DNS inversa en un dominio para obtener las direcciones IP asociadas a ese dominio. Esto puede revelar direcciones IP internas utilizadas por el sistema objetivo. +3. **DNS Lookup**: Realiza una búsqueda de DNS inversa para obtener información sobre los nombres de host y las direcciones IP asociadas en la red interna. Puedes utilizar la herramienta `nslookup` para esto. ```bash - nslookup google.com + nslookup ``` -Recuerda que estas técnicas deben ser utilizadas de manera ética y con el permiso del propietario del sistema objetivo. +Recuerda que estas técnicas deben ser utilizadas con fines legales y éticos, y solo en sistemas en los que tengas permiso para realizar pruebas de penetración. ```html