Está en la página 1de 5

El papel de Javascript en el hacking

Enviado por admin el Sáb, 22/02/2014 - 17:46

Muchos de vosotros quizá hayáis oído hablar de la técnica "inyección de código


javascript". Lo que hoy vamos a ver son las bases necesarias para comprender los
ataques de inyección de código Javascript, cómo funcionan, que objetivos pueden llegar
a alcanzarse con esta técnica y cómo evitar ser víctimas de este tipo de ataques si somos
nosotros los que jugamos como defensa de un portal web.

¿Qué es Javascript?
Javascript es un lenguaje de programación interpretado, no es compilado, o sea que
es leído e interpretado directamente por el navegador como código fuente cuando
éste lee la página. Esto quiere decir que no bajamos un archivo .exe, .com, o lo que sea
ya compilado para que al ejecutarlo de un resultado sino que tenemos el código a
ejecutar metido en el código fuente de nuestra página web. Tal como en HTML, el
explorador lee el código y hace lo que debe hacer.

Es un lenguaje de scripts, por lo que un programa en JavaScript estaría


conformado por pequeños scripts, cada uno de estos scripts serían miniprogramas y se
interpretarán línea por línea mientras que la aplicación sigue su ejecución normal. 

Es un lenguaje orientado a eventos, Javascript está capacitado para detectar


muchísimos eventos y reaccionar a ellos con una acción programada por nosotros.
Un evento es un suceso que ocurra durante la interacción del usuario y el navegador. Al
ser guiado por eventos, no tenemos una función principal que se ejecute antes que de
las demás, sino que tendremos varias funciones que se irán ejecutando según proceda.

Es un lenguaje orientado a objetos, aunque sería mejor decir que su estructura está
basada en objetos. Al margen de cuestiones técnicas el caso es que tiene una biblioteca
de objetos predefinidos que podremos utilizar para facilitar la tarea de programar
nuestros scripts.

¿Para qué se utiliza Javascript?


La función principal de Javascript es dar órdenes al navegador del usuario para
que haga justo lo que queremos que haga. Esto desde el punto de vista del hacking y
la seguridad informática es sin duda alguna una característica más que atractiva ya que
nos permite interactuar con el navegador del usuario de forma directa. Con javascript
nosotros podemos validar un formulario html para evitar que el usuario nos envíe
datos erróneos, por ejemplo, podemos detectar campos vacíos que son obligatorios y si
el usuario pulsa sobre enviar decirle que primero ha de rellenar estos campos, ya que si
no lo hace no podrá completar el registro. Con Javascript podemos crear todos estos
efectos de transiciones de imágenes que acostumbramos a ver en múltitud de páginas
web. Desde hace ya unos años existe una librería de funciones escirtas en Javascript
llamada Jquery. Esta librería es código libre, gratuita y la podrás descargar sin
problemas. En definitiva, Javascript fue desarrollado con la clara intención de
mejorar la experiencia de un usuario en un sitio web. 

¿Qué papel juega Javascript en el hacking?


Javascript es una pieza clave y fundamental en multitud de técnicas de hacking que
iremos viendo con posteriordad, tiene cabida en técnicas de Phising (suplantación de
identidad) técnicas avanzadas en ataques de tipo Cross site Scripting XSS (Robo de
sesiones) y multitud de técnicas que describiremos cuando tengamos las bases para
comprender cómo funcionan y cómo se utilizan.

