01. 실습 환경 구축
로컬에 취약 웹 애플리케이션을 띄워 실습 대상을 만든다. 외부에 노출하지 않는 것이 가장 중요한 원칙이다. (→ 00. 실습 원칙과 범위)
1. 실습 대상 비교
| 환경 | 성격 | 추천 용도 |
|---|---|---|
| OWASP Juice Shop | 현대적 SPA, 다양한 난이도의 챌린지 | 전반적 실습, XSS·인젝션 등 |
| DVWA (Damn Vulnerable Web App) | 전통적 PHP, 난이도(Low~Impossible) 조절 | 취약/안전 코드 비교 학습 |
| WebGoat | 가이드형 레슨 | 개념 단계별 학습 |
이 시리즈는 Juice Shop(현대적 예시)과 DVWA(난이도별 코드 비교)를 함께 사용한다.
2. 사전 준비: Docker
가장 간단한 방법은 Docker다. 설치 명령 한 줄로 환경이 뜨고, 컨테이너를 지우면 흔적 없이 정리된다.
- Windows: Docker Desktop 설치 (docker.com)
- 설치 후 확인
docker --version
3. OWASP Juice Shop 실행
docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop
브라우저에서 http://localhost:3000 접속.
:::danger 포트 바인딩에 주의
-p 127.0.0.1:3000:3000 처럼 127.0.0.1 을 반드시 붙인다.
-p 3000:3000 으로만 하면 같은 네트워크의 다른 기기에서도 접근 가능해져, 취약 환경이 외부에 노출된다.
127.0.0.1 로 바인딩하면 내 PC에서만 접속된다.
:::
4. DVWA 실행
docker run --rm -p 127.0.0.1:8080:80 vulnerables/web-dvwa
http://localhost:8080접속- 초기 로그인: 화면 안내에 따라 DB 초기화(Create / Reset Database) 후 기본 계정으로 로그인
- DVWA Security 메뉴에서 난이도(Low / Medium / High / Impossible)를 조절할 수 있다. 이 난이도별 소스 코드 비교가 학습의 핵심이다.
5. 안전 체크리스트
실습을 시작하기 전에 확인한다.
- 포트가
127.0.0.1에 바인딩되어 있는가 (외부 비노출) - 회사·공용 네트워크가 아닌, 통제된 개인 환경인가
- 실습이 끝나면 컨테이너를 정리하는가 (
--rm사용 시 자동) - 캡처·로그를 공개하기 전에 민감정보를 제거했는가
6. AI를 쓰는 지점
이 단계에서 AI(Claude)는 이렇게 활용한다.
docker run명령의 각 옵션이 무슨 의미인지 설명 요청- 컨테이너가 안 뜰 때 에러 메시지 해석
- "이 포트 바인딩이 외부에 노출되는 설정인지" 검토 요청
팁
환경 구축 단계부터 AI에게 "이 설정이 안전한지" 를 먼저 묻는 습관을 들이면, 실습 내내 안전 범위를 벗어나지 않게 된다.