16.08.2019 Views

Ataques-XSS-en-Gruyere

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2011<br />

<strong>XSS</strong><br />

PERSISTENTE Y DOM<br />

Javier García Cambronel<br />

SEGUNDO DE ASIR<br />

22/11/2011


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

<strong>XSS</strong><br />

EJEMPLO DOM EN GRUYERE<br />

ESTRUCTURA DOM DE LA WEB GRUYERE<br />

COMO ACTIVAR GRUYERE PARA TRABAJAR ENTRE VARIOS USUARIOS<br />

REMOTAMENTE<br />

JAVIER ATACANTE NAVEGADOR: EXPLORER9 - EDUARDO VÍCTIMA<br />

NAVEGADOR: FIREFOX8<br />

JAVIER VÍCTIMA NAVEGADOR: EXPLORER9-EDUARDO ATACANTE<br />

NAVEGADOR: FIREFOX8<br />

DIFERENCIA ENTRE NAVEGADORES<br />

TRABAJO OPCIONAL<br />

FOCA<br />

NESSUS<br />

WIKTO<br />

SEGUNDO DE ASIR Página 1


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

<strong>XSS</strong><br />

<strong>XSS</strong> es un ataque de inyección de código malicioso para su posterior ejecución que puede<br />

realizarse a sitios web, aplicaciones locales e incluso al propio navegador.<br />

Uno de los factores (hay más) que pued<strong>en</strong> anunciarnos que una página web es vulnerable de<br />

un ataque al DOM es una página <strong>en</strong> HTML que utiliza datos que provi<strong>en</strong><strong>en</strong> de:<br />

+ docum<strong>en</strong>t.location<br />

+ docum<strong>en</strong>t.URL<br />

+ docum<strong>en</strong>t.referer<br />

Cuando -javascript- es ejecutado <strong>en</strong> el navegador, éste provee al código -javascript-<br />

(servidor) con varios objetos que repres<strong>en</strong>tan el DOM. El docum<strong>en</strong>to además de objetos,<br />

conti<strong>en</strong>e –subobjectoscomo la localización, la -url- y el -referer-. Eso significa que son<br />

<strong>en</strong>t<strong>en</strong>didos por el navegador directam<strong>en</strong>te, antes de llegar al aplicativo servidor.<br />

Por eso precisam<strong>en</strong>te es tan complicado utilizar contramedidas. Muy pocas aplicaciones <strong>en</strong><br />

HTML -parsean- la URL accedida desde docum<strong>en</strong>t.URL o docum<strong>en</strong>t.location.<br />

SEGUNDO DE ASIR Página 2


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

EJEMPLO DOM EN GRUYERE<br />

Lo primero que sucede es que el navegador de la víctima recibe ese -link-, <strong>en</strong>vía una petición<br />

HTTP al sitio web al que hemos inyectado código a través de <strong>XSS</strong> y recibe el código web<br />

estático que g<strong>en</strong>era el HTML. El navegador de la víctima comi<strong>en</strong>za <strong>en</strong>tonces el -parseo- del<br />

HTML d<strong>en</strong>tro del DOM. El esquema DOM conti<strong>en</strong>e un objeto llamado “docum<strong>en</strong>to”, que<br />

conti<strong>en</strong>e a su vez, una propiedad llamada “URL”. A partir de dicha propiedad conti<strong>en</strong>e los<br />

datos de la URL, como parte del DOM. Cuando el -parseador- llega al código -javascript-, éste<br />

lo ejecuta y modifica la -raw- de la página HTML. Si se trata de una -url- hace la refer<strong>en</strong>cia a<br />

“docum<strong>en</strong>t.url” y parte del -string- que lo compone es -embebido- durante el -parseo- del<br />

código HTML, que es inmediatam<strong>en</strong>te -parseado- a su vez y ejecutado <strong>en</strong> el contexto de la<br />

misma página (“al vuelo”). Por tanto, cualquiera de los vectores <strong>XSS</strong> descritos <strong>en</strong> la<br />

pres<strong>en</strong>tación podrían servir a un atacante.<br />

