一篇文章教你ctfd平台搭建&ctfd动态靶机创建&docker的使用&ctf动态flag的实现 来我这就够了!

这篇具有很好参考价值的文章主要介绍了一篇文章教你ctfd平台搭建&ctfd动态靶机创建&docker的使用&ctf动态flag的实现 来我这就够了!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、ctfd的搭建

先换个源

开始安装docker

启动Docker服务并设置为开机启动

下载CTFd修改版

构建镜像

部署容器

二、开始部署一个ctfd赛题

现成的题库演示:

一个docker镜像:

选择dynamic_docker:

部署完很多很多的题目

点击开启,点击网址

三、怎么自己写一个ctf题目

👌好!首先给大家一个网址:Docker Hub

下载一个xftp

创建个文件夹

输入docker login

这就是我们刚刚部署完的题目:


一、ctfd的搭建

1.首先我们大家随着对网络安全的越来越强的认识,喜欢做点题目练练手,那么搭个靶场就很不错,ctfd作为开源的老牌平台(虽然这个平台也有安全性的问题),不过么还是很不错哒!

2.那么我们废话不多说,开始搞起来吧!

3.首先我们得买个云服务器(好处就是网络快,搞错了可以直接重置,自己也会带有加速源),不过搭建本地服务器也是可以的,可惜我们实验室也就那么几台。。

4.接下来,进入服务器,可能你会遇到什么密码错误等等,自己在控制台重置一下服务器就行了:

5.接下来我们先换个源:

我们先用下面的命令:

 vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ buster main contrib non-free
deb http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
deb http://mirrors.aliyun.com/debian/ buster-proposed-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
# deb-src http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster-proposed-updates main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster-backports main contrib non-free

deb http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib
# deb-src http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib

最后使用:wq 这个命令保存

像我一样:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

回车保存就可以了

ctfd设置用户一次只能开启一个容器,docker,容器,运维

6.接下来我们开始安装docker(为什么呢?因为我们需要创建动态靶机,这个是我们非常有用的一个好东西,具体可以查一下他的好处,我这里不多赘述):

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

测试docker是否安装成功:

sudo docker help

若安装成功,终端会显示Usage: docker [OPTIONS] COMMAND,提示你输入更详细的docker命令。

或者:

curl -sSL https://get.daocloud.io/docker | sh

然后再安装 Docker Compose:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
启动Docker服务并设置为开机启动
sudo systemctl start docker
sudo systemctl enable docker

 之后我们验证一下是否安装成功:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

7.接下来我们要开始最重要的一步了 ,安装ctfd:

许多文章都是需要再配置ctf,并且不是汉化版的,我们直接使用大神全部配置好的!

下载CTFd修改版

博主 Vicosna 已经对CTFd v3.3.1官方源码进行了更换国内镜像源、添加CTFd-Whale子模块、配置frp网络、设置静态文件CDN加速等工作,可前往使用作者修改的版本进行安装部署。

git clone -b frp https://github.com/vicosna/CTFd.git		# 修改版(根目录不建议修改名字)
cd CTFd														# 进入CTFd目录
git submodule update --init 								# 更新CTFd-Whale子模块

# ——————————————————————————————————————————————————————
# 如果你访问Github的速度不佳,也可以使用博主提供的CSDN和Gitee版(可选)
git clone -b https://codechina.csdn.net/vicosna/CTFd.git	# CSDN
cd CTFd														# 进入CTFd目录
sed -i 's/github.com/codechina.csdn.net/g' .gitmodules		# 修改子模块Url
git submodule update --init 								# 更新CTFd-Whale子模块
# ——————————————————————————————————————————————————————
git clone -b frp https://gitee.com/vicosna/CTFd.git			# Gitee
cd CTFd														# 进入CTFd目录
sed -i 's/github.com/gitee.com/g' .gitmodules				# 修改子模块Url
git submodule update --init 								# 更新CTFd-Whale子模块

之后构建镜像

运行

docker-compose build

命令,等待·················

如果修改的各配置文件没有错误的话,那么应该就会返回 Successfully tagged ctfd_ctfd:latest~

然后部署容器

运行

docker-compose up -d

部署容器,耐心等待~

我们再来使用docker ps -a查看一下当前正在运行的容器是否都正常。

ctfd设置用户一次只能开启一个容器,docker,容器,运维

可以看到我们已经存在ctfd的docker镜像了(这边由于我已经做了比较多的ctf题目镜像,所以还有别的镜像···)

8.访问你的服务器的公网IP就能打开平台界面啦,由于CTFd最新版启用了nginx端口转发,我们直接访问80端口即可,当然CTFd的默认端口8000也可以访问。

ctfd设置用户一次只能开启一个容器,docker,容器,运维

