티스토리 뷰
728x90
반응형
단순하게 명령어를 입력받고 그 명령어 결과를 출력하는 코드를 main.py 로 만들었다고 가정하고, docker 파일 구성에 대해서 말씀드려보겠습니다.
참고용이며 이 틀을 기반으로 문제를 만드시면 되겠습니다.
반드시 socat을 이용하지 않더라도 xinetd, nc, socket programming 등을 이용해서 동일한 환경을 구축하실 수 있습니다.
main.py
#!/usr/bin/env python3
import subprocess
if __name__ == '__main__':
argument = input('Command: ')
try:
proc = subprocess.Popen(argument.split(' '),stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = proc.communicate()
print(out.decode('utf-8'))
except:
pass
input으로 사용자가 입력한 명령어를 입력받고, Popen 함수로 명령어 실행 결과를 가져와서 출력합니다.
Dockerfile
FROM ubuntu:22.04
RUN apt-get -y update --fix-missing
RUN apt-get -y upgrade
RUN apt-get -y install socat python3 python3-pip
RUN groupadd -r ctf && useradd -r -g ctf ctf
RUN chmod 1733 /tmp /var/tmp /dev/shm
# RUN pip3 install some_package_name
ADD . /home/ctf
WORKDIR /home/ctf
RUN echo "FLAG{FAKE_FLAG}" > flag.txt
RUN chmod 440 flag.txt
RUN chmod 550 main.py
RUN chown -R root:ctf /home/ctf
USER ctf
CMD socat TCP-L:9999,reuseaddr,fork EXEC:"./main.py"
socat을 이용해서 접속자 별로 main.py 파이썬 코드를 실행하도록 합니다.
docker-compose.yml
version: '3'
services:
ctf_chall01:
build: .
ulimits:
nproc: 65535
core: 0
ports:
- "10007:9999"
restart: unless-stopped
참고로 core: 0 은 core dump 파일을 만들지 않겠다는 의미입니다.
불필요한 덤프 파일을 만들어서 리소스를 소모하지 않게 방지합니다.
이외에도 다양한 설정값들이 있는데 아래 문서를 참고하시면 되겠습니다.
https://docs.docker.com/compose/compose-file/compose-file-v3/
728x90
반응형
'보안 > CTF' 카테고리의 다른 글
[SECCON] [misc] findflag Writeup(문제풀이) (0) | 2022.11.19 |
---|---|
[Fetch the Flag CTF] git-refs Writeup(문제풀이) (0) | 2022.11.11 |
[Fetch the Flag CTF] roadrunner Writeup(문제풀이) (0) | 2022.11.11 |
[HackTheBoo] [Web] Cursed Secret Party Writeup(문제풀이) (0) | 2022.10.28 |
[HackTheBoo] [Web] Juggling Facts Writeup(문제풀이) (0) | 2022.10.28 |
댓글