Ejemplo n.º 1
0
class DynamicChallenge(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'dynamic'}
    id = db.Column(None, db.ForeignKey('challenges.id'), primary_key=True)
    initial = db.Column(db.Integer)
    minimum = db.Column(db.Integer)
    decay = db.Column(db.Integer)

    def __init__(self,
                 name,
                 description,
                 value,
                 category,
                 category2,
                 type='dynamic',
                 minimum=1,
                 decay=50):
        self.name = name
        self.description = description
        self.value = value
        self.initial = value
        self.category = category
        self.category2 = category2
        self.type = type
        self.minimum = minimum
        self.decay = decay
Ejemplo n.º 2
0
class MultiSolves(db.Model):
    __tablename__ = "multi_solves"
    user_id = db.Column(db.Integer,
                        db.ForeignKey("users.id", ondelete="CASCADE"),
                        primary_key=True)
    challenge_category = db.Column(db.String(80), primary_key=True)
    challenge_data = db.Column(db.String(80), primary_key=True)
Ejemplo n.º 3
0
class multiChallenge(Challenges):
    __mapper_args__ = {"polymorphic_identity": "multi"}
    id = db.Column(None, db.ForeignKey("challenges.id"), primary_key=True)
    json = db.Column(db.Text)

    def __init__(self, *args, **kwargs):
        super(multiChallenge, self).__init__(**kwargs)
Ejemplo n.º 4
0
class KeyedChallenge(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'keyed'}
    id = db.Column(None, db.ForeignKey('challenges.id'), primary_key=True)
    value = db.Column(db.Integer, default=0)
    key = db.Column(db.Text, unique=True)
    identifier = db.Column(db.Text, unique=True)
    salt = db.Column(db.Text, unique=True)

    def __init__(self, *args, **kwargs):
        super(KeyedChallenge, self).__init__(**kwargs)
        self.key = nacl.encoding.Base64Encoder.encode(
            nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE))
        self.salt = nacl.encoding.Base64Encoder.encode(
            nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE))

    def getflag(self):
        user = get_current_user()
        team = get_current_team()

        user_id = user.id,
        team_id = team.id if team else None,

        box = nacl.secret.SecretBox(
            nacl.encoding.Base64Encoder.decode(self.key))
        salt = nacl.encoding.Base64Encoder.decode(self.salt)
        flag = 'U' + str(user_id) + 'T' + str(team_id) + 'F' + salt

        return 'flag(' + nacl.encoding.Base64Encoder.encode(
            box.encrypt(flag)) + ')'
Ejemplo n.º 5
0
class FirstBloodChallenge(Challenges):
    __mapper_args__ = {"polymorphic_identity": "firstblood"}
    id = db.Column(db.Integer,
                   db.ForeignKey("challenges.id", ondelete="CASCADE"),
                   primary_key=True)
    first_blood_bonus = db.Column(db.JSON)

    def __init__(self, *args, **kwargs):
        # This is kind of a hack because serializeJSON in CTFd does not support arrays
        first_blood_bonus = None
        for attr, value in kwargs.items():
            if attr.startswith('first_blood_bonus'):
                first_blood_bonus = []
        if first_blood_bonus is not None:
            for i in itertools.count():
                attr = 'first_blood_bonus[{0}]'.format(i)
                if attr not in kwargs:
                    break
                first_blood_bonus.append(
                    int(kwargs[attr]) if kwargs[attr] != '' else None)
                del kwargs[attr]
            while first_blood_bonus[-1] is None:
                first_blood_bonus.pop()
            kwargs['first_blood_bonus'] = first_blood_bonus

        super(FirstBloodChallenge, self).__init__(**kwargs)
Ejemplo n.º 6
0
class GlowwormConfigs(db.Model):
    key = db.Column(db.String(length=128), primary_key=True)
    value = db.Column(db.Text)

    def __init__(self, key, value):
        self.key = key
        self.value = value
Ejemplo n.º 7
0
class IntegratedChallenge(Challenges):
    __mapper_args__ = {"polymorphic_identity": "integrated"}
    id = db.Column(None, db.ForeignKey("challenges.id"), primary_key=True)
    challengeName = db.Column(db.String(200))

    def __init__(self, *args, **kwargs):
        super(IntegratedChallenge, self).__init__(**kwargs)
        self.initial = kwargs["value"]
Ejemplo n.º 8
0
class OracleChallenges(Challenges):
    __mapper_args__ = {"polymorphic_identity": "oracle"}
    id = db.Column(None, db.ForeignKey("challenges.id"), primary_key=True)
    oracle = db.Column(db.String(255), default="")

    def __init__(self, *args, **kwargs):
        super(OracleChallenges, self).__init__(**kwargs)
        self.oracle = kwargs["oracle"]
Ejemplo n.º 9
0
class vSphereVMsConfig(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    option = db.Column(db.Text)
    value = db.Column(db.Text)

    def __init__(self, option, value):
        self.option = option
        self.value = value
Ejemplo n.º 10
0
class JudgeCaseFiles(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    challenge_id = db.Column(db.Integer, db.ForeignKey('challenges.id'))
    location = db.Column(db.Text)

    def __init__(self, challenge_id, location):
        self.challenge_id = challenge_id
        self.location = location
Ejemplo n.º 11
0
class SteamChallengeModel(Challenges):
    __mapper_args__ = {"polymorphic_identity": "steam"}
    id = db.Column(None, db.ForeignKey("challenges.id"), primary_key=True)
    steam_key = db.Column(db.Text, default="")
    steam_gamename = db.Column(db.Text, default="")
    # I probably don't need todo this but don't really want to write the SQL query to get the first solver
    first_solver = db.Column(db.Integer, db.ForeignKey("users.id"))
    def __init__(self, *args, **kwargs):
        super(SteamChallengeModel, self).__init__(**kwargs)
Ejemplo n.º 12
0
class LahChallenge(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'lah'}
    id = db.Column(None, db.ForeignKey('challenges.id'), primary_key=True)
    unlock_order = db.Column(db.Integer, default=99)
    is_unlocked = db.Column(db.Boolean, default=False)

    def __init__(self, *args, **kwargs):
        super(LahChallenge, self).__init__(**kwargs)
        self.is_unlocked = int(kwargs['unlock_order']) == 0
Ejemplo n.º 13
0
class LinearUnlockingModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    is_hidden = db.Column(db.Boolean,
                          server_default=expression.false(),
                          nullable=False)

    def __init__(self, name):
        self.name = name
Ejemplo n.º 14
0
class ChallengeQuiz(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    challenge = db.Column(db.Integer,
                          db.ForeignKey("challenges.id", ondelete="CASCADE"))
    quiz = db.Column(db.String(100))

    def __init__(self, quiz: str, challenge: Challenges):
        self.quiz = quiz
        self.challenge = challenge
class VMs(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    chalid = db.Column(db.Integer, db.ForeignKey('challenges.id'))
    desc = db.Column(db.Text)

    def __init__(self, name, chalid, desc):
        self.name = name
        self.chalid = chalid
        self.desc = desc
Ejemplo n.º 16
0
class UnlockState(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    selected = db.Column(db.Integer, db.ForeignKey('lah_challenge.id'), nullable=True, default=None)
    unlocker_id = db.Column(None, db.ForeignKey('users.id'), nullable=True, default=1)
    expiration = db.Column(db.DateTime, nullable=True, default=datetime.datetime.fromtimestamp(13569465600))

    __table_args__ = (
        db.CheckConstraint('(selected IS NULL) <> (unlocker_id IS NULL)'),
        db.CheckConstraint('(expiration IS NULL) = (unlocker_id IS NULL)'),
    )
Ejemplo n.º 17
0
class MultiAnswerChallenge(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'multianswer'}
    id = db.Column(db.Integer,
                   db.ForeignKey("challenges.id", ondelete="CASCADE"),
                   primary_key=True)
    initial = db.Column(db.Integer, default=0)

    def __init__(self, *args, **kwargs):
        super(DynamicChallenge, self).__init__(**kwargs)
        self.initial = kwargs["value"]
Ejemplo n.º 18
0
class InvitedTeams(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    email = db.Column(db.String(128), unique=True)
    token = db.Column(db.String(32), unique=True)

    def __init__(self, name, email, token):
        self.name = name
        self.email = email
        self.token = token
Ejemplo n.º 19
0
class NaumachiaChallengeModel(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'naumachia'}
    id = db.Column(
        db.Integer, db.ForeignKey("challenges.id", ondelete="CASCADE"), primary_key=True
    )
    naumachia_name = db.Column(db.String(80))

    def __init__(self, *args, **kwargs):
        super().__init__(**kwargs)
        self.naumachia_name = kwargs["naumachia_name"]
Ejemplo n.º 20
0
class WriteupDynamicChallenge(Challenges):
    __mapper_args__ = {"polymorphic_identity": "dynamic_wp"}
    id = db.Column(None, db.ForeignKey("challenges.id"), primary_key=True)
    initial = db.Column(db.Integer, default=0)
    minimum = db.Column(db.Integer, default=0)
    decay = db.Column(db.Integer, default=0)

    def __init__(self, *args, **kwargs):
        super(WriteupDynamicChallenge, self).__init__(**kwargs)
        self.initial = kwargs["value"]
class ManualChallenge(Challenges):
    __mapper_args__ = {"polymorphic_identity": "manual"}
    id = db.Column(db.Integer,
                   db.ForeignKey("challenges.id", ondelete="CASCADE"),
                   primary_key=True)
    initial = db.Column(db.Integer, default=0)

    def __init__(self, *args, **kwargs):
        super(ManualChallenge, self).__init__(**kwargs)
        self.initial = kwargs["value"]
Ejemplo n.º 22
0
class Writeup(db.Model):
    wid = db.Column(db.Integer,primary_key=True)
    cid = db.Column(None,db.ForeignKey("challenges.id"),nullable=False)
    uid = db.Column(db.Integer,nullable=False)
    path = db.Column(db.String(200),nullable=False)

    def __init__(self,cid,uid,path):
        self.cid = int(cid)
        self.uid = int(uid)
        self.path = path
Ejemplo n.º 23
0
class DynamicChallenge(Challenges):
    __mapper_args__ = {'polymorphic_identity': 'dynamic'}
    id = db.Column(None, db.ForeignKey('challenges.id'), primary_key=True)
    initial = db.Column(db.Integer, default=0)
    minimum = db.Column(db.Integer, default=0)
    decay = db.Column(db.Integer, default=0)

    def __init__(self, *args, **kwargs):
        super(DynamicChallenge, self).__init__(**kwargs)
        self.initial = kwargs['value']
Ejemplo n.º 24
0
class WhaleConfig(db.Model):
    key = db.Column(db.String(length=128), primary_key=True)
    value = db.Column(db.Text)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return "<WhaleConfig (0) {1}>".format(self.key, self.value)
Ejemplo n.º 25
0
class WhaleContainer(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(None, db.ForeignKey("users.id"))
    challenge_id = db.Column(None, db.ForeignKey("challenges.id"))
    start_time = db.Column(db.DateTime,
                           nullable=False,
                           default=datetime.utcnow)
    renew_count = db.Column(db.Integer, nullable=False, default=0)
    status = db.Column(db.Integer, default=1)
    uuid = db.Column(db.String(256))
    port = db.Column(db.Integer, nullable=True, default=0)
    flag = db.Column(db.String(128), nullable=False)

    # Relationships
    user = db.relationship("Users",
                           foreign_keys="WhaleContainer.user_id",
                           lazy="select")
    challenge = db.relationship("Challenges",
                                foreign_keys="WhaleContainer.challenge_id",
                                lazy="select")

    def __init__(self, user_id, challenge_id, flag, uuid, port):
        self.user_id = user_id
        self.challenge_id = challenge_id
        self.start_time = datetime.now()
        self.renew_count = 0
        self.flag = flag
        self.uuid = str(uuid)
        self.port = port

    def __repr__(self):
        return "<WhaleContainer ID:(0) {1} {2} {3} {4}>".format(
            self.id, self.user_id, self.challenge_id, self.start_time,
            self.renew_count)
Ejemplo n.º 26
0
class WhaleContainer(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(None, db.ForeignKey("users.id"))
    challenge_id = db.Column(None, db.ForeignKey("challenges.id"))
    start_time = db.Column(db.DateTime,
                           nullable=False,
                           default=datetime.utcnow)
    renew_count = db.Column(db.Integer, nullable=False, default=0)
    status = db.Column(db.Integer, default=1)
    uuid = db.Column(db.String(256))
    port = db.Column(db.Integer, nullable=True, default=0)
    flag = db.Column(db.String(128), nullable=False)

    # Relationships
    user = db.relationship("Users",
                           foreign_keys="WhaleContainer.user_id",
                           lazy="select")
    challenge = db.relationship("DynamicDockerChallenge",
                                foreign_keys="WhaleContainer.challenge_id",
                                lazy="select")

    @property
    def http_subdomain(self):
        return Template(
            get_config('whale:template_http_subdomain',
                       '{{ container.uuid }}')).render(container=self)

    def __init__(self, user_id, challenge_id, port):
        self.user_id = user_id
        self.challenge_id = challenge_id
        self.start_time = datetime.now()
        self.renew_count = 0
        self.uuid = str(uuid.uuid4())
        self.port = port
        self.flag = Template(
            get_config('whale:template_chall_flag',
                       '{{ "flag{"+uuid.uuid4()|string+"}" }}')).render(
                           container=self,
                           uuid=uuid,
                           random=random,
                           get_config=get_config)

    @property
    def user_access(self):
        return Template(
            WhaleRedirectTemplate.query.filter_by(
                key=self.challenge.redirect_type).first().access_template
        ).render(container=self, get_config=get_config)

    @property
    def frp_config(self):
        return Template(
            WhaleRedirectTemplate.query.filter_by(
                key=self.challenge.redirect_type).first().frp_template).render(
                    container=self, get_config=get_config)

    def __repr__(self):
        return "<WhaleContainer ID:{0} {1} {2} {3} {4}>".format(
            self.id, self.user_id, self.challenge_id, self.start_time,
            self.renew_count)
Ejemplo n.º 27
0
class GenFlagsMap(db.model):
    id = db.Column(Integer, db.ForeignKey('challenges.id'))
    teamid = db.Column(None, db.ForeignKey('teams.id'), primary_key=True)
    description = db.Column(db.Text)
    flag = db.Column(db.Text)

    def __init__(self, teamid, description, type, flag):
        self.teamid = teamid
        self.flag = flag
        self.type = type
        self.description = description
Ejemplo n.º 28
0
class Dependencies(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    chalid = db.Column(db.Integer, db.ForeignKey('challenges.id'))
    dependson = db.Column(db.Integer, db.ForeignKey('challenges.id'))

    def __init__(self, chalid, dependson):
        self.chalid = chalid
        self.dependson = dependson

    def __repr__(self):
        return '<dependency {}, {}>'.format(self.chalid, self.dependson)
Ejemplo n.º 29
0
class Containers(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    buildfile = db.Column(db.Text)

    def __init__(self, name, buildfile=''):
        self.name = name
        self.buildfile = buildfile

    def __repr__(self):
        return "<Container ID:(0) {1}>".format(self.id, self.name)
Ejemplo n.º 30
0
class LiveFireChallengeModel(Challenges):
    __mapper_args__ = {"polymorphic_identity": "livefire"}
    id = db.Column(db.Integer,
                   db.ForeignKey("challenges.id", ondelete="CASCADE"),
                   primary_key=True)
    vmname = db.Column(db.String(64))
    lastrevert = db.Column(db.Text, default=makeDateTime)

    def __init__(self, *args, **kwargs):
        super(LiveFireChallengeModel, self).__init__(**kwargs)
        self.initial = kwargs["value"]