| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- randzzz
- OpenClaw
- ADsP교재
- Simple Crack Me
- 시나공ADsP
- HRRN
- ADsP합격
- OS
- 운영체제
- ADsP책추천
- rev-basic-3
- dreamhack
- 라운드로빈
- OWASP TOP 10
- Pacu
- 세그먼테이션
- rev-basic-4
- 교체 정책
- adsp독학
- ADsP시험
- user pool
- 26년 1회
- cloudgoat
- wargame
- Juice Shop
- id pool
- writeup
- 병행성
- AWS
- ADsP
- Today
- Total
chon
Webgoat 실습 환경 구축 본문
WebGoat란 무엇인가?

WebGoat는 OWASP에서 유지 관리하는 의도적으로 취약하게 설계된 Java Spring Boot 웹 애플리케이션이다. 보안 전문가와 개발자가 웹 애플리케이션의 취약점을 실제로 공격해 보고, 이를 어떻게 방어해야 하는지 실습을 통해 배울 수 있도록 만들어진 교육용 벤치마크 플랫폼이다.
WebGoat는 단순한 연습 도구를 넘어, 웹 보안의 전 영역을 아우르는 16개의 주요 취약점 카테고리를 제공한다.
| 취약점 모듈 명칭 | 핵심 실습 내용 | OWASP 2025 매핑 | |
| 1 | Access Control Flaws | 사용자 권한을 넘어서는 데이터나 페이지 접근 시도 | A01 (1위) |
| 2 | Parameter Tampering | URL 파라미터나 Form 데이터를 조작하여 로직 우회 | A01 (1위) |
| 3 | Insecure Configuration | 서버 및 프레임워크의 잘못된 설정으로 인한 취약점 | A02 (2위) |
| 4 | Insecure Storage | 암호화되지 않은 민감 정보의 물리적 저장 문제 | A04 (4위) |
| 5 | Insecure Communication | 네트워크 전송 시 데이터 암호화 미비 (SSL/TLS 등) | A04 (4위) |
| 6 | Injection Flaws | SQL, OS Command 등 악의적인 쿼리 주입 공격 | A05 (5위) |
| 7 | Cross-Site Scripting (XSS) | 사용자 브라우저 내에서 악성 스크립트 실행 | A05 (5위) |
| 8 | Authentication Flaws | 로그인 및 신원 확인 로직의 보안 결함 | A07 (7위) |
| 9 | Session Management Flaws | 세션 탈취, 고정 및 부적절한 세션 관리 | A07 (7위) |
| 10 | Malicious Execution | 서버 측에서의 악성 파일 업로드 및 실행 | A08 (8위) |
| 11 | Improper Error Handling | 시스템 에러를 통해 내부 정보를 과도하게 노출 | A10 (10위) |
| 12 | Concurrency | 다중 요청 처리 시 발생하는 논리적 오류 (Race Condition) | A10 (10위) |
| 13 | AJAX Security | 비동기 자바스크립트 통신(AJAX)의 보안 취약점 | 기술적 분류 |
| 14 | Web Services | API, SOAP, REST 등 웹 서비스 구조적 결함 | 기술적 분류 |
| 15 | Code Quality | 보안에 취약한 코드 작성 습관 및 논리적 버그 | 보안 코딩 |
| 16 | Denial of Service | 서버 자원 고갈을 통한 서비스 정상 작동 방해 | 가용성 침해 |
이 16가지 실습은 앞서 설명한 OWASP Top 10:2025의 각 항목과 유기적으로 연결되어 있어, 이론을 실무로 전환하는 가장 효과적인 방법이다.
[ WebGoat 실습 환경 구축 ]
- Docker를 이용한 설치
Docker Desktop을 이용하면 별도의 Java 설치 없이도 깔끔하게 환경을 구축할 수 있다. 여기서는 Ubuntu 컨테이너를 생성하여 직접 빌드하는 방식을 사용한다.
- 실행 명령어:
Windows Poweshell 관리자로 실행 후 다음 명령어를 입력하면 실습용 컨테이너가 실행된다.
docker run -it --name webgoat -p 8080:8080 -p 9090:9090 ubuntu - 옵션 설명:
- docker run : 컨테이나 실행 명령
- -it : 컨테이너 입력(i)과 터미널 접근(t) 활성화
- --name : 생성할 컨테이너의 이름 설정
- -p 8080:8080 : 웹 서비스 포트 연결
- -p 9090:9090 : WebWolf(실습 보조 도구) 포트 연결
- ubuntu : 컨테이너 실행에 사용하는 이미지
이어서 다음 명령어들을 실행한다.
# 패키지 업데이트 및 기본 도구 설치
apt update
apt install git vim
# JDK 17 설치
apt install -y openjdk-17-jdk
- WebGoat 및 환경 구성
WebGoat github 링크
GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application
WebGoat is a deliberately insecure application. Contribute to WebGoat/WebGoat development by creating an account on GitHub.
github.com

