18
XSS PERSISTENTE Y DOM 2011 Javier García Cambronel SEGUNDO DE ASIR 22/11/2011

Ataques XSS en Gruyere

Embed Size (px)

DESCRIPTION

2011XSSPERSISTENTE Y DOMJavier García Cambronel SEGUNDO DE ASIR 22/11/2011[XSS] 22 de noviembre de 2011XSSEJEMPLO DOM EN GRUYEREESTRUCTURA DOM DE LA WEB GRUYERECOMO ACTIVAR GRUYERE PARA TRABAJAR ENTRE VARIOS USUARIOS REMOTAMENTEJAVIER ATACANTE NAVEGADOR: EXPLORER9 - EDUARDO VÍCTIMA NAVEGADOR: FIREFOX8JAVIER VÍCTIMA NAVEGADOR: EXPLORER9-EDUARDO ATACANTE NAVEGADOR: FIREFOX8DIFERENCIA ENTRE NAVEGADORESTRABAJO OPCIONALFOCA NESSUS WIKTOSEGUNDO DE ASIRPágina 1[XSS] 22 de

Citation preview

Page 1: Ataques XSS en Gruyere

XSS PERSISTENTE Y DOM

2011

Javier García Cambronel SEGUNDO DE ASIR

22/11/2011

Page 2: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 1

XSS

EJEMPLO DOM EN GRUYERE

ESTRUCTURA DOM DE LA WEB GRUYERE

COMO ACTIVAR GRUYERE PARA TRABAJAR ENTRE VARIOS USUARIOS

REMOTAMENTE

JAVIER ATACANTE NAVEGADOR: EXPLORER9 - EDUARDO VÍCTIMA

NAVEGADOR: FIREFOX8

JAVIER VÍCTIMA NAVEGADOR: EXPLORER9-EDUARDO ATACANTE

NAVEGADOR: FIREFOX8

DIFERENCIA ENTRE NAVEGADORES

TRABAJO OPCIONAL

FOCA

NESSUS

WIKTO

Page 3: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 2

XSS XSS es un ataque de inyección de código malicioso para su posterior ejecución que puede realizarse a sitios web, aplicaciones locales e incluso al propio navegador.

Uno de los factores (hay más) que pueden anunciarnos que una página web es vulnerable de un ataque al DOM es una página en HTML que utiliza datos que provienen de:

+ document.location

+ document.URL

+ document.referer

Cuando -javascript- es ejecutado en el navegador, éste provee al código -javascript- (servidor) con varios objetos que representan el DOM. El documento además de objetos, contiene –subobjectoscomo la localización, la -url- y el -referer-. Eso significa que son entendidos por el navegador directamente, antes de llegar al aplicativo servidor.

Por eso precisamente es tan complicado utilizar contramedidas. Muy pocas aplicaciones en HTML -parsean- la URL accedida desde document.URL o document.location.

Page 4: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 3

EJEMPLO DOM EN GRUYERE

Lo primero que sucede es que el navegador de la víctima recibe ese -link-, envía una petición HTTP al sitio web al que hemos inyectado código a través de XSS y recibe el código web estático que genera el HTML. El navegador de la víctima comienza entonces el -parseo- del HTML dentro del DOM. El esquema DOM contiene un objeto llamado “documento”, que contiene a su vez, una propiedad llamada “URL”. A partir de dicha propiedad contiene los datos de la URL, como parte del DOM. Cuando el -parseador- llega al código -javascript-, éste lo ejecuta y modifica la -raw- de la página HTML. Si se trata de una -url- hace la referencia a “document.url” y parte del -string- que lo compone es -embebido- durante el -parseo- del código HTML, que es inmediatamente -parseado- a su vez y ejecutado en el contexto de la misma página (“al vuelo”). Por tanto, cualquiera de los vectores XSS descritos en la presentación podrían servir a un atacante.

De todas maneras no siempre es tan sencillo. Suceden dos hechos importantes:

+ No siempre el código malicioso que se trata de -embeber- se carga en la -raw- en HTML ;)

