Files
Adaptix-Framework-AdaptixC2/AdaptixServer/core/database/database.go
T
2025-09-05 16:17:56 +02:00

189 lines
4.3 KiB
Go

package database
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
type DBMS struct {
database *sql.DB
exists bool
}
func NewDatabase(dbPath string) (*DBMS, error) {
var err error
dbms := &DBMS{
exists: true,
}
dbms.database, err = sql.Open("sqlite3", dbPath)
if err != nil {
dbms.exists = false
}
if dbms.exists {
err = dbms.DatabaseInit()
if err != nil {
dbms.exists = false
}
}
return dbms, err
}
func (dbms *DBMS) DatabaseInit() error {
var (
err error
createTableQuery string
)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Listeners" (
"ListenerName" TEXT NOT NULL UNIQUE,
"ListenerRegName" TEXT NOT NULL,
"ListenerConfig" TEXT NOT NULL,
"Watermark" TEXT NOT NULL,
"CustomData" BLOB
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Chat" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"Username" TEXT NOT NULL,
"Message" TEXT NOT NULL,
"Date" BIGINT
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Downloads" (
"FileId" TEXT NOT NULL UNIQUE,
"AgentId" TEXT NOT NULL,
"AgentName" TEXT NOT NULL,
"User" TEXT NOT NULL,
"Computer" TEXT NOT NULL,
"RemotePath" TEXT NOT NULL,
"LocalPath" TEXT NOT NULL,
"TotalSize" INTEGER,
"RecvSize" INTEGER,
"Date" BIGINT,
"State" INTEGER
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Screenshots" (
"ScreenId" TEXT NOT NULL UNIQUE,
"User" TEXT NOT NULL,
"Computer" TEXT NOT NULL,
"LocalPath" TEXT NOT NULL,
"Note" TEXT,
"Date" BIGINT
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Agents" (
"Id" TEXT NOT NULL UNIQUE,
"Crc" TEXT NOT NULL,
"Name" TEXT NOT NULL,
"SessionKey" BLOB NOT NULL,
"Listener" TEXT NOT NULL,
"Async" INTEGER,
"ExternalIP" TEXT,
"InternalIP" TEXT,
"GmtOffset" INTEGER,
"Sleep" INTEGER,
"Jitter" INTEGER,
"Pid" TEXT,
"Tid" TEXT,
"Arch" TEXT,
"Elevated" INTEGER,
"Process" TEXT,
"Os" INTEGER,
"OsDesc" TEXT,
"Domain" TEXT,
"Computer" TEXT,
"Username" TEXT,
"Impersonated" TEXT,
"OemCP" INTEGER,
"ACP" INTEGER,
"CreateTime" BIGINT,
"LastTick" INTEGER,
"WorkingTime" INTEGER,
"KillDate" INTEGER,
"Tags" TEXT,
"Mark" TEXT,
"Color" TEXT,
"TargetId" TEXT
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Tasks" (
"TaskId" TEXT NOT NULL UNIQUE,
"AgentId" TEXT NOT NULL,
"TaskType" INTEGER,
"Client" TEXT,
"User" TEXT,
"Computer" TEXT,
"StartDate" BIGINT,
"FinishDate" BIGINT,
"CommandLine" TEXT NOT NULL,
"MessageType" INTEGER,
"Message" TEXT,
"ClearText" TEXT,
"Completed" INTEGER
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Consoles" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"AgentId" TEXT NOT NULL,
"Packet" BLOB
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Pivots" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"PivotId" TEXT NOT NULL,
"PivotName" TEXT NOT NULL,
"ParentAgentId" TEXT NOT NULL,
"ChildAgentId" TEXT NOT NULL
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Credentials" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"CredId" TEXT NOT NULL,
"Username" TEXT,
"Password" TEXT,
"Realm" TEXT,
"Type" TEXT,
"Tag" TEXT,
"Date" BIGINT,
"Storage" TEXT,
"AgentId" TEXT,
"Host" TEXT
);`
_, err = dbms.database.Exec(createTableQuery)
createTableQuery = `CREATE TABLE IF NOT EXISTS "Targets" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"TargetId" TEXT NOT NULL,
"Computer" TEXT,
"Domain" TEXT,
"Address" TEXT,
"Os" INTEGER,
"OsDesk" TEXT,
"Tag" TEXT,
"Info" TEXT,
"Date" BIGINT,
"Alive" BOOLEAN,
"Agents" TEXT
);`
_, err = dbms.database.Exec(createTableQuery)
return err
}
func (dbms *DBMS) DatabaseExists() bool {
return dbms.exists
}