日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker配置CTF中的靶机环境

發布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker配置CTF中的靶机环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x01 前言

之所以整理一篇Docker搭建CTF中的靶機文章,主要是因為最近斷斷續續遇到需要自己搭建一個服務器端鏡像的事,出題或者是部署一些服務,出于安全或者是可移植性的一些考慮,都是需要用到Docker的,然后每次使用Docker總要查閱一些資料,在這里整理并把經歷分享一下。

0x02 Docker介紹

整理了一下Docker|菜鳥教程上的介紹

  • Docker 是一個開源的應用容器引擎。
  • Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
  • 容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。

Docker 的架構主要分為

  • Docker 鏡像(Images):Docker 鏡像是用于創建 Docker 容器的模板。
  • Docker 容器(Container):容器是獨立運行的一個或一組應用。
  • Docker 客戶端(Client):Docker 客戶端通過命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通信。
  • Docker 主機(Host):一個物理或者虛擬的機器用于執行 Docker 守護進程和容器。
  • Docker 倉庫(Registry):Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。
  • Docker Machine:Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

0x02 Docker安裝

首先我找了一個沒有安裝Docker的服務器

以CentOS Docker 安裝為例,其他系統服務器請參考菜鳥教程https://www.runoob.com/docker/centos-docker-install.html

  • 設置倉庫

安裝所需的軟件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2。

sudo?yum install?-y?yum-utils \ device-mapper-persistent-data \ lvm2

  • 使用以下命令來設置穩定的倉庫。
sudo?yum-config-manager \--add-repo?\https://download.docker.com/linux/centos/docker-ce.repo

  • 安裝最新版本的 Docker Engine-Community 和 containerd
sudo yum install docker-ce docker-ce-cli containerd.io

  • 安裝成功

0x03 Docker使用

常用docker命令

  • 啟動docker
service docker start
  • 查看當前鏡像列表
docker images

選項說明:

  • REPOSITORY:表示鏡像的倉庫源

  • TAG:鏡像的標簽

  • IMAGE ID:鏡像ID

  • CREATED:鏡像創建時間

  • SIZE:鏡像大小

  • import導入鏡像

docker import [options] file|URL|- [REPOSITORY[:TAG]] 實例如下: docker import music.tar music:centos 導入之前導出的用Dockerfile生成的鏡像,然后修改它的REPOSITORY為music,TAG為centos
  • export導出鏡像
docker export [OPTIONS] CONTAINER 實例如下 docker export?-o test-mysql.tar <容器?ID>
  • 進入鏡像的終端
docker run -t -i music:centos /bin/bash

因為鏡像本身就是要用到操作系統的,當我們在用dockerfile生成鏡像后,想要繼續去修改鏡像的內容,本質就和我們連服務器是一樣的。要退出終端,直接輸入exit退出即可。
參數說明:

  • -i: 交互式操作。
  • -t: 終端。
  • music:centos 這是指的我之前導入的鏡像。
  • /bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。
  • docker網絡端口映射
docker run? -d -p 1001:80 music:centos /run.sh

這邊80是我music這個鏡像在創建的時候設置開放的端口,1001是我當前服務器的端口
-d:?后臺運行容器,并返回容器ID;

-p:?指定端口映射,格式為:主機(宿主)端口:容器端口

  • docker刪除容器進程
docker rm -f 70119596feee

后面的70119596feee是容器id,可以不打全

  • docker查看所有的容器:
docker ps -a
  • docker停止一個容器
docker stop <容器 ID>
  • docker開啟已關閉容器
docker start 7a432b5f80a9
  • docker刪除鏡像
docker rmi <鏡像?ID>
  • docker使用Dockerfile搭建鏡像
docker build . -t test-mysql

docker build為創建鏡像命令,名稱為test-mysql
’.'表示當前目錄,即Dockerfile文件所在的目錄

  • docker進入一個已經開啟的容器
docker exec -it containerID /bin/bash
  • docker從宿主機復制文件到容器中
docker cp 文件名 容器ID:路徑

0x04 Apache+PHP+Mysql服務

Mysql數據庫容器

以下構建mysql鏡像參考博客

https://blog.csdn.net/qq_42891915/article/details/90116190

注:這篇博客有一個坑。在他的Dockerfile中沒有給setup.sh執行權限。

  • Dockerfile
FROM mysql:5.7.20#設置免密登錄 ENV MYSQL_ALLOW_EMPTY_PASSWORD yes#將所需文件放到容器中 COPY setup.sh /mysql/setup.sh COPY test.sql /mysql/test.sql COPY privileges.sql /mysql/privileges.sql #為/mysql/setup.sh添加執行權限 RUN chmod u+x /mysql/setup.sh #設置容器啟動時執行的命令 CMD ["sh", "/mysql/setup.sh"]
  • test.sql
