CTFD批量上pwn题脚本

1,188 阅读1分钟

请配合赵师傅的插件使用:juejin.cn/post/684490… pwn题文件目录格式如下图

里面命名为src/pwn即可

mkdir /home/ec2-user/CTFd/.data/CTFd/uploads/c0ace5883888b8dbe50b5fb7966a0c1b/
echo "use ctfd;">challenge.sql
for dir in `ls`; do                  #历遍ls命令显示目录
    cd $dir/src;
    if test $? == 0; then
        echo `pwd`;
        echo 'FROM glzjin/pwn_base_16
COPY pwn /pwn/pwn' > dockerfile;
        cp pwn /home/ec2-user/CTFd/.data/CTFd/uploads/c0ace5883888b8dbe50b5fb7966a0c1b/$dir                       #复制文件到目录
        docker build -t $dir .; 
       
        cd ../..;
        echo  " INSERT INTO challenges  
      ( name ,  description ,  max_attempts ,  value ,  category,  type,  state ,  requirements) 
    VALUES ('$dir','',0,200,'pwn','dynamic_docker','visible',NULL);
    set @challenge_id=(SELECT 240705);
   insert into files (type,location,challenge_id) values ('challenge','c0ace5883888b8dbe50b5fb7966a0c1b/$dir',@challenge_id);
   INSERT INTO dynamic_docker_challenge(id,initial,minimum,decay,memory_limit,cpu_limit,dynamic_score,docker_image,redirect_type,redirect_port)
 VALUES (@challenge_id,200,1,100,'128m',0.5,1,'$dir','direct',10000);
   ">> challenge.sql;    
    fi                                   #直接返回主目录。
done
docker exec -i ctfd_db_1 mysql -uctfd -pctfd ctfd < challenge.sql

单脚本容易出错,拆分版: 部署镜像

for dir in `ls`; do                  #历遍ls命令显示目录
    cd $dir;
    if test $? == 0; then
        echo `pwd`;
        pwn=`ls |ggrep -Ev 'Dockerfile|*.so|flag'`;
	echo "FROM glzjin/pwn_base_16
COPY $pwn /pwn/pwn" > Dockerfile;
        docker build -t fjh1997/$dir .;
        docker push fjh1997/$dir;
    cd ..;
    fi                                   #直接返回主目录。
done

插入数据库:

for dir in `ls`; do                  #历遍ls命令显示目录
    cd $dir;
    if test $? == 0; then
        echo `pwd`;
        pwn=`ls |grep -Ev 'Dockerfile|*.so|flag|challenge.sql'`;
	#cp $pwn /home/wlgc/cuz/CTFd/.data/CTFd/uploads/c0ace5883888b8dbe50b5fb7966a0c1b/$dir
	cd ..
	echo  " INSERT INTO challenges
      ( name ,  description ,  max_attempts ,  value ,  category,  type,  state ,  requirements)
    VALUES ('$dir','',0,200,'pwn_hard','dynamic_docker','visible',NULL);
    set @challenge_id=(SELECT 240705);
   insert into files (type,location,challenge_id) values ('challenge','c0ace5883888b8dbe50b5fb7966a0c1b/$dir',@challenge_id);
   INSERT INTO dynamic_docker_challenge(id,initial,minimum,decay,memory_limit,cpu_limit,dynamic_score,docker_image,redirect_type,redirect_port)
 VALUES (@challenge_id,200,1,100,'128m',0.5,1,'fjh1997/$dir','direct',10000);
   ">> challenge.sql;

    fi                                   #直接返回主目录。
done

拉取镜像

for dir in `ls|grep -Ev '*.sh|*.sql'`; do                  #历遍ls命令显示目录
	docker pull "fjh1997/$dir"
done