본문 바로가기
카테고리 없음

WebGoat와 Docker를 이용한 웹 해킹 실습 #1 [실습 환경 구축]

by omini004 2025. 2. 27.

 

저는 개발자가 되는 것을 목표로 하고 있습니다. 하지만 개발을 하려면 보안이나 네트워크 등의 다양한 지식을 쌓는 것도 중요하다고 생각합니다. 그래서 오늘은 웹 해킹에 대해 공부해 보았습니다.

공부할 때는 권현준님의 『개발자를 위한 웹 해킹』을 참고하였습니다.

 

 

첫번째 포스팅은 실습 환경 구축에 대해 다뤄보겠습니다.

 

 

◾ 개념

 

WebGoat 란?

웹 애플리케이션에서 쉽게 발견되는 취약성을 테스트하도록 의도적으로 불안정하게 개발된 Java Spring Boot 프레임워크 기반의 웹 애플리케이션

 

👉 WebGoat를 사용하면 직접 웹 애플리케이션 개발 없이 공격을 수행해 볼 수 있다.

 

 

 

 

WebGoat를 PC에 바로 실행시켜도 되지만 실습 시 운영체제가 사용자 마다 다르기때문에 Docker을 사용해 Ubuntu가상 컨테이너를 생성해서 동작 시키려 합니다.

 

 

 

◾ 실습 프로그래밍 설치

 

Docker 다운

 

검색창에 Docker을 입력해 자신의 운영체제 맞는 것을 다운해준다.

 

 

 

 

Configuration 화면에서 화면과 같이 설정해서 Ok를 누른다.

 

 WSL(Windows Subsystem for Linux2) 체크 해제 하는 이유
윈도우 운영체제의 가상화 기능을 활용해 Linux를 사용하는데, 간혹 윈도우 버전이나 업데이트에 따라 설치가 안 되는 경우가 있다. 원활한 실습을 위해 WSL2를 사용하지 않는다.

 

 

Accept 클릭

 

 

Docker 다운 완료

 

 

실습용 컨테이너 생성

 

 

 PowerShell을 켜서 아래의 명령어를 입력해준다.

$ docker run -it --name webgoat -p 8080:8080 -p 9090:9090 ubuntu

 

 

docker run : 컨테이너 실행 명령 

-it : 컨테이너 입력설정 (-i) + 컨테이너의 현제 쉘에 접근 (-t) 의 옵션

--name : 생성할 컨테이너의 이름 설정 옵션

-p : 호스트 포트를 컨테이너 포트에 포트포워딩 시키는 옵션

ubuntu : 컨테이너 실행에 사용하는 이미지 (기본 설정이 완료된 컨테이너 백업 , 이미지 주소 명시하지 않으면 Docker 이미지 저장소에서 다운 됨)

 

👉 ubuntu 이미지를 기반으로 컨테이너를 하나 생성하고자 한다.

     이름은 webgoat고 호스트 PC의 8080포트와 9090포트를 각 컨테이너 내부의 8080 포트와 9090 포트로 포트포워딩 한다.

     또한 컨테이너 쉡에 접근해 명령어를 입력할 수 있는 상태로 실행한다.

 

 

 

WebGoat 설치 

 

 

 WebGoat의 소스코드를 다운하기 위해 검색창에 webGoat를 입력한뒤 아래의 Github 사이트에 접속한다.

 

 

 

 

main branch 는 업데이트가 활발이 진행되어 소스코드가 자주 변경 되기 때문에 

2023년도의 3월 버전의 소스코드로 실습한다.

아래의 main 버튼을 누른뒤 - Tag - v2023.3을 선택한다.

 

 

 

오른쪽의 초록색 버튼 Code를 누른뒤 Https의 주소를 복사한다.

clone을 하기 위해 필요한 URL이다.

 

 

 

아까 만들었던 컨테이너로 돌아와 

 

1.

$ apt update

 

를 통해 apt 패기지 매니저로 사용 가능한 패키지의 정보와 버전을 업데이트 한다.

 

$ apt update

 

 

2.

$ apt install git vim

을 통해 vim 에디터 패키지와 git패키지를 설치한다.

소스코드 수정과 clone을 위해 필요하다.

$ apt install git vim

 

 

 

3.

$ apt install -y openjdk-17-jdk

WebGoat를 빌드하고 실행하기 위해 JDK(java development kit)가 필요하다. 

openjdk로 무료 사용가능한 오픈소스이다. WebGoat는 JDK17 기반으로 개발 되었기 때문에 17버전을 다운한다.

 

$ apt install -y openjdk-17-jdk

 

 

 

4.

$ java -version

으로 잘 설치 되었는지 확인한다.

