18th 2018 PoC 해킹캠프 cntdic #구축편

Research Sep 02, 2018

시작하기 전에..

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

apt-install-1

32 비트 바이너리가 잘 실행이 되는지 확인해보겠습니다.

run_check

바이너리가 잘 동작하는 것은 확인 했으니, 이제 폴더를 정리하겠습니다.

먼저 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-install

도커가 설치되었는지 확인해보고,

docker version

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

다음은, 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

docker-compose-up-1

이렇게 Creating pwnable-cntdic_cntdic ... done 가 뜨고 nc 연결이 가능해진 것을 확인할 수 있습니다.

실행중인 컨테이너를 확인해보면 또한 컨테이너가 잘 생성되었다는 것을 알 수 있습니다.

docker ps

docker-final-ps

그리고 이 컨테이너를 종료하고 싶다면

docker-compose down

docker-compose-down

이 명령어를 사용하시면 됩니다.

출처 및 라이센스

이 글의 일부 내용은 KSHMK 님의 블로그에서 가져왔으며, (링크) 라이센스의 사용 조건에 따라 이 글의 라이센스 또한 CC BY-NC-SA 4.0 을 따릅니다.

Tags

Sunghun Kim

Sunghun Kim (a.k.a. SHGroup, KSHGroup)

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.