2025-05-18 12:51:26 +02:00
|
|
|
import system, terminal, tiny_sqlite
|
2025-05-09 12:04:14 +02:00
|
|
|
import ../types
|
2025-05-18 12:51:26 +02:00
|
|
|
import ./[dbAgent, dbListener]
|
2025-05-09 12:04:14 +02:00
|
|
|
|
2025-05-18 12:51:26 +02:00
|
|
|
# Export functions so that only ./db/database is required to be imported
|
|
|
|
|
export dbAgent, dbListener
|
2025-05-09 12:04:14 +02:00
|
|
|
|
2025-05-12 21:53:37 +02:00
|
|
|
proc dbInit*(cq: Conquest) =
|
2025-05-09 12:04:14 +02:00
|
|
|
|
|
|
|
|
try:
|
2025-05-12 21:53:37 +02:00
|
|
|
let conquestDb = openDatabase(cq.dbPath, mode=dbReadWrite)
|
2025-05-09 12:04:14 +02:00
|
|
|
|
|
|
|
|
# Create tables
|
|
|
|
|
conquestDb.execScript("""
|
2025-05-13 23:42:04 +02:00
|
|
|
CREATE TABLE listeners (
|
2025-05-09 12:04:14 +02:00
|
|
|
name TEXT PRIMARY KEY,
|
|
|
|
|
address TEXT NOT NULL,
|
|
|
|
|
port INTEGER NOT NULL UNIQUE,
|
2025-05-14 15:48:01 +02:00
|
|
|
protocol TEXT NOT NULL CHECK (protocol IN ('http'))
|
2025-05-09 12:04:14 +02:00
|
|
|
);
|
|
|
|
|
|
2025-05-13 23:42:04 +02:00
|
|
|
CREATE TABLE agents (
|
|
|
|
|
name TEXT PRIMARY KEY,
|
2025-05-14 12:42:23 +02:00
|
|
|
listener TEXT NOT NULL,
|
|
|
|
|
process TEXT NOT NULL,
|
2025-05-13 23:42:04 +02:00
|
|
|
pid INTEGER NOT NULL,
|
|
|
|
|
username TEXT NOT NULL,
|
|
|
|
|
hostname TEXT NOT NULL,
|
2025-05-14 15:48:01 +02:00
|
|
|
domain TEXT NOT NULL,
|
2025-05-13 23:42:04 +02:00
|
|
|
ip TEXT NOT NULL,
|
|
|
|
|
os TEXT NOT NULL,
|
|
|
|
|
elevated BOOLEAN NOT NULL,
|
|
|
|
|
sleep INTEGER DEFAULT 10,
|
|
|
|
|
jitter REAL DEFAULT 0.1,
|
2025-05-14 12:42:23 +02:00
|
|
|
firstCheckin DATETIME NOT NULL,
|
2025-05-13 23:42:04 +02:00
|
|
|
FOREIGN KEY (listener) REFERENCES listeners(name)
|
|
|
|
|
);
|
|
|
|
|
|
2025-05-09 12:04:14 +02:00
|
|
|
""")
|
|
|
|
|
|
2025-05-12 21:53:37 +02:00
|
|
|
cq.writeLine(fgGreen, "[+] ", cq.dbPath, ": Database created.")
|
2025-05-09 12:04:14 +02:00
|
|
|
conquestDb.close()
|
|
|
|
|
except SqliteError:
|
2025-05-12 21:53:37 +02:00
|
|
|
cq.writeLine(fgGreen, "[+] ", cq.dbPath, ": Database file found.")
|