먼저 글을 시작하기에 앞서 Docker Desktop은 설치되어 있으면 안 된다. 삭제한 후 진행하길 바란다.

 

WSL2에서 Docker가 돌아가고 있다면 컨테이너 내의 프로세스를 볼 수 있고 GDB attach도 가능하다
(자세한 이유는 잘 모르겠지만 아마 같은 커널과 PID 네임스페이스 계층 때문인 듯하다).

 

WSL2에서 Docker를 설치하는 방법은 쉘에서 다음을 실행하면 된다.

curl -sSL get.docker.com | sh

 

위 명령어를 입력 후에 20초를 기다려주면 알아서 설치된다.

대충 아무 워게임 문제를 가져온후에 

docker build -t kidheap .
docker run -d -p 8080:8080 --name=kidheap kidheap:latest

 

위 명령어로 도커 컨테이너를 돌려준다.

nc로 컨테이너에 문제에 접근하고 ps -ef명령어로 돌아가는 프로세스들을 살펴보면 컨테이너 내에 socat 이랑./prob 바이너리가 돌아가는 게 보인다. pgrep으로도 잡을 수 있고 물론 아래 명령어로 GDB 어태치도 가능하다(이건 sudo 권한 필요) 

 

FISH 쉘 전용

gdb -pid=(pgrep -n prob) -ex "file ./deploy/prob"

BASH 쉘 전용

gdb -pid=$(pgrep -n prob) -ex "file ./deploy/prob"

잘 어태치된것을 볼 수 있다. 디버깅도 잘 되고 힙 관련 명령어들도 잘 먹는다.

이렇게 컨테이너내에 환경을 건드리지 않고 돌아가는 바이너리만 GDB어태치 해서 디버깅하는 방법을 알아보았다,

이 방법을 쓰면 힙/스택 같은 환경에 영향을 많이 받는 문제도 로되리안 없이 잘 풀 수 있다.

 

마지막으로 즐거운 포너블 되길 바란다.

 

 

 

Reference

https://netmarble.engineering/docker-on-wsl2-without-docker-desktop/

'Wargame' 카테고리의 다른 글

[pwnable.xyz] two targets  (1) 2025.02.04
[pwnable.xyz] xor  (0) 2025.02.04
[pwnable.xyz] note  (0) 2025.02.04
[pwnable.xyz] GrownUp  (0) 2025.02.04
[pwnable.xyz] misalignment  (0) 2025.02.04