De todas maneras no siempre es tan s<strong>en</strong>cillo. Suced<strong>en</strong> dos hechos importantes:<br />

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

+ Algunos navegadores filtran los caracteres del -string- de la URL. -Mozilla- por ejemplo,<br />

codifica los caracteres propios de los scripts (< y >) por %3C y %3E d<strong>en</strong>tro del “docum<strong>en</strong>t.url”<br />

cuando la-url- no es escrita directam<strong>en</strong>te <strong>en</strong> la barra de navegación.<br />

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

la-raw-)<br />

Para hacer un -bypass- de determinadas medidas de prev<strong>en</strong>ción “standard” podemos utilizar<br />

el sigui<strong>en</strong>te código:<br />

#user=alert(docum<strong>en</strong>t.cookie)<br />

Algo apar<strong>en</strong>tem<strong>en</strong>te tan s<strong>en</strong>cillo, cambia la interpretación del navegador respecto a lo que le<br />

sigue “a su derecha”. En el caso, el navegador <strong>en</strong>ti<strong>en</strong>de que lo que ti<strong>en</strong>e después es un<br />

fragm<strong>en</strong>to, es decir, no es parte de una llamada (una -query-).<br />

Eso significa que el código “inyectado” puede ser que no sea “visto” por el servidor (salvo<br />

configuraciones de IDS -detection- , IPS o firewalls de aplicación).<br />

Ahora vamos a ver las estructuras de alguna página para ello descargamos DOM INSPECTOR<br />

un ad don de Firefox que nos va a servir para comprobar la jerarquía de elem<strong>en</strong>tos de las<br />

páginas WEB.<br />

SEGUNDO DE ASIR Página 3


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

ESTRUCTURA DOM DE LA WEB GRUYERE<br />

ESTRUCUTRA DOM DE LA WEB DEL COLEGIO MARISTAS<br />

SEGUNDO DE ASIR Página 4


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

COMO ACTIVAR GRUYERE PARA TRABAJAR ENTRE VARIOS USUARIOS REMOTAMENTE<br />

Nos metemos <strong>en</strong> la sigui<strong>en</strong>te página y nos informamos sobre este programa antes de<br />

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

Entonces se nos da un número ID como vemos <strong>en</strong> la imag<strong>en</strong> pulsamos <strong>en</strong> agree & start<br />

Y nos saldrá ya gruyere donde crearemos nuestros usuarios, de normal t<strong>en</strong>emos dos<br />

predefinidos y que siempre va a estar. Ahora lo que t<strong>en</strong>emos que hacer es pasar este <strong>en</strong>lace<br />

<strong>en</strong>tero a la persona o personas con las que vamos a trabajar conjuntam<strong>en</strong>te incluida la ID y a<br />

partir de ahí cada uno creará su usuario.<br />

SEGUNDO DE ASIR Página 5


JAVIER ATACANTE NAVEGADOR: EXPLORER9<br />

EDUARDO VÍCTIMA NAVEGADOR: FIREFOX8<br />

ATAQUE SIMPLE<br />

[<strong>XSS</strong>] 22 de noviembre de 2011<br />

Lo primero que hago que ejecute la víctima es una ataque simple, un m<strong>en</strong>saje de alerta, que<br />

demuestra la vulnerabilidad de la página, si<strong>en</strong>do un ataque persist<strong>en</strong>te es decir, que se ha<br />

alojado <strong>en</strong> el servidor, este ataque se ha podido aprovechar debido a una vulnerabilidad<br />

red' onload='alert(“página cargada”)' onmouseover='alert(“ataque”)<br />

Puede que t<strong>en</strong>ga que mover el ratón sobre el fragm<strong>en</strong>to para des<strong>en</strong>cad<strong>en</strong>ar el ataque. Este<br />

ataque funciona porque la primera cita termina el style y la segunda cita se inicia el atributo<br />

onload.<br />

Pero este ataque no funcionaba <strong>en</strong> absoluto. Echa un vistazo a home.gtl donde metemos el<br />

color. Se dice style='{{color:text}}', y como hemos visto anteriorm<strong>en</strong>te,:text dice parte para<br />

