awd的批量脚本 pwn_Luz pwn题目批量部署脚本(一题一容器)

一题一个docker,优点是便于单个题目的维护,缺点比较占用资源

多题目部署在一个docker的见这里,但是为了避免权限过高带来的跨题目读取flag等问题,这个大佬锁死了可执行的命令,以至于部分题目直接使用"cat flag"等命令直接报错#coding:utf-8

# by : Luz

import os

import sys

import random

import time

def creatflag():

random.seed(time.time())

fl='flag{'

for j in range(32):

fl=fl+chr(random.randint(0,25)+ord('a'))

fl=fl+'}'

return fl

print(sys.path[0])

po=open(sys.path[0]+'/port')

port=int(po.readline(),10)

print port

po.close()

PWN_path=sys.path[0]+'/pwn/'

pwn_names=[name for name in os.listdir(PWN_path)]

flag=""

print pwn_names

for i in pwn_names:

port=port+1

os.system("mkdir "+sys.path[0]+'/'+i)

flag=creatflag()

print flag

#fd = open(sys.path[0]+'/'+i+'/'+'flag', mode="w")

#fd.write(str(flag))

os.system("echo "+flag+" > "+sys.path[0]+'/'+str(i)+'/'+'flag')

#fd.close()

os.system("cp "+sys.path[0]+'/pwn/'+i+' '+sys.path[0]+'/'+i+'/'+'pwn')#copy the challenge to the challenge document and set the challname to pwn ,then copy the dockerfile and ctf.xinetd to the challenge document

os.system("cp "+sys.path[0]+'/docker/ctf.xinetd'+' '+sys.path[0]+'/'+i+'/ctf.xinetd')

os.system("cp "+sys.path[0]+'/docker/Dockerfile'+' '+sys.path[0]+'/'+i+'/Dockerfile')

os.system("cd "+sys.path[0]+'/'+str(i)+'/'+' '+'&& '+"docker build -t "+str(i)+'auto .')#build docker

os.system("cd "+sys.path[0]+'/'+str(i)+'/'+' '+'&& '+"docker run -p "+str(port)+':8888 -v /data:/data -d '+i+'auto')#run docker

print i+' '+'port:'+str(port)

ag=open(sys.path[0]+'/flag',mode="a")

ag.write(i+' '+'port:'+str(port)+'flag: '+flag +' \n')

os.system("mkdir "+sys.path[0]+'/output/'+i)

os.system("cp "+sys.path[0]+'/pwn/'+i+'  '+sys.path[0]+'/output/'+i)

wenjian=open(sys.path[0]+'/output/'+i+'/meta.txt',mode="w")

wenjian.write(''+'nc '+'www.hutc.xyz :'+str(port)+' \n'+''+flag)#creat meta.txt

os.system("rm -f "+sys.path[0]+"/pwn/"+i)#delete the challenge if it have been setted

os.system("rm -rf "+sys.path[0]+'/'+i)#delete the docker document

po=po=open(sys.path[0]+'/port',"w")

po.write(str(port))

依赖两个文件:

Dockerfile 文件:

FROM ubuntu:16.04

RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g" /etc/apt/sources.list

RUN apt-get update && apt-get -y dist-upgrade

RUN apt-get install -y lib32z1 xinetd build-essential ssh

RUN useradd -m ctf

COPY ./flag /flag

COPY ./pwn /pwn/pwn

COPY ./ctf.xinetd /etc/xinetd.d/ctf

RUN chown root:ctf /pwn/pwn && chmod 750 /pwn/pwn

RUN echo 'ctf - nproc 1500' >>/etc/security/limits.conf

CMD exec /bin/bash -c "/etc/init.d/xinetd start; trap : TERM INT; sleep infinity & wait"

EXPOSE 8888

ctf.xinetd文件:

service ctf

{

disable = no

socket_type = stream

protocol    = tcp

wait        = no

user        = root

type        = UNLISTED

port        = 8888

bind        = 0.0.0.0

server      = /usr/sbin/chroot

server_args = --userspec=1000:1000 / timeout 50 ./pwn/pwn

banner_fail = /etc/banner_fail

# safety options

per_source   = 10 # the maximum instances of this service per source IP address

rlimit_cpu   = 120 # the maximum number of CPU seconds that the service may use

rlimit_as     = 1024M # the Address Space resource limit for the service

#access_times = 2:00-9:00 12:00-24:00

#Instances   = 20 #process limit

#per_source  = 5 #link ip limit

#log warning die

log_on_success  = PID HOST EXIT DURATION

log_on_failure  = HOST ATTEMPT

log_type =FILE /var/log/myservice.log 8388608 15728640

}

在Ubuntu16.04测试通过

把题目放置于pwn文件夹中,两个依赖文件放置在docker文件夹中

自动生成flag,docker开启后自动删除pwn文件夹中的题目文件

在output文件夹中生成题目文件夹放置题目、题目的mete.txt(包括题目的地址、题目的flag,使用标签隔开方便使用正则表达式做匹配)

自动删除创建题目docker使用的临时文件夹

自动记录已经部署过题目的端口,存放在port文件中,下次运行自动读入上次部署结束的端口,避免出现端口占用

每次部署至于要把需要新增的题目放置在pwn文件夹中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值