CTF用にUbuntuのDocker Imageファイルを作成する

# 概要
バイナリ(実行ファイル)解析用PythonパッケージAngrを中心とした、CTF用のコマンド類をまとめてインストールしたコンテナを作って、Imageファイルにしておくと何かと便利かなと思ったので、作り方を記録しておく。

# 手順
以下の作業はWindows10上のVirtualBoxで稼働するUbuntuで検証。

## Ubuntu上でUbuntuコンテナを作成

[端末]を起動し、以下のコマンドを実行。

```
docker run -it --name ubuntu_base ubuntu
```
![DockerImage_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/65ec2155-81a3-32cb-8fcc-f3969445f18a.png)


```
apt update
```
![DockerImage_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/56b59fda-e01d-9e76-1f71-1e1fde85d4e1.png)
![DockerImage_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/d89e8474-e7db-254a-d7b8-a680c019bd6e.png)


## Ubuntuコンテナにいろいろinstall
### python3

```
apt install python3
```
![DockerImage_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/ed8330ae-5ae1-942a-5dca-66c57ce29aed.png)
yを入力し[Enter]
![DockerImage_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/c4ab3ef0-238c-6577-5d4c-b69b66ec765e.png)

```
apt install python3-pip
```
![DockerImage_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/9ce4f275-3aaf-6e34-dd7f-1be8eab2c1d8.png)
![DockerImage_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/b1093b63-3922-44cc-1ed8-54e7dd646f11.png)
yを入力し[Enter]
![DockerImage_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/6a7d2bfe-3a55-64b9-2967-3740eeddc6c8.png)


### Angr

```
pip3 install angr
```
![DockerImage_009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/332dc811-b084-b775-3c55-5f11ce0ba65d.png)
![DockerImage_010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/9ddd37c0-d0a1-b2ba-9f76-712dccc2c11a.png)


## イメージ作成
コンテナを停止し、状態を確認。Dockerイメージを作成

```
exit
docker ps
docker ps -a
docker commit ubuntu_base ubuntu4ctf1
```
![DockerImage_101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/e6533ba9-1ee4-060b-3a9f-ff9843146bf6.png)

作成結果を確認した後、イメージをファイルに出力。
出力ファイルを圧縮して、最終確認。

```
docker images
docker save ubuntu4ctf1 -o ubuntu4ctf1.tar
zip ubuntu4ctf1.zip ubuntu4ctf1.tar
ls -la ubuntu4ctf1*
```
![DockerImage_102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/3f330719-f408-e510-7c03-f91a0080a0cd.png)

## コマンド追加
とりあえず、できたみたいなので、コマンドを追加してみる。
コンテナの状態を確認してから、再度コンテナを起動。

```
docker images
docker ps
docker ps -a
docker run -it --name ubuntu4ctf1_base ubuntu4ctf1
```

![DockerImage_201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/223d6f47-b190-57ae-db3c-1610e50d9d8a.png)

### gdbの追加

```
apt install gdb
```
![DockerImage_202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/878a37a0-f0be-3458-e3db-6529c3819877.png)
yを入力し[Enter]キーを押下。
![DockerImage_203.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/54cf9381-eba0-0c23-1653-5e3357abf2c5.png)
6を入力し、[Enter]キーを押下。
![DockerImage_204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/b6756ced-8f27-5cb8-7ac4-bc506788bd18.png)
[Enter]キーを押下。
![DockerImage_205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/ef2d36b1-acc2-473b-c6bf-7f282826758a.png)
79を入力し、[Enter]キーを押下。
![DockerImage_206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/16dd96d3-bf85-075f-676a-7df6395301fb.png)

### その他
同じ要領で以下のコマンドをインストール

```
apt install strace
apt install ltrace
apt install netcat
apt install curl
apt install nmap
```

## イメージ作成

```
exit
docker ps
docker ps -a
docker commit ubuntu4ctf1_base ubuntu4ctf2
```
![DockerImage_301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/6004e1db-ceda-d5e4-0abf-faa9c55208a1.png)

作成結果を確認後、イメージをファイルに出力

```
docker images
docker save ubuntu4ctf2 -o ubuntu4ctf2.tar
zip ubuntu4ctf2.zip ubuntu4ctf2.tar
ls -la ubuntu4ctf2*
```
![DockerImage_302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/7b34b0c4-14fd-3aad-8249-ea27a71015a9.png)

## イメージからコンテナを作成
```
mkdir d_share
docker run -it --mount type=bind,src=$PWD/d_share,dst=/tmp/share --name ctf2 ubuntu4ctf2
```
![DockerImage_303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/93563e6e-b9be-a82e-70bd-411907e3996c.png)


# 別マシンの別OS上で稼働
CentOS8をインストールした環境には、Dockerと互換のpodmanがインストールされている。
作成したコンテナが正しく動作するか検証する。

以下の作業はWindows10上のVirtualBoxで稼働するCentOSで検証。

```
cp /tmp/ubuntu4ctf2.zip .
unzip ubuntu4ctf2.zip
podman images
podman ps -a
```
![DockerImage_401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/36405765-83b4-b6f7-80ec-4814a0430b57.png)
既存のコンテナが存在しないことを確認。

```
podman load -i ubuntu4ctf2.tar
podman images
podman ps -a
podman run -it ubuntu4ctf2
python3
import angr
exit()
```
![DockerImage_402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321153/96786478-f4f9-acfd-320d-973674f8bf01.png)
正しく動作した。


# 参考URL
http://angr.io/