escapar del texto. ¿Entonces? En gtl.py , llama cgi.escape(str(value)) que ti<strong>en</strong>e un segundo<br />

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

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

los atributos HTML se escrib<strong>en</strong> <strong>en</strong>tre comillas dobles y este archivo es usando comillas<br />

simples. (Esto debería <strong>en</strong>señarle que siempre lea cuidadosam<strong>en</strong>te la docum<strong>en</strong>tación de las<br />

bibliotecas que utiliza y para poner a prueba siempre que se haga lo que quiera.)<br />

SEGUNDO DE ASIR Página 6


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

PARCHEAR EL ATAQUE<br />

Para solucionarlo, t<strong>en</strong>emos que usar un escapar con un texto, que escape las comillas<br />

simples y dobles también:<br />

def _EscapeTextToHtml(var):<br />

"""Escape HTML metacharacters.<br />

Esta función escapa a carácteres que son peligrosos para insertar <strong>en</strong> HTML.<br />

Se evita <strong>XSS</strong> a través de citas o script inyectado <strong>en</strong> valores de atributos.<br />

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

cgi.escape se puede contar para escapar de las comillas dobles, pero nunca<br />

de las comillas simples.<br />

"""<br />

meta_chars = {<br />

'"': '&quot;',<br />

'\'': '&#39;', # Not &apos;<br />

'&': '&amp;',<br />

'': '&gt;',<br />

}<br />

escaped_var = ""<br />

for i in var:<br />

if i in meta_chars:<br />

escaped_var = escaped_var + meta_chars[i]<br />

else:<br />

escaped_var = escaped_var + i<br />

return escaped_var<br />

SEGUNDO DE ASIR Página 7


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

PODEMOS HACER UN ATAQUE DOS, ES DECIR UNA DENEGACIÓN DE SERVICIO<br />

para hacer esto hemos utilizado el campo de donde creamos un nuevo Snippet.<br />

Hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que hay varios errores <strong>en</strong> la desinfección del HTML. Fragm<strong>en</strong>to de<br />

un trabajo debido a onmouseover se omitió inadvertidam<strong>en</strong>te de la lista de atributos<br />

permitidos <strong>en</strong> sanitize.py. Los navegadores ti<strong>en</strong>d<strong>en</strong> a ser indulg<strong>en</strong>tes con la sintaxis HTML y<br />

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

hacemos es insertar el sigui<strong>en</strong>te código que se ejecutara siempre que cualquier usuario<br />

deslice y/o pase su ratón sobre el Snnipet del atacante, que por otra parte está debidam<strong>en</strong>te<br />

camuflado con el m<strong>en</strong>saje que le queramos poner, <strong>en</strong> este caso como podemos ver <strong>en</strong> el<br />

código y <strong>en</strong> la propia imag<strong>en</strong> que se nos muestra el m<strong>en</strong>saje que se muestra es<br />

“pasaparabucleinfinito”<br />

pasaparabucleinfinito<br />

PARCHEAR EL ATAQUE: Utilizar un desinfectante HTML de calidad.<br />

SEGUNDO DE ASIR Página 8


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

MOSTRAR COOKIE DEL USUARIO QUE NAVEGA Y REDIRECCIONAMIENTO<br />

Otro de los ataques que podemos hacer es subi<strong>en</strong>do archivos, bu<strong>en</strong>o mejor más que un<br />

ataque propiam<strong>en</strong>te dicho es un método. Pues con este método podemos realizar muchos<br />

ataques y de difer<strong>en</strong>tes tipos, como por ejemplo los que hemos citado anteriorm<strong>en</strong>te y<br />

algunos más avanzados, ti<strong>en</strong>e la v<strong>en</strong>taja que de este método no estamos si<strong>en</strong>do limitados<br />

por un atributo html ni nada por el estilo, sino que directam<strong>en</strong>te somos libres de subir al<br />

servidor el código que queramos para que los cli<strong>en</strong>tes lo ejecut<strong>en</strong> .Por ejemplo, poni<strong>en</strong>do la<br />

