Cross Site Scripting (XSS) y Vectores de Evasion

Iniciado por Muppet, Abril 04, 2013, 02:28:11 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 04, 2013, 02:28:11 PM Ultima modificación: Noviembre 23, 2014, 01:41:16 PM por Expermicid
Cross Site Scripting (XSS) y Vectores de Evasion

Bueno Antes que Nada este es solo un modelo de las posibilidades que brinda esta vulnerabilidad
recomiendo utilizar Firefox ya que Chrome tiene un bloqueo de Pop-up que nos va a impedir explotar comodamente el fallo

A tener en Cuenta:


Existe 2 tipos de XSS (Cross Site Scripting) ambos se basan en la ejecucion de codigo JavaScript sin que el ClientSide este pendiente de que esto va a suceder.

Reflected:


Son Aquellos producidos por un reflejo del Vector ingresado en el codigo html, por ej: Impresion de la Busqueda en una Web

Stored:


Son Aquellos Cuyo Vector ingresado queda registrado y/o impreso directamente en el contenido html de la Web Afectada.

Un Ej de esto seria un comentario de Moderacion que se guarda en una base de datos de gestion web por un Panel de Administracion, para darle el visto bueno.

Al Ingresar por ej un Script del tipo <script>alert("XSS")</script> no lo veriamos ejecutarce porq este esta pendiente de moderacion,
el Administrador al Ingresar al Panel de Moderacion este comentario se ejecutaria al momento de Moderar el Comentario. (Situacion Ideal)

Esto se puede utilizar para robar Cookies para luego lograr logearnos como ese Usuario.

Desarrollo:


En Fin Ambos Ataques se diferencian unicamente en el alcanse que poseen, XSS Reflected requiere un poco de ingenieria social para lograr nuestro Objetico

Hoy Vamos a Tomar como ejempo a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta que posee un fallo de XSS Reflected que reportado numerosas veces sin tener respuestas ni ver Correccion del Bug.

Comencemos:


Abrimos en Nuestro Navegador No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y vemos un flamante campo de Busqueda, interesado en ver que sucede ingreso un Vector de Busqueda.

Vector de Busqueda: >AQUI<

Inspeccionamos Elementos con Chrome y buscamos dentro del Codigo html la palabra AQUI




Vemos que no produce ningun tipo de Evacion ni Filtrado ante los caracteres ">" ni "<" esto da pie a pensar que vulnerable sin siquiera tener
que evadir con Double Encode.

Analicemos:

Código: php

<input type="text" name="textoBusqueda" class="texto" value=">AQUI<">

lo que intentaremos lograr es sacar nuestro Vector de Ataque fuera del input, como podemos ver la propiedad Value abre y cierra con doble comilla
intentaremos cerrar value, luego cerrar el input, injectar el vector y comentar el resto del codigo html

Escapando de la propiedad Value:


Para lograr esto en nuestro vector inyectaremos unas comillas dobles (")

esto quedara de la siguiente manera:

Código: php
<input type="text" name="textoBusqueda" class="texto" value=""">

como podemos ver queda por demas al final de la etiqueta un " antes del cierre >

Escapando del Input:


Ahora escaparemos del input, la logica de lo que vemos dice q se cierra con un ">" pero con un conocimiento minimo de html sabremos que las etiquetas input se cierran con /> aunque el inspector de Elementos de Chrome diga lo contrario.

Inyectaremos como Vector "/>

y nos quedara de la siguiente manera:

Código: php
<input type="text" name="textoBusqueda" class="texto" value=""/>">


Como vemos queda de mas al final de nuestro input "> esto producira un error de sintaxis por lo que deseamos eliminar esto ultimo
y lo vamos a lograr comentando el resto del codigo html

Por lo que agregaremos un <!-- al final de nuestro vector:

Código: php
"/><!--


y quedara una ves ejecutado:
Código: php

<input type="text" name="textoBusqueda" class="texto" value=""/><!--">

dejando sin utilidad todo lo posterior a nuestra apertura de Comentario.

Si probamos este codigo veremos que no se ejecuta nada pero la busqueda se realiza con exito.







Al ver el contenido con el Inspector de Elementos, vemos que value aparece sin ningun valor y que el resto del codigo esta comentado:
Código: php

<input type="text" name="textoBusqueda" class="texto" value="">

y esto es lo que estamos buscando, terminaremos la inyeccion agregando a nuestro vector justo antes de comentar (<!--) el codigo JavaScript que deseamos ejecutar

quedando de la siguiente manera:

Vector:


Código: php
"/><script>alert(document.cookie)</script><!--

Reflejo Web:

Código: php

<input type="text" name="textoBusqueda" class="texto" value="""/><script>alert(document.cookie)</script><!--">

esto producira que el codigo JavaScript se ejecute:

Si leyeron el Comienzo de este Tutorial veran que recomiendo usar Firefox para completar la explotacion ya que Chrome previene de ventanas Emergentes.





Vemos que se Ejecuta con Exito y deja Expuesto la cookie del Usuario.

Ingenieria Social:


Podriamos agregar en nuestro script una redireccion a un archivo php que almacenara esta cookie, y lo vamos a lograr con un poco de Ingenieria Social para explotar este Reflected XSS. Solo que en nuestro caso no robaremos la cookie solo Mostraremos un Alert a La Victima ya que estamos sobre un rubro etico.

Como vemos nuestro Vector de Ataque se produce por GET por lo que veremos nuestra inyeccion en la URL de nuestro Navegador:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




Dandonos como resultado este Link:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Solo resta Enviar a Nuestra Victima este Link con algun discurso para que lo Abra en su Navegador.





Al revisar nuestra bandeja de entrada, vemos como el link cayo como Seguro y sin pasar al buzon de Spam




Al Hacer Click en el link Sucede la Magia:





Evasion de Filtros en XSS


Existe Distintos metodos de evacion utlizando metodos propios de javascript dentro de las etiquetas html que queremos inyectar, por Ej

Código: php
<b onLoad=alert(/XSS/)></b>
<img src=. onerror=alert(/XSS/)>


Utilizar un Doble Encode Codificando 2 veces el Vector con URL Encode antes de ingresarlo

Código: php
<b onLoad=alert(/XSS/)></b> A Double Encode:

%253Cb%2520onLoad%253Dalert%2528%252fXSS%252f%2529%253E%253C%252fb%253E


Double Tag para saltar StripTags
Código: php

<scr<script>ipt>alert(/XSS/)</scr<script>ipt><!--

StripTag eliminara la etiqueta <script> y unira la etiqueta divididada.

Estos son unos de Muchos Otros Metodos de Evasion.

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".

¡Tremendo hdbreaker!
Lo que más me ha gustado el apartado de la ingeniería social, jajajaja.

Aunque he echado en falta en los vectores de evasión el ya mítico alert(String.fromCharCode(88, 83, 83))

Saludos. ((:
Contacto: @migueljimeno96 -

Muy bien explicado, lo unico que el double encoding solo sirve para evadir algunos WAF mal configurados y no ciertas funciones de filtro como htmlentities(), htmlespecialchars(), se que en ningun momento te referiste a ese plano, pero lo explico por si alguno le quedan dudas al leer el post. saludos!

Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Twitter: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Excelente bro de los mejores aportes de xss del foro un saludo :D
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta