Пример #1
0
import importlib
import threading
from Queue import Queue
import datetime

thrds = 8       # docker 同时操作线程


npcteams = 2    #额外的npc队伍
#lock = threading.Lock()



q = Queue() 

logger = logset('start')
logger.addHandler(console)


models.main(npcteams) #初始化数据库


timespan = 1 * 60 # 刷新 flag 时间

'''
主要流程

先创建容器,然后启动容器,再关闭容器,等比赛开始时再启动容器
'''
# port 规则为 3 00 队伍id 22 服务端口
subject =   {
Пример #2
0
from log import logset
import datetime, decimal


class JSONEncoder(json.JSONEncoder):
    def default(self, o):

        if isinstance(o, decimal.Decimal):
            return str(o)
        if isinstance(o, datetime.datetime):
            return str(o)

        return json.JSONEncoder.default(self, o)


logger = logset('models')

app = Flask(__name__)
app.json_encoder = JSONEncoder

app.secret_key = 'eIImw7u5Vi3zQu5vAwBDEiyn9ESI0Bje1xOAyEuTrTprBgI8zb3RPkFTUjGdIfGdLrx8uGKS20ITxCZX0'

app.config[
    "SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://debian-sys-maint:[email protected]:3306/awd?charset=utf8&autocommit=true"
#app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:[email protected]:3306/awdplatform?charset=utf8"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)


class math(db.Model):
Пример #3
0
# -*- coding: utf-8 -*-
import random
from models import db, Teams, Flags, Round, containers, Scores
import time
import hashlib
from sqlalchemy import func
import datetime
import threading
import decimal
from log import logset, console

logger = logset('flagflasher')
logger.addHandler(console)


def make_flag_str(teamname):
    rnd = random.random()
    #print(teamname + str(rnd) + str(time.time()))
    token = hashlib.md5(
        (teamname + str(rnd) + str(time.time())).encode()).hexdigest()
    return token


def errorfresh(x, flag):
    while True:
        try:
            x.freshflag(flag)
            logger.info('%s %sFlag freshed : %s' %
                        (x.teamname, x.container_name, flag))
            return
        except:
Пример #4
0
# -*- coding: utf-8 -*-
from models import db, Teams, Scores, Round, Flags, User
import random
import base64
import hashlib
from log import logset
import time
#from flask_user import current_user, login_required, roles_required, UserManager, UserMixin

logger = logset('init')


def make_token_str(teamname):
    rnd = random.random()
    s = (teamname + str(rnd) + str(time.time()))
    token = base64.b64encode(hashlib.md5(s).hexdigest()[8:20].encode())
    return token


def init_main(npcteams=3):
    userlist = []
    teamlist = []
    npcpassword = '******'
    for i in open('users.txt').read().splitlines():
        if len(i) > 10:
            team, username, userpass = i.split(' ')
            userlist.append([team, username, userpass])
            teamlist.append(team)

    for i in xrange(npcteams):
        team, username, userpass = '******' + str(i), 'NPC' + str(i), npcpassword
Пример #5
0
import random
from models import db, Teams
import time
import hashlib
import threading
import base64
#from dockercontr import yunnansimple_run
from log import logset

logger = logset('batch')


def start_docker(team):
    www_pass = make_token_str(team.teamcontainer)
    ssh_port = 30022 + (team.id * 100)
    www_port = 30080 + (team.id * 100)
    ports = {'22/tcp': ssh_port, '80/tcp': www_port}
    team.sshpassword = www_pass
    db.session.commit()
    yunnansimple_run(team.teamcontainer, www_pass, ports)
    logger.info('%s container started' % (team.teamcontainer))


def make_token_str(teamname):
    rnd = random.random()
    #print(teamname + str(rnd) + str(time.time()))
    token = base64.b64encode(
        hashlib.md5((teamname + str(rnd) +
                     str(time.time())).encode()).hexdigest()[8:20].encode())
    return token
Пример #6
0
#-*- coding:utf-8 -*-
from __init__ import subjectclass,client

'''
source /etc/profile &&
source /etc/environment &&

sudo -H -u ctf /bin/bash -c '/usr/local/tomcat8.5.47/bin/catalina.sh start' &
'''
import sys
sys.path.append("..")
from log import logset,console
#from models import db,containers
logger=logset('subject.tomcat8')
logger.addHandler(console)


class o(subjectclass):
    image_name = '54only/tomcat8'
    name = 'tomcat8'
    sshaccount='ctf'
    def __init__(self, teamid,teamname, sshport,serviceport,teampass,score):
        self.container_name=self.name + '_' + str(teamid)
        super(o,self).__init__(teamid,teamname, sshport,serviceport,teampass,score)


    def create_containers(self):
        self.ctn = client.containers.create(self.image_name,
            #command=cmd,
            detach=True,
            ports = {'22/tcp':self.sshport,'8080/tcp':self.serviceport} ,
Пример #7
0
import docker

# for import log
import sys
sys.path.append("..")
from log import logset, console
from models import db, containers, Session

client = docker.from_env()

logger = logset('subject.__init__')
logger.addHandler(console)


class subjectclass(object):
    #container_name=''
    #check_rezult = True
    def __init__(self, teamid, teamname, sshport, serviceport, teampass,
                 score):
        self.serviceport = serviceport
        self.teamid = teamid
        self.sshport = sshport
        self.teamname = teamname
        self.score = score
        self.teampass = teampass
        self.check_stat = 0
        self.session = Session()
        self.containers = containers
        self.db_containers = containers(self.name, self.container_name,
                                        self.teampass, self.sshaccount,
                                        self.serviceport, self.sshport,
Пример #8
0
#-*- coding:utf-8 -*-
from .__init__ import subjectclass, client, docker
import os

# for import log
import sys

sys.path.append("..")
from log import logset, console
#from models import db,containers
logger = logset('subject.awd_note')
logger.addHandler(console)
imagename = 'awd_note'
#from models import db,Teams,containers


def build():
    try:
        img = client.images.get(imagename)
        logger.info('Image alread exists :' + imagename)
        return img
    except Exception as e:
        print(e)
        m100 = 1024 * 1024 * 1024
        logger.info('Image building :' + imagename)
        #print os.path.abspath('.')
        #return
        #,dockerfile='./pwn/awd_note/Dockerfile'
        client.images.build(path='./subject/source/pwn/awd_note',
                            tag=imagename,
                            container_limits={
Пример #9
0
#-*- coding:utf-8 -*-
from __init__ import subjectclass,client



# for import log
import sys
sys.path.append("..")
from log import logset,console
from models import db,containers
logger=logset('pwn_simple')
logger.addHandler(console)


class o(subjectclass):
    image_name = '54only/pwntest'
    name = 'pwn_easy'
    sshaccount='ctf'
    def __init__(self, teamid,teamname, sshport,serviceport,teampass,score):
        self.container_name=self.name + '_' + str(teamid)
        super(o,self).__init__(teamid,teamname, sshport,serviceport,teampass,score)
        #subjectclass.container_name = self.container_name
        #db.session.add(containers(self.container_name,teampass, self.sshaccount, serviceport,sshport,teamid,score))
        #db.session.commit()

    def create_containers(self):
        self.ctn = client.containers.create(self.image_name,
            #command=cmd,
            detach=True,
            ports = {'22/tcp':self.sshport,'9999/tcp':self.serviceport} ,
            #volumes = {'/var/www/html/':{'bind':volpath,'mode':'rw'}},
Пример #10
0
import docker
from log import logset, console

logger = logset('__init__')
logger.addHandler(console)
'''
import importlib
aa = importlib.import_module('lib.aa')
c = aa.c()
print(c)
'''

client = docker.from_env()


def clear_container(cname):
    try:
        ctn = client.containers.get(cname)
        ctn.stop()
        ctn.remove()
        logger.info('[+]%s\'s container %s removed' % (cname))
    except:
        logger.warning('[*]container %s not found' % (cname))
Пример #11
0
#-*- coding:utf-8 -*-
from __init__ import subjectclass, client

# for import log
import sys
sys.path.append("..")
from log import logset, console
#from models import db,containers
logger = logset('subject.pwn_simple')
logger.addHandler(console)


class o(subjectclass):
    image_name = '54only/pwntest'
    name = 'pwn_simple'
    sshaccount = 'ctf'

    def __init__(self, teamid, teamname, sshport, serviceport, teampass,
                 score):
        self.container_name = self.name + '_' + str(teamid)
        super(o, self).__init__(teamid, teamname, sshport, serviceport,
                                teampass, score)
        #subjectclass.container_name = self.container_name
        #db.session.add(containers(self.container_name,teampass, self.sshaccount, serviceport,sshport,teamid,score))
        #db.session.commit()

    def create_containers(self):
        self.ctn = client.containers.create(
            self.image_name,
            #command=cmd,
            detach=True,
Пример #12
0
#-*- coding:utf-8 -*-
from __init__ import subjectclass, client
import time
import requests
# for import log
import sys
sys.path.append("..")
from log import logset, console
#from models import db,containers
logger = logset('subject.yunnam_simple')
logger.addHandler(console)


class o(subjectclass):
    #image_name = 'awd/yunnam_simple'
    image_name = '54only/yunnan_simple'
    name = 'yunnam_simple'
    #subjectclass.name = name
    sshaccount = 'www-data'

    def __init__(self, teamid, teamname, sshport, serviceport, teampass,
                 score):
        self.container_name = self.name + '_' + str(teamid)
        super(o, self).__init__(teamid, teamname, sshport, serviceport,
                                teampass, score)
        #subjectclass.container_name = self.container_name

    def create_containers(self):
        self.ctn = client.containers.create(
            self.image_name,
            #command=cmd,