개념 사전 · 프로그램

WebGoat

OWASP WebGoat

웹 애플리케이션의 취약점이 생기는 이유를 과제와 함께 배우는 OWASP의 교육용 프로그램이다. Java 기반 애플리케이션에 의도적인 취약점을 넣어 원인 설명, 실습, 방어 방법을 연결한다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 인증·접근 통제·입력 처리 같은 문제를 개별 수업으로 나누어 배운다.
  • 요청이 서버에서 처리되는 위치와 를 관찰한다.
  • 과제 결과와 방어 방법을 함께 기록해 취약점의 원인을 설명하는 연습에 사용한다.

02어떤 순서로 동작하나

  1. 학습 환경 준비

    로컬 또는 승인된 격리 실습망에서 실행하고 주소·포트·버전을 기록한다. 실습 사용자는 교육용 계정과 가상 데이터를 사용한다.

  2. 과제와 전제 확인

    선택한 수업이 다루는 입력·사용자 권한·예상 동작을 읽고 정상 요청을 먼저 확인한다.

  3. 요청과 응답 관찰

    브라우저나 실습용 에서 요청의 매개변수, 쿠키, 응답 코드와 본문을 비교한다. 같은 입력이 어느 서버 처리로 이어지는지 추적한다.

  4. 결과와 원인 연결

    과제의 성공 표시만 기록하지 않고 입력 검증, , 출력 처리 중 어느 경계에서 문제가 발생했는지 설명한다.

  5. 방어와

    권한 검사·매개변수 바인딩·상황에 맞는 출력 인코딩 등 해당 문제의 방어책을 연결한다. 정상 기능이 유지되는지와 같은 문제가 재현되는지를 별도로 판정한다.

03먼저 알아둘 용어와 구성요소

일부 수업에 필요한 보조 웹 애플리케이션이다. 실습에서 외부 서비스 역할을 맡으며, 모든 경우에 악성코드 명령제어 서버라는 뜻은 아니다.
특정 취약점의 조건과 결과를 확인하도록 만든 학습 단위다. 과제 통과가 전체 시스템의 안전성을 입증하지는 않는다.
데이터나 권한을 그대로 신뢰할 수 없는 영역 사이의 경계다. 브라우저 입력이 서버 코드로 들어오는 지점이 대표적이다.
인증된 사용자가 특정 객체나 기능을 사용할 권한이 있는지 확인하는 절차다.
수정 후 같은 조건으로 다시 확인해 문제가 해결됐는지와 정상 기능이 유지되는지 판단하는 작업이다.
클라이언트와 서버 사이에서 요청과 응답을 중계하는 구성요소다. 실습에서는 통신을 관찰하는 도구로 쓸 수 있다.
LEARN THROUGH PRACTICE

브라우저 입력 제한을 서버 검증과 비교하기

maxlength·readonly·선택 버튼이 보안 경계가 아님을 확인하고 서버의 허용 조건을 정의한다.

실습 구성과 전제

  • 의 Bypass front-end restrictions 과제를 자기 격리 환경에서 연다.
  • 수정 대상은 교육용 폼으로 한정하고 운영 페이지의 권한을 우회하지 않는다.
  1. 브라우저가 제한하는 항목을 목록화한다

    • 선택지·라디오 버튼·체크박스·길이 제한·readonly는 입력 편의를 위한 클라이언트 조건이다. 서버는 이 조건이 지켜졌다고 전제할 수 없다.
    • 정상 요청 하나를 저장하고 각 필드의 이름·자료형·허용 값 집합을 기록한다.
    브라우저 입력 제약과 요청 변조 · Client Side원본 크기로 보기 ↗
    • 화면에 두 선택지·라디오·체크박스·최대 5글자·Readonly input이 함께 제시된다.
    • 과제 설명은 사용자가 HTML을 바꿀 수 있음을 전제로 한다. 눈에 보이는 제한과 서버의 허용 조건을 나누는 문제다.
    확인 기준

    제한마다 서버가 다시 검사할 조건을 대응시킨다.

  2. DOM 변경이 요청 값에 미치는 영향을 본다

    • 개발자 도구에서 교육용 입력의 value·type을 살펴본다. DOM을 수정할 수 있다는 사실은 요청 값이 신뢰 불가능함을 보여 준다.
    • 서버는 UI 모양과 무관하게 필드 허용 목록, 길이, 객체 소유자·역할을 검사해야 한다.
    브라우저 입력 제약과 요청 변조 · Client Side원본 크기로 보기 ↗
    • input의 type·name·value·checked 속성이 표시되어 있다.
    • 같은 name에 서로 다른 값과 타입이 붙을 수 있는 구조가 보인다. 서버는 중복 파라미터 처리 규칙도 명확히 해야 한다.
    확인 기준

    DOM 변경 자체와 서버가 실제로 허용한 결과를 혼동하지 않는다.

  3. 정상·경계·거부 요청의 행렬을 만든다

    • 정상 선택 값, 허용되지 않은 값, 길이 초과를 각각 한 번씩 제출하고 상태 코드와 저장 결과를 확인한다.
    • 검사는 로그인된 주체와 대상 객체의 관계로 수행한다. 클라이언트가 보낸 사용자 ID를 권한의 근거로 믿지 않는다.
    확인 기준

    거부 응답 뒤 데이터가 바뀌지 않았는지까지 확인한다.

실습에서 확인한 동작 원리

  • 입력 UI를 바꿀 수 있는 것은 정상적인 클라이언트 특성이다.
  • 보안 판단은 서버의 검증··상태 변경 경계에 있어야 한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 가상 과제: A 소유 문서 10과 B 소유 문서 20이 있고 공유 권한은 없다고 정한다. 실제 특정 버전의 과제 응답을 실행한 기록은 아니다.
  • 정상 비교: A의 세션으로 문서 10을 읽는 요청은 허용하고 문서 20을 읽는 요청은 서버 에서 거부해야 한다. 로그인 성공이라는 조건은 두 요청에서 같다.
  • 실패 구분: 버튼만 숨기고 서버가 문서 20을 반환한다면 인증은 되었지만 객체 가 빠진 것이다. 거부 화면뿐 아니라 문서 본문과 저장 상태를 비교한다.
  • 수정 기준: 문서 ID만 조회하지 않고 검증된 사용자와 소유·공유 정책을 함께 적용한다. 정상 자기 문서 조회 유지와 다른 사용자 문서 거부를 각각 확인한다.

05혼동하기 쉬운 점과 확인 기준

  • 는 일부 과제의 외부 서비스 역할을 맡는 보조 앱이다. 파일·메일·요청 관찰 등 교육용 기능과 실제 악성코드의 C2 역할을 동일시하지 않는다.
  • 의도적으로 취약한 실습 프로그램은 공개 노트 사이트의 배포 파일에 포함하지 않는다.
  • 특정 수업의 완료나 자동 판정만으로 전체를 수행했다고 주장하지 않는다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

READ · OBSERVE · CONNECT

함께 보는 학습 자료

아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.

실습 가이드

OWASP WebGoat: 공식 격리 학습 환경

공식 README에서 · 역할과 로컬 실행 경계를 읽고 교육 과제를 선택하는 출발점이다.

읽으면서 확인할 것
  • 설명·실습·완화책을 잇는 수업 구성
  • 와 의 서로 다른 역할
  • localhost 바인딩과 외부 노출 방지 조건

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.