Como te habrás dado cuenta, cualquier programa que interactua de forma directa
con el usuario es una amenaza para el mismo. Cuando tu eres capaz de dar órdenes al
PC de alguien sin que este lo "autorice" entonces estás ganando control sobre su
máquina. Javascript hace exactamente esto, dar órdenes al navegador del usuario;
normalmente para mejorar su experiencia al navegar en una web, pero como todas las
tecnologías, también se ha utilizado para provocar daños en el equipo de la víctima,
acceder a información confidencial o tomar el control total del equipo. Con el paso de
los años los navegadores han ido evolucionando, ganando en seguridad y evitando
aquellos scripts hechos en Javascript que intentan vulnerar la seguridad del equipo, no
obstante, y de forma paralela también se han desarrollado plugins para los navegadores
que evitan que se ejecute ningún código Javascript en el equipo. Un plugin muy popular
que hace esto es NoScript. El problema de este tipo de plugins es que al evitar que se
ejecute Javascript también evitarán que se ejecute el código bueno, no hacen distinción
alguna entre código malicioso y código bueno. Así que lo que ganas en seguridad lo
pierdes en usabilidad, y en este caso en concreto pierdes mucho más de lo que ganas. De
ahí la importancia de navegar siempre en internet con un navegador actualizado que
sea capaz de bloquear por si solo aquellas funciones de Javascript maliciosas y
permita las inocuas.

Hasta pudiera parecer que la parte "negativa" de Javascript solo está al alcance de
aquellos webmasters que elaboren sitios con el objetivo de hacerse con el control de los
internátuas que acaben ahí. Esto no es así. Evidentemente hay sitios creados
específicamente para que cuando alguien los visite con un navegador desactualizado
(normalmente internet explorer) se infecten los equipos. Pero dentro del hacking y
javascript este tipo de técnicas es de las menos comunes ya que Google suele detectar
este tipo de script rápidamente y avisa a los internáutas con carteles de este estilo:
Y aunque el usuario es libre de ignorar esta advertencia esta medida hace que la gran
mayoría de los internáutas no vayan al sitio web. Además Google penaliza las páginas
que tienen código Javascript malicioso haciendo que no aparezcan en el buscador, y de
aparecer que aparezcan en posiciones bastante bajas.

La gran potencia de Javascript en el mundo del hacking reside en que utilizando


técnicas y metodologías es posible que un usuario normal sin ser el dueño de un sitio
web sea capaz de meter código javascript en el sitio. Esta última frase puede parecer un
tanto díficil de comprender, sobre todo para aquellos de vosotros que estaís empezando
y lleváis relativamente poco tiempo en el mundo de la seguridad informática y el
hácking ético. 

¿Cómo puede alguien meter código Javascript en mi


sitio web?
Hay multitud de técnicas para lograr este fin, lo primero que debemos de hacer es
conocer el lenguaje para poder comprender cómo trabaja y valorar su alcance. La
lección de hoy pretende dar una visión general del papel que juega este lenguaje en la
web desde el punto de vista de la seguridad informática. 

En las Webs 2.0 que son aquellas en las que el internátua no solo es un receptor de
información sino que puede interactuar con la web (foros, redes sociales, portales....)
estamos dejando al usuario introducir información en nuestra web. Nosotros no
podemos confiar en que va a meter justo lo que le pedimos, ya que el usuario puede
meter cualquier cosa y es nuestra responsabilidad validar en el servidor los datos que el
internátua nos está facilitando. Vamos a poner un ejemplo práctico de esta escenografía.

Suponed que llegaís a un foro en el que el registro es libre, os registráis y ya estaís


preparados para abrir hilos o responder en aquellos que ya estén abiertos. Abrís un
nuevo hilo en el que sabéis que gran parte del foro va a visitarlo porque habéis creado
un título para el hilo bastante llamativo. Ahora en vez de escribir un texto normal
vosotros metéis un código javascript que hace que todo aquel usuario que vea vuestro
hilo os envíe un mensaje con su "cookie" del foro (las cookies son pequeños archivos
que tiene el navegador para controlar entre otras cosas la sesión del usuario, y a los
cuales Javascript es capaz de leer, modificar, crear y eliminar). Esta cookie vosotros
podéis integrarla en vuestro navegador, y una vez hecho esto apareceréis logeados como
el usuario al cual le habéis robado la cookie, si además este usuario es administrador del
foro ya tenéis acceso completo.

