18th 2018 PoC 해킹캠프 cntdic #구축편
시작하기 전에..
18 회 해킹캠프가 2일 남은 오늘 글을 쓰고 있습니다! (물론 이 글은 해킹캠프가 끝난 이후에 올라갑니다)
이번에 내부 CTF 양산형 포너블 문제로 cntdic
이라는 문제를 냈는데요, Countries Dictionary
의 줄인말로 나라를 관리할 수 있는 사전을 구현한 문제고, 100% 단일 스레드 스택 기반 트릭을 의도하고 냈으며, 구조체를 사용한 간단한 포너블 문제입니다.
해킹캠프가 얼마 남지 않았으니 이제 슬슬 구축해야겠다.. 라고 생각했고, 내 서버도 있겠다 하고 제 서버에 구축을 하기로 결정했습니다.
저번 CTF 때 구축시 쌩으로 호스트에 계정을 만들고 올렸었는데, 그 때는 서버가 거의 아무 용도로 사용하지 않아서 별로 신경을 안썼었습니다.
그러나 이번에는 git 서비스, 블로그, 메일 서비스 을 구축함으로써, 혹시 모를 문제가 생길 가능성이 있기 때문에
저보다 잘하는 분들이 많이 오시니까 절대로 털리면 안되잖아요?
그래서 Docker
를 사용하고, 배울 겸 구축 여행기를 올리고, 올리는 김에 별거 없지만 풀이도 올리려고 합니다.
구축 환경
Server Region : Tokyo
Server OS : Ubuntu 18.04 64 bit
Server UFW Status : Inactive
Binary : ELF 32-bit, for GNU/Linux 2.6.32, stripped
구축 시작!
모든 구축 과정은 root
계정으로 로그인 하여 진행하였습니다.
먼저 xinetd 와 32비트 바이너리를 64비트에서 실행하기 위해 gcc-multilib 을 설치하겠습니다.
apt install gcc-multilib xinetd
32 비트 바이너리가 잘 실행이 되는지 확인해보겠습니다.
바이너리가 잘 동작하는 것은 확인 했으니, 이제 폴더를 정리하겠습니다.
먼저 pwnable-cntdic 폴더를 만들어주고,
mkdir pwnable-cntdic && cd pwnable-cntdic
이제 그 안에 xinetd
파일에 이렇게 씁시다.
service cntdic
{
disable = no
type = UNLISTED
wait = no
server = /home/cntdic/cntdic
socket_type = stream
protocol = tcp
user = cntdic
port = 1800
flags = REUSE
}
그리고 home 폴더를 만들어 cntdic 바이너리와 플래그 파일을 넣어줍니다.
이제 본격적으로 도커를 설치하고 설정해보겠습니다
도커 설치는 다음 명령어를 통해 진행할 수 있습니다.
curl -sL https://get.docker.com/ | sh
도커가 설치되었는지 확인해보고,
docker version
도커 이미지 실행을 깔끔하고 편하게 위해서 Composer 도 설치해주고, 설치 확인까지 해보겠습니다.
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
다음은, docker-compose.yml
파일을 넣어줍시다. (cat > docker-compose.yml
등을 이용)
version: '2.4'
services:
cntdic:
build: ./
ports:
- "1800:1800"
그리고 마지막으로 Dockerfile 를 만들겠습니다.
FROM ubuntu:18.04
RUN apt update
RUN apt install xinetd -y
RUN apt install libc6-dev-i386 -y
RUN useradd -mU cntdic
COPY ./home /home/cntdic
COPY ./xinetd /etc/xinetd.d/cntdic
RUN chmod 750 /home/cntdic /home/cntdic/cntdic
RUN chmod 440 /home/cntdic/flag
RUN chown -R root:cntdic /home/cntdic
CMD ["/usr/sbin/xinetd","-dontfork"]
그 다음 docker-compose 로 실행시키겠습니다.
docker-compose up -d
이렇게 Creating pwnable-cntdic_cntdic ... done
가 뜨고 nc 연결이 가능해진 것을 확인할 수 있습니다.
실행중인 컨테이너를 확인해보면 또한 컨테이너가 잘 생성되었다는 것을 알 수 있습니다.
docker ps
그리고 이 컨테이너를 종료하고 싶다면
docker-compose down
이 명령어를 사용하시면 됩니다.
출처 및 라이센스
이 글의 일부 내용은 KSHMK 형님의 블로그에서 가져왔으며, (링크) 라이센스의 사용 조건에 따라 이 글의 라이센스 또한 CC BY-NC-SA 4.0 을 따릅니다.