恭喜大家完成ctfd的部署,为啥我有这样漂亮的界面?我之后再讲哈哈哈

我非常欢迎大家来放我们的平台。

二、开始部署一个ctfd赛题

我们这里先用现成的题库,这里用CTFTraining题库进行演示:
sudo mkdir -p /opt/CTF #创建CTF目录
sudo cd /opt/CTF
sudo git clone htt/opt/CTFps://github.com/CTFTraining/CTFTraining.git #安装CTFTraining,注意这里只能git下来目录,目录中是空的,需要一个一个CTF题目去git
cd CTFTraining
ls

然后比如说我们随便选一个ctf题,2016的反序列化这个:

sudo git clone htt/opt/CTFps://github.com/CTFTraining/0ctf_2016_unserialize.git #下载CTF题目,只要替换0ctf_2016_unserialize为其他目录名称即可下载所有题目
cd 0ctf_2016_unserialize/ #进入题目目录中
ls

然后我们直接在这个目录下:

sudo docker-compose up -d #使用docker-compose下载镜像生成容器并启动容器

构建后你可以看一下是否构建完成:

docker ps -a #查看容器状态
应该是存在一个docker镜像了,就像我的这个:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

然后进入网站:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

管理员点击进入Admin Panel 管理界面:

点击whale:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

把自己服务器的ip填入direct ip address 地址中:

如果你是本地搭建的就写127.0.0.1,保存一下。

进入challenge界面:

点击上面的加号:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

进入后我们选择dynamic_docker(如果你要是只要静态的flag,那你就用standard标准就行了):

ctfd设置用户一次只能开启一个容器,docker,容器,运维

然后填写内容:这里名称啊,分数啊,提示啊啥的都自己想填啥就填啥了

ctfd设置用户一次只能开启一个容器,docker,容器,运维

注意了:这边docker image 就是你本地构建镜像的名字,如果不存在本地镜像会自动调用dockerhub上面的在线镜像内容,这个是后话我们后面再说

ctfd设置用户一次只能开启一个容器,docker,容器,运维

我这边是ctfd设置用户一次只能开启一个容器,docker,容器,运维

这个名字,所以填这样的:

ctftraining/0ctf_2016_unserialize

别的你就填别的

然后FRP port 的内容你就填80 这个是配置的默认转发接口

就像我这样填肯定没问题!!

然后在下面的什么初始分数,衰减分数,最低分数,你就看你心情填了:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

接下来点击create 你就得到了一个题目

然后可能刚部署完的题目是隐藏的,你需要进入题目详情然后点击:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

把hidden变成visible就行

然后你就按照方法部署完很多很多的题目了。。。

ctfd设置用户一次只能开启一个容器,docker,容器,运维

点击刚刚部署的反序列化:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

点击开启,点击网址:刚点完会有点慢的,初始化啥的,老ctfer懂的都懂啦~

ctfd设置用户一次只能开启一个容器,docker,容器,运维

我们就搞好啦~

三、怎么自己写一个ctf题目

刚才有个朋友问我,马老师怎么自己写一个ctf题目呢?我不要现成的。我一看,哦源赖氏昨天

言归正传,我们这里就要用到docker啦,这里稍微说一下,docker其实在我看来就是一个一个的小服务器一样,它可以部署很多服务,部署好东西,他是轻量化的,就这么多···其实我具体也不太懂

👌好!首先给大家一个网址:Docker Hub

大家进去后注册一下,可能需要科学上网。。

这个是docker的镜像管理网址,就像github一样···

这样我们就可以通过在本地构建好ctf题目镜像后利用他上传到网站上,这样的话,以后调用这个镜像,或者部署ctf题目将会非常方便。

这是我的几个镜像,大家直接像上文所说的方法里面,docker image 里面直接填入我的这个名称,比如:ctfd设置用户一次只能开启一个容器,docker,容器,运维

这就是一个题目,你就可以直接使用我的题目了,很方便,你的服务器会自动调用它,不需要手动本地构建了,大家可以试试。

那么,如果怎么本地上传到docker hub上呢?

这里再额外说一下,如果你要是云服务器,下载一个xftp这样可以很方便的管理你的服务器上的内容。

ctfd设置用户一次只能开启一个容器,docker,容器,运维

这里我连上服务器可以很清楚的看到你的服务器的文件:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

然后额我们开始正式写一题flag吧:

创建个文件夹:

第一个文件夹里面是:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

files里面是:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

html是:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

我是这样的结构,因为给大家演示的是最简单的,那么我就用这样的结构,当然你也可以用你自己的想法。

然后我给大家看一下最简单的flag动态例子:

index.php:

<?php

echo $flag = "flag_here";

?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Boring Code</title>
</head>

