먼저 글을 시작하기에 앞서 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 |