diff --git a/data/meterpreter/ext_server_espia.dll b/data/meterpreter/ext_server_espia.dll index cf3cdebe33..568dbdfb61 100644 Binary files a/data/meterpreter/ext_server_espia.dll and b/data/meterpreter/ext_server_espia.dll differ diff --git a/data/meterpreter/ext_server_incognito.dll b/data/meterpreter/ext_server_incognito.dll index 5627377aab..872610b43b 100755 Binary files a/data/meterpreter/ext_server_incognito.dll and b/data/meterpreter/ext_server_incognito.dll differ diff --git a/data/meterpreter/ext_server_priv.dll b/data/meterpreter/ext_server_priv.dll index f823a082d7..44c233b020 100755 Binary files a/data/meterpreter/ext_server_priv.dll and b/data/meterpreter/ext_server_priv.dll differ diff --git a/data/meterpreter/ext_server_sniffer.dll b/data/meterpreter/ext_server_sniffer.dll index 53413a8d03..daa297423c 100644 Binary files a/data/meterpreter/ext_server_sniffer.dll and b/data/meterpreter/ext_server_sniffer.dll differ diff --git a/data/meterpreter/ext_server_stdapi.dll b/data/meterpreter/ext_server_stdapi.dll index 70e5e92eda..b7c60b0e19 100755 Binary files a/data/meterpreter/ext_server_stdapi.dll and b/data/meterpreter/ext_server_stdapi.dll differ diff --git a/data/meterpreter/metsrv.dll b/data/meterpreter/metsrv.dll index e110600fc0..e007ee8ebc 100755 Binary files a/data/meterpreter/metsrv.dll and b/data/meterpreter/metsrv.dll differ diff --git a/external/source/meterpreter/source/extensions/stdapi/server/fs/dir.c b/external/source/meterpreter/source/extensions/stdapi/server/fs/dir.c index 1c8a88cc6e..a951fe6b44 100644 --- a/external/source/meterpreter/source/extensions/stdapi/server/fs/dir.c +++ b/external/source/meterpreter/source/extensions/stdapi/server/fs/dir.c @@ -1,4 +1,4 @@ -#include "../precomp.h" +#include "precomp.h" #include #ifndef _WIN32 diff --git a/external/source/meterpreter/source/extensions/stdapi/server/fs/file.c b/external/source/meterpreter/source/extensions/stdapi/server/fs/file.c index 21aea06977..e645e28225 100644 --- a/external/source/meterpreter/source/extensions/stdapi/server/fs/file.c +++ b/external/source/meterpreter/source/extensions/stdapi/server/fs/file.c @@ -1,4 +1,4 @@ -#include "../precomp.h" +#include "precomp.h" #include /*************************** @@ -265,6 +265,37 @@ DWORD request_fs_stat(Remote *remote, Packet *packet) return ERROR_SUCCESS; } +/* + * Removes the supplied file from disk + * + * TLVs: + * + * req: TLV_TYPE_FILE_PATH - The file that is to be removed. + */ +DWORD request_fs_delete_file(Remote *remote, Packet *packet) +{ + Packet *response = packet_create_response(packet); + LPCSTR path; + DWORD result = ERROR_SUCCESS; + + path = packet_get_tlv_value_string(packet, TLV_TYPE_FILE_PATH); + + if (!path) + result = ERROR_INVALID_PARAMETER; +#ifdef __WIN32__ + else if (!DeleteFile(path)) +#else + else if (!unlink(path)) +#endif + result = GetLastError(); + + packet_add_tlv_uint(response, TLV_TYPE_RESULT, result); + + packet_transmit(remote, response, NULL); + + return ERROR_SUCCESS; +} + /* * Expands a file path and returns the expanded path to the requestor * diff --git a/external/source/meterpreter/source/extensions/stdapi/server/fs/fs.h b/external/source/meterpreter/source/extensions/stdapi/server/fs/fs.h index 3b2127a0f6..ab22a05d1d 100644 --- a/external/source/meterpreter/source/extensions/stdapi/server/fs/fs.h +++ b/external/source/meterpreter/source/extensions/stdapi/server/fs/fs.h @@ -11,6 +11,7 @@ DWORD request_fs_getwd(Remote *remote, Packet *packet); DWORD request_fs_chdir(Remote *remote, Packet *packet); DWORD request_fs_mkdir(Remote *remote, Packet *packet); DWORD request_fs_delete_dir(Remote *remote, Packet *packet); +DWORD request_fs_delete_file(Remote *remote, Packet *packet); DWORD request_fs_stat(Remote *remote, Packet *packet); DWORD request_fs_file_expand_path(Remote *remote, Packet *packet); diff --git a/external/source/meterpreter/source/extensions/stdapi/server/precomp.h b/external/source/meterpreter/source/extensions/stdapi/server/precomp.h index 26685608f3..4d2ff6cb92 100644 --- a/external/source/meterpreter/source/extensions/stdapi/server/precomp.h +++ b/external/source/meterpreter/source/extensions/stdapi/server/precomp.h @@ -3,19 +3,19 @@ #ifdef _WIN32 // sf: Compatability fix for a broken sdk? We get errors in Iphlpapi.h using the latest Windows SDK if we dont do this. -#define _WIN32_WINNT _WIN32_WINNT_WIN2K - -#include -#include - -#include "resource/resource.h" + #define _WIN32_WINNT _WIN32_WINNT_WIN2K + #include "../stdapi.h" + #include + #include + #include "resource/resource.h" #else + #include "../stdapi.h" #include #include #include #endif -#include "../stdapi.h" + #include "fs/fs.h" #include "sys/sys.h" #include "net/net.h" diff --git a/external/source/meterpreter/source/extensions/stdapi/server/stdapi.c b/external/source/meterpreter/source/extensions/stdapi/server/stdapi.c index bb4db58ca6..8e68da0d74 100644 --- a/external/source/meterpreter/source/extensions/stdapi/server/stdapi.c +++ b/external/source/meterpreter/source/extensions/stdapi/server/stdapi.c @@ -47,6 +47,10 @@ Command customCommands[] = { request_fs_delete_dir, { 0 }, 0 }, { EMPTY_DISPATCH_HANDLER }, }, + { "stdapi_fs_delete_file", + { request_fs_delete_file, { 0 }, 0 }, + { EMPTY_DISPATCH_HANDLER }, + }, { "stdapi_fs_stat", { request_fs_stat, { 0 }, 0 }, { EMPTY_DISPATCH_HANDLER }, diff --git a/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb b/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb index 1b18223dc4..e0dcad8cc2 100644 --- a/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +++ b/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb @@ -65,7 +65,27 @@ Separator = "\\" def File.stat(name) return client.fs.filestat.new(name) end + + # + # Performs a delete on the specified file. + # + def File.rm(name) + request = Packet.create_request('stdapi_fs_delete_file') + request.add_tlv(TLV_TYPE_FILE_PATH,name) + + response = client.send_request(request) + + return response + end + + # + # Performs a delete on the specified file. + # + def File.unlink(name) + return File.rm(name) + end + # # Upload one or more files to the remote computer the remote # directory supplied in destination. diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb index a5c528b276..d0293ca021 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb @@ -45,7 +45,9 @@ class Console::CommandDispatcher::Stdapi::Fs "upload" => "Upload a file or directory", "lcd" => "Change local working directory", "getlwd" => "Print local working directory", - "lpwd" => "Print local working directory" + "lpwd" => "Print local working directory", + "rm" => "Delete the specified file", + "del" => "Delete the specified file" } end @@ -104,6 +106,22 @@ class Console::CommandDispatcher::Stdapi::Fs return true end + # + # Delete the specified file. + # + def cmd_rm(*args) + if (args.length == 0) + print_line("Usage: rm file") + return true + end + + client.fs.file.rm(args[0]) + + return true + end + + alias :cmd_del :cmd_rm + # # Downloads a file or directory from the remote machine to the local # machine.