+ Algunos navegadores filtran los caracteres del -string- de la URL. -Mozilla- por ejemplo, codifica los caracteres propios de los scripts (< y >) por %3C y %3E dentro del “document.url” cuando la-url- no es escrita directamente en la barra de navegación.

Sin embargo es vulnerable sino se utilizan dichos parámetros (< y >), por ejemplo, a través de la-raw-)

Para hacer un -bypass- de determinadas medidas de prevención “standard” podemos utilizar el siguiente código:

#user=<script>alert(document.cookie)</script>

Algo aparentemente tan sencillo, cambia la interpretación del navegador respecto a lo que le sigue “a su derecha”. En el caso, el navegador entiende que lo que tiene después es un fragmento, es decir, no es parte de una llamada (una -query-).

Eso significa que el código “inyectado” puede ser que no sea “visto” por el servidor (salvo configuraciones de IDS -detection- , IPS o firewalls de aplicación).

Ahora vamos a ver las estructuras de alguna página para ello descargamos DOM INSPECTOR un ad don de Firefox que nos va a servir para comprobar la jerarquía de elementos de las páginas WEB.

Page 5: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 4

ESTRUCTURA DOM DE LA WEB GRUYERE

ESTRUCUTRA DOM DE LA WEB DEL COLEGIO MARISTAS

Page 6: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 5

COMO ACTIVAR GRUYERE PARA TRABAJAR ENTRE VARIOS USUARIOS REMOTAMENTE

Nos metemos en la siguiente página y nos informamos sobre este programa antes de

empezar a utilizarlo http://google-gruyere.appspot.com/

Entonces se nos da un número ID como vemos en la imagen pulsamos en agree & start

Y nos saldrá ya gruyere donde crearemos nuestros usuarios, de normal tenemos dos

predefinidos y que siempre va a estar. Ahora lo que tenemos que hacer es pasar este enlace

entero a la persona o personas con las que vamos a trabajar conjuntamente incluida la ID y a

partir de ahí cada uno creará su usuario.

Page 7: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 6

JAVIER ATACANTE NAVEGADOR: EXPLORER9

EDUARDO VÍCTIMA NAVEGADOR: FIREFOX8

ATAQUE SIMPLE

Lo primero que hago que ejecute la víctima es una ataque simple, un mensaje de alerta, que

demuestra la vulnerabilidad de la página, siendo un ataque persistente es decir, que se ha

alojado en el servidor, este ataque se ha podido aprovechar debido a una vulnerabilidad

red' onload='alert(“página cargada”)' onmouseover='alert(“ataque”)

Puede que tenga que mover el ratón sobre el fragmento para desencadenar el ataque. Este

ataque funciona porque la primera cita termina el style y la segunda cita se inicia el atributo

onload.

Pero este ataque no funcionaba en absoluto. Echa un vistazo a home.gtl donde metemos el

color. Se dice style='{{color:text}}', y como hemos visto anteriormente,:text dice parte para

escapar del texto. ¿Entonces? En gtl.py , llama cgi.escape(str(value)) que tiene un segundo

parámetro opcional que indica que el valor se está utilizando un atributo HTML. Para que

pueda reemplazar esto con cgi.escape(str(value),True) . El problema es que cgi.escape asume

los atributos HTML se escriben entre comillas dobles y este archivo es usando comillas

simples. (Esto debería enseñarle que siempre lea cuidadosamente la documentación de las

bibliotecas que utiliza y para poner a prueba siempre que se haga lo que quiera.)

Page 8: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 7

PARCHEAR EL ATAQUE

Para solucionarlo, tenemos que usar un escapar con un texto, que escape las comillas

simples y dobles también:

def _EscapeTextToHtml(var):

"""Escape HTML metacharacters.

Esta función escapa a carácteres que son peligrosos para insertar en HTML.

Se evita XSS a través de citas o script inyectado en valores de atributos.

Es más seguro que cgi.escape, que escapa solo <,>, y por defecto.

cgi.escape se puede contar para escapar de las comillas dobles, pero nunca

de las comillas simples.

"""

