1. 题目环境搭建概述
NJCTF2017_messager是一道经典的PWN(二进制漏洞利用)题目,主要考察栈溢出和Canary保护机制绕过技术。搭建这道题目的环境需要准备三个核心文件:messager(题目二进制文件)、flag(题目答案文件)和init.sh(初始化脚本)。通过Docker容器化部署可以确保题目环境的一致性,避免因系统差异导致题目无法正常运行的情况。
在实际操作中,我发现很多新手在搭建这类环境时容易忽略几个关键点:一是Shell脚本的执行权限问题,二是Docker镜像构建时的文件路径处理,三是容器端口映射的正确配置。这些问题看似简单,但往往会导致题目环境无法正常启动。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建详细步骤
2.1 准备工作
首先需要从GitHub获取题目文件:
bash复制git clone https://github.com/D4rkD0g/REPL.git
cd REPL/Canary/NJCTF2017_messager
注意:建议在Linux环境下进行操作,Windows系统可能会遇到文件权限和换行符问题。如果必须在Windows下操作,可以使用WSL2环境。
2.2 关键文件解析
2.2.1 init.sh脚本详解
init.sh脚本是容器启动时的入口点脚本,主要完成三个任务:
- 将环境变量FLAG写入/flag文件
- 设置/flag文件的只读权限(chmod 444)
- 启动messager程序
bash复制#!/bin/sh
echo $FLAG > /flag
chmod 444 /flag
unset FLAG
/messager
重要技巧:这里使用unset FLAG是为了安全考虑,防止通过环境变量泄露flag。在实际CTF比赛中,这是一个很好的安全实践。
2.2.2 Dockerfile配置解析
Dockerfile定义了容器镜像的构建规则:
dockerfile复制FROM ubuntu:18.04
# 将本地文件添加到容器根目录
ADD ./messager /messager
ADD ./flag /flag
ADD ./init.sh /init.sh
# 赋予脚本和程序可执行权限
RUN chmo