Este tipo de ataques son de lo más básicos y antiguos que se puede realizar con
Javascript, la gran mayoría de foros no os permitirán meter código javascript, y de
permitirlo no se publicará o se publicará "capado" para que no se ejecute. En el peor de
los casos (para el atacante) llegará incluso una alerta al administrador del foro con el
intento de hacking. Así que cuando en las próximas lecciones empecemos a ver
pequeños scripts en Javascript no os recomendamos que salgáis ahí a intentar colocarlos
en foros. Cuando alguien intenta inyectar código Javascript en un sitio de estas
características ha de buscar la forma de hacerlo de la forma mas silenciosa posible, un
buen webmaster lo pondrá realmente difícil y tendrá medios para detectar este tipo de
ataques, uno más mediocre lo pondrá más fácil.
¿En qué radica la dificultad o facilidad a la hora de
inyectar código Javascript?
El ejemplo visto en las líneas anteriores ilustra una inyección de código Javascript
básica, un foro en el que no hay restricción alguna, metemos código javascript y se
publica sin más. Normalente esto no te va a funcionar en ningún foro, hace unos años si
funcionaba, pero hoy ya no, al menos no de forma tan trivial. Por ello cuando un
atacante quiere estudiar la forma de inyectar código javascript ha de tener máximo de
información posible de lo que quiere hacer. Y por este motivo en lecciones anteriores os
mostramos cómo instalar un servidor LAMP virtualizado y vimos los distintos campos
de los formularios HTML para que antes de hacer pruebas la web objetivo podáis
replicar el sitio y hacer las pruebas en local sin levantar sospechas, una vez que la
técnica está depurada y funcionando en vuestro entorno virtual de pruebas entonces
llega el momento de realizar el ataque. Imaginad que detectáis que alguien utiliza un
foro basado en la tecnología PHPBB entonces vosotros podéis descargarlo, y
configurarlo lo más parecido posible al foro real, y dentro de vuestro entorno virtual
controlado probáis distintas inyecciones para ver el resultado hasta llegar a vuestro
objetivo.

Vamos a ver un ejemplo sencillo de cómo se puede engañar a un filtro de código


javascript. Lo primero que voy a mostraros es la estructura de un script Javascript: 

<script>CODIGO...CODIGO....CODIGO....CODIGO....</script>

Si os fijáis lo importante es que el código esté encerrado entre los tags <script> y
</script> Un filtro que estuvo muy de moda algunos años atrás era uno que lo que hacía
era detectar la palabra <script> y </script> de forma que si alguien escribía en el foro:

Hola encantado de formar parte de esta comunidad <script> codigoqueenvialacookie


</script> Saludos

Se publicaba lo siguiente:

Hola encantado de formar parte de esta comunidad  codigoqueenvialacookie  Saludos

Y el código javascript encargado de robar la cookie se quedaba "inocuo", no se


ejecutaba porque el filtro había borrado los tags <script> y </script> ¿Cual fue el
método que se ideó para engañar a este filtro?. Una solución bastante sencilla que
consistía en publicar lo siguiente:

Hola encantado de formar parte de esta


comunidad <scr<script>ipt> codigoqueenvialacookie  </scr</script>ipt> Saludos

Si os fijáis lo que he hecho es meter dentro del tag <script> el mismo tag en medio. ¿Por
qué? Porque yo sabía que el filtro me iba a borrar el tag <script> y me iba a publicar lo
demás así que; como resultado final el fitro borraba el tag <script> que había incrustado
y sin darse cuenta me dejaba pasar el tag que tenía roto:
Hola encantado de formar parte de esta
comunidad <scr<script>ipt> codigoqueenvialacookie  </scr</script> ipt>  Saludos
Hola encantado de formar parte de esta
comunidad <script> codigoqueenvialacookie  </script>  Saludos

Para llegar a esta solución tuve que hacer bastante pruebas, las cuales las hice en mi
entorno virtual sin hacer ruido, Cuando vi que funcionaba en el entorno virtual pude
verificar que realmente funcionaba en el real así que en mi caso notifiqué a los
administradores de la vulnerabilidad y fue corregida, ya que yo trabajaba mejorando la
seguridad de dicho portal.

Con esta lección espero que hayáis podido comprobar la importancia de Javascript en el
mundo de la seguridad informática y cual es su papel en el mundo del hacking. En las
próximas lecciones vamos a aprender a programar en javascript desde cero.

También podría gustarte