<body>
  <img src="https://www.zhaoj.in/wp-content/uploads/2019/09/1568193169f6d798aa4fd6c6c07b525caceb42cf88.png"/>
</html>

大家可以想一下这个flag界面是啥样子的。。

那么有的同志就说了,马老师你这个没用啊,不是动态flag,flag不就是flag_here吗?我说小同志,我这个有用,当年二百多斤的英国大力士都掰不动我一个···

那么这个就需要dockerfile文件里面来写了:
 

FROM php:5.6-apache  #导入基础web环境镜像

COPY ./files /tmp/          #先复制到临时文件夹,这样避免对源文件造成误删等其他影响。
RUN cp -rf /tmp/html/ /var/www/ && \       
    chown -R root:root /var/www/html && \
    chmod -R 755 /var/www/html    #这些就是基本php的一些关键提升权限等,避免无法使用文件

CMD sh -c "sed -i "s/flag_here/$FLAG/" /var/www/html/index.php && export FLAG=not_flag && FLAG=not_flag && apache2-foreground"  #最重要的东西,把flag_here作为全局变量,后面是判断语句,作为变量以后,在ctfd源码中就有可以直接将他赋值为动态flag的函数操作了,这样部署完就是动态的。

我这个大家看懂没有:

docker因为像是一个个的小服务器,那么就需要先搞一个环境,这边第一行就是人家也是在dockerhub上已经创建好的一个环境,我们直接调用他就行了,像python引入库一样,如果你要是像自己配置环境,是比较麻烦,你可以参考别人的文章,我这边不说了,因为不会(bushi),当然还有别的别人已经配置好的,大家可以去dockerhub找一找,直接用就行了。

写完之后呢,就可以上传到服务器上了。

就像这样上传到我自己的目录:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

ok 然后我们进入服务器命令框:

输入docker login

ctfd设置用户一次只能开启一个容器,docker,容器,运维

我这里之前登陆过,反正应该还是需要输入账号密码的,咱输入就行了。

然后我们要进入这个刚刚写好的题目的目录下:

我的这边就是

ctfd设置用户一次只能开启一个容器,docker,容器,运维

我想这个大家应该都是会的吧····

然后使用这个命令:

docker build -t name/image .

name为dockerhub名,image为镜像名(自定义)  .为版本号代表latest

名称要为 dockerhub用户名/镜像名 的格式

想我这边之前搞得就是ctfd设置用户一次只能开启一个容器,docker,容器,运维

这样一个用户名/名称

然后应该会提示一个successfully,成功了

我们去docker ps -a 下面应该也能看到

这时我们的镜像已经构造完成,然后我们将镜像上传到dockerhub的仓库,运行以下命令

docker push name/image

上传之后你的dockerhub刷新一下就应该也能看到了:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

之后么就容易多啦,参考第二节填入你的镜像名称,比如

ctfd设置用户一次只能开启一个容器,docker,容器,运维

然后就是我说的,你要是上传了dockerhub,你在别的服务区,只要搭一个ctfd平台就行,镜像直接调用dockerhub上的就行了,填一个名称,简单多了。

部署完,显示题目,出来就行啦!爽!!!

(md你们可能不知道我自己中间搞了多久nnd,玩鹰的是把)

这就是我们刚刚部署完的题目:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

flag是动态的吧···  好看吧····简单吧·····  我们这做校赛的时候我被喷了出这个题目。。。

四、ctfd平台的美化

你这边怎么说呢,其实github上有很多好看的主题,人家自己做的,你搜一下就有

GitHub - CTFd/themes: Official and Community CTFd themes

这里,很多的,当然你自己写一个也是可以的,大佬会美化的搞完给我来一份嗷

里面也有使用说明,下载了替换就行,然后就是记得看一下版本号兼容不兼容,我又一次搞了个主题tnnd整个平台报错打不开了,重新搞了一个。。。

或者你可以在主题文件夹下房好几个主题,这样直接切换就行,你要啥主题就切换啥:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

这是我的安装目录:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

你把github下载的解压完了放ctfd的这个路径下就行

切换效果:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

还可以嗷,加油同志们,做好了给我分享一个。

除此之外:大家看我主页面怎么还挺好看的是吧,

ctfd设置用户一次只能开启一个容器,docker,容器,运维

大家可以在pages里面修改它的index:

ctfd设置用户一次只能开启一个容器,docker,容器,运维

<div class="row">
    <div class="col-md-6 offset-md-3">
      	 <img class="w-100 mx-auto d-block" style="max-width: 350px;padding: 30px;padding-top: 3vh;" src="/files/f5d4925b003100bcd2b5409c940954af/huctf.jpeg" />
        <img class="w-100 mx-auto d-block" style="max-width: 250px;padding: 20px;padding-top: 5vh;" src="/files/1651de1baa1d2b7075ce9f55194b7da5/1.png" />
      		<img class="w-100 mx-auto d-block" style="max-width: 350px;padding: 30px;padding-top: 5vh;" src="/files/1b37387428a3720f77daf1a19a3c3d01/butian.png" />
        <h3 class="text-center">
            <a href="admin"><p style="font-size: 40px;margin:60px;">点击注册登录</p></a>
        </h3>
        <br>
    </div>
