[docker] pwnable docker환경 세팅하기

sangjun

·

2021. 5. 4. 19:54

 

도커환경에서 리눅스 버전 세팅하기

매 번 vm으로 바이너리 받고 환경 세팅해주고, 호환성도 맞지 않아 디버깅도 잘 되지 않아

악순환이 번복되고 있었다.

그래서 해결책으로 vm snapshot까지 살 생각했었다. 이것을 대체할 수 있는 것이 도커환경에서 

리눅스 OS를 세팅하는 것이다.

 

즉, vi ,pwndbg, zsh쉘,one_gadget 등등 여러가지 환경을 가진 도커라는 거푸집을 가지고

매번 몇초안에 환경세팅을 찍어내는 것이 도커이다. 

 

도커환경을 세팅하기 위해서 Docker Desktop을 이용했다.

goddaehee.tistory.com/251

 

[Docker (1)] window10 Docker 설치하기(윈도우 10 도커 설치)

[Docker (1)] window10 Docker 설치하기(윈도우 10 도커 설치) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Window10 도커 설치 ] 입니다. : ) 도커 설치하기 ▶ 1. 도커란? 도커 설치와 관련된 포스팅 이기.

goddaehee.tistory.com

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. 도커를 나스에 세팅하고 외부에서도 쓸 수 있게 하는 법도 있는데 이것은 나중에 해볼 예정이다.

 

youngsouk-hack.tistory.com/73

 

ubuntu 16.04 18.04 도커 (ctf)

가상머신을 쓰게 되면 속도나 용량면에서 손실이 있기 때문에 도커를 활용하는 방법이 더 낫다고 판단하여 도커를 설치하게 되었다. 자세한 Dockerfile은 https://github.com/youngsouk/docker_ubuntu_16.04 https.

youngsouk-hack.tistory.com

aro7i.github.io/post/pwnckerfile-%EC%A0%9C%EC%9E%91-%EA%B3%BC%EC%A0%95/

 

Pwnckerfile 제작 과정 – ARO7I

Pwnckerfile 제작 과정Created: Aug 31, 2020 | Modified: Feb 19, 2021 제작 이유 꽤 오랜 기간 vm으로 공부했는데 불편한 점이 몇 가지 있었다. libc 버전에 따라 문제 푸는 방식이 조금씩 변한다. 그래서 여러 vm

aro7i.github.io

ikcoo.tistory.com/66

도커에서도 리눅스 깊은 설정들 다룰 쑤 있게 하기

 

23. Privileged Container

Privileged Container Privileged Container 란? 일반적으로 생성되는 Container는 Host에서 독립된 Linux namespace 영역을 가지고 있어서 Host 시스템의 주요자원에 접근할 수 있는 권한이 없음. 하지만 다양한..

ikcoo.tistory.com