[docker] pwnable docker환경 세팅하기
sangjun
·2021. 5. 4. 19:54
도커환경에서 리눅스 버전 세팅하기
매 번 vm으로 바이너리 받고 환경 세팅해주고, 호환성도 맞지 않아 디버깅도 잘 되지 않아
악순환이 번복되고 있었다.
그래서 해결책으로 vm snapshot까지 살 생각했었다. 이것을 대체할 수 있는 것이 도커환경에서
리눅스 OS를 세팅하는 것이다.
즉, vi ,pwndbg, zsh쉘,one_gadget 등등 여러가지 환경을 가진 도커라는 거푸집을 가지고
매번 몇초안에 환경세팅을 찍어내는 것이 도커이다.
도커환경을 세팅하기 위해서 Docker Desktop을 이용했다.
Dockerfile에는 아래 소스코드를 복붙하면 된다.
1. 위의 포스팅 내용대로 따라 한 후에 cmd창을 킨다.
2. docker build -t ubuntu18:ctf -< Dockerfile
3. docker images
4. docker run -it -d --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --name [생성할 container 이름] [images ID] /bin/zsh
5. docker run -it -d --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v CTF:/sharing --name [생성할 container 이름] [images ID] /bin/zsh
(도커 마운트를 위한 컨테이너 생성)
5. 다시 cmd창에서 docker ps -a로 컨테이너 ID를 확인한다.
6. docker exec -it containerID /bin/zsh
도커 그는 지금까지 호환성 문제 때문에 고생했던 나에 대한 선물...
어떻게 이렇게 도커 이미지를 구현했냐고 물어볼 수 있다. 바로 Dockerfile을 만들어 이미지를 빌드하면 된다.
아래는 도커파일 소스코드이다.
우분투 18.04
FROM ubuntu:18.04
MAINTAINER Psj0221 <best_collin@naver.com>
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ Asia/Seoul
ENV PYTHONIOENCODING UTF-8
ENV LC_CTYPE C.UTF-8
WORKDIR /root
RUN apt-get update && apt-get install -y netcat
RUN apt update
RUN apt install curl git wget file zsh sudo vim libssl-dev libffi-dev build-essential libssl-dev libc6-i386 libc6-dbg gcc-multilib make gcc gdb -y
RUN apt install python python-pip git curl wget vim zsh gdb python3 python3-pip -y
RUN dpkg --add-architecture i386 &&\
apt-get update
RUN apt-get install python3-dev ruby binutils-multiarch -y
RUN apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 ruby-full python-dev python-setuptools python-capstone socat -y
RUN gem install one_gadget seccomp-tools
RUN python3 -m pip install --upgrade pip
RUN pip3 install unicorn
RUN pip3 install keystone-engine
RUN pip3 install ropgadget
RUN pip3 install pwntools
RUN wget -O /root/.gdbinit-gef.py -q https://github.com/hugsy/gef/raw/master/gef.py
RUN echo source /root/.gdbinit-gef.py >> ~/.gdbinit
RUN wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh || true
RUN mkdir -p "$HOME/.zsh"
RUN git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure"
RUN echo "fpath+=("$HOME/.zsh/pure")\nautoload -U promptinit; promptinit\nprompt pure" >> ~/.zshrc
RUN git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
RUN echo "source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
RUN git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
RUN echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc
RUN echo "ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=111'" >> ~/.zshrc
RUN echo "syntax on\\nfiletype indent plugin on\\nlet python_version_2=1\\nlet python_highlight_all=1\\nset tabstop=8\\nset softtabstop=4\\nset autoindent\nset nu">>~/.vimrc
우분투 16.04
FROM ubuntu:16.04
MAINTAINER Psj0221 <best_collin@naver.com>
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ Asia/Seoul
ENV PYTHONIOENCODING UTF-8
ENV LC_CTYPE C.UTF-8
WORKDIR /root
RUN apt update && apt install -y netcat
RUN apt install vim git gcc ssh curl wget gdb sudo zsh python3 python3-dev python3-pip libffi-dev build-essential libssl-dev libc6-i386 libc6-dbg gcc-multilib make -y
RUN dpkg --add-architecture i386
RUN apt update
RUN apt install libc6:i386 -y
RUN pip3 install unicorn
RUN pip3 install keystone-engine
RUN pip3 install -U pip==20.3.4
RUN pip3 install -U pwntools
RUN pip3 install capstone ropper
RUN pip3 install ropgadget
RUN apt install libcapstone-dev -y
RUN git clone https://github.com/hugsy/gef ./gef
RUN echo source ~/gef/gef.py >> ~/.gdbinit
RUN apt install ruby-full -y
RUN apt install ruby-dev -y
RUN gem install one_gadget -v 1.7.3
RUN wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh || true
RUN mkdir -p "$HOME/.zsh"
RUN git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure"
RUN echo "fpath+=("$HOME/.zsh/pure")\nautoload -U promptinit; promptinit\nprompt pure" >> ~/.zshrc
RUN git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
RUN echo "source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
RUN git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
RUN echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc
RUN echo "ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=111'" >> ~/.zshrc
RUN echo "syntax on\\nfiletype indent plugin on\\nlet python_version_2=1\\nlet python_highlight_all=1\\nset tabstop=8\\nset softtabstop=4\\nset autoindent\nset nu">>~/.vimrc
참고 및 힘들었던 점
1. 도커 파일 명령어 숙지하고 실제 써보는 것이 좀 힘들었다. 이게 바로바로 빌드 되면 상관없는데
빌드할 때 시간이 꽤 걸려서 이틀정도 걸렸다.
2. 우분투 16.04랑 18.04랑 pwntools one_gadget호환성 문제로 좀 우회해서 설치해야 한다.
--> 우분투 16.04는 one_gadget -v 1.7.3으로 설치 pwntools설치도 pip3로 해줬다.
3. Pwndbg를 쓰려고 하다가 시간을 많이 날려먹었다.
4. 도커를 나스에 세팅하고 외부에서도 쓸 수 있게 하는 법도 있는데 이것은 나중에 해볼 예정이다.
aro7i.github.io/post/pwnckerfile-%EC%A0%9C%EC%9E%91-%EA%B3%BC%EC%A0%95/
도커에서도 리눅스 깊은 설정들 다룰 쑤 있게 하기
'TOOLS & Error' 카테고리의 다른 글
[ Kernel ] Ubuntu Kernel 재설치 및 Default Kernel 변경하기 (1) | 2023.05.01 |
---|---|
가독성 UP vscode 변수, 전역변수별 색깔 변경하기 (0) | 2022.07.03 |