CTFd平台搭建以及一些相关问题解决

一.序言

  因为想给学校工作室提高一下学习氛围,随便带学弟学妹入门,所以做了一个ctf平台,开源的平台有CTFd和FBCTF,因为学生租不起高端云主机所以只能选择占资源相比FBCTF小的CTFd进行搭建。记录一下搭建过程和遇到的一些问题。

二.搭建CTFd步骤

  首先我们需要安装镜像,这里我选择的是阿里云的ECS,Ubuntu16.04,单纯是因为喜欢Ubuntu的风格,CentOS也是可以搭建的。

  等待重置系统后,此时的服务器是纯净的,什么都没有,甚至没有ifconfig...

  当然这些都不是问题,缺什么装什么就行了。

1.更新apt包索引

$ sudo apt-get update

2.安装git

因为CTFd的源码和部署好的题目都是要通过github传输的。

$ sudo apt install git

3.安装pip  

$ sudo apt install python-pip

如果出现异常可以升级pip

$ sudo python -m pip install --upgrade pip

4.安装Flask

因为CTFd是基于Flask框架建造的,所以要搭建CTFd肯定要安装Flask

$ sudo pip install Flask

5.下载CTFd

$ sudo git clone https://github.com/isislab/CTFd.git

6.安装CTFd

$ cd CTFd
$ sudo ./prepare.sh

7.运行CTFd

$ sudo python serve.py

如果没有出错的话就可以直接在本地访问了,但是我要架的是可以通过外网访问的,所以还要安装gunicorn

8.安装gunicorn并规定映射的端口

$ sudo pip install gunicorn
$ sudo gunicorn --bind 0.0.0.0: -w "CTFd:create_app()"

出现这一步即表示服务正常打开了,可以从外部访问。

其中的端口号是可以随便改的。

三.问题处理

1.关于阿里云的防火墙

当做到这一步时肯定要先访问一下公网地址看能不能访问服务器,但是访问却发现链接失败。但是在本地确可以访问,端口也确实打开了

后来发现阿里云的防火墙默认只开启了80、443和22端口,所以将8000防火墙打开。

再次访问,发现可以访问了。

2.清理主界面的广告

既然为学校搭建平台,肯定主页面要去广告的,不然看着闹心。

那么 找源代码去,在/CTFd/CTFd/themes/core/templates目录下找到了CTFd的所有html文件,在比对后发现base.html是主页面,那么打开看看,找了半天都没找到关于以上广告的匹配信息,只找到了这个,经过一番查找终于在他自带的数据库ctfd.db找到了这段html...

好的,删除之,重启服务,广告没了,完美。

3.在主页面添加标签

CTFd平台并未提供公告功能,但是我认为这个功能是要有的,以防网站被扫描导致瘫痪等发生。

好 继续改源代码,这边我走了弯路,下面的都是弯路内容,我首先在base.html的列位置增加了两个href

格式照着上面写过来后点击主页面的info发现弹出404

那么"{{ request.script_root }}/info"这个东西到底是什么呢,后来经过查阅后得知这是Flask框架的一种访问规则,称为路由,表示用户请求的URL找出对应的处理函数,因为源码中并没有指定info的路由,所以肯定404了,那怎么办呢,我找到了控制视图的文件views.py

在这个文件中包含了所有url对应的访问地址,所以添加两条路由

@views.route('/notice')
def notice(): return render_template('notice.html',notice=notice)
@views.route('/info')
def info(): return render_template('info.html',info=info)

再将html文件移动至/CTFd/CTFd/themes/core/templates目录下发现可以访问了。

那么我为什么要说走了弯路呢,原来管理员界面是可以增加标签页的!!!我这一圈白走了而且不便于管理...苦逼。

4.平台web题目的部署

作为CTF平台,平台做的再好,没有题目肯定是没用的,所以开始部署题目,至于MISC和CRYPTO、REVERSE题目是可以直接在后台部署并且上传的,但是web题呢?

