搭建一个ctf_CTF丨从零开始搭建WEB Docker靶场

33f07fa2a8fcfd1f61d7e972c1d4d712.png

第十二届全国大学生信息安全竞赛即将开始,小伙伴们有报名参加的吗?大家在比赛前是否开始进行模拟演练了?今天,i春秋将与大家分享靶场搭建的相关内容,帮助大家更好的进行实操演练。

学习搭建Docker靶场之前,我们先了解一下为什么要用Docker?

  • 相对于虚拟机,Docker启动更快。
  • 成本考虑
  • 更安全

环境部署

搭建环境>>

  • OS: Ubuntu 16.04
  • 设备类型: VM
  • 宿主机:ESXI 6.5

卸载原有Docker>>

6eb53a58259add03747a3b067cee015c.png

安装>>

Ubuntu 16.04 + 上的Docker CE默认使用overlay2存储层驱动,无需手动配置。

使用APT安装:由于APT源使用HTTPS以确保软件下载过程中不被篡改。因此,我们需要添加使用HTTPS传输的软件包以及CA证书。

f8dc00fca61447b3dc02052917664df4.png

鉴于国内网络问题,建议使用国内源。

为了确认所下载软件包的合法性,需要添加软件源的GPG密钥。

ed9ddc374a8818bb9479291db10777fc.png

然后,我们需要向source.list中添加Docker软件源。

c080a3d335ab086b9fe1073f487a2e5a.png

以上命令会添加稳定版本的Docker CE APT镜像源,如果需要测试或每日构建版本的Docker CE请将stable改为test或者nightly。

安装 Docker CE>>

更新APT软件包缓存,并安装 docker-ce:

93a08aa8c02a771ca7af007d7dcc9608.png

Tips:

  • 使用脚本自动安装
  • 在测试或开发环境中Docker官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu系统上可以使用这套脚本安装。

901a12722e012359fffc02f6034d2896.png

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把Docker CE的Edge版本安装在系统中。

启动Docker CE>>

e3c95d2702535dfb4af1893e988807e2.png

建立Docker用户组>>

默认情况下,Docker命令会使用Unix socket与Docker引擎通讯。而只有Root用户和Docker组的用户才可以访问Docker引擎的Unix socket。出于安全考虑,一般Linux系统上不会直接使用Root用户。因此,更好地做法是将需要使用Docker的用户加入Docker用户组。

建立Docker组:

$ sudo groupadd docker

$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试Docker是否安装正确>>

e8f37f5b06c88953b7f24aeacc039910.png

若能正常输出以上信息,则说明安装成功。

环境测试

搭建>>

首先制作一个WEB容器,了解端口映射原理和数据卷挂载原理。

操作过程

第一步:准备工作

  • 根目录: /opt/docker
  • 网站根目录:/opt/docker/www
  • nginx相关目录:/opt/docker/nginx/conf.d

第二步:安装php7,nginx,mysql

32d67bca04c2932e5b5689b5d5e0295e.png

注意!MySQL务必加上版本号,否则会拉取MySQL8.0的镜像下来导致后面各种奇奇怪怪的错。

第三步:启动基础环境

70b7f997167672b3b9d657d5cd3e4def.png

命令详解

-v /opt/docker/www/:/var/www/html/:把宿主机(Ubuntu)的/opt/docker/www/挂载到了docker的/var/www/html/

--name php 命名为php

-p 80:80 把宿主机的80映射到docker的80端

-e MYSQL_ROOT_PASSWORD=123456

设置MySQL密码为123456

测试环境是否正确>>

编辑文件/opt/docker/www/index.php

3f30a818bb8ed75c66e137f6e2c5789c.png

然后在宿主机目录/opt/docker/nginx/conf.d/新建index.conf

内容如下:

539c8849848dd75d2851b7d598491fa5.png

然后重启nginx docker

01dae4cafb9f29186c7d0049cf2732d0.png

访问10.16.11.231【你部署Docker的机器的地址】查看是否输出PHPINFO

如图即为成功。

定制Docker

MySQL配置>>

由于Docker的MySQL默认是开放了Root的外连权限,因此在比赛中为了安全,Root用户务必设置强密码,比赛前数据库务必先备份原始库,方便数据库被清了恢复,权限务必配置为一个库一个用户,禁止该库所有权用户访问其他库和禁掉相关高危权限。

部署靶场Docker>>

以dedecms为例子

首先从pull下来一个集成环境然后启动并挂载到宿主机的一个数据卷上:

docker pull chengxulvtu/dedecms:utf8_full_5.7

docker run -d --name dede-lantinghe -p 8081:80 -v /opt/docker/

www/dedecms:/var/www/html chengxulvtu/dedecms:utf8_full_5.7

然后正常安装,配置数据库。

