diff --git a/CHANGELOG.md b/CHANGELOG.md index 66e7e5468..c4d0dccaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fixed issue with C# exe and shellcode not compiling PowerShell stagers - Fix delay/jitter adjustment in python agent (@janit0rjoe) ## [5.12.1] - 2025-01-08 diff --git a/empire/server/csharp/Covenant/Data/EmbeddedResources/launcher.txt b/empire/server/csharp/Covenant/Data/EmbeddedResources/launcher.txt new file mode 100644 index 000000000..e69de29bb diff --git a/empire/server/server.py b/empire/server/server.py index 01287e692..5b6337067 100755 --- a/empire/server/server.py +++ b/empire/server/server.py @@ -86,6 +86,10 @@ def reset(): f"{CSHARP_DIR_BASE}/Data/Tasks/CSharp/Compiled/netcoreapp3.0" ) + file_util.clear_file_contents( + f"{CSHARP_DIR_BASE}/Data/EmbeddedResources/launcher.txt" + ) + if os.path.exists(empire_config.starkiller.directory): shutil.rmtree(empire_config.starkiller.directory) diff --git a/empire/server/stagers/CSharpPS.yaml b/empire/server/stagers/CSharpPS.yaml index 6c456396b..18492bed8 100644 --- a/empire/server/stagers/CSharpPS.yaml +++ b/empire/server/stagers/CSharpPS.yaml @@ -20,35 +20,34 @@ using System.Management.Automation.Runspaces; using System.IO; using System.Reflection; - + public static class Program { - public static void Main(string[] args) - { - - PowerShell ps = PowerShell.Create(); + public static void Main(string[] args) + { - try - { - var assembly = Assembly.GetExecutingAssembly(); - var resourceName = "launcher.txt"; + PowerShell ps = PowerShell.Create(); - string[] names = assembly.GetManifestResourceNames(); + try + { + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = "launcher.txt"; - using (StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(resourceName))) - { - string script = reader.ReadToEnd(); - ps.AddScript(script); - } - ps.Invoke(); - - } - catch (Exception e) - { - Console.WriteLine("Error: " + e.Message.ToString()); - } + string[] names = assembly.GetManifestResourceNames(); + using (StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(resourceName))) + { + string script = reader.ReadToEnd(); + ps.AddScript(script); } + ps.Invoke(); + + } + catch (Exception e) + { + Console.WriteLine("Error: " + e.Message.ToString()); + } + } } TaskingType: Assembly UnsafeCompile: false diff --git a/empire/server/utils/file_util.py b/empire/server/utils/file_util.py index b50cfd309..d8b01df98 100644 --- a/empire/server/utils/file_util.py +++ b/empire/server/utils/file_util.py @@ -28,6 +28,19 @@ def remove_file(path: str) -> None: os.remove(path) +def clear_file_contents(path: str) -> None: + """ + Clears the contents of a file without deleting it. + If the file doesn't exist, it creates an empty file. + """ + try: + with open(path, "w"): + pass + log.debug(f"Cleared contents of the file: {path}") + except Exception as e: + log.error(f"Failed to clear file contents for {path}: {e}", exc_info=True) + + def run_as_user(command, user=None, cwd=None): """ Runs a command as a specified user or the user who invoked sudo.