当时第一个想到的是使用docker部署web,但是看了看自己的服务器配置,

哈哈算了吧,那怎么办呢,因为我也是出题人,对于web这块我选择了php作为主语言,所以后来想了想搭建一个LAMP环境算了。

那么开始搭建L(linux)A(apache)M(mysql)P(php)环境

考虑到php版本带来的部分弱类型无法使用,因此选择安装php5.6版本,

安装PHP5.6

//安装aptiude
$ apt-get install aptitude
//检索并卸载php现有版本,因为阿里云ubuntu镜像默认安装了php7
$ aptitude purge `dpkg -l | grep php| awk ‘{print $2}’ |tr “\n” ” “`
//添加支持php5.6源
$ sudo add-apt-repository ppa:ondrej/php
//更新ubuntu源
$ sudo apt-get update
//安装php5.6及常用组件
$ sudo apt-get install php5.
$ sudo apt-get install php5.-gd
$ sudo apt-get install php5.-mysql
$ sudo apt-get install php5.-mbstring
$ sudo apt-get install php5.-zip
  • 测试:php -v

安装Apache

$ sudo apt-get install apache2
  • 测试: 浏览器访问http://Ubuntu的IP,出现It Works!网页。

  • 查看状态: service apache2 status/start/stop/restart

  • Web目录: /var/www

  • 安装目录: /etc/apache2/

  • 全局配置: /etc/apache2/apache2.conf

  • 监听端口: /etc/apache2/ports.conf

安装Mysql

$ sudo apt-get install mysql-server mysql-client
  • 测试mysql -u root -p

  • 查看状态service mysql status/start/stop/retart

  • 查看监听端口的情况netstat -tunpl 或 netstat -tap

安装phpMyAdmin

$ sudo apt-get install phpmyadmin
  • 安装:选择apache2,点击确定。下一步选择是要配置数据库,并输入密码。

  • 创建phpMyAdmin快捷方式sudo ln -s /usr/share/phpmyadmin /var/www/html

  • 启用Apache mod_rewrite模块sudo a2enmod rewrite

  • 重启服务

    • service apache2 restart

  • 测试:浏览器访问:http://ubuntu地址/phpmyadmin

安装完毕,部署web题目即可,但是,服务器与本地并没有交互,如何上传题目呢?

这就用到之前安装的git了,我可以将题目打包到github的项目中,再通过git clone 命令下载到服务器,然后在后台将web指向服务器的php文件即可。

5.平台web题目的安全问题

因为apache默认是开启列目录的,所以某些题目可能会直接泄露源码,而web代码审计类型题目的flag就隐藏在源码中,所以必须禁用列目录

/etc/apache2/apache2.conf是Ubuntu-apache的主配置文件

修改此文件中的

删除即可

6.一些关于题目的问题

  身为ctf的web模块,sql注入肯定是必不可少的,但是注入一定会波及数据库,如果将CTFd的默认数据库用mysql管理,即将ctfd.db内容写入mysql,并将config.py指向mysql的表的话,就会导致flag以及平台用户名密码全部泄露,失去了题目存在的意义,本来是应该将ctfd.db放到mysql管理的,但是由于以上原因,不予修改,这样既能保证重要数据的安全性,也能保证题目的可玩性。

  但是同样带来的隐患是CTFd初始数据库容量有限,必须控制好用户数量。这个是需要注意的。

  还有一点是关于管理的,因为ctf线上做题并不能保证真实性和可靠性,如果依靠分数顺位选拔人才的话,不免会有不合适的人进阶,自己的平台最实用的功能其实就是flag的保密性,因为自己出的题目在网上是找不到flag的,当然,我的github也进行了安全处理==

综上所述,我决定增加提交word形式的writeup和flag值进行双向判断。这样至少能增加一点可靠性。

原创文章,转载请联系我并注明出处:https://www.cnblogs.com/pureqh/p/10001259.html