然后kill掉该docker并rm掉,FTP连接到宿主机找到安装好dedecms的目录/opt/docker/www/dedecms

在目录下创建一个新的文件夹(这里我用的src)并把dedecms的所有文件src文件夹内,再/opt/docker/www/dedecms新建一Dockerfile文件,操作后的/opt/docker/www/dedecms目录应该类似这样。

编辑Dockerfile文件内容如下:

b5f60128fff55c488267969519cd7fad.png

解释下每行命令

29dbd9d096cc0bbf6cc95078eb3eb385.png

在Dockerfile中第一条非注释INSTRUCTION一定是FROM,它决定了以哪一个镜像作为基准,<image>首选本地是否存在,如果不存在则会从公共仓库下载(当然也可以使用私有仓库的格式)。这里引用了eboraas最新的apache-php集成环境。

a661c5b1b8c336c2063873792819e11a.png

将文件<src>拷贝到container的文件系统对应的路径<dest>下。

其中<src>可以是文件、文件夹,对于文件和文件夹<src>必须是在Dockerfile的相对路径下,即只能是相对路径且不能包含../path/。

<dest>只能是容器中的绝对路径。如果路径不存在则会自动级联创建,根据你的需要是<dest>里是否需要反斜杠/,习惯使用/结尾从而避免被当成文件。

与ADD命令相比,ADD支持远程URL获取文件,但官方认为是strongly discouraged,建议使用wget或curl代替。

COPY的语法和功能与ADD相同,只是不支持上面讲到的<src>是远程URL、自动解压这两个特性,但是Best Practices for Writing Dockerfiles建议尽量使用COPY,并使用RUN与COPY的组合来代替ADD,这是因为虽然COPY只支持本地文件拷贝到container,但它的处理比ADD更加透明,建议只在复制tar文件时使用ADD,如ADD trusty-core-amd64.tar.gz /,会先自动解压内容再COPY到在容器的/目录下。

在本例中

de11ece80aeb8e92d110272e06229ba7.png

复制相对于Dockerfile文件位置的src/下的所有内容到/var/www/html/下:

3e245f1222f50edd1beca48661056390.png

RUN指令会在当前镜像的顶层执行任何命令,并commit成新的(中间)镜像,提交的镜像会在后面继续用到。

另外RUN命令的格式有两种写法。

shell格式,相当于执行/bin/sh -c "<command>":

RUN apt-get install vim -y

exec格式,不会触发shell,所以$HOME这样的环境变量无法使用,但它可以在没有bash的镜像中执行,而且可以避免错误的解析命令字符串:

9b8cfbb0b4a6141c1e8d89dd7084fb56.png

功能与shell风格相同

配置Flag项>>

进入src目录,配置你需要的Flag项目,然后就可以打包了。

打包成镜像>>

创建完上面的Dockerfile后在当前目录执行。

e2f6c99ee6dfb9714cc11b629b4548d9.png

命令原型

dc4c1e72016701a2953e7bc5b15e8340.png

稍等片刻就可以运行docker images指令并能看到名为ctf,TAG为list1的镜像了。

以上就是搭建WEB Docker靶场的全部内容,你学会了吗?

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ctfweb题目"docker镜像"是指一个挑战题目,要求我们对一个Docker镜像进行分析和攻击。Docker是一种容器化技术,可以将应用、环境和关联的配置打包成一个独立的镜像。这个镜像可以在不同的环境中进行移植和运行。 对于这个ctfweb题目,我们可以首先通过命令"docker images"查看当前系统中的Docker镜像。然后,我们可以选择这个题目中的特定镜像进行分析,使用"docker inspect [镜像ID]"命令获取有关镜像的详细信息。 接下来,我们可以尝试在本地使用这个镜像来运行一个容器。可以使用"docker run [镜像ID]"命令创建一个新的容器实例,并根据题目给出的提示找出容器内的漏洞、文件、服务等信息。 从容器内部提取敏感信息的常见方法包括查找配置文件、访问数据库、分析日志文件等。另外,在容器中也可以进行一些命令执行、代码注入等漏洞利用操作,以获取更高的权限和更深入的信息。 此外,我们还可以使用一些常见的Docker安全工具,比如Docker Bench for Security、Clair、Trivy等来对容器进行漏洞扫描,识别潜在的安全问题,并找出可能存在的弱点。 当我们找到容器内的漏洞或弱点时,我们可以根据具体情况进行利用或编写脚本进行自动化攻击。在攻击过程中,我们应该遵循道德规范,不进行未授权的攻击行为。 总之,ctfweb题目"docker镜像"需要我们对Docker容器进行分析和攻击,通过理解镜像的构成和原理,掌握Docker相关的命令以及使用一些安全工具,我们可以更好地解决这个题目并获得相应的分数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值