发布于2022年10月15日3年前 一、软件运行环境和简介 功能定制,商务合作,问题/交流群: 512897146 特别说明, 本作品 前端FlawPlatformVue, 后端FlawPlatformMatch可开源使用,但必须免费提供使用。用于任何形式的商务/盈利活动,请提前联系交流群群主。 1.1 软件简介 程序基于 Docker ,使用 Python + Django 前后端分离开发的在线答题程序 二、安装说明 2.1 前端地址 项目为前后端分离项目,前端仓库:https://gitee.com/J0hNs0N/FlawPlatformVue 2.2 安装 Python 3 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 下载 python 3.7.1。若出现 command not found 的错误,通过命令 yum -y install wget 安装 wget 即可 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.2.tgz 创建安装目录 mkdir -p /usr/local/python3 解压安装包 tar -zxvf Python-3.7.2.tgz 安装 gcc yum install gcc -y Python 3.7 版本之后需要多安装一个依赖环境 yum install libffi-devel -y 进入解压后的 Python 3 安装包目录 cd Python-3.7.1 生成编译脚本 ./configure --prefix=/usr/local/python3 编译安装 make && make install 测试安装是否成功 /usr/local/python3/bin/python3 创建软连接 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 安装所需依赖 yum install python-devel -y yum install zlib-devel -y yum install libjpeg-turbo-devel -y 2.3 使用 SQLite3 数据库 程序默认使用 SQLite3 数据库,但需要升级,若不想使用 SQLite3 可以直接跳转到下一章 3. 使用Mysql 数据库 2.3.1 升级 SQLite3 获取安装包下载地址:https://www.sqlite.org/download.html 下载 Sqlite 最新版安装包 wget https://www.sqlite.org/2022/sqlite-autoconf-3380200.tar.gz 解压安装包 tar zxvf sqlite-autoconf-3380200.tar.gz 进入解压后的安装包目录 cd sqlite-autoconf-3380200 生成编译脚本 ./configure --prefix=/usr/local/sqlite3 编译安装 make && make install 检查安装是否成功 /usr/local/sqlite3/bin/sqlite3 --version 检查旧版本 /usr/bin/sqlite3 --version 将旧版本更换名字 mv /usr/bin/sqlite3 /usr/bin/sqlite3_old 设置新版本软连接 ln -s /usr/local/sqlite3/bin/sqlite3 /usr/bin/sqlite3 检查 sqlite3 版本 sqlite3 --version 编辑环境变量文件 $HOME/.bash_profile 添加下列变量 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/sqlite3/lib"  重新加载环境变量 source $HOME/.bash_profile 检查版本 2.3.2 迁移数据库 解压项目压缩文件后,cd 切换工作目录到项目文件夹中,与 manage.py 同级 创建迁移记录 pyhton3 manage.py makemigrations 迁移创建数据库 pyhton3 manage.py migrate 2.4 使用 Mysql 数据库 2.4.1 安装 Mysql 数据库 centos 直接安装 mariadb 即可 yum -y install mariadb 2.4.2 修改程序配置文件 建议设置只在内网开放 3306 端口 通过 bind-address 设置(注意保存后重启服务) [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # 2.Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # 2.Settings user and group are ignored when systemd is used. # 2.If you need to run mysqld under a different user or group, # 2.customize your systemd unit file for mariadb according to the # 2.instructions in http://fedoraproject.org/wiki/Systemd # 2.设置绑定的 IP 地址为环回口地址 127.0.0.1 bind-address=127.0.0.1 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # 2.include all files from the config directory # !includedir /etc/my.cnf.d 重启服务 systemctl restart mariadb 检查端口绑定情况  2.4.3 设置 Mysql 密码 为了安全考虑,哪怕只开在回环口也需要设置登录密码。如果觉得不需要设置,可以跳过这一步 默认密码是空的,可以直接通过 mysql -u root -p 空密码登录即可 这里通过直接更新数据表的方式修改密码 UPDATE user SET Password = PASSWORD('密码') WHERE user = 'root'; 刷新 FLUSH PRIVILEGES; 2.4.4 创建数据库 为程序创建一个数据库,名字自定义。但后面配置 Django 时需要填对 flaw_platform 2.4.5 配置编码 编辑 /etc/my.conf ,设置 编码。记得重启 mariadb 服务 [client] # 2.设置编码 default-character-set=utf8 [mysql] # 2.设置编码 default-character-set=utf8 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # 2.Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # 2.Settings user and group are ignored when systemd is used. # 2.If you need to run mysqld under a different user or group, # 2.customize your systemd unit file for mariadb according to the # 2.instructions in http://fedoraproject.org/wiki/Systemd # 2.设置绑定地址 bind-address=127.0.0.1 # 2.设置编码 collation-server=utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server=utf8 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # 2.include all files from the config directory # !includedir /etc/my.cnf.d 2.4.6 配置 Django 使用 Mysql 数据库 解压项目压缩文件后,cd 切换工作目录到项目文件夹中,与 manage.py 同级 安装 mysqlclient pip3 install mysqlclient 出现报错以下两种方法解决 # 2.更新pip pip3 install --upgrade pip # 2.安装 mysql-devel yum install mysql-devel 编辑 common/settings.py 文件 vim common/settings.py 进行如下修改, 注意保存 # 2.Database # 2.https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { 'default': { # 2.'ENGINE': 'django.db.backends.sqlite3', # 2.'NAME': BASE_DIR / 'db.sqlite3', 'ENGINE': 'django.db.backends.mysql', # 2.数据库引擎 'NAME': '', # 2.数据库名,先前创建的 'USER': 'root', # 2.用户名,可以自己创建用户 'PASSWORD': 'xxxx', # 2.密码 'HOST': '127.0.0.1', # 2.mysql服务所在的主机ip 'PORT': '3306', # 2.mysql服务端口 } } 创建迁移记录 pyhton3 manage.py makemigrations 迁移创建数据库 pyhton3 manage.py migrate 2.5 配置 Docker 2.5.1 安装 docker 通过 yum 一键安装即可 yum -y install docker 2.5.2 配置 Remote API 编辑服务配置文件 vim /usr/lib/systemd/system/docker.service 再 ExecStart 值中添加多一行,注: 这里最好不要暴露在公网上,因为这里的 Remote API 没有身份校验。任何人都可以通过这个 Remote API 操作你的 Docker,进行操作。 -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock 重启 Docker 服务 systemctl daemon-reload systemctl restart docker 检查端口是否开启,如果 netstat command not found 需要安装 net-tools : yum -y install net-tools netstat -ano | grep 2375 2.5.3 配置 Django Docker Remote API 信息 cd 切换工作目录到项目文件夹中,与 manage.py 同级 编辑 common/settings.py 文件 vim common/settings.py 进行如下修改, 注意保存 DOCKER_API = { 'URL': 'tcp://127.0.0.1:2375', # 2.外部映射地址, 只起到显示作用。同时是提供外部访问容器端口的地址 'EXTERNAL_URL': '10.8.7.46', # 2.随机 Flag 设置的环境变量名称,建议默认 'FLAG_ENVIRONMENT_NAME': 'RANDOM_FLAG', # 2.自动删除容器/靶机时间如: +1 为一小时后自动关闭 'AUTO_REMOVE_CONTAINER': +1 } 2.7 配置邮件服务器 2.7.1 获取授权码 已 QQ 邮箱为例子,打开 QQ 邮箱 点击设置 点击账户  将服务全部开启 点击生成授权码获取授权码  2.7.2 配置文件 配置 common/settings.py 2.8 部署后端 2.8.1 安装所需包 cd 切换工作目录到项目文件夹中,与 manage.py 同级 使用 pip 安装 requirements.txt pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 2.8.2 启动服务 cd 切换工作目录到项目文件夹中,与 manage.py 同级 启动服务 # 2.python3 manage.py runserver IP:PORT python3 manage.py runserver 10.8.7.46:8000 2.8.3 管理后台 通过 createsuperuser 创建超级管理员用户,我这里设置的用户为:gdcp_flawplatform_admin,密码:gdcp123abc.. python3 manage.py createsuperuser 即可通过创建的用户民密码登录后台:http://ip:port/admin/ 2.9 部署前端 2.9.1 打包程序 打开项目文件 src/common/http-service.js 根据后端部署的地址和端口进行设置 在项目目录文件夹下 使用 npm run build 进行打包,注意与 package.json 同目录 打包完成后回生成一个 dist 目录 将生成的文件部署到 http 服务中即可 2.9.2 安装 httpd 服务 这里使用 httpd 提供 http 服务,通过 yum 安装 yum -y install httpd 安装成功后,将打包的前端程序部署到 www 站点目录下 这里最好重启一下服务 systemctl restart httpd 即可通过浏览器访问 三、使用说明 3.1 后台使用说明 进入子页面后,可通过 breadcrumbs 跳转至父级页面(这里只是演示) 3.1.1 管理员操作 (1) 管理员登录 在浏览器访问 http://127.0.0.1:8000/admin 进入后台登录界面,输入用户名密码,点击登录进入后台。这里使用的是超级管理员账户,如果没有账户请回到本文 2.2.5 创建管理员账户 一章进行创建 登录成功 (2) 修改管理员密码 登录成功点击右上角 修改密码 根据提示要求,输入旧密码、新密码、新密码确认后点击右下角修改我的密码即可 3.1.2 题目管理 (1) 增加题目 点击题目可以进入题目列表 点击右上角增加 题目 + 进入添加界面 可选择题目环境:镜像环境或附件环境,默认为镜像环境。镜像环境模式下可选择 Flag 形式:环境变量随机 FLAG或文件内容随机FLAG,默认为环境变量随机 FLAG (1.1) 镜像环境 - 环境变量随机 FLAG 这里以**j0hns0n/view_source:latest ID:81fb8003157e **为例 填写完成 镜像ID 后程序会自动调用 Docker API 获取镜像信息:镜像标签与开放端口信息 填写完相应信息后点击保存即可添加成功 添加成功后会在列表中展示(当题目超过十条时,会自动分页,每页十条) (1.2) 镜像环境 - 文件内容随机 FLAG 这里以 j0hns0n/robots:latest ID: 31d68e72be64 为例 1、选择本地文件随机FLAG形式,2、填写文件路径(程序会自动随机成FLAG,写入到填写的文件路径中),填写文件内容模板 {} 为FLAG 存放的位置 填写完成题目信息后点击保存即可 保存成功后会在列表中展示 (1.3) 附件环境 选择题目环境为:附件环境、上传附件、设置附件FLAG:这里填写的 FLAG 不会影响附件内的FLAG,值用于校验。所以附件中应已有FLAG存在。 填写基本信息后点击保存即可 发布成功后会在列表中显示 (2) 题目搜索 在题目列表中可根据:题目名称、来源、描述、镜像 ID 进行搜索,输入搜索内容点击搜索即可 点击总共 [num] 可返回所有题目列表 (3) 题目过滤器 题目列表右侧过滤器可以选择: 题目难度、题目环境、题目类型、题目状态、创建时间、最近更新时间 进行多选过滤 点击 “清除所有过滤器” 来显示所有内容 (4) 题目信息编辑修改 点击题目名称可进入编辑相应题目 修改完成后点击保存即可 (5) 删除题目 删除题目后,会自动清理题目附件,但不会影响 Docker 镜像。 (5.1) 列表多选删除 可以通过列表处的多选,使用 ”删除所选题目“ 的动作点击执行,删除选中的题目 (5.2) 题目详细中删除 在列表处,点击题目名称进入题目详细 在点击底部的按钮进行删除,进行删除 (6) 修改题目状态 - 上/下架题目 题目状态为下架时,前台是不会显示下架题目的。只有当题目状态为上架才会显示在前台的页面中 (6.1) 通过列表处修改状态 可以通过列表处的题目状态选择上/下架,选择完成后点击保存即可 前台效果 (6.2) 通过题目详细中修改状态 点击题目名称进入题目详细 在题目中的题目状态选择相应状态后点击保存即可 前台效果 重新上架后会显示在相应类型中 前台效果:进入相应题目类型 即可看到题目 (7) 排序 可以在列表页点击表头进行排序 首次点击,如下效果为正序 再次点击为降序 鼠标移到表头处,点击如下按钮可清除该列的排序 可多列同时进行排序 3.1.3 靶机(容器)管理 用户启动题目容器后会在后台显示 (1) 增加靶机 点击右上角增加 靶机(容器) 选择题目(可以根据题目名称进行搜索) 选择好后点击保存 添加成功后,可以看到开放端口的信息 (当题目超过十条时,会自动分页,每页十条) 可以通过浏览器访问 (2) 靶机(容器)搜索 在题目列表中可根据:题目名称、用户名称、容器ID、镜像 ID 进行搜索,输入搜索内容点击搜索即可(这里我为了演示效果所有加多了一条数据) 点击 **总共 [num] ** 可返回所有靶机(容器)列表 (3) 靶机(容器) 过滤器 题目列表右侧过滤器可以选择: 创建时间、最近更新时间 进行多选过滤 点击 “清除所有过滤器” 来显示所有内容 (4) 靶机(容器) 信息编辑修改(无法编辑修改) 这里设计是一旦开启(环境)容器就无法镜像修改任何内容 点击容器 ID 只能查看题目详细信息 (5) 删除靶机(容器) (5.1) 列表多选删除 可以通过列表处的多选,使用 ”删除所选靶机(容器)“ 的动作点击执行,删除选中的靶机(容器) (5.2) 容器详细中删除 在列表处,点击容器 ID 进入靶机(容器)详细 点击底部的按钮进行删除,进行删除 (6) 排序 可以在列表页点击表头进行排序 首次点击,如下效果为正序 再次点击为降序 鼠标移到表头处,点击如下按钮可清除该列的排序 可多列同时进行排序 3.1.4 答题记录管理 用户在成功答题后,会答题记录中添加一条记录,在后台只有查看的权限。无法进行:增、删、改操作, 3.1.5 用户管理 (1) 增加用户 在首页点击用户进入用户列表页面 进入用户列表后,点击右上角 增加用户 按照提示要求,完成填写用户名密码,点击保存即可 保存成功后会进入该用户的详细编辑界面 (2) 用户信息编辑修改 这里只提一些较为难理解的权限方面的帮助 (1.1) 基本状态 如下有三种状态:有效、工作人员、超级用户状态。其中在有效被选中时用户才可进行登录,当工作人员被勾选时可以登录后台,但不给予具体的权限只是能登录后台而已,无法进行任何操作。当勾选超级用户状态,无需给予具体权限可登录和操作后台所有功能(除开发者直接限制之外)。 (1.2) 权限分配 前面说到可以分配具体权限,有两种形式:将用户添加到特定用户组中或者直接给予用户权限, 用户组后面说 对一个模块权限分为:Can add 添加、Can change 修改、Can delete 删除、Can view 查看。 选择相应权限,点击中间的右箭头添加权限 添加后效果 为了方便演示,勾选上工作人员状态 点击保存 保存成功后可以看到工作人员状态已开启 点击右上角注销,退出当前账户 点击重新登录 使用刚刚添加的用户进行登录 登录到后台,可以看到当前用户只能对题目进行管理 选择 ”选中的 用户权限“ 里的权限,点击左箭头可以删除分配的权限 登录后可以看到没有任何的权限 (3) 用户密码修改 进入用户详细界面,点击 “这个表单” 进行密码修改 根据提示要求,填写新密码,与确认密码点击右下角修改密码即可,此处为强制修改,无需输入旧密码。 (4) 用户搜索 在题目列表中可根据:用户名、姓氏、名字、邮箱进行搜索查询 点击 **总共 [num] ** 可返回所有用户列表 (5) 用户过滤器 用户列表右侧过滤器可以选择: 工作人员状态、超级用户状态、是否有效、用户组 进行多选过滤 点击 “清除所有过滤器” 来显示所有内容 (6) 用户删除 (6.1) 列表多选删除 可以通过列表处的多选,使用 ”删除所选 用户“ 的动作点击执行,删除选中的用户 (6.2) 用户详细中删除 在列表处,点击用户名进入用户详细页面 点击底部的按钮进行删除,进行删除 3.1.6 用户组管理 点击认证和授权中的 组 进入用户组列表 (1) 增加用户组 进入用户组列表后点击右上角 增加 组 输入用户组名称后,选择需要给予的权限,点击右箭头进行添加 选择好后, 点击保存即可 保存成功后会在列表中显示 (当题目超过十条时,会自动分页,每页十条) (2) 给用户分配用户组 进入用户详细,当前是刚刚演示中添加的用户 user001, 选择相应用户组,点击右箭头进行添加 重新登录后可以看到效果与直接分配权限是一样的 3.1.7 Captcha stores 验证码存储 用于存储生成的验证码,让其在后台显示的初衷是防止验证码垃圾数据过多,可以定时在后台清理记录。 3.1.8 邮箱认证 Token 用于存储生成的有效认证 Token,让其在后台显示的初衷是防止验证码垃圾数据过多,可以定时在后台清理记录。 3.2 前台使用说明 3.2.1 注册 打开站点后, 若没有登录,会自动跳转到登录页面。在登录页面点击 “点击注册” 跳转到注册页面 输入邮箱,验证码点击立即注册,成功后会提示邮件已经发送指邮箱 打开邮件后,可以看到提示点击连接完成注册,该链接 30 分钟内有效,超过 30 分钟后就需要重新获取。若收件箱中没有邮件,请检查邮箱地址是否正确,并查看垃圾邮件,检查邮件是否被拦截 点击连接后会跳转到完成注册页面 根据提示完成输入:用户名密码及确认密码,验证码点击提交即可 注册完成后会自动跳转到登录页面 3.2.2 登录 在登录页面根据提示输入用户名密码,验证码点击登录即可 登录成功后会自动跳转到主页 鼠标放在右上角的 “用户名和头像” 上,会显示 “个人中心” 及 “退出” 按钮,点击 “退出” 。会退出当前登录并跳转到登录页面 3.2.3 忘记密码 在登录页面点击 “忘记密码?” 进入找回密码页面 根据提示输入注册时的邮箱,验证码点击 “发送重置密码邮箱” 即可 根据提示,在 30 分钟内点击右键中连接进行密码重置。若 30 分钟内为进行密码重置,该链接会失效,需要重新获取。若收件箱中没有邮件,请检查邮箱地址是否正确,并查看垃圾邮件,检查邮件是否被拦截 跳转到重置密码页面后,根据提示输入密码、确认密码及验证码点击提交即可 重置成功后会跳转到登录页面 3.2.4 更换头像 鼠标放在右上角的 “用户名和头像” 上,会显示 “个人中心” 及 “退出” 按钮,点击 “个人中心” 。会跳转到当前用户的个人中心页面 在个人中心页面可以看到自己的答题记录,邮件地址、当前积分等信息 鼠标移动到头像上回提示 “更换头像” ,点击更换头像,会弹出文件选择窗口, 图片只允许 JPG 格式图片,大小最大在 400 × 400 像素。 选择好后,即可替换成功。 3.2.5 镜像环境答题 点击相应分类,注:并不是只有 Web 分类能设置镜像环境题目,而是我只在 Web 分类中添加了镜像环境 进入题目后可以看到相题目,当当前分类及难度题目数量大于10题,会自动分页每页 10 题。 可以通过难度一栏切换当前分类的难度级别 点击 “入门” 切换至 入门难度,当前无入门难度的题目。 点击题目可进入题目详细页面 点击启动在线场景 启动成功后会显示当前环境的连接,和倒计时,倒计时结束后,程序会自动销毁当前环境。 访问提供的环境连接即可进行答题 找到题目中的 Flag 后,将 Flag 输入到输入框中,点击提交即可 提交成功后,会自动加分。 当不需要环境时,可以点击 “删除场景” -> “确认” 进行删除 答题完成后,在题目列表中,相应题目会变成金色 可以在个人中心看到答题记录,及当前分数 一个用户无法同时启动多个环境,当已经存在启动环境时,会提示:已启动 xxx 题目的环境,是否将其关闭并启动当前容器? 当点击确认后,会关闭正在允许的环境,启动当前题目环境 3.2.6 附件环境答题 进入到附件题目,点击附件,可以下载附件 找到 flag 后,输入 Flag 点击提交即可 提交成功 答题完成后,在题目列表中,相应题目会变成金色 3.2.7 排行榜 在排行榜中会显示,Top 10 的用户,只有积分大于 0 的情况下才会上榜。 下载地址:https://github.com/S2eTo/FlawPlatform
创建帐户或登录后发表意见