CTFd平台搭建以及一些相关问题解决的更多相关文章

  1. 线下AWD平台搭建以及一些相关问题解决

    线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...

  2. CTFd平台部署

    学校要办ctf了,自己一个人给学校搭建踩了好多坑啊..这里记录一下吧 心累心累 这里只记录尝试成功的过程 有些尝试失败的就没贴上来 为各位搭建的时候节省一部分时间吧. ubuntu18搭建 0x01 ...

  3. CTFD平台部署自制题目指北(灌题)

    给实验室同学搭建的CTFD平台用于内部训练和CTF的校赛,为了循序渐进当然是先内部出一些简单入门的题目,但是网上大部分关于CTFD平台的都只是部署,而关于题目放置的内容却很少,虽然这个过程比较简单,但 ...

  4. 【iOS】Jenkins Gitlab持续集成打包平台搭建

    Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...

  5. hadoop伪分布式平台搭建(centos 6.3)

    最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...

  6. Storm on Yarn :原理分析+平台搭建

    Storm on YARN: Storm on YARN被视为大规模Web应用与传统企业应用之间的桥梁.它将Storm事件处理平台与YARN(Yet Another Resource Negotiat ...

  7. OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)

    转自:http://www.cnblogs.com/zmkeil/archive/2013/04/17/3027385.html对于HG255D参照这里:http://www.right.com.cn ...

  8. ELK平台搭建(上)

    一.目的 为指导在Centos6.8系统下搭建标准ELK平台的工作. 二.定义 Elasticsearch Logstash Kibana结合Redis协同工作. 三.适用范围 适用于运营维护组运维工 ...

  9. HustOJ平台搭建

    HustOJ平台搭建非常简单,首先为了排除一些不必要的故障,可以使用阿里云的服务器更新系统盘让系统盘初始化保持在没有其他包依赖的环境下及其使用root用户. 1.针对Ubuntu14.04(根据官方文 ...

随机推荐

  1. python windows下获取路径时有中文处理

    在windows中用os,path.abspath(__file__)时有中文路径时,默认是转成非unicode格式 这会导致,在其它模块使用该路径时,会报 utf8' codec can't dec ...

  2. LeetCode 1150. Check If a Number Is Majority Element in a Sorted Array

    原题链接在这里:https://leetcode.com/problems/check-if-a-number-is-majority-element-in-a-sorted-array/ 题目: G ...

  3. Spring---SSH整合(二)

    基于Spring---SSH整合,使用SSH编写后台: User模块层 TreeNode.hbm.xml <?xml version="1.0" encoding=" ...

  4. 最短路径 | 1003 dfs 或 dij ,单源最短路径条数与经过的点权最大

    这题很早之前就遇到过,是pat留给我的第一印象,然而昨天却有点写不出来.今天dfs用了10分钟不到写出来了.dij用了大约15分钟,捉虫花了一点时间. dfs: 注意剪枝的时候别剪错就行了. #inc ...

  5. Linux中fork()函数详解(转载)

    linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  6. centos7 编译安装 haproxy1.8.20

    当前系统信息: [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core) ...

  7. Solr7.x学习(3)-创建core并使用分词器

    1.创建core文件夹 ck /usr/local/solr-7.7.2/server/solr mkdir first_core cp -r configsets/_default/* first_ ...

  8. SWIG 3 中文手册——2. 引言

    目录 2 引言 2.1 SWIG 是什么? 2.2 为什么使用 SWIG? 2.3 一个 SWIG 示例 2.3.1 SWIG 接口文件 2.3.2 swig 命令 2.3.3 构建 Perl5 模块 ...

  9. C中关键字inline用法

    一.什么是内联函数 在C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数.栈空间指的是 ...

  10. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)

    一.说明 1)需求: Rancher 上部署 Jenkins-master,服务采用 Jenkins-slave 发布,发布完成后 Jenkins-slave 自动销毁. 2)环境: Rancher ...