目录
1.安装docker和ctf_xinetd
1.docker:
2.ctf_xinetd的下载与使用
3.Docker Hub 镜像加速器
检查加速器是否生效
Docker Hub 镜像测速
2.制作镜像并上传
1.先配置好flag文件不要忘了,保证和CTFd平台的一样。
本人的目的:
2.Dockerfile:
这里是改变了lbc版本为2.35
3.ctf.xinetd
配置这里需要注意elf文件名。
4.docker-compose.yml
注意imge在该配置文件中和后文命令保持一致
5.docker build创建strongchunk镜像
注意image在配置文件和docker build xxx命令中保持一致。
6.(测试本地docker,可以跳过)
3.上传镜像
1).首先登陆你的dockerhub
在本地也要登陆
2).使用docker hub 规范修改镜像的标签
3).在登录dockerhub的命令行上传镜像
其他
删除已有的docker images:
将运行起来的docker停下来
针对docker run
文章:
吐槽:
使用过的链接记录如下,并对他们表示无声的感谢:
文章背景:记录一次学校docker出题,因为要出题,所以需要docker。
主要靠以下两个文章完成。
Pwn出题教程 - 腾讯云开发者社区-腾讯云 (tencent.com)
Docker教程-9-构建镜像并上传到DockerHub仓库_孔子-说的博客-CSDN博客_docker镜像上传到仓库
说明:本机为Ubuntu20,libc版本2.31-0ubuntu9.9
准备你的dockerhub账户。
1.安装docker和ctf_xinetd
以下都在sudo权限下完成:
sudo su
后运行以下linux命令
1.docker:
用官方的脚本直接就可以安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
这个命令可以安装好一切,至于网上说用apt-get install docker docker-compose
来安装docker-compose,千万别这样,据引用文章说,会把你的Ubuntu干碎,然后建议使用Ubuntu要会拍快照
检测是否安装成功可以使用docker images
出现前两行东西,就安装成功了。
2.ctf_xinetd的下载与使用
git clone https://github.com/Eadom/ctf_xinetd.git
注意这里面的三个文件
ctf.xinetd 、Dockerfile、/bin/flag、和后面即将出现的docker-compose.yml文件
将编译好的ELF文件(如果有libc也一起放进去),放入此文件夹的bin目录中,并且把flag改成想要的内容,然后在ctf_xinetd的同级目录下创建docker-compose.yml文件:
其中的内容为:
version: '3'
services:
pwn:
build: ./
image: pwn
ports:
- "60001:9999"
pids_limit: 1024
# cpus: 0.5
restart: unless-stopped
# privileged: true
这里面的image名字要与后面创建的docker image的名字对应。
3.Docker Hub 镜像加速器
由于笔者觉得上传镜像的时候太慢了,于是找到了这篇文章,想要上传镜像的时候快一些。
Docker Hub 镜像加速器 - 腾讯云开发者社区-腾讯云 (tencent.com)
创建或修改 /etc/docker/daemon.json
:
运行如下命令即可,备注:总共四个命令,中间那一大串都是一个,要一起复制。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
检查加速器是否生效
命令行执行 docker info
,如果从结果中看到了如下内容,说明配置成功。
Registry Mirrors:
[...]
https://registry.docker-cn.com/
Docker Hub 镜像测速
使用镜像前后,可使用 time
统计所花费的总时间。测速前先移除本地的镜像!
Registry Mirrors:
[...]
https://registry.docker-cn.com/
2.制作镜像并上传
在ctf_xinetd的目录下运行命令:
docker build -t "pwn" .
来创建一个镜像,也就是image,这里的名字要和docker-compose中写的名字一样,也就是说你docker-compose文件里的image名字写的是什么,这里build的image名就要叫啥。
配置文件 ctf.xinetd 、Dockerfile、/bin/flag 、docker-compose.yml文件
1.先配置好flag文件不要忘了,保证和CTFd平台的一样。
以下为本人的实际记录:
本人的目的:
将名字为apple的elf文件,制作在image名字为strong的镜像里,libc版本为2.35。
2.Dockerfile:
在原dockerfile出做了一些修改,修改后记录如下:
这里是改变了lbc版本为2.35
FROM ubuntu:22.04
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list && \
apt-get update && apt-get -y dist-upgrade && \
apt-get install -y lib32z1 xinetd
RUN useradd -m ctf
WORKDIR /home/ctf
RUN cp -R /usr/lib* /home/ctf
RUN mkdir /home/ctf/dev && \
mknod /home/ctf/dev/null c 1 3 && \
mknod /home/ctf/dev/zero c 1 5 && \
mknod /home/ctf/dev/random c 1 8 && \
mknod /home/ctf/dev/urandom c 1 9 && \
chmod 666 /home/ctf/dev/*
RUN mkdir /home/ctf/bin && \
cp /usr/bin/ldd /home/ctf/bin && \
cp /bin/sh /home/ctf/bin && \
cp /bin/ls /home/ctf/bin && \
cp /bin/cat /home/ctf/bin
COPY ./ctf.xinetd /etc/xinetd.d/ctf
COPY ./start.sh /start.sh
RUN echo "Blocked by ctf_xinetd" > /etc/banner_fail
RUN chmod +x /start.sh
COPY ./bin/ /home/ctf/
RUN chown -R root:ctf /home/ctf && \
chmod -R 750 /home/ctf && \
chmod 740 /home/ctf/flag
CMD ["/start.sh"]
EXPOSE 9999
两处:1️⃣FROM ubuntu:20.04 是因为要出 2.35版本的堆题目,故做此改变
2️⃣使用一下原图,由于使用的ubuntu版本高于了18.04,将图纸框起来的部分删除即可:
3.ctf.xinetd
配置这里需要注意elf文件名。
因为我的elf文件名为apple,所以那里填写为apple
service ctf
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
type = UNLISTED
port = 9999
bind = 0.0.0.0
server = /usr/sbin/chroot
# replace helloworld to your program
server_args = --userspec=1000:1000 /home/ctf ./apple
banner_fail = /etc/banner_fail
# safety options
per_source = 10 # the maximum instances of this service per source IP address
rlimit_cpu = 20 # the maximum number of CPU seconds that the service may use
#rlimit_as = 1024M # the Address Space resource limit for the service
#access_times = 2:00-9:00 12:00-24:00
}
4.docker-compose.yml
注意imge在该配置文件中和后文命令保持一致
version: '3'
services:
pwn:
build: ./
image: "strongchunk" #这里修改的是images名,将和 docker build -t "pwn" . 该命令有关
ports:
- "60001:9999"
pids_limit: 1024
# cpus: 0.5
restart: unless-stopped
# privileged: true
5.docker build创建strongchunk镜像
注意image在配置文件和docker build xxx命令中保持一致。
docker build -t "strongchunk" .
创建成功:
6.(测试本地docker,可以跳过)
在此目录下运行命令:
docker run -d -p "127.0.0.1:8888:9999" -h "strongchunk" --name="strongchunk" strongchunk
这里的-p后面的内容就是把9999端口映射到8888端口,这里的端口号可以改。
–name后面的内容是指定容器的名称,而-h是指定容器的hostname,而最后的那个strongchunk,则是image的名字,所以这里要根据你前面创建的镜像名进行更改。
注意,这里其实是手动映射了端口,其实直接使用docker-compose文件来映射端口也是可以的。
通过exp测试可以打通,如下:
3.上传镜像
1).首先登陆你的dockerhub
创建同样的镜像仓库,名字要和后面的保证一样
在本地也要登陆
docker login -u 账号 -p 密码
2).使用docker hub 规范修改镜像的标签
3).在登录dockerhub的命令行上传镜像
docker push onetree0/strongchunk:ssr
上传成功后会在dockerhub页面出现:
吐槽:使用了加速也没有达到我心中的快。
其他
删除已有的docker images:
Docker 删除&清理容器和镜像相关命令 - 腾讯云开发者社区-腾讯云 (tencent.com)
在删除docker容器的时候需要先停止docker,先删docker容器然后再删除镜像
然后docker rm docker容器的名字(docker rm x'x')
docker rmi docker容器的名字:tag(图片中的IMAGE ID)
将运行起来的docker停下来
停止正在运行的docker容器及docker容器删除_我超有耐心的的博客-CSDN博客_docker停止运行中的容器文章来源地址https://www.toymoban.com/news/detail-408849.html
针对docker run
执行以下命令
docker ps -a
docker kill 容器的ID
nc连接,直接断开。
文章:
吐槽:
写的时候不要惯性ctrl+d,一下子撤回好多字,吓人一跳。
还好,不知道csdn是不是实时保存的,我关闭重新打开草稿,还是我最新写的样子。
建议就是随时保存草稿,不小心撤回过多也不慌。
使用过的链接记录如下,并对他们表示无声的感谢:
Pwn出题教程 - 腾讯云开发者社区-腾讯云
Docker教程-9-构建镜像并上传到DockerHub仓库_孔子-说的博客-CSDN博客_docker镜像上传到仓库
Docker Hub 镜像加速器 - 腾讯云开发者社区-腾讯云
Docker 删除&清理容器和镜像相关命令 - 腾讯云开发者社区-腾讯云文章来源:https://www.toymoban.com/news/detail-408849.html
停止正在运行的docker容器及docker容器删除_我超有耐心的的博客-CSDN博客_docker停止运行中的容器
到了这里,关于CTFd平台使用docker配置pwn题目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!