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 = {
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):
# -*- 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:
# -*- 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
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
#-*- 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} ,
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,
#-*- 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={
#-*- 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'}},
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))
#-*- 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,
#-*- 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,