WebGoat
OWASP WebGoat
웹 애플리케이션의 취약점이 생기는 이유를 과제와 함께 배우는 OWASP의 교육용 프로그램이다. Java 기반 애플리케이션에 의도적인 취약점을 넣어 원인 설명, 실습, 방어 방법을 연결한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 인증·접근 통제·입력 처리 같은 문제를 개별 수업으로 나누어 배운다.
- 요청이 서버에서 처리되는 위치와 를 관찰한다.
- 과제 결과와 방어 방법을 함께 기록해 취약점의 원인을 설명하는 연습에 사용한다.
02어떤 순서로 동작하나
- 학습 환경 준비
로컬 또는 승인된 격리 실습망에서 실행하고 주소·포트·버전을 기록한다. 실습 사용자는 교육용 계정과 가상 데이터를 사용한다.
- 과제와 전제 확인
선택한 수업이 다루는 입력·사용자 권한·예상 동작을 읽고 정상 요청을 먼저 확인한다.
- 요청과 응답 관찰
브라우저나 실습용 에서 요청의 매개변수, 쿠키, 응답 코드와 본문을 비교한다. 같은 입력이 어느 서버 처리로 이어지는지 추적한다.
- 결과와 원인 연결
과제의 성공 표시만 기록하지 않고 입력 검증, , 출력 처리 중 어느 경계에서 문제가 발생했는지 설명한다.
- 방어와
권한 검사·매개변수 바인딩·상황에 맞는 출력 인코딩 등 해당 문제의 방어책을 연결한다. 정상 기능이 유지되는지와 같은 문제가 재현되는지를 별도로 판정한다.
03먼저 알아둘 용어와 구성요소
- 일부 수업에 필요한 보조 웹 애플리케이션이다. 실습에서 외부 서비스 역할을 맡으며, 모든 경우에 악성코드 명령제어 서버라는 뜻은 아니다.
- 특정 취약점의 조건과 결과를 확인하도록 만든 학습 단위다. 과제 통과가 전체 시스템의 안전성을 입증하지는 않는다.
- 데이터나 권한을 그대로 신뢰할 수 없는 영역 사이의 경계다. 브라우저 입력이 서버 코드로 들어오는 지점이 대표적이다.
- 인증된 사용자가 특정 객체나 기능을 사용할 권한이 있는지 확인하는 절차다.
- 수정 후 같은 조건으로 다시 확인해 문제가 해결됐는지와 정상 기능이 유지되는지 판단하는 작업이다.
- 클라이언트와 서버 사이에서 요청과 응답을 중계하는 구성요소다. 실습에서는 통신을 관찰하는 도구로 쓸 수 있다.
브라우저 입력 제한을 서버 검증과 비교하기
maxlength·readonly·선택 버튼이 보안 경계가 아님을 확인하고 서버의 허용 조건을 정의한다.
실습 구성과 전제
- 의 Bypass front-end restrictions 과제를 자기 격리 환경에서 연다.
- 수정 대상은 교육용 폼으로 한정하고 운영 페이지의 권한을 우회하지 않는다.
브라우저가 제한하는 항목을 목록화한다
- 선택지·라디오 버튼·체크박스·길이 제한·readonly는 입력 편의를 위한 클라이언트 조건이다. 서버는 이 조건이 지켜졌다고 전제할 수 없다.
- 정상 요청 하나를 저장하고 각 필드의 이름·자료형·허용 값 집합을 기록한다.
원본 크기로 보기 ↗- 화면에 두 선택지·라디오·체크박스·최대 5글자·Readonly input이 함께 제시된다.
- 과제 설명은 사용자가 HTML을 바꿀 수 있음을 전제로 한다. 눈에 보이는 제한과 서버의 허용 조건을 나누는 문제다.
확인 기준제한마다 서버가 다시 검사할 조건을 대응시킨다.
DOM 변경이 요청 값에 미치는 영향을 본다
- 개발자 도구에서 교육용 입력의 value·type을 살펴본다. DOM을 수정할 수 있다는 사실은 요청 값이 신뢰 불가능함을 보여 준다.
- 서버는 UI 모양과 무관하게 필드 허용 목록, 길이, 객체 소유자·역할을 검사해야 한다.
원본 크기로 보기 ↗- input의 type·name·value·checked 속성이 표시되어 있다.
- 같은 name에 서로 다른 값과 타입이 붙을 수 있는 구조가 보인다. 서버는 중복 파라미터 처리 규칙도 명확히 해야 한다.
확인 기준DOM 변경 자체와 서버가 실제로 허용한 결과를 혼동하지 않는다.
정상·경계·거부 요청의 행렬을 만든다
- 정상 선택 값, 허용되지 않은 값, 길이 초과를 각각 한 번씩 제출하고 상태 코드와 저장 결과를 확인한다.
- 검사는 로그인된 주체와 대상 객체의 관계로 수행한다. 클라이언트가 보낸 사용자 ID를 권한의 근거로 믿지 않는다.
확인 기준거부 응답 뒤 데이터가 바뀌지 않았는지까지 확인한다.
실습에서 확인한 동작 원리
- 입력 UI를 바꿀 수 있는 것은 정상적인 클라이언트 특성이다.
- 보안 판단은 서버의 검증··상태 변경 경계에 있어야 한다.
동작·명령 참고 문서
04예제로 따라가기
- 가상 과제: A 소유 문서 10과 B 소유 문서 20이 있고 공유 권한은 없다고 정한다. 실제 특정 버전의 과제 응답을 실행한 기록은 아니다.
- 정상 비교: A의 세션으로 문서 10을 읽는 요청은 허용하고 문서 20을 읽는 요청은 서버 에서 거부해야 한다. 로그인 성공이라는 조건은 두 요청에서 같다.
- 실패 구분: 버튼만 숨기고 서버가 문서 20을 반환한다면 인증은 되었지만 객체 가 빠진 것이다. 거부 화면뿐 아니라 문서 본문과 저장 상태를 비교한다.
- 수정 기준: 문서 ID만 조회하지 않고 검증된 사용자와 소유·공유 정책을 함께 적용한다. 정상 자기 문서 조회 유지와 다른 사용자 문서 거부를 각각 확인한다.
05혼동하기 쉬운 점과 확인 기준
- 는 일부 과제의 외부 서비스 역할을 맡는 보조 앱이다. 파일·메일·요청 관찰 등 교육용 기능과 실제 악성코드의 C2 역할을 동일시하지 않는다.
- 의도적으로 취약한 실습 프로그램은 공개 노트 사이트의 배포 파일에 포함하지 않는다.
- 특정 수업의 완료나 자동 판정만으로 전체를 수행했다고 주장하지 않는다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
함께 보는 학습 자료
아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.
OWASP WebGoat: 공식 격리 학습 환경
공식 README에서 · 역할과 로컬 실행 경계를 읽고 교육 과제를 선택하는 출발점이다.
- 설명·실습·완화책을 잇는 수업 구성
- 와 의 서로 다른 역할
- localhost 바인딩과 외부 노출 방지 조건
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.