FROM ubuntu:20.04 AS builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    libc6-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /build
COPY src/scriptorium.c .

# 不带 canary、不带 PIE、关闭 CET，保留 NX。漏洞是释放后使用
# （delete_note 从不置空指针），借 glibc 2.31 的 tcache dup 利用——
# 特意固定在 Ubuntu 20.04：运行库有 tcache 双重释放 key 检查
# （glibc >= 2.29）但没有 safe-linking（glibc >= 2.32），
# 这正是本 Medium 档设计的难度区间。
RUN gcc -m64 -O0 -fno-stack-protector -no-pie -fcf-protection=none \
    -z noexecstack -z relro -z now \
    -o scriptorium scriptorium.c

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y --no-install-recommends \
    socat \
    util-linux \
    && rm -rf /var/lib/apt/lists/* \
    && useradd -m -s /usr/sbin/nologin pwn

COPY --from=builder /build/scriptorium /home/pwn/scriptorium
COPY config/run-scriptorium.sh /home/pwn/run-scriptorium.sh
COPY config/entrypoint.sh /entrypoint.sh
RUN chmod 555 /home/pwn/scriptorium /home/pwn/run-scriptorium.sh /entrypoint.sh

EXPOSE 9999
ENTRYPOINT ["/entrypoint.sh"]