dirección que nos ha dado el servidor cuando hemos subido el archivo malicioso <strong>en</strong> la<br />

dirección HOMEPAGE de nuestro perfil, o de otro que creemos para este uso <strong>en</strong> particular.<br />

MOSTRAR LA COOKIE con un archivo que conti<strong>en</strong>e un script de java con la función<br />

docum<strong>en</strong>t.cookie que pert<strong>en</strong>ece al modelo DOM muestra al que navega su cookie.<br />

SEGUNDO DE ASIR Página 9


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

Poni<strong>en</strong>do una dirección <strong>en</strong> Homepage, que previam<strong>en</strong>te hemos creado y subido a un<br />

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

que <strong>en</strong>víe los datos introducidos a un correo electrónico.Esto lo hacemos con tynurl para<br />

ocultar la dirección maliciosa<br />

SEGUNDO DE ASIR Página 10


JAVIER VÍCTIMA NAVEGADOR: EXPLORER9<br />

[<strong>XSS</strong>] 22 de noviembre de 2011<br />

EDUARDO ATACANTE NAVEGADOR: FIREFOX8<br />

DIFERENCIA ENTRE NAVEGADORES IE9VSFIREFOX8<br />

Los <strong>Ataques</strong> son los mismos que se han utilizado <strong>en</strong> el ejemplo anterior, lo único difer<strong>en</strong>te<br />

es <strong>en</strong> el navegador donde lo ejecutamos. Y así poder ver la difer<strong>en</strong>cia si es que la hay.<br />

PRIMERO ejecutamos el Alert simplem<strong>en</strong>te con deslizar el ratón sobre el nombre de EDU y<br />

se nos muestra ese m<strong>en</strong>saje dando muestra de la vulnerabilidad.<br />

Vemos simplem<strong>en</strong>te una difer<strong>en</strong>cia <strong>en</strong> el aspecto visual que muestra la v<strong>en</strong>tana, pero el <strong>XSS</strong><br />

el navegador no ha logrado evitarlo. Esto es porque los <strong>XSS</strong> persist<strong>en</strong>tes que se han alojado<br />

<strong>en</strong> el servidor son muy difíciles de detectar por los navegadores y por antivirus y firewalls.<br />

SEGUNDO DE ASIR Página 11


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

EN ESTE SEGUNDO ATAQUE pasamos el ratón por donde pone Bucleinfinito ejecutando el<br />

script de d<strong>en</strong>egación de servicio.<br />

Como vemos nos sale la sigui<strong>en</strong>te v<strong>en</strong>tana, si pulsamos <strong>en</strong> aceptar nos volverá a salir la<br />

v<strong>en</strong>tana indefinidam<strong>en</strong>te hagamos lo que hagamos, int<strong>en</strong>tamos cerrar la página y tampoco<br />

nos deja la v<strong>en</strong>taja de Firefox es que t<strong>en</strong>emos la opción de marcar que no nos vuelva a salir<br />

el m<strong>en</strong>saje y así poder evitar la d<strong>en</strong>egación del servicio.<br />

T<strong>en</strong>emos que recurrir al Administrador de tareas de Windows, para que podamos finalizar la<br />

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

SEGUNDO DE ASIR Página 12


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

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

misma forma que se lo ha ejecutado Firefox, hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que este aspecto no<br />

dep<strong>en</strong>de del navegador sino mas bi<strong>en</strong> del Antivirus y/o Firewall que t<strong>en</strong>gamos instalado.<br />

SEGUNDO DE ASIR Página 13


TRABAJO OPCIONAL<br />

[<strong>XSS</strong>] 22 de noviembre de 2011<br />

Buscando vulnerabilidades <strong>XSS</strong> con FOCA, NESSUS y WIKTO <strong>en</strong> los institutos de mi zona<br />

FOCA<br />

FOCA es un programa que por ahora <strong>en</strong> su versión 3.0 no busca vulnerabilidades <strong>XSS</strong> aunque<br />

sí que puede ser útil. Sí esa aplicación ti<strong>en</strong>e vulnerabilidades <strong>XSS</strong> mediante el método trace,<br />

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