meta_chars = {

'"': '&quot;',

'\'': '&#39;', # Not &apos;

'&': '&amp;',

'<': '&lt;',

'>': '&gt;',

}

escaped_var = ""

for i in var:

if i in meta_chars:

escaped_var = escaped_var + meta_chars[i]

else:

escaped_var = escaped_var + i

return escaped_var

Page 9: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 8

PODEMOS HACER UN ATAQUE DOS, ES DECIR UNA DENEGACIÓN DE SERVICIO

para hacer esto hemos utilizado el campo de donde creamos un nuevo Snippet.

Hay que tener en cuenta que hay varios errores en la desinfección del HTML. Fragmento de

un trabajo debido a onmouseover se omitió inadvertidamente de la lista de atributos

permitidos en sanitize.py. Los navegadores tienden a ser indulgentes con la sintaxis HTML y

el manejo de ambas etiquetas de inicio y fin si están libres de errores. Entonces lo que

hacemos es insertar el siguiente código que se ejecutara siempre que cualquier usuario

deslice y/o pase su ratón sobre el Snnipet del atacante, que por otra parte está debidamente

camuflado con el mensaje que le queramos poner, en este caso como podemos ver en el

código y en la propia imagen que se nos muestra el mensaje que se muestra es

“pasaparabucleinfinito”

<a onmouseover="for(;;)alert('bucleinfinito')" href="#">pasaparabucleinfinito</a>

PARCHEAR EL ATAQUE: Utilizar un desinfectante HTML de calidad.

Page 10: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 9

MOSTRAR COOKIE DEL USUARIO QUE NAVEGA Y REDIRECCIONAMIENTO

Otro de los ataques que podemos hacer es subiendo archivos, bueno mejor más que un

ataque propiamente dicho es un método. Pues con este método podemos realizar muchos

ataques y de diferentes tipos, como por ejemplo los que hemos citado anteriormente y

algunos más avanzados, tiene la ventaja que de este método no estamos siendo limitados

por un atributo html ni nada por el estilo, sino que directamente somos libres de subir al

servidor el código que queramos para que los clientes lo ejecuten .Por ejemplo, poniendo la

dirección que nos ha dado el servidor cuando hemos subido el archivo malicioso en la

dirección HOMEPAGE de nuestro perfil, o de otro que creemos para este uso en particular.

MOSTRAR LA COOKIE con un archivo que contiene un script de java con la función

document.cookie que pertenece al modelo DOM muestra al que navega su cookie.

Page 11: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 10

Poniendo una dirección en Homepage, que previamente hemos creado y subido a un

servidor, como puede ser también el propio de gruyere, y configurar esa página de tal forma

que envíe los datos introducidos a un correo electrónico.Esto lo hacemos con tynurl para

ocultar la dirección maliciosa

Page 12: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 11

JAVIER VÍCTIMA NAVEGADOR: EXPLORER9

EDUARDO ATACANTE NAVEGADOR: FIREFOX8

DIFERENCIA ENTRE NAVEGADORES IE9VSFIREFOX8

Los Ataques son los mismos que se han utilizado en el ejemplo anterior, lo único diferente

es en el navegador donde lo ejecutamos. Y así poder ver la diferencia si es que la hay.

PRIMERO ejecutamos el Alert simplemente con deslizar el ratón sobre el nombre de EDU y

se nos muestra ese mensaje dando muestra de la vulnerabilidad.

Vemos simplemente una diferencia en el aspecto visual que muestra la ventana, pero el XSS

el navegador no ha logrado evitarlo. Esto es porque los XSS persistentes que se han alojado

en el servidor son muy difíciles de detectar por los navegadores y por antivirus y firewalls.

Page 13: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 12

EN ESTE SEGUNDO ATAQUE pasamos el ratón por donde pone Bucleinfinito ejecutando el

script de denegación de servicio.

Como vemos nos sale la siguiente ventana, si pulsamos en aceptar nos volverá a salir la

ventana indefinidamente hagamos lo que hagamos, intentamos cerrar la página y tampoco

nos deja la ventaja de Firefox es que tenemos la opción de marcar que no nos vuelva a salir

