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 />
'"': '"',<br />
'\'': ''', # Not '<br />
'&': '&',<br />
'': '>',<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