ti<strong>en</strong>e que estar configurada de una determinada forma que ahora veremos:<br />

Si queremos ver como se realiza este ataque sacada del sigui<strong>en</strong>te <strong>en</strong>lace:<br />

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

SEGUNDO DE ASIR Página 14


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

NESSUS<br />

Nessus ti<strong>en</strong>e muchas opciones, <strong>en</strong>tre ellas se puede hacer un análisis de una Web de forma<br />

completa y ver las vulnerabilidades que <strong>en</strong>contramos.<br />

No voy a <strong>en</strong>trar <strong>en</strong> más detalles pues para eso t<strong>en</strong>eis el sigui<strong>en</strong>te <strong>en</strong>lace <strong>en</strong> español de un<br />

Manual de cómo utilizar nessus y sus opciones realm<strong>en</strong>te bu<strong>en</strong>o.<br />

http://static.t<strong>en</strong>able.com/docum<strong>en</strong>tation/nessus_4.4_installation_guide_ESN.pdf<br />

Estas son las vulnerabilidades que he <strong>en</strong>contrado <strong>en</strong> todos los institutos de mi zona:<br />

Hacemos una búsqueda de vulnerabilidades específica xss:<br />

Y vemos los resultados que nos muestra:<br />

D<strong>en</strong>tro de ellos podemos ver los tipos de ataque a los que esas páginas son vulnerables<br />

SEGUNDO DE ASIR Página 15


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

WIKTO<br />

Wikto, (alternativa para Windows de Nikto) es una herrami<strong>en</strong>ta gratuita que realiza un<br />

escáner <strong>en</strong> el <strong>en</strong>torno de un servidor Web Windows para <strong>en</strong>contrar vulnerabilidades.<br />

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

vulnerabilidades, ataques man-in-the-middle…etc.<br />

Algunas de las opciones que nos ofrece Wikto son:<br />

<br />

<br />

<br />

<br />

<br />

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

ellas, es analizar todos los <strong>en</strong>laces que ti<strong>en</strong>e el sitio web para descubrir todos los<br />

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

proporcionando información del sitio para id<strong>en</strong>tificarlo.<br />

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

las búsquedas especiales realizadas por google, combinando operadores como<br />

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

muestran extraídos desde las URLS, las cuales deb<strong>en</strong> de ser analizadas<br />

manualm<strong>en</strong>te.<br />

WIKTO: es el motor de Nikto, herrami<strong>en</strong>ta para rastrear páginas web.<br />

BackEnd: Realiza búsquedas de directorios <strong>en</strong> el sitio web basándose <strong>en</strong> una lista de<br />

nombres de directorios que suel<strong>en</strong> t<strong>en</strong>er información crítica.<br />

GoogleHacks: Realiza búsquedas <strong>en</strong> Google utilizando la base de datos GHDB (Google<br />

Hacking Database) donde se <strong>en</strong>cu<strong>en</strong>tran todas las cad<strong>en</strong>as de búsquedas<br />

susceptibles de devolver información crítica.<br />

SEGUNDO DE ASIR Página 16


[<strong>XSS</strong>] 22 de noviembre de 2011<br />

Como podemos ver <strong>en</strong>tre sus características no se <strong>en</strong>cu<strong>en</strong>tra buscar vulnerabilidades<br />

<strong>XSS</strong> específicam<strong>en</strong>te, sino vulnerabilidades WEB <strong>en</strong> g<strong>en</strong>eral, a través del motor de<br />

búsqueda nikto <strong>en</strong> la pestaña wikto este motor de búsqueda que realm<strong>en</strong>te es muy<br />

pot<strong>en</strong>te<br />

Estas son las vulnerabilidades que hemos <strong>en</strong>contrado las cuales, hay algunas como la<br />

de TRACE Y DEFACED que si se pued<strong>en</strong> explotar mediante <strong>XSS</strong> Como <strong>en</strong> el ejemplo<br />

antes citado de FOCA.<br />

Configuración:<br />

Vulnerabilidades <strong>en</strong>contradas:<br />

SEGUNDO DE ASIR Página 17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!