el mensaje y así poder evitar la denegación del servicio.

Tenemos que recurrir al Administrador de tareas de Windows, para que podamos finalizar la

tarea, ya que el explorador ha dejado de responder cosa que no ocurre con Firefox 8.0

Page 14: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 13

EN ESTE TERCER ATAQUE lo que se hace es una redirección y como vemos, se ejecuta de la

misma forma que se lo ha ejecutado Firefox, hay que tener en cuenta que este aspecto no

depende del navegador sino mas bien del Antivirus y/o Firewall que tengamos instalado.

Page 15: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 14

TRABAJO OPCIONAL Buscando vulnerabilidades XSS con FOCA, NESSUS y WIKTO en los institutos de mi zona

FOCA

FOCA es un programa que por ahora en su versión 3.0 no busca vulnerabilidades XSS aunque

sí que puede ser útil. Sí esa aplicación tiene vulnerabilidades XSS mediante el método trace,

el cuál si busca FOCA puede ser explotada para robar la cookie, aunque para eso la WEB

tiene que estar configurada de una determinada forma que ahora veremos:

Si queremos ver como se realiza este ataque sacada del siguiente enlace:

http://www.elladodelmal.com/2011/11/hijacking-de-cookies-http-only-con-xss.html

Page 16: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 15

NESSUS

Nessus tiene muchas opciones, entre ellas se puede hacer un análisis de una Web de forma

completa y ver las vulnerabilidades que encontramos.

No voy a entrar en más detalles pues para eso teneis el siguiente enlace en español de un

Manual de cómo utilizar nessus y sus opciones realmente bueno.

http://static.tenable.com/documentation/nessus_4.4_installation_guide_ESN.pdf

Estas son las vulnerabilidades que he encontrado en todos los institutos de mi zona:

Hacemos una búsqueda de vulnerabilidades específica xss:

Y vemos los resultados que nos muestra:

Dentro de ellos podemos ver los tipos de ataque a los que esas páginas son vulnerables

Page 17: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 16

WIKTO

Wikto, (alternativa para Windows de Nikto) es una herramienta gratuita que realiza un

escáner en el entorno de un servidor Web Windows para encontrar vulnerabilidades.

Permite realizar fingerprinting del servidor web, extracción de directorios y links, análisis de

vulnerabilidades, ataques man-in-the-middle…etc.

Algunas de las opciones que nos ofrece Wikto son:

Mirror & Fingerprint: En esta pestaña, podemos realizar 2 operaciones, la primera de

ellas, es analizar todos los enlaces que tiene el sitio web para descubrir todos los

directorios, la segunda operación, realiza un análisis de las huellas del servidor web

proporcionando información del sitio para identificarlo.

Googler: Realiza búsquedas de directorios y archivos críticos del sitio web gracias a

las búsquedas especiales realizadas por google, combinando operadores como

filetype, site, etc. Una vez realizada la búsqueda, los resultados de directorios se

muestran extraídos desde las URLS, las cuales deben de ser analizadas

manualmente.

WIKTO: es el motor de Nikto, herramienta para rastrear páginas web.

BackEnd: Realiza búsquedas de directorios en el sitio web basándose en una lista de

nombres de directorios que suelen tener información crítica.

GoogleHacks: Realiza búsquedas en Google utilizando la base de datos GHDB (Google

Hacking Database) donde se encuentran todas las cadenas de búsquedas

susceptibles de devolver información crítica.

Page 18: Ataques XSS en Gruyere

[XSS] 22 de noviembre de 2011

SEGUNDO DE ASIR Página 17

Como podemos ver entre sus características no se encuentra buscar vulnerabilidades

XSS específicamente, sino vulnerabilidades WEB en general, a través del motor de

búsqueda nikto en la pestaña wikto este motor de búsqueda que realmente es muy

potente

Estas son las vulnerabilidades que hemos encontrado las cuales, hay algunas como la

de TRACE Y DEFACED que si se pueden explotar mediante XSS Como en el ejemplo

antes citado de FOCA.

Configuración:

Vulnerabilidades encontradas: