1. 서론.
지금까지 kali linux가 멋져보여 이를 사용해 모든 pwnable 문제를 풀고 있었다.
하지만 가면 갈수록 libc version matching 및 분석의 어려움을 느낌과 동시에
최근 ctf 트렌드 상 docker 사용이 필수적인 것 같아 이에 대해서 조금 알아보았고,
별도 linux 환경을 마련하는 것보다 훨씬 효율적이라고 판단하여 이를 사용하기로 했다.
다만 여러 문서를 참고해봐도 구축 방법에 대한 아주 상세한 설명이 대부분이지 단순히 사용하는 방법에 대해서는 별로 설명이 없어서 글을 쓰게 되었다.
docker는 간단히 설명하자면 가상 os의 일종이며, 한번만 구축하고나면 쉽고, 빠르고, 간편하게 여러 os를 사용할 수 있게 된다.
2. 사용 방법
2.1 설치
결국 한국인은 윈도우를 쓸 수 밖에 없는 환경이다.
아래 사이트에서 windows용 docker를 받아 설치하자.
설치 후 재부팅 및 바탕화면의 docker desktop을 실행하면 바로 실행된다.
만약 WSL 2가 설치되어있지 않다면 이를 설치하라는 메시지가 뜨니 설치해주자.
추가로, 설치했음에도 불구하고 아래와 같은 메시지와 함께 실행이 안된다면 wsl 버전이 낮기 때문이다.
터미널을 관리자 권한으로 실행하여
wsl --update
를 해준 뒤 재부팅을 해주자.
그럼 잘 실행될 것이다.
2.2 컨테이너 생성
docker에서는 각각의 os를 컨테이너라는 이름으로 관리한다.
이름과 같이 컨테이너에 os를 넣어뒀다가 필요하면 꺼내 쓴다는 의미이다.
보통 ctf에서는 모든 설정이 명기된 dockerfile을 주기 때문에 이를 사용해서 컨테이너를 구성하면 된다.
구성 방법은 윈도우 터미널을 열어 해당 폴더로 이동한 다음 아래와 같이 실행하면 된다.
docker build -t 이름:태그 -f dockerfile명 .
주의할 점은 끝에 .을 꼭 찍어야 한다는 것.
참고로 태그는 꼭 쓸 필요는 없고 아래와 같이 쓸 수도 있다.
docker build -t 이름 -f dockerfile명 .
마지막 . 은 필수이다.
쓰고나면 아래와 같이 dockerfile 내 설정대로 설치하기 시작하며,
설치가 완료된 이후에는 docker desktop 프로그램에서 그 내역을 볼 수 있다.
아래는 name만 설정한 경우(10.04), name 및 tag 둘 다 설정한 경우(pwn:18.04)이다.
2.3 컨테이너 실행
컨테이너 생성은 말 그대로 생성만 해주는 것이라 실행해줘야 한다.
생성된 이미지에 마우스를 올리면 run 메뉴가 나오고 새로 뜨는 팝업창에서 run 버튼을 눌리면 실행된다.
실행되고 있는 컨테이너는 containers 메뉴에서 확인할 수 있다.
2.4 컨테이너 접속
docker 프로그램 안에서도 터미널을 열어 접속이 가능하지만
여러개의 터미널을 열 수 없다는 단점이 있다.
그래서 아래와 같이 윈도우 터미널에서 접속하며 셀을 실행시켜주면 된다.
3. 마무리
간단하게 docker 사용법에 대해서 알아보았다.
물론 문제를 풀 때 주어진 docker를 통해 환경을 구축하는 것도 좋지만,
대부분 libc 버전만 알면 문제 해결이 가능하기에
굳이 새로 컨테이너를 만들 필요 없이 os 버전만 맞춰서 문제를 풀어도 충분할 것 같다.
* 추가
* docker <-> host 파일 전송
https://wyv3rn.tistory.com/149
'Tips & theory' 카테고리의 다른 글
assembly code 기초 (0) | 2022.09.08 |
---|---|
docker <-> host 파일 전송 (0) | 2022.09.06 |
Return to csu (0) | 2022.09.05 |
one gadget 사용법 (0) | 2022.09.05 |
함수 호출 규약. (0) | 2022.09.05 |