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

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

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

环境部署

搭建环境>>

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

卸载原有Docker>>

安装>>

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

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

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

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

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

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

安装 Docker CE>>

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

Tips:

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

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

启动Docker CE>>

 建立Docker用户组>>

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

建立Docker组:

$ sudo groupadd docker

$ sudo usermod -aG docker $USER

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

测试Docker是否安装正确>>

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

环境测试

搭建>>

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

操作过程

第一步:准备工作

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

第二步:安装php7,nginx,mysql

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

第三步:启动基础环境

命令详解

-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

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

内容如下:

然后重启nginx docker

访问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文件内容如下:

解释下每行命令

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

将文件<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到在容器的/目录下。

在本例中

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

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

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

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

RUN apt-get install vim -y

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

功能与shell风格相同

配置Flag项>>

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

打包成镜像>>

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

命令原型

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

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

CTF丨从零开始搭建WEB Docker靶场的更多相关文章

  1. 从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  2. Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  3. 从零开始搭建Docker Swarm集群

    从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...

  4. 从零开始搭建etcd分布式存储系统+web管理界面

    什么是ETCD 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用.强一致性的服务发现存储仓库,渐渐为开发人员所关注. 在云计算时代,如何让服 ...

  5. docker 搭建 web 服务环境

    docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...

  6. 基于Docker和Golang搭建Web服务器

    1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...

  7. 从零开始搭建Prometheus自动监控报警系统

    从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开 ...

  8. 从零开始搭建WebAPI Core_SqlSugar管理系统(一) 项目环境需求以及项目搭建

    从零开始搭建WebAPI Core_SqlSugar管理系统(一) 项目环境需求以及项目搭建 环境需求 想要使用.NET Core,首先你的Visual Studio(以下简称vs)升级到较高的版本, ...

  9. 快速搭建Web环境 Angularjs + Express3 + Bootstrap3

    快速搭建Web环境 Angularjs + Express3 + Bootstrap3 AngularJS体验式编程系列文章, 将介绍如何用angularjs构建一个强大的web前端系统.angula ...

随机推荐

  1. JavaScript-通过原型继承一个对象

    <script> //通过原型继承一个对象 //inherit()返回了一个继承原自原型对象P的属性的新对象 //這裡使用ECMAScript5中的object.create()函數(如果 ...

  2. Fedora Linux安装deb包

    前言: 我们知道,在Linux系统上有两种主要的软件包格式,分别是RPM和deb. RPM是"RPM Package Manager(RPM软件包管理器)"的递归缩写.RPM是一种 ...

  3. android与js的交互之jsbridge使用

    众所周知,app的一些功能可能会使用到H5开发,这就难免会遇到java与js 的相互调用,android 利用WebViewJavascriptBridge 实现js和java的交互,这里介绍下JsB ...

  4. MIT KIT OpenID Connect Demo Client

    Hello world! You are NOT currently logged in. This example application is configured with several pa ...

  5. WinForm时间选择控件(DateTimePicker)如何选择(显示)时分秒

    C# Windows窗体应用中,用到时间选择控件DateTimePicker,发现不能选择时分秒,难道要自己写一个控件?! 答案是否定的,通过属性修改是可以选择时间的,DateTimePicker完全 ...

  6. CSS+DIV定位分析(relative,absolute,static,fixed)

    在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚,以致经常会出现让人很郁闷的结果.今天研究了一下,总算有所 ...

  7. 巩固java(七)-----java反射机制

    一般而言,开发者社群说到动态语言,大致认同的一个定义是:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言, ...

  8. border-radius 圆角

    border-radius:3px;  参数的单位可以使绝对的像素px,也可以用相对单位%; 参数顺序是左上角,右上角,右下角,左下角. 圆角: div{width: 100px;height: 10 ...

  9. Python——pip安装报错:is not a supported wheel on this platform

    pip安装报错:is not a supported wheel on this platform 可能的原因1:安装的不是对应python版本的库,下载的库名中cp35代表python3.5,其它同 ...

  10. vue的传参方式和router使用技巧

    vue传参方法一 1,路由配置 { path: '/describe/:id', name: 'Describe', component: Describe } 2,使用方法 // 直接调用$rout ...