CTFd平台使用docker配置pwn题目

本文详细记录了在Ubuntu20系统上安装docker和ctf_xinetd,制作Docker镜像,配置flag文件,修改Dockerfile和ctf.xinetd,创建并上传镜像到DockerHub的过程。涉及到DockerHub镜像加速器的设置,以及如何测试和删除Docker资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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停止运行中的容器

        针对docker run

执行以下命令

docker ps -a

docker kill 容器的ID

 nc连接,直接断开。

文章:

吐槽:

写的时候不要惯性ctrl+d,一下子撤回好多字,吓人一跳。

还好,不知道csdn是不是实时保存的,我关闭重新打开草稿,还是我最新写的样子。

建议就是随时保存草稿,不小心撤回过多也不慌。

使用过的链接记录如下,并对他们表示无声的感谢:

Pwn出题教程 - 腾讯云开发者社区-腾讯云

Docker教程-9-构建镜像并上传到DockerHub仓库_孔子-说的博客-CSDN博客_docker镜像上传到仓库

Docker Hub 镜像加速器 - 腾讯云开发者社区-腾讯云

Docker 删除&清理容器和镜像相关命令 - 腾讯云开发者社区-腾讯云

停止正在运行的docker容器及docker容器删除_我超有耐心的的博客-CSDN博客_docker停止运行中的容器

### 配置Docker环境用于PWN工具的安全测试 #### 创建适合的Docker镜像 为了创建一个适用于PWN(即破解二进制程序)练习和竞赛(如CTF)的开发环境,可以从基础Linux发行版开始构建自定义Docker镜像。通常会选择轻量级的基础映像来减少资源消耗并加快启动速度。 ```dockerfile FROM ubuntu:20.04 # 安装必要的软件包和支持HTTPS下载 RUN apt-y software-properties-common && \ add-apt-repository universe && \ apt-get update && \ apt-get install -y wget git python3-pip build-essential libssl-dev libffi-dev python3-dev pkg-config zip g++ make jq curl vim strace ltrace nmap gdb radare2 checksec binutils socat net-tools iproute2 htop tmux screen bash-completion zsh sudo tree cpio bsdmainutils file unzip unrar p7zip-full p7zip-rar xz-utils tar gzip bzip2 lrzip arj rpm alien cabextract mbuffer dosfstools parted ntfs-3g exfat-fuse fuseext2 squashfuse fuse-zip fuseiso fusesmb sshfs unionfs-fuse aufs-tools overlayfs-tools devio kpartx cryptsetup dmsetup losetup mount bind9-dnsutils dnsutils whois traceroute tcptraceroute mtr-tiny tcpdump wireshark tshark aircrack-ng hashcat john hydra medusa patator sqlmap wpscan nikto dirb wfuzz whatweb theharvester recon-ng metasploit-framework exploitdb seclists amass sublist3r eyewitness witnessme nuclei aquatone ffuf gobuster dalfox waybackurls paramspider subfinder assetfinder httpx crobat findomain gauplus anew unew qira rizin pwntools angr triton unicorn-engine capstone keystone pyelftools ropper ropgadget one_gadget gef peda pwndbg # 设置工作目录 WORKDIR /home/woodwhale/workspace/ctftools/ # 复制预编译好的pwndbg至容器内指定位置 COPY ./pwndbg-dev.zip /tmp/ RUN cd /tmp && unzip pwndbg-dev.zip -d pwndbg && mv pwndgb /home/woodwhale/workspace/ctftools/pwntools && rm -rf /tmp/* # 清理缓存以减小最终镜像大小 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ``` 上述`Dockerfile`脚本会基于Ubuntu 20.04 LTS版本建立一个新的镜像,在其中安装了一系列对于逆向工程、漏洞挖掘以及调试非常有用的工具集[^1]。 #### 构建与运行容器实例 完成编写后保存此文件名为`Dockerfile`,接着在同一路径下执行如下命令: ```bash $ docker build -t my_pwn_env . $ docker run --name=pwn_container -it --rm my_pwn_env /bin/bash ``` 这将会依据刚才准备好的描述文档去制作新的镜像,并立即启动一个交互式的shell供使用者操作[^4]。 #### 使用已有的PWN工具 进入容器之后就可以直接调用之前提到的各种安全研究相关应用程序了。特别是针对二进制分析方面的工作,比如加载GDB加上扩展插件`pwntools`来进行动态调试;或是运用ROPgadget寻找返回导向编程的有效gadgets等[^3]。 例如要解压并配置好`pwndbg`这个强大的GDB增强模块可以这样做: ```bash unzip ~/workspace/ctftools/pwntools/pwndbg-master.zip -d ~/.gdbinit.d/ echo "source ~/.gdbinit.d/pwndbg/gdbinit" >> ~/.gdbinit ``` 这样就完成了基本的设置过程,现在可以在该环境中开展更深入的学习和技术探索活动了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值