개념 사전 · 프로그램
bWAPP
a buggy web application
와 로 만든 의도적으로 취약한 웹 애플리케이션이다. 다양한 웹 보안 문제를 선택하여 입력 처리·인증·세션·권한 검사의 실패 원인을 배우는 교육용 대상이다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 여러 웹 취약점 사례를 분리된 과제로 실습한다.
- 브라우저 요청과 애플리케이션 처리, 서버 설정의 상호작용을 살핀다.
- 가 미리 설치된 을 사용해 실습 환경을 구성할 수도 있다.
02어떤 순서로 동작하나
- 애플리케이션과 구분
는 웹 애플리케이션이고 는 이를 미리 설치한 배포본이다. 선택한 이미지와 프로그램 버전을 기록한다.
- 격리와 복구 준비
실습망의 접근 범위를 정하고 가상 데이터를 준비한다. 반복 실습에 사용할 이나 초기 상태를 확보한다.
- 과제 조건 확인
선택한 취약점의 입력 위치, 보안 수준, 로그인 상태와 정상 요청을 기록한다.
- 결과와 처리 위치 비교
응답·애플리케이션 코드·로그를 대조해 입력이 어느 처리 단계에 영향을 주었는지 확인한다.
- 방어 원리로 정리
실습에서 관측한 결과를 원인·영향·방어·재검증 조건으로 나누어 설명한다. 과거 구성의 결과를 현재 제품의 기본 동작으로 일반화하지 않는다.
03먼저 알아둘 용어와 구성요소
- 와 실습 구성 요소를 미리 설치해 배포하는 이다. 프로그램 자체와 동일한 개념은 아니다.
- 의 특정 시점 상태를 기록해 실습을 되돌리는 데 사용하는 기능이다. 별도 백업과 보존 정책을 대신하지는 않는다.
- 실습 대상과 접근 범위를 제한해 다른 운영 서비스와 분리한 네트워크다.
- 브라우저가 보낸 데이터를 서버에서 다시 검사하는 처리다. 화면의 입력 제한만으로 대체할 수 없다.
- 이전 세대의 소프트웨어·설정 조합이다. 학습에는 유용하지만 현재 권장 구성과 구별해야 한다.
- 문제가 발생했을 때 기밀성·무결성·가용성이나 사용자 권한에 생기는 결과다.
04예제로 따라가기
- 가상 저장형 과제: 사용자 A가 댓글에 <b>표본</b>라는 무해한 문자열을 저장하고 B가 나중에 댓글 목록을 조회한다고 정한다. 실제 실습 실행 기록은 아니다.
- 저장 경로: B의 조회 요청에 댓글 입력 자체가 없어도 이전에 저장된 값이 응답에 나타난다. 입력이 현재 요청에만 반사되는 경로와 구별하는 단서다.
- 파서 관찰: 글자 그대로 보여 줄 정책인데 굵게 표시되는 요소가 생성되면 외부 값이 HTML로 해석된 것이다. 이 무해한 표본만으로 스크립트 실행 가능 여부 전체를 입증하지는 않는다.
- 방어·복구: HTML 본문 문맥에 맞는 출력 인코딩을 적용하면 태그 문자 자체가 보여야 한다. 반복 비교 때 DB 댓글도 초기화되는지 확인하며 이 외부 DB까지 복구한다고 가정하지 않는다.
05혼동하기 쉬운 점과 확인 기준
- 와 를 동의어로 취급하면 구성 문제와 웹 앱 문제를 혼동한다.
- 오래된 취약한 이미지의 동작을 최신 ·운영체제·웹 서버 전체에 그대로 적용하지 않는다.
- 실습용 애플리케이션이나 이미지는 이 정적 노트 사이트의 공개 배포 대상이 아니다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
스캔 결과에서 취약점 보고서까지스캔은 상태를 관찰하는 출발점이며 취약점 확정과는 다르다. 범위·관찰 조건·재현 증거·개선 결과를 연결해 판단한다.상세 노트 읽기 →SQL 인젝션: 데이터와 명령의 경계SQL 인젝션은 입력값이 SQL 문법의 일부로 해석될 때 발생한다. 매개변수화와 최소 권한을 중심으로 원인과 방어를 이해한다.상세 노트 읽기 →XSS: 브라우저가 데이터를 코드로 해석할 때XSS는 신뢰하지 않는 데이터가 브라우저의 실행 가능한 문맥에 들어갈 때 생긴다. 출력 위치에 맞는 처리와 안전한 DOM API가 방어의 중심이다.상세 노트 읽기 →
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.