WebGoat github 주소를 복사하고 Docker 컨테이너에 주소를 붙여넣는다.
git clone -b v2023.3 https://github.com/WebGoat/WebGoat.git
-b는 V2023.3 버전을 다운로드하는 옵션이다.
다운로드 후 ls 명령으로 다운로드된 WebGoat 디렉터리를 확인할 수 있다. 아래의 명령으로 v2023.3 버전을 확인한다.
cd WebGoat
git describe
- webGoat와 WebWolf의 설정 파일 수정
각 properties 파일을 열어 webgoat.host와 webwolf.host 값을 수정한다.
vi src/main/resources/application-webgoat.properties

열린 파일에서 아래 부분을 수정하고 저장한다.
# 주석처리
#webgoat.host=${WEBGOAT_HOST:127.0.0.1}
# 추가
webgoat.host=0.0.0.0

가상 환경이나 컨테이너에서 돌아가는 WebGoat에 호스트 PC의 브라우저로 원활하게 접근하거나, 외부 실습 장치와 통신하기 위해 수행하는 필수 설정이다. 127.0.0.1은 컨테이너 내부 통신만 허용하지만, 0.0.0.0으로 변경하면 모든 인터페이스를 개방하여 호스트 PC(외부)에서의 접속을 허용하게 된다.
이서 WebWolf 설정 파일도 수정하기 위해 에디터를 실행한다.
vi src/main/resources/application-webwolf.properties
# 주석처리
#webgoat.host=${WEBGOAT_HOST:127.0.0.1}
# 추가
webgoat.host=0.0.0.0

설정이 완료되었다면 Maven을 통해 프로젝트를 빌드하고 실행한다.
./mvnw clean install
BUILD SUCCESS라는 문구가 보이면 빌드가 종료된 것이다.
./mvnw spring-boot:run
위 명령어로 빌드 된 WebGoat 프로젝트를 실행한다.
실행이 완료되면 웹 브라우저 주소창에 아래 주소를 입력하여 접속한다.
- WebGoat: http://localhost:8080/WebGoat
- WebWolf: http://localhost:9090/WebWolf
- WebGoat 계정 생성


WebGoat에 접속한 후 사용자 등록을 클릭하여 사용자명과 패스워드를 등록한다.

등록한 사용자명과 패스워드로 로그인하면 WebGoat 페이지를 만날 수 있다.
컨테이너 종료 시 exit 명령어를 사용하거나 Ctrl + d로 logout 하면 자동으로 컨테이너가 종료된다. docker ps 혹은 docker ps –a 명령으로 현재 실행 중인 컨테이너 목록을 확인할 수 있다. 이후 실습을 위해 재가동 시 Docker Desktop을 이용하거나 docker start webgoat를 입력해주면 된다.
'Web' 카테고리의 다른 글
| OWASP Top 10 2025 (0) | 2026.03.16 |
|---|