$ java -version
17버전으로 잘 설치된 모습

 

5.

webGoat 설치와 빌드를 위해 최상위 디렉토리가 아닌 root 계정의 홈 디렉터리로 이동해서 설치해 준다.

$ pwd
$ cd
$ pwd

 

$ pwd
$ cd
$ pwd
root 계정으로 이동한 모습

 

 

6.

$ git clone -b v2023.3 https://github.com/WebGoat/WebGoat.git

 

아까 다운받았던 주소를 clone 해준다.

-b 옵션은 특정 브랜치 또는 태그를 의미 하며 

v2023.3 태그에 해당하는 소스코드를 다운하겠다는 뜻이다.

 

$ git clone -b v2023.3 https://github.com/WebGoat/WebGoat.git

 

 

7. 

다운 후 WebGoat 디렉터리로 이동한다.

그리고 두번째 명령어를 통해 v2023.3이 잘 다운 받아졌는지 확인한다.

$ cd WebGoat
$ git describe

 

 

$ cd WebGoat
$ git describe
다운로드가 잘 된 모습

 

 

8. 

WebGoat와 WebWolf의 설정 파일을 수정하기 위해 아래의 명령어를 입력한다.

$ vi src/main/resources/application-webgoat.properties

 

$ vi src/main/resources/application-webgoat.properties

 

입력하면 이런 화면이 보이게 되는데 이제 파일을 수정할 것 이다.

기존의 host를 주석처리하고 아래 새로운 host를 작성한다.

#webgoat.host =${WEBGOAT_HOST:127.0.0.1} 
webgoat.host=0.0.0.0

 

WebGoat를 127.0.0.1 localhost 에서만 접근 가능하도록 만드는 설정이다.
우리의 실습환경은 컨테이너 내부이고 호스트 PC는 브라우저를 통해 WebGoat에 접근하기 때문에 설정을 수정하지 않고 빌드해 실행 하면 호스트 PC에서 접속이 불가한 상황이 발생하기 때문에 0.0.0.0으로 수정해 호스트 PC에서 접근이 가능하도록 한다.

 

vim 수정을 위해 i 를 누르면 아래에 Insert로 바뀐 모습을 볼 수 있을 것이다. 그렇다면 이제 수정이 가능하다.

수정을 완료 했다면, 저장을 위해 ESC를 누른뒤 :wq를 입력한다.

 

 

이어서 Webwolf 파일도 수정을 위해 위와같이 해준다.

$ vi src/main/resources/application-webwolf.properties

 



 

 

 

 

9.

수정을 완료했다면, WebGoat를 빌드하고 실행한다.

WebGoat는 maven을 사용해 개발된 프로젝트인데 maven 설치 없이 mvnw(maven wrapper)을 사용해 실행가능하다.

 

$ ./mvnw clean install

 

webGoat 빌드
webGoat 빌드

 

 

빌드 성공

 

 

 

10.

빌드 된 WebGoat 프로젝트를 아래의 명령어로 실행 해준다.

$ ./mvnw spring-boot:run

 

 

webGoat 실행성공

 

 

WebGoat 접속

 

 

아래의 주소로 접속하면 페이지가 뜨게 됩니다.

http://localhost:8080/WebGoat/login

 

 

http://localhost:9090

을 입력해 WebWolf도 잘 되는지 확인한다.

 

 

 

다음으로 WebGoat에서 회원가입을 해주면 실습환경 구축이 완료된다.

 

실습 환경 구축 성공

 

 

 

 

 

 

참고

 

실습이 끝날 때 마다 실행한 컨테이너는 불필요한 리소스를 낭비하지 않게 하기 위해 종료해주는 것이 좋다.

컨테이너 종료는 exit 명령어를 입력해 종료하면 된다.

 

다시 컨테이너를 가동해야한다면 2가지 방법으로 실행 시킬 수 있다.

 

첫번째는 명령어

두번째는 Docker Desktop을 이용하는 방법이다.

 

 

1. 명령어로 실행

 

어떤 컨테이너를 가동할지 컨테이너 리스트를 확인해야한다.

$ docker ps  #컨테이너 리스트 불러오기
$ docker ps -a  #종료된 컨테이너를 포함한 모든 컨테이너 리스트 정보

 

정보를 확인한 뒤 재가동하고자 하는 컨테이너를 선택하면 된다.

container ID와 Name을 이용해 원하는 컨테이너를 실행시켜 준다.

$ docker start webgoat   # 실습용 컨테이너 가동
$ docker ps   # 컨테이너 가동 확인

 

 

 

2. Docker Desktop 로 실행

 

 

실행시키고 싶은 컨테이너를 Actions 버튼으로 실행시킨다.