</div>

把图片上传了引用就行。。

写到这,累了,有没有大佬给我支持一下,zfb转账500块

好了,今天就到这,有问题评论区见~文章来源地址https://www.toymoban.com/news/detail-761939.html

到了这里,关于一篇文章教你ctfd平台搭建&ctfd动态靶机创建&docker的使用&ctf动态flag的实现 来我这就够了!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 史上最详细的红黑树讲解(一篇文章教你手撕红黑树)

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️数据结构与算法       🛰️欢迎关注:👍点赞🙌收藏✍️留言       今天给大家讲解红黑树,和AVL树一样,这章暂且不讲删除。

    2024年01月16日
    浏览(32)
  • 【Stable Diffusion WebUI】一篇文章教你如何安装和使用Stable Diffusion WebUI

    1.1 下载 stable-diffusion-webui 1.2 运行 webui.sh 第一次卡住一般是在 Installing gfpgan ,第二次卡住一般是在 Installing open_clip . 如果卡住或者报错,就直接pip install [package] -i https://pypi.tuna.tsinghua.edu.cn/simple 然后在执行 bash webui.sh -i https://pypi.tuna.tsinghua.edu.cn/simple ,一直重复上述过程,直

    2024年02月09日
    浏览(37)
  • 一篇文章教你解决node-sass 4.12.0 安装失败,一劳永逸

    已知: 使用mac电脑 使用的node版本是v14.20.0 问题:在安装node-sass 4.12.0的时候报错如下  看到这一堆错误,千万不要立马复制粘贴到浏览器去搜,感觉像无头苍蝇乱撞,好歹稍微看一下什么意思。 显而易见是有一个文档404not found,那么我们具体看一下  https://github.com/sass/node

    2024年02月01日
    浏览(31)
  • 一篇文章带你搞懂动态规划(由暴力递归到动态规划)

    ”动态规划“ 的过程相当于 记忆化搜索 , 即在普通 递归 的过程中用二维数组进行记忆化存储一些状态结果, 从而避免重复的计算(剪枝)。 举一个简单的例子:在 递归法 求解 斐波那契 数列的过程中, 就进行了多次的 重复计算 , 而动态规划相当于是对已经计算的状态

    2024年02月20日
    浏览(43)
  • 在注销流量卡时,让你交违约金该怎么办,这篇文章教你如何解决!

    现在网上办理的大流量卡虽然资费便宜,一般都是有合约期,如果你的流量卡没有到合约期的话,当我们在注销这些流量卡时,运营商就会让你赔付一笔违约金,才能给我们办理注销业务,遇到这种问题不要慌,还是有解决的方法! ​ 在了解这个问题之前,我们先来看一看

    2024年02月05日
    浏览(139)
  • 不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

    Code First 是 Entity Framework Core (简称 EF Core) 的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率: 使用 Code First 开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序 Code F

    2024年02月04日
    浏览(40)
  • Linux MeterSphere测试平台远程访问你不会?来试试这篇文章

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分

    2024年02月06日
    浏览(34)
  • 一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)

    这种方法的好处就是没有登录限制,不用担心封号,没有ip的限制,是一种官方认可的方式 使用普通的科学的上网方式,也可以直接进行连接使用 该项目来源于Github大佬制作的关于GPT的本地化部署 有兴趣了解原理的可以去看看这个项目 潘多拉,一个让你呼吸顺畅的ChatGPT D

    2024年02月12日
    浏览(31)
  • Zookeeper篇——搭建Zookeeper服务器,docker搭建并启动Zookeeper服务,一篇文章手把手教学!

    ZooKeeper是一个分布式服务框架,基于Paxos算法实现,提供高可用的数据管理和应用程序协调服务。它的目标是提供一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。 ZooKeeper曾是Hadoop的正式子项目,后发展成为Apache顶级项目,与Hadoop密切相关但却没有任

    2024年04月28日
    浏览(38)
  • Python 自动化测试框架环境怎么搭建?这篇文章给你讲的明明白白

    目录 Python 自动化测试框架环境搭建 第一步:安装 Python 第二步:安装 PyCharm 第三步:安装 Selenium WebDriver 第四步:安装浏览器驱动 第五步:创建测试用例 第六步:集成持续集成平台 总结 Python 是一种流行的编程语言,可以用于多种应用场景,包括自动化测试。本文将介绍如

    2023年04月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包