Sé que han pasado años, pero se toparon con este desafío y se cruzaron con este post (entre otros) por lo que van a compartir la solución en caso de que ayude a alguien a seguir adelante. Se puede usar para mover cualquier archivo que desee sobre WMI.
Solución:
1: Convertir EXE de base 64
byte[] bytes = File.ReadAllBytes(pathToExe);
String file = Convert.ToBase64String(bytes);
2: Echo Base 64 a un archivo a través de WMI y decodificar con certutil
ConnectionOptions co = new ConnectionOptions();
// isLocal is a variable indicating whether machine name/IP is local
if (!isLocal) {
co.Username = "domainOrMachine\accountName";
co.Password = "password for account";
co.EnablePrivileges = true;
co.Impersonation = ImpersonationLevel.Impersonate;
}
//ip is a vaiable holding the target endpoint
ManagementScope s = new ManagementScope(@"\\" + ip + @"\root\cimv2", co);
s.open();
ObjectGetOptions ogo = new ObjectGetOptions();
ManagementClass prog = new ManagementClass(s, new
ManagementPath("Win32_Process"), ogo);
ManagementBaseObject mbo = prog.GetMethodParameters("Create");
mbo["CommandLine"] = @"cmd /c ""echo " + base64String + @" > c:\windows\temp\b64_exec.txt && certutil -decode c:\windows\temp\b64_exec.txt c:\windows\temp\b64_exec.exe && c:\windows\temp\b64_exec.exe""";
prog.InvokeMethod("Create", mbo, null);
Ahora, hay algunos gotcha's que deben ser resaltados
- Todo el comando pasado no puede tener una longitud mayor a 8191 caracteres, la longitud máxima de un comando
- Puede dividir el archivo base64 y enviarlo en varios fragmentos, simplemente recuerde que> canaliza a un nuevo archivo o sobrescribe un archivo existente y >> agrega o agrega a un archivo existente.
- También querrá emitir un comando del para limpiar el archivo base64, dependiendo de la habitación disponible, es posible que deba realizar una segunda llamada WMI para invocarlo.
En mi caso, yo no quería enviar un archivo de 2 MB completo 7000 caracteres a la vez, así que creé un simple descargador de .NET que compila a menos de 6 KB y tengo todo en un solo estado (como se indicó anteriormente.) Descarga mi ejecutable y cuando se completa (cuando veo el archivo que quiero, consultado por WMI) simplemente lo borro sobre WMI.
¿Qué tipo de acceso tiene? ¿Puedes instalar algo en la máquina de destino y en la máquina local? – Rudu
@Rudi: Sí, tengo derechos de administrador en todas las máquinas de la LAN. –