CTF丨从零开始搭建WEB Docker靶场
第十二届全国大学生信息安全竞赛即将开始,小伙伴们有报名参加的吗?大家在比赛前是否开始进行模拟演练了?今天,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靶场的更多相关文章
- 从零开始搭建Jenkins+Docker自动化集成环境
本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...
- Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境
本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...
- 从零开始搭建Docker Swarm集群
从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...
- 从零开始搭建etcd分布式存储系统+web管理界面
什么是ETCD 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用.强一致性的服务发现存储仓库,渐渐为开发人员所关注. 在云计算时代,如何让服 ...
- docker 搭建 web 服务环境
docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- 从零开始搭建Prometheus自动监控报警系统
从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开 ...
- 从零开始搭建WebAPI Core_SqlSugar管理系统(一) 项目环境需求以及项目搭建
从零开始搭建WebAPI Core_SqlSugar管理系统(一) 项目环境需求以及项目搭建 环境需求 想要使用.NET Core,首先你的Visual Studio(以下简称vs)升级到较高的版本, ...
- 快速搭建Web环境 Angularjs + Express3 + Bootstrap3
快速搭建Web环境 Angularjs + Express3 + Bootstrap3 AngularJS体验式编程系列文章, 将介绍如何用angularjs构建一个强大的web前端系统.angula ...
随机推荐
- 最简单易懂的SpringCloudSleuth教程
事务mapjvm 大佬对下面的说法是否同意呢 能否比较下zipkin,pinpoint,以及skywalking.该如何选型 回答: 他们都提供了分布式服务跟踪的能力,pinpoint以及skywal ...
- 可能是迄今为止最好的GitHub代码浏览插件--赞
https://chrome.google.com/webstore/category/extensions?hl=zh-CN 搜索"insight.io" chrome://ex ...
- Elasticsearch: 权威指南 » 深入搜索 » 多字段搜索 » 多数字段 good
跨字段实体搜索 » 多数字段编辑 全文搜索被称作是 召回率(Recall) 与 精确率(Precision) 的战场: 召回率 ——返回所有的相关文档:精确率 ——不返回无关文档.目的是在结果的 ...
- JavaWeb学习(一) ---- HTTP以及Tomcat的安装及使用
HTTP 一.协议 双方在交互.通讯的时候,遵循的一种规范,一种规则. 二.HTTP协议 HTTP的全名是:Hypertext Transfer Protocol(超文本传输协议),针对网络上的客户端 ...
- IP地址和MAC地址的关系
IP地址是网络层的概念,而MAC地址是数据链路层的概念.IP地址在网络层上对不同的硬件地址类型进行了统一,从而提供网络互联的可能:而硬件地址在真正的数据传输中要用到.当应用程序把数据从源主机发送到目标 ...
- python类型转换convert实例分析
在python的开发过程中,难免会遇到类型转换,这里给出常见的类型转换demo: 类型 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 ...
- Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
Python 2.7 IDE Pycharm 5.0.3 Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客 PIL : Pillow-3.3.0-cp27-cp27 ...
- 关于new Date()的日期格式处理
new Date()基本方法: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整 ...
- 电脑开机失败提示"用户配置文件服务登录失败"的三种解决办法
最近遇到这样一个怪现象,就是每次打开电脑输入密码,突然提示"User Profile Service 服务未能登录,无法加载用户配置文件",然后就没办法正常开机了,为什么会这样呢? ...
- BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛 ...