CTFd平台搭建以及一些相关问题解决
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/restartWeb目录:
/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平台搭建以及一些相关问题解决的更多相关文章
- 线下AWD平台搭建以及一些相关问题解决
线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...
- CTFd平台部署
学校要办ctf了,自己一个人给学校搭建踩了好多坑啊..这里记录一下吧 心累心累 这里只记录尝试成功的过程 有些尝试失败的就没贴上来 为各位搭建的时候节省一部分时间吧. ubuntu18搭建 0x01 ...
- CTFD平台部署自制题目指北(灌题)
给实验室同学搭建的CTFD平台用于内部训练和CTF的校赛,为了循序渐进当然是先内部出一些简单入门的题目,但是网上大部分关于CTFD平台的都只是部署,而关于题目放置的内容却很少,虽然这个过程比较简单,但 ...
- 【iOS】Jenkins Gitlab持续集成打包平台搭建
Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...
- hadoop伪分布式平台搭建(centos 6.3)
最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...
- Storm on Yarn :原理分析+平台搭建
Storm on YARN: Storm on YARN被视为大规模Web应用与传统企业应用之间的桥梁.它将Storm事件处理平台与YARN(Yet Another Resource Negotiat ...
- OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)
转自:http://www.cnblogs.com/zmkeil/archive/2013/04/17/3027385.html对于HG255D参照这里:http://www.right.com.cn ...
- ELK平台搭建(上)
一.目的 为指导在Centos6.8系统下搭建标准ELK平台的工作. 二.定义 Elasticsearch Logstash Kibana结合Redis协同工作. 三.适用范围 适用于运营维护组运维工 ...
- HustOJ平台搭建
HustOJ平台搭建非常简单,首先为了排除一些不必要的故障,可以使用阿里云的服务器更新系统盘让系统盘初始化保持在没有其他包依赖的环境下及其使用root用户. 1.针对Ubuntu14.04(根据官方文 ...
随机推荐
- java 8 学习一(概述)
学习java8的新特性之前,简单看了下从java5开始历代版本的新特性,都是别人总结的. java5.java6.java7.java8的新特性 http://blog.csdn.net/samjus ...
- 原语:从0到1,从硬件指令集到OS原语,锁原语的哲学
在道家的世界观中,无极生太极,是这个世界的从0到1. 天地之道,以阴阳二气造化万物.天地.日月.雷电.风雨.四时.于前午后,以及雄雌.刚柔.动静.显敛,万事万物,莫不分阴阳.人生之理,以阴阳二气长养百 ...
- Linux-day02
一.安装搜狗输入法 1.更新包安装 setting→language support 2.安装中文语言包,安装Fcitx输入法框架 3.安装搜狗输入法命令: sudo dpkg -i sogoupin ...
- 【转】SkipList跳表基本原理
增加了向前指针的链表叫作跳表.跳表全称叫做跳跃表,简称跳表.跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表.跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找.跳表不仅 ...
- 动态规划:数字和为sum的方法数
题目描述 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数.当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案. 输入描述: 输入为两行: 第一行为 ...
- Huffman树与Huffman编码
1.Huffman树 今天复习Huffman树.依稀记得自己被Huffman树虐的经历.还记得是7月份,我刚开始看数据结构与算法,根本看不懂Huffman树的操作.后来我终于悟出了Huffman树是怎 ...
- GOOD BYE OI
大米饼正式退役了,OI给我带来很多东西 我会的数学知识基本都在下面了 博客园的评论区问题如果我看到了应该是会尽力回答的... 这也是我作为一个OIer最后一次讲课的讲稿 20190731 多项式乘法 ...
- C#开源录音组件、录像组件、录屏组件及demo源码
在多媒体系统中,一般都会涉及到录音.录像.录屏问题,采集得到的数据可以用来传输.播放.或存储.所以,对于像课件录制系统.语音视频录制系统.录屏系统等,多媒体数据的采集就是最基础的功能之一. MCapt ...
- logstash设置开机自启动
本篇文件前提是在centos7.6上使用rpm包安装的logstash,添加systemd方式启动. #默认为rpm包安装,进行执行目录 cd /usr/share/logstash/bin/ #系统 ...
- Mysql变量、存储过程、函数、流程控制
一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...