Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿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 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.
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.
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.
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.
<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:
Se publicaba lo siguiente:
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.