From 7417cb2822ac8680201ac7a73701a9eba2177a6c Mon Sep 17 00:00:00 2001 From: Jakob Friedl <71284620+jakobfriedl@users.noreply.github.com> Date: Mon, 27 Oct 2025 22:26:59 +0100 Subject: [PATCH] Update README.md --- README.md | 26 ++++++++++++++++++++++++-- conquest.nimble | 3 ++- src/client/config.nims | 2 +- src/modules/token.nim | 4 ++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 752f883..56b132a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,33 @@ # Conquest -Conquest is an advanced, extensible and malleable command & control/post-exploitation framework developed for penetration testing and adversary simulation. Conquest's team server, operator client and agent have all been written using the Nim programming language and are designed with modularity and flexibility in mind. It features custom C2 communication via binary packets over HTTP, a client UI developed using Dear ImGui and the `Monarch` agent, which can be equipped with numerous specialized modules. +Conquest is an advanced, extensible and malleable command & control/post-exploitation framework developed for penetration testing and adversary simulation. Conquest's team server, operator client and agent have all been written using the Nim programming language and are designed with modularity and flexibility in mind. It features custom C2 communication via binary packets over HTTP, a client GUI developed using Dear ImGui and the `Monarch` agent, a modular C2 implant aimed at Windows targets. ![Conquest Client](assets/image-1.png) -> [!CAUTION] Disclaimer +> [!CAUTION] > Conquest is designed to be only used for educational purposes, research and authorized security testing of systems that you own or have an explicit permission to attack. The author provides no warranty and accepts no liability for misuse. +## Getting Started + +1. Install Nim + +2. Build the Conquest team server and client + +``` +nimble server +nimble client +``` + +3. Start the team server with a C2 profile +``` +bin/server -p data/profile.toml +``` + +4. Connect to the team server using the client (localhost by default) +``` +bin/client +``` + ## Architecture TBD @@ -27,6 +48,7 @@ TBD - Wide selection of built-in post-exploitation modules - Looting and loot management - Logging of all operator activity +- Self-deletion ## Screenshots diff --git a/conquest.nimble b/conquest.nimble index 39d5c25..240baa6 100644 --- a/conquest.nimble +++ b/conquest.nimble @@ -30,4 +30,5 @@ requires "zippy >= 0.10.16" requires "mummy >= 0.4.6" requires "whisky >= 0.1.3" requires "native_dialogs >= 0.2.0" -requires "pixie >= 5.1.0" \ No newline at end of file +requires "pixie >= 5.1.0" +requires "cligen >= 1.9.3" \ No newline at end of file diff --git a/src/client/config.nims b/src/client/config.nims index 771dc32..b211cf0 100644 --- a/src/client/config.nims +++ b/src/client/config.nims @@ -14,7 +14,7 @@ switch "app", "gui" # Select static link or shared/dll link when defined(windows): const STATIC_LINK_GLFW = false - const STATIC_LINK_CC = true #libstd++ or libc + const STATIC_LINK_CC = false #libstd++ or libc if TC == "vcc": switch "passL","d3d9.lib kernel32.lib user32.lib gdi32.lib winspool.lib" switch "passL","comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib" diff --git a/src/modules/token.nim b/src/modules/token.nim index 96ffa81..b0eedca 100644 --- a/src/modules/token.nim +++ b/src/modules/token.nim @@ -56,7 +56,7 @@ let module* = Module( Command( name: protect("enable-privilege"), commandType: CMD_ENABLE_PRIV, - description: protect("enable a token privilege."), + description: protect("Enable a token privilege."), example: protect("enable-privilege SeImpersonatePrivilege"), arguments: @[ Argument(name: protect("privilege"), description: protect("Privilege to enable."), argumentType: STRING, isRequired: true) @@ -66,7 +66,7 @@ let module* = Module( Command( name: protect("disable-privilege"), commandType: CMD_DISABLE_PRIV, - description: protect("disable a token privilege."), + description: protect("Disable a token privilege."), example: protect("disable-privilege SeImpersonatePrivilege"), arguments: @[ Argument(name: protect("privilege"), description: protect("Privilege to disable."), argumentType: STRING, isRequired: true)