Security/시스템 해킹(PWN, System)

포너블을 위한 docker 구축하기

그믐​ 2022. 10. 19. 21:31
반응형

티스토리 에러로 글을 못 쓰던 3일간 포너블 환경 구축을 다시 진행했습니다.

 

기존에 

https://thfist-1071.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-10%EC%97%90%EC%84%9C-vm-%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%EB%A7%A5%EC%9C%BC%EB%A1%9C-%ED%8F%AC%EB%84%88%EB%B8%94-%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0?category=507402 

 

윈도우 10에서 vm 서버구축, 맥으로 포너블 환경 만들기

18일에 있던 2022 세종 핵테온 CTF를 마치고 다시 돌아와서 그 당시에 못 풀던 문제가 버전 문제라고 하여 여러 우분투 버전을 가지고 있어야겠다고 느꼈고 아니 나는 맥북으로 포너블을 못하는데

thfist-1071.tistory.com

서버를 구축해서 서버에서 직접적으로 vm을 돌리는데에는 문제가 있었습니다.

 

1. 왜인지 모를 이유로 20.04에서 ssh 사용이 막힘 -> 다시 구축하는데 시간이 오래 걸린다.

2. 서버 컴퓨터에서 vm을 모두 켜놓고 싶은데 램이 부족함.

 

3개의 vm만 켜둬도 메모리를 거의 100에 가깝게 쓰는 상태였습니다. (16GB 메모리였음에도)

그래서 remote desktop을 사용해서 vm을 켜고 끄고를 반복했는데 그 과정도 불편했습니다.

 

최근에 docker을 배워야 할 상황에 놓이기도 하고, 저번에 mac에 직접적으로 구축하려다 실패하면서(아키텍쳐 문제였습니다) 좀 알게되었고

 

docker로 서버를 구축해보자고 결심했습니다.

 

설계


필요한 vm을 두 개 까지 쓰는건 괜찮으니,

하나는 네트워크 프로젝트를 위해서 빼두고 하나는 우분투로 만들어서 우분투 내에 docker을 구축하고자 했습니다.

 

아무래도 우분투에서 docker에 익숙하다보니 그랬고, 그렇게 되면 네트워크 구조가 복잡해지는 것일테니

vm으로 사용하는 우분투를 NAT가 아닌 Bridged로 빼어서 직접 포트포워딩하려고 했습니다.

 

기존에 사용하던 노트북 포맷도 진행하고 chrome과 vm만 남아있도록 했습니다.

 

docker로 버전별로 구축할 때, vm의 드래그 앤 드롭을 통해 파일을 옮기는게 편리하기도 하고 그래서

 

-v 옴션으로 vm우분투의 binary라는 폴더와 docker 우분투의 binary폴더를 연결했습니다.

 

 

 

컴퓨터를 포맷중인 모습
22.04에서 설치되어있는 모습

 

 

문제점


여러 시행착오를 거쳐, 16.04는 거의 불가능해서 포기했었고

 

18.04, 20.04, 22.04 세 개의 버전을 완성했었습니다.

그러나 18.04에서 heap 관련 명령어만 입력하면 에러가 뜨길래 

 

하.. 드림핵 하려면 18.04를 포기할 순 없는데 라는 마음에

https://sangjun.xyz/56

 

[docker] pwnable docker환경 세팅하기

도커환경에서 리눅스 버전 세팅하기 매 번 vm으로 바이너리 받고 환경 세팅해주고, 호환성도 맞지 않아 디버깅도 잘 되지 않아 악순환이 번복되고 있었다. 그래서 해결책으로 vm snapshot까지 살 생

sangjun.xyz

 

참고했었던 sangjun님 블로그에 댓글을 남겼었습니다.

 

sangjun님이 https://github.com/n1net4il/pwn-docker/blob/main/18.04/Dockerfile

 

GitHub - n1net4il/pwn-docker

Contribute to n1net4il/pwn-docker development by creating an account on GitHub.

github.com

 

n1net4il님의 도커파일을 알려주셔서

 

보니까 dpkg..? 로 인한 파이썬..? 문제인거 같긴 한데 자세히는 모르겠습니다.

 

해당 도커파일을 허브에서 내려받고

제가 하려던 대로 수정해서 완성했습니다.

 

18.04, 16.04는 그렇게 만들게 되었답니다.

 

 

완성!


완성본 이미지는 docker hub에 올려두었습니다.

 

https://github.com/63um3um/pwn-ubuntu

 

GitHub - 63um3um/pwn-ubuntu: ssh Dockerfile for pwnable with pwndbg, seccomp-tools, one_gadget, ROPgadget...

ssh Dockerfile for pwnable with pwndbg, seccomp-tools, one_gadget, ROPgadget... - GitHub - 63um3um/pwn-ubuntu: ssh Dockerfile for pwnable with pwndbg, seccomp-tools, one_gadget, ROPgadget...

github.com

 

제가 만든 20.04, 22.04는 여기에 있고

 

docker run 명령어를 할 때

 

20.04, 22.04는

docker run -it --name [name] -p [포트포워딩]:22 -v "$(pwd)/binary":/root/binary 63um3um/pwn-ubuntu:20.04 usr/bin/zsh

 

이런 식으로 하면 되고 (세팅 후 ctrl+p, ctrl+q로 빠져나옴)

 

18.04, 16.04는

 

docker run -it --name [name] -p [포트포워딩]:22 -v "$(pwd)/binary":/root/binary/ 63um3um/pwn-ubuntu:18.04

 

이런 식으로 하시면 될 것 같습니다.

 

run을 하는 폴더 내에 binary라는 폴더가 있어야 마운트가 된답니다.

 

 

https://hub.docker.com/repository/docker/63um3um/pwn-ubuntu

 

Docker Hub

 

hub.docker.com

 

ssh 연결 시에는

 

service ssh start.. 이런걸 사용합니다.

 

순서

1. 이미지 다운로드

2. 컨테이너 생성(마운트, 포트 연결 등 작업)

3. 컨테이너 내에서 설정할거 설정하고 pwndbg 설치 등 작업(20.04, 22.04)

4. passwd로 root 비밀번호 설정하고 sshd_config에서 루트 접속 허용되었는지 확인

5. ssh 켜기

6. ctrl +p , ctrl+q로 빠져나오기 

7. 포트포워딩 하기

8. ssh 연결하기

 

 

 

메모리가 많이 줄었답니다.

 

..! 완성하니 뿌듯하네요.

반응형