chon

Webgoat 실습 환경 구축 본문

Web

Webgoat 실습 환경 구축

chon29 2026. 3. 16. 22:35

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

vi 에디터 명령

열린 파일에서 아래 부분을 수정하고 저장한다.

 

# 주석처리
#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