From bee5b228b09b2b073409cd408b65122717992581 Mon Sep 17 00:00:00 2001 From: Yeol <136407746+13m0n4de@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:26:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(pwn/srand):=20=E6=B7=BB=E5=8A=A0=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=9E=84=E5=BB=BA=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- challenges/pwn/srand/build/Dockerfile | 48 ++++++++++++++++++++++++++ challenges/pwn/srand/build/init.sh | 7 ++++ challenges/pwn/srand/build/xinetd.conf | 17 +++++++++ 3 files changed, 72 insertions(+) create mode 100644 challenges/pwn/srand/build/Dockerfile create mode 100644 challenges/pwn/srand/build/init.sh create mode 100644 challenges/pwn/srand/build/xinetd.conf diff --git a/challenges/pwn/srand/build/Dockerfile b/challenges/pwn/srand/build/Dockerfile new file mode 100644 index 0000000..ca76040 --- /dev/null +++ b/challenges/pwn/srand/build/Dockerfile @@ -0,0 +1,48 @@ +FROM ubuntu:22.04 AS builder + +RUN apt-get update && apt-get install -y gcc make + +WORKDIR /build + +COPY src/* ./ + +RUN make + +FROM ghcr.io/svuctf/base-v2/xinetd:latest + +# Copy initialization script and xinetd configuration +COPY --chmod=500 init.sh /init.sh +COPY xinetd.conf /etc/xinetd.conf + +# Set up the CTF environment +RUN chmod -R 750 /home/ctf && \ + mkdir -p /home/ctf/lib64 && \ + mkdir -p /home/ctf/dev && \ + mkdir -p /home/ctf/bin && \ + mkdir -p /home/ctf/lib/x86_64-linux-gnu && \ + mkdir -p /home/ctf/lib32 + +# Copy necessary libraries from builder stage +COPY --from=builder /lib/x86_64-linux-gnu/libc.so.6 /home/ctf/lib/x86_64-linux-gnu/ +COPY --from=builder /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /home/ctf/lib64/ + +# Copy the challenge binary +COPY --from=builder --chmod=500 /build/game /home/ctf/game + +# Set up device nodes +RUN 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/* + +# Copy necessary binaries abd binaries +RUN cp /lib/ld-musl-x86_64.so.1 /home/ctf/lib/ && \ + cp /bin/sh /home/ctf/bin && \ + cp /bin/ls /home/ctf/bin && \ + cp /bin/cat /home/ctf/bin && \ + cp /bin/base64 /home/ctf/bin + +RUN chown -R ctf:ctf /home/ctf + +CMD ["xinetd", "-dontfork"] diff --git a/challenges/pwn/srand/build/init.sh b/challenges/pwn/srand/build/init.sh new file mode 100644 index 0000000..1a0acaf --- /dev/null +++ b/challenges/pwn/srand/build/init.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +echo $GZCTF_FLAG > /home/ctf/flag +chown -R ctf:ctf /home/ctf/flag +unset GZCTF_FLAG + +/usr/sbin/chroot /home/ctf/ /game diff --git a/challenges/pwn/srand/build/xinetd.conf b/challenges/pwn/srand/build/xinetd.conf new file mode 100644 index 0000000..d54df8f --- /dev/null +++ b/challenges/pwn/srand/build/xinetd.conf @@ -0,0 +1,17 @@ +service ctf +{ + disable = no + id = xinetd + socket_type = stream + protocol = tcp + wait = no + user = root + type = UNLISTED + port = 70 + bind = 0.0.0.0 + server = /init.sh + # 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 = 100M # the Address Space resource limit for the service +}