2 sept 2013

Meterpreter Scripts: Generando nuestro propio screenshot (Parte I)

Hoy generaremos nuestro propio script para capturar la pantalla remota de la máquina vulnerada. En primer lugar estudiaremos los métodos que necesitaremos desde el IRB, para después generar un script final en el posterior artículo. Sabemos que Meterpreter dispone de un comando denominado screenshot con el que se obtiene una captura de pantalla de la máquina vulnerada. Sabiendo esto vamos a localizar el método de la API que produce esta acción. Sabemos que hay una clase que se denomina UI, User Interface, con el que Meterpreter manipula los dispositivos de usuario, como el teclado, ratón o pantalla.

Uno de los métodos que podemos ver en client.ui es screenshot, por lo que podremos utilizarlo en un script de Meterpreter. Pero antes probaremos en el IRB a ver qué salida nos facilita. Tal y como se puede visualizar en la imagen la salida que obtenemos son un array de bytes.

El conf.echo se pone a false para que una vez almacenado en la variable screen la captura de pantalla no se vuelque el contenido por pantalla. Luego se vuelve a habilitar y llamando al método screen.length se vuelca el tamaño de la captura en pantalla. Bien, ahora tenemos la captura de pantalla en una variable denominada screen. Ahora vamos a volcar este contenido a un fichero para ello utilizaremos la clase fs y file desde el objeto client. Sabemos que client.fs dispone de 3 tipos de clases por debajo (dir, file y filestat). La que nos interesará hoy es utilizar la clase file. Para ver los métodos de esta clase lanzamos el ya conocido client.fs.file.methods y obtenemos el listado de métodos disponibles desde dicha clase.

Utilizaremos el método new, el cual necesita que le pasemos la ruta donde se creará el fichero y el modo en el que abrimos el archivo. Cuando queramos escribir algo en un fichero el método de apertura será 'wb'.

En este punto hemos creado un archivo denominado imagen.jpg y lo tenemos abierto en modo escritura y accesible desde la variable file. Si la víctima se dirige a la ruta c:\ podrá visualizar un archivo con tamaño 0 bytes creado con ese nombre en dicha ruta. Además, si intenta eliminarlo no podrá, ya que Windows dirá que el fichero está siendo utilizado por otro proceso. Esto último puede llamar y mucho la atención de la víctima.

Por último vamos a volcar el contenido de la variable al fichero, algo rápido y sin mucho quebradero de cabeza, se nos ocurre utilizar el método write que dispone la variable file e indicarle que contenido queremos almacenar en dicho fichero, tal y como se puede visualizar en la siguiente imagen.

No se os olvide cerrar el fichero, file.close, donde el IRB nos devolverá nil en caso de que se cierre correctamente. Ahora toca descargar este fichero a nuestro equipo, para ello utilizaremos la función download que conocemos de Meterpreter. ¿Dónde se encontrará? Por el contexto entendemos que queremos descargar un archivo, por lo que podría encontrarse en client.fs.file, al comprobarlo con methods obtenemos que tenemos un método que puede valernos, download_file. Ahora nos surge el siguiente problema, ¿Qué parámetros tiene esta función? Ejecutando sin parámetros download file obtenemos un error que nos dice que se esperaban dos parámetros.

Vale sabemos que necesitamos dos parámetros, pero ¿qué espera? Nosotros lo que haremos es irnos al fichero donde está implementada dicha función, en este caso file.rb se puede ver en la imagen, y ver que espera esa función.

Vale en la cabecera de la función vemos que primero debemos colocar el destino y en segundo lugar el origen. Entendemos que el destino será una ruta de nuestra máquina, y el destino la ruta donde se encuentra el archivo que queremos descargar, en nuestro caso c:\imagen.jpg.

Hasta aquí el artículo de hoy, en la segunda parte lo que haremos es generar en un bonito código de Ruby esta funcionalidad con el fin de hacerlo automático llamando al script desde el IRB o desde el propio Meterpreter. Os dejamos como siempre links hacia la iniciación del desarrollo de scripts en Meterpreter, esperamos que os guste!

Meterpreter scripts: encendiendo el hornoMixins en MeterpreterMore Mixins

2 comentarios:

  1. [...] el artículo anterior hablamos de como preparar la generación de un script de Meterpreter, investigando las funciones que proporciona la API de éste, a través del uso del IRB. En el [...]

    ResponderEliminar
  2. [...] El lunes Pablo comenzó la cadena Meterpreter Scripts: Generando nuestro propio screenshot (Parte I) [...]

    ResponderEliminar