Docker

Docker

与运维部署有关的技术

初识Docker

写好的代码要接触三个环境:

  • 开发环境
  • 测试环境
  • 生产环境

由于代码在不同的环境下运行,就会出问题。(原因:水土不服)

解决方法:把环境和代码一起发给别人。

容器:环境加代码

Docker:是一个开源的应用容器引擎。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。

安装Docker

参考https://docker.easydoc.net/

Docker架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

576507-docker1

Docker的命令

Docker容器的使用

Docker 容器使用 | 菜鸟教程 (runoob.com)

1
2
3
4
5
6
7
8
9
docker
//查看所有命令选项
docker stats --help
//docker command --help 更深入地了解指定地命令使用方法

//获取镜像,如果本地没有ubuntu镜像,则可以这样载入
docker pull ubuntu
//或者
docker pull ubuntu:latest

利用Docker出pwn题

在ubuntu配置docker的环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
sudo apt-get update
sudo apt-get install docker.io
//检查docker是否安装成功
docker version
//查看帮助
docker --help
docker [command] --help

//以下命令如果不加sudo会报错
sudo docker info
sudo docker images
//容器构建
sudo build
//运行容器
sudo docker run
//停止容器
sudo docker stop
//强制停止容器
sudo docker kill
//删除容器
sudo docker rm
1
2
 sudo apt install docker-compose
//docker-compose是用于定义和运行多容器Docker应用程序的工具。通过docker-compose,可以使用yml文件来配置应用程序的所需文件。

ctf_xinetd与pwn_deploy_chroot项目

ctf_xinetd项目

git clone https://github.com/Eadom/ctf_xinetd
  1. 把题目可执行文件和flag放在ctf_xinetd/bin中 ps:不要把 bin 作为题目的名字

  2. 修改ctf.xinetd文件 回到ctf_xinetd目录下,修改ctf.xinetd 把图片箭头指向的 helloworld 改成bin文件夹中题目的名字 保存退出

  3. Build 在ctf_xinetd目录下 .

    1
    
    sudo docker build -t "pwn" 
    
  4. Run 在ctf_xinetd目录下

    1
    
    sudo docker run -d -p "0.0.0.0:pub_port:9999" -h "pwn" --name="pwn" pwn
    

    -h:指定容器的hostname pub_port:改成你想放置的端口号,建议如8001,8002…等

此时输入docker ps 会发现题目容器已经启动了,可以nc 0.0.0.0 pub_port进行测试一下(pub_port:改成你想放置的端口号)

参考

docker | 菜鸟教程

pwn_deploy_chroot项目:

当需要部署多道题时,可以采用该项目,一次部署!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 将该项目克隆下来
git clone https://github.com/giantbranch/pwn_deploy_chroot

# 使用
步一:将所有pwn题目放入bin目录(注意名字不带特殊字符,因为会将文件名作为linux用户名)

步二:python initialize.py
该python指python2,该步是设置各种文件

步三:docker-compose up --build -d
根据Dockerfile文件及其配置文件创建容器并开启

pwn出题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# NX保护机制:
-z execstack / -z noexecstack  # (关闭 / 开启) 堆栈不可执行

# Canary:(关闭 / 开启 / 全开启) 栈里插入cookie信息
# !开canary好像会造成栈中局部变量的顺序有所改变
-fno-stack-protector /-fstack-protector / -fstack-protector-all 

# ASLR和PIE:
-no-pie / -pie   # (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk

# RELRO:
-z norelro / -z lazy / -z now   # (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限

-s   # 去除符号表

参考

updatedupdated2023-07-312023-07-31