create database `test` default character set utf8 collate utf8_general_ci; use test;SET FOREIGN_KEY_CHECKS=0;SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (`uname` varchar(128) COLLATE utf8_bin NOT NULL,`passwd` varchar(128) COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`uname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('user1', 'pass1'); INSERT INTO `user` VALUES ('user2', 'pass2');
  • privileges.sql
use mysql; select host, user from user; -- 因為mysql版本是5.7,因此新建用戶為如下命令: create user test identified by '123456'; -- 將test數據庫的權限授權給創建的test用戶,密碼為123456: grant all on test.* to test@'%' identified by '123456' with grant option; -- 這一條命令一定要有: flush privileges;
  • setup.sh
#!/bin/bash set -e#查看mysql服務的狀態,方便調試,這條語句可以刪除 echo `service mysql status`echo '1.啟動mysql....' #啟動mysql service mysql start sleep 3 echo `service mysql status`echo '2.開始導入數據....' #導入數據 mysql < /mysql/test.sql echo '3.導入數據完畢....'sleep 3 echo `service mysql status`#重新設置mysql密碼 echo '4.開始修改密碼....' mysql < /mysql/privileges.sql echo '5.修改密碼完畢....'#sleep 3 echo `service mysql status` echo `mysql容器啟動完畢,且數據導入成功`tail -f /dev/null
  • 使用Dockerfile構建鏡像
docker build . -t test-mysql

docker build 為創建鏡像命令,名稱為test-mysql
’.'表示當前目錄,即Dockerfile文件所在的目錄

  • 將鏡像啟動,從鏡像mysql的默認3306端口映射到本地的端口上
docker run -d -p 1235:3306 test-mysql

通過PORTS可以看到成功映射到了本地的1235端口,這是我的kali虛擬機,我用真機上的Mysql管理工具Navicat嘗試連接

  • 導出鏡像包
docker export -o test-mysql.tar 7e7

在使用鏡像包的時候,導入后啟動鏡像映射端口的時候,是需要命令的

docker run -d -p 20001:3306 test-mysql /mysql/setup.sh

啟動的時候讓他執行setup.sh

Web容器

  • Dockerfile
#基于ubuntu鏡像 FROM ubuntu:16.04 #維護人的信息 MAINTAINER <785691921@qq.com> #============ # 安裝apache2 php軟件等 #============ RUN apt-get update && \apt-get install -y apache2 software-properties-common && \LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php && \apt-get update && \apt-get install -y \libapache2-mod-php5.6 \php5.6 \php5.6-cli \php5.6-curl \php5.6-dev \php5.6-gd \php5.6-imap \php5.6-mbstring \php5.6-mcrypt \php5.6-mysql \php5.6-pgsql \php5.6-pspell \php5.6-xml \php5.6-xmlrpc \php-apcu \php-memcached \php-pear \php-redis \&& apt-get clean \&& rm -fr /var/lib/apt/lists/* #=========================== # 拷貝同目錄下的WEB進入容器 #=========================== COPY test.php /var/www/html/ #=========================== # 拷貝啟動服務腳本 #=========================== COPY run.sh /run.shRUN chmod 775 /run.shCMD ["/run.sh"]
  • run.sh
#!/bin/bash#清空httpd緩存文件 rm -rf /run/httpd/*#啟動httpd服務 exec /usr/sbin/apachectl -D FOREGROUND
  • test.php
<?php$con = mysql_connect(getenv("MYSQL_ADDR"),getenv("MYSQL_USER"),getenv("MYSQL_PASS"));if (!$con){die('Fail:' . mysql_error());}else{mysql_query("SET NAMES utf8");mysql_select_db("test", $con);$result = mysql_query("SELECT * FROM user");while($row = mysql_fetch_array($result)){echo $row['uname'] . " " . $row['passwd'];echo "";}}mysql_close($con); ?>
  • 使用Dockerfile構建鏡像
docker build . -t test-php

  • 運行容器并連接數據庫
docker run -d -p 1236:80? -e MYSQL_ADDR=ip:端口 -e MYSQL_USER=test -e MYSQL_PASS='123456' test-php

0x05 常見交互式服務器靶機搭建(python環境為例)

  • 簡單的python交互腳本test.py
BUFSIZE = '' if __name__ == "__main__":print("Please input something:")buf = raw_input(BUFSIZE).replace('\n', '')print("What you entered is:"+buf)
  • Dockerfile
FROM python:2-slimRUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \apt-get update -y && \apt-get install socat -yCOPY test.py /test.pyEXPOSE 10000ENTRYPOINT socat TCP4-LISTEN:10000,tcpwrap=script,reuseaddr,fork EXEC:"/usr/bin/env python2 -u /test.py"
  • 使用Dockerfile構建鏡像

  • 開啟容器
docker run -d -p 1234:10000 test_python

成功將容器的10000端口映射到本地的1234端口

  • nc連接實現交互

  • 導入鏡像開啟容器時的命令
    ‘’’
    docker run -d -p 10000:10000 test_python /bin/sh -c “socat TCP4-LISTEN:10000,tcpwrap=script,reuseaddr,fork EXEC:”/usr/bin/env python2 -u /test.py""
    ‘’’

0x06 使用Dockerfile配置環境更換基礎鏡像的源

  • 首先更換源的原因主要是隨著Debian 9?Stretch國內常用鏡像源的普及,但由于偉大的墻的存在,所以需要更換為國內的鏡像站點。
  • 使用sed命令實現替換

sed命令介紹?https://www.runoob.com/linux/linux-comm-sed.html

  • 以更換 python:2-slim基礎鏡像源為例
FROM python:2-slim RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \apt-get update -y

不同的基礎鏡像被替換的有可能不同,一般都是Debian的默認源地址http://deb.debian.org

需要根據具體鏡像源地址進行替換

主要是執行

RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list

將Debian的默認源地址改成阿里云的地址即可,比如將http://deb.debian.org改成https://mirrors.xxx.com

總結

以上是生活随笔為你收集整理的Docker配置CTF中的靶机环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: japanese国产打屁股网站 | av一区二区三区在线观看 | 久久久久久国产视频 | 视频在线观看99 | 日韩一区二区三区免费 | 中文在线观看av | 亚洲AV无码国产精品国产剧情 | 亚洲午夜福利在线观看 | 亚洲精品观看 | 黄色成人在线 | 成人激情电影在线观看 | 无码视频一区二区三区 | 国产亚洲综合精品 | 老司机福利院 | 五月天综合网站 | 国产一级片久久 | 日日射夜夜 | 欧美变态口味重另类 | 亚洲综合视频网 | 国产精品视频亚洲 | 九九视频免费观看 | 欧美 日韩 国产 亚洲 色 | 午夜播放| 尤物视频网站在线观看 | 色呦呦在线免费观看 | 97视频播放 | 毛茸茸free性熟hd | 三级全黄做爰龚玥菲在线 | 极品尤物魔鬼身材啪啪仙踪林 | 五月婷婷天| 麻豆av免费在线 | 哪里可以看免费毛片 | 欧美在线视频a | 青青操视频在线播放 | 久久国产亚洲精品无码 | 欧美成人精品一区二区三区 | 亚洲天堂一区二区在线观看 | 中国一级片黄色一级片黄 | 男女野外做受全过程 | 欧美日韩精品在线观看视频 | 亚洲一级在线播放 | 久草综合网 | 日韩久久久久久久 | 亚洲欧美日韩精品永久在线 | 污污视频在线观看免费 | 欧美一级做a爰片久久高潮 久热国产精品视频 | 777奇米色| 影音先锋国产在线 | 夜夜撸小说 | av看片在线 | 荷兰av| 四虎成人在线 | 国产精品视频一 | 91动态图| 欧美日韩在线视频一区 | av色在线 | 女大学生的家政保姆初体验 | 午夜一区在线 | 午夜成人鲁丝片午夜精品 | 亚洲污片 | 黄色大片在线看 | 女人下边被添全过视频 | 成人自拍网 | 尤果网福利视频在线观看 | 欧美成年视频 | 懂色av蜜臀av粉嫩av分享吧 | 日韩精品四区 | 精品国产色 | 一本久道久久 | 日日躁夜夜躁 | 爱爱爱网 | 丰满人妻一区二区三区精品高清 | 国产精品欧美性爱 | 国产免费一区二区三区在线观看 | 91色噜噜| 精品午夜福利在线观看 | 一区二区三区毛片 | 朋友人妻少妇精品系列 | 日本电影成人 | 巨大黑人极品videos精品 | 少妇精品无码一区二区三区 | 国产亚洲精久久久久久无码苍井空 | 亚州色图欧美色图| 亚洲AV成人无码精品久久盆瓶 | 成人亚洲网站 | 中文av免费 | 热99精品| 麻豆av导航 | 亚洲精品18 | 高清免费毛片 | 精品伦精品一区二区三区视频密桃 | 日本韩国在线 | 亚洲国内在线 | 自拍偷拍色| 国产精品19乱码一区二区三区 | 邻家有女4完整版电影观看 欧美偷拍另类 | 黄色片网站大全 | 天堂av2021| 狠狠搞视频|