# Dockerfile FROM debian:bookworm-slim # Install build dependencies RUN apt-get update && apt-get install -y \ build-essential \ wget \ openssh-server \ gdb \ git \ python3.10 \ python3-pip \ python3-dev \ python3-venv \ libssl-dev \ libffi-dev \ curl \ sed \ && rm -rf /var/lib/apt/lists/* # Install Poetry RUN curl -sSL https://install.python-poetry.org | python3 - \ && ln -s /root/.local/bin/poetry /usr/local/bin/poetry # Configure SSH RUN mkdir /var/run/sshd \ && echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \ && echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config \ && echo 'root:password' | chpasswd # Install pwndbg RUN cd /opt \ && git clone https://github.com/pwndbg/pwndbg \ && cd pwndbg \ && python3 -m venv .venv \ && . .venv/bin/activate \ && ./setup.sh \ && echo 'source /opt/pwndbg/gdbinit.py' >> /root/.gdbinit # Copy modified version of pure-ftpd (smaller buffer size) COPY pureftpd/pure-ftpd-1.0.50.tar.gz /tmp # Download and compile pure-ftpd WORKDIR /tmp RUN tar -xvf pure-ftpd-1.0.50.tar.gz \ && cd pure-ftpd-1.0.50 \ && chmod +x configure \ && ./configure --with-puredb --with-virtualchroot --with-everything \ && make \ && make install \ && cd .. \ && rm -rf pure-ftpd-1.0.50* # WORKDIR /tmp # RUN wget https://github.com/jedisct1/pure-ftpd/releases/download/1.0.50/pure-ftpd-1.0.50.tar.gz \ # && tar -xvf pure-ftpd-1.0.50.tar.gz \ # && cd pure-ftpd-1.0.50 \ # && ls -Alt \ # && chmod +x configure \ # && sed -i '305s/.*/static char replybuf[55U];/' src/ftpd.c \ # && sed -i '4865s/.*/\tint display_banner = 0;/' src/ftpd.c \ # && ./configure --with-puredb --with-virtualchroot \ # && make \ # && make install \ # && cd .. \ # && rm -rf pure-ftpd-1.0.50* # configure the username + password RUN groupadd chroot \ && useradd -m -d /home/bob -g chroot -s /bin/bash bob \ && useradd -m -d /home/eve -g chroot -s /bin/bash eve RUN echo "bob:password0" | chpasswd \ && echo "eve:password1" | chpasswd \ && chown root:root /home/bob \ && chown root:root /home/eve \ && chmod 0755 -R /home/bob \ && chmod 0755 -R /home/eve # makes some files with explict permissions RUN mkdir -p /home/bob/dev/ \ && cd /home/bob/dev/ \ && mknod -m 666 null c 1 3 \ && mknod -m 666 tty c 5 0 \ && mknod -m 666 zero c 1 5 \ && mknod -m 666 random c 1 8 # copy pwntool script into eve COPY pure.py /home/eve # install pwntools RUN apt install python3-pwntools -y # set users into pure-db RUN yes "password0" | pure-pw useradd bob -u bob -d /home/bob/home \ && yes "password1" | pure-pw useradd eve -u eve -d /home/eve/home \ && pure-pw mkdb EXPOSE 21 22 30000-30009 # run both services RUN echo '#!/bin/bash\n \ /usr/sbin/sshd -D &\n \ /usr/local/sbin/pure-ftpd -A -E -j -l puredb:/etc/pureftpd.pdb\n \ ' > /start.sh && chmod +x /start.sh CMD ["/start.sh"]